1 00:00:00,820 --> 00:00:19,280 Vale, pues a ver, dentro de esas ideas muy generales que están aquí recogidas, si lo descargamos para tenerlo como guía, bueno, pues entonces, ¿qué es un ordenador? 2 00:00:19,280 --> 00:00:31,519 Esto no lo quiero. Esto sí. Vale. Ya sabemos que un ordenador tiene una arquitectura, los que habéis hecho grado medio lo sabéis mejor que los demás, los que no lo sabéis da un poco igual. 3 00:00:32,119 --> 00:00:47,159 Podemos hacer un resumen, que veréis más detallado en sistemas, de que un ordenador tiene una arquitectura de una CPU que está recibiendo continuamente instrucciones que están alojadas en su memoria RAM. 4 00:00:47,159 --> 00:00:50,759 esas instrucciones que va recibiendo 5 00:00:50,759 --> 00:00:51,700 las va ejecutando 6 00:00:51,700 --> 00:00:54,000 esas instrucciones son 7 00:00:54,000 --> 00:00:54,640 desde 8 00:00:54,640 --> 00:00:58,020 lo que hace el sistema operativo 9 00:00:58,020 --> 00:01:00,619 pues cuando tú le das doble clic a un icono 10 00:01:00,619 --> 00:01:02,880 recibe la CPU 11 00:01:02,880 --> 00:01:04,459 las instrucciones de 12 00:01:04,459 --> 00:01:06,180 abre el icono 13 00:01:06,180 --> 00:01:07,900 muestra lo que hay dentro 14 00:01:07,900 --> 00:01:09,379 eso es un ordenador 15 00:01:09,379 --> 00:01:12,780 una CPU que tiene una secuencia enorme 16 00:01:12,780 --> 00:01:15,379 de sentencias en su memoria RAM 17 00:01:15,379 --> 00:01:17,819 que se van entregando 18 00:01:17,819 --> 00:01:19,159 de forma secuenciada 19 00:01:19,159 --> 00:01:21,519 y la CPU 20 00:01:21,519 --> 00:01:22,480 las va ejecutando 21 00:01:22,480 --> 00:01:25,340 y esas sentencias son de todo tipo 22 00:01:25,340 --> 00:01:27,519 lo que el sistema operativo le va mandando 23 00:01:27,519 --> 00:01:27,939 que haga 24 00:01:27,939 --> 00:01:31,099 que tú ejecutas un programa que has hecho tú 25 00:01:31,099 --> 00:01:33,060 pues en particular ese programa 26 00:01:33,060 --> 00:01:34,400 todo, una secuencia de cosas 27 00:01:34,400 --> 00:01:35,239 todo el rato 28 00:01:35,239 --> 00:01:39,459 desde el momento en que se arranca 29 00:01:39,459 --> 00:01:40,659 claro, cuando el ordenador 30 00:01:40,659 --> 00:01:42,640 se arranca 31 00:01:42,640 --> 00:01:45,200 en el momento de arrancarse en la RAM 32 00:01:45,200 --> 00:01:46,680 ya 33 00:01:46,680 --> 00:01:49,439 creo que más o menos todos sabemos 34 00:01:49,439 --> 00:01:51,079 pero bueno, sistemas informáticos 35 00:01:51,079 --> 00:01:52,500 estudias con detalles 36 00:01:52,500 --> 00:01:55,239 en la RAM no hay nada, la RAM es la memoria que está vacía 37 00:01:55,239 --> 00:01:56,819 en la RAM no hay nada 38 00:01:56,819 --> 00:01:59,420 solo hay cosas cuando el ordenador ya ha arrancado 39 00:01:59,420 --> 00:02:01,099 entonces 40 00:02:01,099 --> 00:02:03,280 una pequeña 41 00:02:03,280 --> 00:02:05,200 memoria que no se borra nunca 42 00:02:05,200 --> 00:02:07,359 una pequeña memoria que no se borra nunca 43 00:02:07,359 --> 00:02:08,460 que es la memoria BIOS 44 00:02:08,460 --> 00:02:10,039 pues coge 45 00:02:10,039 --> 00:02:11,659 la 46 00:02:11,659 --> 00:02:14,520 desencadena todo el proceso 47 00:02:14,520 --> 00:02:17,419 para que se cargue en RAM 48 00:02:17,419 --> 00:02:20,280 lo primero que hay que ejecutar 49 00:02:20,280 --> 00:02:22,379 se cargan esas primeras sentencias 50 00:02:22,379 --> 00:02:24,139 eso ya se empieza a ejecutar 51 00:02:24,139 --> 00:02:25,860 a partir de ahí se van dando órdenes 52 00:02:25,860 --> 00:02:27,879 para que se vayan cargando las siguientes, etc. 53 00:02:28,500 --> 00:02:29,939 y eso es lo que hace un ordenador 54 00:02:29,939 --> 00:02:31,840 de principio a fin, desde que le damos a load 55 00:02:31,840 --> 00:02:33,000 hasta que le damos a load 56 00:02:33,000 --> 00:02:35,439 ir cogiendo sentencias que están en la RAM 57 00:02:35,439 --> 00:02:37,479 irlas ejecutando 58 00:02:37,479 --> 00:02:38,960 e irnos mostrando los resultados 59 00:02:38,960 --> 00:02:40,199 ¿vale? 60 00:02:41,240 --> 00:02:44,219 bueno, la suerte que tenemos es que lo hace muy rápido 61 00:02:44,219 --> 00:02:46,819 entonces nosotros aprovechamos de eso 62 00:02:46,819 --> 00:02:48,819 que tenemos que resolver una tarea 63 00:02:48,819 --> 00:02:49,840 por ejemplo 64 00:02:49,840 --> 00:02:52,520 pues tengo que dar el ok 65 00:02:52,520 --> 00:02:54,860 a 28.000 66 00:02:54,860 --> 00:02:55,580 facturas 67 00:02:55,580 --> 00:02:58,620 pues hombre, un humano dar el ok 68 00:02:58,620 --> 00:02:59,939 a 28.000 facturas 69 00:02:59,939 --> 00:03:02,219 pues tendría que ir factura por factura 70 00:03:02,219 --> 00:03:03,580 sería muy lento 71 00:03:03,580 --> 00:03:06,860 nos aprovechamos de que el ordenador lo hace muy rápido 72 00:03:06,860 --> 00:03:08,840 esas facturas 73 00:03:08,840 --> 00:03:11,020 las digitalizamos 74 00:03:11,020 --> 00:03:13,020 y hacemos un programa 75 00:03:13,020 --> 00:03:13,919 que es capaz 76 00:03:13,919 --> 00:03:22,219 de leer los datos que constituyen las facturas, leer los datos, ir poniendo el ok y generando el resultado, etc. 77 00:03:22,219 --> 00:03:27,379 Entonces nos aprovechamos de que la CPU hace lo que nosotros sabemos hacer muy rápido. 78 00:03:29,360 --> 00:03:37,199 ¿Qué ocurre? Que a la CPU hay que decirle cómo hacerlo y con qué hacerlo, pues con qué datos. 79 00:03:38,180 --> 00:03:40,039 Entonces, es fundamental dos cosas. 80 00:03:40,759 --> 00:03:42,580 ¿Con qué datos tienes que trabajar? 81 00:03:43,319 --> 00:03:45,099 ¿Y qué tienes que hacer? 82 00:03:45,199 --> 00:03:46,199 ¿Cómo lo tienes que hacer? 83 00:03:46,960 --> 00:03:48,000 Pues eso es un programa. 84 00:03:48,979 --> 00:03:50,099 Eso es lo que nosotros hacemos. 85 00:03:51,219 --> 00:03:55,080 Un conjunto ordenado de instrucciones que el ordenador ya es capaz de ejecutar. 86 00:03:56,520 --> 00:03:58,280 Nosotros nos plantean un problema. 87 00:03:59,180 --> 00:04:06,680 Vale, pues voy a decidir diseñar cómo elaboro un conjunto de instrucciones para conseguir este objetivo. 88 00:04:07,199 --> 00:04:14,599 Cuando ya lo tenga perfectamente elaborado, diseñado, etc., ya mi ordenador lo ejecutará y lo hará en un microsegundo. 89 00:04:15,500 --> 00:04:18,360 Si yo lo hubiera tenido que hacer a mano, habría tardado muchísimo más. 90 00:04:19,060 --> 00:04:23,519 Pero eso sí, a él hay que decirle cómo hacerlo paso a paso, cómo hacerlo paso a paso. 91 00:04:24,540 --> 00:04:27,240 Pues eso es un programa, el conjunto ordenado de instrucciones. 92 00:04:27,240 --> 00:04:32,379 Y eso es lo que nosotros hacemos, elaborar ese conjunto ordenado de instrucciones. 93 00:04:32,379 --> 00:04:38,860 entonces hay conceptos que aunque nosotros no nos metemos en ellos 94 00:04:38,860 --> 00:04:40,660 porque no nos importan especialmente 95 00:04:40,660 --> 00:04:43,860 tenemos que saber por cultura informática 96 00:04:43,860 --> 00:04:47,459 por cultura como desarrolladores hay conceptos que tenemos que saber 97 00:04:47,459 --> 00:04:51,339 esos conceptos son un poquito de los que voy dando pinceladas 98 00:04:51,339 --> 00:04:53,300 a lo largo del documento 99 00:04:53,300 --> 00:04:55,560 entonces una vez que está claro 100 00:04:55,560 --> 00:04:59,579 que un programa es un conjunto de instrucciones 101 00:04:59,579 --> 00:05:01,519 que mi ordenador ejecuta 102 00:05:01,519 --> 00:05:04,279 Ahora ya surgen un montón de preguntas 103 00:05:04,279 --> 00:05:05,620 Y es 104 00:05:05,620 --> 00:05:08,439 ¿Y cómo escribo yo esas instrucciones? 105 00:05:09,240 --> 00:05:09,680 Porque 106 00:05:09,680 --> 00:05:11,180 ¿Qué le digo yo al ordenador? 107 00:05:11,259 --> 00:05:12,639 Oye, pon un ok en la factura 108 00:05:12,639 --> 00:05:14,699 Y no me va a entender, lógicamente 109 00:05:14,699 --> 00:05:17,480 ¿Por qué no me va a entender? 110 00:05:18,420 --> 00:05:19,540 Porque nosotros 111 00:05:19,540 --> 00:05:21,860 Todos sabemos perfectamente 112 00:05:21,860 --> 00:05:23,300 Que la CPU que está aquí 113 00:05:23,300 --> 00:05:24,360 Este bicho de aquí 114 00:05:24,360 --> 00:05:27,560 Solo es capaz de entender 115 00:05:27,560 --> 00:05:30,079 Lo que le pasemos al lenguaje binario 116 00:05:30,079 --> 00:05:32,500 solo es capaz de entender esto, nada más 117 00:05:32,500 --> 00:05:34,160 entonces 118 00:05:34,160 --> 00:05:36,740 le tenemos que dar la secuencia 119 00:05:36,740 --> 00:05:38,459 de instrucciones a la CPU 120 00:05:38,459 --> 00:05:40,959 en binario, en ceros y unos 121 00:05:40,959 --> 00:05:42,000 que es lo único 122 00:05:42,000 --> 00:05:44,540 que es capaz de ser 123 00:05:44,540 --> 00:05:46,620 almacenado en la memoria 124 00:05:46,620 --> 00:05:48,319 en la RAM, en la RAM solamente 125 00:05:48,319 --> 00:05:49,939 en ceros y unos, ya está 126 00:05:49,939 --> 00:05:52,819 jolín, pues madre mía 127 00:05:52,819 --> 00:05:55,100 escribir un programa en ceros y unos 128 00:05:55,100 --> 00:05:56,480 que es el lenguaje 129 00:05:56,480 --> 00:05:57,600 y puede entender la CPU 130 00:05:57,600 --> 00:05:59,980 menuda tarea interminable 131 00:05:59,980 --> 00:06:02,519 un rollo, ¿quién es capaz de hacer eso? 132 00:06:04,199 --> 00:06:05,660 pues antiguamente se hacía 133 00:06:05,660 --> 00:06:07,779 antiguamente se hacía 134 00:06:07,779 --> 00:06:09,600 hace 60, 70 años 135 00:06:09,600 --> 00:06:12,519 a lo mejor no directamente en ceros y unos 136 00:06:12,519 --> 00:06:13,319 lógicamente 137 00:06:13,319 --> 00:06:15,839 sino en un lenguaje 138 00:06:15,839 --> 00:06:17,860 que se llamaba ensamblador 139 00:06:17,860 --> 00:06:23,529 que era una cosa 140 00:06:23,529 --> 00:06:24,689 como muy esotérica 141 00:06:24,689 --> 00:06:27,170 que ahora mostramos una imagen para que lo veáis 142 00:06:27,170 --> 00:06:30,009 que eran unas palabras súper raras 143 00:06:30,009 --> 00:06:31,870 unos símbolos muy extraños 144 00:06:31,870 --> 00:06:33,730 que directamente 145 00:06:33,730 --> 00:06:35,829 era muy fácil de traducir 146 00:06:35,829 --> 00:06:36,670 a ceros y unos 147 00:06:36,670 --> 00:06:39,370 o sea, programar, escribir las sentencias 148 00:06:39,370 --> 00:06:40,230 en ensamblador 149 00:06:40,230 --> 00:06:43,949 y escribirlas en ceros y unos era casi casi igual 150 00:06:43,949 --> 00:06:45,689 hombre, en ensamblador 151 00:06:45,689 --> 00:06:46,750 era un poquito más fácil 152 00:06:46,750 --> 00:06:49,430 porque al menos eran términos más humanos 153 00:06:49,430 --> 00:06:51,829 ahora veremos un programa en ensamblador 154 00:06:51,829 --> 00:06:53,709 entonces luego había ya 155 00:06:53,709 --> 00:06:55,310 unos pequeños 156 00:06:55,310 --> 00:06:57,790 programas, dispositivos 157 00:06:57,790 --> 00:06:59,569 que eran capaces ya de 158 00:06:59,569 --> 00:07:01,089 traducir esto 159 00:07:01,089 --> 00:07:03,629 que estaba en ese lenguaje extraño 160 00:07:03,629 --> 00:07:05,850 traducirlo ya a ceros y unos 161 00:07:05,850 --> 00:07:06,850 y cargarlo en la RAM 162 00:07:06,850 --> 00:07:07,970 ¿vale? 163 00:07:08,649 --> 00:07:10,509 pues el lenguaje ensamblador es ese 164 00:07:10,509 --> 00:07:11,750 un lenguaje que está 165 00:07:11,750 --> 00:07:14,290 se dice que está muy pegado a la máquina 166 00:07:14,290 --> 00:07:16,329 porque le da las instrucciones 167 00:07:16,329 --> 00:07:18,129 completamente al detalle 168 00:07:18,129 --> 00:07:19,889 como la máquina las necesita 169 00:07:19,889 --> 00:07:21,230 que es todas detalladas 170 00:07:21,230 --> 00:07:23,990 absolutamente deglutidas en ceros y uno 171 00:07:23,990 --> 00:07:25,290 por ejemplo 172 00:07:25,290 --> 00:07:27,689 muéveme, tú tenías que sumar 173 00:07:27,689 --> 00:07:28,930 dos números 174 00:07:28,930 --> 00:07:33,290 Pues para dar las instrucciones a la CPU hay que dárselas 175 00:07:33,290 --> 00:07:39,250 Coge el primer número y llévalo al registro en el que tú tienes un operador 176 00:07:39,250 --> 00:07:47,009 Ahora, coge el segundo número y muévelo al otro registro que tienes ahí habilitado para el otro operador 177 00:07:47,829 --> 00:07:53,649 Ahora, por favor desencadena en tu unidad aritmético-lógica que tienes ahí dentro 178 00:07:53,649 --> 00:07:58,230 Que la CPU tiene dentro una unidad aritmético-lógica para hacer operaciones 179 00:07:58,230 --> 00:08:00,569 desencadena la acción 180 00:08:00,569 --> 00:08:02,769 de sumar en binario 181 00:08:02,769 --> 00:08:05,569 combinando ceros y unos con puertas lógicas 182 00:08:05,569 --> 00:08:07,050 y guárdame 183 00:08:07,050 --> 00:08:08,370 y lo que se te quede 184 00:08:08,370 --> 00:08:10,750 déjalo aquí en uno de los operadores 185 00:08:10,750 --> 00:08:12,870 con esa combinación de puertas lógicas 186 00:08:12,870 --> 00:08:15,129 ahora este resultado 187 00:08:15,129 --> 00:08:17,230 muévelo por favor al bus 188 00:08:17,230 --> 00:08:18,790 para que salga 189 00:08:18,790 --> 00:08:20,350 por pantalla 190 00:08:20,350 --> 00:08:23,029 todo eso es lo que necesita la CPU 191 00:08:23,029 --> 00:08:24,230 todo ese detalle 192 00:08:24,230 --> 00:08:26,850 así, ese nivel de detalle necesita 193 00:08:26,850 --> 00:08:30,129 la CPU solo entiende ese nivel de detalle 194 00:08:30,129 --> 00:08:31,910 para cualquier cosa, imaginaos la cantidad 195 00:08:31,910 --> 00:08:32,990 de cosas que le he dicho 196 00:08:32,990 --> 00:08:35,009 para sumar dos números 197 00:08:35,009 --> 00:08:37,950 primero que mueve hasta aquí, luego que mueva este aquí 198 00:08:37,950 --> 00:08:40,190 luego que haga esa secuencia de operaciones 199 00:08:40,190 --> 00:08:42,070 con puertas lógicas para que los ceros y unos 200 00:08:42,070 --> 00:08:43,710 funcionen como una suma 201 00:08:43,710 --> 00:08:45,889 luego que lo lleve al bus 202 00:08:45,889 --> 00:08:48,169 todo eso para sumar dos números 203 00:08:48,169 --> 00:08:49,990 pues sí, eso es lo que hay que decir 204 00:08:49,990 --> 00:08:51,149 de la CPU, es que no hay rutía 205 00:08:51,149 --> 00:08:53,750 entonces esas sentencias que se le dicen 206 00:08:53,750 --> 00:08:55,110 en secuencia de ceros y unos 207 00:08:55,110 --> 00:08:58,649 era más fácil programarlas en este lenguaje 208 00:08:58,649 --> 00:09:01,610 que aún así, repito, era muy 209 00:09:01,610 --> 00:09:04,649 farragoso, muy engorroso, había que decirle todo eso 210 00:09:04,649 --> 00:09:07,470 en un lenguaje un poquito más natural 211 00:09:07,470 --> 00:09:09,330 sí, pero aún así muy farragoso 212 00:09:09,330 --> 00:09:12,149 esto ya se traducía a ceros y unos 213 00:09:12,149 --> 00:09:15,929 por unos sobreensambladores que se llamaban y esto ya se ejecutaba 214 00:09:15,929 --> 00:09:19,529 ¿vale? entonces para que nos hagamos una idea 215 00:09:19,529 --> 00:09:19,950 si 216 00:09:19,950 --> 00:09:24,090 buscamos 217 00:09:24,090 --> 00:09:36,379 vale, si buscamos por ejemplo 218 00:09:36,379 --> 00:09:37,379 aquí 219 00:09:37,379 --> 00:09:42,090 ejemplo 220 00:09:42,090 --> 00:09:44,929 ensamblador 221 00:09:44,929 --> 00:09:46,529 solo para que os hagáis una idea 222 00:09:46,529 --> 00:10:08,320 no tengo aquí una imagen 223 00:10:08,320 --> 00:10:09,860 chula 224 00:10:09,860 --> 00:10:11,100 del lenguaje ensamblador 225 00:10:11,100 --> 00:10:23,980 yo quiero ver esta imagen 226 00:10:23,980 --> 00:10:32,159 se me ha colado aquí 227 00:10:32,159 --> 00:10:49,169 por ejemplo, esto es un programa 228 00:10:49,169 --> 00:10:51,889 en código ensamblador 229 00:10:51,889 --> 00:10:55,190 veis estas sentencias tan raras 230 00:10:55,190 --> 00:10:57,529 esto 231 00:10:57,529 --> 00:10:59,629 hacía cualquier chorrada 232 00:10:59,629 --> 00:11:00,570 cualquier tontería 233 00:11:00,570 --> 00:11:01,970 a lo mejor una operación sencilla 234 00:11:01,970 --> 00:11:04,830 mete este dato aquí 235 00:11:04,830 --> 00:11:06,730 estos son registros de la CPU 236 00:11:06,730 --> 00:11:08,610 que directamente había que poner en el ensamblador 237 00:11:08,610 --> 00:11:10,809 ahora mueve este registro a este otro registro 238 00:11:10,809 --> 00:11:12,009 ahora no sé qué 239 00:11:12,009 --> 00:11:14,110 ahora quítale a este registro lo que tiene este 240 00:11:14,110 --> 00:11:15,549 todo esto para hacer una chorrada 241 00:11:15,549 --> 00:11:18,730 esto luego se traducía a ceros y unos 242 00:11:18,730 --> 00:11:21,490 de forma inmediata, aquí en esta anexa decimal 243 00:11:21,490 --> 00:11:23,470 pero esa decimal y los 0 y 1 son lo mismo 244 00:11:23,470 --> 00:11:25,509 se traducía, y esto ya la CPU 245 00:11:25,509 --> 00:11:26,210 lo entendía 246 00:11:26,210 --> 00:11:29,690 programar el ensamblador 247 00:11:29,690 --> 00:11:31,590 la desventaja que tenía 248 00:11:31,590 --> 00:11:33,549 era que cada CPU 249 00:11:33,549 --> 00:11:35,370 tiene 250 00:11:35,370 --> 00:11:37,850 su propio conjunto de secuencias 251 00:11:37,850 --> 00:11:39,889 propias, entonces el lenguaje 252 00:11:39,889 --> 00:11:41,889 el programa que funcionaba 253 00:11:41,889 --> 00:11:42,690 para una CPU 254 00:11:42,690 --> 00:11:45,830 no te funcionaba para otra, porque cada CPU 255 00:11:45,830 --> 00:11:46,690 cada marca 256 00:11:46,690 --> 00:11:49,789 o sea, cada marca, me refiero, cada modelo. 257 00:11:50,250 --> 00:11:53,009 Cada modelo de CPU tiene su propio conjunto 258 00:11:53,009 --> 00:11:56,669 de instrucciones en 0.1, cada modelo de CPU. 259 00:11:57,210 --> 00:11:59,149 Entonces, tú hacías un programa en ensamblador 260 00:11:59,149 --> 00:12:02,730 para un modelo de CPU, una Intel no sé cuántos, 261 00:12:03,009 --> 00:12:05,929 y solo te funcionaba para la CPU Intel no sé cuántos. 262 00:12:06,570 --> 00:12:09,529 Si querías hacer eso mismo, pero ejecutar un ordenador 263 00:12:09,529 --> 00:12:12,330 que tenía un microprocesador AMD no sé qué, 264 00:12:13,029 --> 00:12:16,190 tenías que hacer el programa para la CPU AMD no sé qué. 265 00:12:16,690 --> 00:12:22,029 O sea, cada modelo de CPU tenía su propio conjunto de sentencias. 266 00:12:23,409 --> 00:12:26,490 Bueno, así salían programas estupendos y maravillosos, 267 00:12:27,830 --> 00:12:31,429 absolutamente optimizados a la CPU, rapidísimos y magníficos. 268 00:12:32,269 --> 00:12:32,789 ¿Qué ocurre? 269 00:12:33,230 --> 00:12:36,389 Que programar así ya ha perdido el sentido completamente. 270 00:12:37,070 --> 00:12:41,009 Esto tenía su sentido cuando la envergadura de los programas era limitada. 271 00:12:41,009 --> 00:12:42,950 Tú no tenías miles de millones de datos. 272 00:12:43,529 --> 00:12:46,129 No tenías interfaces gráficas súper complicadas. 273 00:12:46,129 --> 00:12:47,789 a lo mejor todo era por consola 274 00:12:47,789 --> 00:12:49,710 entonces se podía o no permitir programar así 275 00:12:49,710 --> 00:12:51,610 ¿vale? ahora ya no 276 00:12:51,610 --> 00:12:53,750 si tuviéramos que hacer cualquiera de los programas 277 00:12:53,750 --> 00:12:55,950 que hacemos ahora con sus interfaces gráficas 278 00:12:55,950 --> 00:12:58,230 sus conexiones a servidores de bases de datos 279 00:12:58,230 --> 00:13:01,549 sus cargas de 200.000 millones de usuarios 280 00:13:01,549 --> 00:13:02,450 si tuviéramos que hacer así 281 00:13:02,450 --> 00:13:04,129 obviamente nos volveríamos locos 282 00:13:04,129 --> 00:13:05,710 ¿vale? pues entonces 283 00:13:05,710 --> 00:13:07,610 ¿qué es lo que ha surgido? 284 00:13:07,809 --> 00:13:08,529 ¿qué es lo que surgió? 285 00:13:11,720 --> 00:13:14,500 ¿vale? pues surgieron los lenguajes 286 00:13:14,500 --> 00:13:15,879 de alto nivel 287 00:13:15,879 --> 00:13:16,779 ¿vale? 288 00:13:17,700 --> 00:13:25,960 ¿Qué es un lenguaje de alto nivel? Es un lenguaje de programación en el que tú ya te abstraes y ya escribes en un lenguaje muy natural. 289 00:13:26,399 --> 00:13:30,799 Entonces, el ejemplo que he dicho antes de voy a hacer un programa al que yo le dé dos números y me lo suma, 290 00:13:31,240 --> 00:13:39,399 que en ensamblador era muchas instrucciones, en un lenguaje de alto nivel el programa a lo mejor es simplemente, pues ya está, esto, 291 00:13:45,299 --> 00:13:49,299 ¡hala!, ya está, una única sentencia de código para hacer ese programa. 292 00:13:49,299 --> 00:13:52,000 Esto en lenguaje de alto nivel 293 00:13:52,000 --> 00:13:55,019 En ensamblador, una ristra de cosas 294 00:13:55,019 --> 00:13:58,460 ¿Lenguajes de alto nivel? 295 00:13:58,879 --> 00:14:00,100 Pues todos los que conocéis 296 00:14:00,100 --> 00:14:02,320 C, Python, Java, todos 297 00:14:02,320 --> 00:14:04,559 ¿Qué ocurre? 298 00:14:04,799 --> 00:14:05,779 Que la CPU 299 00:14:05,779 --> 00:14:07,700 Esto no lo entiende 300 00:14:07,700 --> 00:14:10,220 Ya hemos quedado con que la CPU entiende 301 00:14:10,220 --> 00:14:11,360 El minario 302 00:14:11,360 --> 00:14:14,580 Que es prácticamente idéntico al ensamblador 303 00:14:14,580 --> 00:14:16,500 La CPU esto no lo entiende 304 00:14:16,500 --> 00:14:18,139 No pasa nada 305 00:14:18,139 --> 00:14:31,519 Ya, afortunadamente, tenemos un proceso automático que permite convertir un programa hecho en un lenguaje de alto nivel en código binario. 306 00:14:32,360 --> 00:14:36,779 Afortunadamente, eso existe y nosotros como desarrolladores nos podemos olvidar de esa parte. 307 00:14:37,720 --> 00:14:43,700 Escribimos en nuestro lenguaje de alto nivel, que es mucho más sencillo de expresar lo que queremos hacer, 308 00:14:43,700 --> 00:14:49,000 y ya lanzamos el proceso para que esto se traduzca a los ceros y unos 309 00:14:49,000 --> 00:14:53,519 y el ordenador lo ejecute, el ordenador ya encantado con sus ceros y unos 310 00:14:53,519 --> 00:14:56,779 lanzamos el proceso, ¿y ese proceso cuál es? 311 00:14:57,179 --> 00:15:00,580 pues de nuevo son términos que nos tienen que ir sonando a los que no nos suenen 312 00:15:00,580 --> 00:15:05,320 nuestra cultura informática es fundamental 313 00:15:05,320 --> 00:15:11,120 vosotros, cualquier empresa, con cualquiera que habléis 314 00:15:11,120 --> 00:15:13,000 cualquier compañero, vais a una 315 00:15:13,000 --> 00:15:15,159 habéis solicitado una beca 316 00:15:15,159 --> 00:15:16,779 habéis hecho una entrevista de trabajo, lo que sea 317 00:15:16,779 --> 00:15:18,639 tenéis que poco a poco 318 00:15:18,639 --> 00:15:21,559 ir ya adquiriendo 319 00:15:21,559 --> 00:15:23,240 unos conocimientos que os permitan 320 00:15:23,240 --> 00:15:25,320 hablar con unos términos que se vea que se sabe 321 00:15:25,320 --> 00:15:27,360 que se sabe donde estáis 322 00:15:27,360 --> 00:15:28,539 que conocéis el contexto, etc. 323 00:15:29,879 --> 00:15:31,419 Bueno, pues entonces, ¿cuál es el proceso 324 00:15:31,419 --> 00:15:33,240 para traducir 325 00:15:33,240 --> 00:15:35,519 este código 326 00:15:35,519 --> 00:15:37,299 escrito en un lenguaje de alto 327 00:15:37,299 --> 00:15:39,340 nivel que se llama código 328 00:15:39,340 --> 00:15:39,879 fuente? 329 00:15:42,100 --> 00:15:47,919 El código fuente es el código que yo he escrito en lenguaje de alto nivel ya, el facilito. 330 00:15:48,840 --> 00:15:51,480 Pues, ¿cuál es el proceso para llevarlo a los ceros y unos? 331 00:15:51,919 --> 00:15:54,379 Que los ceros y unos son el ejecutable. 332 00:15:54,639 --> 00:15:56,179 Los ceros y unos son el ejecutable. 333 00:15:57,620 --> 00:16:03,620 Bueno, pues el proceso, hay pequeñas variantes, muy, muy por encima estamos dando las ideas, muy por encima. 334 00:16:04,600 --> 00:16:10,120 Vale, primero, lógicamente, escribimos el código fuente utilizando el lenguaje de programación que hayamos elegido. 335 00:16:11,120 --> 00:16:17,899 Por supuesto, escribimos el código fuente cuando ya hemos pasado lo importante y lo que lleva tiempo, 336 00:16:18,620 --> 00:16:24,120 que es pensar el programa, diseñar cómo los pasos, cómo lo voy a hacer, voy a usar esto, estas variables para tiempo. 337 00:16:24,240 --> 00:16:29,340 Una vez que lo tengo ya todo pensado, ya me voy a lo que es fácil, que es a tirar el código. 338 00:16:29,340 --> 00:16:34,340 Bueno, pues escribimos el código fuente, utilizando el lenguaje de programación seleccionado. 339 00:16:34,340 --> 00:16:55,279 ¿Vale? Entonces, ese código, ahora, ¿cómo se transforma en el código ejecutable? También se puede llamar código máquina, ¿vale? Código ejecutable, código máquina serían sinónimos. Ejecutable o código máquina. ¿Cómo se transforma? Pues se puede hacer de diferentes formas. 340 00:16:55,279 --> 00:16:58,690 compilación 341 00:16:58,690 --> 00:17:01,649 existe un programa 342 00:17:01,649 --> 00:17:03,629 compilador, un software compilador 343 00:17:03,629 --> 00:17:04,529 que afortunadamente 344 00:17:04,529 --> 00:17:06,269 no tenemos que hacer nosotros 345 00:17:06,269 --> 00:17:09,589 nosotros disponemos ya del compilador 346 00:17:09,589 --> 00:17:11,170 cualquiera que programa 347 00:17:11,170 --> 00:17:13,349 cualquier lenguaje de programación tiene ya el compilador 348 00:17:13,349 --> 00:17:14,990 no tiene que preocuparse por eso 349 00:17:14,990 --> 00:17:16,609 y ese compilador que hace 350 00:17:16,609 --> 00:17:19,109 recibe el código fuente que nosotros 351 00:17:19,109 --> 00:17:21,509 hemos hecho, recibe ese código fuente 352 00:17:21,509 --> 00:17:23,109 y saca el código ejecutable 353 00:17:23,109 --> 00:17:25,470 y ya está, y una vez que lo ha sacado 354 00:17:25,470 --> 00:17:27,210 pim pim, tú ya lo ejecutas 355 00:17:27,210 --> 00:17:27,990 ¿vale? 356 00:17:29,009 --> 00:17:31,369 entonces, diseñamos la solución 357 00:17:31,369 --> 00:17:33,490 la escribimos en código fuente 358 00:17:33,490 --> 00:17:35,569 se la pasamos al compilador 359 00:17:35,569 --> 00:17:37,170 el compilador 360 00:17:37,170 --> 00:17:39,130 saca por arte de magia 361 00:17:39,130 --> 00:17:41,029 un ejecutable que ya 362 00:17:41,029 --> 00:17:42,269 se puede ejecutar 363 00:17:42,269 --> 00:17:43,930 en función de 364 00:17:43,930 --> 00:17:47,109 cómo se está bajando yo, con doble clic o como sea 365 00:17:47,109 --> 00:17:49,170 pero que ya se puede ejecutar 366 00:17:49,170 --> 00:17:50,150 y que la CPU lo entiende 367 00:17:50,150 --> 00:17:53,130 esto es un proceso 368 00:17:53,130 --> 00:17:54,250 pues bastante rápido 369 00:17:54,250 --> 00:18:01,329 pero tiene ciertas desventajas 370 00:18:01,329 --> 00:18:03,109 que vamos a ir entendiendo ahora o después 371 00:18:03,109 --> 00:18:06,210 bueno, alternativas a la compilación 372 00:18:06,210 --> 00:18:09,970 para este proceso de traducir 373 00:18:09,970 --> 00:18:13,329 el código fuente en el código ejecutable 374 00:18:13,329 --> 00:18:14,849 alternativas a la compilación 375 00:18:14,849 --> 00:18:16,890 la interpretación 376 00:18:16,890 --> 00:18:20,990 en lugar de un software compilador 377 00:18:20,990 --> 00:18:24,230 tenemos un software intérprete 378 00:18:24,230 --> 00:18:29,529 que se llama. ¿Y ese intérprete qué va haciendo? En lugar de coger todo el código 379 00:18:29,529 --> 00:18:35,190 fuente de golpe y convertirlo en un código ejecutable y ya está, ese código ejecutable 380 00:18:35,190 --> 00:18:40,609 se queda ya de por vida ahí, listo para que uno lo ejecute. Pues en lugar de hacer eso, 381 00:18:41,210 --> 00:18:46,730 ese software intérprete se lanza y está ahí en el ordenador, cogiendo línea por 382 00:18:46,730 --> 00:18:51,569 línea el código fuente, la va cogiendo línea por línea y tal cual la coge, la ejecuta, 383 00:18:51,569 --> 00:19:08,910 La coge y la ejecuta, la coge y la ejecuta, la coge y la ejecuta, la coge y la transforma al código binario, cuando digo la ejecuta, la transforma en binario para poder ejecutar, o sea, va, coge, código binario, ejecución, coge la siguiente, código binario, ejecución, ¿vale? 384 00:19:08,910 --> 00:19:11,049 entonces 385 00:19:11,049 --> 00:19:13,990 ventajas, inconvenientes 386 00:19:13,990 --> 00:19:18,009 esto es mucho más rápido de ejecutar 387 00:19:18,009 --> 00:19:20,029 una vez que tú has compilado el programa 388 00:19:20,029 --> 00:19:21,630 una vez que lo has compilado 389 00:19:21,630 --> 00:19:23,529 ese código máquina 390 00:19:23,529 --> 00:19:25,730 ya se ejecuta a toda velocidad 391 00:19:25,730 --> 00:19:27,490 ya está compilado, ya son todos 0 y 1 392 00:19:27,490 --> 00:19:30,109 es mucho más rápido, la ejecución de los programas 393 00:19:30,109 --> 00:19:32,029 que han sido compilados es mucho más rápido 394 00:19:32,029 --> 00:19:33,430 es mucho más rápido 395 00:19:33,430 --> 00:19:35,269 la ejecución de los programas compilados 396 00:19:35,269 --> 00:19:38,089 sin embargo aquí, cada vez que quieres ejecutar 397 00:19:38,089 --> 00:19:40,230 uno de estos, tienes que lanzar 398 00:19:40,230 --> 00:19:42,130 el intérprete, el intérprete 399 00:19:42,130 --> 00:19:44,410 va transformando línea por línea 400 00:19:44,410 --> 00:19:46,309 ejecutando, transformando, ejecutando 401 00:19:46,309 --> 00:19:48,029 luego es mucho más lenta 402 00:19:48,029 --> 00:19:50,150 la ejecución, así 403 00:19:50,150 --> 00:19:52,609 porque hay que interpretarlo 404 00:19:52,609 --> 00:19:54,150 cada vez, cada vez que lo quieres 405 00:19:54,150 --> 00:19:56,210 ejecutar lo interpretas, o sea, no se genera 406 00:19:56,210 --> 00:19:57,950 un ejecutable que te vale ya para siempre 407 00:19:57,950 --> 00:19:59,869 no se genera un ejecutable que te vale para siempre 408 00:19:59,869 --> 00:20:02,650 entonces diríais 409 00:20:02,650 --> 00:20:04,130 pues ¿para qué 410 00:20:04,130 --> 00:20:04,950 existe ese método? 411 00:20:05,710 --> 00:20:07,190 es mucho mejor la compilación 412 00:20:07,190 --> 00:20:13,289 Yo lo compilo, tengo ya mi ejecutable ahí, cada vez que lo quiera ejecutar a toda velocidad ya. 413 00:20:13,769 --> 00:20:14,809 No tengo que hacer nada más. 414 00:20:15,490 --> 00:20:16,809 ¿Para qué existe esto? 415 00:20:19,009 --> 00:20:26,690 Pues existe para poder adaptarse a que hay diferentes modelos de máquinas 416 00:20:26,690 --> 00:20:32,569 y que nosotros querríamos que un programa que acabamos de hacer se pudiera ejecutar en cualquier máquina. 417 00:20:32,569 --> 00:20:36,190 y que ocurre cuando el compilador 418 00:20:36,190 --> 00:20:37,630 yo le doy un código fuente 419 00:20:37,630 --> 00:20:39,109 y lo compila en el ejecutable 420 00:20:39,109 --> 00:20:41,529 pues que ese ejecutable es válido 421 00:20:41,529 --> 00:20:43,549 solo para el modelo 422 00:20:43,549 --> 00:20:45,369 de CPU para que ese compilador 423 00:20:45,369 --> 00:20:47,430 lo compiló, solo es válido 424 00:20:47,430 --> 00:20:49,450 para ese modelo, entonces para ese modelo de CPU 425 00:20:49,450 --> 00:20:51,529 va estupendo, rapidísimo 426 00:20:51,529 --> 00:20:53,410 magnífico, pero si yo ese 427 00:20:53,410 --> 00:20:55,730 programa que ya he compilado y he generado el binario 428 00:20:55,730 --> 00:20:57,630 lo quiero llevar a otro 429 00:20:57,630 --> 00:20:59,910 modelo de CPU, pues seguramente 430 00:20:59,910 --> 00:21:01,869 no me funciona, y tengo que compilarlo 431 00:21:01,869 --> 00:21:02,890 de nuevo en esa CPU 432 00:21:02,890 --> 00:21:05,549 entonces cuando yo distribuyo un software por ahí 433 00:21:05,549 --> 00:21:06,670 por la vida, por el mundo 434 00:21:06,670 --> 00:21:09,809 si yo distribuyo un ejecutable 435 00:21:09,809 --> 00:21:11,829 pues solamente 436 00:21:11,829 --> 00:21:13,769 van a poder ejecutar mi programa 437 00:21:13,769 --> 00:21:15,950 los que tengan el mismo modelo 438 00:21:15,950 --> 00:21:17,930 de CPU para el que yo ejecute 439 00:21:17,930 --> 00:21:18,849 mi compilación 440 00:21:18,849 --> 00:21:20,269 ¿me estoy explicando? 441 00:21:21,430 --> 00:21:23,309 entonces eso es poco operativo 442 00:21:23,309 --> 00:21:25,309 sobre todo ahora que distribuimos software 443 00:21:25,309 --> 00:21:27,849 en el contexto de internet 444 00:21:27,849 --> 00:21:29,650 yo no quiero poner esa limitación 445 00:21:29,650 --> 00:21:31,410 de que solamente vale para el modelo 446 00:21:31,410 --> 00:21:32,809 de Intel no sé cuándo, quiero ponerla 447 00:21:32,809 --> 00:21:35,710 pues para eso está la interpretación 448 00:21:35,710 --> 00:21:36,509 porque 449 00:21:36,509 --> 00:21:39,109 cuando tú haces un software 450 00:21:39,109 --> 00:21:40,109 que es 451 00:21:40,109 --> 00:21:42,029 interpretado 452 00:21:42,029 --> 00:21:44,829 tú entregas tu código fuente 453 00:21:44,829 --> 00:21:46,569 y 454 00:21:46,569 --> 00:21:49,130 aquel al que se lo has distribuido 455 00:21:49,130 --> 00:21:50,329 tiene su intérprete 456 00:21:50,329 --> 00:21:53,390 cuando quiere ejecutar tu programa 457 00:21:53,390 --> 00:21:55,250 lanza su intérprete 458 00:21:55,250 --> 00:21:56,450 y el intérprete 459 00:21:56,450 --> 00:21:59,089 coge tu código y lo transforma 460 00:21:59,089 --> 00:22:00,029 a tu propia máquina 461 00:22:00,029 --> 00:22:03,029 coge tu línea de código 462 00:22:03,029 --> 00:22:04,390 y lo transforma a tu propia máquina 463 00:22:04,390 --> 00:22:06,269 entonces tú haces tu software 464 00:22:06,269 --> 00:22:08,430 y te olvidas completamente 465 00:22:08,430 --> 00:22:10,150 de en qué máquina se va a ejecutar 466 00:22:10,150 --> 00:22:11,450 te va a funcionar para todas 467 00:22:11,450 --> 00:22:14,329 siempre y cuando esa máquina tenga el intérprete 468 00:22:14,329 --> 00:22:16,309 eso sí, está obligado a tenerlo 469 00:22:16,309 --> 00:22:18,329 tú haces tu código, lo distribuyes 470 00:22:18,329 --> 00:22:20,849 y ahí donde se quiera ejecutar 471 00:22:20,849 --> 00:22:22,650 esa máquina tiene que tener 472 00:22:22,650 --> 00:22:23,630 su intérprete 473 00:22:23,630 --> 00:22:26,309 y lo va interpretando a tu propia máquina 474 00:22:26,309 --> 00:22:27,789 a la que sea 475 00:22:27,789 --> 00:22:30,930 Luego es mucho más universal 476 00:22:30,930 --> 00:22:34,650 Pero claro, viejo, pues es universal 477 00:22:34,650 --> 00:22:36,509 Pero realmente es que es un rollo, primero 478 00:22:36,509 --> 00:22:39,069 ¿Tienes que distribuir el código fuente siempre? 479 00:22:40,150 --> 00:22:41,069 Por un lado no está mal 480 00:22:41,069 --> 00:22:42,970 No está mal la idea de que el software 481 00:22:42,970 --> 00:22:44,329 Pues sea lo más libre posible 482 00:22:44,329 --> 00:22:46,950 Dentro de las licencias que lo regulen 483 00:22:46,950 --> 00:22:48,250 Pero hombre 484 00:22:48,250 --> 00:22:51,490 Tener que distribuir el código fuente siempre 485 00:22:51,490 --> 00:22:53,329 Pues es medio raro 486 00:22:53,329 --> 00:22:56,269 Aparte de que realmente es que es muy lento 487 00:22:56,269 --> 00:22:58,930 interpretar línea por línea de un código fuente 488 00:22:58,930 --> 00:23:01,230 cada vez, cada ejecución sería lentísima 489 00:23:01,230 --> 00:23:05,130 vale, pues para no perder las ventajas 490 00:23:05,130 --> 00:23:07,190 de poder ser ejecutado en cualquier máquina 491 00:23:07,190 --> 00:23:09,309 pero ganar un poco de rapidez 492 00:23:09,309 --> 00:23:11,009 es por lo que 493 00:23:11,009 --> 00:23:12,930 salen los sistemas mixtos 494 00:23:12,930 --> 00:23:14,630 vale 495 00:23:14,630 --> 00:23:16,829 entre los cuales forma parte 496 00:23:16,829 --> 00:23:17,470 Java 497 00:23:17,470 --> 00:23:20,509 Python es un interpretado más puro 498 00:23:20,509 --> 00:23:23,089 por eso tiene un menor uso comercial 499 00:23:23,089 --> 00:23:24,829 tiene un más uso universitario 500 00:23:24,829 --> 00:23:27,230 porque es como más fácil 501 00:23:27,230 --> 00:23:29,269 para, tiene unas librerías 502 00:23:29,269 --> 00:23:31,269 muy buenas a nivel científico 503 00:23:31,269 --> 00:23:36,349 pero es más 504 00:23:36,349 --> 00:23:39,250 puramente interpretado, entonces es un poquito más lento 505 00:23:39,250 --> 00:23:40,470 y Java 506 00:23:40,470 --> 00:23:43,089 si es un sistema mixto que combina las dos cosas 507 00:23:43,089 --> 00:23:44,410 y diréis, ¿y cómo 508 00:23:44,410 --> 00:23:45,730 mezclo las dos cosas? 509 00:23:47,349 --> 00:23:48,690 vale, pues nosotros hacemos 510 00:23:48,690 --> 00:23:50,990 nuestro código en Java, que es el lenguaje 511 00:23:50,990 --> 00:23:52,930 al que vamos a trabajar nosotros, hacemos nuestro código 512 00:23:52,930 --> 00:23:55,390 hacemos una 513 00:23:55,390 --> 00:23:57,970 pequeña precompilación 514 00:23:57,970 --> 00:23:59,670 eso no lo lleva 515 00:23:59,670 --> 00:24:01,589 a código máquina de ningún 516 00:24:01,589 --> 00:24:03,410 modelo de CPU, no 517 00:24:03,410 --> 00:24:05,569 lo lleva a un código intermedio que ya no es 518 00:24:05,569 --> 00:24:07,210 un código fuente que uno pueda ver 519 00:24:07,210 --> 00:24:09,410 porque está en ceros y unos 520 00:24:09,410 --> 00:24:10,789 lo lleva a un código intermedio 521 00:24:10,789 --> 00:24:13,690 que es lo que se llaman los bytecodes estos de aquí 522 00:24:13,690 --> 00:24:15,509 lo lleva a un código 523 00:24:15,509 --> 00:24:16,869 intermedio que es los bytecodes 524 00:24:16,869 --> 00:24:19,349 y ahora ya ese bytecode 525 00:24:19,349 --> 00:24:21,789 que es un código intermedio precompilado 526 00:24:21,789 --> 00:24:24,609 es el que distribuyes 527 00:24:24,609 --> 00:24:46,910 Cuando uno distribuye software hecho en Java, distribuye esto. Y ahora, en cada máquina que uno quiera ejecutar ese software que te han distribuido, esa máquina tiene que tener el intérprete de Java. Por eso todos nuestros ordenadores tienen la Java Virtual Machine, la JVM, que es el intérprete de Java. 528 00:24:46,910 --> 00:24:50,130 si tú no tienes un intérprete de Java en tu equipo 529 00:24:50,130 --> 00:24:52,230 no podrás ejecutar nunca programas 530 00:24:52,230 --> 00:24:53,049 que se han hecho en Java 531 00:24:53,049 --> 00:24:56,430 vale, pues este intérprete 532 00:24:56,430 --> 00:24:58,170 de Java es ya el que 533 00:24:58,170 --> 00:24:59,390 es capaz de entrar 534 00:24:59,390 --> 00:25:01,349 dentro de este bytecode 535 00:25:01,349 --> 00:25:04,049 que es igual para todos 536 00:25:04,049 --> 00:25:05,069 los equipos, igual 537 00:25:05,069 --> 00:25:08,289 y ya lo va traduciendo a la máquina 538 00:25:08,289 --> 00:25:10,470 en particular en la que tú lo estás ejecutando 539 00:25:10,470 --> 00:25:12,210 entonces por eso Java 540 00:25:12,210 --> 00:25:14,029 un software en Java es universal 541 00:25:14,029 --> 00:25:15,529 tú lo haces y no necesitas 542 00:25:15,529 --> 00:25:18,390 saber en qué máquina se va a ejecutar 543 00:25:18,390 --> 00:25:20,750 te da igual, va a funcionar para todas 544 00:25:20,750 --> 00:25:22,650 tú haces tu programa 545 00:25:22,650 --> 00:25:24,369 haces esa primera 546 00:25:24,369 --> 00:25:25,470 precompilación 547 00:25:25,470 --> 00:25:27,569 donde obtienes esto 548 00:25:27,569 --> 00:25:29,349 esa primera precompilación 549 00:25:29,349 --> 00:25:31,349 y ahora ya distribuyes eso 550 00:25:31,349 --> 00:25:34,269 que eso no es código fuente, tú lo ves y ahí no ves nada 551 00:25:34,269 --> 00:25:35,269 no ves nada 552 00:25:35,269 --> 00:25:38,130 y ahora ya en el ordenador 553 00:25:38,130 --> 00:25:39,569 donde tú lo quieras ejecutar 554 00:25:39,569 --> 00:25:42,130 lanzas la máquina virtual de Java 555 00:25:42,130 --> 00:25:44,049 y esta máquina virtual de Java 556 00:25:44,049 --> 00:25:45,990 va traduciendo esto, lo va interpretando 557 00:25:45,990 --> 00:25:48,309 ahora ya sí, línea por línea 558 00:25:48,309 --> 00:25:49,630 de algo que no se ve 559 00:25:49,630 --> 00:25:52,109 o sea que no lo puedes entender leyéndolo 560 00:25:52,109 --> 00:25:53,769 ahora ya sí que va traduciendo 561 00:25:53,769 --> 00:25:55,170 línea por línea 562 00:25:55,170 --> 00:25:56,970 para que se ejecute en la máquina 563 00:25:56,970 --> 00:25:59,650 entonces al no ser interpretado puro 564 00:25:59,650 --> 00:26:01,690 no es tan lento como los 565 00:26:01,690 --> 00:26:02,869 interpretados puros 566 00:26:02,869 --> 00:26:05,869 pero al no ser completamente compilado 567 00:26:05,869 --> 00:26:08,069 es independiente de la plataforma 568 00:26:08,069 --> 00:26:09,369 ¿vale? 569 00:26:09,670 --> 00:26:11,650 o sea un lenguaje independiente 570 00:26:11,650 --> 00:26:13,130 de la plataforma significa 571 00:26:13,130 --> 00:26:15,390 tú programas 572 00:26:15,390 --> 00:26:18,009 y te da igual en qué equipo 573 00:26:18,009 --> 00:26:20,170 o plataforma se ejecute 574 00:26:20,170 --> 00:26:21,549 porque va a funcionar para todos 575 00:26:21,549 --> 00:26:23,230 eso es un programa independiente de la plataforma 576 00:26:23,230 --> 00:26:26,069 y así lo son los interpretados y los mixtos 577 00:26:26,069 --> 00:26:28,089 los compilados no lo son 578 00:26:28,089 --> 00:26:30,109 un programa que tú 579 00:26:30,109 --> 00:26:31,849 lo has compilado completamente 580 00:26:31,849 --> 00:26:33,910 solo va a funcionar en la máquina 581 00:26:33,910 --> 00:26:35,009 en el modelo 582 00:26:35,009 --> 00:26:37,529 en el modelo de máquina para el cual lo has compilado 583 00:26:37,529 --> 00:26:40,089 ¿vale? 584 00:26:41,329 --> 00:26:42,930 luego entonces, hasta ahora 585 00:26:42,930 --> 00:26:57,069 Tenemos ahora ya que tener utilizado en la cabeza. ¿Qué es un programa? Una lista de instrucciones para que la CPU realice una tarea. Esa lista de instrucciones la habremos diseñado, lógicamente, antes nosotros. 586 00:26:57,069 --> 00:26:59,569 el lenguaje ensamblador 587 00:26:59,569 --> 00:27:02,210 es un lenguaje muy próximo a la máquina 588 00:27:02,210 --> 00:27:04,230 donde se detalla paso por paso 589 00:27:04,230 --> 00:27:05,390 lo que es la CPU de Azure 590 00:27:05,390 --> 00:27:08,210 como ese detalle paso por paso 591 00:27:08,210 --> 00:27:09,230 es muy complejo 592 00:27:09,230 --> 00:27:12,369 tenemos los lenguajes de alto nivel 593 00:27:12,369 --> 00:27:14,289 los lenguajes de alto nivel 594 00:27:14,289 --> 00:27:16,450 nos permiten programar 595 00:27:16,450 --> 00:27:18,269 de forma más sencilla porque en una sola 596 00:27:18,269 --> 00:27:20,250 sentencia la CPU va a hacer 597 00:27:20,250 --> 00:27:20,970 ya mil cosas 598 00:27:20,970 --> 00:27:23,789 en una sola sentencia la CPU ya hace mil 599 00:27:23,789 --> 00:27:26,390 pero claro, ese código escrito 600 00:27:26,390 --> 00:27:29,970 en lenguaje de alto nivel, que es el que se llama código fuente, 601 00:27:30,910 --> 00:27:33,890 ese código fuente tiene que pasar a código ejecutable 602 00:27:33,890 --> 00:27:37,170 o código mágico. ¿Cómo? 603 00:27:38,269 --> 00:27:42,670 Pues con compilación, con un compilador, interpretación, con un intérprete 604 00:27:42,670 --> 00:27:46,609 o combinando ambos. ¿Vale? Entonces todos los 605 00:27:46,609 --> 00:27:48,329 términos y el contexto están claros, ¿no? 606 00:27:49,589 --> 00:27:54,369 Bueno, entonces, lógicamente 607 00:27:54,369 --> 00:27:56,250 nuestros programas, pues cuando hacemos 608 00:27:56,250 --> 00:27:58,329 nuestros programas, hacemos una 609 00:27:58,329 --> 00:28:00,089 primera versión, nos parece que 610 00:28:00,089 --> 00:28:02,470 ostras, pues que guay, esto seguro que funciona 611 00:28:02,470 --> 00:28:04,369 empezamos a lanzar 612 00:28:04,369 --> 00:28:05,829 los programas y las cosas fallan 613 00:28:05,829 --> 00:28:07,910 lo normal es que fallen 614 00:28:07,910 --> 00:28:10,809 entonces tenemos que distinguir 615 00:28:10,809 --> 00:28:12,509 dos tipos de errores 616 00:28:12,509 --> 00:28:14,369 los de compilación 617 00:28:14,970 --> 00:28:16,750 lo que llamamos 618 00:28:16,750 --> 00:28:18,150 error de compilación 619 00:28:18,150 --> 00:28:22,529 esto es lo más sencillo de detectar 620 00:28:22,529 --> 00:28:24,349 un error de compilación es un error 621 00:28:24,349 --> 00:28:27,269 Que se da cuando tú escribes 622 00:28:27,269 --> 00:28:28,250 El código fuente mal 623 00:28:28,250 --> 00:28:30,410 El código fuente tiene unas reglas 624 00:28:30,410 --> 00:28:32,089 O sea, el lenguaje de alternativa tiene unas reglas 625 00:28:32,089 --> 00:28:33,890 Tú no puedes poner lo que te dé la gana 626 00:28:33,890 --> 00:28:34,789 Tiene unas reglas 627 00:28:34,789 --> 00:28:38,710 Pues si quieres hacer el resto de una cosa entre otra 628 00:28:38,710 --> 00:28:41,390 Tienes que poner el operador este 629 00:28:41,390 --> 00:28:42,529 Tiene sus reglas 630 00:28:42,529 --> 00:28:44,130 Que son las que tenemos que conocer 631 00:28:44,130 --> 00:28:46,329 Entonces, si tú 632 00:28:46,329 --> 00:28:47,789 Lo escribes mal 633 00:28:47,789 --> 00:28:50,170 Quieres escribir 634 00:28:50,170 --> 00:28:52,869 Cabo 635 00:28:52,869 --> 00:28:55,970 haciendo la analogía al lenguaje natural 636 00:28:55,970 --> 00:28:58,089 y escribes así porque no conoces 637 00:28:58,089 --> 00:28:59,029 la ortografía 638 00:28:59,029 --> 00:29:01,809 pues el corrector ortográfico de Word 639 00:29:01,809 --> 00:29:03,930 te dice, eh, esta palabra 640 00:29:03,930 --> 00:29:05,369 no la conozco, no la entiendo 641 00:29:05,369 --> 00:29:07,269 pues eso 642 00:29:07,269 --> 00:29:10,150 traducido al contexto de escribir en un lenguaje 643 00:29:10,150 --> 00:29:12,150 de alto nivel sería el error de compilación 644 00:29:12,150 --> 00:29:13,930 que lo que tú has escrito 645 00:29:13,930 --> 00:29:16,509 no se corresponde con la sintaxis 646 00:29:16,509 --> 00:29:18,029 del lenguaje, no existe 647 00:29:18,029 --> 00:29:18,829 no tiene sentido 648 00:29:18,829 --> 00:29:22,029 a esos errores se les llama errores de compilación 649 00:29:22,029 --> 00:29:24,089 son los mejores que te pueden salir 650 00:29:24,089 --> 00:29:26,769 porque te salen antes de que tú le hayas entregado 651 00:29:26,769 --> 00:29:28,210 el programa a nadie para que lo ejecute 652 00:29:28,210 --> 00:29:30,630 porque es que un error, un programa que tiene un error 653 00:29:30,630 --> 00:29:31,650 de estos de compilación 654 00:29:31,650 --> 00:29:34,769 es que no se puede ni compilar, ni interpretar, ni nada 655 00:29:34,769 --> 00:29:36,490 no se le puede hacer nada 656 00:29:36,490 --> 00:29:38,869 porque es que no está 657 00:29:38,869 --> 00:29:40,430 bien escrito en el lenguaje 658 00:29:40,430 --> 00:29:41,609 el compilador te va a decir 659 00:29:41,609 --> 00:29:44,089 esto que me has pasado no está en mi idioma 660 00:29:44,089 --> 00:29:46,569 o el intérprete te va a decir 661 00:29:46,569 --> 00:29:48,450 esto que me has pasado no está en mi idioma 662 00:29:48,450 --> 00:29:50,650 entonces no va a llegar a ejecutarse nunca 663 00:29:50,650 --> 00:29:52,609 Nadie te va a decir, ¿me has dado algo de lo que funciona? 664 00:29:52,769 --> 00:29:54,130 No, es que no vas a poder haberse lo dado. 665 00:29:54,609 --> 00:29:57,609 Porque no vas a poder haberlo ni compilado ni interpretado. 666 00:29:57,730 --> 00:29:59,049 Porque se van a haber quejado antes. 667 00:30:00,490 --> 00:30:02,390 Vale, eso es lo que se llama errores de compilación. 668 00:30:02,529 --> 00:30:07,390 Cuando tú escribes mal el código fuente, y eso no se entiende, 669 00:30:10,470 --> 00:30:13,630 y luego tú puedes haber escrito un código fuente perfectísimamente, 670 00:30:14,309 --> 00:30:18,009 el compilador lo compila, porque compila perfectamente, 671 00:30:18,589 --> 00:30:19,589 eso está muy bien escrito, 672 00:30:19,589 --> 00:30:21,630 o si es un lenguaje interpretado 673 00:30:21,630 --> 00:30:23,109 el intérprete 674 00:30:23,109 --> 00:30:25,369 traduce perfectamente las líneas 675 00:30:25,369 --> 00:30:26,910 porque están muy bien escritas 676 00:30:26,910 --> 00:30:28,369 tú has escrito la frase 677 00:30:28,369 --> 00:30:30,750 en código fuente perfectamente 678 00:30:30,750 --> 00:30:33,210 ¿vale? pero cuando el programa 679 00:30:33,210 --> 00:30:34,730 ya se ejecuta 680 00:30:34,730 --> 00:30:36,089 ¡pum! falla 681 00:30:36,089 --> 00:30:38,589 pues es un error de ejecución 682 00:30:38,589 --> 00:30:41,150 y es que tu programa está mal hecho 683 00:30:41,150 --> 00:30:42,150 está mal hecho 684 00:30:42,150 --> 00:30:43,890 está bien escrito 685 00:30:43,890 --> 00:30:45,509 pero está mal hecho 686 00:30:45,509 --> 00:30:46,329 ¿vale? 687 00:30:49,589 --> 00:30:50,869 claro, tú escribes 688 00:30:50,869 --> 00:30:52,410 la casa come 689 00:30:52,410 --> 00:30:55,450 una frase perfecta, sintácticamente 690 00:30:55,450 --> 00:30:56,450 no tiene ningún error 691 00:30:56,450 --> 00:30:59,009 pero luego pon tú a dar de comer a una casa 692 00:30:59,009 --> 00:31:01,170 no vas a conseguirlo, cuando tú ves de comer a una casa 693 00:31:01,170 --> 00:31:02,589 la casa no puede comer 694 00:31:02,589 --> 00:31:05,049 porque no es un humano, ni un animal 695 00:31:05,049 --> 00:31:07,390 entonces, ahí tienes un error 696 00:31:07,390 --> 00:31:08,950 al momento de llevarlo a la práctica 697 00:31:08,950 --> 00:31:10,690 lo has escrito perfectamente 698 00:31:10,690 --> 00:31:12,670 pero eso no puedes llevarlo a la práctica 699 00:31:12,670 --> 00:31:15,750 esos son los peores errores 700 00:31:15,750 --> 00:31:17,369 lógicamente los más complicados 701 00:31:17,369 --> 00:31:18,690 de resolver, es decir, jodid 702 00:31:18,690 --> 00:31:20,849 Pero si es que yo creo que se hace así 703 00:31:20,849 --> 00:31:22,190 Y lo ejecuto y no 704 00:31:22,190 --> 00:31:23,910 O me sale un error 705 00:31:23,910 --> 00:31:25,569 O a lo mejor no me sale error 706 00:31:25,569 --> 00:31:26,829 Pero no hace lo que tiene que hacer 707 00:31:26,829 --> 00:31:29,210 Le estoy diciendo que sume dos números 708 00:31:29,210 --> 00:31:31,410 Le doy los dos números y nos está restando 709 00:31:31,410 --> 00:31:34,369 Pues eso es un error de ejecución 710 00:31:34,369 --> 00:31:35,289 ¿Vale? 711 00:31:35,690 --> 00:31:37,309 Bueno pues entendamos también 712 00:31:37,309 --> 00:31:39,410 Ya esos términos desde ya 713 00:31:39,410 --> 00:31:41,710 Error de compilación y de ejecución 714 00:31:41,710 --> 00:31:42,089 Vale 715 00:31:42,089 --> 00:31:45,470 Bueno y ya por último dentro de esta introducción 716 00:31:45,470 --> 00:31:47,490 Que vamos a ver acabado justo 717 00:31:47,490 --> 00:31:51,230 entonces, para nosotros 718 00:31:51,230 --> 00:31:52,970 programar se va a traducir en 719 00:31:52,970 --> 00:31:54,990 recibir 720 00:31:54,990 --> 00:31:57,369 el enunciado de un problema 721 00:31:57,369 --> 00:31:58,490 que tenemos que resolver 722 00:31:58,490 --> 00:32:00,509 tenemos que resolver un problema 723 00:32:00,509 --> 00:32:03,329 ahora, me pongo a 724 00:32:03,329 --> 00:32:05,250 mover la cabeza, me pongo a 725 00:32:05,250 --> 00:32:07,089 hacer mis ideas, ah pues mira, voy a coger 726 00:32:07,089 --> 00:32:08,130 dos variables aquí 727 00:32:08,130 --> 00:32:11,029 voy a hacer aquí un bucle que 728 00:32:11,029 --> 00:32:13,029 me esté recorriendo de 1 a 10 729 00:32:13,029 --> 00:32:15,130 a ver si hasta que encuentre no sé cuántos 730 00:32:15,130 --> 00:32:16,910 yo me hago ahí mis ideas, no sé cuánto para ti 731 00:32:16,910 --> 00:32:28,450 Una vez que ya tengo más o menos un boceto de lo que quiero hacer, ahora ya empieza un proceso, que es escribirlo en un editor de texto, escribirlo en el código fuente. 732 00:32:30,210 --> 00:32:39,069 Intentar compilarlo o interpretarlo, depende del lenguaje en el que esté, para ver si compila o no compila, a ver si tiene errores de compilación o no los tiene. 733 00:32:39,069 --> 00:32:42,789 si los tiene 734 00:32:42,789 --> 00:32:43,569 los arreglo 735 00:32:43,569 --> 00:32:46,569 si no los tiene, los lanzo a ejecutar 736 00:32:46,569 --> 00:32:49,049 ¿vale? si tiene errores de ejecución 737 00:32:49,049 --> 00:32:50,569 pues puedo 738 00:32:50,569 --> 00:32:52,809 entrar a depurar, es decir, hay muchas tareas 739 00:32:52,809 --> 00:32:54,670 que nosotros podemos 740 00:32:54,670 --> 00:32:56,970 hacer con las herramientas básicas del ordenador 741 00:32:56,970 --> 00:32:58,289 con mi blog de notas 742 00:32:58,289 --> 00:32:59,549 yo podría escribir mi programa 743 00:32:59,549 --> 00:33:02,809 lanzar mi máquina virtual a mano 744 00:33:02,809 --> 00:33:04,650 pum, lanzar la mano, decirle a mi máquina 745 00:33:04,650 --> 00:33:06,630 virtual, coge este programa que he hecho con el blog 746 00:33:06,630 --> 00:33:08,750 de notas, si me falla 747 00:33:08,750 --> 00:33:10,769 me saldrá un error en la consola 748 00:33:10,769 --> 00:33:12,410 y me iré a cambiarlo 749 00:33:12,410 --> 00:33:14,069 pues sí, puedo programar así 750 00:33:14,069 --> 00:33:16,990 pero hombre, como hay muchas tareas 751 00:33:16,990 --> 00:33:18,430 que vamos a repetir todo el rato 752 00:33:18,430 --> 00:33:21,009 nacen unos software 753 00:33:21,009 --> 00:33:22,069 unos programas 754 00:33:22,069 --> 00:33:25,069 que se llaman los entornos de desarrollo 755 00:33:25,069 --> 00:33:26,410 ¿vale? 756 00:33:33,890 --> 00:33:35,950 ¿vale? ¿qué es un entorno 757 00:33:35,950 --> 00:33:37,950 de desarrollo? un entorno de desarrollo 758 00:33:37,950 --> 00:33:39,670 es un software que está 759 00:33:39,670 --> 00:33:41,710 pensado para ayudarte a 760 00:33:41,710 --> 00:33:42,289 programar 761 00:33:42,289 --> 00:33:44,930 entonces, integra 762 00:33:44,930 --> 00:33:46,930 un editor de texto para que tú escribas 763 00:33:46,930 --> 00:33:47,569 tu programa 764 00:33:47,569 --> 00:33:51,109 integra herramientas 765 00:33:51,109 --> 00:33:52,930 que rápidamente te avisan si has 766 00:33:52,930 --> 00:33:54,890 escrito algo mal o no lo has escrito mal 767 00:33:54,890 --> 00:33:57,049 integran herramientas 768 00:33:57,049 --> 00:33:59,170 que te permiten automatizar 769 00:33:59,170 --> 00:34:01,069 hacer más rápido tareas que si no 770 00:34:01,069 --> 00:34:02,950 tendrías que hacer pues tú a mano 771 00:34:02,950 --> 00:34:04,890 con el blog de notas que serían más pesadas 772 00:34:04,890 --> 00:34:06,309 integran 773 00:34:06,309 --> 00:34:08,769 que se lance el programa y no tienes tú 774 00:34:08,769 --> 00:34:11,130 que llamar a la máquina virtual para decirle 775 00:34:11,130 --> 00:34:12,210 oye, lanza este programa 776 00:34:12,210 --> 00:34:14,550 se integran muchas de esas tareas, como iremos viendo. 777 00:34:15,590 --> 00:34:19,429 ¿Vale? Entonces, lógicamente, nosotros usaremos un entorno de desarrollo 778 00:34:19,429 --> 00:34:25,309 para facilitar nuestra tarea de desarrollar software, para facilitarla. 779 00:34:26,130 --> 00:34:33,150 En Java en particular, pues tenemos los tres más usados, ¿vale? 780 00:34:38,960 --> 00:34:45,340 Entonces, este es de distribución gratuita y tiene, aparte de toda una trayectoria, 781 00:34:45,340 --> 00:34:48,099 una implantación 782 00:34:48,099 --> 00:34:48,940 en el mercado enorme 783 00:34:48,940 --> 00:34:52,119 y es el que vamos a usar nosotros aquí en clase 784 00:34:52,119 --> 00:34:53,900 si alguien quiere usar otro 785 00:34:53,900 --> 00:34:54,960 que lo use, pero bueno 786 00:34:54,960 --> 00:34:57,619 este sí que es de licencia de pago 787 00:34:57,619 --> 00:34:59,900 y este 788 00:34:59,900 --> 00:35:02,320 a ver, no os lo recomiendo 789 00:35:02,320 --> 00:35:04,019 no porque nos viene muchísimo 790 00:35:04,019 --> 00:35:04,980 de potencia como todos 791 00:35:04,980 --> 00:35:07,079 pero se está empezando a usar menos 792 00:35:07,079 --> 00:35:09,099 aunque hay muchísimas empresas que lo siguen usando 793 00:35:09,099 --> 00:35:12,139 pero el NetBeans se está empezando a usar menos 794 00:35:12,139 --> 00:35:14,119 entonces os recomiendo 795 00:35:14,119 --> 00:35:17,460 para que uséis vosotros el que os dé la gana 796 00:35:17,460 --> 00:35:19,280 aquí en clase, los exámenes 797 00:35:19,280 --> 00:35:21,500 los exámenes los haremos con este 798 00:35:21,500 --> 00:35:23,760 entonces tenéis que tener soltura con ese 799 00:35:23,760 --> 00:35:25,800 porque si surge algo 800 00:35:25,800 --> 00:35:26,940 en el eclipse y no me sale 801 00:35:26,940 --> 00:35:29,559 yo asumo que vosotros ya lo sabéis usar 802 00:35:29,559 --> 00:35:31,059 tal y como lo hayamos usado aquí 803 00:35:31,059 --> 00:35:32,719 ¿vale? 804 00:35:33,719 --> 00:35:35,559 bueno, pues justo acabamos con esto 805 00:35:35,559 --> 00:35:37,360 la introducción 806 00:35:37,360 --> 00:35:39,719 ¿vale? no olvidéis que el entorno de desarrollo 807 00:35:39,719 --> 00:35:41,460 por mucho que tenga la IA integrada 808 00:35:41,460 --> 00:35:43,659 que te dice lo que tienes que decir después 809 00:35:43,659 --> 00:35:45,500 que lo explica y todas esas patatillas 810 00:35:45,500 --> 00:35:46,360 ¿vale? 811 00:35:47,380 --> 00:35:49,199 no tiene que sustituir 812 00:35:49,199 --> 00:35:52,199 porque si dejáis que os sustituya 813 00:35:52,199 --> 00:35:53,519 no vais a aprender a programar 814 00:35:53,519 --> 00:35:55,840 y si no aprendéis a programar, suspendéis 815 00:35:55,840 --> 00:35:57,880 o lo que es peor, si no aprendéis a programar 816 00:35:57,880 --> 00:35:58,960 ya robáis y luego 817 00:35:58,960 --> 00:36:01,579 vais a lo que acaba de elaborar 818 00:36:01,579 --> 00:36:03,599 y se acabó, ya estáis crucificados 819 00:36:03,599 --> 00:36:06,019 ¿vale? entonces cuidado con eso 820 00:36:06,019 --> 00:36:07,900 venga, pues ahora ya 821 00:36:07,900 --> 00:36:09,559 sí que sí, paramos