Conferencia 2. Programación

Curso de Software Libre
Conferencia #2 Programación Medardo Rodríguez

Nota: Para editar documentos se usa openoffice.org

Programación:

  • Ingeniería
  • Ciencia Conceptos
  • Arte
  • ?

Podemos decir que la programación es ingeniería, ciencia, arte y algo más. De eso se tratará nuestra conferencia de hoy.

Lo más intuitivo: Programación es ingeniería.

Ingeniería: Proceso de creación, construcción
de cosas.

La programación como ingeniería es saber definir qué estamos programando. Es producir programas de computación

Programa: Modelo funcional que la computadora es capaz de interpretar y ejecutar de forma que simule o represente un modelo original.

La programación es el objeto de estudio de la carrera de informática.

¿Qué es programar bien?
¿Cuándo estamos programando bien?

Pudiéramos decir que cuando obtenemos los modelos teóricamente
o científicamente correctos. Pero esto no es un objeto de la programación sino un principio.

No podemos asumir que programar rápido y con códigos pequeños es programar bien. Sino cuando el proceso se haga en el menor tiempo posible y el resultado cumpla con las expectativas trazadas. Es decir que se cumpla con los objetivos que me tracé al decidir hacer el programa.

La tendencia hoy en día es utilizar lenguajes scripts en lugar de lenguajes compilados.

La disponibilidad de memoria y su uso no es un problema actualmente dadas las capacidades de los equipos actualmente. La eficiencia en el uso de la memoria pasa a ser un problema secundario.

Al comenzar a programar se debe partir de objetivos bien definidos.

¿Qué es hacer ciencia?

¿Cuántos científicos de la programación conocemos?

o Donald Knuth es uno de los más reconocidos expertos en ciencias de la computación. Se le conoce principalmente como el autor de la obra El arte de programar, una de las más respetadas referencias en el campo de las ciencias de la computación. Prácticamente creó el campo del análisis de algoritmos e hizo muchos aportes seminales en varias ramas teóricas de la ciencias de la computación. Autor de TeX, LateX y True Type Fonts

o Alan Mathison Turing Fue matemático, científico de la informática, criptógrafo y filósofo. Se le considera uno de los padres de la Ingeniería informática siendo el precursor de la informática moderna. Proporcionó una influyente formalización de los conceptos de algoritmo y computación: la máquina de Turing.

o Edsger Dijkstra. Entre sus contribuciones a la informática está el algoritmo de caminos mínimos; también conocido como Algoritmo de Dijkstra. Recibió el Premio Turing en 1972.

o El creador de Lotus, Mitch Kapor, fue el que contribuyó a que las PC se hicieran tan populares. El empleo de esta hoja de calculo fue lo que lanzó las PCs a ser conocidas en todas partes. Director de la Fundación Mozilla

¿Qué es una ciencia?
Es un instrumento para estudiar “cosas”

Todo fenómeno es representado en la conciencia desde puntos de vistas diferentes. En nuestra conciencia formamos distintas representaciones.

Forma de representación en la conciencia de un objeto de estudio.

La ciencia implica metodología de representación, gestión del conocimiento.

Asumimos patrones que tomamos como ciertos sin cuestionarnos si son ciertos o no.

¿Es fuertemente tipeado Python?

Definición de Tipo de una variable.
Indica:
o Características de esa variable
o Operaciones sobre esa variable.
o Clasificación (Taxonomías)

¿Qué es una variable?

¿Qué es un puntero?
Señalar algo
Señalar direcciones de memoria.
Referenciar una zona de memoria.

Surge el paradigma de la Programación Orientada a Objetos (POO).

Ada Byron Planteó como se debía programar un artefacto, la maquina analítica. En honor a ella se nombró un lenguaje de programación. Planteó la necesidad de lenguajes superiores de programación y no directamente en lenguaje de máquina. A ella se debe además el termino Debug

