¿Cuáles son algunos marcos de tiempo realistas para dominar diversas habilidades de programación, como el dominio de Python para la ciencia de datos, git, etc.?

“Dominio” es una palabra muy fuerte. He estado programando durante aproximadamente el 80% de mi vida y he estado usando Python para cosas de ciencia de datos durante aproximadamente 10 años. Dudo si he logrado el “dominio”.

A menudo, estas preguntas sobre “¿cuánto tiempo se tarda en aprender X?” en realidad se trata de “¿cuánto tiempo tendré que estudiar X antes de poder conseguir un trabajo con X?” o “antes de que pueda hacer cosas útiles con X?”

En mi caso, comencé a usar Python para hacer cosas útiles de ciencia de datos dentro de un día o dos después de intentar primero escribir código en él. En ese momento, ya había estado usando Perl y MATLAB / Octave para tareas similares durante varios años, por lo que fue una transición relativamente fácil. (Me alejé de Python por un tiempo, pero “¿Por qué Python?” De Eric Raymond finalmente me convenció).

Cuando comencé a usar Git como mi sistema principal de control de versiones, lo estaba usando para hacer cosas útiles en pocos minutos . Sus ventajas obvias sobre VCS centralizados anteriores, como Subversion, eran prácticamente una volcada y estaba en marcha, aunque sus comandos con nombres extraños y sus abstracciones ultrapotentes pero desconocidas (“el índice”) hicieron que la curva de aprendizaje fuera empinada. Años atrás, he escrito un sistema de misión crítica que introspecta las bases de datos y organiza automáticamente sus contenidos y rastrea los cambios en un repositorio Git usando libgit2 .

Por lo tanto, la cantidad de tiempo que le lleva aprender un nuevo idioma o herramienta depende claramente de cuánto conocimiento de fondo tenga con herramientas similares.

Al igual que con cualquier habilidad, lograr un nivel de capacidad de programación superior a la mera “adecuación” también depende crucialmente de su afán de participar en una práctica deliberada y de expandir y refinar el conjunto de técnicas que utiliza, para ampliar continuamente los límites de sus propias habilidades.

Por último, también estoy de acuerdo con la respuesta de Dima Korolev de que también es importante algún tipo de aptitud innata: conozco a personas que han estado codificando durante tanto tiempo como yo pero que no son tan buenos en eso. Por el contrario, creo que soy un buen programador y bueno pensando en cómo resolver problemas con las computadoras, pero sé que hay otros que son mucho mejores que yo.

No tendrá tiempo suficiente para dominar todos los lenguajes de programación o herramientas que existen. Puede obtener un buen nivel de familiaridad con una herramienta y comenzar a usarla para extraer el código en un par de meses. Sin embargo, para comprender por qué está haciendo las cosas de una manera determinada en lugar de otra y por qué usaría una herramienta en lugar de otra, le llevaría años y décadas de práctica de programación, lectura de literatura de programación e interacción con otros programadores para dominar su dominio (análisis de datos o programación de sistemas centrales o desarrollo web).

El problema con la programación es que escribir código y usar varias herramientas para hacerlo de manera más eficiente es solo un aspecto muy superficial de la programación. Más que nada, la programación es construir una teoría, sobre cómo funcionan las cosas y verificar su integridad al codificar esta teoría en un código, mientras colaboras con otras personas. Al igual que en los juegos de mesa, como el ajedrez o ir, aprender y recordar cómo se mueven las piezas es muy diferente de ser competente en el juego. Incluso en menor medida en TODOS los juegos de mesa. Los diferentes aspectos de la programación son como el ajedrez o el go: puedes ser bueno en uno de ellos si practicas muy duro durante años, incluso si no hay un marco de tiempo para cuando vas a ser bueno. Pero el momento de volverse bueno en el juego es muy diferente al momento de volverse bueno en el ajedrez. O el blackjack. O cartas del Tarot.

