¿Cómo puedo enseñar a una persona brillante, sin experiencia en programación, cómo programar? [cerrado]

100

Se me ha pedido que lleve a una persona en nuestro departamento de TI que no tenga experiencia en programación, pero que sea una persona inteligente y capaz, y que lo ayude a pasar a la programación, digamos un desarrollador de nivel básico que admite aplicaciones .Net existentes. Definitivamente creo que esta persona puede hacerlo, pero estoy buscando la forma más rápida de acelerarlo. Tengo muchas ideas pero quería ver lo que pensaban otras personas. Sé que esto también dependerá en gran medida de cómo aprenda, pero estoy hablando en general.

Entonces, la pregunta: ¿Cuáles crees que son las mejores formas de hacer que un no desarrollador se acelere rápidamente en el desarrollo (.Net en este caso)?

Richard Fantozzi
fuente
1
Tal vez una pregunta relacionada: programmers.stackexchange.com/questions/10930/… : D
jmservera
He oído que Learn Python The Hard Way es bueno para los no programadores que comienzan.
juan2x
Echa un vistazo a Small Basic . Es simple, pero útil para los principiantes.
3
Creo que explicar la programación a alguien que no tiene un modelo mental de nada de lo que estás hablando es inútil. Averigüe de qué idioma va a hablar y pídales que lean los tutoriales y que se ensucien las manos y luego explíqueles. Lucharán y usted se precipitará y acelerará el proceso de aprendizaje.
The Muffin Man
1
Le pediría que leyera Edgser Dijkstra | Sobre la crueldad de realmente enseñar ciencias de la computación |, que aprenda sobre la razón de ese artículo, para que pueda desconfiar del posible daño cerebral que puede ser infligido por los generalmente aceptados. formas de enseñar programación
vfclists

Respuestas:

125

Por lo general, prescribo la misma secuencia para cualquiera que quiera aprender a programar. Es muy teórico, pero establece una buena base. Debería llevar tres o cuatro meses de estudio a tiempo completo, pero la programación no es algo que se aprende de la noche a la mañana.

Si no puede superar esta secuencia, no podrá programar, por lo que es mejor que se rinda ahora.

  1. Código, por Charles Petzold.
  2. El lenguaje de programación C, K&R
  3. La estructura e interpretación de los programas de computadora, Abelson y Sussman.

Mi regla es: trabaja en esos tres libros por pura fuerza, si es necesario. Haga cualquier pregunta que tenga, pero solo después de luchar por resolverlo por su cuenta. Si puedes atravesar esos tres libros, felicidades, eres un programador, ahora puedo arrojarte PERL EN 15 MINUTOS o lo que sea que haya en la librería en la Gran librería de Java y te las arreglarás bien. Si no puedes atravesar esos tres libros, ríndete, vete a casa, nunca lo conseguirás.

No creo que necesites aprender C y Scheme, para ser honesto. Son solo una base para el aprendizaje futuro. Estos dos libros bastante simples son muy simples en la superficie (C y Scheme son lenguajes súper fáciles) pero profundizan en el verdadero arte de la programación sin perder tiempo en sintaxis confusa, por lo que son excelentes para comenzar a volver a cablear tu cerebro para ser un buen programador.

