Soy un programador autodidacta que tiene un título en informática.
Cualquier límite que alcances probablemente tendrá más que ver con las percepciones de otras personas sobre tus habilidades en ciertas materias, en lugar de lo bueno que realmente eres en ellas. Sí, serás un programador más eficiente si los conoces. Sin embargo, el beneficio real es menor de lo que podría pensar. A menos que salga del desarrollo web, el 90% de lo que escriba será pegamento.
Si su objetivo es romper el techo de cristal en su escala salarial, lo mejor que puede hacer es encontrar personas que sean mejores que usted e ir a trabajar para ellos. También te hará mucho más bien por tu calidad que solo estudiar. Lo mejor es ir a construir tus propios proyectos y hacerlos geniales. De Verdad. Simplemente elige cualquier cosa para resolver un problema específico que tengas y ve a hacer que suceda. Cada hora que pasa haciendo eso es mucho más valioso para su carrera que estudiar cualquier cosa, siempre que lo construya bien y lo haga público. La tercera mejor opción es pagar dinero por las clases, ya que las escuelas “piratas informáticos” tienen el mejor rendimiento por su dinero.
- ¿Por qué es necesaria una variable de control en un experimento?
- Como estudiante de matemáticas, ¿cuáles son las clases más importantes que podría tomar en informática?
- ¿Cuáles son los departamentos de investigación más sólidos para la teoría de la computabilidad (recursividad) en el mundo en este momento?
- ¿Qué hace que Donald Knuth sea tan especial?
- ¿Debo especializarme en informática teórica o aprendizaje automático?
Si su objetivo es convertirse en un mejor desarrollador, la buena noticia es que hay mucho que puede hacer, y la mala noticia es que hay mucho que puede hacer. Esté preparado para adquirir el hábito de aprender cosas nuevas y estar constantemente confundido por ello. Llegará al punto en que todo se junta en una gran imagen eventualmente, y se vuelve mucho más fácil aprender cosas nuevas.
Me gustan las matemáticas (no, en realidad, tenía doble especialización en matemáticas antes de decidir que no valía la pena). Ignórelo a menos que lo necesite para aprender un concepto de programación. La tasa de intersección es bastante baja, y un curso decente no lo requerirá. Logaritmos sobre los que quizás desee leer específicamente, ya que los necesitará para comprender la complejidad del tiempo. Aunque, en realidad, la complejidad del tiempo podría ser una buena forma de aprender logaritmos.
El beneficio de esos cursos de Estructuras de datos y Algoritmos es exponerle diferentes tipos de soluciones específicas y comprender cómo y por qué funcionan. Es extremadamente raro que realmente necesite elegir entre un mapa hash y otro esotérico. Poder elegir simplemente entre un conjunto, una lista vinculada, una lista de matrices y un mapa obtiene el 80% del beneficio al 5% del costo. Otro 10% está utilizando operaciones Set. El conocimiento de implementaciones específicas (es decir, su lenguaje de programación) también es mucho más valioso aquí que el conocimiento teórico, aunque los dos generalmente se superponen.
La habilidad técnica más importante que muchos programadores autodidactas corren el riesgo de perder es poder identificar la complejidad de la escala. Busque la notación grande de O. Es muy útil en general, y es una habilidad extremadamente transferible que la mayoría de la gente no tiene. Por ejemplo, el mítico hombre-mes se vuelve obvio cuando se lo ve como un problema de complejidad. Es fundamental para entender por qué la escala horizontal funciona tan bien. Ve a aprenderlo, domínalo, úsalo inconscientemente todo el tiempo y comprende cuándo puedes ignorarlo.
Hay algunas otras gemas técnicas ocultas de un título de CS, como FSM y teoría de los idiomas. También es bueno aprender el atroz estado de la ingeniería y administración de software en general, y comprender los problemas de estimación, programación y administración de estilo cascada.
También hay muchas cosas fundamentales (es decir, cómo la computadora realmente ejecuta mi programa) que podrían terminar siendo una brecha significativa en su conocimiento más adelante: punteros, asignación de memoria + recolección de basura, pila vs montón, programación asincrónica, programación del sistema operativo, caché de memoria , paginación, compiladores, traducción de idiomas, ensamblaje + código de máquina, JIT. Si no está familiarizado con ninguno de estos, es posible que desee leer sobre ellos y construir algo (si es posible. No es necesario construir su propio sistema operativo o compilador completo) para demostrar su conocimiento a usted mismo.
Las habilidades “blandas” ultra valiosas (mucho más valiosas que cualquier otra cosa que he mencionado), nunca se enseñan bien en mi experiencia, y se observan y experimentan mejor. Nunca le dicen que el cliente nunca sabe lo que realmente quiere.