Buscar este blog

domingo, 12 de diciembre de 2010

HISTORIA DEL PROCESAMIENTO DE DATOS



Desde hace mucho tiempo, el hombre ha tratado de facilitar las tareas de cálculos matemáticos, a veces complejas, o repititivas. A lo largo de la historia, se perfeccionaron mecanismos que resultaron fundamentales para el desarrollo de los que hoy en día utilizamos.

El instrumento de cálculo más antigüo es quizás un conjunto de piedras que, por medio de ranuras hechas en el suelo, eran utilizadas hace miles de años para contar.

Apartir de este elemento de cálculo, aparecieron varios instrumentos similares llamados ábacos.El ábaco más antigüo data del año 3500 a.C. y fue descubierto en Egipto. Alrededor del año 2600 a.C. apareció el ábaco chino o suan-pan y el japonés denominado soroban.

El ábaco fue el primer instrumento de cálculo manual, y servía para contar y realizar operaciones sencillas.Está formado por un marco de madera dividido en dos partes y posee en su interior varias varillas verticales, correspondientes a las cifras.En la parte inferior de cada varilla hay cinco discos, denominados cuentas,que quedan hacia abajo y en la parte superior de cada varilla hay dos discos denominados quintas, que quedan hacia arriba.

El funcionamiento consiste en contar unidades de tal forma que, al sumar uno, se desplaza un disco de la parte inferior hacia arriba; si las cinco cuentas de una varilla se encuentran hacia arriba, hay que bajar todas las cuentas y bajar también una quinta, quedando así representado el número cinco(una quinta y todas las cuentas hacia abajo); si al seguir sumando unidades se llega a la situación en que hay una quinta y las cinco cuentas utilizadas(diez), se debe poner en cero esa cifra(todas las cuntas hacia abajo y todas las quintas hacia arriba) y sumar una cuenta en la siguiente cifra hacia la izquierda.

Con este instrumento se puede cálcular con números de "X" cantidad de cifras, donde "x" es el número de varllas que posee el ábaco.

El uso del ábaco ha perdurado hasta el siglo XVI y en algunos países orientales sigue utilizándose en tareas sencillas.

A comienzos del siglo XVII, a fin de simplificar las operaciones de potenciación, mutiplicación y 

división, fueron inventados, en 1614, los logaritmos naturales o los neperianos por el matemático john Napier(1550-1617), quien ideó además una serie de varillas cifradas que permitían multiplicar y dividir en forma automática y una cálculadora de tarjetas que servía para multiplicar (estructuras de Napier).

Años después, el matemático frances Blais Pascal(1623-1662)ideó una máquina de cálcular automática, basada en ruedas dentadas, que permitía sumar y restar mostrando el resultado por unas ventanillas.Esta máquina en el año 1642, recibió el nombre de maquina aritmética de Pascal o pascalina.

Pocos años después Gottfried Wilhelm von Leibiniz (1646-1716) mejoró la máquina de Pascal construyendo su cálculadora universal, que realizaba operaciones de suma, resta, multiplicación, división y extraía raíces cuadradas.

En 1847 otro mecánico inglés, George Boole (1815-1864), desarroló en su libro Analisis matemátio de la lógica una teoría que posibilitó después el diseño de circuitos y el desarrollo del álgebra binarea conocida como álgebra de Boole o álgebra booleana.

En el año 1885 el norteamericano Herman Holleirth (1860-1929), quien era funcionario de la Oficina de Censos de los Estados Unidos, observó que para procesar los datos del censo realizado en su país se demoraba muchos años y que la matoría de las preguntas realizadas tenían respuestas por sí o por no.Ideó una tarjeta perforada para realizar la encuesta y una máquina que permitía leer y procesar las tarjetas llamada máquina censadora o tabuladora.

