Revista Tecnología

Introducción a la programación - Capítulo 1.0

Publicado el 28 julio 2013 por Nathal Dawson Díaz @prograyunity3d

Computación Básica

ADVERTENCIA: Si tú consideras que ya tienes las nociones de los conceptos elementales de la computación (Hardware del computador, computación, computador, CPU, almacenamiento, programa, byte, bit, S.O, etc) entonces te recomiendo seguir adelante con el capítulo 2.------------------------------------------------------------------------------------------------------------------------------------------Los objetivos de este capítulo son que el lector pueda comprender e interiorizar los conceptos básicos que comprender la computación . En este capítulo NO se verá nada relacionado con la programación en si (aparte de presentar el concepto de lenguaje de programación y su clasificación). Puede que este capítulo resulte algo tedioso pero en mi opinión creo que es bastante importante para los interesados en aprender a programar, comprender la ciencia de la computación y entender las máquinas (computadoras) sobre las cuales programarán.
Empezaremos por definir el concepto más básico del cual se desprenderá todo lo demás.
¿Qué es la computación?Según la real academia española (RAE) la computación es la ciencia que estudia el tratamiento automático de la información por medio de ordenadores.
Según mis conocimientos es mucho más que eso:La computación es la ciencia o el estudio científico que se realiza sobre o en sistemas automatizados que son capaces de manejar información, la cual se lleva a cabo a través de diversas herramientas específicamente hechas para tal propósito. En otras palabras la computación esta basada en las acciones a través de las cuales una persona puede interactuar con una máquina, una de las herramientas utilizadas para lograr esta "comunicación" humano-máquina, son los lenguajes de programación. Con ellos podemos generar básicamente diversas soluciones a distintos problemas planteados.
¿Qué es un computador?Supongo que no es necesario definir esto dado que es lo que están precisamente usando en estos momentos para leer este blog.Bueno por si acaso, un computador es básicamente una maquina que procesa datos de distinta manera y desde distintos medios.
¿Qué es un programa?Un programa se define como un conjunto de instrucciones ordenadas de manera lógica a través de las cuales se puede realizar una tarea en específico en una computadora por un tiempo finito.
¿Qué relación tiene un programa con la programación?Mucha ya que un programa depende precisamente de la programación, que es el medio a través del cual los programadores escriben el código fuente, luego se compila y por último se ejecuta. 
¿Qué es un byte?Es un conjunto de 8 bits.
¿Qué es un bit?Por sus siglas en inglés "Binary Digit". Es la unidad más pequeña de información de un computador. Puede ser 0  o 1 (apagado o encendido, falso o verdadero, respectivamente). 
¿Cuál hace distinto a un software de un programa?
Que el software es el conjunto de componentes lógicos (o conjuntos de programas) que le permiten a una computadora realizar diversas tareas.
¿Qué es el hardware?
El harwdware de una máquina hace referencia a todos los elementos que son tangibles o físicos de esta, pueden ser componentes del tipo eléctrico, electrónico, mecatrónico o mecánico.
En cuanto a su clasificación, podemos observar la CPU o Unidad Central de Proceso, memorias, entrada, salida o ambos.
En cuanto a la CPU en simples palabras es la encargada de hacer el procesamiento de los datos.
Las memorias encargadas del almacenamientos de estos datos.
Y la entrada y salida de información que se obtiene a través de teclado, mouse, pantalla, entre otros.
¿Qué hay acerca de los Sistemas Operativos?
Se puede decir en simples palabras de un sistema operativo, que es un programa o conjunto de programas encargado de generar, mantener y gestionar la comunicación entre el hardware de una máquina y el software, así también como los recursos que este ocupa.
Los más populares a nivel de usuario en los computadores son Windows, OS X, UNIX y GNU/Linux (este último no tan famoso a nivel de usuario).
Actualmente con la llegada de los smartphones al mercado se han puesto muy de moda los sistemas operativos Android, iOS, BlackBerry OS y Windows Phone.
Existe una gran variedad de sistemas operativos (muchos de ellos con enfoques particulares), pero muy pocos son populares entre el público.
¿Qué es la programación?
Es el proceso de la creación de un programa, algoritmo o solución a un problema determinado a través del uso de herramientas como los lenguajes de programación. Todo programa debe ser escrito, probado, depurado, compilado e interpretado, a esta serie de pasos se les conoce simplemente como la programación.
¿Qué es un lenguaje de programación?
Un lenguaje de programación es un lenguaje artificial, creado por el hombre para poder expresar y diseñar distintos procesos que puede realizar una máquina. En otras palabras son utilizados para la creación de los programas a través del uso de algoritmos (un algoritmo se define como un conjunto de instrucciones lógicamente ordenadas que ejecutan una tarea a través de una entrada de datos y que luego de un proceso de pasos nos entregan datos de salida)  . Los lenguajes de programación están conformados por un conjunto de símbolos y reglas sintácticas y semánticas. Por sintaxis se entiende la forma en que escribe un programa, en cuanto a la semántica se entiende el significado o interpretación que pueda tener un programa.
Para clasificarlos existen muchos criterios, entre ellos, nivel de abstracción, propósito, paradigma, lugar de ejecución, etc.
Aquí hablaré sobre solo dos de estos criterios, ya que son por los que la mayoría de las veces se suelen distinguir los lenguajes de programación. Nivel de abstracción y paradigma.
Nivel de abstracción
Formalmente existen dos tipos de lenguajes de programación:
  1. Bajo nivel
  2. Alto nivel
