jueves, 16 de febrero de 2012

Programación estructurada.



La programación estructurada es una técnica de escritura de programas informáticos la cual utiliza para desarrollar la solución de los problemas tres estructuras básicas:
  1. Secuencia
  2. Selección
  3. Iteración
El uso de estas estructuras hace que otras como GOTO, EXIT o FUNCTION se vuelvan obsoleto por lo que el uso de “instrucciones de transferencia incondicional” es remplazado por las tres estructuras mencionadas.
El teorema del programa estructurado demuestra que la solución a todo problema puede ser hallada mediante el uso de tres estructuras de control siguientes:

Estructura secuencial

Se dice que una estructura de programa es secuencial cuando todas sus instrucciones son ejecutadas una detrás de otra y en ningún momento una instrucción no se ejecuta hasta el termino de la anterior.

Estructura selectiva

En este tipo de estructuras el programa puede tener dos caminos posibles para llegar a la mejor solución, pero al ejecutarse el algoritmo llegará a un punto donde deba decidir cual sera el que lo lleve a la solución óptima; esto mediante el cumplimiento de condiciones lógicas. Cabe mencionar que de las dos opciones el programa solo puede tomar uno; el que sea mas viable.

Estructura iterativa

Este tipo de estructura plantea una o varias operaciones que se ejecutaran una y otra vez hasta que se cumpla una condición que la detendrá y mostrara un resultado. El número de iteraciones estará determinado por en cambio en la condición la cual se encuentra dentro del mismo bucle.
Básicamente se pueden escribir dos tipos de iteraciones, las llamadas “mientras que” y las llamadas “hasta que”. La diferencia entre ellas es que la primera realiza la comprobación antes de realizar el proceso y el segundo realiza el proceso y después comprueba la condición y decide si volver hacer el proceso o continuar el camino.

Fases del diseño de un programa estructurado

Para escribir programas con un algoritmo estructurado es necesario seguir tres fases



Descomposición: Divide el problema en partes mas pequeñas que resolverá cada una de modo independiente .
Jerarquización de módulos: Cada parte es acomodada en un arreglo en forma de pirámide donde la parte superior representa el problema global y las inferiores las partes en las que descompuso para ser resuelto en orden de importancia.
Independencia: Determina en que grado la resolución de un modulo o parte afecta al otro.
Acoplamiento: Define que tan relacionado esta un modulo con el otro, para la correcta resolución es deseable que el acoplamiento sea menor.
Cohesión: Se define como la medida de fuerza existente entre las sentencias o grupos de sentencias de un módulo.

Ventajas del diseño estructurado

  • Los programas son sencillos de entender ya que al no existir los saltos con GOTO se leen de arriba hacia abajo de forma secuencial.
  • Las estructuras están fuertemente ligadas entre si.
  • El mantenimiento de estos códigos es muy bajo.
  • Los módulos son considerado auto-explicativos así que su depuración es sencilla.
  • Al no utilizar las estructuras GOTO no existen saltos del programas lo que los hacen mas rápidos de ejecución y con mayor rendimiento

Desventajas del diseño estructurado

Con el paso del tiempo y tras varias depuraciones y exenciones el código fuente se torna bastante grande haciéndolo demasiado difícil de manejar.
Resulta complicado el manejo de gráficos por lo que se tiende a mezclar programas estructurados con el principio de modularidad.

domingo, 12 de febrero de 2012

Soporte técnico


El soporte técnico es un servicio orientado a otorgar ayuda con el software y el hardware de una computadora y en general de cualquier dispositivo electrónico o mecánico. El fin de esta ayuda es la de resolver problemas por parte del usuario.
Este soporte es brindado por parte de las empresas que construyen los dispositivos o por parte de terceros que venden sus servicios para este objetivo; en las empresas el soporte técnico para las maquinas de la misma es brindado generalmente por el departamento que ellas misma crean para este objetivo y no verse en la necesidad de contratar a otra empresa.

Objetivo

El objetivo del soporte técnico es el de solucionar problemas entre los usuarios y los dispositivos que utiliza. Esto es pensando para que el usuario se enfoque a su trabajo y no a la complejidad que sobreviene del entendimiento a fondo de su herramienta. Por otra parte el soporte técnico tiene como finalidad la de mantener los equipos en óptimo estado para aminorar los retrasos relacionados con la perdida de tiempo por los equipos descompuestos o con problemas por parte del usuario en la interacción con su maquina.

Tipos de soporte técnico

En soporte técnico conoce tres niveles de servició, dicha división se hace por la profundidad de su alcance y de la especialización del técnico que realiza el soporte y en ocasiones el medio por el que lo hace ya sea por correo electrónico, vía telefónica, presencial o remota.

Soporte de nivel 1 (tier 1)

