No tanto como piensas.
Ciertamente, debe estar un poco más allá de “Hello World” … pero probablemente será suficiente una comprensión firme de las construcciones básicas del lenguaje (bucle, ramificación, E / S de archivo, E / S de pantalla, etc.).
Las lecciones de programación más útiles que aprendí en un salón de clases llegaron cuando estaba en la universidad … y ahora tengo más de 50 años.
- ¿Qué es un árbol RB y cómo se implementa?
- ¿Cuál es la complejidad del tiempo para una solución iterativa de la serie Fibonacci?
- ¿Cómo explicaría el Control de concurrencia de versiones múltiples en términos simples?
- ¿Hay alguna lista de problemas de árbol AVL similares a los problemas de árbol binario de Stanford?
- ¿Por qué utilizan la factorización principal para el cifrado en lugar de un algoritmo que hemos demostrado que es difícil de resolver?
En esa clase, mi profesor nos enseñó a completar proyectos de programación mediante un proceso que él llamó muy simplemente, “refinamiento gradual”.
Empiezas expresando, en inglés simple, lo que tu programa necesita para lograr. Y luego divide esa idea (posiblemente bastante compleja) en los componentes más pequeños que se requieren para hacerlo. Y luego haces lo mismo con cada componente más pequeño sucesivo … hasta que finalmente llegas al pseudocódigo basado en inglés, pasos lo suficientemente triviales como para que incluso una máquina pueda entenderlos. Solo cuando su pseudocódigo haya sido aceptado como “lo suficientemente simple”, se le dirá en qué idioma debe codificarse su proyecto … y la elección no fue la misma para todos.
Esta es la esencia de la programación. Está tomando una idea compleja y convirtiéndola en un algoritmo. Ver un par de proyectos de tamaño decente hasta el final de esta manera lo capacitará para dividir instintivamente ideas complejas en trozos más pequeños. Y esa es una habilidad que te servirá bien como desarrollador de software para siempre.
De hecho, a menudo es liberador decidir la mejor manera de hacer algo sin verse limitado por lo que sabe de la sintaxis de un idioma en particular que interrumpe constantemente su proceso de pensamiento. También es mejor, cuando sea posible, dejar que el algoritmo elija el lenguaje de codificación, ya que algunos proyectos resultarán mucho más fáciles de lograr usando uno sobre el otro.
Pero hay un poco de un síndrome de “pollo contra huevo” pasando aquí. No puede saber que un idioma se adapta mejor a un algoritmo particular que otro, a menos que sepa algo sobre codificación en cada idioma. Por lo tanto, se requiere cierto nivel de familiaridad, y a medida que avanza en su conocimiento, puede pensar en cada idioma con el que adquiere familiaridad superficial como otra herramienta en su cinturón.
Y al igual que un carpintero o artesano, estará adquiriendo nuevas herramientas todo el tiempo. Míralo de esta manera: si la única herramienta en tu cinturón es un martillo, tendrás la tendencia a tratar cada problema como si fuera un clavo. Puede ser divertido, y eventualmente podrás hacer cosas con ese martillo con el que nadie más soñaría, y mucho menos intentarlo. ¡Pero nunca serás tan eficiente, digamos, conduciendo un tornillo, como el tipo que tiene un destornillador!
Además, fuera del aula y en el mundo real, a menudo se le dirá en qué idioma va a codificar antes de que le presenten alguno de los algoritmos necesarios. Así es como funciona. Pero si tiene un manejo sólido de la programación (es decir, convertir ideas complejas en algoritmos), esto nunca lo pondrá en fase. A medida que avanza, puede aprender, y con frecuencia lo hará, los entresijos de la codificación en el idioma requerido. Los idiomas (y particularmente los utilizados para la programación web) cambian y evolucionan todo el tiempo. Es simplemente la naturaleza de la bestia.