En 1895, se utilizó la máquina de Hollerith para la contabilidad de los Ferrocarriles Centrales de Nueva York y fue la primera aplicación comercial automática.Al ver los resultados, su creador fundó la empresa Tabulating Machines Company en 1896 dando la internacional Business Machines o IBM.

En 1937 el físico norteamericano John V. Atanasoff, profesor de la universidad de lowa , junto a su colaborador Clifford Berry, construyeron una máquina elctrónica que operaba en binareo siguiendo la idea de Babbage. Fue la primera máquina de cálcular digital, puesto que no tomó carácter de computadora porque no existía la posibilidad de programarla.

En 1944 John von Neumann (1903-1957), desarolló la idea de una computadora en la los programas no eran parte de la computadora , sino que se los podía cambiar sin modificar el cableado llamado modelo Von Neumann, construyéndose por fin en 1952 una maquina basaba en este modelo llamado EDVAC (electronic Discrete Variable Automatic Computer) (Computadora automatica electronica de variable discreta).Unos años después , en 1951, fue construida por los creadores de ENIAC la primera computadora de serie, llamada UNIVAC-Iy a partir de 1952 se construyeron computadoras de fabricación en serie como MANIAC-I,MANIAC-IIy la UNIVAC-II.
 


PASOS PARA UN ALGORITMO

Pasos:
Pasos
Etapa
Descripción
1
Análisis del problema
Conducen al diseño detallado por medio un código escrito en forma de un algoritmo
2
Diseño de algoritmo
3
Codificación
Se implementa el algoritmo en un código escrito en un lenguaje de programación. Refleja las ideas desarrolladas en las etapas de análisis y diseño
4
Compilación y ejecución
Traduce el programa fuente a programa en código de maquina y lo ejecuta.
5
Verificación
Busca errores en las etapas anteriores y los elimina.
6
Depuración
7
Documentación
Son comentarios, etiquetas de texto, que facilitan la comprensión del programa

FLUJOGRAMA O DIAGRAMA DE FLUJO

EL Flujograma o Diagrama de Flujo, consiste en representar gráficamente hechos, situaciones, movimientos o relaciones de todo tipo, por medio de símbolos.
A continuación se observará de tres autores diferentes el concepto de Flujograma o Diagramas de Flujo, características, tipos, simbología, diseño y elaboración.
Según Gómez Cejas, Guillermo. Año 1.997; El Flujograma o Fluxograma, es un diagrama que expresa gráficamente las distintas operaciones que componen un procedimiento o parte de este, estableciendo su secuencia cronológica. Según su formato o propósito, puede contener información adicional sobre el método de ejecución de las operaciones, el itinerario de las personas, las formas, la distancia recorrida el tiempo empleado, etc.
Según Chiavenato Idalberto. Año 1.993; El Flujograma o Diagrama de Flujo, es una gráfica que representa el flujo o la secuencia de rutinas simples. Tiene la ventaja de indicar la secuencia del proceso en cuestión, las unidades involucradas y los responsables de su ejecución.
Según Gómez Rondón Francisco. Año 1.995; El Flujograma o Diagrama de Flujo, es la representación simbólica o pictórica de un procedimiento administrativo.
2. Características de los Flujogramas
Según Gómez Cejas, Guillermo. Año 1.997:
  • Sintética: La representación que se haga de un sistema o un proceso deberá quedar resumido en pocas hojas, de preferencia en una sola. Los diagramas extensivos dificultan su comprensión y asimilación, por tanto dejan de ser prácticos.
  • Simbolizada: La aplicación de la simbología adecuada a los diagramas de sistemas y procedimientos evita a los analistas anotaciones excesivas, repetitivas y confusas en su interpretación.
  • De forma visible a un sistema o un proceso: Los diagramas nos permiten observar todos los pasos de un sistema o proceso sin necesidad de leer notas extensas. Un diagrama es comparable, en cierta forma, con una fotografía aérea que contiene los rasgos principales de una región, y que a su vez permite observar estos rasgos o detalles principales.

