Pregunta

Durante el verano, tuve la suerte de participar en Google Summer of Code.Aprendí mucho (probablemente más de lo que aprendí en la suma de todos mis cursos universitarios).Realmente me pregunto por qué no enseñan algunas de las cosas que aprendí antes en la escuela.Para nombrar unos pocos:

  • examen de la unidad
  • control de versiones
  • desarrollo ágil

Me parece que dedican una cantidad significativa de tiempo a enseñar otras cosas como estructuras de datos y algoritmos desde el principio.Si bien sigo pensando que es muy importante aprenderlos desde el principio, ¿por qué no enseñan más de estos tres antes que ellos?¿O es sólo mi escuela la que no enseña mucho de estas cosas?

No me malinterpretes, no creo que sea deseable que las universidades enseñen siempre las modas de programación más modernas, pero ¿no deberían mis profesores enseñarme algo más que "dibujar un diagrama antes de comenzar a codificar"?

¿Fue útil?

Solución

La respuesta más simple a su pregunta es que los campos de la informática y el desarrollo de software son muy nuevos y no se comprenden muy bien.Aunque todas las disciplinas científicas y de ingeniería están avanzando más rápidamente en los tiempos modernos, otros campos tienen mucha más experiencia a la que recurrir y existe una comprensión compartida mucho más amplia de cómo funcionan.

Por ejemplo, a pesar de los recientes avances en la ciencia de los materiales, los ingenieros civiles saben desde hace unos 2.000 años cómo construir un arco que no se caiga, y esto es algo que se puede enseñar y aprender en la universidad con relativamente poca controversia.Aunque estoy completamente de acuerdo con usted acerca de las técnicas que los desarrolladores de software deberían aprender, este acuerdo se basa en experiencia personal y razonamiento informal.Para que sea una "mejor práctica" socialmente aceptada, necesitamos datos cuantitativos cuya recopilación puede resultar muy costosa:¿Cuánto ayuda el control de versiones?¿Cómo ayuda?¿Examen de la unidad?Podemos razonar sobre la efectividad de varias técnicas, pero demostrar esa efectividad de manera concluyente sería muy costoso.Tendríamos que ejecutar un proyecto de software completo y realista, de principio a fin, numerosas veces, con grupos de programadores que tuvieran experiencia equivalente y utilizaran técnicas diferentes.Como mínimo necesitaríamos muchos datos sobre proyectos existentes que esos proyectos no estarían dispuestos a publicar.

Los ingenieros civiles tienen miles de años de puentes que observar, con mucha información.Los desarrolladores de software, por otro lado, tienen sólo unas pocas décadas de información, la mayor parte de la cual se mantiene en secreto, ya que hay poca motivación para que las organizaciones cotejen y publiquen información sobre la efectividad de sus desarrolladores, incluso si la están recopilando (lo que la mayoría no hace). 't).

También hay cierta confusión de campos.El desarrollo de software, o "ingeniería" de software, es realmente algo diferente de la informática.Los desarrolladores de software necesitan conocimientos prácticos de informática, pero trabajar en los límites de la complejidad algorítmica o razonar sobre el paralelismo no es algo que un programador en activo haga todos los días;de manera similar, un verdadero "científico informático" escribirá toneladas de código desechable que simplemente no funciona o no hace nada interesante, y no se beneficiará tanto del tipo de rigor que tendría un producto de software real.

El surgimiento de Internet y la comunidad de código abierto puede proporcionar datos suficientes para comenzar a responder estas preguntas de manera concluyente, pero incluso si las respuestas estuvieran disponibles mañana, probablemente tomarán 100 años para que impregnen la sociedad internacional hasta el punto en que todos estén de acuerdo sobre lo que debería enseñarse en las escuelas.

Finalmente hay algunas consideraciones económicas.Ha pasado un tiempo relativamente corto desde que casi todos los involucrados en el desarrollo de software tuvieron acceso fácil y económico a máquinas dedicadas para ejecutar cualquier herramienta de desarrollo que quisieran.Hace unas décadas, dedicar completamente una máquina solo a ejecutar sus pruebas, o incluso albergar un historial infinito de código fuente, habría parecido frívolamente costoso a mucha gente.

Otros consejos

Porque nuestros profesores:

  1. Nunca probé las pruebas unitarias,
  2. No sé cómo usar el control de versiones y
  3. Ni siquiera he oído hablar del "desarrollo ágil".

Los estudiantes deben tomar el asunto en sus propias manos.Lo hicimos y quedó bien, ¿no?

Leonardo da Vinci escribió,

Aquellos que están enamorados de la práctica sin ciencia son como un piloto que entra en un barco sin timón o brújula y nunca tiene certeza a dónde va.La práctica siempre debe basarse en un buen conocimiento de la teoría.

Las buenas escuelas enseñan tanto teoría (estructuras de datos, algoritmos, etc.) como práctica (pruebas unitarias, control de versiones, etc.).Esto requiere una combinación adecuada de profesores para que ambas caras de esta moneda puedan enseñarse adecuadamente.Una facultad compuesta enteramente por tipos teóricos sin experiencia real no servirá.De manera similar, una facultad compuesta enteramente por practicantes no servirá.Necesitas una mezcla, y las buenas escuelas la tienen.

La informática siempre ha sido algo contradictoria;La parte que trata sobre computadoras no es una ciencia, y la parte que es ciencia no trata sobre computadoras.

Las universidades tienden a inclinarse más hacia el extremo "científico" (algoritmos, estructuras de datos, compiladores, etc.) porque esas cosas son mucho más "atemporales" que las mejores prácticas actuales de la industria, que tienden a evolucionar y cambiar de año en año.El control de versiones, por ejemplo, ha experimentado cambios sorprendentes en los últimos 5 o 10 años, pero la O grande sigue siendo O grande, y el hash, los btrees y la recursividad siguen siendo tan útiles como lo eran hace 40 años.En general, su idea es brindarle suficientes bases para que luego pueda utilizar herramientas como git y comprender lo que significa cuando le dicen que la estructura de datos subyacente es un gráfico dirigido acíclico de hashes SHA-1, y que los desarrolladores han trabajado duro. para optimizar el número de llamadas al sistema para que esté vinculado a io.

Ahora, piensa en dónde aprendiste todas las cosas que necesitabas saber para entender la última frase: si la respuesta es "universidad", están haciendo un buen trabajo.

Enseñé estas cosas cuando era adjunto en el Instituto de Tecnología de Oregón.Se les enseña, sólo escasamente.

Todo es una moda pasajera.Aprenderás más en tu primer año fuera de la universidad que en todos tus años en la universidad.La informática no tiene nada que ver con las computadoras.

La universidad te proporciona una caja de herramientas llena de herramientas.Este es un destornillador, o sea una llave inglesa.PODRÍAS llegar a utilizar cada herramienta una vez en la universidad.Es cuando entras al mundo real es cuando realmente descubres lo que tienes.Separas los útiles del resto, cuáles quieres dejar en casa en el banco de trabajo, por si acaso, y los que guardas en el bolsillo todos los días.

Tqm, Iso, Cmm, Ágil, etc.Todas estas son modas pasajeras que vendrán y se irán, ninguna de las exitosas es más que sentido común.Todos los ingenieros y empresas exitosos utilizan algo de sentido común, eso es lo que los hizo exitosos, pocos necesitaban un nombre para ello.El problema es que no se puede vender sentido común, un gerente no puede demostrar su valor para la empresa entrenando y comprando sentido común sin un nombre pegadizo.Ponle un nombre que sus superiores hayan leído en alguna noticia o revista y el gerente conserva su puesto y tú conservas el tuyo.Muy pocas de las empresas que afirman seguir estas prácticas realmente lo hacen.La mayoría escribe un cheque a un consultor y entrega su certificado anual o vitalicio a algún club para que pueda poner un gráfico en su sitio web o una etiqueta en la caja en la que viene su producto.Muchos argumentarán que esto es raro... he estado allí, lo he visto, sucede.Todo esto es parte del negocio, a veces hay que tomar atajos para seguir siendo rentable y mantener las puertas abiertas y las luces encendidas.Los seguidores incondicionales de todas estas prácticas han argumentado que la última era una moda pasajera y ésta no, que la última realmente era demasiado costosa para seguirla, y ésta no lo es.El último era falso, acabas de contratar a un consultor, este es real.Al igual que los lenguajes de programación, estos también evolucionarán.

Su capacidad para comprender las realidades de los negocios, el sistema universitario y su papel en él es la clave.Como todo en la vida, elige tus batallas.No es trabajo de la universidad, ni de las empresas, ni del gobierno, ni de nadie más enseñar lo que necesitas o quieres saber.Es su trabajo buscar el número uno.Del mismo modo, no puedes culpar a nadie por darte el tiempo para hacer esto, tienes que hacerlo.Te caerás del caballo, no eres una víctima, levántate y vuelve a subir, no hay excusas, la vida no es justa, trata eso.Aproveche los folletos, no pretenda ser independiente.Y, ciertamente, pague sus deudas, no le quite a una empresa las limosnas sin darles algo (¿lo mejor en ese momento?) a cambio.

¿Por qué la gente piensa que cmm, agile o cualquiera de los demás son una moda pasajera?¿Por qué creen que no lo son?¿Por qué el profesor te enseñó a programar de esa manera?¿Evitar gotos o evitar constantes o evitar esto y aquello?¿Es porque produce un código más confiable?¿Código de mejor rendimiento?¿Reduce el error humano?¿O es porque es más fácil calificar trabajos/programas, dándoles más tiempo para investigar?¿Es porque no saben programar y simplemente están siguiendo el libro de otra persona sobre el tema?¿Le enseñaron que no se puede tener un código mantenible, confiable y de alto rendimiento?¿Ni siquiera puede "elegir dos" que el mantenimiento interfiera con un rendimiento confiable y alto?A veces se sacrifica la confiabilidad por el rendimiento.A veces no le importa la confiabilidad o el rendimiento, solo desea pasar de la versión 117.34.2 de otro programa de software de contabilidad a la versión 118.0.0.Su modelo de negocio consiste en vender actualizaciones de versiones y soporte técnico y, en lo que respecta a los desarrolladores de software, cualquier robot antiguo puede escribir el mismo código de la misma manera.Reemplace el quemado por uno recién salido de la universidad y siga vendiendo mejoras.

No existen respuestas universales a estas preguntas, hay que descubrir cuál es su opinión, vivir con ella y defenderla.Cambia de opinión, vive con ello y defiéndelo.

Cuestiona todo... ¿realmente me quemaré si toco la olla caliente en la estufa?¿Los efectos psicológicos de tener miedo causarán más daño que simplemente quemarse?¿Existe una manera segura de probar la respuesta sin lastimarse?

Cuando podía permitírmelo, compraba y eventualmente fundía transistores, tapas, resistencias, etc. en mi dormitorio, todos los cuales tienen un mal olor característico.Es mucho más barato y más fácil comprar un amplificador para tu estéreo que intentar construir uno el día después de tu primera clase de transistores.Linus es la excepción, por supuesto, es más fácil comprar un sistema operativo que escribir uno... Puedes hacer más, aunque lo que aprendes en ese tiempo es diferente de lo que aprendió Linus.

El mundo dentro y fuera de la universidad adoptará estas fórmulas (cmm, ágil, etc.) para resolver problemas y cuando salga la próxima las abandonarán igual de rápido.No es necesario utilizar el control de versiones para tener éxito, hay tantos éxitos con como sin control de versiones (bueno, en realidad, debido a la antigüedad de la industria, hasta ahora hay muchos más éxitos sin control de versiones).Del mismo modo, puede tener éxito con pruebas mínimas (consulte los nombres realmente importantes de la industria informática como ejemplos).Puede tener éxito probando su propio código, así como también si sigue la regla de que nunca debe probar su propio código.Puede tener éxito utilizando emacs y puede tener éxito utilizando vi.Tienes que decidir qué combinación te conviene y, si tienes suerte, encontrar un lugar para trabajar que te convenga.Con el tiempo, lo que funciona para usted cambiará, desde las herramientas hasta los lenguajes, el estilo de programación, los miedos, el control de versiones, la documentación, etc.Te casarás, tendrás hijos y decidirás que quizás quieras esconderte en un rincón de esa gran empresa con un gran paquete de seguro médico y un trabajo aburrido y disfrutar de tus hijos en lugar de ser el programador estrella de una pequeña startup.

Cuando salgas de la universidad y entres al mundo real, escucha, trabaja y discute con los "veteranos".Tienen décadas o siglos de experiencia combinada, trampas en las que han caído y que podrías evitar o probar por tu cuenta (tal vez te des cuenta de que no tienes que tocar la olla caliente para descubrir que te quemará).La mayoría habrá visto al menos una o dos de estas modas ir y venir, y en particular cuán graves fueron las quemaduras y qué hicieron para recuperarse de ellas.Conocen muchas formas diferentes de probar cosas y también los nombres de los estilos de prueba que han aparecido y desaparecido.Qué funciona, qué no.Dónde está el riesgo y cómo evitar perder el tiempo por la tangente.A medida que madures y te conviertas en un veterano, pásalo adelante.Paga por lo que aprendiste tratando de enseñar a quienes te siguen.Recuerda enseñarles CÓMO pescar, no les des sólo un pescado.Y a veces hay que dejar que fracasen antes de tener éxito, para evitar que se quemen demasiado.

Lo que realmente quería decir aquí es que ahora estamos en una situación poco común en la que podemos presenciar la evolución de un universo paralelo (y tal vez influir en él).Sí, la informática es una ciencia joven en comparación con la física.Pero al mismo tiempo ha evolucionado muchas veces.Dependiendo de dónde trabaje y con quién trabaje, es posible que pueda observar a los ingenieros de hardware.Los lenguajes de programación en el mundo del hardware ciertamente no son nuevos, pero no han evolucionado tan rápidamente como el mundo del software.El software tuvo algunas décadas de ventaja.El hardware siempre ha pensado en los ingenieros de software como ciudadanos de segunda clase.Nuestro trabajo es fácil, el de ellos es duro.(Tenga en cuenta que en realidad soy ingeniero de hardware y software).Lo interesante es que ahora mismo siguen lidiando con lo que consideraríamos problemas elementales o infantiles.¿Por qué necesitaría usar el control de versiones? Soy el único que trabaja en este chip.Su experiencia con gcc u otros compiladores baratos o IDE gratuitos no se puede comparar con las costosas herramientas que uso, si la compañía pensara que usted es lo suficientemente digno para usarlo o incluso saber cómo usarlo, le comprarían una copia.Y una larga lista de otras excusas.Tuve el placer de aprender tanto vhdl como verilog y volverme productivo en ambos en una semana, gracias a lo que fue casi un desafío de un ingeniero de hardware (a pesar de que mi diploma decía ingeniero eléctrico, mi puesto de trabajo es ingeniero de software).Quería aprender estos idiomas, cuando las herramientas estuvieron disponibles para mí me quedé en la oficina hasta la noche y aprendí por mi cuenta.A partir de ese momento, ese ingeniero en particular se dio cuenta de que lo que estaba diciendo era cierto, los lenguajes son solo sintaxis, los fundamentos de programación son los mismos, todas las herramientas hacen lo mismo.Son manzanas y manzanas, no manzanas y naranjas.

En general, todavía es difícil enviar el mensaje de que una de estas dos industrias paralelas tiene mucha más experiencia en lenguajes, hábitos de programación, control de fuentes, pruebas, herramientas, entornos de programación, etc. que la otra.El problema que estoy tratando de resolver es tomar los diseños de hardware a medida que se están desarrollando, crear simuladores funcionales asequibles que podamos vincular con una simulación (máquina virtual) del procesador para que podamos comenzar a probar el hardware y desarrollar la prueba y software entregable mucho antes de que pasemos al silicio.No, no hay nada "nuevo" en esto, pero no tenemos ningún mecanismo para obtener el código más reciente, realizar un seguimiento de los cambios en el código para ver dónde debemos concentrar nuestro tiempo.No hay ningún mecanismo para rastrear la documentación que define la interfaz de usuario (programación) para el hardware.La única copia dorada está en la bandeja de entrada del correo electrónico de alguien en formato binario y solo cambia cuando, bueno, no es necesario leer el verilog para saber qué está pasando.Espera, ¿cuántos años tiene ese verilog?¿Ese error en el que pasé toda la semana lo descubriste hace tres semanas y lo solucionaste?Entonces, ¿simplemente volamos a algún lugar de vacaciones y festejamos durante seis meses esperando que la gente del hardware termine su tarea y nos lo lancen por encima de la pared, o aprovechamos esta oportunidad para tratar de ser pacientes y optimistas y enseñarles que existen métodos de sentido común que no son tan intrusivos y que les permiten hacer su trabajo, realizar copias de seguridad de su trabajo y compartir sus cosas para revisión por pares...

Recuerde que los ingenieros de hardware dejaron la universidad con una caja de herramientas nuevas y brillantes, tal como lo hizo usted.Aprendiste 17 lenguajes de programación diferentes de los cuales solo puedes usar uno, el resto de los lenguajes que usarás en tu carrera los inventarás después de que dejes la universidad.Cuando terminen la universidad podrán decirte lo que saben sobre cálculo y teoría de la relatividad, cuántos electrones hay en cada uno de los elementos y calcular la carga alrededor de una superficie gaussiana.Pero la mayor parte de su carrera es uno, cero y o y no (oye, tenemos eso en común, todo lo que realmente necesitas saber sobre computadoras, uno, cero y o y no ingeniero de hardware o software).Es cierto que las leyes fundamentales de la física y el cálculo no van a cambiar tan rápido como lo hacen los lenguajes de programación.Pero los fundamentos de la programación son los mismos en todos los lenguajes y seguirán siéndolo en el futuro.¿Saliste de la universidad sabiendo eso o saliste pensando que Java es diferente y mejor que C++ por esto y aquello y lo otro?

Como cualquier otro negocio, el trabajo de las universidades es seguir siendo rentable.Tienen que contratar a los académicos adecuados para traer tanto los estudiantes adecuados como los dólares de investigación adecuados y los tipos de investigación adecuados para que la universidad sea rentable.Tienen que ofrecer las clases adecuadas para traer a los estudiantes adecuados y producir los graduados adecuados para que, a medida que pasen las décadas, los empleadores, tanto cerca de la universidad como, con suerte, lejos, reconozcan que esta universidad produce empleados productivos y rentables.(Sí, y a veces hay que atraer a los atletas adecuados en el deporte adecuado para obtener la cantidad adecuada de tiempo televisivo y la cantidad adecuada de reconocimiento de nombre e ingresos deportivos).Algunas universidades enseñarán C++ y Java, otras nunca lo harán.Algunos inventarán CMM, otros enseñarán Agile, otros no harán ninguna de las dos cosas.Si la universidad tiene algún valor, allí hay algo que puedes aprender.No te enseñarán todo lo que hay que aprender, pero tendrán algo útil.Aprenda algo mientras esté allí, recopile una cantidad razonable de diversos tipos de herramientas en su caja de herramientas.Deja la universidad y consigue un trabajo.Si tu caja de herramientas apesta, tal vez busques otra universidad y nunca menciones la primera.Si es una buena caja de herramientas, use esas herramientas y construya algunas nuevas en su propio tiempo.Si es una caja de herramientas bastante buena, diga cosas buenas sobre esa universidad y los buenos académicos de los que aprendió esto y aquello y devuélvale a la escuela lo que le dieron.Aunque no hayas obtenido todas las herramientas posibles del catálogo universal de herramientas universitarias, te irás con un determinado subconjunto.Incluso si no te gradúas...

oh dios no me hagas empezar

Una vez el decano de informática de una universidad de renombre me dijo que la programación orientada a objetos era sólo una "moda pasajera", por lo que no ofrecían ninguna clase sobre fantasías pasajeras como C++.

