¿Debería un nuevo programador enfocarse en una sola tecnología hasta que sea competente? [cerrado]

10

Ok, he estado enseñando a un amigo cómo programar por un tiempo ahora. Aprende muy rápido y hasta ahora es bastante bueno programando. Sin embargo, tiene un "problema" que trato de corregir.

Él salta y comienza a hacer programación de alto nivel sin aprender algunos de los conceptos básicos (ha creado una aplicación web completa pero aún no conoce la paginación o la administración de sesiones).

Sin embargo, este no es el problema. Sigue saltando a las nuevas tecnologías (Node.js, MongoDB, EC2, etc.). Intenté decirle que debería aprender algunos de los conceptos básicos sobre su RDMS de elección (MySQL), ya que lo usa todos los días antes de invertir un montón de tiempo en aprender los conceptos básicos de MongoDB (y probablemente pasar a algo nuevo).

¿Soy el que está equivocado aquí, o debería tratar de concentrarse en una cosa a la vez y ser realmente bueno en eso?

Brandon Wamboldt
fuente
66
Suena como una buena oportunidad para exigir que su aplicación web admita sesiones y paginación. ¿No resultaría eso en que él lo aprendiera?
Además, ¿ qué tecnología única se debe aprender?
@ ThorbjørnRavnAndersen No es una tecnología única, pero la pila LAMP es con lo que trabaja todos los días. Creo que debería aprender todo lo básico / relevante para los detalles de su trabajo sobre MySQL, Apache, PHP y JavaScript como mínimo.
Brandon Wamboldt
1
Entonces esencialmente ha respondido su propia pregunta con "no".
1
¿No está ya aprendiendo múltiples tecnologías como web, base de datos, etc. a la vez? ¿Cuáles son los límites de lo que constituye una tecnología aquí?
JB King

Respuestas:

18

Personalmente, creo que puede ser una gran idea probar diferentes tecnologías e idiomas al aprender a programar. Centrarse en una tecnología tiene el beneficio obvio de hacerte muy bueno en eso, pero el inconveniente obvio de solo conocer una sola tecnología.

Pero creo que el inconveniente más importante es que los lenguajes y los marcos generalmente vienen con una ideología. Hay muchos programadores (tal vez la mayoría de los programadores) que solo aplican una ideología en todo lo que programan. Esto es a menudo porque aprendieron un marco en un idioma realmente bien y ahora no pueden ver nada sin esas gafas.

Especialmente para alguien que recién está aprendiendo a programar, realmente no creo que sea un problema querer probar lo que hay ahí fuera, y esperar para concentrarme en algo hasta más tarde. Después de todo, será difícil escribir algo sustancial sin conocer una tecnología decentemente bien.

Kris Harper
fuente
2
+1 para el segundo párrafo. Agregaría que mirar diferentes lenguajes, marcos y API puede enseñarle mucho sobre POR QUÉ los diseñadores eligieron implementar un lenguaje / marco / API dado de la manera en que lo hicieron. Dando al alumno una comprensión más profunda de la programación y el software en su conjunto. Al menos, en mi humilde opinión
Jamie Taylor el
+1 Hay situaciones en las que aprenderá a enfocarse, como cuando tiene un trabajo de programación "real". Pero, ¿cómo se consigue un trabajo si solo estuvo expuesto a un marco? Aprenda a escribir algo en más de un marco / biblioteca para que pueda rellenar su CV y ​​demostrar que no está predispuesto a una tecnología en particular. ;-) Puede aprender cosas como paginación y RMDB más adelante una vez que haya obtenido el contexto real para hacerlo.
Spoike
@Spoike Él tiene un trabajo de programación "real", de ahí la razón por la que estoy tratando de que se concentre en la tecnología que usa todos los días para ese trabajo
Brandon Wamboldt
1
@RougeCoder: entréguele las tareas apropiadas (busque en esta lista gigantesca, filtre elementos, dibuje un diagrama con muestras agrupadas, etc.) para que pueda aprender a hacer los conceptos que desea que conozca. Si no hay tales tareas, entonces no hay contexto para que él mantenga ese conocimiento.
Spoike
1
Solía ​​pensar que era BS, o al menos una exageración, cuando la gente decía cosas como "aprender programación funcional te hace pensar de manera diferente". Resulta que estaban reduciendo el efecto que tiene en su código. Mi código ya es completamente diferente, y todavía no soy competente con mi lenguaje funcional de elección ni estoy tratando de cambiar la forma en que escribo el código. Realmente es una revelación.
Steven Evers
5

