AdSense_BarHorizontal

Mostrando entradas con la etiqueta Que debe saber un programador. Mostrar todas las entradas
Mostrando entradas con la etiqueta Que debe saber un programador. Mostrar todas las entradas

miércoles, 6 de mayo de 2015

Antes de crear un proyecto de software

En esta nueva entrada de DatoByte les quiero enseñar acerca de como "Iniciar tu proyecto de desarrollo de software" teniendo aspectos formales partiendo desde una idea hasta aquellos conocimientos técnicos que deberías saber antes de iniciar, Todo esto mirado desde el punto de vista de un desarrollador de software, cabe resaltar, esta es solo una de las tantas propuestas que puedes encontrar en internet.


Tal vez te pueda interesar: Herramientas para Emprendedores


Para ello iniciemos entonces con los siguientes interrogantes:
  1. ¿Que vas a realizar?
  2. ¿Como lo voy a realizar?
  3. ¿Que conocimientos tengo de lo que voy a realizar?

El objetivo de la Planificación del proyecto de Software es proporcionar un marco de trabajo que permita al gestor de planificación hacer estimaciones razonables de recursos, costos y planificación temporal y esta se logra mediante un proceso de descubrimiento de la información que lleve a estimaciones razonables.

Estas estimaciones se hacen dentro de un marco de tiempo limitado al comienzo de un proyecto de software, y deberían actualizarse regularmente a medida que progresa el proyecto. Además las estimaciones deberían definir los escenarios del mejor caso, y peor caso, de modo que los resultados del proyecto pueden limitarse.

Para ello existen múltiples formas, desde algo rustico hasta algo mas profesional y procedimental, los expertos en el tema comentan que lo ideal es desarrollar un "Modelo de negocio", en este punto los pasos entonces serian: 

Idea >>>Modelo de Negocio>>> proyecto Formal

Ahora bien pasemos de la Idea a el modelo de negocio, una de las modelos de negocios mas usados, es el Modelo Canvas, el cual ha sido muy popular en diversos campos actuales, ademas por así decirlo es una tendencia que ha sido usada por diversos proyectos que hoy en día son considerados exitosos.






Podemos definir con estas 3 preguntas gran parte del inicio de nuestro proyecto de desarrollo de software y para ello planear bien la solución a cada uno de los interrogantes antes mencionados.

Antes de abordar los interrogantes quiero mencionar el concepto de una planeación efectiva de un proyecto de software, la cual depende de una correcta planeación detallada de todos los aspectos de un proyecto de software, anticipando problemas que puedan surgir y preparando con anticipación soluciones tentativas a ellos. Se supondrá que el administrador del proyecto es responsable de la Planeación desde la definición de requisitos hasta la entrega del sistema terminado.


Habiendo definido pautas para poder planear en detalle nuestro proyecto de desarrollo de software, procederíamos entonces a modelar nuestra idea para convertirla en un proyecto la pregunta entonces es ¿como convertir esta idea en un proyecto Formal? 


En esta entrada no profundizaremos acerca del modelo Canvas para ello me permito referenciar la sgte pagina web.

http://www.leanstart.es/business-model-canvas-una-herramienta-eficaz-para-trazar-tu-modelo-de-negocio/

En ella encontraras mas información  acerca de su proceso de elaboración, pues como comente anteriormente teniendo un modelo Canvas Validado Podemos iniciar con mas base la redacción de un proyecto formal.

Volviendo a los interrogantes iniciales el primer interrogante ¿Que vas a realizar? la respuesta comienza con una idea, cabe resalta que las ideas las podemos separar en ideas Innovadoras e ideas Conocidas, Una idea innovadora es en resumidas cuentas crear un producto Nuevo, Mientras que una idea conocida es prácticamente Ofrecer un producto similar a otro que ya esta en el mercado obviamente puntuando ciertas diferencias que resulten significativas al momento de vender tu producto. llevado a términos de desarrollo de software seria crear softwares Nuevos VS softwares parecidos pero Valores agregados.

Dicho lo anterior aun no hemos resuelto nuestro interrogante, ¿Que vas a realizar?, ello nos da la tentativa de comenzar a plantear nuestra idea, sencillamente para este interrogante hay que usar la imaginación y analizar los pro y contras para hacer fluir  esa idea, No hay mejor aliado que la imaginación que ofrece un punto de vista Creativo, adicionando a los análisis de la idea que nos ofrece el punto de vista complementario, la realidad, sin embargo lo ideal de este proceso es pensar de cierta manera en la unión de la propuesta de valor y del la sección de clientes de nuestro modelo canvas (Clientes, relaciones cliente, canales de distribución y PROPUESTA DE VALOR)

"Sentarnos a imaginar no es lo mismo que Pensar y analizar"