Este es el nivel con el que todo usuario que requiera soporte técnico comienza su búsqueda de una solución. Una de las principales funciones de este nivel es la de recolectar toda la información que sea posible por parte del usuario para con esta determinar y delimitar el problema de forma mas precisa mediante el análisis de los síntomas. Con toda la información posible el técnico comienza a realizar de forma ordenada un catalogo de posibles soluciones que es determinado con el análisis anterior. Esto es en si lo que ya podemos nombrar como soporte técnico. Esto incluye incidencia en la resolución de lineas físicas, problemas comunes de configuración, posible desconexión del equipo, instalación y reinstalación del software y sus aplicaciones utilizadas, navegación por los menús del software e incluso ayuda sobre el funcionamiento del mismo si es que el usuario requiere hacer determinada tarea para la que el software esta pensado pero desconoce como hacerlo.
Es sabido que el personal de este nivel es considerado como usuario medio a alto en cuanto a sus conocimientos se refiere y que sus capacidades do incluyen todas las posibilidades en las que un usuario puede requerir o presentar como problema pero en este nivel se atienden entre el 70 al 80% de los problemas de forma satisfactoria sin la necesidad de recurrir al uso de otro nivel de soporte. Es por esto la importancia que dan tantas empresas en este nivel y usualmente se destinan buena parte de recursos en mantener este nivel.
Este nivel de soporte también es aplicado a otros sectores como en la banca donde es conocido como call center donde resuelven incidencias acerca de los productos que ofrece la empresa para la que trabajan y que no tienen nada que ver con cuestiones técnicas si no con el uso de productos financieros. Aquí el operador que contesta la linea necesita un buen conocimiento de los términos sobre el producto.
Generalmente estos servicios de soporte están disponibles 24 horas al día 7 días a la semana ya que como se menciono el porcentaje de casos resueltos es muy alto y en el caso de bancos e igual en telefonía el soporte técnico de nivel 1 se refiere a la cancelación de tarjetas o teléfonos.

Soporte de nivel 2 (tier 2)

Los casos que no pueden ser resueltos (residual mente entre 20 y 30%) en el nivel anterior son etiquetados y se pasan los técnicos de nivel dos que tienen un nivel mayor y mas preciso sobre el tema o que realizan gestiones mas físicas o mas extensas.
En este nivel se realizan recuperaciones de datos, cambios de equipo, reseteo de computadoras para ponerla como de fabrica.
El caso particular del cambio de equipo en este nivel no siempre se refiere a que estos ya no funcionen del todo, si no que son recogidos para su reparación con el objetivo de que el usuario continué su trabajo sin mayores demoras causadas por las fallas especialmente en ambientes empresariales donde las perdidas de tiempo se reflejan en perdidas económicas.

Soporte de nivel 3 (tier 3)

Lo mas común en los sistemas de mantenimiento es que estos se gestionen en un máximo de tres niveles siendo este; el tercero; el último y el que tiene mayor capacidad de resolver un problema pues no pudieron ser resueltos por los dos niveles anteriores.
Por una parte los técnicos de nivel 3 tienen como responsabilidad dar apoyo directo a los técnicos de nivel 1 y nivel 2 y por otra parte su finalidad es la de diseñar los algoritmos para la solución de problemas para los niveles anteriores para nuevos equipos y tecnologías.
La interacción de estos técnicos con el usuario es poca y generalmente esta enfocada a determinar si existe una posible solución o se opta por el camino del remplazo definitivo cuando la implementación resulta ser tan problemática que este camino es el mas razonable.
Otra de las funciones de este nivel es la de mantener interacción con los fabricantes de equipo para reportar incidencias comunes muy frecuentes para que puedan implementar una solución desde fabrica; si es posible; y así evitar costos elevados en el futuro por cambios de equipos; incluso se puede llegar al punto en que sea preferible un rediseño del equipo ya sea de forma física o a nivel software. Un ejemplo reciente de esto fue el iPad I que no soportaba funciones multitarea para lo que el fabricante se vio orillado a publicar un parche para permitirle al SO esta función. Lo mismo se vio con el iPhone; del mismo fabricante; donde su diseño puso la antena en un lugar donde es normal tener contacto con la mano aumentando la incidencia de aparatos dañados por lo que se opto por el rediseño ya que la cantidad de teléfonos que eran reportados como irreparables fue muy grande.

Soporte de nivel 4 (tier 4)

Este nivel de soporte en las organizaciones o en los fabricantes de software y hardware se refiere a otro nivel de escalonado donde se opta por capacitar a un tercero, mayoritariamente algún vendedor y/o distribuidor para dar servicio con mano de obra calificada, o dicho en otros términos como Service Level Agreement (SLA) donde el usuario puede acudir para solucionar sus problemas como si lo hiciese con el fabricante mismo. El objetivo de este nivel es que para una empresa que fabrique por ejemplo computadoras, le resulta poco rentable establecer una red de servicio de primera mano y utiliza la de otro por motivos de llegar a un mayor número de clientes o en lugares donde son muy pocos y alguien ya lo hace y puede cumplir con los requisitos de calidad tanto en instalaciones como en capacidad técnica. Muchos centros de servicio son propiedad de particulares que se manejan a modo de franquicias y que respetan los términos dela garantía original.

Importancia del soporte técnico

El soporte técnico refleja un costo a las organizaciones si, pero por otro lado se ve obligado a prestarlo ya que para que un producto sea atractivo necesita contar con el respaldo de una garantía en cualquier momento por un tiempo establecido. Esto es por parte del fabricante, por parte del consumidor se puede decir que la mayoría de las personas no están capacitadas para resolver todos sus problemas relacionados a los conocimientos tecnológicos que requieren para dar solución a muchos de sus problema no relacionados con su trabajo en si; un contador puede hacer las finanzas de una empresa mediante el uso de una software para esto, pero si la base datos donde guarda todos sus registros se cae necesitara de una persona que le ayude a restablecer todo en el menor tiempo posible.
Lo mismo pasa con los equipos en su hardware, el uso diario puede ocasionar problemas de configuración al igual que estamos expuestos a percances por descargas que dañen algún periférico o a toda la computadora, es cierto que podemos intentar arreglar las cosas por nuestra cuenta pero no siempre podemos hacerlo ya que el nivel de conocimiento en la tecnología puede ser insuficiente para lo que necesitamos en ese momento así que recurrimos a consultar a alguien o usar los servicios de un tercero que se dedique a esto.
Por otra parte cuando los ordenadores son para trabajo el tener un retardo por que tiene algún problema puede reflejarse; como ya se menciono; en perdidas de dinero por los retrasos laborales, y se requiere retomar la normalidad lo mas pronto posible y en la mejor condición y es entonces que recurrimos a un servicio de soporte técnico para ello.
En resumen el soporte técnico tiene una gran importancia pues es quien puede darnos una solución en el momento que algo no funciona y nos evita perder información o vernos en la necesidad de cambiar un equipo si puede arreglarse.
Todo esto se refleja en disminución de costos relacionados con el mal funcionamiento de equipos y aparatos y de igual forma para servicios