En cuanto a por qué no enseñan estas cosas, bueno, la universidad está ahí para enseñarte los fundamentos de la disciplina, no necesariamente las mejores prácticas de la industria.

La respuesta más simple es que estás estudiando informática y las cosas que enumeraste no están realmente relacionadas con el campo académico de la informática.El desarrollo de software podría ser algo que usted hacer con la informática, algo que se base en los bloques de lo que has aprendido...pero la informática y el desarrollo de software no son lo mismo.

Clases que te enseñaron control de versiones o cómo escribir pruebas unitarias efectivas...eso te estaría enseñando un comercio, es decir, (buen) desarrollo de software.

Bueno, lo que pasa con las universidades es que necesitan enseñar cosas que realmente sean universales.Algo como el desarrollo ágil todavía es bastante nuevo y, a pesar de lo mucho que se habla de él en Internet, no se utiliza en todas partes, por lo que enseñarlo a toda una clase de estudiantes sólo beneficiaría potencialmente a unas pocas personas que llegaron a talleres ágiles.

Sin embargo, el control de versiones es algo que hoy en día es imperdonable.Es algo que todo el mundo debe entender: es una herramienta casi tan útil como un compilador y CVS existe desde hace más de 20 años.Los conceptos al menos deben ser comprendidos por cualquier programador que salga de la universidad.Afortunadamente, si haces algún trabajo en grupo en la universidad, puedes tener la suerte de encontrar a alguien que ya sepa sobre control de versiones y convenza a tu grupo para que lo use.Sé que me alegro de que esa persona estuviera en mi grupo.

Las pruebas unitarias también son igualmente imperdonables.Lo único que diría es que el libro aún está disponible sobre desarrollo basado en pruebas y lograr una cobertura del código del 100% siempre puede ser más problemático de lo que vale la pena.Pero las pruebas unitarias son extremadamente valiosas y deberían tratarse en un curso de ingeniería de software.Me imagino que algunas de estas cosas están llegando a algunas universidades, pero aún no han llegado a todas.

¿Por qué no?Mi experiencia al obtener mi título de informática fue más o menos la misma.La razón es que las personas que enseñan programación no programan, hasta donde yo sé.No es necesario enseñar esas cosas para obtener la acreditación, los profesores no están familiarizados con ellas y los estudiantes nunca desarrollan proyectos de importancia como parte de su trabajo de curso.No existe ninguna motivación para enseñar programación, a diferencia de enseñar teoría de informática o sintaxis de Java.

Depende de la universidad.Me gradué en 2003 en una universidad australiana.En ese tiempo aprendimos UML, pruebas unitarias, XP (y otras metodologías ágiles), junto con todo el material formal como Z, algoritmos y estructuras de datos, sistemas operativos, etc.

Sin embargo, no cubrieron las pruebas unitarias con gran detalle, sino que simplemente pagaron el servicio de aprobación de una conferencia.Hubiera sido fantástico haber aprendido a escribir pruebas unitarias efectivas, en lugar de simplemente "¿Qué es una prueba unitaria?".

En lo que respecta al control de versiones, lo estuvimos utilizando (CVS) en nuestros proyectos de programación desde el segundo año en adelante.

También estoy totalmente de acuerdo con lo que dijo Glyph.La informática es un campo tan inmaduro, en realidad sólo existe desde hace 50 años, que no sabemos qué deberíamos aprender y qué es sólo una moda pasajera.Espere 150 años y entonces las cosas podrían calmarse más.La cantidad de proyectos fallidos en el mundo real hace evidente que se trata de una industria inmadura.¡Imagínese si el 80% de los proyectos de construcción fracasaran!

Los informáticos piensan que son matemáticos, no ingenieros, y por eso prefieren enseñar las partes de matemáticas que las de ingeniería.Las pruebas, el control de versiones y la documentación no son modas pasajeras como tampoco lo son en cualquier otra disciplina de ingeniería.

Todo eso se puede cubrir fácilmente (superficialmente) en una sola clase sobre prácticas de desarrollo de software.No forma parte de la mayoría de los planes de estudios de informática, porque no es de eso de lo que se trata la informática, aunque creo que algo de cobertura sobre ese tema es útil.Mi escuela tenía esa clase;no cubría el control de versiones, pero sí UML, recopilación de requisitos, metodologías de desarrollo (varias ágiles y en cascada), pruebas unitarias, pruebas de integración, etc., y requería que trabajáramos en equipos de 4 a 5 para desarrollar un proyecto. (una copia de Clue bastante simple en Java).Si sentía la necesidad de tomar más clases de Ingeniería de Software, estaban disponibles como optativas.

A pesar de que nunca se mencionó el control de versiones ni una sola vez en ninguna clase que tomé, la mayoría de mis amigos lo usaban para proyectos personales, tareas de clase, etc., por lo que no es como si no estuviéramos expuestos a él.Las personas que no lo aprendieron por su cuenta fueron obligadas a utilizarlo por un compañero de clase durante una tarea de equipo.

