Supongo que la pregunta compara el autoestudio con la forma en que se enseña la programación en las universidades, en relación con una carrera profesional posterior en el desarrollo de software.
Tenga en cuenta que los lenguajes de programación son solo idiomas: si puede leer francés o hablar francés con fluidez, eso no lo califica para criticar la literatura o cinematografía francesa, y probablemente no podrá producir obras maestras de manera regular 🙂 Para Con este fin, los cursos avanzados de informática se centran en lo que puede y no puede hacer con el software en lugar de en los detalles de programación. Permítanme enfatizar la parte de “no puedo”: un aficionado puede golpearse la cabeza contra la pared donde un graduado universitario puede darse cuenta de que se enfrenta a un problema insoluble (o muy difícil). Para algunos problemas difíciles, hay formas estándar de abordarlos en la práctica que estarían más allá de la imaginación de la mayoría de los aficionados.
La analogía del idioma va más allá: si aprende francés solo, nadie corregirá su pronunciación y no tendrá mucha práctica conversacional. La programación profesional también es una actividad social: debe ser articulado sobre sus planes y su trabajo continuo, y debe comprender lo que están haciendo sus colegas.
- ¿Puedo desafiar al entrevistador durante la entrevista técnica?
- ¿Cómo y desde dónde debo prepararme para las preguntas de la entrevista como 'diseñar un software para ...'?
- Cómo prepararse para las entrevistas con desarrolladores Java (Spring, Hibernate)
- Los entrevistadores me dicen que mis habilidades de programación en C ++ son buenas, pero no lo suficientemente buenas. ¿Qué métricas / herramientas usan los entrevistadores al evaluar el desempeño?
- ¿Cuáles son las razones por las que solo 1 de 7 candidatos recibe una oferta después de una entrevista en el sitio de Google?
No todas las universidades enseñan la programación de la misma manera, pero las mejores escuelas definitivamente enfatizan grandes ideas, conceptos básicos y formas especiales de pensar desde el principio. Sin esto, un programador aficionado probablemente producirá sistemas frágiles que no serán claros para otros, y puede ser difícil de depurar, revisar y ampliar. Por otro lado, algunas de estas “grandes ideas” más tarde deben ser enseñadas en cursos posteriores y más prácticos porque los estudiantes con comprensión superficial tienden a abusar de ellos (la recursión es un buen ejemplo).
La amplitud de la cobertura y la cantidad de práctica de programación que obtienen los estudiantes varía dramáticamente (incluso en Michigan, varió entre semestres hasta hace poco). Tenga en cuenta que es difícil formular buenas preguntas de examen y buenas asignaciones de proyectos: se necesita un profesor experimentado y un equipo de TA brillantes para obtener todos los detalles correctos, llegar a objetivos realistas pero desafiantes, verificar cuidadosamente y evaluar soluciones, proporcionar apoyo razonable en horario de oficina y en línea, y proporcionar comentarios articulados a los estudiantes. Por otro lado, es útil hablar con otros estudiantes que están trabajando en la misma tarea para tener una idea de qué aspectos son difíciles y qué aspectos son fáciles. Si está atrapado en algo que otros estudiantes encuentran fácil, puede hablar con el profesor o TA. Pero en el autoestudio, es posible que no te des cuenta de que estás atrapado por un tiempo.
En cualquier caso, su redacción parece sugerir que las universidades producen programadores profesionales. Esto está lejos de la verdad por varias razones. Las más obvias son que la cantidad de práctica y experiencia en proyectos universitarios es demasiado pequeña para convertirse en profesional. Los estudiantes que trabajan en grupos demasiado temprano corren el riesgo de no aprender a ser desarrolladores individuales fuertes, y los estudiantes que trabajan individualmente no entienden cómo ser eficientes en un equipo.
Otra diferencia muy importante entre los cursos universitarios (y el autoestudio) versus la programación profesional es que “en el mundo real”, a menudo uno tiene que lidiar con bases de código que son 2-3 órdenes de magnitud más grandes de lo que una persona puede desarrollar en su vida. El código escrito por diferentes personas debe interactuar, debe mantenerse, revisarse y ampliarse. Esto requiere habilidades muy diferentes que desarrollar rápidamente un proyecto desde cero.
La programación industrial a menudo tiene que lidiar con requisitos vagos, acomodar cambios en las especificaciones y cumplir con varias restricciones inusuales.