Los intentos de tomar un atajo e ir directamente a aprender exactamente lo que desea aprender en este momento (como comenzar con C # y ASP.NET) están condenados.

Joel Spolsky
fuente
25
Como alguien que ha tenido que golpearse la cabeza con el escritorio sobre "programadores" que fueron altamente recomendados por sus habilidades de C #, pero que no podían hacer cosas simples como implementar una clase base muy bien documentada, encontrar pérdidas de memoria en los programas C y C ++, o simplemente resolver un problema por su cuenta o aprender una nueva idea incluso a un ritmo moderado, estoy de acuerdo. Esto no es elitismo; Es de sentido común. Si no puede dominar los punteros y la recursividad, nunca será muy útil para nadie que necesite desarrolladores que puedan resolver problemas por su cuenta.
Jonathan Henson
53
No, no es la única forma de ser un buen programador. Pero si tres libros es una "lista desalentadora", entonces podría estar subestimando lo que hacen los programadores.
Joel Spolsky
32
A veces estás tan fuera de contacto, Joel.
Robert S.
46
Lo siento, los periódicos tardan un par de días en llegar a mi club privado porque necesitan ser planchados por un valet antes de que podamos verlos.
Joel Spolsky
19
Desafortunadamente, esta respuesta falla la up to speed quicklyparte.
rlb.usa
30

¡La mejor manera de hacer que un no desarrollador se acelere rápidamente es inspirarlo !

Para tener éxito, el candidato debe ser al menos curioso, si no apasionado , acerca de la programación (independientemente de la plataforma).

Si bien estoy de acuerdo con Joel en el caso del candidato ideal, tendría cuidado de no meter demasiada teoría en una mente débil, solo los desanimará. Si están inspirados, curiosos y, con suerte, apasionados, querrán entender la teoría después de haber visto la magia.

Estoy completamente de acuerdo con @karudzo: la realización personal y una revisión constructiva pueden ser muy inspiradoras.

jkoreska
fuente
29
"Si desea construir un barco, no toque a la gente para recoger madera y no les asigne tareas y trabajo, sino más bien enséñeles a anhelar la inmensidad infinita del mar". - Antoine de Saint-Exupery
Julien Chastang
Julien: ¡qué bueno! ¡Exactamente!
jkoreska
Estoy completamente de acuerdo con usted en este! He sido mentor / tutor de muchos desarrolladores que no tenían experiencia y, a veces, no tenían idea de que terminarían siendo programadores. Hice esto simplemente guiándolos en el camino ... su propia curiosidad y pasión los llevó al resultado final. Si no hubieran tenido ninguno de esos dos atributos, no creo que les hubiera sido posible lograr lo que lograron. Trabajo con demasiados programadores que carecen de uno o ambos atributos y están en él solo porque hay mucho trabajo disponible ... ¡es horrible!
Jeach
Estoy de acuerdo. Siento que la cuestión de la programación de aprendizaje se responde de manera muy literal. La gente aprende cosas por una razón. Las personas aprenden a programar para resolver problemas, ayudar a las personas y convertir ideas en algo real. Conocí a personas que olvidaron esto en el camino y cuando lo redescubrieron, redescubrieron su amor por la programación. Cuando realmente disfrutes de algo que aprenderás, encontrarás formas de aprender y mejorarás.
Luis Pérez
12

Estoy buscando la forma más rápida de acelerarlo.

La forma más rápida podría ser darle el tiempo que toma , aunque fácilmente podría ser uno o dos años.

Claro, parece fácil enseñarle un lenguaje simple (C #, si tiene que hacer cosas de .NET), pero aprender un idioma no es aprender a programar.

Si nunca ha programado, entonces, además de la sintaxis y la biblioteca de al menos un idioma, tendrá que aprender sobre matrices, listas vinculadas, el modelo de compilación de cualquier idioma que aprenda, modularización, gestión de recursos, paradigmas, patrones, Big- O-notation ... - toda la enchilada. Eso es un montón de cosas por recorrer, y la mayoría de nosotros tardó varios años en aprender estos conceptos básicos, y aún más para convertirnos en un verdadero programador profesional.

Hay material que cubre mucho de esto (como el libro más reciente de Stroustrup que enseña programación usando C ++, en lugar de enseñar el lenguaje C ++), pero no hay mucho y nada que lo cubra todo. Entonces el tipo debe estar dispuesto a aprender y leer muchos libros y artículos.

En cuanto a cómo hacer esto: no tengo un currículum completo a mano para pegar aquí. (Lo siento).
Sin embargo, lo que recomendaría es comenzar enseñándole un lenguaje de programación, para que tenga la oportunidad de hacer un progreso inicial rápido y obtener algunos resultados alentadores. Hay bastantes libros para enseñar tales idiomas, elija uno con el que esté familiarizado. Si el libro tiene muchos ejercicios, y él está dispuesto a hacerlos, prepárese para pasar mucho tiempo ayudándolo con esos. Si el libro no tiene ninguno, comience a pensar en los suyos con mucha anticipación, pero prepárese para adaptarlos a su nivel / velocidad de comprensión.
Si ese primer lenguaje no era C o C ++, en mi opinión, debería aprender uno de estos a continuación. K&R es bueno para eso, como lo es el TCPL de Stroustrup o, si puede (con su ayuda) lidiar con una curva de aprendizaje empinada, Koenig / Moo. La razón por la que recomendaría esto es que, una vez que conoces C o (IMO preferiblemente) C ++, es relativamente fácil elegir cualquiera de esos derivados de C como C #, Java, ObjC ...

Por lo demás, proporciónele un flujo constante de buenos libros y artículos. No creo que sea muy útil si sugerimos muchos de ellos, ya que 1) tiene que adaptarse a la cultura de su empresa, y 2) debe sentirse cómodo diciéndole que aprenda esas cosas.