sábado, 28 de enero de 2012

Divide y vencerás

No se trata del tipo de una estrategia militar ni de como resolver problemas familiares por una herencia. Divide y vencerás en algoritmos se refiere a una estrategia para resolver problemas matemáticos, recordemos que en un principio las computadoras fueron estudiadas y desarrolladas por físicos y matemáticos por lo que era obvio aplicar la forma en que ya resolvían cuestiones de álgebra (por mencionar una). También en un principio las computadoras fueron vistas precisamente para la automatización de cálculos que realizados por personas tomaban meses o incluso años u otros que requerían de rapidez como en la balística.

Es común ver en álgebra tomamos pequeñas partes de una ecuación para resolverlas por una parte, ya sea reduciendo si es una fracción, cancelando exponentes cuando se puede o aplicando una identidad trigonométrica y con esto simplificar la ecuación.

Es entonces que dividimos la ecuación en partes mas pequeñas y las resolvemos por separado, sumamos los resultados y obtenemos una solución satisfactoria y por eso decimos "Divide y vencerás".

miércoles, 25 de enero de 2012

Analisis de algoritmo

Bien puedo decir que el análisis del algoritmo es el paso mas importante para hacer un programa, de esto partimos para plantear bien un algoritmo y que este tenga el mejor orden.

En este paso podemos dejar de lado compiladores y editores gráficos. El análisis se refiere a estudiar el proceso para el cual queremos hacer un programa, ver las variables del proceso y de que tipo son así como plantear los cálculos que se requieran.

Otra importancia es que al realizar un análisis del resultado podemos definir cual seria el mejor lenguaje de programación que utilizaremos y si es que se requiere una base de datos para este, al igual que la plataforma que lo soportará.

Ahora bien, Aquí es necesario pensar en como resolver cada problema, si es cierto que mediante el uso de una computadora es posible simplificar mucho del trabajo rutinario solo que, pensar como programador también es pensar en un ordenador como una licuadora glorificada. La razón de esto es que una computadora no puede resolver un problema por si sola, es necesario decirle como hacerlo y como hacerlo bien.

Es entonces que un buen análisis del algoritmo dará un buen programa. Un buen comienzo es definir el problema, después plantear subproblemas mas pequeños. Con esto determinar las variables que intervienen y su interacción entre ellas para la solución final.


lunes, 23 de enero de 2012

Diseño de algoritmos


Hoy voy a escribir de forma breve lo que es el diseño de algoritmos. Ya mas adelante extenderé cada parte del tema pues este tema da para mucho mas que una entrada de blog

Conceptos básicos

En principio describiremos de forma general las técnicas para resolver algoritmos, estas no son otra cosa que estrategias utilizadas en la resolución de problemas que, originalmente fueron planteadas por matemáticos para su propio campo, y como estos mismos investigadores fueron los pioneros de la computación junto con físicos, aplicaron los mimos criterios para resolver los algoritmos. Cabe mencionar que en su principio la computación fue enfocada a la resolución de problemas matemáticos orientados a asuntos bélicos como la balística y que después se implementó el uso de las máquinas a cuestiones financieras; mismas que convergían en la solución de números.
Estas técnicas fueron nombradas de acuerdo al procedimiento que seguían, y las principlaes son:
  • Algoritmos voraces
  • Divide y vencerás
  • Programación dinámica
  • Vuelta atrás
  • Ramificación y poda

Niveles de abstracción para la construcción de algoritmos.

La construcción de algoritmos necesita de tres niveles de abstracción; es decir; son tres los pasos necesarios para su construcción. Estos son:
  1. Análisis
  2. Diseño
  3. Implementación

Análisis

Consiste en la recopilación de toda la información necesaria para el algoritmo, variables que lo rodean, el proceso que le demos a estas, y la salida que queremos encontrar.
Es aquí donde los procesos pueden identificarse como operaciones que se aplican a las variables del problema. Y se perfila el resultado deseado.

Diseño

Para esta etapa ya se tiene identificados y delimitado el problema, se conoce las variables involucradas y se sabe el los valores de salida deseados; no resueltas sino más bien que debemos esperar de estas; con lo cual se comienza a perfilar la solución mediante el planteamiento de la hipótesis, se modela el algoritmo mediante la aplicación de estructuras definidas para los algoritmos y se comienza hacer pruebas de su uso mediante laspruebas de escritorio

Implementación

En este paso ya se comienza la programación en un lenguaje adecuado al algoritmo basados en la solución que se tiene modelada.

Estructuras básicas de un algoritmo

En la implementación de algoritmos se puede observar la presencia de comportamientos clásicos y que están definidos a través de modelos previamente definidos.
Las estructuras típicas que podemos definir son:
  • Ciclos
  • Contadores
  • Acumuladores
  • Condicionales
  • Interruptores