La universidad está destinada a enseñar conceptos y teorías, porque esas son las cosas que son difíciles de aprender por tu cuenta.El control de versiones es una herramienta y bastante fácil de utilizar.Úsalo un poco, lee algunos tutoriales en la web y listo.Si necesita conferencias y tareas para descubrir cómo verificar algo en SVN, tendrá muchos problemas con las cosas que realmente SON difíciles.

Recuerde que hay muchas maneras de aprender cosas en la universidad fuera de las clases;aprovecha eso.Estás pagando mucho por asistir a las clases y utilizar las instalaciones, así que aprovecha todo lo que vale y asiste a las reuniones de LUG y ACM, participa en equipos de proyectos (siempre hay algunos ME que construyen un robot y necesitan un programador) o consigue un trabajo administrando el servidor del departamento de Humanidades.Recoge una computadora de la plataforma de carga del edificio de Ingeniería de Materiales, descarga una ISO de Linux con la conexión rápida a Internet de tu dormitorio y juega.

Creo que el problema es que las universidades no sienten que necesitan enseñarte a ser un profesional, sino que se centran en el lado académico de la programación.Pensé que al menos debería haber una referencia a los últimos métodos y técnicas que se utilizan en la industria, ya que estas cosas también son de interés académico.

En nuestro curso, nos enseñaron el Proceso de software personal, que cubría aspectos como registrar el tiempo dedicado a proyectos, buenos comentarios, etc., pero no mencionaba fundamentos profesionales como el control de versiones.

Todo eso lo aprendí en la Universidad.¿Quizás depende de los cursos que elijas?Mis cursos fueron muy diversos (Diseño de Software, Diseño UI, Comercio Electrónico, IA, Programación Funcional, etc.).Diseño de Software estuvo expuesto a patrones de diseño y pruebas unitarias (un proyecto grande que involucraba varias cosas).Diseño de interfaz de usuario... éramos un grupo de tres personas trabajando en un proyecto.No podíamos hacer nada sin control de versiones, así que lo conseguimos.Y el desarrollo ágil era algo de lo que nuestros profesores nos hablaban continuamente, pero dejaban que cada grupo lo utilizara.

Encuentro que muchos estudiantes universitarios tomaron cursos "fáciles" o cursos que les darían un GPA alto.Otros se centran en lo que quieren aprender y exploran en gran medida para encontrar qué campo les interesaría.Y luego están aquellos que saben exactamente lo que les interesa... lo cual es bueno, excepto que tienden a no diversificar sus cursos.

Para responder por qué estas cosas no son las primeras que se enseñan:Los programas de pregrado generalmente te capacitan para convertirte en un estudiante de maestría.Sólo una vez que empieces a elegir tus propios cursos (lo que suele ocurrir en años posteriores) podrás elegir aprender sobre cosas que se utilizan fuera del ámbito académico.Por eso se centran en algoritmos, estructuras de datos, presentarle problemas sin resolver, etc.

Personalmente creo que está bien que estén haciendo esto.Programar no es tan fácil como muchos de nosotros hacemos parecer;Mucha gente lucha con ello.Preferiría que estas personas primero entiendan cómo funciona un bucle for antes de descubrir el monstruo que es Perforce.

No enseñan esos temas porque la mayoría de las escuelas son académicas, no comerciales.Es decir, están diseñados para enseñar ideas y teorías, no para formarle en una carrera.Todo el concepto de control de calidad no tiene nada que ver con la informática más allá de pasar una prueba matemática.Además, las prácticas de control de calidad y los flujos de trabajo de desarrollo difieren enormemente de una casa de desarrollo a otra, por lo que enseñarlos en la escuela es una pérdida de tiempo y dinero.

Aprendí todo eso en el primer año, con la excepción del desarrollo ágil.

Se trata de elegir la escuela adecuada, en mi humilde opinión.Si llegas al top 10, aprenderás todo eso rápidamente.

En lo que respecta a la educación informática en general, básicamente estamos pidiendo a los profesores que enseñen mucho (lenguajes de todos los tipos, estructuras de datos, eficiencias en tiempo de ejecución, cómo funcionan realmente las cosas a nivel de bits).Me gustaría plantear la pregunta: ¿Por qué los niños no se encargan de aprender más sobre Ingeniería de Software?

Ha nombrado 3, algunos de los cuales no creo que sean tan importantes para comprender los sistemas informáticos (por ejemplo, control de versiones).Estas cosas son parte de un trabajo y puedes convertirte en un buen programador/informático sin necesidad de saberlo.

de manera similar para las pruebas unitarias: ¿por qué elegir las pruebas unitarias?¿Seguramente las pruebas de usabilidad, las pruebas del sistema, las pruebas de aceptación del usuario y las pruebas de aceptación en fábrica son más importantes?Bueno, lo son a menos que consideres que tu trabajo está completo una vez que el código se envía al departamento de mantenimiento :)

Piense en los otros conceptos que uso a diario, que serían de poca utilidad para que un estudiante se familiarice con los fundamentos del software y los sistemas informáticos:

  • buenas practicas para comentar
  • Cumplimiento de estándares (no solo los internacionales, sino también los estándares de codificación en equipo).
  • documentación
  • control de cambios (no necesariamente lo mismo que el control de versiones, que consiste en almacenar diferencias, se trata más de qué y por qué cambiaste algo)
  • desarrollo de usabilidad