A nuestro segundo interrogante ¿Como lo voy a realizar?, Es un tema que muchos desarrolladores de softwares aveces omitimos, Pues tal vez fuimos programados en nuestra cabeza solo para tirar y tirar lineas de código (Que posiblemente no lleguen a ser usadas jamas). Cabe mencionar que "Tenemos que planear cada paso de nuestro proyecto, Cada día a día, Cada linea de Código".  Este interrogante nos conlleva de cierta manera definir la parte de Infraestructura de nuestro modelo canvas (Alianzas, actividades y recursos)

Por ultimo y no menos importante tenemos nuestro tercer interrogante ¿Que conocimientos tengo de lo que voy a realizar?. Este interrogante pretende abarcar una parte mas técnica de nuestro proyecto de software pues en el nos permite hacer una revisión principalmente de 2 aspectos el estado actual e histórico que posiblemente ha tenido nuestra idea, y a su vez el estado actual de los Conocimientos internos acerca del desarrollo de software, En cuanto al primer aspecto podría comentar que todo es cuestión de buscar referencias de nuestra idea, procesos previos y demás con el fin de construir un completo "Estado del arte" acerca de lo que realmente quiero construir, y en cuanto al segundo aspecto sencillamente es cuestión de interiorizar y analizar como me encuentro yo o mi equipo para afrontar el proyecto de desarrollo de software, en ello sugiero el siguiente vinculo de referencia bibliografica:
http://blog.koalite.com/2013/12/cinco-cosas-que-deberias-aprender-para-dedicarte-al-desarrollo-de-software/



Si has llegado hasta esta parte te invito a compartir este post con tus amigos y/o darle +1 y/o hacer un comentario al respecto 


Bibliografia:
http://www.wikilearning.com/articulo/planificacion_de_proyectos-planeacion_y_estimacion_de_proyectos_informaticos/9597-1

http://blog.koalite.com/2013/12/cinco-cosas-que-deberias-aprender-para-dedicarte-al-desarrollo-de-software/


http://www.idearium30.com/5-pasos-para-convertir-una-idea-en-un-negocio-i68

martes, 14 de abril de 2015

Glosario

En esta nueva entrada de DatoByte les quiero exponer diversos conceptos relacionados con programación que a diario como programador nos topamos y aun así los utilizamos e ignoramos el  verdadero significado, si consideras algún concepto relevante y que no se encuentre en este Glosario, te sugiero lo adiciones en los comentarios.

CONCEPTOS RELACIONADOS CON EL COMPUTADOR

Bit: Un bit es un dígito del sistema de numeración binario. Las unidades de almacenamiento tienen por símbolo bit.
Mientras que en el sistema de numeración decimal se usan diez dígitos, en el binario se usan solo dos dígitos, el 0 y el 1. Un bit o dígito binario puede representar uno de esos dos valores: 0 o 1

Byte: Un byte es la unidad fundamental de datos en los ordenadores personales, un byte son ocho bits contiguos. El byte es también la unidad de medida básica para memoria, almacenando el equivalente a un carácter, en otras palabras un byte puede ser considerado un Dato




ASCII: Código Estándar Americano para el Intercambio de Información, Asigna valores numéricos a las letras, números, signos de puntuación y otros símbolos con los que el computador trabaja.

CONCEPTOS BÁSICOS DE PROGRAMACIÓN

Lenguaje Maquina: Son aquellos cuyas instrucciones son directamente entendibles por la computadora y no necesitan traducción posterior para que la CPU pueda comprender y ejecutar el programa. Las instrucciones en lenguaje maquina se expresan en términos de la unidad de memoria más pequeña el bit (dígito binario 0 ó 1).

Lenguaje Ensamblador o de Bajo Nivel: En este lenguaje las instrucciones se escriben en códigos alfabéticos conocidos como mnemotécnicos para las operaciones y direcciones simbólicas.

Lenguaje de Alto Nivel: Los lenguajes de programación de alto nivel (BASIC, pascal, cobol, fortran, etc.) son aquellos en los que las instrucciones o sentencias a la computadora son escritas con palabras similares a los lenguajes humanos (en general en ingles), lo que facilita la escritura y comprensión del programa.

Algoritmo: La solución a cualquier problema de cómputo involucra la ejecución de una serie de acciones en orden especifico. Un procedimiento para resolver un problema en términos de: a) Las acciones a ejecutarse y b) el orden en el cual estas acciones deben ejecutarse se llama algoritmo.

Pseudocódigo: Mezcla de lenguaje de programación y español (o ingles o cualquier otro idioma) que se emplea, dentro de la programación estructurada, para realizar el diseño de un programa. En esencial, el pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos.
Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución a un problema determinado. El pseudocódigo utiliza palabras que indican el proceso a realizar.

WebServices:  Es una tecnología que utiliza un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet. La interoperabilidad se consigue mediante la adopción de estándares abiertos.

