¿Diferencias entre la programación en la escuela y la programación en la industria? [cerrado]

49

Muchos estudiantes cuando se gradúan y obtienen su primer trabajo, sienten que realmente no saben cómo programar aunque hayan sido buenos programadores en la universidad.

¿Cuáles son algunas de las diferencias entre la programación en un entorno académico y la programación en el "mundo real"?

    
pregunta rdasxy 14.11.2011 - 09:34

14 respuestas

70

En un programa tradicional de informática de pregrado, aprendes la programación solo . Pero el mundo real no quiere que las personas que son programadores solo . El mundo real quiere verdaderos ingenieros de software. Sé que muchas descripciones de puestos no parecen expresar esta distinción, lo que confunde el asunto. En el mundo real necesitas poder:

  • Reúna y analice los requisitos cuando no se los entreguen directamente
  • Diseñe y analice la arquitectura con posibilidades casi infinitas
  • Cree planes de prueba y actúe sobre ellos para evaluar y mejorar la calidad de un sistema
  • Trabaje en colaboración en un equipo de personas con diferentes antecedentes y niveles de experiencia
  • Calcule y planifique el trabajo incluso si no sabe exactamente qué construir
  • Comuníquese de manera efectiva con las partes interesadas que tienen necesidades diferentes que no necesariamente se alinean
  • Negocie el calendario, el presupuesto, la calidad y las características sin decepcionar a las partes interesadas

Ah, sí, y también tienes que poder escribir código, aunque eso toma, en promedio, solo el 40 - 60% del tiempo de un ingeniero de software.

Entonces, no es que los estudiantes recién graduados en ciencias de la computación no saben cómo programar (muchos son, de hecho, muy buenos programadores). Es que muchos de ellos no saben hacer otra cosa.

    
respondido por el Michael 29.11.2013 - 17:59
36

En la universidad ...

Tu profesor te da:

  • Un problema bien definido, aislado, cuya solución se puede proporcionar dentro de un período de tiempo corto y bien definido (y se descartará después)
  • Un conjunto de herramientas bien definido que le presentaron antes de la asignación
  • Una medida bien definida de la calidad de su solución, con la que puede determinar fácilmente si su solución es lo suficientemente buena o no

En el "mundo real" ...

  • El problema es borroso, complejo e integrado en el contexto. Es un conjunto de requisitos contradictorios que cambian con el tiempo y su solución debe ser lo suficientemente flexible y robusta para que pueda reaccionar a esos cambios en un tiempo aceptable.
  • Las herramientas deben ser elegidas por usted. Tal vez ya haya algo utilizable en el código base de 10 años de su equipo, tal vez haya algún proyecto de código abierto, o tal vez una biblioteca comercial o tal vez tenga que escribirlo por su cuenta.
  • Para determinar si la iteración actual de su software es una mejora (porque casi nunca está hecho con un proyecto de software), necesita hacer pruebas de regresión y pruebas de usabilidad, la última de lo que generalmente significa que los requisitos borrosos, complejos, contradictorios y integrados en el contexto cambian una vez más.

Conclusión

La programación en la escuela y la programación en el mundo real son tan intrínsecamente diferentes hasta el punto en que en realidad hay muy poca superposición. CS te preparará para el desarrollo de software del "mundo real", ya que el entrenamiento en atletismo preparará un ejército para la batalla.

    
respondido por el back2dos 29.11.2013 - 18:09
20

Se enfrentan a un aspecto diferente del problema:

La academia se centra principalmente en la "ciencia de la programación", por lo que estudia la manera de hacer eficiente un algoritmo particular o desarrolla lenguajes adaptados para hacer que ciertos paradigmas sean más expresivos. La industria se centra principalmente en producir cosas que tienen que ser vendidas. Tiene que confiar en "herramientas" que no solo son los lenguajes y los algoritmos, sino también las bibliotecas, los marcos, etc.

Esta diferencia en "enfoque" es lo que hace que un maestro académico en C prácticamente no pueda escribir una aplicación de Windows (¡ya que las API de Windows no están en el estándar C99!), por lo que se siente como "no se puede programar". Pero, de hecho, tiene todas las capacidades para aprender por sí mismo lo que se está perdiendo. Algo que, sin estudios académicos adecuados (no necesariamente realizado en la Academia), es bastante difícil de encontrar.

    
respondido por el Emilio Garavaglia 13.11.2011 - 18:08
10

Buenas respuestas. Permítanme agregar, la programación académica tiende a ser casi como un juguete en escala. Esto es bueno para la enseñanza. Como profesor, estás tratando de transmitir ideas de manera más eficiente. La desventaja es que la programación realista es muy diferente cualitativamente, es difícil cerrar la brecha.

Un área de diferencia es el análisis de rendimiento. He escrito muchas publicaciones tratando de señalar esto. El análisis del rendimiento es solo superficialmente sobre algoritmos y mediciones. Para hacerlo de manera realmente efectiva, debe abordarlo como un proceso de depuración.

Otra área de diferencia es la mantenibilidad. Esto abarca todo, desde el estilo hasta el diseño del lenguaje específico del dominio. No puedes hacerlo de manera efectiva a menos que realmente sepas lo que estás tratando de minimizar.

Estas cosas no se enseñan, y hacen una enorme diferencia en la productividad.

    
respondido por el Mike Dunlavey 13.11.2011 - 18:40
7

En el mundo académico, la mayoría de las personas estudia informática o cursos relacionados. Dijkstra observó una vez que "la informática no se trata más de computadoras que astronomía que de telescopios". Una persona que estudia informática es, ante todo, aprender a convertirse en científico y no en programador. Como programador, seguirá siendo un aficionado y, por lo tanto, la transición a un programador profesional es difícil.

    
respondido por el thiton 13.11.2011 - 13:49
7

Actualización: Como si alguien estuviera leyendo mi mente: Expectativas de graduación versus realidad . ..

Mi toma, otros dos factores:

Tamaño del problema : en el ámbito académico, principalmente tuve que desarrollar software "desde cero", lo que significaba que la mayor parte del tiempo, el programa más grande que había encontrado era el más grande que escribí. Esto elimina el énfasis en la capacidad necesaria para manejar y enfrentar la complejidad que surge de diferentes piezas de software que interactúan entre sí. Si fuera consciente del esfuerzo necesario para comprender con complejidad, podría haber optado por no estar en la industria en absoluto.

Reading VS Writing : otro efecto secundario del tamaño del problema es que, a menudo, en el "mundo real" estamos expuestos a trabajos escritos por otros, ya sea para fines de mantenimiento (no lo hice mantenimiento en el mundo académico en cualquier lugar), extensión o simplemente división del trabajo. Por lo tanto, leer el código es mucho más importante que escribirlo.

Una propuesta para mejorar la educación en programación : la academia debería exponernos más a situaciones del mundo real sin regresar a la formación profesional. Los médicos tienen que enfrentarse a un cadáver en algún momento para ver si están "hechos para ello" (escuché historias de personas que abandonaron el curso después de esta experiencia). Si a principios de los años veinte había visto un proyecto 20K LOC que comprendía diferentes estilos de programación, que tenía que entender en un día y corregir un error en tres, podría haber considerado otras opciones de carrera, aunque probablemente no.

    
respondido por el Dimitrios Mistriotis 12.04.2017 - 09:31
4

La mayor diferencia que he encontrado entre la programación académica y la industrial es la robustez. Casi todos han experimentado la paradoja de "funciona para mí" en su carrera, y esta es una extensión de esta condición. En el mundo académico, la atención se centra en los algoritmos y las funciones y se presta poca atención a la facilidad de uso y la estabilidad del software en condiciones cotidianas.

Por ejemplo, en mi oficina contamos con un ingeniero que tomará el software y es un maestro en causar accidentes debido a las condiciones de la esquina. Hará clic en un botón lo más rápido que pueda hasta que algo se caiga ... si una operación demora demasiado, simplemente comenzará a hacer clic al azar alrededor de la pantalla (¿por frustración? IDK ...)

Cambiar nuestras filosofías de programación para que hagamos las cosas "a prueba de Steve" en general ha mejorado la estabilidad de nuestra aplicación.

    
respondido por el Dave Nay 13.11.2011 - 15:38
3

No tengo ninguna experiencia personal con la capacitación en programación en la escuela; estudié inglés. ¡Pregúnteme sobre Keats y Byron! - pero he recibido varios graduados nuevos, los he educado y asesorado en el mundo del desarrollo de software profesional. Así que puedo hablar desde esa perspectiva.

Mi experiencia es que realmente TODO lo que obtuvieron de su educación fue un interés en la programación. Sus habilidades variaban de cero a despreciables. Su capacidad para autodirigirse era inexistente incluso en los más hábiles de ellos. Su pensamiento no era solo a pequeña escala; En realidad pensaron en miniatura. Un sistema que comprende más de un par de docenas de líneas de código las hizo caer completamente en pedazos.

¿Pero sabes qué? Adquirieron un interés , y eso es un gran problema. Un interés es mucho . Puedo trabajar con alguien que esté interesado. Puedo convertirlos en un desarrollador, siempre que vengan a mí con interés en ser uno. Demonios, eso es todo con lo que empecé I . Eso y un aprecio por los novelistas estadounidenses posmodernos.

    
respondido por el Dan Ray 14.11.2011 - 15:10
2

En la academia,

DRAWBACKS

  • Tenemos plazos que son principalmente para obtener puntos.
  • Los errores realmente no causan problemas, ya que la mayoría de los proyectos nunca se usan en aplicaciones del mundo real.

PLUSes

  • Tenemos tiempo suficiente para la investigación.
  • El balanceo de los objetivos iniciales no causa muchos problemas.

En la industria,

  • Trabajamos en proyectos que serán utilizados por las corporaciones.
  • Trabajamos bajo el estrés de los requisitos cambiantes de los clientes.
  • Los plazos de entrega son raramente flexibles, ya que esto podría generar enormes pérdidas financieras tanto para la empresa de software como para los clientes.

Mira esto:

enlace

    
respondido por el SHOUBHIK BOSE 13.11.2011 - 18:30
2

La programación académica es más sobre el código que tú mismo. Esto es importante para aprender cómo funciona. La calidad del código y el control de revisión no cuentan mucho. Con notables excepciones, el código no tiene una vida útil más allá de la asignación. El alcance de los proyectos tiende a ser bastante limitado, y es poco probable que crezca.

En el mundo real, debes tener el menor código original posible. Una gran cantidad de código es desarrollado por equipos. Es mejor usar las rutinas de la biblioteca que codificarlas tú mismo. La calidad del código y el control de revisión son cada vez más importantes. El código tiende a tener una vida más allá de lo que originalmente se esperaba. El alcance del proyecto suele ser bastante amplio y tiende a deslizarse significativamente si no se administra.

    
respondido por el BillThor 13.11.2011 - 22:08
1

En realidad,

es imposible distinguir completamente entre la programación a nivel académico y la programación en el mundo real.

Yo diría que la mayor diferencia podría ser esta: En la programación del mundo real, debe saber más que la programación y debe poder adaptarse rápidamente.

Dependiendo del sector en el que esté trabajando, debe cumplir con sus leyes.

Michael solo tocó la punta del iceberg al indicar las tareas relacionadas con la programación, que clasificaría como las cosas fáciles (si usted vale la pena, se le está pagando).

En general, enfrentará al menos un par de desafíos por materia en una industria:

  • Leyes vigentes (por ejemplo, confidencialidad del cliente para médicos)
  • Conocimientos técnicos de los sujetos (por ejemplo, sistema de impuestos de facturación, inventario, gestión de recursos, planes médicos, estándares de la industria)
  • Los requisitos del cliente que faltan o no existen o que difieren de los estándares / leyes de la industria

Si comparas un proyecto de programación de investigación de nivel de doctorado con uno real, es probable que sean muy similares en dificultad, conocimientos de nivel de entrada y demás.

La única diferencia real entonces es que el proyecto del mundo real

  • tiene un cliente
  • tiene presupuestos (tiempo, dinero, recursos humanos)

Es un juego de pelota diferente cuando alguien más hace las reglas :)

    
respondido por el Schalk 14.11.2011 - 07:01
0

Si observa las asignaturas estudiadas en informática en la academia, encontrará aproximadamente la mitad del tiempo perdido en matemáticas, ciencias, optativas, etc. y la otra mitad en asignaturas académicas como: diseño de compiladores, teoría de algoritmos, Arquitectura de Computadoras, Optimización, Sistemas Operativos, Electrónica Digital y algunos otros cursos relacionados con la industria, como la programación en C y la Programación Web.

La mayoría de los temas mencionados anteriormente son agradables de conocer, pero tampoco proporcionarán directamente una sólida formación en lo que se requiere en TI del día a día.

Tome los requisitos de programación web de Microsoft (es decir, las áreas requeridas por alguien para ser un miembro productivo del equipo en una organización):

1- C # .NET o VB.NET

2- ASP.NET

3- HTML y CSS

4- SQL Server (u otra base de datos)

5- Programación y diseño de aplicaciones OO

6- Script de Java

7- framework MVC

8- Alguna exposición a las herramientas de control de fuente

9- Alguna exposición a herramientas de prueba automatizadas

Herramienta de seguimiento de 10 errores

11-E-Commerce Concepts (opcional)

12-ORM

13-Algunas habilidades de análisis de negocios

14-Algunas habilidades de comunicación

15-Probablemente, algunos fundamentos de computación en la nube

Como puede ver, la mayoría de los requisitos anteriores rara vez se centran en (es posible que obtenga 1 curso como máximo) durante la universidad.

Uno no puede culpar completamente a las instituciones ya que existen muchas pilas de tecnología de este tipo y siguen cambiando.

La mayoría de los anteriores de Microsoft no ayudarán a alguien que quiera desarrollar aplicaciones en Java.

El problema real es que ninguna de las pilas de tecnología que necesita el negocio hoy en día está cubierta por completo.

Lo anterior cubre la cuestión de la idoneidad de los graduados para trabajos de negocios como la programación en el entorno empresarial. Las necesidades de investigación de laboratorios, etc. no están cubiertas por esta respuesta. Además, otras áreas requieren más habilidades que las anteriores, como desarrollo de juegos, desarrollo integrado, desarrollo de sistemas en tiempo real, etc.

    
respondido por el NoChance 13.11.2011 - 11:08
0

Escala & Enfoque
Desde mi experiencia, en un entorno académico, generalmente la escala de la aplicación en la que está trabajando es mucho más pequeña, algo que puede completarse en un día o una semana, o tal vez durante el semestre de uno o dos programas, generalmente todo lo que escriba será un código desechable que se descartará después del término. En el mundo real, es posible que se encuentre trabajando en una aplicación que un equipo más grande ha tardado meses, si no años, en desarrollar completamente. Pasa mucho más tiempo y depurando el código de otras personas, y tratando de entender la infraestructura de un código base, haciendo malabares con las piezas existentes para agregar algún requisito nuevo o modificado.

Requisitos, integración, clientes
Además, hay aspectos para desarrollar el código, como el análisis de requisitos, las pruebas de integración, etc., que tienden a estar menos representados en los proyectos académicos. En aras de una calificación justa, normalmente el instructor ya establece los requisitos, y no se decide en colaboración en las reuniones. No tiende a tener que "vender al cliente" con un enfoque particular que no es exactamente lo que querían, pero a diferencia de sus deseos, en realidad es factible desde un punto de vista técnico. En un entorno académico, su cliente (el graduador o instructor) tiende a tener una idea bastante concreta de lo que quiere, en el mundo real, puede encontrar clientes que realmente no saben lo que quieren y tienen que elegir su cerebro para entender qué debe ser construido

    
respondido por el Jessica Brown 19.11.2011 - 21:04
0

Mantenimiento & Mantenimiento

En la academia (al menos a nivel de pregrado), el software se construye con objetivos a corto plazo en mente, generalmente para completar alguna tarea o proyecto a término. Una vez que se completa la tarea, el código se desecha y nunca se vuelve a ver.

En un entorno profesional, la mayoría del software está escrito teniendo en cuenta el uso a largo plazo; el software está diseñado para ser utilizado durante al menos unos pocos años y debe desarrollarse para que sea fácil de mantener y actualizar con el tiempo.

Relacionado a esto está el trabajo de mantenimiento. La mayoría del trabajo de programación profesional implica actualizar o mantener el software existente. Los llamados proyectos de "campo verde" son la excepción, en lugar de la norma.

    
respondido por el Ken Liu 20.11.2011 - 04:26

Lea otras preguntas en las etiquetas