EJEMPLO DE DIAGRAMA DE FLUJO

    PSEUDOCÓDIGO

    El pseudocódigo (falso lenguaje) es comunmente utilizado por los programadores para omitir secciones de código o para dar una explicación del paradigma que tomó el mismo programador para hacer sus códigos esto quiere decir que el pseudocódigo no es programable sino facilita la programación.
    El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se utilizara para la codificación del mismo.

    ALGORITMOS

    En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latin, dixit algorithmus y éste a su vez del matemático persa Al Juarismi ) es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.

    LOGICA COMPUTACIONAL

    La lógica computacional es la misma lógica matemática aplicada al contexto de las ciencias de la computación. Su uso es fundamental a varios niveles: en los circuitos computacionales, en la programación lógica y en el análisis y optimización (de recursos temporales y espaciales) de algoritmos.

    Circuitos computacionales

    El nivel menos abstracto dentro de una computadora está constituido por circuitos electrónicos que responden a diferentes señales eléctricas, siguiendo los patrones de la lógica booleana; esto es, compuertas lógicas que devuelven un valor dependiendo de las entradas que se le dan al sistema. Existen ocho compuertas lógicas básicas con las cuales se pueden formar sistemas muy complejos: AND, OR, Inverter, Buffer, NAND, NOR, XOR y XNOR. Todas ellas son representadas mediante un símbolo y una tabla de valores de verdad, que es simplemente un cuadro donde se ubican todas las posibles entradas y los valores que devolvería la compuerta dados dichos valores.
    Todo sistema computacional, por muy complejo que sea, no está compuesto por más que circuitos electrónicos que únicamente entienden un lenguaje binario. La lógica computacional se encarga de modelar y optimizar tales sistemas a este nivel.

    viernes, 10 de diciembre de 2010

    TIPOS DE PROGRAMACION

    Programación Orientada a Objetos (POO)


    La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.

    La Programación Orientada a Objetos es el paradigma de programación más utilizado en la actualidad. Su consistente base teórica y la amplia gama de herramientas que permiten crear código a través de diseños orientados a objetos la convierten en la alternativa más adecuada para el desarrollo de aplicaciones.

    Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar.

    La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la POO.

    Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas.

    Programación lineal

    La Programación Lineal es un procedimiento o algoritmo matemático mediante el cual se resuelve un problema indeterminado, formulado a través de ecuaciones lineales, optimizando la función objetivo, también lineal.

    Consiste en optimizar (minimizar o maximizar) una función lineal, denominada función objetivo, de tal forma que las variables de dicha función estén sujetas a una serie de restricciones que expresamos mediante un sistema de inecuaciones lineales.


    Programación estructurada
    La programación estructurada es una forma de escribir programas de ordenador (programación de computadora) de manera clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

    Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades de programación existentes en los años 1960, principalmente debido a las aplicaciones gráficas, por lo que las técnicas de programación estructurada no son suficientes. Ello ha llevado al desarrollo de nuevas técnicas, tales como la programación orientada a objetos y el desarrollo de entornos de programación que facilitan la programación de grandes aplicaciones.

    PROGRAMACION CONCURRENTE

    Se conoce por programación concurrente a la rama de la informática que trata de las
    notaciones y técnicas de programación que se usan para expresar el paralelismo potencial
    entre tareas y para resolver los problemas de comunicación y sincronización entre
    procesos.

    LENGUAJES DE ALTO NIVEL, DE BAJO NIVEL Y MAQUINA

    LENGUAJES DE ALTO NIVEL

    Los primeros programas ensambladores producían sólo una instrucción en lenguaje de máquina por cada instrucción del programa fuente. Para agilizar la codificación, se desarrollaron programas ensambladores que podían producir una cantidad variable de instrucciones en lenguaje de máquina por cada instrucción del programa fuente. Dicho de otra manera, una sola macroinstrucción podía producir varias líneas de código en lenguaje de máquina. Por ejemplo, el programador podría escribir "LEER ARCHIVO", y el programa traductor produciría una serie detallada de instrucciones al lenguaje de máquina previamente preparadas, con lo que se copiaría un registro del archivo que estuviera leyendo el dispositivo de entrada a la memoria principal. Así, el programador no se tenía que ocupar de escribir una instrucción por cada operación de máquina realizada.


    LENGUAJE DE BAJO NIVEL.

    Es el ensamblador. También depende de la máquina en particular. Las instrucciones en
    este lenguaje se conocen como nemotécnicos.
    Requiere una fase de traducción al lenguaje máquina.
    El programa original escrito en lenguaje ensamblador se denomina programa fuente, y el
    traducido en lenguaje máquina se conoce como programa objeto.
    No se debe confundir el programa ensamblador (assembler), encargado de efectuar la
    traducción a lenguaje máquina del programa fuente escrito, con el lenguaje ensamblador
    (assembly languaje), lenguaje de programación con una estructura y gramática definidas.
    Los lenguajes ensambladores presentan una ventaja frente a los lenguajes de máquina por
    su mayor facilidad de codificación y su velocidad de cálculo.
    Los inconvenientes son su dependencia total de la máquina, lo que impide ejecutar un
    programa en diferentes máquinas; y la formación de los programadores, ya que exige no
    sólo las técnicas de programación sino también el conocimiento interior de la máquina

    El desarrollo de las técnicas nemotécnicas y las macroinstrucciones condujo, a su vez, al desarrollo de lenguajes de alto nivel que a menudo están orientados hacia una clase determinada de problemas de proceso. Por ejemplo, se han diseñado varios lenguajes para procesar problemas científico-matemático, asimismo han aparecido otros lenguajes que hacen hincapié en las aplicaciones de proceso de archivos.

    A diferencia de los programas de ensamble, los programas en lenguaje de alto nivel se pueden utilizar con diferentes marcas de computadores sin tener que hacer modificaciones considerables. Esto permite reducir sustancialmente el costo de la reprogramación cuando se adquiere equipo nuevo. Otras ventajas de los lenguajes de alto nivel son:

    Son más fáciles de aprender que los lenguajes ensambladores.

    Se pueden escribir más rápidamente.

    Permiten tener mejor documentación.

    Son más fáciles de mantener.

    Un programador que sepa escribir programas en uno de estos lenguajes no está limitado a utilizar un solo tipo de máquina.

    LENGUAJE MAQUINA
    Son aquellos que están escritos en lenguajes directamente inteligibles por la máquina, ya
    que sus instrucciones son cadenas binarias que especifican una operación, y las
    posiciones (dirección) de memoria implicadas en la operación se denominan instrucciones
    de máquina o código máquina.
    Las ventajas de programar en lenguaje máquina es la posibilidad de cargar (transferir un
    programa a la memoria) sin necesidad de traducción posterior, lo que supone una
    velocidad de ejecución superior a cualquier otro lenguaje de programación.
    Los inconvenientes que hacen que este lenguaje no sea recomendado son: dificultad y
    lentitud en la codificación, poca fiabilidad, dificultad grande de verificar y poner a punto los
    programas, y que los programas sólo son ejecutables en el mismo procesador.

    COMPILADOR E INTERPRETE

    Existen dos tipos principales de traductores de los lenguajes de programación de alto nivel: Compilador e intérprete.

    Existen dos tipos principales de traductores de los lenguajes de programación de alto nivel:
    Compilador, que analiza el programa fuente y lo traduce a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la máquina). Su acción equivale a la de un traductor humano, que toma un libro y produce otro equivalente escrito en otra lengua.
    Intérprete, que analiza el programa fuente y lo ejecuta directamente, sin generar ningún código equivalente. Su acción equivale a la de un intérprete humano, que traduce las frases que oye sobre la marcha, sin producir ningún escrito permanente. Intérpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios:
    Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.). Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecución.
    Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces).
    Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.

    LEUNGUAJE DE PROGRAMACIÓN

    Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.1 Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación.

    Tambié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.

    Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos).

    Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa.

    Java

    El lenguaje de programación Java, fue diseñado por la compañía Sun Microsystems Inc, con el propósito de crear un lenguaje que pudiera funcionar en redes computacionales heterogéneas ( redes de computadoras formadas por más de un tipo de computadora, ya sean PC, MAC's, estaciones de trabajo, etc.),y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier máquina o plataforma. El lenguaje fue diseñado con las siguientes características en mente:
    Simple. Elimina la complejidad de los lenguajes como "C" y da paso al contexto de los lenguajes modernos orientados a objetos. Orientado a Objetos. La filosofía de programación orientada a objetos es diferente a la programación convencional.
    Familiar. Como la mayoría de los programadores están acostumbrados a programar en C o en C++, el sintaxis de Java es muy similar al de estos.
    Robusto. El sistema de Java maneja la memoria de la computadora por ti. No te tienes que preocupar por apuntadores, memoria que no se esté utilizando, etc. Java realiza todo esto sin necesidad de que uno se lo indique.
    Seguro. El sistema de Java tiene ciertas políticas que evitan se puedan codificar virus con este lenguaje. Existen muchas restricciones, especialmente para los applets, que limitan lo que se puede y no puede hacer con los recursos críticos de una computadora.
    Portable. Como el código compilado de Java (conocido como byte code) es interpretado, un programa compilado de Java puede ser utilizado por cualquier computadora que tenga implementado el interprete de Java.
    Independiente a la arquitectura. Al compilar un programa en Java, el código resultante un tipo de código binario conocido como byte code. Este códido es interpretado por diferentes computadoras de igual manera, solamente hay que implementar un intérprete para cada plataforma. De esa manera Java logra ser un lenguaje que no depende de una arquitectura computacional definida.
    Multithreaded. Un lenguaje que soporta multiples threads es un lenguaje que puede ejecutar diferentes líneas de código al mismo tiempo.
    Interpretado. Java corre en máquina virtual, por lo tanto es interpretado.
    Dinámico. Java no requiere que compiles todas las clases de un programa para que este funcione. Si realizas una modificación a una clase Java se encarga de realizar un Dynamic Bynding o un Dynamic Loading para encontrar las clases.


    C

    Generalizando, un programa en C consta de tres secciones. La primera sección es donde van todos los ``headers''. Estos ``headers'' son comúnmente los ``#define'' y los ``#include''. Como segunda sección se tienen las ``funciones''. Al igual que Pascal, en C todas las funciones que se van a ocupar en el programa deben ir antes que la función principal (main()). Declarando las funciones a ocupar al principio del programa, se logra que la función principal esté antes que el resto de las funciones. Ahora, solo se habla de funciones ya que en C no existen los procedimientos.

    Y como última sección se tiene a la función principal, llamada main. Cuando se ejecuta el programa, lo primero que se ejecuta es esta función, y de ahí sigue el resto del programa.

    Los símbolos { y } indican ``begin'' y ``end'' respectivamente. Si en una función o en un ciclo while, por ejemplo, su contenido es de solamente una línea, no es necesario usar ``llaves'' ({ }), en caso contrario es obligación usarlos.


    Pascal

    Pascal es un lenguaje de programación de alto nivel de propósito general; esto es, se puede utilizar para escribir programas para fines científicos y comerciales.

    El lenguaje de programación Pascal fue desarrollado por el profesor Niklaus (Nicolás) Wirth en Zurich, Zuiza, al final de los años 1960s y principios de los 70s. Wirth diseñó este lenguaje para que fuese un buen primer lenguaje de programación para personas comenzando a aprender a programar. Pascal tiene un número relativamente pequeño de conceptos para aprender y dominar. Su diseño facilita escribir programas usando un estilo que está generalmente aceptado como práctica estándar de programación buena. Otra de las metas del diseño de Wirth era la implementación fácil. Él diseñó un lenguaje para el cual fuese fácil escribir un compilador para un nuevo tipo de computadora.

    SOFTWARE

    Definición de software

    Probablemente la definición más formal de software sea la siguiente: Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados que forman parte de las operaciones de un sistema de computación. Extraído del estándar 729 del IEEE[6]
    Considerando esta definición, el concepto de software va más allá de los programas de cómputo en sus distintos estados: código fuente, binario o ejecutable; también su documentación, datos a procesar e información de usuario forman parte del software: es decir, abarca todo lo intangible, todo lo "no físico" relacionado.
    El término «software» fue usado por primera vez en este sentido por John W. Tukey en 1957. En las ciencias de la computación y la ingeniería de software, el software es toda la información procesada por los sistemas informáticos: programas y datos. El concepto de leer diferentes secuencias de instrucciones desde la memoria de un dispositivo para controlar los cálculos fue introducido por Charles Babbage como parte de su máquina diferencial. La teoría que forma la base de la mayor parte del software moderno fue propuesta por Alan Turing en su ensayo de 1936, "Los números computables", con una aplicación al problema de decisión.

    Software de Aplicación es aquel que hace que el computador coopere con el usuario en la realización de tareas típicamente humanas, tales como gestionar una contabilidad o escribir un texto.
    Es en este software de Aplicación donde se aprecia en forma más clara la ayuda que puede suponer un computador en las actividades humanas, ya que la máquina se convierte en un auxiliar del hombre, liberándole de las tareas repetitivas.

    Los programadores de aplicaciones, a diferencia de los programadores de sistemas, no necesitan conocer a fondo el modo de funcionamiento interno del hardware.

    Basta con que conozcan las necesidades de información de sus aplicaciones y cómo usar el sistema operativo, para conseguir satisfacer estas necesidades.

    Sus programas deben ser independientes del hardware específico que se utilice y deben ser transportados sin grandes problemas de adaptación a otras computadoras y otros entornos operativos.

    Dentro de los programas de aplicación, puede ser útil una distinción entre aplicaciones verticales, de finalidad específica para un tipo muy delimitado de usuarios (médicos, abogados, arquitectos.), y aplicaciones horizontales, de utilidad para una amplísima gama de usuarios de cualquier tipo.

    Por elemplo word,excel.

    Software de sistema:

    Tipos de software de sistema

    El software de sistema puede clasificarse en sistema operativo, controladores de dispositivos y programas utilitarios. Un sistema operativo crea una interfaz entre el usuario y el sistema de hardware, mientras que el resto de programas refinan o permiten mejorar la interacción con el hardware.

    Clases de software de sistema son:
    Cargadores de programas
    Sistemas operativos (y sus componentes, muchos de los cuales pueden considerarse como software de sistema)
    Controladores de dispositivos
    Herramientas de programación: compiladores, ensambladores, enlazadores, etc.
    Programas utilitarios
    Entorno de escritorio / Interfaz gráfica de usuario (que pueden incluir Gestores de ventanas)
    Línea de comandos
    BIOS
    Hipervisores
    Bootloaders (Gestor de arranque)

    Si el software de sistema se almacena en una memoria no volátil tal como circuitos integrados, usualmente se lo denomina firmware.

    SISTEMAS DE INFORMACION

    Un sistema de información es un conjunto de elementos que interactúan entre sí con el fin de apoyar las actividades de una empresa o negocio.
    El equipo computacional: el hardware necesario para que el sistema de información pueda operar.
    El recurso humano que interactúa con el Sistema de Información, el cual está formado por las personas que utilizan el sistema.
    Un sistema de información realiza cuatro actividades básicas: entrada, almacenamiento, procesamiento y salida de información.


    Entrada de Información: Es el proceso mediante el cual el Sistema de Información toma los datos que requiere para procesar la información. Las entradas pueden ser manuales o automáticas. Las manuales son aquellas que se proporcionan en forma directa por el usuario, mientras que las automáticas son datos o información que provienen o son tomados de otros sistemas o módulos. Esto último se denomina interfases automáticas.
    Las unidades típicas de entrada de datos a las computadoras son las terminales, las cintas magnéticas, las unidades de diskette, los códigos de barras, los escáners, la voz, los monitores sensibles al tacto, el teclado y el mouse, entre otras.

    Almacenamiento de información: El almacenamiento es una de las actividades o capacidades más importantes que tiene una computadora, ya que a través de esta propiedad el sistema puede recordar la información guardada en la sección o proceso anterior. Esta información suele ser almacenada en estructuras de información denominadas archivos. La unidad típica de almacenamiento son los discos magnéticos o discos duros, los discos flexibles o diskettes y los discos compactos (CD-ROM).

    Procesamiento de Información: Es la capacidad del Sistema de Información para efectuar cálculos de acuerdo con una secuencia de operaciones preestablecida. Estos cálculos pueden efectuarse con datos introducidos recientemente en el sistema o bien con datos que están almacenados. Esta característica de los sistemas permite la transformación de datos fuente en información que puede ser utilizada para la toma de decisiones, lo que hace posible, entre otras cosas, que un tomador de decisiones genere una proyección financiera a partir de los datos que contiene un estado de resultados o un balance general de un año base.

    Salida de Información: La salida es la capacidad de un Sistema de Información para sacar la información procesada o bien datos de entrada al exterior. Las unidades típicas de salida son las impresoras, terminales, diskettes, cintas magnéticas, la voz, los graficadores y los plotters, entre otros. Es importante aclarar que la salida de un Sistema de Información puede constituir la entrada a otro Sistema de Información o módulo. En este caso, también existe una interfase automática de salida. Por ejemplo, el Sistema de Control de Clientes tiene una interfase automática de salida con el Sistema de Contabilidad, ya que genera las pólizas contables de los movimientos procesales de los clientes.
    A continuación se muestran las diferentes actividades que puede realizar un Sistema de Información de Control de Clientes:
    Actividades que realiza un Sistema de Información:

    Entradas:
    • Datos generales del cliente: nombre, dirección, tipo de cliente, etc.
    • Políticas de créditos: límite de crédito, plazo de pago, etc.
    • Facturas (interfase automático).
    • Pagos, depuraciones, etc.
    Proceso:
    • Cálculo de antigüedad de saldos.
    • Cálculo de intereses moratorios.
    • Cálculo del saldo de un cliente.
    Almacenamiento:
    • Movimientos del mes (pagos, depuraciones).
    • Catálogo de clientes.
    • Facturas.
    Salidas:
    • Reporte de pagos.
    • Estados de cuenta.
    • Pólizas contables (interfase automática)
    • Consultas de saldos en pantalla de una terminal.

    GENERACIÓN DE COMPUTADORES

    Son los periodos de evolucion de las computadoras en las cuales se destacan: 





    Primera generacion (1946-1958): La primera generación de computadoras se caracteriza por el rasgo más prominente del lenguaje de después de cambiar la misma.
    Durante la década de 1950 se construyeron varias computadoras notables, cada una contribuyó con avances significativos: uso de la aritmética binaria, acceso aleatorio y el concepto de programas almacenados.




    Caracteristicas :
    Válvula electrónica (tubos al vacío). Se construye el ordenador ENIAC de grandes dimensiones (30 toneladas). Alto consumo de energía. El voltaje de los tubos era de 300 v y la posibilidad de fundirse era grande. Almacenamiento de la información en tambor magnético interior. Un tambor magnético disponía de su interior del ordenador, recogía y memorizaba los datos y los programas que se le suministraban mediante tarjetas. Lenguaje de máquina. La programación se codifica en un lenguaje muy rudimentario denominado (lenguaje de máquina). Consistía en la yuxtaposición de largo bits o cadenas de cero y unos. Fabricación industrial. La iniciativa se aventuro a entrar en este campo e inició la fabricación de computadoras en serie. Aplicaciones comerciales. La gran novedad fue el uso de la computadora en actividades  comerciales

     Segunda generación de computadoras (1959-1964): Estas computadoras comenzaron a utilizar transistores. Se comunicaban mediante lenguajes de alto nivel.El invento de los transistores significó un gran avance, ya que permitió la construcción de computadoras más poderosas, más confiables, y menos costosas. Además ocupaban menos espacio y producían menos calor que las computadoras que operaban a bases de tubos de vacío.



    Caracteristicas:

      Transistor. El componente principal es un pequeño trozo de semiconductor, y se expone en los llamados circuitos transistorizados.Disminución del tamaño.Disminución del consumo y de la producción del calor.Su fiabilidad alcanza metas imaginables con los efímeros tubos al vacío.Mayor rapidez ala velocidades de datos.Memoria interna de núcleos de ferrita.Instrumentos de almacenamiento.Mejora de los dispositivos de entrada y salida.Introducción de elementos modulares.Lenguaje  de programación más potentes.



    Tercera generación (1960-1970): Son las computadoras que comienzan a utilizar circuitos integrados. La IBM 360 es el símbolo de esta generación


    Caracteristicas:

    Circuito integrado, miniaturización y reunión de centenares de elementos en una placa de silicio o (chip).Menor consumo.Apreciable reducción de espacio.Aumento de fiabilidad.Teleproceso.Multiprogramación.Renovación de periféricos.Instrumentación del sistema.Compatibilidad.Ampliación de las aplicaciones.La minicomputadora.
      
    Cuarta Generación (1971-1988): En la cuarta generación se encuentran las computadoras u ordenadores de funcionamiento y tecnología muy avanzados. A este grupo pertenecen los ordenadores actuales, aunque sus prestaciones distan ya enormemente de los ordenadores iniciales de esta generación. El rendimiento y capacidad de estos computadores ha ido mejorando a una velocidad trepidante, con un ritmo que responde aproximadamente a la regla de "el triple cada 4 años".


    QUINTA GENERACIÓN (Presente y Futuro)
     
    Definir la quinta generación es algo difícil debido a que el campo todavía está en su infancia, El ejemplo más famoso de computador de quinta generación es el HAL9000 de la novela de Arthur Clarcke, ODISEA 2001 DEL ESPACIO. Allí, HAL realiza todas las funciones previstas para las computadoras de esta generación. Con la Inteligencia Artificial, HAL podía razonar los suficientemente bien para sostener conversaciones con los humanos, usar entrada visual, y aprender de sus propias experiencias.
    Pensar hoy día en las capacidades de HAL puede estar lejos del alcance de la vida real en muchas de sus funciones. Los recientes avances de la ingeniería han permitido que los computadoras sean capaces de aceptar instrucciones habladas e imitar el razonamiento humano. Una meta adicional de las computadoras de quinta generación es la capacidad para traducir idiomas extranjeros.
    Muchos de los avances en la ciencia de la tecnología y del diseño de computadoras, se han juntado para permitir la creación de procesamiento en paralelo, el cual reemplaza la arquitectura básica de Von Neumann, de una simple unidad de proceso. La nueva arquitectura permite que varios procesadores trabajen simultáneamente. Otro avance importante tiene que ver con la tecnología del superconductor, que permite el flujo de electricidad con poca o casi ninguna resistencia, lo cual facilita un flujo de información muy rápido. Las computadoras de hoy tienen algunos atributos de las computadoras pensados para la quinta generación. Por ejemplo, los sistemas expertos asisten a los médicos en su labor de diagnóstico aplicando la solución de problemas por
    etapas.