Las curvas de aprendizaje tienen forma de log (x). Para algunas personas, la porción plana es bastante alta, y los simples mortales nunca podrán subir a ese nivel, independientemente de cuánto esfuerzo pongan en ella.

Puede pasar de 0 a quizás el percentil 80 o 90 en un par de años si tiene una aptitud. Pasan muchos años antes de llegar al punto en el que ya no tiene dudas sobre dónde comenzar al construir algún sistema de software.

Cuando comience a resolver problemas que nadie ha hecho antes, será un buen científico de la computación. Las habilidades matemáticas comienzan a ser importantes aquí si desea hacer contribuciones reales.

Obtener un dominio razonable de los lenguajes y las herramientas no es tan difícil: aproximadamente un año de código de producción en la vida real lo hará bastante competente en una tecnología en particular.

Los problemas de práctica son muy artificiales: es como un combate de boxeo en lugar de una pelea callejera.

Como Dima Korolev mencionó, la programación no es para todos: debe tener un talento natural, comenzar temprano, trabajar duro y tener la oportunidad de trabajar en cosas importantes, si desea hacer contribuciones reales al campo.
Es algo para toda la vida, no muy diferente de ser un atleta campeón.

Cuanto más vivo y más lo pienso, más estoy convencido de que la programación no es para todos.

Al igual que nunca sería capaz de pintar, bailar o comprender la microbiología y la física cuántica a un nivel que me permitiera hacer una diferencia, creo que la mayoría de las personas en el mundo nunca podrían dominar el combo de programación y ciencia de datos. en la medida en que importa hoy.

Como hobby, sí. Como una forma de ganar dinero, sí. Pero como solo hay un Banksy, solo hay un Carmack.

Para el registro, internalizar lo anterior es simplemente aceptar una definición común de singularidad tecnológica.

Por lo tanto, para una persona mediana en el mundo, la respuesta es infinito.

El dominio absoluto de cualquiera o todas las habilidades de programación es difícil de alcanzar, ya que, por definición, es un objetivo que se mueve sin cesar.

Los lenguajes de programación y las tecnologías mejoran continuamente con el tiempo o de lo contrario mueren la muerte rápida de la obsolescencia tecnológica.

Cualquier dominio de una tecnología moribunda no es relevante.

En términos de lograr habilidades rudimentarias, esto abarca un rango muy amplio de tiempo dependiendo de

  • experiencia de programación pasada
  • aptitud personal intrínseca innata para la programación, solo una pequeña parte de las personas puede convertirse en ingenieros de software altamente competentes, al igual que la mayoría de las personas no pueden convertirse en jugadores profesionales de baloncesto, no es realista esperar que la mayoría de las personas puedan convertirse en programadores
  • la cantidad de esfuerzo eficiente enfocado gastado
  • el ambiente de aprendizaje, mientras que algunas personas pueden ser autodidactas, la mayoría no puede hacerlo, por lo que el maestro se convierte en el factor limitante
  • prioridades y deseos personales, ¿qué tan personalmente importante es esta habilidad para la persona en cuestión?

La métrica de éxito es la finalización autodirigida de un módulo de software funcional sustancial. Hasta que esto se haga, esencialmente no tienes nada.

El marco de tiempo podría ser tan corto como unos pocos meses para adquirir habilidades rudimentarias lo suficientemente suficientes como para trabajar en un trabajo de entrada de bajo nivel con grandes cantidades de supervisión por parte de un empleador flexible y comprensivo muy cooperativo. Por mi parte, tuve mucha suerte, ya que este era un caso personal, ya que estaba trabajando en el código de nivel de producción después de 6 semanas después de mi contratación inicial. Esto es típicamente altamente improbable,

El peor de los casos es, por supuesto, nunca.

Como con la mayoría de las cosas en la vida, esta pregunta no tiene respuesta para cada persona específica hasta que uno realmente lo intente.

Hablar es barato, los resultados al final son lo que importa.