Podemos considerar también dentro de esta clasificación a los pseudo-lenguajes de programación.
Se preguntarán ¿qué es un lenguaje de bajo nivel?
Un lenguaje de bajo nivel es aquel en el que las instrucciones, sentencias, sintaxis y semántica esta prácticamente definida sobre el hardware específico en el cual se trabaja. Requiere de un dominio y conocimiento sobre especificaciones técnicas del hardware.
Una desventaja grande es que su portabilidad básicamente es mínima o nula. (Será un concepto que tocaré mucho más adelante).
Una ventaja vendría a ser que cualquier programa escrito en un lenguaje de bajo nivel, como utiliza al máximo las capacidades de un hardware específico, tiene una alta velocidad de ejecución.
En cuanto a los lenguajes de alto nivel su característica esencial es que fueron hechos con el propósito de que su comprensión fuera casi a un nivel humano, es decir, su sintaxis y semántica son relativamente sencillas de entender, expresan algoritmos de acuerdo a la capacidad cognitiva humana.
Otra gran diferencia es que con los lenguajes de alto nivel se puede generar código que será utilizable no solo en una maquina, si no que en varias.
Al contrario que los lenguajes de bajo nivel estos se ejecutan a una velocidad reducida (no están hechos específicamente para una maquina).
En cuanto a los pseudo-lenguajes decir que simplemente se utilizan para bosquejar y ensayar algoritmos dada su notación.
Paradigma
Existen innumerables tipos de paradigmas para los lenguajes de programación, lo cierto es que como mi propósito en este capítulo tan solo es dar una pequeña introducción y pincelada al mundo de la computación e informática, para efectos prácticos tan solo hablaremos de tres paradigmas que creo son lo suficientemente diferentes para que comprendan este concepto.
  • Programación estructurada: Se define por esta, aquel paradigma que tiene por objetivo fundamental mejorar la claridad, calidad y el tiempo de desarrollo de un programa, a través del uso de subrutinas, estructuras de bloque, sentencias condicionales y loops. (No se preocupen ahora por comprender el significado de subrutina, estructura de bloque, sentencia condicional y loop).
  • Programación lógica: Este paradigma de la programación es un de los 4 más importantes. Su teoría esta basada en la lógica de primer orden. En otras palabras toda sentencia queda definida por una relación lógica dada por el programador, donde luego a través de preguntas se determinarán estados. (Este paradigma es parte de la programación declarativa).
  • Programación orientada a objetos: Esta definido como el paradigma que representa los conceptos (definidos como clases) como "objetos", donde cada uno de estos objetos contiene información (que describen al objeto y más conocidos como los atributos), además de tener propiedades (que definen su comportamiento, más conocidos como métodos), a la instancia de una clase determinada se le denomina objeto.Una clase en palabras simples no es más que el molde de una cosa ,lugar o persona (Ejemplo práctico: La receta para hacer un pan determinado).