Barbara Liskov nee Huberman, introdujo el concepto de subtipo, comúnmente conocido como Principio de Sustitución de Liskov. Trabajó junto a Jeannette Wing. Autora del primer lenguaje que hizo abstracción de datos, autora del primer lenguaje distribuido.

“Que un objeto x de tipo X es verificable Q(x), entonces para un objeto y de tipo Y es verdadero Q(y) si Y es un subtipo de X”

Esto no es más que una proposición de la lógica formal. Esto es hacer ciencia de la computación.

Los modelos que están bien hechos deberían ser auto documentados. No sería necesaria la existencia de las ayudas. Este fue un planteamiento de Donald Knuth.

Las ciencias tienen axiomas o asumen otros de otras ciencias.

¿Qué es un axioma?
En epistemología, ciencia del estudio de la producción y validación del conocimiento científico. Un axioma es una "verdad evidente" sobre la cual descansa el resto del conocimiento o sobre la cual se construyen otros conocimientos. No todos los epistemólogos están de acuerdo que los axiomas existan de esa manera. En matemáticas un axioma no es necesariamente una verdad evidente, sino una expresión lógica utilizada en una deducción para llegar a una conclusión. En matemáticas se distinguen dos tipos de axiomas: axiomas lógicos y axiomas no-lógicos.

Es una verdad asumida como base para construir una metodología

La programación se basa en las matemáticas, pero debe mucho más
a:
1. Teoría del Conocimiento (epistemología)
2. Semiótica (La semiótica se define como la ciencia general de los signos. Un signo (del griego semeîon) es todo lo que se refiere a otra cosa (referente) es la materia prima del pensamiento y por lo tanto de la comunicación.)
3. Lingüística (Noam Chomsky, También se le considera creador de la jerarquía de Chomsky, una clasificación de lenguajes formales de gran importancia en teoría de la computación.)

¿Qué es un error sintáctico?

Surge el paradigma de la Programación Manipulada por Datos. Es el paso intermedio a la Programación Orientada a Objetos.

Retomando el tema de Tipos
Veamos la siguiente declaración:
Int age
¿Para qué nos sirve?
¿En qué nos ayuda?
Evita asignaciones de valores de tipos incorrectos, age=’a’ no
se puede hacer. Tampoco age=3.24

Estamos creando un formalismo que nos ayuda a crear restrcciones en nuestro modelo

Eiffel es un lenguaje de programación que permite definir restricciones.

Age=2043 no es un error para el compilador pero es incorrecto para la edad de una persona

Nota: ¿Cuantos lenguajes de programación orientados a objetos existen?
Más de 188

En Pascal se puede definir:
Tage=0..120;
Age:Tag;

La selección de un lenguaje de programación no puede estar restringida a que sea fuertemente tipado. Existen restricciones que no se expresan con intervalos. Son más ricas que las anteriores

C++ es muy bueno para encapsular restricciones pero nadie lo utiliza, prefieren chequear las restricciones en el algoritmo.

Nota: Ser programadores eficientes es el objetivo del curso

La Teoría del Conocimiento es la ciencia fundamental para la programación.

Desarrollar productos para computadoras se hace con computadoras.

La programación es una metodología que se basa en la teoría del conocimiento.

El proceso de programación es un proceso de aprendizaje.

Los procesos del conocimiento son procesos de comunicación. Movemos información que contiene conocimiento.

En el caso de la programación los destinatarios del conocimiento no son seres humanos sino computadoras

Semiótica.
Los símbolos son las unidades básicas que conforman un lenguaje.

Existen tres planos:
1. Sintáctico ¿Qué son los símbolos?
2. Semántico ¿Qué significado tiene el símbolo?
3. Pragmático Plano superior de la semiótica.

Al asumir el mensaje semánticamente recibimos con rechazo los detalles sintácticos. Esto es un proceso en Teoría del Conocimiento.

¿Por qué se desarrolló la lógica formal?
Porque es la rama matemática que apoya la teoría del conocimiento.