En la construcción de un edificio, la construcción de sus cimientos lleva más tiempo y es un trato único; La construcción de su estructura exterior lleva menos tiempo (en función de la tasa de crecimiento) y es un proceso continuo.

Del mismo modo, al aprender un lenguaje natural / de programación, aprender su gramática (y dominarlo) toma más tiempo y es un trato único; aprender su vocabulario lleva menos tiempo (en función de la tasa de crecimiento) y es un proceso continuo.

Ahora, dominar un idioma depende de varios factores. Si estás perdido entre extraños en una isla remota, estarías motivado para aprender su idioma en aproximadamente un día. En circunstancias normales, aprender su idioma llevaría un año.

Por lo tanto, para acelerar su aprendizaje de un lenguaje de programación, encuentre una razón para aprenderlo. Unirse a un curso estructurado basado en el tiempo ayuda aquí.

Por lo general, dominar un lenguaje de programación puede llevar una semana más o menos. A partir de entonces, es un proceso continuo. Puede tomar un año acostumbrarse a usarlo en cualquier campo.

Apuntar + Actuar + Preguntar = Lograr (Louis Pasteur).

Es posible que desee leer una pregunta similar e interesante: la respuesta de Shehroz Khan a ¿Debo aprender el aprendizaje automático mientras aprendo Python?

En mis años de formación, tuve problemas para entender por qué necesitamos hacer programación en primer lugar. Puede ser que no tuviera una mentalidad típica de ingeniero de software. Luego, en mi último año de pregrado, comencé a trabajar en un proyecto de ML. Voila! Ahora puedo usar lenguajes de programación como herramienta para codificar y probar mis ideas. Desde entonces he usado muchos lenguajes, incluidos C, C ++, Java, MATLAB, R, python, PHP, etc., pero no soy competente en ninguno y no es necesario, porque ese no es mi interés. Si es necesario, aprendo la sintaxis del lenguaje mientras escribo el programa. Para mí, la parte más importante es implementar y probar esas ideas que son importantes para mí y mi investigación. Mi intención es resolver problemas de aprendizaje automático y no problemas de programación.

Sin embargo, en una configuración de la industria, es posible que deba saber mucho más sobre el lenguaje de programación. Al mismo tiempo, pueden estar un poco relajados acerca de su conocimiento de ML. Bueno, es posible que quieran lo mejor de ambos mundos y que existan personas, que son tan geniales.

Para responderle, nunca espero desarrollar ‘dominio’ en ningún lenguaje de programación porque es un término relativo, siempre hay alguien por ahí que conoce mejor que usted. Sin embargo, es bueno conocer un lenguaje de programación para probar e implementar rápidamente sus ideas wrt ML / DS.

Gracias por la solicitud

Mi respuesta se basa en su comentario “Esta pregunta no se trata específicamente de mí, sino de una persona abstracta. Pero digamos que esta persona abstracta asistió a la Introducción a los MOOCs y pasa tiempo libre en Codecademy”. en la sección de comentarios.

Git debería ser bastante sencillo. Usarlo semanalmente debería ponerlo en funcionamiento con las tareas básicas en una semana o menos. Trabajar con repositorios con otras personas, suponiendo que algunos conflictos menores es lo peor que probablemente encontrará.

Dominar idiomas para la ciencia de datos o cualquier otra cosa es un tema muy complejo. Puede llegar a ser bastante competente en un año si tiene problemas reales que resolver, pero solo en el dominio del conocimiento de interés.

No creo que el dominio sea posible simplemente haciendo MOOC.

Normalmente me doy un año para alcanzar un nivel de competencia en un lenguaje de programación. Eso me permite poder resolver la mayoría de los problemas de programación de manera oportuna. Eso sí, todavía habría mucho que aprender, y las soluciones no serán tan buenas como si hubiera dominado el idioma, pero al menos tengo una buena idea de las fortalezas y debilidades del idioma.