¿Es mejor para alguien que está aprendiendo programación enfocarse en algoritmos o en aspectos más prácticos de la ingeniería de software?

Física (y EE) de fondo. Depende en cierta medida del idioma, ya que algunos idiomas son mejores que otros para ciertos problemas / usos. Pero, en general, concéntrese en los conceptos reales de programación: estructuras de control, lógica booleana, tipos de variables, etc. Comience con poco y evite saltar sobre cualquier cosa. También con respecto a cosas como el sistema operativo y las redes, es posible que ni siquiera necesite que logre sus objetivos inmediatos. Se beneficiaría absolutamente de ello, pero a menos que sea bastante profundo, la mayoría de los problemas no surgirán hasta entonces. Desea conocer los conceptos específicos del sistema operativo, especialmente cuando trabaja con lenguajes compilados, y especialmente si está escribiendo código en diferentes sistemas, ya que todos se comportan de manera diferente y tienen sus propias reglas. Desearía saber acerca de los conceptos de redes si está trabajando específicamente con cliente-servidor, computación distribuida, cosas por el estilo. ¡Restringe tu problema!

No se concentre en los algoritmos porque eso es algo que su mente tendrá que resolver usando el software (herramienta). Una vez que establezca buenas prácticas, puede descubrir fácilmente cómo usar el software para lograr sus objetivos. Al igual que necesita usar las matemáticas para que la física trabaje para usted, necesita comprender la sintaxis para que el lenguaje funcione para usted con el algoritmo.

Surgirán problemas más complejos a medida que continúe, por lo que es importante usar los fundamentos bien establecidos para el lenguaje que está utilizando porque esto le dará una red de seguridad de algunos de los problemas “detrás de escena” que uno puede encontrar. Algo así como cuántas personas pueden conducir un automóvil, pero menos personas saben cómo funciona. Pueden saber que el automóvil usa gasolina, pero probablemente no sabrán sobre el ciclo de Carnot: D.

Encuentre un buen tutorial, uno que sea conciso pero que no omita nada. Es fácil pasar mucho tiempo en cosas que enloquecen cuando comienzas a desarrollarte, especialmente con lenguajes compilados. Por lo tanto, tenga una buena guía y asegúrese de leer el archivo README, así como las notas de la versión de lo que esté utilizando a fondo para evitar no tener las respuestas para una compilación específica.

Además, el depurador es tu mejor amigo. Aprendelo bien. No necesariamente dedique demasiado tiempo a los detalles, pero al menos aprenda cómo establecer puntos de interrupción, examinar variables, etc. Cosas como mirar la pila pueden venir más tarde.

¿Cuál es tu objetivo final?

¿Es por diversión, como un pasatiempo?

¿O estás buscando usar estas habilidades para un trabajo? Si es para un trabajo, concéntrese en lo que es práctico. Aprende a construir cosas que las personas puedan usar. Ya sea resolviendo problemas en su lugar de trabajo actual o resolviendo problemas que tiene personalmente.

He escrito un poco más sobre esto antes: la respuesta del usuario de Quora a ¿Cómo puedo convertirme en un muy buen programador con una licenciatura en Ciencias de la Computación y un año de experiencia trabajando con Python, algunos Java y Scala?