Noticias:

Corolario #1 de internet: En internet toda mujer es hombre, todo hombre es niño y todo niño es un agente del FBI, hasta que se demuestre lo contrario.

Menú Principal

Curso de Programación Lúdica. Actualmente: Tetris funcionando

Iniciado por Bill, 13 de Mayo de 2009, 15:08

0 Miembros y 1 Visitante están viendo este tema.

raul_isl

Mola el video tuto, pero me he empapado muy poco.
Empezaras programacion a ese ritmo? :llori:

Bill

#51
Libro I, aprendiendo a pensar

1. Los problemas decrecen

Cuando alguien piensa en un "programador" piensa en un tío tecleando. Eso es tan cierto como que un neurobiólogo está siempre al microscopio, un astrofísico mirando por un telescopio y un arquitecto poniendo estructuras de hormigón. El ordenador es tan solo una herramienta, el paso final, los lenguajes de programación son igual que los idiomas que se usan para hablar, lo importante de las frases es pensarlas, y si no que le pregunten a un mudo.

La mente es la mayor y única herramienta que no se puede oxidar de un programador. Los lenguajes de programación cambian y evolucionan a velocidades increíbles, la tecnología también, pero hay una constante: el que tiene una mente analítica le sirve para cualquier situación.

Comenzar a programar directamente con el lenguaje es tan inútil como enseñar a hablar a un niño ciego. Un bebé observa el mundo, intenta tocar los objetos por curiosidad y para medir la distancia, se chupa un pie porque le mola.... bueno, y porque cuando lo chupa siente cosquillas y puede contarse los dedos. Solamente cuando su cerebro ya tiene suficiente información sobre el mundo es cuando comienza a poner nombres a las cosas: papá, mamá, butanero,... Así que desde aquí un bechi a todos los profesores de programación del mundo que comienzan explicando los comandos de un lenguaje, porque son máquinas de cagar ineptos.

Así que hablemos del análisis. Cuando se programa algo es porque existe una necesidad que conlleva asociada un problema. Esto es lo mismo en la vida real para todos los problemas, por ejemplo llegar a fin de mes es una necesidad que conlleva un problema bastante serio, pero que puede llevarse mejor con un cierto análisis. Lo que caracteriza a un buen analista es que sabe ver el problema en su globalidad, pero también descomponerlo en componentes sin agobiarse por el tamaño. Imaginad que un problema es una gran burbuja ante la que nos sentimos pequeños. Un analista comienza a pinchar la burbuja con su alfiler mágico +5 matadragones, y convertirla en pequeñas burbujas que dependen unas de otras. Llegar a fin de mes, por ejemplo, es una burbuja que puede descomponerse en calcular el dinero entrante, calcular el dinero fijo saliente, estimar los gastos no fijos, dividir las cifras en pequeñas necesidades... Y cada problema nuevo se puede subdividir. ¿De qué nos sirve esto? Pues bueno, la burbuja inicial era inabordable, un monstrenco que nos asustaba. En cambio ahora tenemos muchos pequeños problemas. ¿A qué preferías enfrentaros, a un gran dragón o a 1000 pequeñas hormigas?

También un analista debe ser capaz de ver los subproblemas con un patrón repetitivo. Por ejemplo, supongamos que tenemos que preparar cena para varios comensales, con entrantes, cena fuerte y postre. En los problemas de "cocina" hay patrones comunes como "cortar" o "calentar". No todos los cortes son iguales, por ejemplo si hacemos una sopa podemos cortar verduras en juliana, si hacemos sushi cortamos pepino en tiras, si hacemos patatas fritas las cortamos en.... patatas fritas. Podríamos hacer un problema cortar específico para cada cosa, como por ejemplo cortarPatatasFritas, cortarPepino.... pero pensad en cuántas cosas existen que se pueden cortar para cocinar. Así que al final el subproblema "cortar" tendrá 3 parámetros que serán: qué cortamos, cuánto cortamos y cómo lo cortamos. Para empezar sin liarnos, se puede usar el lenguaje natural, de esta forma para prepar sushi tendríamos el algoritmo:


Cortar pepino, 30 gramos por comensal, en tiras
Cortar salmón, 40 gramos por comensal, en tiras
Calentar arroz, media taza por comensal
Mezclar arroz con vinagre de sushi
Poner alga sobre esterilla
Cubrir alga con arroz
Poner pepino al principio
Poner salmón al principio
Enrollar
Cortar canuto de sushi, 2 cms, en cilindritos