sbi
fuente
1
"desarrollador de nivel básico que admite aplicaciones .Net existentes" ... "tendrá que aprender sobre matrices, listas vinculadas, el modelo de compilación de cualquier idioma que aprenda, modularización, gestión de recursos, paradigmas, patrones, notación bit-O". son "agradables de tener", pero apuesto a que una buena parte de los desarrolladores que escribieron el código no tienen esas habilidades.
Kirk Broadhurst, el
1
@KirkBroadhurst: Si es así, entonces algo está mal en su empresa.
sbi
@sbi Creo que encontrarás que algo anda mal en muchas empresas. La compañía de OP sugiere que un no programador (¡pero es un 'tipo inteligente'!) Sea trasladado a un rol de soporte de aplicaciones. No sé donde se trabaja ... pero en mi experiencia que es 'el mundo real'. Los programadores realmente buenos y competentes son la excepción, como en la mayoría de las industrias, la mayoría de las personas hacen lo suficiente como para sobrevivir.
Kirk Broadhurst, el
1
@KirkBroadhurst: Donde trabajo es mi decisión. He huido de las empresas por ser incompetente, y huiría si ninguno de los desarrolladores conociera al menos la mayoría de estas cosas.
sbi
7

No los iniciaría en .NET. He cometido este error muchas veces. No permita que un empleador lo presione a crear un programador incompetente debido al tiempo. .NET puede ser una plataforma de desarrollo rápido, pero no obliga a los desarrolladores a aprender programación. Solo en C #, encontrará un desarrollador atascado en los tipos de referencia, la vida útil del objeto, dejarán grandes pérdidas de memoria (sí, es posible en .NET) y tendrán diseños deficientes. Sería mucho mejor comenzarlos en C o C ++ (probablemente en C ++ ya que necesitarán usar conceptos de POO) y luego decir algo como: "Ahora, ¿no sería bueno si tu memoria fuera administrada por ti, todo era objeto? -orientado, y no tuvo que lidiar con todos estos punteros desagradables? Aquí está C # y JAVA. Si han dominado c ++, conquistarán ambos en una semana o dos cada uno. Recomiendo el regimiento de Joel. Esa fue la lista que me dio mi maestro de CS 101, y me sentí mucho mejor cuando llegué al análisis numérico debido a eso. Esto también le permitirá averiguar antes si el candidato cortará la mostaza o no. Además, una vez que obtenga c y c ++, comprenderá automáticamente c # y java después de leer la introducción a los libros. No solo los entenderías, sino que los entenderías mejor que alguien que no conocía c y c ++.

Jonathan Henson
fuente
44
"" ¿No sería bueno si tu memoria fuera manejada por ti, todo estuviera orientado a objetos y no tuvieras que lidiar con todos estos punteros desagradables? " ¡¿Por qué no me enseñaste a usar el STL en C ++ desde el principio ?!
Raynos
Bueno, STL es dulce. Me refiero más a la API de Windows en lo que respecta a la programación de Windows. La API de Windows no está diseñada con OOP en mente. Me parece un gran ejercicio hacer que un tipo pobre escriba una aplicación usando la API en c ++. Luego le pido que escriba una clase de Windows y encapsule el bucle de eventos, etc. Ya sabes, haz que esté orientado a objetos. Luego, cuando finalmente lo tienen funcionando, les muestro Windows Forms. Realmente los obliga a lidiar con algunos conceptos básicos, es decir, cómo funciona una aplicación de Windows, que alguien nunca obtendría si saltaran a .NET.
Jonathan Henson el
44
¿Por qué alguien tocaría la API de Windows con un palo? Quiero decir, estábamos hablando hWNDde los años 80, ¿verdad? Claramente usas una buena abstracción en su lugar (qué abstracción es un debate completamente diferente). Claro que saber cómo funciona bajo el capó es bueno, pero no necesita C # .NET para la abstracción
Raynos
2
La API de Windows es asombrosa. De todos modos, solo lo uso para una herramienta de enseñanza. Por ejemplo, las personas generalmente no entienden cómo los eventos se activan mágicamente en los programas de Windows. Es útil para ellos tener que perder el tiempo con el bucle de eventos. Además, los programadores deben al menos estar familiarizados con el hWND, especialmente si se enfrentarán a cualquier apis que engañe con los gráficos, al igual que tendrá dificultades para hacer algo en Unix sin saber cómo usar un XID. De todos modos, los obliga a aprender cómo funciona un programa de Windows. Además, una vez que terminan, saben cómo funciona Windows.Forms.
Jonathan Henson
No tiene que ser una transición a C # por cierto, solo a .NET en general. Creo que @Joel tiene un buen artículo sobre la Ley de abstracciones con fugas en cuanto a por qué a menudo es bueno para los programadores mirar debajo del capó antes de usar un marco.
Jonathan Henson
6