Arte

Humberto Eco, entre otras cosas es un teórico de la semiótica. Según él un mensaje tiene tantas lecturas como receptores. O sea que un mensaje es muchos mensajes al mismo tiempo.

La teoría de la comunicación no es artística esencialmente

¿Qué es arte? ¿Estética?
El término arte procede del término latino ars. En la Antigüedad se consideró el arte como la pericia y habilidad en la producción de algo. Es solo a partir de finales del siglo XV, durante el renacimiento Italiano, cuando, por primera vez se hace la distinción entre el artesano y el artista (artesanía y bellas artes) y equivalentemente entre artesano, productor de obras múltiples y artista, productor de obras únicas.

(ver…)

Según Humberto Eco, es toda obra que sobrepasa al código que lo porta. Cuando se recibe con una calidad superior a lo que se puede sacar del código de ese mensaje.

Todo mensaje lleva un componente denotativo y otro componente connotativo.

Por ejemplo la frase “Te amo”, tiene diferentes
connotaciones para cada quien la lee o escucha.

Catarsis es el proceso de sensaciones placenteras al recibir un mensaje.

El arte es un proceso de comunicación.

No todos somos científicos de la programación. El que resuelve
ecuaciones diferenciales en matemáticas es programador en informática.

Los lenguajes de programación tiene diversos errores según la
teoría de la comunicación.

¿Es la POO todo lo bueno que se cree?
¿Qué significa que una operación es virtual?
¿Qué significa que un método sea virtual?

A pesar de lenguajes tan malos al menos usarlos lo mejor posible.

Las personas inconscientemente le ponemos a nuestros mensajes una intencionalidad artística. Y en este punto es dónde se une arte y programación. Esto tiene que ver con el Software Libre.

Todo el que produce Software Libre tiene la intencionalidad del que lo vea (un algoritmo o un modelo) se maraville. No estamos hablando del diseño de las ventanas. A nivel social se incrementa exponencialmente. Todos tratan de mejorarlo. Coger esa joya de programación y superarlo.

Si todo el arte funcionara como el Software Libre esa connotación será superior. El paradigma del Software Libre sería superior.

El software Libre es muy joven. La esencia que lo hace mejor es su libertad.
Su influencia positiva está dada por su rapidez y eficiencia.

La programación comprende cuatro fases:
1. Percepción.
2. Razonamiento.
3. Diseño
4. Implementación.

Usualmente transformamos el problema original en otro. Basta con analizar el ejemplo de hacer la búsqueda de una tarjeta en un tarjetero. Frecuentemente todos lo que programan se plantean el algoritmo como: “Tomo la primera tarjeta, comparo, sino es la buscada, paso a la tarjeta siguiente, así sucesivamente hasta encontrar la tarjeta deseada”. Pero realmente al programar no empleamos ni:
Repeat
Until
(de Pascal)

ni,
do
while (de C)

generalmente lo que hacemos es:

for (int i=0; i<=count; i++)
{
if(tarjeta[i]==actual)
break;
}

transformamos el problema original en otro.

Hoare y Dijkstra establecieron las bases axiomáticas de la programación. La programación tiene axiomas pero hay que encontrárselos.

Sir Charles Antony Richard Hoare (Tony Hoare) es un científico Británico en computación, conocido sobre todo por la invención, en 1960 de Quicksort, que es el algoritmo de ordenamiento más ampliamente utilizado en el mundo, y probablemente el algoritmo de cualquier tipo más utilizado.
Estas fueron sus palabras al recibir en 1980 recibió el Premio Turing de la ACM(Association for Computing Machinery):
"Concluyo que hay dos formas de realizar el diseño de una aplicación: La primera es el hacerla tan sencilla que sea obvio para todos que no tenga deficiencias y la segunda es el hacerla tan complicada que no queden deficiencias obvias."

Un programa es una forma de representación del conocimiento. Este sería el primer axioma de la computación.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: