Fundamentos Algoritmos y programación. Alcance de la informática. Desarrollo de máquinas algorítmicas. Repercusiones sociales de la informática. Arquitectura de computadoras. Almacenamiento y manipulación de bits. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 1 Algoritmos y Programación Definiciones, ejemplos e implicaciones. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 2 Algoritmo Realizar una operación matemática (pasos aprendidos en la escuela) Operar un microondas (instrucciones en la puerta) Construir aeroplanos a escala (instruccion es en papel) Conjunto de pasos que definen cómo realizar una tarea para resolver un problema Ejecutar una obra musical en un instrumento (partitura) Preparar un plato de comida (receta) 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 3 Algoritmo El matemático persa Musa al-Juarismi (780-850), considerado como el padre del álgebra y como el introductor de nuestro sistema de numeración denominado arábigo, inventó el algoritmo, es decir, la resolución metódica de problemas de álgebra y cálculo numérico mediante una lista bien definida, ordenada y finita de operaciones. Una vez encontrado un algoritmo para realizar una tarea, la ejecución de esa tarea deja de requerir la comprensión de los principios en los que se basa el algoritmo: la ejecución de la tarea se reduce al mero proceso de seguir los pasos del algoritmo. En cierto sentido, un algoritmo representa la inteligencia requerida para resolver un problema. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 4 Ejemplo Algoritmo de Euclides para encontrar el máximo común divisor de dos enteros positivos 1. 2. 3. 4. Asignar a M el valor del mayor de los números de entrada Asignar a N el valor del menor de los números de entrada Dividir M entre N y llamar R al residuo Si R no es 0, entonces asignar a M el valor de N y a N el valor de R y continuar desde el paso 3, si no, el máximo común divisor es el valor actual de N 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 5 Programación Antes que una máquina como una computadora pueda realizar una tarea, se debe diseñar y representar un algoritmo para ejecutar esa tarea en una forma que sea compatible con la máquina. La representación de un algoritmo para que lo pueda ejecutar una computadora se denomina programa. El proceso de desarrollar programas, codificarlos en formas compatibles para una máquina e insertarlos en la máquina se denomina programación. Los programas y algoritmos que representan se refieren colectivamente como software, en contraste con las computadoras en sí, tanto con sus componentes internos como externos (periféricos), que se conocen como hardware. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 6 Algoritmos y Programación Es a través de la habilidad de capturar y expresar inteligencia (o al menos comportamiento inteligente) por medio de algoritmos, que se puede construir máquinas que ejecuten tareas útiles. El nivel de inteligencia mostrado por las máquinas está limitado por la inteligencia que se puede expresar a través de algoritmos. Se puede construir una máquina para realizar una tarea sólo si existe un algoritmo para realizar esa tarea, en cambio, si no existe un algoritmo para resolver un problema, entonces la solución de ese problema está más allá de las capacidades de las máquinas. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 7 Algoritmos y Programación En 1930, Kurt Gödel publicó su teorema de incompletitud, que establece que en cualquier teoría matemática que involucre a nuestro tradicional sistema de aritmética, hay proposiciones cuya verdad o falsedad no puede establecerse algorítmicamente: cualquier estudio completo de nuestro sistema aritmético excede las capacidades de la algoritmia. Este teorema impactó los fundamentos de las matemáticas, y el consecuente estudio de las capacidades de la algoritmia significó el comienzo de la Ciencia de la Computación o Informática. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 8 Alcance de la Informática El rol central de los algoritmos en la Informática. Disciplinas de base y campos de la Informática. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 9 El rol central de los algoritmos en la Informática Representación de Descubrimiento de Comunicación de Ejecución de Limitaciones de 75.40 - 95.14 Algoritmos y Programación I Análisis de Algoritmos Curso Prof. Servetto Aplicación de 10 Disciplinas Base y Campos de la Informática Actualmente, la Informática se ha establecido como la Ciencia de los Algoritmos, y sus campos se basan en disciplinas como matemáticas, ingeniería, psicología, biología, administración de negocios y lingüística Algoritmia y Programación Descubrir soluciones algorítmicas eficientes de problemas y representarlas para que los resuelvan computadoras Arquitectura de Computadoras Estructura y organización de computadoras, y avances y aplicación de tecnologías de hardware 75.40 - 95.14 Algoritmos y Programación I Sistemas Operativos y Redes Interfaz entre las computadoras y el mundo exterior, y coordinación de actividades y asignación de recursos de una computadora Comunicación entre máquinas, problemas inherentes y tecnologías involucradas Sistemas de Bases de Datos Ingeniería de Software Inteligencia Artificial Almacenamiento y recuperación de datos en sistemas de cómputo, y combinación de técnicas para obtener sistemas de almacenamiento masivos centralizados que puedan dar la apariencia de tener una gran cantidad de organizaciones apropiadas para varias aplicaciones La estructura algorítmica de los grandes sistemas automatizados se debe guiar por un proceso de ingeniería similar al de las máquinas mismas Estudio de la inteligencia humana y del comportamiento inteligente para diseñar algoritmos que, o imiten el razonamiento y la percepción de la mente humana, o cumplan las mismas funciones de otra forma en base a las posibilidades y ventajas de las computadoras Curso Prof. Servetto En muchos casos en el desarrollo de sistemas no hace falta descubrir algoritmos nuevos sino identificar qué sistemas automatizados se necesitan y cómo van a interactuar con los ya existentes 11 Campos de Estudio de la Informática ¿Qué problemas pueden resolverse mediante procesos algorítmicos? ¿Cómo se puede facilitar el descubrimiento de algoritmos? ¿Cómo se pueden mejorar las técnicas de representación y comunicación de algoritmos? ¿Cómo se puede analizar y comparar las características de distintos algoritmos? ¿Cómo pueden utilizarse algoritmos para manipular información? ¿Cómo pueden aplicarse algoritmos para producir comportamiento inteligente? ¿Cómo afecta a la sociedad la aplicación de algoritmos? 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 12 Desarrollo de Máquinas Algorítmicas Perspectiva histórica 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 13 El ábaco fue uno de los primeros dispositivos para efectuar operaciones aritméticas sencillas. Tiene sus raíces en la antigua China y también se utilizó en la civilizaciones Griega y Romana. 75.40 - 95.14 Algoritmos y Programación I La Rueda de Pascal o Pascalina, construida por Blaise Pascal (Francia) con ruedas dentadas, es considerada una de las calculadoras más antiguas (1642). Inicialmente solo permitía realizar adiciones, pero en el curso de los diez años siguientes añadió mejoras, siendo finalmente capaz de hacer restas. Curso Prof. Servetto Gottfried Leibniz (Alemania) extendió las ideas de Blaise Pascal y, en 1671, introdujo el Staffelwalze (tambor de paso, también conocido como el Stepped Reckoner o aritmómetro de Leibniz), un dispositivo que, así como ejecutaba adiciones y sustracciones, podía multiplicar, dividir y sacar raíces cuadradas mediante una serie de pasos de adiciones. 14 La máquina analítica es el diseño de un computador moderno de uso general realizado por el profesor británico de matemáticas Charles Babbage, que representó un paso importante en la historia de la computación. Fue inicialmente descrita en 1816, aunque Babbage continuó refinando el diseño hasta su muerte en 1871. 75.40 - 95.14 Algoritmos y Programación I Curta (inventada por Curt Herzstark) fue una calculadora mecánica introducida en 1948 en Liechtenstein. Era pequeña y tenía una manivela para ser operada. Podía ser usada para realizar operaciones de adición, sustracción, multiplicación, división, y, con más dificultad, raíces cuadradas y otras operaciones. El diseño de Curta fue una variante del aritmómetro de Leibniz, acumulando valores en ruedas dentadas, que eran sumados o complementados por un mecanismo de tambor de paso. Curso Prof. Servetto Mark I, fue el primer ordenador electromecánico, construido en IBM y enviado a Harvard en 1944. Tenía 760.000 ruedas y 800 kilómetros de cable y se basaba en la máquina analítica de Charles Babbage. El computador empleaba señales electromagnéticas para mover las partes mecánicas. Funcionaba con relés, se programaba con interruptores y leía los datos de cintas de papel perforado. 15 La EDVAC (Electronic Discrete Variable Automatic Computer) fue diseñada por John Mauchly y John P. Eckert en la Univ. de Pennsylvania (1945). Tanto los programas como los datos de trabajo estaban almacenados en un solo espacio de almacenamiento unificado. Este diseño básico, que sería conocido como la arquitectura de von Neumann, serviría como la base para el desarrollo de las primeras computadoras digitales de propósito general, llamadas de primera generación (válvulas de vacío). 75.40 - 95.14 Algoritmos y Programación I El IBM 1401 (1960 a 1964) llegó a monopolizar casi un tercio del mercado mundial. Comprendía perforado y lectura de tarjetas a alta velocidad, cinta magnética para entrada y salida, impresión de alta velocidad, programa almacenado, y capacidad aritmética y lógica. Se destacó como un sistema de segunda generación (transistores). Curso Prof. Servetto El PET (Personal Electronic Transactor) fue una de las primeras computadoras personales o de tercera generación, producida por Commodore a finales de los 70; éstas se basaban en la invención de Jack St. Clair Kilby y Robert Noyce, el circuito integrado (o microchip), que condujo más adelante a la invención del microprocesador, por Ted Hoff y Federico Faggin en Intel. 16 Evolución Histórica Orígenes Los dispositivos de Pascal y Leibniz (siglo XVII) fueron los antepasados de las computadoras de escritorio de hoy, y los derivados de estas máquinas, incluyendo la calculadora Curta (siglo XX), continuaron siendo producidos hasta que a principios de los años 1970 sus equivalentes electrónicos finalmente llegaron a ser fácilmente disponibles y baratos. El primer intento de Charles Babbage para diseñar una máquina fue la máquina diferencial, que fue un computador diseñado específicamente para construir tablas de logaritmos y de funciones trigonométricas evaluando polinomios por aproximación. Si bien este proyecto no vio la luz por razones económicas y personales, Babbage comprendió que parte de su trabajo podía ser aprovechado en el diseño de un computador de propósito general, de manera que inició el diseño de la máquina analítica (siglo XIX). 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 17 Evolución Histórica La máquina Analítica de Babbage La máquina analítica de Babbage debía funcionar con un motor a vapor y habría tenido 30 metros de largo por 10 de ancho. Para la entrada de datos y programas había pensado utilizar tarjetas perforadas, que era un mecanismo ya utilizado en la época para dirigir diversos equipos mecánicos (p.e. los telares de Jacquard, 1805). La salida debía producirse por una impresora, un equipo de dibujo y una campana. La máquina debía también perforar tarjetas que podrían ser leídas posteriormente. La máquina analítica trabajaba con una aritmética de coma fija en base 10 y poseía una memoria capaz de almacenar 1.000 números de 50 dígitos cada uno. Una unidad aritmética estaría encargada de realizar las operaciones aritméticas. Augusta Ada Byron, Condesa de Lovelace, publicó un artículo (mediados del siglo XIX) en el que demostraba cómo la máquina analítica podía programarse. Como reconocimiento a su trabajo, ella ha sido descrita en muchas ocasiones como la primera programadora. El Lenguaje de programación Ada, actualmente utilizado, lleva su nombre. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 18 Evolución Histórica Siglo XIX 1854: el lógico inglés George Boole publica su Álgebra de Boole. El sistema de Boole redujo a argumentos lógicos las permutaciones de tres operadores básicos algebraicos: y, o, y no. A causa del desarrollo del álgebra de Boole, Boole es considerado por muchos como el padre de la teoría de la informática. 1869: La primera máquina lógica en usar el álgebra de Boole para resolver problemas más rápido que humanos, fue inventada por William Stanley Jevons. La máquina, llamada el piano lógico, usó un alfabeto de cuatro términos lógicos para resolver silogismos complicados. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 19 Evolución Histórica Siglo XIX 1879: a los 19 años de edad, Herman Hollerith es contratado como asistente en las oficinas del censo estadounidense y desarrolló un sistema de cómputo mediante tarjetas perforadas en las que los agujeros representaban información sobre el sexo o la edad, entre otros. Gracias a la máquina tabuladora de Hollerith el censo de 1890 se realizó en dos años y medio, cinco menos que el censo de 1880. Se tardaba tanto en hacer el censo debido a la llegada masiva de inmigrantes. 1884: Dorr Felt desarrolló su comptómetro, el cual fue la primera calculadora que se operaba con sólo presionar teclas en vez de, por ejemplo, deslizar ruedas. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 20 Evolución Histórica Siglo XX 1906: el estadounidense Lee De Forest inventa el tubo de vacío. El Audion, como se llamaba, tenía tres elementos dentro de una bombilla del vidrio evacuada. Los elementos eran capaces de hallar y amplificar señales de radio recibidas de una antena. El tubo al vacío encontraría uso en varias generaciones tempranas de 5 computadoras, a comienzos de 1930. 1919: los inventores estadounidenses W. H. Eccles y F. W. Jordan desarrollan el primer circuito multivibrador o biestable (en léxico electrónico flip-flop). El flipflop permitió diseñar circuitos electrónicos que podían tener dos estados estables, alternativamente, pudiendo representar así el 0 como un estado y el otro con un 1. Esto formó la base del almacenamiento y proceso del bit binario, estructura que utilizan las actuales computadoras. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 21 Evolución Histórica Siglo XX 1931: Kurt Gödel publicó un documento sobre los lenguajes formales basados en operaciones aritméticas. Lo usó para codificar arbitrariamente sentencias y pruebas formales, y mostró que los sistemas formales, como las matemáticas tradicionales, son inconsistentes en un cierto sentido, o que contienen sentencias improbables pero ciertas. Sus resultados son fundamentales en las ciencias teóricas de la computación. 1936: Alan Turing describe la máquina de Turing, la cual formaliza el concepto de algoritmo. 1936: Konrad Zuse completa la primera computadora electromecánica, aunque no 100% operativa, la Z1. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 22 Evolución Histórica Siglo XX 1938: se encuentra la primera generación de computadoras que eran a base de tubos de vacío, esta generación abarca desde 1938 hasta 1958 donde inicia la segunda generación. 1940: Samuel Williams y George Stibitz completaron en los laboratorios Bell una calculadora electromecánica que podía manejar números complejos. 1941: la computadora Z3 fue creada por Konrad Zuse. Fue la primera máquina programable y completamente automática. 1942: John Vincent Atanasoff y Clifford Edward Berry completaron una calculadora de propósito especial para resolver sistemas de ecuaciones lineales simultáneas, la cual fue llamada la "ABC " (Atanasoff Berry Computer). 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 23 Evolución Histórica Siglo XX 1944: en Estados Unidos se construyó, en la Universidad de Harvard, la Harvard Mark I (primera máquina electromecánica), diseñada por un equipo encabezado por Howard H. Aiken. 1944: en Inglaterra se construyeron los ordenadores Colossus (Colossus Mark I y Colossus Mark 2), con el objetivo de descifrar las comunicaciones de los alemanes durante la Segunda guerra mundial. 1946: en la Universidad de Pensilvania se construye la ENIAC (Electronic Numerical Integrator And Calculator), que fue la primera computadora electrónica de propósito general. Esta máquina ocupaba todo un sótano de la Universidad, tenía más de 18.000 tubos de vacío, consumía 200 kW de energía eléctrica y requería todo un sistema de aire acondicionado; tenía la capacidad para realizar cinco mil operaciones aritméticas por segundo. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 24 Evolución Histórica Siglo XX 1947: en Laboratorios Bell, John Bardeen, Walter H. Brattain y William Shockley inventan el transistor. 1949: Jay Forrester desarrolla la primera memoria, la cual reemplazó los no confiables tubos al vacío como la forma predominante de memoria por los próximos diez años. 1950: Alan Turing expone un artículo que describe lo que ahora conocemos como la prueba de Turing. Su publicación explora el desarrollo natural y potencial de la inteligencia y comunicación humana y de computadoras. 1951: comienza a operar la EDVAC, a diferencia de la ENIAC, no era decimal, sino binaria y tuvo el primer programa diseñado para ser almacenado. 1953: se crean memorias a base de magnetismo (conocidas como memorias de núcleos magnéticos). 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 25 Evolución Histórica Siglo XX 1953: IBM fabrica su primera computadora a escala industrial, la IBM 650. Se amplía el uso del lenguaje ensamblador para la programación de las computadoras. 1954: se desarrolla el lenguaje de programación de alto nivel Fortran. 1956: Darthmouth da una conferencia en a partir de la que nace el concepto de inteligencia artificial. 1957: IBM pone a la venta la primera impresora de matriz de puntos. 1958: comienza la segunda generación de computadoras, caracterizados por usar circuitos transistorizados en vez de válvulas al vacío. 1960: se desarrolla COBOL, el primer lenguaje de programación de alto nivel transportable entre modelos diferentes de computadoras. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 26 Evolución Histórica Siglo XX 1960: aparece ALGOL, el primer lenguaje de programación estructurado y orientado a los procedimientos. 1960: se crea el primer compilador de computador. 1962: un comité industrial gubernamental define el código estándar de caracteres ASCII. 1963: DEC (Digital Equipment Corporation) lanza el primer minicomputador comercialmente exitoso. 1964: la aparición del IBM 360 marca el comienzo de la tercera generación de computadoras. Las placas de circuito impreso con múltiples componentes elementales pasan a ser reemplazadas con placas de circuitos integrados. 1964: aparece el CDC 6600, la primera supercomputadora comercialmente disponible. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 27 Evolución Histórica Siglo XX 1964: en el Dartmouth College, John George Kemeny y Thomas Eugene Kurtz desarrollan el lenguaje BASIC (el Dartmouth BASIC). 1966: la mayoría de ideas y conceptos que existían sobre redes se aplican a la red militar ARPANET. 1966: aparecen los primeros ensayos que más tarde definirían lo que hoy es la programación estructurada. 1967: en IBM, David Noble ―bajo la dirección de Alan Shugart― inventa el disquete (disco flexible). 1969: en los laboratorios Bell de AT&T, un grupo de empleados de dicho laboratorio entre los que se encuentran Ken Thompson, Dennis Ritchie y Douglas Mcllroy― crean el sistema operativo Unix. 1970: el profesor suizo Niklaus Wirth desarrolla el lenguaje de programación Pascal. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 28 Evolución Histórica Siglo XX 1971: Intel presenta el primer procesador comercial y a la vez el primer chip microprocesador, el Intel 4004. 1971: Ray Tomlinson crea el primer programa para enviar correo electrónico. Como consecuencia, la arroba se usa por primera vez con fines informáticos. 1971: en el MIT, un grupo de investigadores presentan la propuesta del primer "Protocolo para la transmisión de archivos en Internet" (FTP). 1972: en los Laboratorios Bell, Ken Thompson y Dennis M. Ritchie crean el lenguaje de programación C. 1973: La división de investigación Xerox PARC desarrollo el primer ordenador que utilizó el concepto de Computadora de Escritorio llamado Xerox Alto, además de ser el primer ordenador en utilizar una interfaz gráfica (GUI) y un mouse. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 29 Evolución Histórica Siglo XX 1974: Vint Cerf y Robert Kahn crean el TCP (protocolo de control de transmisión). 1974: Se crea el sistema Ethernet para enlazar a través de un cable único a las computadoras de una LAN (red de área local). 1974: Gary Kildall crea el sistema operativo CP/M (Control Program for Microcomputer). Violando sus derechos de autor, se desarrolla el sistema operativo MSDOS. 1981: se lanza al mercado el IBM PC, que se convertiría en un éxito comercial, marcaría una revolución en el campo de la computación personal y definiría nuevos estándares. 1981: se termina de definir el protocolo TCP/IP. 1981: Apple presenta el primer computador personal que se vende a gran escala, el Apple II. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 30 Evolución Histórica Siglo XX 1982: creación del protocolo SMTP, que permitía por primera vez el intercambio de correos electrónicos en ARPANET. 1983: Compaq fabrica el primer clon PC IBM compatible, el Compaq portable. 1983: ARPANET se separa de la red militar que la originó, de modo que, ya sin fines militares, se puede considerar esta fecha como el nacimiento de Internet. 1983: Bjarne Stroustrup publica el lenguaje de programación C++. 1984: las compañías Philips y Sony crean los CDRoms para computadores. 1984: HewlettPackard lanza su popular impresora láser llamada LaserJet. 1990: Tim Berners Lee idea el hipertexto para crear la World Wide Web (www) una nueva manera de interactuar con Internet. También creó las bases del protocolo de transmisión HTTP, el lenguaje de documentos HTML y el concepto de los URL. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 31 Evolución Histórica Siglos XX y XXI 1991: Linus Torvalds comenzó a desarrollar Linux, un sistema operativo compatible con Unix. 1991: comienza a popularizarse la programación orientada a objetos. 1991: surge la primera versión del estándar Unicode. 1995: se especifica la versión 1.5 del DVD, base actual del DVD. 1996: se crea Internet2, más veloz que la Internet original. 2000: un equipo de investigadores de IBM construye el prototipo de computador cuántico. 2007: La empresa Dell lanza al mercado la primera computadora portátil (laptop) con la distribución Linux Ubuntu preinstalada. 2007: Apple lanza el iPhone 2G. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 32 Repercusiones Sociales Sobre cómo el progreso de la informática repercute en los principios y la organización de la sociedad. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 33 Principales Áreas de Repercusión El derecho: cuestionamientos sobre los derechos de la propiedad intelectual y las obligaciones que generan. La Ética: desafíos frente a los cambios en el comportamiento social. El Gobierno: debates sobre el alcance de las regulaciones sobre las tecnologías informáticas y sus aplicaciones. La Filosofía: disputas sobre la presencia de comportamiento inteligente o de inteligencia en sí misma. La sociedad en general: cuestionamientos acerca de si las nuevas aplicaciones implican más libertad o nuevos controles. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 34 Enfoques Éticos según los Principios que Conducen a las Decisiones Éticas basadas en las consecuencias: analizan las consecuencias frente a varias opciones. P. e. el utilitarismo entiende que la decisión “correcta” es aquella que produce el mayor bien para el mayor número de personas. Parecería resolver el dilema ético, pero por otro lado permitiría que la mayoría de la sociedad esclavice a una minoría. La ética que inherentemente enfatiza las consecuencias tiende a ver al ser humano como un medio para un fin menospreciando su individualidad. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 35 Enfoques Éticos según los Principios que Conducen a las Decisiones La ética basada en el “deber” no toma en consideración las decisiones y sus consecuencias sino que propone que los miembros de la sociedad tienen obligaciones y deberes que son el fundamento para la toma de decisiones. P. e. si uno acepta como obligación el respeto por el otro, entonces rechaza la esclavitud. Opositores a la ética basada en el “deber” sostienen que no puede resolver problemas que involucren deberes que entran en conflicto: p. e. ¿se debe decir la verdad aún violando una confidencia de un colega? ¿debe una nación defenderse en una guerra aún si el resultado de las batallas conducen a la muerte de muchos de sus ciudadanos? 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 36 Enfoques Éticos según los Principios que Conducen a las Decisiones La ética basada en el “contrato” imagina una sociedad sin fundamentos éticos: los individuos deben valerse por sí mismos y estar permanentemente en guardia contra agresiones de otros. Propone que los miembros de la sociedad deberían realizar contratos entre ellos, p. e. yo no te robo si tu no me robas. Opositores a la ética basada en el “contrato” sostienen que no provee una base lo suficientemente amplia para resolver dilemas éticos ya que sólo provee pautas de comportamiento para contratos establecidos (se puede hacer lo que uno quiera ante situaciones no cubiertas por un contrato). 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 37 Enfoques Éticos según los Principios que Conducen a las Decisiones La ética basada en la virtud ( Platón / Aristóteles) sostiene que el “buen comportamiento” no es el resultado de aplicar normas sino que deviene del “buen carácter”. Es la ética basada en caracteres la que subyace en el enfoque normalmente tomado cuando se enseña ética a los profesionales de diversos campos. En lugar de presentar teorías éticas específicas, el enfoque es introducir casos de estudio que exponen a una variedad de cuestiones éticas en las áreas de especialización de los profesionales. Entonces, al discutir los pro y contras en estos casos, los profesionales se vuelven más conscientes, perspicaces, y sensibles a los peligros que acechan en su vida profesional y así crecen en carácter. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 38 Cuestiones Sociales Generalmente, se acepta que la sociedad es diferente de lo que hubiera sido sin la revolución de la computación. Nuestra sociedad ¿es mejor de lo que hubiera sido sin esta revolución? ¿es peor? Si su posición en la sociedad fuera otra ¿su respuesta cambiaría? ¿Es aceptable participar en la sociedad tecnológica de hoy sin tratar de entender lo básico de la tecnología? Usando dinero en efectivo en transacciones comerciales, la gente maneja sus finanzas sin pagar costos de servicios financieros, pero la mayor parte de estos servicios se cobran. P. e. si un empleador le paga a sus empleados únicamente con cheques y todas las instituciones financieras cobran por el servicio de cheques ¿podría tratarse de un trato discriminatorio? ¿qué pasa si el empleador insiste en pagar sólo con cheques? 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 39 Cuestiones Sociales En el campo de la educación, a medida que avanzan las tecnologías se debe reconsiderar el nivel de abstracción con el que se presentan los temas ¿Cómo afecta el uso de calculadoras las habilidades para resolver problemas matemáticos? ¿Cómo afectan las correcciones ortográficas y gramaticales el dominio de la ortografía y la gramática? ¿Qué otros ejemplos se pueden encontrar que involucren controversias similares? El concepto de bibliotecas públicas se basa en la premisa de que todos los individuos deben tener acceso a la información ¿Se puede decir que Internet cumple esa premisa? A medida que la sociedad se automatiza es más fácil para los gobiernos controlarnos, esto ¿es bueno o malo? La sociedad es demasiado dependiente de las tecnologías de información y comunicación ¿Qué pasaría se hubiera una interrupción a largo plazo de internet y/o de la telefonía celular? El sistema GPS de los teléfonos inteligentes permite que ciertas aplicaciones detecten la localización de otros teléfonos ¿Esto es bueno? ¿Qué riesgos entraña? 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 40 Arquitectura de Computadoras Diseño conceptual y estructura operacional fundamental de un sistema de computadora 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 41 Computadora La computadora (del inglés: computer; y este del latín: computare, 'calcular'), también denominada computador u ordenador (del francés: ordinateur; y este del latín: ordinator), es una máquina electrónica que recibe y procesa datos para convertirlos en información conveniente y útil. Una computadora está formada, físicamente, por numerosos circuitos integrados y otros muchos componentes de apoyo, extensión y accesorios, que en conjunto pueden ejecutar tareas diversas con suma rapidez y bajo el control de un programa. Desde el punto de vista funcional es una máquina que posee, al menos, una unidad central de procesamiento, una memoria principal y algún periférico o dispositivo de entrada y otro de salida. Los dispositivos de entrada permiten el ingreso de datos, la CPU se encarga de su procesamiento (ejecución de programas y operaciones arimético-lógicas) y los dispositivos de salida los comunican a otros medios. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 42 Computadora La computadora recibe datos, los procesa y emite la información resultante, la que luego puede ser interpretada, almacenada, transmitida a otra máquina o dispositivo o sencillamente impresa; todo ello a criterio de un operador o usuario y bajo el control de un programa. Básicamente, la capacidad de una computadora depende de sus componentes de hardware, en tanto que la diversidad de tareas radica mayormente en el software que admita ejecutar y contenga instalado. Una computadora digital representa toda la información usando el sistema binario. Texto, números, imágenes, sonido y casi cualquier otra forma de información puede ser transformada en una sucesión de bits, o dígitos binarios, cada uno de los cuales tiene un valor de 1 o 0. La unidad de almacenamiento más común es el byte, igual a 8 bits. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 43 Componentes Las tecnologías utilizadas en computadoras digitales han evolucionado mucho desde la aparición de los primeros modelos en los años 1940, aunque la mayoría todavía utiliza la Arquitectura de von Neumann, publicada por John von Neumann a principios de esa década, que otros autores atribuyen a John Presper Eckert y John William Mauchly. La arquitectura de Von Neumann describe una computadora con tres (3) componentes principales: la unidad central de procesamiento, la memoria primaria, principal o central, y los dispositivos de entrada y salida (E/S). Estas partes están interconectadas por canales de conductores denominados buses. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 44 Unidad Central de Procesamiento La unidad central de procesamiento (del inglés Central Processing Unit, CPU), es el hardware dentro de un computador u otros dispositivos programables, que ejecuta las instrucciones de un programa mediante la realización de las operaciones básicas aritméticas, lógicas y de entrada/salida del sistema. Una computadora puede tener más de una CPU; esto se llama multiprocesamiento. Todas las CPU modernas son microprocesadores, lo que significa que contienen un solo chip. Algunos circuitos integrados (CI) pueden contener varias CPU en un solo chip; estos CI son denominados procesadores multi-core o multinúcleo. Un CI que contiene una CPU también puede contener los dispositivos periféricos, y otros componentes de un sistema informático; esto se llama un sistema en un chip (SoC). No todos los sistemas computacionales se basan en una unidad central de procesamiento. Una matriz de procesadores o procesador vectorial tiene múltiples elementos de cómputo en paralelo, sin una unidad considerada el "centro". En el modelo de computación distribuida, se resuelven problemas mediante un conjunto interconectado y distribuido de procesadores. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 45 Unidad Central de Procesamiento Una unidad central de procesamiento o CPU consta básicamente de los siguientes tres elementos: La unidad aritmético lógica (ALU, por sus siglas del inglés: Arithmetic-Logic Unit) es el dispositivo diseñado y construido para llevar a cabo las operaciones elementales como las operaciones aritméticas, operaciones lógicas (Y, O, NO), y operaciones de comparación o relacionales. En esta unidad es en donde se hace todo el trabajo computacional. La unidad de control (UC) sigue la dirección de las posiciones en memoria que contienen la instrucción que el computador va a realizar en ese momento; recupera la información poniéndola en la ALU para la operación que debe desarrollar. Transfiere luego el resultado a ubicaciones apropiadas en la memoria. Una vez que ocurre lo anterior, la unidad de control va a la siguiente instrucción (normalmente situada en la siguiente posición, a menos que la instrucción sea una instrucción de salto, informando al ordenador de que la próxima instrucción estará ubicada en otra posición de la memoria). Los registros: memorias de alta velocidad y poca capacidad que permiten guardar transitoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas. Los procesadores pueden constar además de otras unidades adicionales como la unidad de coma flotante. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 46 Memoria Primaria La memoria primaria, conocida como memoria de acceso aleatorio (RAM, por sus siglas del inglés: RandomAccess Memory), se compone de celdas de almacenamiento de bits numeradas, que contienen los programas en ejecución y datos con que operan. Está directamente conectada a la CPU a través de buses de direcciones (para seleccionar la dirección del dato o del periférico al que se quiere acceder), datos (por donde circulan los datos) y control (para seleccionar la operación a realizar sobre el dato -lectura, escritura o modificación). Se dice que es de acceso aleatorio porque la CPU puede acceder a cualquier celda por su número o dirección en la misma cantidad de tiempo, sea para copiar su contenido a un registro o viceversa. Actualmente, las celdas de memoria tienen capacidades de almacenamiento para 32 o 64 bits. La gran diferencia de velocidad entre el procesador y la memoria primaria dio origen a la memoria caché, de muy alta velocidad, típicamente entre 10 y 100 veces más que la memoria primaria, y que se emplea para mejorar la eficiencia o rendimiento del CPU. Parte de la información de la memoria principal se duplica en la memoria caché. Comparada con los registros, la caché es ligeramente más lenta, pero de mayor capacidad. Sin embargo, es más rápida, aunque de mucha menor capacidad que la memoria principal. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 47 Unidad Central de Procesamiento Memoria Central Unidad aritmético-lógica Bus … Unidad de control Registros 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 48 Limitaciones Tecnológicas El canal o bus de transmisión de los datos compartido entre CPU y memoria genera un cuello de botella de Von Neumann, un rendimiento limitado (tasa de transferencia de datos) entre la CPU y la memoria en comparación con la cantidad de memoria. En la mayoría de computadoras modernas, la velocidad de comunicación entre la memoria y la CPU es más baja que la velocidad a la que puede trabajar esta última, reduciendo el rendimiento del procesador y limitando seriamente la velocidad de proceso eficaz, sobre todo cuando se necesitan procesar grandes cantidades de datos. La CPU se ve forzada a esperar continuamente a que lleguen los datos necesarios desde o hacia la memoria. El problema de rendimiento puede ser aliviado (hasta cierto punto) utilizando diversos mecanismos: introduciendo una memoria caché entre la CPU y la memoria principal, proporcionando cachés separadas y buses independientes para datos e instrucciones (la llamada arquitectura Harvard modificada), utilizando algoritmos y lógica de predicción de saltos, e implementando un mecanismo de procesamiento adelantado de instrucciones (pipelining). 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 49 Memoria Secundaria La memoria primaria está directamente conectada a la CPU de la computadora. Se puede transferir información muy rápidamente entre un registro del microprocesador y localizaciones de la memoria principal. La memoria secundaria requiere que la computadora use sus canales de entrada/salida para acceder a la información y se utiliza para almacenamiento a largo plazo de información persistente. Sin embargo, la mayoría de los sistemas operativos usan los dispositivos de almacenamiento secundario como área de intercambio para incrementar artificialmente la cantidad aparente de memoria principal en la computadora (a esta utilización del almacenamiento secundario se le denomina memoria virtual). La memoria secundaria también se llama de «almacenamiento masivo». Un disco duro es un ejemplo de almacenamiento secundario. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 50 Memoria Secundaria Habitualmente, la memoria secundaria o de almacenamiento masivo tiene mayor capacidad que la memoria primaria, pero es mucho más lenta. El tiempo necesario para acceder a un byte de información dado almacenado en un disco duro de platos magnéticos es de unas milésimas de segundo (milisegundos). En cambio, el tiempo para acceder al mismo tipo de información en una memoria de acceso aleatorio (RAM) se mide en milmillonésimas de segundo (nanosegundos). Esto ilustra cuan significativa es la diferencia entre la velocidad de las memorias de estado sólido y la velocidad de los dispositivos rotantes de almacenamiento magnético u óptico: los discos duros son del orden de un millón de veces más lentos que la memoria primaria. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 51 Almacenamiento y Manipulación de Bits Información binaria, operaciones booleanas y notación hexadecimal 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 52 Información Binaria Dentro de las computadoras actuales, la información se codifica en patrones de ceros y unos. Estos dígitos binarios se denominan bits (del inglés binary digits). Se utilizan patrones de bits para representar instrucciones a la computadora, valores numéricos, caracteres alfabéticos y signos de puntuación, imágenes y sonido. Para entender cómo se almacenan y manipulan bits individuales dentro de una computadora, conviene imaginar que el 0 representa al valor falso, y el 1 al valor verdadero. Las operaciones que manipulan valores verdadero/falso se denominan booleanas, en honor al matemático George Boole (1815–1864), quien fue un pionero en el campo de la lógica matemática. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 53 Operaciones Booleanas Tres de las operaciones básicas son Y (AND), O (OR) y O EXCLUSIVO (XOR – eXclusive OR), que son similares a las aritméticas de multiplicación y suma debido a que combinan a dos valores de entrada para producir un tercero como resultado, pero con valores verdadero/falso en vez de numéricos. 75.40 - 95.14 Algoritmos y Programación I Conjunción Disyunción Disyunción Exclusiva Curso Prof. Servetto 54 Operaciones Booleanas Lógica Proposicional Bivalente Extensional Las operaciones AND, OR y XOR reflejan la verdad o falsedad de una proposición lógica compuesta por la conjunción, disyunción o disyunción exclusiva de dos proposiciones simples. Sus representaciones simbólicas usuales son: P Q, P Q, P Q. Otra operación básica es NO (NOT), que difiere de las anteriores porque sólo tiene un valor de entrada. Su resultado es el opuesto al valor de entrada: si la entrada es el valor verdadero, entonces el resultado es falso, y viceversa. La operación NOT refleja la verdad o falsedad de la negación de una proposición simple: P. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 55 Notación Hexadecimal Para considerar las actividades internas de una computadora se debe tratar con patrones o strings (sucesiones, cadenas o secuencias) de bits. Las secuencias largas de bits se denominan a menudo streams (oleada o sarta) de bits. Los streams son difíciles de interpretar para la mente humana, y sus transcripciones resultan tediosas y propensas a errores. Para simplificar la representación de tales patrones de bits, conviene usar una notación abreviada llamada hexadecimal, que toma ventaja del hecho de que los patrones dentro de una computadora tienen longitudes múltiplo de 4. En particular, la notación hexadecimal usa un símbolo simple (dígito hexadecimal) para representar un patrón de 4 bits. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto Patrón de Bits Dígito Hexadecimal 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F 56