Hay buenos razonamientos en ambos lados de este tema. Saber " suficiente " sobre muchas tecnologías diferentes es ciertamente valioso. ¿Saber " un poco " sobre muchas tecnologías diferentes? No tanto.

El conocimiento profundo de tecnologías particulares ciertamente puede ser valioso: SI hay una demanda continua de ellas. ¿Saber " todo lo que hay que saber " sobre una tecnología en particular? ... muy probablemente exagerado.

Entonces, todo está en la balanza. Si termina creando aplicaciones maravillosas con nosql, ¿por qué tendría que saber la diferencia entre el motor InnoDB y el motor MyISAM?

pbr
fuente
Bueno, la diferencia entre InnoDB y MyISAM es básicamente transacciones. Si no comprende las transacciones, ¿qué posibilidades tiene de trabajar correctamente con conceptos como "consistencia eventual"?
Michael Borgwardt
¿Perdón? Nadie dijo que no entendía las transacciones, y lo que escribí no implicaba eso en absoluto.
pbr
3

Estoy de acuerdo en parte. Necesita conocer los principios subyacentes, pero no necesita simplemente sentarse en una cosa y ser realmente bueno en eso. Nadie lo hace.

Sobre sentarse con una cosa y volverse realmente bueno

Actualmente estoy trabajando con C # y Microsoft XNA para hacer un juego. Estoy aprendiendo mucho sobre XNA a medida que avanzo, y aunque ya soy bastante competente con C #, mi conocimiento se está expandiendo poco a poco (hoy aprendí sobre restricciones en los parámetros de tipo ).

Sin embargo, no es necesario que sea 'realmente bueno' en XNA o C #. Si tuviera que terminar mi proyecto ahora y seguir adelante y nunca volver a usar ninguno de esos, estaría completamente satisfecho y mi aprendizaje continuaría en otro lugar.

Sin embargo, los principios son importantes

Al menos entiendo los principios subyacentes. Cuando creo cosas en C # y XNA, entiendo lo que estoy haciendo, y si no lo hago, me entero de ello.

Si escribiera paginación, entendería cómo funciona la paginación. Si su amigo creó algo de paginación y no tiene idea de cómo funcionó, eso es un problema. Si no creó la paginación, no hay razón para que necesite saberlo.

El problema aquí es: ¿sabe él lo que el @ $ #! él está haciendo, o es un programador que no tiene idea de cómo programar?

doppelgreener
fuente
Subes buenos puntos. El problema es que con algunas cosas él sabe lo que está haciendo, pero con otras cosas que no (creo que simplemente no quiere aprenderlo, así que lo sigue copiando de otros proyectos). Por ejemplo, ha escrito paginación, lo he revisado pieza por pieza, pero todavía no lo entiende. Sé que podría entenderlo, porque es un concepto súper simple y ha hecho cosas mucho más complejas.
Brandon Wamboldt
Sí, y eso es un problema. Si está escribiendo código, no entiende que está a medio camino de ser un programador de copiar y pegar, y ser un programador que no tiene idea de lo que está haciendo.
doppelgreener
3

Supongo que está intentando otros idiomas porque tiene algo que quiere construir. Siempre puede volver a un lenguaje o marco y aprender más.

Hay una línea muy fina entre aprender la teoría / construir una base y tratar de seguir motivado.

Al menos no está atrapado en un solo idioma. A veces tomas lo bueno con lo malo.

JeffO
fuente
3

Encuentro su actitud como un activo más que como un pasivo. Su capacidad para investigar es superior a la media. Su curva de aprendizaje también es superficial. ¿Por qué no explotar estos rasgos si quieres que aprenda algo?

Su mente inquisitiva siempre está en movimiento, ¿por qué no proporcionarle dirección? Comience diciéndole por qué la paginación es importante y esencial. Deje que eche un vistazo a sitios web con paginación y sitios web sin esos.

¿Qué tal dar una crítica constructiva a lo que está haciendo? "Wow, has hecho algo grandioso, pero no sería mejor si lo hicieras de esta manera con énfasis en la optimización y las mejores prácticas".

Creo que hacer una comparación entre una buena práctica y una mala práctica realmente puede estimular su mente.

No lo restrinjas, eventualmente encontrará algo que le gustaría y lo resolverá por algún tiempo. Si yo fuera usted, le proporcionaría mucho material de aprendizaje sobre cosas que le apasionan.

Creo que él está haciendo el enfoque de arriba hacia abajo, mientras que tú, por otro lado, quieres que haga un enfoque de abajo hacia arriba

Dorward Villaruz
fuente
1

¿Porque es malo?

Por el contrario, creo que es muy bueno! Muestra curiosidad y muchas ganas de aprender. ¡Además, quiere encontrar la herramienta adecuada para el trabajo correcto! Mejor que quedarse con una tecnología inadecuada de primera elección. ;)

En realidad, lo hago de la misma manera, como programador experimentado. Y lo recomiendo Cada vez que tengo un nuevo proyecto, mi comportamiento es el siguiente:

  1. explorar (las tecnologías potenciales que pueden ser útiles)
  2. experimento (con los que parecen prometedores)
  3. elige tus técnicos (o experimenta un poco más hasta que lo sepas)
  4. adherirse a él (desarrolle su aplicación y sáquela)

Creo que tiene mucho sentido.

dagnelies
fuente
1

Personalmente, si alguien tuviera que enfocarse solo en una tecnología, diría que debería ser C # / Java, junto con SQL.

A partir de esto, creo, puedes adaptarte a cualquier otra tecnología.

Pero apegarse a una tecnología podría ser limitante si un hombre quiere ingresar al entorno corporativo.

Idealmente, una plataforma orientada a objetos, una plataforma móvil, una plataforma web y luego muy buen conocimiento de SQL (o cualquier otro entorno db).

¡Y lo básico primero, de lo contrario se quedará atrapado más tarde!

Pierre Pretorius
fuente
0

No está mal si es un principiante en programación.

Verá cómo funcionan algunas cosas. Pero si no entiende lo que está haciendo, es mejor no hacerlo en absoluto.

Tuve ese problema conmigo mismo, quiero saberlo todo Java, C, C ++, C #, Phyton, ASP.NET ... etc., pero me di cuenta de que no puedo saberlo todo, así que me concentré en un par de cosas y es mucho mejor.

Entonces, ¿qué debe hacer (aconsejarle):

  1. Piensa qué cosas quieres hacer
  2. Explore todas las opciones
  3. Encuentra lo que te queda
  4. Aprenderlo
  5. Nunca dejes de aprender

No estaría de acuerdo con @arnaud si siempre exploras y aprendes cosas nuevas cuando tienes un nuevo proyecto por delante (bueno, no por completo). Se necesita demasiado tiempo para explorar y aprender cosas nuevas una y otra vez y algunos proyectos tienen un límite de tiempo. Pero por otro lado, si necesita aprender algunas cosas nuevas y simples, está bien: D.

Eón
fuente
0

Estoy de acuerdo con usted, a veces es fácil obtener un conocimiento superficial de un marco o tecnología o lenguaje en particular, pero para obtener una comprensión real, es mejor involucrarse en un desarrollo del mundo real hasta su finalización y mantenerlo: convertirse en alguien que otros Ven a pedir consejo. Es preferible convertirse en un gato de todos los oficios, maestro de uno en lugar de solo un gato de todos los oficios, maestro de ninguno . Habiendo dicho eso, no lo desanimaría de aprender cosas nuevas porque obviamente tiene un buen nivel de entusiasmo.

dodgy_coder
fuente