XML: Es un lenguaje de marcas desarrollado por el World Wide Web Consortium (W3C) utilizado para almacenar datos en forma legible. Permite definir la gramática de lenguajes específicos (de la misma manera que HTML) para estructurar documentos grandes. A diferencia de otros lenguajes, XML da soporte a bases de datos, siendo útil cuando varias aplicaciones deben comunicarse entre sí o integrar información.

WSDL: Son las siglas de Web Services Description Language, un formato XML que se utiliza para describir servicios Web, WSDL describe la interfaz pública a los servicios Web. Está basado en XML y describe la forma de comunicación, es decir, los requisitos del protocolo y los formatos de los mensajes necesarios para interactuar con los servicios listados en su catálogo. Las operaciones y mensajes que soporta se describen en abstracto y se ligan después al protocolo concreto de red y al formato del mensaje.

SOAP: (siglas de Simple Object Access Protocol) Es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML, tambien considerado como un estandar para manipular determinados WebServices.

REST: (Representational State Transfer) o REST es una técnica de arquitectura software para sistemas hipermedia distribuidos como la World Wide Web. en la actualidad se usa en el sentido más amplio para describir cualquier interfaz web simple que utiliza XML y HTTP

UDDI: Son las siglas del catálogo de negocios de Internet denominado Universal Description, Discovery and Integration. El registro en el catálogo se hace en XML.


Imagen tomada de http://arquivo.devmedia.com.br/


METODOLOGIAS, ESTÁNDARES Y OTROS CONCEPTOS RELACIONADOS CON UN ÁREA DE DESARROLLO DE SOFTWARE


BI - Bussines Inteligence: Es la habilidad para transformar los datos en información, y la información en conocimiento,  Abarca la comprensión del funcionamiento actual de la empresa, bien como la anticipación de acontecimientos futuros, con el objetivo de ofrecer conocimientos para respaldar las decisiones empresariales
Imagen tomada de http://www.nekosphera.com/

BPM: Es una metodología corporativa y disciplina de gestión, cuyo objetivo es mejorar el desempeño (eficiencia y eficacia) y la optimización de los procesos de negocio de una organización, a través de la gestión de los procesos que se deben diseñar, modelar, organizar, documentar y optimizar de forma continua. Por lo tanto, puede ser descrito como un proceso de optimización de procesos.

SOA: Arquitectura Orientada a Servicios, es un paradigma de arquitectura para diseñar y desarrollar sistemas distribuidos. Permite la creación de sistemas de información altamente escalables que reflejan el negocio de la organización, a su vez brinda una forma bien definida de exposición e invocación de servicios (comúnmente pero no exclusivamente servicios web), lo cual facilita la interacción entre diferentes sistemas propios o de terceros.

SaaS: Software como Servicio, es un modelo de distribución de software donde el soporte lógico y los datos que maneja se alojan en servidores de una compañía de tecnologías de información y comunicación (TIC), a los que se accede via Internet desde un cliente. La empresa proveedora TIC se ocupa del servicio de mantenimiento, de la operación diaria y del soporte del software usado por el cliente.

SCRUM: Es un modelo de referencia que define un conjunto de prácticas y roles, y que puede tomarse como punto de partida para definir el proceso de desarrollo que se ejecutará durante un proyecto, dividiendo el proyecto en pequeñas momentos del tiempo denominados Sprint.


RUP: El Proceso Racional Unificado es un proceso de desarrollo de software , constituye la metodología estándar más utilizada para el análisis, diseño, implementación y documentación de sistemas orientados a objetos.
El RUP no es un sistema con pasos firmemente establecidos, sino un conjunto de metodologías adaptables al contexto y necesidades de cada organización.

CMMI: Es una guía que ayuda en la mejora de procesos, pero como en cualquier receta cada quién le puede poner de su propio sazón. El enfoque del modelo permite evolucionar desde un proceso en crisis  a un proceso controlado, estandarizado, medido y optimizado que sienta las bases de la mejora continua y permite a la organización adoptar nuevas prácticas sobre un proceso estable y controlado que está institucionalizado.

PMBOK: La Guía de los fundamentos de la dirección de proyectos (más conocida como PMBOK®) es el estándar más ampliamente reconocido para manejar y administrar proyectos. Resulta curioso que este texto tenga la fama de ser un manual para dirigir proyectos, o bien que se trata de un texto rigorista y dogmático. En realidad, se trata de una obra realizada por personas con un agudo sentido práctico, y que tiene incorporada la concepción de que un proyecto exitoso va a ser resultado de la colaboración (y los conflictos) de todo el personal.