Las anteriores son todas "habilidades blandas" que no necesidad escribir un buen código.

Sin embargo, si le faltan las habilidades "duras", como estructuras de datos y algoritmos, entonces sus posibilidades de escribir un buen código son casi imposibles.

Al igual que los estudiantes, cada universidad es diferente.Algunas universidades, o más exactamente, algunos profesores, se resisten al cambio o son perezosos.Afortunadamente la mayoría no lo es.Teorías, conceptos, historia, etc.son importantes y vitales para cualquier plan de estudios de informática.Pero también lo es preparar al estudiante para su entorno laboral.No es sorprendente que los colegios comunitarios de mi área ofrezcan cursos de informática muy actuales y aplicables.No tanto con una universidad grande, establecida y prestigiosa.

Es simplemente porque las estructuras de datos y los algoritmos constituyen el núcleo de la informática y, por tanto, son mucho más importantes.Las pruebas unitarias, el control de versiones y la metodología ágil no son más que herramientas del oficio (y, si es necesario, se espera que uno las aprenda en el trabajo).

Creo que los buenos programas de informática deberían enseñar los fundamentos que servirán como base para toda la educación en programación futura.Las metodologías de desarrollo como Agile y las herramientas de control de versiones son como modas pasajeras;ellos van y vienen.Además, tienden a usarse en entornos industriales y no académicos, por lo que creo que es raro que las universidades cubran cosas como las que probablemente aprenderá en el trabajo.No digo que sea correcto, pero probablemente esa sea la mentalidad académica.

Estoy de acuerdo con lo que estás diciendo.Hace poco comencé a trabajar en el mundo del desarrollo de software y ya comencé a aprender sobre desarrollo ágil, algo que nunca me enseñaron en la universidad.

El quid de la cuestión puede ser que los profesores universitarios no se mantienen al día con las nuevas técnicas de desarrollo tanto como deberían.También pueden sentir que hay otras cosas más importantes en su plan de estudios.

Los profesores universitarios no saben cómo escribir software, simplemente lo investigan, lo enseñan y ocasionalmente crean algún código que sólo tiene que funcionar hasta que se publica el artículo.

Es sólo gracias a gente como Titus que tenemos académicos que realmente asimilan la programación. Lea sus comentarios sobre ese tema aquí.

Cuando era estudiante leía libros en la biblioteca sobre programación extrema y lo discutíamos brevemente en clases, las mismas clases que exigían que nos ajustáramos al "modelo en cascada" de desarrollo de software, donde la "compilación" es un paso de su desarrollo. propio.

Todo lo mejor en tu carrera, espero que te gradúes, es bueno tener letras después de tu nombre.:)

Las tres cosas que menciona (pruebas unitarias, control de versiones, desarrollo ágil) se enseñan hasta cierto punto en el programa de Ciencias de la Computación de la Universidad de Groningen.Si eso es bueno o no, lo dejaré como una pregunta abierta;pero no es cierto que ninguna universidad te enseñe las "cosas prácticas".

Estos se basan en mis experiencias limitadas en un programa de informática antes de cambiar de especialidad y en mi experiencia como pasante en una gran empresa de software.Las pruebas unitarias no se enseñan porque la mayoría de los programas que tienes que crear no son lo suficientemente grandes como para necesitar pruebas automatizadas, garantizas un conjunto específico de entradas para que puedas probar todo manualmente.Enseñarle cómo automatizar pruebas también puede interferir con la calificación de su proyecto, ya que la mayoría de los proyectos se califican con scripts que ejecutan pruebas automatizadas, con un vistazo rápido al código para asegurarse de que no tiene int foo1;int foo2;y utilizas la sangría adecuada.

No sé por qué no se enseñaría el control de versiones, pero probablemente parte del problema sea el tamaño de los proyectos.Nunca tuve ningún proyecto que fuera lo suficientemente grande para el control de versiones, y por grande me refiero a más de 1000 líneas de código y me llevó un semestre entero escribirlo.Supongo que piensan que te lo enseñarás tú mismo si lo necesitas.Se suponía que todos los proyectos grupales que tenía eran proyectos de programación en pares, y ¿por qué usar el control de versiones si ambos están en la misma computadora?

No sé por qué no se enseñaría el desarrollo ágil, pero probablemente se trate de lo mismo con el tamaño del programa.Si bien el desarrollo ágil es común con el nuevo software que se ejecuta en computadoras personales y servidores pequeños, generalmente no se usa en sistemas como mainframes de IBM o en dominios problemáticos como la banca o la medicina, donde la documentación es el rey.Probablemente también tenga que ver con el hecho de que el desarrollo ágil no existía hace 20 años, cuando se capacitaba a muchos profesores.