Como se puede observar cada uno de estos tres paradigmas distan mucho unos de otros. Lo que quería conseguir con estas definiciones era que se dieran cuenta de como uno puede clasificar los lenguajes de programación de acuerdo a su "utilidad" (paradigma).
Código Máquina
Necesariamente para que un computador realice una o un conjunto de instrucciones, obviamente debe existir un algoritmo almacenado en la memoria principal, expresado en lenguaje máquina.
Todo programa escrito en cualquier lenguaje, para ser ejecutado por nuestra computadora, este primero debe ser necesariamente traducido al lenguaje que entiende el procesador.
A este lenguaje se le llama código máquina, y su representación esta dada unicamente por 1 y 0s, a pesar de esto se usa su representación de bajo nivel llamada Assembler.
Compilación
 Precisamente como acabo de mencionar para que nuestra computadora comprenda las instrucciones dadas por un programa escrito en un lenguaje de programación, este primero debe ser traducido a código máquina. A este proceso se le llama compilación.
Proceso además realizado por un compilador, en el cual se ejecutan diversas etapas para llegar a nuestro código máquina:
  • Fase de análisis
  • Fase de síntesis 
  • Optimización de código

Introducción a la programación - Capítulo 1.0

From Wikimedia Commons, the free media repository



Tipos de errores
Existen tres tipos de errores con los que se podrán encontrar una vez empiecen a programar:

  • Errores en tiempo de compilación: Se da cuando el compilador de un programa detecta que este tiene errores de sintaxis y otros errores básicos. Estos errores provocan que no se pueda generar un programa ejecutable.
  • Errores en tiempo de ejecución: Este tipo de errores como su nombre lo dice, se dan cuando el programa ya esta en ejecución, a manera de ejemplo cuando se "cae" un programa en ejecución estamos ante este tipo de error, muy común si no se cuida la seguridad y legibilidad del programa.
  • Errores lógicos:  Los errores lógicos de un programa, permiten que este se ejecute, pero producen resultados erróneos, por ejemplo si quería construir un programa que sumara 2 variables y el resultado es erróneo, entonces estamos ante un error lógico (x=1, y=2,  x+y = 4 ).

Problemas del software

Uno de los principales que se presenta al iniciar un proyecto encargado de la generación de un software es como estimar el tiempo al que se estará sujeto produciendo este producto. Casi siempre se puede tener un tiempo estimado dada la magnitud del proyecto, pero la mayoría de las veces se toma tan a la ligera que finalmente la mayoría de las veces se debe alargar la duración de la elaboración del software. Debemos recordar que los programadores estarán sometidos a un estado de concentración máxima para realizar un gran software, dadas las exigencias del mercado, y obviamente la eliminación de la mayoría de los bugs o errores es costosa en términos de tiempo. Luego de la elaboración del código viene toda la fase de las pruebas, que deben ser rigurosas y también requieren de un tiempo largo de pruebas y ensayos.
Otro de los grandes problemas de crear un software es que su costo asociado es demasiado alto, en la mayoría de los casos el costo presupuestado es menor al costo real del proyecto. Esto se da porque en él influyen diversos factores, que muchas veces escapan a las manos de la planificación de un determinado proyecto, por ejemplo las capacidades individuales del personal asignado al proyecto, o su familiaridad con el área de aplicación, etc.
Un factor muy importante a tener en cuenta para la elaboración de un software debe ser el mantenimiento dado, debido a que "nunca se termina de elaborar un programa", esto se da porque muchas veces se necesita implementar cuestiones luego de finalizado el software, recordemos que el software además debe cumplir con lo requerido por el cliente, un gran problema si no se tiene claridad desde un principio. La mantención es costosa en dinero y tiempo.
Estas son solo algunos de los grandes problemas que se podrán encontrar ustedes si algún día llegan a participar del desarrollo de un software.
Los invito a dejar sus comentarios. Si te ha gustado este blog o te ha servido la información presentada, recomiéndala utilizando twitter, facebook y google plus.

Volver a la Portada de Logo Paperblog