sábado, 24 de marzo de 2007

Google Inc.


Google

Historia:
Cerca del año de 1995, en la Universidad de Stanford se celebro las jornadas para estudiantes que aspiraban a realizar estudios de doctorado en informatica.

Titulado en Ingenieria Electrica, Sergey Brin de 23 años, tenía la responsabilidad de mostrar el campus de la universidad a los visitantes.
De entre el grupo se encontraba un joven de 24 años llamado Larry Page, Licenciado en Informatica y Ciencias Matematicas, el cual habia llegado desde la Universidad de Michigan.

Aunque al principio la relación entre estos dos jovenes no fue del todo grato, se dio inicio al proyecto conicido hoy en día como Google.

Esta empresa se caracteriza por tener un afán emprendedor, la gran capacidad de análisis y sobre todo el entusiasmo.

Como un dato curioso, cada 1 de abril, conocido en Estados Unidos como "April´s Fool Day" o día de los inocentes, Google acostumbra a presentar una mejora al buscador o alguna herramienta muy eficiente.

Larry Page y Sergey Brin, fundadores de la compañia Google Inc.

lunes, 19 de marzo de 2007

LENGUAJES DE PROGRAMACIÓN


PROGRAMACIÓN

Se llama programación a la creación de un programa de computadora, un conjunto concreto de instrucciones que una computadora puede ejecutar.

El programa se escribe en un lenguaje de programación, aunque también se pueda escribir directamente en lenguaje de máquina, con cierta dificultad. Un programa se puede dividir en diversas partes, que pueden estar escritas en lenguajes distintos.

LENGUAJE DE PROGRAMACIÓN

Un lenguaje de programación es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una computadora.

Un lenguaje de programación permite a un programador especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados y transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias.

Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, es decir, ser traducido al lenguaje de máquina, o ser interpretado para que pueda ser ejecutado por el ordenador. También existen lenguajes de Script que son ejecutados a través de un intérprete y no necesitan compilación.

Los lenguajes de programación se pueden clasificar según:

Nivel de abstracción


  • Lenguajes de bajo nivel
    Los lenguajes de bajo nivel son lenguajes de programación que se acercan al funcionamiento de una computadora. El lenguaje de más bajo nivel es, por excelencia, el código máquina. A éste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa.

  • Lenguajes de medio nivel
    Hay lenguajes de programación que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel.

  • Lenguajes de alto nivel
    Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de alto nivel más conocido. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rígida y sistemática.

La forma de ejecución

  • Lenguajes compilados
    Un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a código máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores.
    Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con código binario).
    Al usar un lenguaje compilado, el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el código.

  • Lenguajes interpretados
    Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la ejecución de la compilación, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente. La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje máquina.

Paradigma de programación

El Paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro sino que cada uno tiene ventajas y desventajas. También hay situaciones donde un paradigma resulta más apropiado que otro.

  • Lenguajes imperativos
    Describen la programación en términos del estado del programa y sentencias que cambian dicho estado.

  • Lenguajes declarativos
    Está basado en el desarrollo de programas especificando o declarando un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla. No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial

    Transparencia referencial: Es un término utilizado en programación funcional que refiere la propiedad por la cual "cuando una expresión e del lenguaje es
    sustituida por el valor v, y v es el resultado de evaluar e, la semántica del
    programa no se altera".


  • Lenguajes orientados a aspectos
    Relativamente reciente cuya intención es permitir una adecuada modularización de las aplicaciones y posibilitar una mejor separación de conceptos.

  • Lenguajes dirigidos por eventos
    En este tipo de programación tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema o que ellos mismos provoquen.

  • Lenguajes con restricciones
    Las relaciones entre las variables son expresadas en términos de restricciones (ecuaciones). Actualmente es usada como una tecnología de software para la descripción y resolución de problemas combinatorios particularmente difíciles, especialmente en las áreas de planificación y programación de tareas (calendarización).

  • Lenguajes estructurados
    Es una forma de escribir programación de forma clara, para ello utiliza únicamente tres estructuras: secuencial, selectiva e iterativa; siendo innecesario y no permitiéndose el uso de la instrucción o instrucciones de transferencia incondicional (GOTO).

  • Lenguajes funcionales
    Es un paradigma de programación declarativa basado en la utilización de funciones matemáticas.

  • Lenguajes orientados a objetos
    En la Programación Orientada a Objetos (POO) se definen los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (datos) comportamiento (procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas módulos más fáciles de escribir, mantener y reutilizar.

Ejemplos de lenguajes de programación:

  • ABAP
  • ABC
  • Ada
  • ActionScript
  • Afnix
  • ALGOL
  • APL
  • ASP
  • ASP.NET
  • AWK
  • B
  • BASIC
  • BCPL
  • Befunge
  • Boo
  • C
  • C++
  • C#
  • Caml
  • Clipper
  • CLIPS
  • CLU
  • COBOL
  • CORAL
  • D
  • Delphi
  • DIV
  • Dylan
  • Eiffel
  • Erlang
  • Ensamblador
  • Extended ML
  • Euphoria
  • Fénix
  • Flow-Matic
  • Forth
  • FORTRAN
  • Gambas
  • GML
  • GRAFCET
  • FP
  • Haskell
  • Icon
  • Inform
  • INTERCAL
  • ISWIM
  • J
  • Java
  • JavaScript
  • Joy
  • KWC
  • LADDER
  • Lexico
  • Lingo
  • Lisp
  • Logo
  • Lua
  • MAGIC
  • Mainsail
  • Mesa
  • Miranda
  • ML
  • Modula
  • Modula-2
  • Modula-3
  • Natural
  • NetREXX
  • Oberon
  • Object REXX
  • Objective-C
  • Ocaml
  • Occam
  • Oz
  • Pascal
  • Parlog
  • Perl
  • PHP
  • PL/1
  • Plankalkül
  • PostScript
  • PowerBuilder
  • Prolog
  • Python
  • Rapid
  • REXX
  • RPN
  • RPG
  • Ruby
  • Sail
  • Sather
  • Scheme
  • Scriptol
  • Seed7
  • Self
  • Sh
  • Simula
  • Smalltalk
  • Snobol
  • SPARK
  • Squeak
  • SR
  • Standard ML
  • TI-Basic
  • TCL
  • VBA
  • Visual Basic
  • Visual C++
  • Visual DialogScript
  • Visual Foxpro
  • Yurix
  • ZPL

LENGUAJES DE PROGRAMACIÓN ORIENTADOS A OBJETOS

Se le llama así a cualquier lenguaje de programación que implemente los conceptos definidos por la programación orientada a objetos.

La programación fue hecha en una manera secuencial o lineal, es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones.

Los lenguajes basados en esta forma de programación ofrecían ventajas al principio, pero el problema ocurre cuando los sistemas se vuelven complejos. Estos programas escritos al estilo “espagueti” no ofrecen flexibilidad y el mantener una gran cantidad de líneas de código en un sólo bloque se vuelve una tarea complicada.

Frente a esta dificultad aparecieron los lenguajes basados en la programación estructurada. La idea principal de esta forma de programación es separar las partes complejas del programa en módulos o segmentos que sean ejecutados conforme se requieran. De esta manera tenemos un diseño modular, compuesto por módulos independientes que puedan comunicarse entre sí. Poco a poco este estilo de programación fue reemplazando al estilo impuesto por la programación lineal.

La evolución que se fue dando en la programación se orientaba siempre a ir descomponiendo más el programa. Este tipo de descomposición conduce directamente a la programación orientada a objetos.

Pues la creciente tendencia de crear programas cada vez más grandes y complejos llevó a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas. Para estas necesidades ya no bastaba la programación estructurada ni mucho menos la programación lineal. Es así como aparece la programación orientada a objetos (POO). La POO viene de la evolución de la programación estructurada; básicamente la POO simplifica la programación con la nueva filosofía y nuevos conceptos que tiene. La POO se basa en la dividir el programa en pequeñas unidades lógicas de código. A estas pequeñas unidades lógicas de código independientes se les llama objetos.

Ventajas:

  • Fomenta la reutilización y extensión del código
  • Permite crear sistemas más complejos
  • Relacionar el sistema al mundo real
  • Facilita la creación de programas visuales
  • Construcción de prototipos
  • Agiliza el desarrollo de software
  • Facilita el trabajo en equipo
  • Facilita el mantenimiento del software

SISTEMA MANEJADOR DE BASES DE DATOS (DBMS)

Una base de datos es un conjunto de datos que pertenecen al mismo contexto almacenados sistemáticamente para su posterior uso.

Los Sistemas de gestión de base de datos son un tipo de software muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan. Se compone de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y de un lenguaje de consulta.

El propósito general de los sistemas de gestión de base de datos es el de manejar de manera clara, sencilla y ordenada un conjunto de información.

Existen distintos objetivos que deben cumplir los DBMS los cuales son:

  • Abstracción de la información
  • Independencia
  • Redundancia mínima
  • Consistencia
  • Seguridad
  • Integridad
  • Respaldo y recuperación
  • Control de la concurrencia
  • Tiempo de respuesta

Ventajas:

  • Facilidad de manejo de grandes volúmenes de información.
  • Gran velocidad en muy poco tiempo.
  • Independencia del tratamiento de información.
  • Seguridad de la información (acceso a usuarios autorizados), protección de información, de modificaciones, inclusiones, consulta.
  • No hay duplicidad de información, comprobación de información en el momento de introducir la misma.
  • Integridad referencial el terminar los registros.

Desventajas:

  • El costo de actualización del hardware y software son muy elevados.

  • Salario del administrador de la base de datos es costoso.
  • El mal diseño de esta puede originar problemas a futuro.
  • Un mal adiestramiento a los usuarios puede originar problemas a futuro.
  • Si no se encuentra un manual del sistema no se podrán hacer relaciones con facilidad.
  • Generan campos vacíos en exceso.
  • El mal diseño de seguridad genera problemas en esta.