Ciclos

Estas estructuras hacen que el algoritmo se repita de forma iterativa en función de una condición cumplida en un momento determinado.
Existen dos tipos de ciclos. Los que se ejecutan “mientras que” y los que se ejecutan “hasta que”

Mientras que:

Este realiza la verificación de la condición antes de ejecutar una instrucción, así es que, si se cumple la condición puede realizar su función de otro modo salta a otro paso. Al terminar el proceso vuelve hacer la verificación.

Hasta que

Este ciclo realiza su propio proceso y después hace la verificación de la condición para que este se ejecute y esta le dice si debe volver a realizar el proceso o seguir con el algoritmo.
Ambas iteraciones tienen en común que se debe cumplir cierta condición para realizar su proceso.

Contadores

Esta estructura también realiza iteraciones de las instrucciones por un momento conocido. Esta estructura sufre incrementos o decrementos del valor asignado a ella y se ejecutará mientras no se cumpla su condición.

Acumuladores

Estos guardan valores crecientes o decrecientes a lo largo de la ejecución del algoritmo. Esto debido a que los primeros y últimos valores así como los intermedios son relevantes para la solución o forman parte de ella.

Condicionales

Esta estructura tiene como fin que se realice o no cierta parte del código de acuerdo a una condición definida. Esto lo hace si se cumple una condición se ejecuta una parte del código si no se ejecuta otra.

Interruptores

Estas estructuras disparan un código o parte de uno si se cumple una condición o evento sin hacer incrementos o decrementos, solo si se cumple o sucede una condición.

Estrategias de diseño de algoritmos

Toda modelación de un algoritmo debe caer o se debe diseñar por una de estas estrategias para la resolución de un problema.

Algoritmos voraces

Estos se utilizan para la solución de problemas de optimización, son sencillos de programar y pueden encontrar una solución en un tiempo corto.

Divide y vencerás

Toma el problema y lo divide en partes más pequeñas y por ende más sencillas del mismo. La solución la encuentra haciendo una sumatoria do todas estas partes pequeñas.

Programación dinámica

Defina sub-problemas superpuestos y sub-estructuras optimas, buscan soluciones óptimas del problema en su conjunto.

Vuelta atrás

Toma un valor del conjunto de posibles soluciones posibles al problema y lo evalúa para ver si es la solución deseada. Si se comprueba que este valor no es el mejor regresa al punto donde tomo la variable para evaluarla y elige el valor siguiente, Esto lo realizará hasta que encuentra un valor satisfactorio.

Ramificación y poda

Su estrategia es muy similar a vuelta atrás, solo que se diferencia en que puede ejecutar un conjunto de posibles soluciones a la vez y no hacer esto de una en una. De este proceso puede discriminar a un conjunto de posibles soluciones y descartar (poda) los valores que no satisfacen al algoritmo. Realiza una segunda evaluación de los valores restantes y descarta los menos óptimos. El proceso se ejecuta hasta que se obtiene un valor que resuelva el problema y se pueda determinar a alguno como el más óptimo.

sábado, 21 de enero de 2012

Ciclos de desarrollo de los sistemas


El ciclo de desarrollo de los sistemas o ciclo de vida de los sistemas (SDLC: Systems Devetopment Life Cycle) es un enfoque por etapas de análisis y de diseño, que postula que el desarrollo de los sistemas mejora cuando existe un ciclo específico de actividades del analista y de los usuarios.

En general, los analistas no están de acuerdo respecto al número exacto de etapas que conforman el ciclo de desarrollo de los sistemas; sin embargo, se reconoce la importancia de su enfoque sistemático. Se dividirá el ciclo de vida en siete etapas, que aunque se presentan de manera discreta, nunca se llevan a cabo como un elemento Independiente. En lugar de ello. se realizan al mismo tiempo diversas actividades, y éstas llegan a repetirse. Por ello es de mayor utilidad suponer que e! ciclo de desarrollo de los sistemas transcurre en etapas (con actividades en acción que luego cesan poco a poco) y no como elementos separados.

Identificación de problemas, oportunidades y objetivos

 

En esta primera etapa del ciclo de desarrollo de los sistemas, el analista se involucra en la identificación de los problemas, de las oportunidades y de los objetivos. Esta fase es crucial para el éxito del resto del proyecto, pues nadie estará dispuesto a desperdiciar su tiempo dedicándolo al problema equivocado.
La primera etapa requiere que el analista observe de forma objetiva lo que ocurre en una empresa. Luego, en conjunto con los otros miembros de la organización hará notar los problemas. Muchas veces esto ya fue realizado previamente: y por ello. es que se llega a invitar al analista.

Las oportunidades son acuellas situaciones que el analista considera que pueden perfeccionarse mediante el uso de los sistemas de información computarizados. Al aprovechar las oportunidades, la empresa puede lograr una ventaja competitiva o llegar a establecer un estándar industrial.

La identificación de objetivos también es un componente importante de la primera fase. En un comienzo, el analista deberá descubrir lo que la empresa intenta realizar, y luego estará en posibilidad de determinar si el uso de los sistemas de información apoyaría a la empresa para alcanzar sus metas, el encaminarla a problemas u oportunidades específicas.

Determinación de los requerimientos de información

 

