programming languages - programacion - ¿Qué es un buen ejemplo para mostrarle a un programador no programado para explicar cómo se ve la programación?
manual de programacion android pdf (30)
- El programador de computadoras escribe programas.
- Mientras no se programa, el programador de computadoras molesta a las mujeres atractivas en su lugar de trabajo.
Entonces:
http://markharrison.net/stackoverflow/univac-1110-500-unisys.jpg
Un amigo mío me preguntó el otro día si solo estoy mirando listas de números cuando estoy programando, o cómo funciona. Traté de explicar que, en general, es más como fórmulas matemáticas, con la extraña palabra inglesa arrojada, y que generalmente es más legible. Pero esa es una explicación muy vaga, y realmente no explica mucho a un no programador.
Pero me hizo pensar en lo que sería un buen ejemplo. No porque quiera enseñarle programación o nada, sino simplemente para darle una idea de cómo se ve el código del programa.
Y eso me hizo preguntarme qué sería realmente un buen ejemplo. Y eso resulta ser sorprendentemente difícil.
Mi primer pensamiento fue obviamente un simple programa "Hello World". Pero realmente no muestra nada útil. En realidad, no muestra cómo usamos funciones o variables, o controlamos estructuras de flujo como if
o while
para hacer un programa que realmente hace algo . No tiene lógica. El programa no reacciona a nada.
Entonces quizás algo como calcular números primos sería un mejor ejemplo. Pero, de nuevo, eso podría ser demasiado teórico y poco práctico ... (¿Qué tiene de bueno eso? ¿Qué tiene que ver con escribir programas "reales"?) Y nuevamente, no hay una lógica de control de flujo significativa. Es solo una secuencia recta de matemáticas.
Y también, ¿qué idioma debería usarse?
Idealmente, no creo que tenga que ser un lenguaje muy "limpio". Más bien, probablemente debería dejar clara la estructura. Si lo hace, entonces una cierta cantidad de ruido y desorden podría estar bien. Tal vez algo como C ++ en realidad sería un mejor ejemplo que Python por esa razón. Las llaves y los especificadores de tipo explícitos son "ganchos" obvios para ayudar a explicar cómo está estructurado el programa, o para resaltar que no se trata solo de enunciados simples que casi se pueden leer como inglés.
Pero con C ++ también entramos en una sintaxis francamente extraña. ¿Por qué se usa std::cout << x
para imprimir x? ¿Por qué no una sintaxis de llamada a función "normal"? Y printf
no es mucho mejor, con su cadena de formato arcano, y la falta de extensibilidad (¿quiero complicar el programa usando char*
para cadenas? ¿O uso std::string
y me fijo para llamar a las s.c_str()
aparentemente innecesarias s.c_str()
para obtener una cadena que se puede imprimir con printf
?
Quizás un lenguaje de nivel superior sería mejor después de todo. ¿Pero cual? ¿Y por qué?
Sé que hay muchas preguntas similares aquí sobre qué idioma / programa de ejemplo usar para enseñar programación. Pero creo que los requisitos aquí son diferentes. Cuando enseñamos programación, queremos simplicidad más que nada. Queremos evitar todo lo que no se haya enseñado todavía. Queremos asegurarnos de que el alumno pueda entender todo en la pantalla.
No me interesa la simplicidad per se. Pero más bien al darle a un "extraño" una idea de "cómo es un programa". Y los programas no son simples. Pero generalmente muestran una cierta estructura y método para la locura. ¿Qué idioma / programa sería mejor resaltar eso?
Editar
Gracias por todas las sugerencias hasta ahora. Algunos de ustedes han tenido un ángulo algo diferente de lo que yo pretendía.
Quizás un ejemplo está en orden. No puedo volar un avión, pero tengo una comprensión básica de cómo es la cabina y de lo que un piloto "hace" mientras vuela.
Y no soy un carpintero entrenado, pero conozco una sierra o un martillo cuando veo uno.
Pero cuando ves algo que ver con la programación en películas, por ejemplo, generalmente solo pantallas llenas de basura (como en el texto verde en la Matriz). No parece algo que un ser humano normal pueda realmente hacer . No hay nada reconocible en eso. Alguien que no es programador simplemente piensa que es magia negra.
No quiero enseñarle a volar o programar programas. Pero me gustaría darle un marco de referencia básico. Solo una idea de "ah, entonces eso es con lo que estás trabajando. Así que no son solo símbolos y números aleatorios en la pantalla". Incluso el simple hecho de mostrar una declaración simple de " if
" sería una revelación en comparación con los símbolos y números aleatorios estilo Matrix.
Algunos de ustedes han sugerido explicar un algoritmo, o usar pseudocódigo, pero eso es lo que quiero evitar. Me gustaría algo que simplemente muestre cómo se ve el código real , de la misma manera que no tienes que ser carpintero para mirar una sierra y obtener una idea básica de qué es y cómo funciona.
Cuando era niño, una vez fuimos de vacaciones en Italia. Mientras bajaba, el piloto me dejó entrar en la cabina del avión. Por supuesto, no aprendí a volar el avión. Pero pude echarle un vistazo al mundo del piloto. Tengo una idea de cómo hacen que el avión se vaya, lo que el piloto realmente hace.
Eso es todo lo que quiero hacer. Mi amigo no tiene interés en aprender programación y no quiero obligarla a comprender el código fuente. Pero ella tenía curiosidad sobre con qué tipo de herramientas o entidades trabajo. ¿Son símbolos de estilo Matrix que se desplazan por la pantalla? ¿Matemáticas puras? Inglés en forma de prosa?
Todo lo que me interesa transmitir es la comprensión a muy alto nivel de "¿Qué aspecto tiene cuando trabajo?".
¿Por qué no considerar un idioma que no existe (o lo hace, si así lo crees) y usar Pseudo Code ? Creo que, dependiendo de lo que quieras lograr, consideraría el ejemplo de tarea familiar para la persona, pero tallado en un ejemplo de pseudo código.
En general, encuentro que la idea de "cocinar" o "recetas" es perfecta para explicar cosas a los que no son programadores.
Le pido a la persona que imagine que tenían una receta que era bastante compleja, por ejemplo, un plato de curry y arroz. Luego sugiero que intenten escribirlo para alguien que no tenga ni idea de lo que están haciendo, para que puedan cocinarlo.
Hay algunas etapas muy definidas involucradas:
- Reúna los ingredientes y las herramientas para el trabajo.
- Prepara los ingredientes Esto es complejo p.ej
- obtener 3 pimientos rojos pequeños.
- por cada pimiento rojo que tenga, córtelo en trozos de aproximadamente 1 cm cuadrados.
- coloque los trozos de pimiento rojo en un tazón para más tarde.
- Por separado, llame a la función de preparar arroz y haga que funcione de forma asíncrona en el fondo mientras continúa cocinando.
Estoy seguro de que puedes ver a dónde va esto ...;)
Hay muchas similitudes con la Cocina y la Programación (como ocurre con muchas cosas, pero más personas entienden la cocina que la construcción de una casa). Hay etapas / similitudes (como yo lo veo) son:
- Reunión : (declaración de lo que se requiere para lograr el objetivo y reunirlos).
- Preparación : Cortar los ingredientes o preparar los objetos de conexión de datos, etc. para el primer uso.
- Asincrónico : la capacidad de tener una cosa en marcha mientras otra va.
- Funciones : La preparación del arroz, la cocción del pollo y la cocción del curry requieren procesos por separado y solo al final puede tener la función makeCurry (chickenMeat, rice).
- Pruebas : Asegúrese de que a medida que avanza, no le faltan trozos y que todo está funcionando sin problemas, por ejemplo, asegurarse de que el pollo esté cocido antes de pasar a la siguiente etapa.
- Basura : una vez que lo haya hecho, debe asegurarse de poner en orden. ;)
- Principios de las mejores prácticas : existen formas eficientes de hacer cosas que les gusta cocinar, los programadores principiantes tienen que aprender además del código: a veces puede ser difícil entenderlo. por ejemplo, SECO, cómo cortar eficientemente con un cuchillo y no comer pollo crudo;)
Básicamente, creo que para enseñar la programación como un tema general, no necesariamente enseñaría desde un idioma a menos que tuvieras una razón convincente para hacerlo . En su lugar, enseñe inicialmente desde el resumen hasta que comprendan al menos los fundamentos de cómo las cosas pueden caer juntas. Entonces pueden encontrarlo más fácil cuando se sientan frente a un monitor y teclado.
Creo que puede que no haya una "respuesta correcta" para esta. Pero creo que tal vez haya algunas ideas realmente buenas de las que podrías sacar bits de todas.
¿Qué se ve cuando trabajas?
Parece que escribe.
En serio, la programación es como si los legos fueran texto, y para construir una gran casa de Lego, tenías que escribir mucho texto, justo, conectando las clavijas correctas con los agujeros correctos. Así que así es como generalmente lo describo.
BASIC
10 PRINT "Sara is the best"
20 GOTO 10
Actualización: cuando tenía 12 años, mi primo (tenía 14 años) trajo Turbo Pascal 7.0 y lo instaló en mi computadora.
Él programó un juego de tres en raya desde cero (en modo BGI, para aquellos que lo saben).
Observé / observé paso a paso cómo evoluciona un programa hasta que se convierte en una aplicación completa.
Hasta entonces, solo sabía cómo imprimir cadenas en BASIC: -B
Puedes hacer algo similar. Par de programación. Bueno, en realidad, tu amigo será un observador, pero ella tendrá una idea;)
Codifique algo que tenga un valor comprensible para un no programador. Si le demostrara Quicksort a mi madre, no sería de ninguna utilidad.
Pregúntele a la persona sobre sus intereses. Si él / ella está en bolsa, por ejemplo, hackear un guión que lea algunas estadísticas de stock de una página web apropiada y las compile en una hoja de Excel (use csv, para evitar daños cerebrales fuertes ^^) o tal vez en un buen gráfico .
Si la persona usa Twitter, codifique algo que cuente los seguidores de sus seguidores o algo así.
Estas tareas son lo suficientemente simples como para hacerse en muy poco tiempo y ya utilizan muchas de las herramientas básicas que los programadores usan, como bucles, bibliotecas (para todo el material http involucrado), tal vez recursividad.
Una vez que haya terminado o mientras esté codificando (incluso mejor), puede explicar cómo su programa hace su magia.
Simplemente manténlo simple y habla en lenguaje humano. Si les muestra megabytes de código y habla sobre cosas como la herencia prototípica, simplemente intimídelos y perderán interés inmediatamente.
Creo que deberías descargar alguna aplicación grande de win32, escrita en el lenguaje ensamblador de AT & T, mostrarla en un bloc de notas y decirle: "Como puedes ver, se necesita un superhombre como yo para programar".
Cuando mi hija de 5 años me hizo la pregunta, le hice "desarrollar" el programa para un pequeño "robot" de flechas que lo llevará a la esquina superior izquierda de la pizarra usando papelitos tipo diagrama de flujo que significa movimientos, giros y condiciones Creo que también se aplica a los adultos.
Sin embargo, no reclamo la invención de esta respuesta.
Acerca de su edición : me temo que los programadores tienen aún menos idea de la idea que otros tienen sobre la programación. ;-) La gente piensa que la programación es una corrupción de tarjeta de video verde similar a la matriz, casi tanto como creen que los espías están equipados con los juguetes de alta tecnología de James Bond. Y cualquier profesional en cualquier campo normalmente se irrita cuando mira la película sobre su trabajo. ¡Porque el creador de películas no tiene idea! ¿Sabemos cómo representar apropiadamente la programación en la película por otro lado? ;-)
Definitivamente algo con gráficos o ventanas en un lenguaje de nivel superior.
¿Por qué? Un no programador generalmente no es un matemático, por eso no tendrá la belleza de la clasificación. Sin embargo, mostrar algo dibujado en una pantalla ("¡mira, una ventana!", "Mira, tan poco tipeo y tenemos un cuadro 3D girando") puede hacer maravillas;).
Es realmente difícil entender cómo es la programación solo desde un ejemplo de código fuente, porque es muy abstracto.
No hay nada de malo en comenzar en hello world, siempre y cuando puedas mostrar lo que la computadora realmente hace con él. A continuación, puede presentar una construcción a la vez. Así es la programación: hacer cambios incrementales y ver los resultados.
Entonces tienes un programa hola mundial. Ahora cámbialo a
string Name = getLine();
printf("Hello, %s", name);
entonces la construcción si
printf("Do you like cake?");
string answer = getLine();
if(answer==="yes") {
printf("Yeay! I like cake too!");
}
if(answer==="no") {
printf("Filthy cake hating pig!");
}
luego demuestre que el último programa falla cuando recibe una respuesta que no sea "sí" o "no", y cómo se solucionaría ...
y así. No creo que deba adentrarse en conceptos profundos como la recursividad, o incluso funciones realmente.
En realidad, no importa la programación que utilice para esto, siempre que pueda mostrar, en una computadora, el resultado de estos diferentes programas. (aunque estos ejemplos de psuedocode son probablemente muy parecidos a ser python válidos)
Explicaría que la programación está dando instrucciones detalladas para que la computadora pueda realizar tareas complejas.
¿Cómo hacer dos tazas de café?
- Llena el hervidor
Agua hervida
Café en taza
- Vierta sobre el agua
- Añade azucar
Agrega leche
Haz 3 a 6 nuevamente
Había un paquete de gráficos CLI llamado LOGO , y mejor conocido por Turtle Graphics , utilizado para dibujar formas en la pantalla usando comandos como LT 90, RT 105
etc. Vea si puede encontrar eso, sería una experiencia agradable intentar dibujar algo de mediana complejidad.
LOGO - Lenguaje de programación orientado a gráficos orientado a lógica.
REPEAT 360 [FD 1 RT 1] -- draws a circle, etc.
Vea más en logothings o LOGO que también tiene enlaces a intérpretes de logotipos modernos.
He descubierto que el mejor enfoque para "enseñarle a alguien qué es la programación sin enseñarles a programar" es simplemente dejar caer todo lo relacionado con un lenguaje de programación específico.
En cambio (suponiendo que realmente estén interesados), les hablaría mediante la implementación de una función en un programa, como una simple solicitud de préstamo bancario (la mayoría de las personas ha tenido que lidiar con préstamos en algún momento, si son mayores de cierta edad) , y luego haciendo agujeros en todas las suposiciones.
¿Cómo debería ocurrir si el usuario ingresa un monto de préstamo negativo? ¿Qué pasa si el usuario no puede pagar el préstamo? ¿Cómo lo sabría la solicitud de préstamo? ¿Cómo sabría la solicitud de préstamo qué cuenta bancaria controlar y qué historial de pago controlar (es decir, quién es el usuario en realidad)? ¿Qué pasa si el usuario intenta escribir su nombre en el campo de monto del préstamo? ¿Qué sucede si el usuario intenta tomar el préstamo durante 75 años? ¿Deberíamos limitar las opciones a una lista de longitudes disponibles?
Y luego, al final: la programación toma todas esas reglas y las escribe en un lenguaje que la computadora entienda, para que siga esas reglas al pie de la letra. En este punto, si se considera necesario, extraeré un código simple para que se pueda observar el lenguaje general, y luego quizás se escriba una de las reglas en ese idioma.
Puntos de bonificación si puede hacer que su amigo reaccione con: ¿Pero qué pasa si olvidamos algo? Bueno, entonces tenemos errores, y ahora sabes por qué ningún programa de software está libre de errores :)
Para darle a mi esposa una idea de lo que hago para traer un cheque de pago (¡Es un trabajo real! ¡Lo prometo! ¡No solo navegamos por la web todo el día!) Me senté con ella una noche con Python y le mostré un par de los conceptos básicos: invocar una función (imprimir), asignar y leer una variable y cómo funciona una instrucción if. Como ella es maestra, comparé el concepto de condicionales para trabajar con niños en edad preescolar :)
IF you hit Jonny THEN you''re in time out OTHERWISE you can have a snack.
Después de revisar un par de conceptos de muy alto nivel, le mostré el código de un juego simple de adivinación de números y la dejé jugar mientras miraba el código.
# Guessing Game
import random
print("Guess a number between 1 and 100: ")
target = random.randint(1, 100)
guess = 0
guess_count = 1
while guess != target:
guess_count += 1
guess = int(input())
if guess == target:
print("Correct!")
if guess < target:
print("Higher...")
if guess > target:
print("Lower...")
print("Congratulations! You guessed the number in " + str(guess_count) + " guesses!")
Aparte del concepto algo abstracto de "importación", este es un ejemplo muy sencillo que es fácil de seguir y que "conecta" con lo que está sucediendo en la pantalla, sin mencionar que realmente hace algo interesante e interactivo. Creo que mi esposa se alejó de la experiencia un poco menos desconcertada por todo el concepto sin realmente necesitar saber mucho sobre el código.
Creo que la clave es poder hacer que alguien vea el código Y su resultado final al lado del otro.
Para responder a su pregunta directamente, a qué se parece la programación , les mostraría una impresión de una aplicación grande. Las aplicaciones de juguete o cosas lindas como qsort en haskell realmente dan la idea equivocada.
Quizás todos se están concentrando demasiado en el código en lugar de las herramientas. Posiblemente sea mejor mostrarle un proyecto en un IDE, y cómo incluye varios archivos fuente y tal vez algunos elementos de diagrama, como un esquema de base de datos o un diseñador visual de interfaz de usuario. Visual Studio, Eclipse o Xcode están bastante lejos de la imagen mental de la mayoría de la gente de símbolos verdes brillantes que se desplazan rápidamente sobre un fondo negro.
{
wait for 6/8;
play F (5), sustain it for 1/4 and a half;
play E flat (5), sustain it for 1/8;
play D flat (5), sustain it for 1/8 and a half;
play F (4), sustain it for 1/16;
// ...
}
Perhaps a metaphor could be that of a composer writing a musical score. The job of a composer is the intellectual activity of creating music. With a score, the composer is telling the pianist what to play, and he does it by means of precise instructions (notes, pauses and so on). If the "instructions" are not precise enough, the pianist will play something different.
The job of a software developer is the intellectual activity of solving problems (problems that have to do with automated processing of data). With source code , the developer is telling the computer what to do, and he does it by means of precise instructions. If the instructions are not precise enough, the computer will do something different and will not solve the problem correctly.
Alice which was developed at Carnegie Mellon.
Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a teaching tool for introductory computing. It uses 3D graphics and a drag-and-drop interface to facilitate a more engaging, less frustrating first programming experience.
A programmer writes instructions for the computer to perform.
Running the program results in the computer actually following those instructions.
An example is a cook will follow a recipe in order to bake a loaf of bread. (even if it''s in their head)... that''s programming. Unlike my wife, the computer follows the recipe exactly every time. My wife, does it in her head and it turns out different but delicious every time ;-)
If you want to go ahead and teach this in more detail then pseudo-code is easy to understand.
p.ej
IF today''s date is the 1st of may then
print to screen "Happy Birthday"
ELSE
print to screen "It''s not your birthday yet"
The beauty of psuedo code is nearly anyone can understand it and this is the point of it.
Code up something quick that reads stock quotes and writes them to an excel spreadsheet. This is easy enough to do with a few minutes and impresses non technical types very quickly as they see the practical value of it.
I have been teaching programming for many years and found out that the number of ways you need to explain things is equal to the number of students you have. But one method that works most of the time is as follows:
- Present a flow chart that shown the flow of logic of a simple application
- Write the instructions in full human language (eg English)
- Abbreviate each instruction to the short-hand used in the programming language
- Choose a less cryptic language like Basic or Pascal for teaching purposes
Todo el código es simplemente una abreviatura de lenguaje natural. Escrito en inglés completo, la mayoría de los programas parecen triviales.
En cuanto a un buen algoritmo, esa es otra historia. Es triste ver que muchos cursos de Informática ya no enseñan algoritmos ni lo modifican.
I say show him bubble sort.
It''s an easy, understandable trick, converted to a formal language.
That''s what our job is about. Expressing our ideas in a strict, formal language, such that even a machine can understand. A little similar to designing procedures for organizational design.
I would just write something in pseudocode that demonstrates how to use a computer to solve an everyday problem. Perhaps determining which store is cheaper to buy a particular grocery list from or some such.
In pseudo-code:
function dealWithPerson(person){
if(ILike(person)){
getCookie().giveTo(person);
}
else{
person.tell("You shall receive no cookies!");
}
}
dealWithPerson(Person.fromName("Nick"));
dealWithPerson(Person.fromName("John"));
This demonstrates the concept of functions, object-orientation and strings, in a C-like syntax(when I say C-like syntax I refer to the weird characters).
It also shows how code can be reused. Note that although it is pseudo-code, I wouldn''t be surprised if there was some language that accepted this syntax(perhaps JavaScript allows this?).
You could also adapt this example to have loops. Hope this helps show that person how a program looks like(since it is a realistic syntax and it is relatively easy to understand).
My usual choice is to retrieve a set of customer records from a database. Using C# and LINQ in Visual Studio, it takes maybe 10 minutes at most to build a web page and dump out the "Northwind" database customers into a grid. The nice thing is that a "list of customers" is something that almost anybody can understand.
Robotics is great for explaining programming, I think, because even simple, contrived examples are practical. The robotics equivalent of Hello World or printing a list of numbers might be having the robot move in a line or spin in a circle. It''s easy for a non-programmer to understand that for a robot to do ANYTHING useful it must first move and position itself. This lets you explain simple program structure and flow control.
You want the robot to move forward, but only while there is nothing blocking its path. Then you want it to turn and move again. That''s a simple routine using basic flow control, and the functions that you''re calling are pretty easy to understand (if your platform has decent abstractions anyway).
Graphics might also work. Anything that has immediate results. jQuery even, because everyone is familiar with rotating pictures and web animations. Even contrived examples like pushing elements around in the DOM has an easy to see effect, and most people will understand what and why the statements in the program do.
Things like Robocode and LOGO are probably really good for this.
Totally depends on the level of her interest (or your level of interest in her ). Most people ask that question as idle conversation, and don''t really want to know.
Programming is more than algorithms (like "How to make a cup of coffee), it''s also fundamentally rooted in mathematics. Most people will be quickly tripped up by the subtle use of mathematical terms (what''s a "function"?).
In order to really teach programming, it may help to think back to your own first programming experiences, your first programming teacher, your first programming language. How did you learn? when you were learning, what skills did you already have fresh in your mind (ie, calculus)? What motivated you to want to understand what a variable is or why there are three different kinds of loops?
Language-wise: Use something like python. Really high level, non-curly-bracket probably better.
Want to show her what programming looks like? Just pop a terminal and
find /
Why not just show the timelapse video A Day in the Life of a Scrum Team ?
Se parece un poco a esto. A veces.
Yo consideraría Greenfoot . Aunque está destinado a que los niños aprendan programación, los gráficos probablemente ayuden al lector a relacionar el código con "acciones". Aquí hay un artículo sobre Greenfoot por un colega mío.