COBIT: Es una guía de mejores prácticas presentado como framework, dirigida al control y supervisión de tecnología de la información (TI). Tiene una serie de recursos que pueden servir de modelo de referencia para la gestión de TI, incluyendo un resumen ejecutivo, un framework, objetivos de control, mapas de auditoría, herramientas para su implementación y principalmente, una guía de técnicas de gestión.

ITIL: Es un conjunto de conceptos y buenas prácticas para la gestión de servicios de tecnologías de la información, el desarrollo de tecnologías de la información y las operaciones relacionadas con la misma en general. ITIL da descripciones detalladas de un extenso conjunto de procedimientos de gestión ideados para ayudar a las organizaciones a lograr calidad y eficiencia en las operaciones de TI. Estos procedimientos son independientes del proveedor y han sido desarrollados para servir como guía que abarque toda infraestructura, desarrollo y operaciones de TI.

TOGAF: Es un esquema (o marco de trabajo) de Arquitectura Empresarial que proporciona un enfoque para el diseño, planificación, implementación y gobierno de una arquitectura empresarial de información. Esta arquitectura está modelada, por lo general, en cuatro niveles o dimensiones: Negocios, Tecnología (TI), Datos y Aplicaciones. Cuenta con un conjunto de arquitecturas base que buscan facilitarle al equipo de arquitectos cómo definir el estado actual y futuro de la arquitectura.



OTROS CONCEPTOS

GUI: Interfaz Gráfica de usuario, se llama GUI a el conjunto de componentes visibles al usuario que usa cualquier programa, estos permiten la interacción con el sistema, Puede denominarse como componentes de entrada y salida de información.

Cluster: En informática un Cluster se aplica a los conjuntos o conglomerados de computadoras unidos entre sí normalmente por una red de alta velocidad y que se comportan como si fuesen una única computadora.
En el mundo laboral un Cluster es  Una agrupación de empresas e instituciones relacionadas entre sí, pertenecientes a un mismo sector o segmento de mercado, que se encuentran próximas geográficamente y que colaboran para ser más competitivos

UML: Lenguaje Unificado de Modelado es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad.
Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio, funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y compuestos reciclados.
Caso de Uso: Es una descripción de los pasos o las actividades que deberán realizarse para llevar a cabo algún proceso. Los personajes o entidades que participarán en un caso de uso se denominan actores. En el contexto de ingeniería del software, un caso de uso es una secuencia de interacciones que se desarrollarán entre un sistema y sus actores en respuesta a un evento que inicia un actor principal sobre el propio sistema. Los diagramas de casos de uso sirven para especificar la comunicación y el comportamiento de un sistema mediante su interacción con los usuarios y/u otros sistemas. O lo que es igual, un diagrama que muestra la relación entre los actores y los casos de uso en un sistema. Una relación es una conexión entre los elementos del modelo, por ejemplo la especialización y la generalización son relaciones. Los diagramas de casos de uso se utilizan para ilustrar los requerimientos del sistema al mostrar cómo reacciona a eventos que se producen en su ámbito o en él mismo.

Requisito Funcional: Define una función del sistema de software o sus componentes. Una función es descrita como un conjunto de entradas, comportamientos y salidas. Los requerimientos funcionales pueden ser: cálculos, detalles técnicos, manipulación de datos y otras funcionalidades específicas que se supone, un sistema debe cumplir. Los requerimientos de comportamiento para cada requerimiento funcional se muestran en los casos de uso. Son complementados por los requisitos no funcionales, que se enfocan en cambio en el diseño o la implementación.
Como se define en la ingeniería de requisitos, los requisitos funcionales establecen los comportamientos del sistema.

Requisito No funcional: es, en la ingeniería de sistemas y la ingeniería de software, un requisito que especifica criterios que pueden usarse para juzgar la operación de un sistema en lugar de sus comportamientos específicos, ya que éstos corresponden a los requisitos funcionales. Por tanto, se refieren a todos los requisitos que no describen información a guardar, ni funciones a realizar.
Algunos ejemplos de requisitos no funcionales típicos son los siguientes:


Rendimiento, disponibilidad, seguridad, accesibilidad, usabilidad, estabilidad, portabilidad,
costo, operatividad, interoperabilidad, escalabilidad, concurrencia, mantenibilidad, interfaz



Bueno eso es todo en este glosario, espero les sea de muchísima ayuda, en especial en momentos que quieras pegar un repaso a los conceptos que rodean el mundo de la programación.




NOTA:
Existen muchos mas conceptos, por el momento he adicionado aquellos mas comunes en el mundo del desarrollo de software, si consideras algún concepto relevante y que no se encuentre en este Glosario, te sugiero lo adiciones en los comentarios.

Bibliografia:
Mucha de la información anterior fue Obtenida en la biblioteca de Wikipedia seleccionando la información mas relevante, si deseas ampliar tus conocimientos, te recomiendo busques cada concepto y hagas comparaciones con otros nuevos conceptos.