La siguiente etapa que aborda el analista, es la determinación de los requerimientos de información a partir de los usuarios particularmente involucrados. Para identificar los requerimientos de información dentro de ¡a empresa, pueden utilizarse diversos instrumentos, los cuales incluyen: el muestreo, el estudio de los datos y formas usadas por la organización, la entrevista, los cuestionarios: la observación de la conducta de quien toma las decisiones, asi como de su ambiente: y también el desarrollo de prototipos.
En esta etapa el analista hace todo lo posible por identificar qué información requiere el usuario para desempeñar sus tareas. Puede ver, cómo varios de los métodos para establecer las necesidades de información, lo obligan a relacionarse directamente con los usuarios. Esta etapa sirve para elaborar la imagen que el analista tiene de la organización y de sus objetivos. En ocasiones, se llegan a concluir sólo las primeras dos etapas del ciclo de desarrollo de los sistemas.

Análisis delas necesidades del sistema

 

La siguiente etapa que ejecuta el analista de sistemas consiste en analizar las necesidades propias del sistema. Una vez más, existen herramientas y técnicas especiales que facilitan al analista la realización de las determinaciones requeridas. Estas incluyen el uso de los diagramas de flujo de datos (DFD)que cuentan con una técnica estructurada para representar en forma gráfica la entrada de datos de la empresa, los procesos y la salida de la información. A partir del diagrama de flujo de datos se desarrolla un diccionario de datos que contiene todos los elementos que utiliza el sistema, así como sus especificaciones, si son alfanuméricos, descripción, clave primaria, entre otros.
Durante esta fase el analista de sistemas también analiza las decisiones estructuradas por realizar, que son decisiones donde las condiciones, condiciones alternativas, acciones y reglas de acción podrán determinarse. Existen tres métodos para el análisis de las decisiones estructuradas: el lenguaje estructurado (en nuestro caso el español), las tablas de decisión y los árboles de decisión.

No todas las decisiones en las empresas se encuentran estructuradas; no obstante, es importante que las comprenda el analista de sistemas. Las decisiones semi-estructuradas (decisiones que se toman bajo nesgo) con frecuencia se apoyan en los Sistemas de Toma de Decisiones. Cuando analiza las decisiones semi-estructuradas. el analista las examina de acuerdo con el grado de complejidad del problema y con el número de criterios considerados al llevar a cabo las decisiones.

El análisis de decisiones de criterio múltiple (aquellas decisiones donde numerosos factores tienen que equilibrarse) también es parte de esta etapa. Se disponen de muchas técnicas para e' análisis de decisiones de criterio múltiple; incluyendo entre otras, e! proceso de intercambio y la aplicación de métodos de ponderado.

A esta altura del ciclo de desarrollo del sistema, el analista prepara una propuesta del sistema que resume todo lo que ha encontrado, presenta un análisis costo / beneficio de las alternativas y plantea las recomendaciones (si es que existen) de lo que deberá realizarse. Si la dirección acepta alguna de las recomendaciones, el analista procederá de acuerdo con ella.

Diseño del sistema recomendado

 

En esta etapa del ciclo de desarrollo de los sistemas, el analista de sistemas usa la información que recolectó con anterioridad y elabora el diseño lógico del sistema de Información. El analista diseña procedimientos precisos de captura de datos, con el fin de que los datos que se introducen al sistema sean los correctos. Ei analista también diseña accesos efectivos al sistema de información, mediante el uso de las técnicas de diseño de formularios y de pantallas.

Una parte del diseño lógico del sistema de información es el diseño de la interfaz con el usuario. La interfaz conecta al usuario con el sistema, y evidentemente, es de suma importancia. Serían ejemplos de interfaces para el usuario: el uso del teclado para introducir preguntas o respuestas, el uso de menús en la pantalla, con las opciones que tiene el usuario, el uso de dispositivos como el ratón (mouse) y muchos otros.

La etapa del diseño también incluye e! diseño de los archivos o la base de datos que almacenará aquellos datos requeridos por quien toma las decisiones en la organización. Una base de datos bien organizada es fundamental para cualquier sistema de información. En esta etapa, el analista diseña la salida (en pantalla o impresa) hacia el usuario, de acuerdo con sus necesidades de información.

Desarrollo y documentación del software

 

En esta etapa del ciclo de desarrollo de los sistemas, el analista trabaja con los programadores para desarrollar todo el software original que sea necesario. Dentro de las técnicas estructuradas para el diseño y documentación de! software se tienen: el método HIPO, los diagramas de flujo Nassi-Schneiderman, ios diagramas Warnier-Orr y el pseudocódigo. Aquí es donde, el analista de sistemas transmite al programador los requerimientos de programación.

Durante esta fase, el analista también colabora con los usuarios para desarrollar la documentación indispensable del software, incluyendo los manuales de procedimientos. La documentación le dirá al usuario como operar el software, y así también, qué hacer en caso de presentarse algún problema.

Pruebas y mantenimiento del sistema

 

El sistema de información debe probarse antes de utilizarlo. El costo es menor si se detectan los problemas antes cié la entrega del sistema. El programador realiza algunas pruebas por su cuenta, otras se llevan a cabo en colaboración con el analista de sistemas. En un principio, se hace una serie de pruebas, con datos tipo, para identificar las posibles fallas del sistema: más adelante, se utilizarán los datos reales.

El mantenimiento del sistema y de su documentación empiezan justamente en esta etapa: y después, esta función se realizará de forma rutinaria a lo largo de toda la vida del sistema. Las actividades de mantenimiento integran una buena parte de la rutina del programador, que para las empresas llegan a implicar importantes sumas de dinero. Sin embargo, el costo del mantenimiento disminuye de manera importante cuando el analista aplica procedimientos sistemáticos en el desarrollo de los sistemas.