La razón principal es que muchas (¿la mayoría?) universidades consideran que tienen un objetivo diferente al de una escuela de oficios.Como tal, quieren enseñar a los estudiantes. Cómo aprender, y los principios fundamentales de la disciplina.Además, los algoritmos y las estructuras de datos se aplicarán a cualquier lenguaje de programación y no dependerán de herramientas específicas (que pueden o no estar todavía en uso al graduarse).

En Ciencias de la Computación, eso significa algoritmos, estructuras de datos, teoría de la computación, teoría del compilador, etc.Lo que estás enumerando tiene menos que ver con entender cómo programar, cómo resolver problemas, etc.Se trata de la práctica de la programación (que, dicho sea de paso, es un libro fantástico para cualquiera que esté en la universidad y tenga la intención de trabajar como programador).Ahora bien, gran parte de esto no se utilizará en una posición de mono de código de nivel básico, lo que lleva a algunas personas a pensar que no es útil.No estoy de acuerdo.Creo que puede ser extremadamente útil.Sin embargo, eso no significa que después de obtener su título de informática, sepa todo lo que necesitará para trabajar como programador.

Lo cual tampoco quiere decir que las cosas que mencionas no sean útiles.Ellos son.Tendrás problemas para trabajar como programador si no los aprendes, y creo que deberían enseñarse en la universidad, al menos hasta cierto punto.Me interesaría enseñar control de versiones, pruebas unitarias, etc., de la misma manera que miraría una programación universitaria en arte y la enseñanza de qué son los pinceles y cuáles deben usarse para diversos casos.

Creo que depende del tipo de programa de Ciencias de la Computación en el que se encuentre, hay algunos que apuntan al lado de Investigación y Ciencia y otros que apuntan al lado de Implementación.Me negué especialmente contra ciertas escuelas que solo tenían profesores que permanecían en el mundo académico.Si no tienes profesores que no hayan estado "usando" lo que enseñan, todo está literalmente en su cabeza.

Enchufar:Habiendo tomado una licenciatura en ciencias computacionales y una maestría en ingeniería suave en la Universidad DePaul, me enseñaron principalmente instructores/profesores que enseñaban a tiempo parcial, lo cual estuvo bien para mí porque preferiría que vinieran con una anécdota del día anterior y me contaran. a clase.Además, al ser una escuela mayoritariamente de tiempo parcial y de cercanías, la mayoría de los estudiantes tienen trabajo en el uso de lo que están aprendiendo.

El proceso de aprendizaje aún comienza con toda la teoría, pero generalmente nos preguntan "¿Cuántos de ustedes usan esto en su trabajo?" Y la respuesta típica es "la usamos pero de una manera despojada o más simple" y luego entramos en los escenarios prácticos del mundo real.

Durante mi escolarización, las pruebas unitarias siempre estuvieron presentes.Aunque te iniciaron en Java, nos hicieron usar ANT y JUnit para todos los proyectos.Lo cual fue un buen comienzo para la configuración de compilación y las pruebas unitarias.

Y Extreme Programming se incluyó en aproximadamente 3 o 4 de las clases que tomé.Recuerdo que todos comenzaron con 12 aspectos diferentes, desde programación en pares hasta pruebas unitarias (ver arriba).Y ahora parece que la atención se centra en Agile.

Entonces, la respuesta rápida es sí, hay escuelas que tienen un enfoque más pragmático que otras.

Las pruebas unitarias y el control de versiones se enseñaron en los cursos de segundo año de Ciencias de la Computación donde fui a la universidad.Las pruebas unitarias se incluyeron en la parte de las pruebas que también incluía diferencias entre la caja blanca y la negra y una buena parte de las calificaciones en las tareas de programación del tercer año se debieron a un buen manejo de errores que puede provenir fácilmente de las pruebas unitarias.

Creo que el desarrollo ágil puede ser bastante difícil de enseñar en un entorno académico.Si bien aprendí sobre el método Cascada en teoría, no pude verlo en el campo hasta que me gradué y me mudé al mundo real, que puede ser bastante diferente del académico, p.en tercer año hago todos los casos de errores extraños y casi apruebo una tarea en la que nunca toqué el corazón de lo que la tarea intentó enseñarme sobre los semáforos.

Además, ¿cuánto tiempo lleva existiendo la metodología ágil y a qué forma de ágil te refieres?Hay muchas implementaciones diferentes de lo que he visto.

No creo que la programación ágil sea una moda pasajera, pero al mismo tiempo me resultaría difícil pensar en una forma en que un profesor pueda darte proyectos que te permitan aprenderlo.A menos que te hayan dado el proyecto A para construir a, el proyecto B expande a.El problema es el tiempo y el alcance.En un curso de 4 meses sería difícil.

Los métodos de control de versiones y pruebas unitarias cambian constantemente y dependen del idioma o de la persona que los define.

Las estructuras de datos y los algoritmos son algo en lo que se puede trabajar en un entorno de clase.Honestamente, también requiere un poco más de esfuerzo comprenderlo que las pruebas unitarias y el control de versiones.Intenta recordar que parte de la universidad es enseñarte a enseñarte a ti mismo.El collage no tiene exactamente el mismo mandato.O al menos no en la misma medida.EN MI HUMILDE OPINIÓN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top