{"id":329,"date":"2022-10-04T11:31:15","date_gmt":"2022-10-04T09:31:15","guid":{"rendered":"http:\/\/quadern-programacio.recursos.uoc.edu\/?page_id=329"},"modified":"2022-10-04T11:31:15","modified_gmt":"2022-10-04T09:31:15","slug":"1-3-pensamiento-algoritmico","status":"publish","type":"page","link":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/1-3-pensamiento-algoritmico\/","title":{"rendered":"1.3. Pensamiento algor\u00edtmico"},"content":{"rendered":"<p>Para poder comunicarnos con las m\u00e1quinas y sacar el mayor provecho de estas, debemos empezar a \u00abpensar\u00bb como lo har\u00eda una m\u00e1quina. Normalmente, cuando trabajamos con un ordenador le damos alg\u00fan tipo de instrucci\u00f3n (<em>input<\/em>) y esperamos un resultado (<em>output<\/em>). Por ejemplo: puedo hacer clic con el rat\u00f3n en mi programa de dise\u00f1o y que, como resultado, me muestre un punto en la pantalla. Este proceso lo podr\u00edamos definir como el <strong>algoritmo<\/strong> para dibujar puntos.<\/p>\n<p>Los algoritmos son omnipresentes en el mundo digital en el que vivimos (desde la recomendaci\u00f3n de la pr\u00f3xima serie que vay\u00e1is a ver en vuestra plataforma de <em>streaming <\/em>hasta la toma de decisiones en mercados burs\u00e1tiles pasando por la calculadora de vuestro tel\u00e9fono), pero \u00bfqu\u00e9 es exactamente un algoritmo? Lo podr\u00edamos definir de la siguiente manera:<\/p>\n<div class=\"featured featured-blue\"><p>Un algoritmo es un <strong>conjunto de instrucciones definidas, ordenadas y finitas<\/strong> que permiten solucionar un problema, realizar un c\u00f3mputo, procesar datos o llevar a cabo otras tareas o actividades.<\/p>\n<\/div>\n<p>Veamos un ejemplo sencillo:<\/p>\n<figure id=\"attachment_39\" aria-describedby=\"caption-attachment-39\" style=\"width: 500px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"wp-image-39 size-full\" src=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_003.jpg\" alt=\"\" width=\"500\" height=\"257\" srcset=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_003.jpg 500w, \/wp-content\/uploads\/2022\/10\/PID_00290094_003-300x154.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><figcaption id=\"caption-attachment-39\" class=\"wp-caption-text\">Figura 3. Algoritmo para la conversi\u00f3n de grados Fahrenheit a Celsius<br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>\n<p>El algoritmo para convertir grados Fahrenheit a Celsius tiene los siguientes pasos:<\/p>\n<ul>\n<li>Restar 32 al valor de entrada<\/li>\n<li>Multiplicarlo por 5<\/li>\n<li>Dividirlo entre 9<\/li>\n<\/ul>\n<p>Dado cualquier valor de entrada, podemos seguir esta serie de instrucciones de manera sucesiva y llegaremos inequ\u00edvocamente al valor de salida: el valor convertido a Celsius.<\/p>\n<p>Podemos representar los algoritmos de manera visual en forma de \u00e1rbol de decisiones. A continuaci\u00f3n, ten\u00e9is un ejemplo de algoritmo para arreglar una l\u00e1mpara que no funciona.<\/p>\n<figure id=\"attachment_41\" aria-describedby=\"caption-attachment-41\" style=\"width: 540px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"size-full wp-image-41\" src=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_004.jpg\" alt=\"\" width=\"540\" height=\"265\" srcset=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_004.jpg 540w, \/wp-content\/uploads\/2022\/10\/PID_00290094_004-300x147.jpg 300w\" sizes=\"(max-width: 540px) 100vw, 540px\" \/><figcaption id=\"caption-attachment-41\" class=\"wp-caption-text\">Figura 4. \u00c1rbol de decisiones<br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>\n<p>Los anteriores son ejemplos muy sencillos de algoritmos, pero enseguida ver\u00e9is c\u00f3mo el nivel de complejidad puede crecer de manera exponencial con el siguiente ejemplo:<\/p>\n<figure id=\"attachment_43\" aria-describedby=\"caption-attachment-43\" style=\"width: 365px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"size-full wp-image-43\" src=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_005.jpg\" alt=\"\" width=\"365\" height=\"220\" srcset=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_005.jpg 365w, \/wp-content\/uploads\/2022\/10\/PID_00290094_005-300x181.jpg 300w\" sizes=\"(max-width: 365px) 100vw, 365px\" \/><figcaption id=\"caption-attachment-43\" class=\"wp-caption-text\">Figura 5. La mejor ruta entre dos puntos<br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>\n<p>Si quisi\u00e9ramos resolver el problema de encontrar la mejor ruta entre dos puntos, empezar\u00edamos a tener distintas variables que deber\u00edamos considerar: \u00bfqu\u00e9 consideramos mejor? \u00bfLa m\u00e1s corta? \u00bfLa m\u00e1s r\u00e1pida? \u00bfVamos a pie, en coche, metro, bicicleta? \u00bfCu\u00e1nto tr\u00e1fico hay a esta hora? Como podr\u00e9is observar, el \u00e1rbol de decisiones que deber\u00edamos realizar tendr\u00eda m\u00faltiples ramificaciones, lo que implicar\u00eda realizar muchos c\u00e1lculos. Por suerte, si hay algo en lo que los ordenadores son realmente eficientes es realizando un gran n\u00famero de operaciones a gran velocidad.<\/p>\n<p>Como ejercicio mental os proponemos lo siguiente: \u00bfpodr\u00edais pensar en el algoritmo para crear un caf\u00e9 perfecto en una m\u00e1quina de caf\u00e9?<\/p>\n<figure id=\"attachment_45\" aria-describedby=\"caption-attachment-45\" style=\"width: 318px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"size-full wp-image-45\" src=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_006.jpg\" alt=\"\" width=\"318\" height=\"110\" srcset=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_006.jpg 318w, \/wp-content\/uploads\/2022\/10\/PID_00290094_006-300x104.jpg 300w\" sizes=\"(max-width: 318px) 100vw, 318px\" \/><figcaption id=\"caption-attachment-45\" class=\"wp-caption-text\">Figura 6. El camino hacia el caf\u00e9 perfecto<br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>\n<p>\u00bfEn vaso o en taza? \u00bfCon leche? \u00bfCaliente o fr\u00eda? \u00bfCondensada? \u00bfDe soja? \u00bfAz\u00facar? \u00bfCu\u00e1ntas cucharaditas? \u00bfCon hielo? Como podr\u00e9is observar, el asunto no es trivial e implica muchas decisiones. Tendremos que valorar hasta qu\u00e9 punto queremos darle m\u00faltiples opciones al usuario para personalizar su caf\u00e9 a costa de un proceso m\u00e1s largo o si, por el contrario, queremos simplificar la tarea sacrificando la capacidad de personalizaci\u00f3n.<\/p>\n<p>Lo fundamental como programadores\/dise\u00f1adores es que entendamos el problema al que nos enfrentamos para no perder el foco una vez que nos pongamos a escribir nuestros algoritmos, a programar. De hecho, escribir el c\u00f3digo en s\u00ed no es m\u00e1s que una peque\u00f1a parte del proceso global al que nos enfrentamos al crear nuestros programas, y que engloba tambi\u00e9n una labor previa de investigaci\u00f3n y planificaci\u00f3n y una labor posterior de testar nuestro c\u00f3digo e ir refin\u00e1ndolo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para poder comunicarnos con las m\u00e1quinas y sacar el mayor provecho de estas, debemos empezar a \u00abpensar\u00bb como lo har\u00eda una m\u00e1quina. Normalmente, cuando trabajamos con un ordenador le damos alg\u00fan tipo de instrucci\u00f3n (input) y esperamos un resultado (output). Por ejemplo: puedo hacer clic con el rat\u00f3n en mi programa de dise\u00f1o y que, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/329"}],"collection":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/comments?post=329"}],"version-history":[{"count":1,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/329\/revisions"}],"predecessor-version":[{"id":330,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/329\/revisions\/330"}],"wp:attachment":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/media?parent=329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}