Implantación y evaluación del sistema

 

En esta última etapa del desarrollo del sistema, el analista ayuda a implantar el sistema de información. Esto incluye el adiestramiento que el usuario requerirá. Si bien, parte de esta capacitación la dan las casas comerciales, la supervisión del adiestramiento es una responsabilidad del analista de sistemas. Más aún, el analista necesita planear la suave transición que trae consigo un cambio de sistemas.

Aunque la evaluación del sistema se plantea como parte integrante de la última etapa del ciclo de desarrollo de los sistemas; realmente, la evaluación toma parte en cada una de las etapas. Uno de los criterios fundamentales que debe satisfacerse, es que ei futuro usuario utilice el sistema desarrollado.

jueves, 19 de enero de 2012

Historia de los sistemas operativos


Década de 1940.

A finales de esta década se le puede considerar como el nacimiento de la primera generación de computadoras, donde se accedía a ellas de forma directa mediante micro-interruptores por los cuales se programa las funciones que realizarían en la memoria. Esto se realizaba si algún orden establecido como un estándar. En este momento de la historia no existía un sistema operativo por lo que los programadores hacían su trabajo sin ayuda externa, en pocas palabras en lenguaje máquina.

Década de 1950.

En esta década nacen los sistemas operativos con conceptos como el monitor residente, el proceso por lotes y almacenamiento temporal.

Década de 1960.

En esta década el avance fue muy grande produciendo cambios sumamente notorios para lo que se venía conociendo como lo fue la multiprogramación permitiendo que cuando la CPU ejecutará un operación podía pasar a ejecutar otra operación sin esperar a terminará la primera. Multiprocesador, esto evitaba que al ejecutarse dos proceso distintos entraran en conflicto al escribir o leer en memoria.

Década de 1970.

En esta década ya existían Atlas Supervisor y el OS/360 esta década marca el inicio de UNIX siendo este en el único SO escrito en un lenguaje de alto nivel hasta el momento. También se desarrolla el SO MULTIX y el BDOS pero todos mostraban los mismos inconvenientes; eran muy grandes y complejos. A pesar de ser un medio entre el usuario y la máquina para interactuar con ellos el usuario requería de grandes conocimientos de programación sin mencionar que el gran consumo de recursos limitaba su alcance.

Década de 1980.

Con la creación de los circuitos integrados sobrevinieron números avances en la computación como el nacimiento de C++ y el lenguaje Eiffel dentro del paradigma de orientación a objetos. Los sistemas operativos predominantes eran el MSDOS que Microsoft escribió para los ordenadores IBM y todos los que utilizaron el Intel 8088 y el UNIX para el Motorola 68000.
En 1984 aparece el Mc OS con una interface (GUI), multitareas y mouse. Por su parte Microsoft compra el QDOS que tras realizar unas adaptaciones se convierte en la primera versión del MSDOS y que a mediados de la década este forma parte de Windows que en estos años solo era una interfaz gráfica.

Década de 1990.

Microsoft mejora su Windows pero no es hasta su versión ME (Millenium) que deja de ser una interfaz gráfica y es un sistema operativo completo, antes de este cambio la versión 98 se consideró como la más rápida y dinámica de la década y después de esta la empresa se vio presionada por los avances en el Mc OS que ganaba muchos adeptos a pesar que en la década pasada los usuarios pensaban que el uso del mouse era lo más parecido a un juguete y tuvieron que cambiar su forma deber una computadora en líneas de comando; en estos años el concepto de la interfaz gráfica domina el mercado.
Esta década también vio nacer a LINUX que era una versión mejorada de UNIX que se caracterizó por trabajar con muchos comandos aunque se le integro el uso de un GUI que primero fue KDE y después su competencia fue GNOME.

Años 2000 y actualidad.

Los sistemas operativos evolucionan no solo a computadoras y en algunos casos a supercomputadoras y servidores, estos también se ven presentes en dispositivos móviles como teléfonos celulares. Hoy en día podemos ver un sistema operativo aplicado tabletas electrónicas teléfonos inteligentes e incluso línea blanca como refrigeradores.
Principalmente se puede elegir entre computadores con Mc OS, Windows y distribuciones Linux así como también en los últimos años ha destacado el surgimiento de sistemas operativos que corren solo en dispositivos móviles sin importa el chip que utilicen como lo es el Android que es software libre para teléfonos celulares.

miércoles, 18 de enero de 2012

Lenguajes de programación


La palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
  • El desarrollo lógico del programa para resolver un problema en particular.
  • Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa).
  • Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
  • Prueba y depuración del programa.
  • Desarrollo de la documentación.
Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico conocido como código máquina, el cual la máquina comprende fácilmente, pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste en cadenas extensas de números 0 y 1.
Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 0 y 1 por palabras o abstracción de palabras y letras provenientes del inglés; éste se conoce como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). El lenguaje ensamblador sigue la misma estructura del lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números.

La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones", y a este conjunto de instrucciones se le llamó lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programación, los cuales reciben su denominación porque tienen una estructura sintáctica similar a los lenguajes escritos por los humanos, denominados también lenguajes de alto nivel.
La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora.

A finales de 1953, John Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar la computadora central IBM 704. El histórico equipo Fortran de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.

El primer manual para el lenguaje Fortran apareció en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador.
En 1960, se creó COBOL, uno de los lenguajes usados aún en 2010 en informática de gestión.