¿Lo bonito de todo esto? Que los verbos, el algoritmo, la profundidad de vuestros subproblemas, los parámetros... todo, absolutamente todo, sale de vuestra mente y a vuestro gusto. Y algunos subproblemas son divisibles a su vez, por ejemplo calentar arroz puede dividirse en lavar el arroz, sacar la olla del armario, echar un vaso de agua por cada medio de arroz, echar el arroz, poner a fuego medio, esperar a que se evapore el agua.

Fácil, por ahora.

Pues ahora los deberes:

De un plato con el que estéis familiarizados a cocinar ( o forma de subsistencia vital ) diseñad un algoritmo de forma que cualquiera al que paséis dicho algoritmo pueda repetir vuestro plato de forma exacta, y explicad por qué escogéis esa subdivisión en problemas pequeños y no otra

Ningüino CDR-lar

Me ha quedado claro que ser programador es como jugar al Pang: revientas burbujas haciendo que se partan por la mitad hasta que por fin desaparecen del todo.

Después de tirarme media hora jugando a susodicho juego y recordar lo mal que se me da, espero que no me pase lo mismo con esto y planteo un par de dudas: ¿lo colgamos aquí o te lo enviamos?¿cómo lo justificamos?

Lo último lo digo porque habrá cosas que sea absurdo explicar: cuezo el arroz porque, si no, me lo tomo crudo y eso es inmasticable, entre otras cosas. Y lo cuezo echándolo en una cazuela de agua hirviendo porque la experiencia me ha dicho que así se hace el arroz. No le veo más explicación. Así que eso, a ver si me aclaras cómo quieres que te lo justifiquemos y eso.
Cita de: Orestes en 28 de Junio de 2012, 02:47
Hay partes del comportamiento de los bonobos que molan y otras que no molan tanto. Como pasa con la Biblia.

Cita de: Aliena en 08 de Agosto de 2008, 00:38
Hoijan, a follar al parque.

Cita de: Mime en 26 de Enero de 2012, 20:33
Los trapos sucios se limpian en casa  X(

Bill

Cita de: Penguin Boy en 15 de Mayo de 2009, 00:32
Después de tirarme media hora jugando a susodicho juego y recordar lo mal que se me da, espero que no me pase lo mismo con esto y planteo un par de dudas: ¿lo colgamos aquí o te lo enviamos?¿cómo lo justificamos?

Como prefirais. Está claro que enviado es secreto, colgado aquí lo ven todos, y si tienes miedo a la crítica en público... pues MP, y si no a darle vidilla al hilo. En cuanto a lo de justificar, cada cerebro es único, cada persona también. En este ejercicio no hay solución o justificación incorrecta, todos los ejercicios estarán bien, claro que con mejor o menor estilo. Los que subdividan poco tendrán poco estilo, porque no tendrán problemas suficientemente pequeños o reaprovechables. Los que subdividan mucho tendrán demasiados problemas como para ser manejables.

Cita de: Penguin Boy en 15 de Mayo de 2009, 00:32
Lo último lo digo porque habrá cosas que sea absurdo explicar: cuezo el arroz porque, si no, me lo tomo crudo y eso es inmasticable, entre otras cosas. Y lo cuezo echándolo en una cazuela de agua hirviendo porque la experiencia me ha dicho que así se hace el arroz. No le veo más explicación. Así que eso, a ver si me aclaras cómo quieres que te lo justifiquemos y eso.

Verás, lo de que hay que cocer el arroz lo sabe una persona porque lo ha aprendido. Aquí el objetivo es que sea la receta sea reproducible por cualquier persona, incluso si jamás ha cocinado... ¡o incluso si jamás ha comido! ¿Qué diferencia cocer, de hornear, de hervir, de freir...? Todos son verbos diferentes ;)

MiGUi

r. r +dr

Khram Cuervo Errante

¿Tiene que ser un plato de cocina o vale un protocolo de laboratorio? Básicamente, tienden a ser lo mismo.

Sorry but you are not allowed to view spoiler contents.

Bill

#56
Cita de: Khram Cuervo Errante en 15 de Mayo de 2009, 11:36
¿Tiene que ser un plato de cocina o vale un protocolo de laboratorio? Básicamente, tienden a ser lo mismo.

Un protocolo de laboratorio no deja de tener el mismo espíritu que una receta. Vamos, la última vez que miré cómo se sintetizaba LSD, incluso había que hornearlo. Claro que vale.

Clave

Antes de presentar el ejercicio un par de explicaciones:


Lo presento en publico para ver los fallos y tal, si os apetece insultar apretaros un huevo hasta que se os pase las ganas, (o en el caso que hagan plof también parar). Esto no quiere decir que no acepte criticas constructivas.

Yo no se de medidas justas, así que uso cucharones (la medida mas exacta es lo que te quepa en la dos manos) y latas (latas normales y corrientes de atún y maíz).

Lo que vamos a preparar hoy es "Sustento de clave para 6 días de la semana"


Echar aceite en el cazo hasta cubrir finamente el fondo, junto a un par de ajos cortados.
Añadir un cucharon de arroz por persona.
Sofreír con el mínimo fuego "mareando" el arroz durante 5 minutos..
Verter 2 cucharones de agua por cada 1 de arroz, y una pizca de sal.
Mantener 20 minutos al fuego mínimo desde el momento en el que empiece a hervir.
En las raciones individuales añadir atún (1 lata estándar), maíz(1/4 de lata estándar).
Comer con la boca preferentemente.
[spoiler=Citas][23:59:06] petyr dice: A mí el olor a porro me marea mucho[0:33:39] rayd dice: que yo tuve novia
Cita de: Ningüino Flarlarlar en 12 de Agosto de 2011, 12:08Felicidades, Logan. Ya no tendré que darme prisa para contestarte los sms.
Cita de: Rayd en 04 de Octubre de 2011, 16:00
Cita de: Clave en 04 de Octubre de 2011, 15:57
Cita de: ayrendor en 04 de Octubre de 2011, 15:51
Cita de: Clave en 04 de Octubre de 2011, 15:37
Cita de: ayrendor en 04 de Octubre de 2011, 15:29
¿Pero cuando se acaba el plazo para mandar? :facepalm:
Hay un mp para ti.
No lo hay.
Ahora si
Me lo has mandado a mi.

Bill

Cita de: ElCoCo en 15 de Mayo de 2009, 14:55

Echar aceite en el cazo hasta cubrir finamente el fondo, junto a un par de ajos cortados.
Añadir un cucharon de arroz por persona.
Sofreír con el mínimo fuego "mareando" el arroz durante 5 minutos..
Verter 2 cucharones de agua por cada 1 de arroz, y una pizca de sal.
Mantener 20 minutos al fuego mínimo desde el momento en el que empiece a hervir.
En las raciones individuales añadir atún (1 lata estándar), maíz(1/4 de lata estándar).
Comer con la boca preferentemente.


Bueno, está bien, separaras en subproblemas. Sin embargo, lo de reutilizar "no mola" en informática. Por ejemplo, pones "Echar aceite en el cazo hasta cubrir finamente el fondo, junto a un par de ajos cortados.", ¿por qué no poner "Echar aceite en el cazo hasta cubrir finamente el fondo, junto a un par de ajos cortados y un cucharón de arroz por persona"?

Seria más correcto:
Echar aceite en el cazo hasta cubrir finamente el fondo.
Echar un par de ajos cortados.


Cubrir finamente el fondo de un cazo son como dos cucharadas, y para echar ajos cortados hay que cortarlos... y no me has especificado el corte (¿¿¿¿estás seguro de que son dos ajos enteros y no dos dientes?????? ¿Cortados? Yo los picaría). Supongamos que efectivamente son dos ajos y cortados:
Echar dos cucharadas de aceite en el cazo.
Cortar dos ajos.
Echar los ajos cortados en el cazo.


Y seguiríamos, porque no has dicho que el cazo se ponga a fuego, con lo cual al que le pasaras la receta echaría el ajo en aceite frío, que suele ser como epic fail.

No te preocupes, el ejercicio solamente era para aprender a subdividir problemas. En informática existen las instrucciones (es decir, comandos que posee el lenguaje de programación). Con las instrucciones se construyen funciones, que sería el equivalente a nuestros "subproblemas", y las funciones las inventa cada programador siguiendo su propia lógica. Si no existieran, los programas tendrían miles de líneas no separables, y leerlos sería el infierno robot. Por eso lo de subdividir y tal, y jamás dar por sentado que el ordenador tiene imaginación como para suponer "bueno, el programador ha escrito esto, supongo que quiere decir esto otro". Hay que darle todo mascadito.

Rohi

Me pone tu rollo, peluche, quería apuntarme pero prefería ver antes de qué iba la mandanga. Me apunto, capaz que me sirva en un futuro para hacer una presentación guapa para la uni or something like that.

Últimos mensajes