Código de ética
Nadie va a copiar partes de trabajo de otros estudiantes, de libros, de sitios web ni de ningún otro lado, con o sin permiso, sin definir claramente la referencia bibliográfica que otorge crédito completo al autor original.
Con respeto a código, no se copia ni una línea. No ayuda que renombren variables o hagan algún otro intento de ocultar el robo intelectual.
Cualquier intento a entregar algo que no sea cien porciento trabajo propio del estudiante mismo se considera fraude y resultará en una calificación reprobatoria inmediata.
Herramientas
Sistema operativo: Ubuntu Linux
Editor de texto: emacs
Navegador por omisión: Firefox
Diapositivas disponibles en la página de la unidad
Entrega de tareas: via blogs personales
Preguntas: al GoogleGroup
Entren a través de la página para inscribirse
Entrar en ubuntu
Reiniciar la computadora desde la memoria USB
Checar en el BIOS el orden de búsqueda de reinicio
Elegir la opción “Try Ubuntu”
No cambiar el idioma - dejenlo en inglés
Instalar emacs
Abrimos el terminal (desde el menú)
Editamos la lista de fuentes de instalación
Desde el terminal sudo gedit /etc/apt/sources.list
Descomentamos las líneas deb- (o sea, quitar el #)
Guardamos el archivo
Ejecutamos en el terminal
sudo apt-get update
sudo apt-get install emacs
Calificación final
Concepto Porcentaje ¿Qué hago para cumplir?
Reportes 30%Redactas textos y los incorporas a tu portafolios; a veces incluyen código fuente de programas y diagramas
Presentaciones 30% Impartes tres ponencias en clase y preparas una digital tipo YouTube
Participación 20% Interactúas con tus compañeros durante sus ponencias y en los blogs
Exámenes 20% Contestas las preguntas en dos exámenes de “libro e internet abierto”
Programa semanalSemana Tema de sesión Actividad concluida Calificación
123456789
10111213141516
Fundamentos Creación del blog No aplica
Compiladores e intérpretes Mapa conceptual 3%+1%
Lenguajes script Caso de estudio 3%+1%
Presentaciones sobre compilación e interpretaciónPresentaciones sobre compilación e interpretación 5%+2%
Flujo de control: recursión 3+ programas 4%+1%
Presentaciones sobre flujo de control recursivoPresentaciones sobre flujo de control recursivo 10%+3%
Lenguajes funcionales 2+ programas 3%+1%
Examen de medio cursoExamen de medio curso 10%
Lenguajes lógicos Resolución de problemas 3%+1%
Flujo de control: iteración 1+ programa(s) 2%+1%
Presentaciones sobre flujo de control iterativoPresentaciones sobre flujo de control iterativo 10%+3%
Lenguajes imperativos 4+ programas 5%+1%
Tipos de datos Presentaciones en línea 5%+3%
Lenguajes orientados a objetos 3+ programas 4%+%1
Lenguajes multiparadigma 1+ programa(s) 3%+1%
Examen ordinarioExamen ordinario 10%
Fundamentos
Lenguajes de programación
Sintáxis y semática
La historia y la presente de lenguajes
Lenguajes de representación y consulta
¿Lenguaje de programación?
Lenguajes artificiales
Productos de ingeniería con un sabor de ciencia
Para expresar operaciones que se requiere que lleve a cabo una máquina
Hardware
Sistema operativo
Programa
Usuario
CPU RAM
Ensamblador
mov r1, 7mov r2, 3add r1, r2mul r1, 2
Sistema operativo
Gestión de procesos e hilos
Gestión de memoria y memoria virtual
Gestión de entrada & salida
Gestión de archivos
Concurrencia (exclusión mutua)
Seguridad
Vamos a ver esto en detalle luego en la unidad de aprendizaje Sistemas operativos
Paradigmas
Imperativos (procedurales)
a base de secuencias de instrucciones (enunciados)
p. ej. C, FORTRAN, ALGOL, Pascal, Cobol
Funcionales (aplicativos)
a base de funciones (a dentro de funciones)
p. ej. LISP, ML
Lógicas
a base de hechos (átomos, proposiciones) y dependencias (consequencias)
p. ej. PROLOG
Orientadas a objetos
a base de clases y objetos (instancias)
p. ej. Java, C++
Influencias importantes
Poder computacional
Aplicaciones computacionales
Metodologías
Teoría de la computación
Estándares
Pratt & Zelkowitz: Lenguajes de programación - Diseño e implementación, Pearson, 1998.
Un lenguaje debería ser
expresivo
claro
sencillo
consistente
natural
abstraíble
comprobable
compatible
portable
rápido
barato
general
Pratt & Zelkowitz: Lenguajes de programación - Diseño e implementación, Pearson, 1998.
Validación
Depuración rastreadores de ejecuciónpuntos de interrupciónasertos
Pruebasautomatizadasde unidad / módulo / integración
Verificaciónmodelos formales
Sintaxis
La estructura de una gramática, o sea, las reglas y principios para formar expresiones
Cf. autómatas y lenguajes formales
Convenciones de nomenclatura
Definición explícita (Pascal) o implícita (FORTRAN)
ElementosCaracteres
Identificadores
Operadores
Palabras reservadas
Comentarios
Espacio en blanco
Delimitadores
Expresiones
Enunciados
Gramática
Aho, Sethi, Ullman: Compiladores - Principios, técnicas y herramientas. Pearson, 1990.
listalista +
-
0 1 2 3 4 5 6 7 8 9|
lista dígitolista dígitolista dígito
dígito | | | | | | | |
(componente léxico)
Símbolo terminalSímbolo no terminal
Expresión y enunciado
Expresión = una función que produce un valor a partir de datos proporcionados a ella
Enunciado (inglés: statement)
simple
estructurado (anidado)
contiene enunciados incrustados
Semántica
El significado de una expresión
La resolución de ambigüedad de sintaxis
Historia
1900 2010
Church & Turing30s, 40s
UNIVAC & IBM50s
Lenguajes de alto nivel50s, 60s
Lenguajes “modernos”60s, 70s
Estándarización80s
Modularidad80s, 90s
Internet90s
http://www.intac.net/whats-your-programming-language_2010-06-23/
Top diez de Tiobe.com
http://www.intac.net/whats-your-programming-language_2010-06-23/
Los más famosos por año
http://www.intac.net/whats-your-programming-language_2010-06-23/
Lenguajes de representación y consulta
Representación
HTML
XML
PostScript
LaTeX
Consulta
SQL
OQL
SPARQL (RDF)
YQL (Yahoo!)
...y muchos más.