A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método más eficiente para programarlas. Entonces, se crearon los lenguajes de alto nivel, como lo fue BASIC en las versiones introducidas en los microordenadores de la década de 1980. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará una sola sentencia.

Todos los lenguajes de programación tienen algunos elementos de formación primitivos para la descripción de los datos y de los procesos o transformaciones aplicadas a estos datos (tal como la suma de dos números o la selección de un elemento que forma parte de una colección). Estos elementos primitivos son definidos por reglas sintácticas y semánticas que describen su estructura y significado respectivamente.

A la forma visible de un lenguaje de programación se le conoce como sintaxis. La mayoría de los lenguajes de programación son puramente textuales, es decir, utilizan secuencias de texto que incluyen palabras, números y puntuación, de manera similar a los lenguajes naturales escritos. Por otra parte, hay algunos lenguajes de programación que son más gráficos en su naturaleza, utilizando relaciones visuales entre símbolos para especificar un programa.
La sintaxis de un lenguaje de programación describe las combinaciones posibles de los símbolos que forman un programa sintácticamente correcto. El significado que se le da a una combinación de símbolos es manejado por su semántica (ya sea formal o como parte del código duro de la referencia de implementación). Dado que la mayoría de los lenguajes son textuales, este artículo trata de la sintaxis textual.

La sintaxis de los lenguajes de programación es definida generalmente utilizando una combinación de expresiones regulares (para la estructura léxica) y la Notación de Backus-Naur (para la estructura gramática).
La semántica estática define las restricciones sobre la estructura de los textos válidos que resulta imposible o muy difícil expresar mediante formalismos sintácticos estándar. Para los lenguajes compilados, la semántica estática básicamente incluye las reglas semánticas que se pueden verificar en el momento de compilar. Por ejemplo el chequeo de que cada identificador sea declarado antes de ser usado (en lenguajes que requieren tales declaraciones) o que las etiquetas en cada brazo de una estructura case sean distintas. Muchas restricciones importantes de este tipo, como la validación de que los identificadores sean usados en los contextos apropiados (por ejemplo no sumar un entero al nombre de una función), o que las llamadas a subrutinas tengan el número y tipo de parámetros adecuado, puede ser implementadas definiéndolas como reglas en una lógica conocida como sistema de tipos. Otras formas de análisis estáticos, como los análisis de flujo de datos, también pueden ser parte de la semántica estática. Nuevos lenguajes de programación como Java y C# tienen un análisis definido de asignaciones, una forma de análisis de flujo de datos, como parte de su semántica estática.

Un sistema de tipos define la manera en la cual un lenguaje de programación clasifica los valores y expresiones en tipos, como pueden ser manipulados dichos tipos y como interactúan. El objetivo de un sistema de tipos es verificar y normalmente poner en vigor un cierto nivel de exactitud en programas escritos en el lenguaje en cuestión, detectando ciertas operaciones inválidas. Cualquier sistema de tipos decidible tiene sus ventajas y desventajas: mientras por un lado rechaza muchos programas incorrectos, también prohíbe algunos programas correctos aunque poco comunes. Para poder minimizar esta desventaja, algunos lenguajes incluyen lagunas de tipos, conversiones explícitas no checadas que pueden ser usadas por el programador para permitir explícitamente una operación normalmente no permitida entre diferentes tipos. En la mayoría de los lenguajes con tipos, el sistema de tipos es usado solamente para checar los tipos de los programas, pero varios lenguajes, generalmente funcionales, llevan a cabo lo que se conoce como inferencia de tipos, que le quita al programador la tarea de especificar los tipos. Al diseño y estudio formal de los sistemas de tipos se le conoce como teoría de tipos.

Existen dos tipos de lenguajes claramente diferenciados; los lenguajes de bajo nivel y los de alto nivel.

El ordenador sólo entiende un lenguaje conocido como código binario o código máquina, consistente en ceros y unos. Es decir, sólo utiliza 0 y 1 para codificar cualquier acción.

Los lenguajes más próximos a la arquitectura hardware se denominan lenguajes de bajo nivel y los que se encuentran más cercanos a los programadores y usuarios se denominan lenguajes de alto nivel.

Lenguajes de bajo nivel

 