Dales algo simple, pero útil para resolver. Déjelos hurgar un poco y ayúdelos a pulirlo. No hay nada como un pequeño logro para ayudar a estimularlos (aunque alguien que no esté interesado en programar w

jschorr
fuente
6

Programación en pareja. Deja que te sigan mientras escribes tu propio código, cualquier código. En cuestión de horas, luego pídales que ingresen su código por usted, mientras les dice qué hacer, pulsación de tecla por pulsación de tecla, incluso si es necesario. Responde algunas de sus preguntas, pero no tanto como para que te ralentices mucho, solo deja que absorban todo. También encontrarán tus errores tipográficos y más errores de lo que piensas. Dentro de unos días, podrán comenzar a 'navegar' diciéndole qué código ingresar para tareas similares a las que han visto antes.

Aprendí mucho de lo que sé como desarrollador de esta manera en un mes, y he enseñado a varios otros nuevos desarrolladores de esta manera, uno de los cuales fue capaz de asumir el cargo de desarrollador principal en una startup después de varios meses. Cuando comenzamos a trabajar juntos, nunca había escrito una sola línea de código.

rastro
fuente
1
Creo que la programación en pareja es una excelente manera de enseñar a los programadores novatos, pero creo que la programación en pareja todo el tiempo puede ser problemática. Creo que los programadores novatos necesitan algo de tiempo trabajando solos para aprender a resolver problemas y generar confianza en sus habilidades.
Helephant
Sí, póngalos en marcha con la programación en pareja y asigne tareas simples: tareas reales, en el software en el que deben trabajar, en el idioma en el que deben trabajar, con logros reales. Revise y guíe todo su trabajo y progresarán.
Thomas W
2

Dale una buena idea (estudios visuales, express sigue siendo bueno). Enséñele el 60% común de la sintaxis (omita el rendimiento, linq, enumeraciones, atributos, etc., enseñe clases, virtual y anulación). Pase tiempo en el depurador (especialmente callstack). Luego dígale que busque en Google "msdn functionanme" cuando necesite ayuda y eso debería ayudarlo a comenzar rápidamente.

También enséñele a nunca atrapar y tragar una excepción. ¡Dile que debe volver a tirarlo o registrarlo!

Bonificación: enséñele cómo serializar datos json para que pueda leer / escribir fácilmente en un archivo. Un db es excesivo y es demasiado para aprender y no desea que escriba formatos de archivo personalizados, aunque puedo dejar pasar una entrada por tipo de línea para guardar / cargar un conjunto de cadenas como aceptable.


fuente
1

Sé que mucha gente ha estado hablando de idiomas y libros para esos idiomas. Yo difiero

La programación se trata de aprender a pensar analíticamente. En primer lugar, la persona debe ser capaz de pensar y presentar el problema en un papel para determinar cuál es el problema. Tienes que guiarlos para que obtengan la técnica de pensamiento correcta.

Luego vienen los fundamentos del lenguaje. Inícielos en el idioma de su elección. Dale un problema al programa.

Después de que termine este primer corte, haga que hagan los fundamentos de CS y los patrones de diseño.

Ahora pídales que reprogramen el problema anterior con estos nuevos conceptos.

Nómada
fuente
1

Comience con lo básico: variables, bucles, bucles while, bucles, matrices, enséñele conceptos básicos, imprimir en pantalla, hacer algunos cálculos matemáticos simples. Pase a los métodos y la OOP básica, cosas como esta es cómo crear una clase, muéstrele el por qué, no solo el cómo.

El idioma no importa, pero elige algo que conozcas y que sea muy abstracto (java, python, etc.) de esa manera no necesita preocuparse por cosas como la administración de memoria, punteros, etc. Enseña los conceptos básicos de recursividad, torres de hanio o búsqueda recursiva de directorios.

Aprender a programar es un buen recurso gratuito sobre programación de Ruby. Hazlo divertido, fácil y entretenido.

Snow_Mac
fuente
1

Dele algunos desafíos y pídale que aprenda a encontrar recursos para resolver el problema por sí mismo.

Si puede enseñarle cómo encontrar respuestas y ser autosuficiente, naturalmente aprenderá a programar bien. El pensamiento crítico y el ingenio son dos habilidades clave para un programador.

Al final del día, la pasión / interés definitivamente será un factor clave en el éxito que tendrán en aprenderlo rápidamente. Si no tiene o atrapa "el error", podría ser un proceso lento y / o doloroso. Si atrapa el error, se levantará tarde codificando, fuera de las horas de trabajo, pasando el mejor momento de su vida.

Andy Fleming
fuente