¿Qué habilidades carecen comúnmente los programadores autodidactas? ¿Qué debe estudiar un programador autodidacta para ponerse al día con sus compañeros con educación formal?

No son las habilidades en sí mismas de las que carecen los programadores autodidactas, sino un sentido de perspectiva para el campo en su conjunto . La informática es grande; una vida es demasiado corta para aprenderlo todo. Los autodidactas rara vez ven esta humilde realidad tan claramente como las carreras de CS. La mayoría de los estudiantes de CS han sido aplastados por un curso introductorio sobre algún tema que parecía accesible al principio: teoría, IA, gráficos, sistemas operativos, compiladores, bases de datos, etc. autoestima en un estanque pequeño. Incluso aquellos raros autodidactas que ven completamente que CS es más grande que ellos están en desventaja cuando superan los límites de su experiencia.

Cuando me enfrento a un nuevo problema (para mí), la información más valiosa que puedo reunir es: ¿Ya se ha resuelto este problema? Si es así, ¿por quién y cómo? Si no, ¿por qué? ¿No es interesante? ¿O tan monumentalmente difícil que su solución es el llamado de una vida? La capacidad de responder estas preguntas es un producto primario de una educación en CS, y se ha abordado en otros lugares.

Más interesante aún, si estas preguntas preliminares sugieren que un problema no está resuelto pero tiene solución y vale la pena resolverlo, ahora tengo un metaproblema social : ¿quién puede ayudarme? ¿Necesito comunicarme con escritores de compiladores, piratas informáticos del kernel, especialistas en almacenamiento, ingenieros de hardware, gente de aprendizaje automático, qué? La educación en ciencias de la computación proporciona aquí una clave importante y a menudo pasada por alto para el éxito: una red social que se extiende fuera de su círculo de experiencia . Tengo amigos de la escuela que trabajan en visión artificial, aprendizaje automático, bases de datos y otras áreas en las que probablemente seré incompetente hasta que muera. Afortunadamente, puedo llamarlos y decirles: “¿Qué les parece el problema X ?” y espere obtener una lectura honesta, aunque informal, sin realizar una búsqueda de talento de ingeniería.

Esto fue realmente algo con lo que realmente tuve que lidiar. Me enseñé C ++ a los 14 años y comencé a codificar ejemplos de juguetes y, finalmente, pasé a las modificaciones de Half-Life 2 usando el motor de juegos de origen de Valve. Esto fue genial porque aprendí a pensar en términos de problemas de programación y también me permitió ver y aprender de una gran cantidad de excelente código C ++ de las personas con talento en Valve. Así que entré a la universidad siendo un programador decente, y por supuesto las primeras clases me estaban pisando viejos cimientos, así que realmente no puse ningún trabajo real en ellas. La única excepción es una clase de estructuras de datos, que sentí que era más fácil para mí que mis otros compañeros de clase, pero aún así era enormemente útil ya que había trabajado con estas cosas pero no sabía la teoría detrás de ellas.

Así que todo estaba bien, aprendí algunas cosas pero no había grandes lagunas en mi conocimiento ni nada. Y luego, en mi segundo año, tomé una clase de Arquitectura y Diseño de Software y el hombre me sorprendió. Para comenzar la clase, el profesor nos hizo implementar un simple juego de cartas llamado Tehi. Lo implementé y funcionó, y no fue demasiado difícil. Sinceramente, pensé que lo había clavado. Luego, el profesor se reuniría con cada uno de nosotros individualmente para darnos su opinión sobre cómo lo hicimos sin aprender nada sobre el diseño de software. Así que entro en su oficina sintiéndome bien con mi trabajo, y una de las primeras cosas que me dijo fue “Puedo decir que te enseñaste a ti mismo a programar”. Luego procedió a destrozar mi implementación (que, en retrospectiva, era técnicamente correcta pero muy mal diseñada), y a lo largo de esa clase luché por aprender fundamentalmente cómo escribir código usando convenciones comunes y patrones de diseño, y en lugar de resolverlo todo en el mío como lo hice en el pasado. Esa clase singular (junto con el libro Clean Code de Robert C. Martin, que debería ser obligatorio leer IMO) hizo más por mi programación que todas las otras clases que tomé, combinadas.

Para resumir, si te enseñas a programar y sabes fundamentalmente cómo abordar problemas prácticos, es probable que los aspectos teóricos (algoritmos, estructuras de datos, etc.) no los conozcas, pero puedas aprender más rápido que otros. Va desde esta mentalidad de bricolaje hasta aprender cómo diseñar realmente su código a distancia antes de sumergirme en eso, realmente aprendí del programa CS que realicé. Y es realmente lo que llevó mi programación al siguiente nivel (sin mencionar que tiende a ser más práctico que muchas cosas teóricas que aprenderás en la escuela).

PD:
Y en serio, lea estos dos libros, con cada uno de los capítulos constantemente recogí una serie de cosas que cambiaron la forma en que codifico a diario.

The Robert C. Martin Clean Code Collection (Colección) (Serie Robert C. Martin) 1, Robert C. Martin – Amazon.es

More Interesting

¿Soy más o menos empleable si he trabajado con un dominio de herramientas más grande que centrarme en uno como ingeniero de software?

¿Cuáles son algunas formas posibles para que un ingeniero de software (universidad de 3 niveles) pueda viajar por todo el mundo mientras trabaja en una buena empresa de desarrollo de software?

¿Crees que, algún día, crear programas será arrastrar y soltar? ¿Esto reducirá las necesidades de los ingenieros de software, ya que todos podrán programar?

Mi 'EQ' es bastante alto y realmente no deseo tener que trabajar continuamente con personas que son tercas o arrogantes. ¿Debo evitar la profesión de ingeniería de software?

Cómo verificar si un archivo es ransomware o no

¿Qué proporción de su tiempo pasan los grandes gerentes de ingeniería de software trabajando en el equipo, en comparación con el equipo y en todo el equipo?

¿Sabes cómo revertir los cambios en SublimeText en un archivo cerrado?

¿Cómo son los primeros días de trabajo para un nuevo empleado contratado como ingeniero de software de nivel 12 en Accenture?

¿Qué debe saber un ingeniero de software de CUDA sobre el hardware subyacente?

¿Qué ventajas tendré si tengo conocimientos de dominio como la gestión de procesos de negocio como ingeniero de software?

¿Qué habilidades necesita un ingeniero de software? Mi universidad adopta un enfoque de gestión con algunas habilidades de código. ¿Está bien?

¿Puedo hacerme un tatuaje y trabajar en una empresa de software como Google?

¿De dónde viene el término "Personal" en Ingeniero de software de personal?

¿Es realmente importante trabajar como ingeniero de control de calidad de software en el futuro?

A pesar de estar en Nueva York, ¿por qué Bloomberg no paga a sus ingenieros de software como hacen las compañías de Silicon Valley?