Lenguaje de máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata. Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones de lenguaje de máquina (más los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas.

Los circuitos microprogramables son sistemas digitales, lo que significa que trabajan con dos únicos niveles de tensión. Dichos niveles, por abstracción, se simbolizan con el cero, 0, y el uno, 1, por eso el lenguaje de máquina sólo utiliza dichos signos. Esto permite el empleo de las teorías del álgebra booleana y del sistema binario en el diseño de este tipo de circuitos y en su programación.
El desarrollo tecnológico ha permitido evolucionar desde las redes de relés electromagnéticos de Shannon a circuitos con tubos de vacío, luego a redes transistorizadas, hasta llegar a los modernos circuitos integrados cuya cúspide lo forman los circuitos microprogramados.

Lenguajes de alto nivel

 

Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.
En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales.
Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de alto nivel se crearon para que el usuario común pudiese solucionar un problema de procesamiento de datos de una manera más fácil y rápida.

Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se llaman de tercera generación o de alto nivel, en contraposición a los de bajo nivel o de nivel próximo a la máquina.

Los lenguajes de alto nivel más conocidos son:
  • Ada
  • ALGOL
  • BASIC
  • C++
  • C#
  • COBOL
  • Fortran
  • Java
  • Lisp
  • Modula-2
  • Pascal
  • Perl
  • PHP
  • PL/1
  • PL/SQL

martes, 17 de enero de 2012

Primer computador en México


Parte Frontal de la IBM 650
La iniciativa por instalar un computador electrónico en México, específicamente en la UNAM; máxima casa de estudios del país, nace de un proyecto de colaboración entre esta universidad y la UCLA (Universidad de California los Ángeles) en el que se requería resolver sistemas de ecuaciones muy complejos, los cuales a los investigadores mexicanos les tomo nueve meses y cuando le enviaron sus resultados a su contraparte en Estados Unidos a estos les tomo solo 3 semanas el proceso. 

Este hecho logro llamar la atención del Dr. Nabor Carrillo Flores; entonces rector de la UNAM en 1955; pues para lograr el tiempo para la resolución de estos cálculos en el mencionado tiempo se necesitaría de la mitad de la población Norte Americana. Al cuestionar al director del proyecto en la UCLA responde que los cálculos fueron elaborados con el CEREBRO ELECTRONICO NACIONAL el cual era un computador IBM-650 mismo modelo que fue instalado en el país en renta, pues se enfrentaron a la falta de presupuesto para este proyecto y a la oposición de otros investigadores que consideraban que los $25,000.00 mensuales eran un gasto innecesario. Sin mencionar que el equipo no era nuevo pues fue heredado de la UCLA.Es entonces que el 8 de Junio de 1958, abre sus puertas el Centro de Cálculo Electrónico (CEE) ubicado en el sótano de la antigua Facultad de Ciencias.
Panel trasero de la IBM 650

El IBM-650 era un computador de bulbos y operaba con un tambor magnético con capacidad de 20,000 dígitos, efectuaba 13,000 operaciones de suma y resta por segundo y operaba con una lectora-perforadora de tarjetas además de un ensamblador llamado SOAP y un pseudo-compilador llamado RUNCIBLE. Las primeras tareas que resolvió fueron problemas de física, astronomía e ingeniería química. 

En 1960 el CEE debido a la demanda de usuarios y a que el proyecto resulto ser rentable gracias a al subarrendamiento del equipo el CEE instalo un equipo BENDIX G-15 semi-transistorizada con un tambor magnético con memoria de 2,160 palabras de 29bits. También se montó un equipo de lectora-perforadora de cinta de papel y una máquina de escribir que funcionaba como consola. En este mismo año se desarrolló en el Departamento de Teoría Administrativa de la UNAM, la computadora analógica UNIKORNIO, que puede considerarse como la primera computadora de este tipo que se construyó en México.
En 1961 se crea otro centro de cómputo en la parte baja de Rectoría de la UNAM: la Unidad de Sistematización de Datos. El Dr. Manny Lemann fue invitado en 1962 a la UNAM y con su ayuda se diseñó la computadora digital MAYA, basándose en el diseño de la SABRE, que era una máquina que daba servicio en la Universidad de Israel.
En 1962 se renta un equipo BULL GAMMA-30 con memoria de ferrita y totalmente transistorizada.



Bulbo para IBM 650
En 1965 se instaló en la UNAM el primer computador con el fin de brindar apoyo administrativo, automatización de nóminas y contabilidad; una IBM-1440 y con esto evento se crea el Departamento de Sistemas del Patronato Universitario.

En 1961 el Instituto Politécnico Nacional (IPN) crea el Centro Nacional de Cálculo donde se instaló una IBM-709 que a diferencia de la computadora de la UNAM la del CENAC no fue rentado si no que fue una donación por parte de IBM. Después el CENAC adquirió una computadora analógica PACE-231 y otra digital IBM-1620.

En el año de 1965, el CENAC crea una maestría en ciencias con especialidad en computación. Dos años más tarde la Escuela Nacional Mecánica y Eléctrica (ESIME) incorpora a su plan de estudios la especialidad en Computación.
En 1967, el Instituto Tecnológico y de Estudios Superiores de Monterrey comenzó a impartir cursos introductorios a la computación a nivel licenciatura desde mediados de 1960 y en 1967 crea la carrera en Ingeniería en Sistemas Computacionales.

En la década de los 70’s se crean distintos centros de investigación especializados en computadoras, así como la implementación de programas a nivel licenciatura en escuelas como la Universidad Autónoma de Puebla con su licenciatura en Computación dentro del su Escuela de
Físico-Matemáticas.

A principios de la década de 1980 el CEE tenía ya bien definida la diferencia en sus actividades de investigación y la automatización administrativa siendo esta rama la que crea la División General de Servicios de Cómputo Académico (DGSCA), mientras la segunda se convierte en el Instituto en Investigaciones en Matemáticas Aplicadas y Sistemas (IIMAS) mismo que llego a contar con 23 investigadores trabajando a tiemplo completo. Pero estos avances se vieron frenados con la situación económica que trajo consecuencias trágicas desintegrando a la mayor parte de grupos de investigadores, ejemplo claro fue que el ya mencionado IIMAS termino solo con solo 4 investigadores. Pero aun así se crea el CIMAT en el IPN en 1983 para poder satisfacer la demanda de esta ciencia en el país.

En la década de los noventas, los grupos de investigación en el área toman un respiro pues se crean nuevos centros de investigación tales como: El Centro de Investigación en Computación (CIC) del Instituto Politécnico Nacional, el Laboratorio Nacional de Informática Avanzada (LANIA) en Xalapa, Veracruz; la Coordinación de Ciencias Computacionales del Instituto Nacional de Astrofísica, Óptica y Electrónica (INAOE) y el Departamento de Ciencias de la Computación del Centro de Investigación Científica y de Educación Superior de Ensenada (CICESE), entre otros.