¿Qué curso universitario de informática prepara mejor a los programadores para el lugar de trabajo?[cerrado]

StackOverflow https://stackoverflow.com/questions/895165

Pregunta

La idea aquí es lograr que mejores programadores salgan de la universidad.

Creo que tendría que optar por los algoritmos, no es exactamente algo que puedas aprender por tu cuenta con mucha facilidad y creo que te permite observar la eficiencia y corrección del software en un nivel más profundo.

También creo que enseñar programación real puede ser útil, pero aprendí la mayor parte de lo que aprendí sobre programación en el trabajo, lo que me hace pensar que algunos de esos bloques del curso de programación (no todos) podrían haberse utilizado mejor.

Estos resultados serán parte de una carta que quiero escribir al departamento de informática de mi antigua escuela. Creo que hay toneladas de clases que tomé y que no me ayudaron en absoluto, y otras que creo que habrían sido invaluables.

¿Fue útil?

Solución

Yo todavía tengo que encontrar un buen curso CompSci que prepara adecuadamente ingenieros de software para el lugar de trabajo. Si usted encuentra uno que tiene la siguiente [aunque si podría ser llamado CompSci estoy dudoso, es más como Diseño de software del mundo real, que es una bestia muy diferente].

La informática es un tema más teórico que tiene implicaciones mundiales muy reales, pero es más útil en una luz académico. el diseño de algoritmos, por ejemplo, es increíblemente útil para los ingenieros de software, pero en realidad no es directamente útil para el consumidor. Por ejemplo, saber cómo construir un algoritmo de ordenación rápida, o la comprensión de lista enlazada de recorrido no es realmente de modo utilidad en el entorno de la ingeniería de software de hoy - por supuesto, la comprensión de la teoría es útil para la elección de las herramientas adecuadas para el trabajo , no me malinterpreten. Como desarrolladores, muchos de nosotros dependemos de la salida del mundo de la informática para promover nuestras herramientas de desarrollo, de hecho, sin ellos muchos desarrolladores quedaría forcejeo, pero poner un graduado de ciencias de la computación en frente de un usuario y hacer que el diseño de un pieza significativa de software para ellos y el intelecto académico se va a caer a pedazos porque los dos hablan completamente diferentes idiomas.

Un curso mucho más útil para los ingenieros de software podría incluir el mayor número [y posiblemente más] de los siguientes componentes que se me ocurre de la parte superior de mi cabeza:

  • Lenguaje de Programación - el flujo del programa básico, paradigmas, sintaxis, etc. Esto es sobre todo enseñó bastante bien, por lo que no se pegue en este caso demasiado. A pesar de que sería útil si se les enseñó unas pocas clases completamente diferentes de los lenguajes de programación - por ejemplo, aprendí C, Pascal y VB 3 (No recuerdo la versión exacta?). Sería manera más útil si los programadores aprendieron al menos una lengua funcional, un lenguaje imperativo, un lenguaje declarativo.
  • Depuración - Al escribir aplicaciones nTier [lo que muchos / la mayoría de las aplicaciones del mundo real son], sería útil ser capaz de averiguar donde algo va mal, hasta el nivel de protocolo si es necesario. herramientas de análisis como WireShark son útiles para esto.
  • Dispositivos de comunicación -. XML, XQuery, XPath, XSL, XSD [ya que estos parecen ser utilizado tan extensamente]
  • Base de Datos Relacional Diseño -. Esto se enseña razonablemente bien ya
  • Rendimiento de Base de Datos Relacional sintonización - Simplemente el diseño de las tablas no es suficiente, saber cuándo es apropiado para indexar ciertos campos, y cuando no lo es, también es importante y no parece estar cubierto de un montón de cursos.
  • Normalización de datos Esto también parece ser enseñado razonablemente bien en muchos casos. Aunque la mayoría de los estudiantes parecen salir al mundo real arrojando las teorías que les enseñaron - "has de utilizar siempre Boyce Codd en forma normal", etc., sin tener que pensar en las consecuencias de esas teorías. A veces, en el mundo real que tenemos muy buenas razones rompen las reglas.
  • Optimización de consultas - Escribir consultas básicas a menudo parece estar en los límites exteriores de las zonas de confort graduados, optimización debe ser enseñado. Además, las herramientas como perfiladores de consulta deben aprender a ayudar a los estudiantes los problemas de rendimiento de depuración con las aplicaciones.
  • los procedimientos / disparadores - Todavía no he llegado a través de un estudiante que podría escribir un procedimiento almacenado o desencadenador o utilizar cualquiera de ellas de manera efectiva. Selecciona / UNE A / anidados Selecciona parece ser el límite de lo que se enseña cuando se trata de diseño de consulta.
  • Algoritmos básicos - Esto se enseña Farley bien en mi experiencia, pero muchos de los estudiantes no parecen tener alguna idea de cómo decidir qué algoritmos se aplican a qué situaciones sin ser dicho "el uso de tales y un algoritmo tal, a resolver este problem". Sería útil si se podría decir, 'a resolver este problema', y son como, bueno, tengo una flota de algoritmos que serían útiles en esta situación, este es el mejor porque de x, y o Z razón y aquí es cómo se puede aplicar para proporcionar una solución.
  • recursión - Yo todavía tengo que encontrar un enfoque que puede enseñar a la recursividad, parece que cualquiera que lo consigue o no. Uno de estos días voy a encontrar una buena metáfora que hará que esta comprendido por el programador incluso más básico.
  • abstracción -. Esto parece ser algo que una gran cantidad de cursos reste importancia a pesar de ser uno de los principios fundamentales de la programación orientada a objetos
  • Código Refactoring -. Conociendo a cuando para refactorizar y casi tan importante, cuando no a
  • reutilización de código - Parece que una gran cantidad de cursos están escupiendo corte monos / pegar - esto es no lo que la reutilización de código se supone que significa
  • Control de código fuente - Yo no aprendió acerca de control de código fuente hasta que mi tercera o cuarta trabajo de programación, y no sé un solo ingeniero de software personal que aprendió control de código fuente como parte de su curso. .. ¿Por qué?
  • Copia de seguridad y restauración - Yo no he oído hablar de cualquier curso que enseña esto. ¿Cuántos programadores principiantes han perdido todo su trabajo porque simplemente no piensan sobre la copia de arriba? Sé que tengo en el pasado - no recientemente, sin embargo. No es que yo era ignorante de la copia de seguridad, pero como dice el refrán "que nunca va a pasar a mí". Es te suceda, y garantizó que va a estar bien antes de tener que demostración de todo lo que acaba de perder!
  • archivo de mantenimiento del sistema -. Está bien, algunos de los cursos pasan por alto esto brevemente, pero muchos no lo hacen
  • escribir las especificaciones de diseño de buena calidad - Esto siempre parece ser proporcionado como un breve trabajo de curso, pero el estudiante rara vez se le pide a diseñar por sí mismos. Escribir un ámbito de trabajo y la comprensión de las plantillas de documento parece estar lejos fuera del alcance de la mayoría de los cursos de software.
  • Documentación de usuario - Los usuarios no piensan como usted, les entrega un software que es "explica por sí mismo" o "tan simple idiota puede usarlo" va a estallar en la cara. Hay un famoso dicho de que "La programación hoy es una carrera entre los ingenieros de software luchando para construir programas a prueba de idiotas más grandes y mejores, y el Universo tratando de producir mayores y mejores idiotas. Hasta el momento, el universo está ganando". Escribir documentación del usuario que un niño de 8 años puede seguir -. Podría parecer doloroso para escribirlo, pero una vez que se hace, y para siempre, que se agradecerá
  • Documentación técnica -. Es decir, sería útil si los estudiantes podrían utilizar Castillo de arena, o cualquier NDoc herramientas de documentación
  • Planificación de prueba - el diseño de las pruebas y el software que permite realizar pruebas. nUnit o similar sería una gran herramienta para enseñar en los cursos de desarrollo de software. De hecho, la enseñanza de cualquier marco de pruebas sería mejor que no enseñar cualquier ... como parece ser el caso.
  • FAT / SAT / UAT Prueba - Sería de gran ayuda para comprender diversos escenarios de prueba en el mundo real, tales como chequeos, pruebas de aceptación en fábrica y pruebas de aceptación del usuario. Salir de ella durante su software es tan crítica como desarrollarla. Si usted no entrega lo que el cliente pensaba que estaban recibiendo, no están pagando -. No importa lo brillante que la solución está en el buen aspecto técnico
  • Arquitectura de Software -. Comprensión de los diferentes componentes del mundo real de N-Capas aplicaciones, ventajas e inconvenientes de su uso
  • La interacción con los usuarios - Tal vez esto no es realmente la informática, pero aprender cómo hablar con las personas que no están a menudo en su longitud de onda y no piensan de la misma manera lo hace, THes va con la comunicación, pero es realmente algo desarrolladores tienen que tener en cuenta.
  • Sentido Común - Ding, ding, ding, ding - hay una gran cantidad de programadores por ahí sin una onza de esto! Los cursos están diseñados para demostrar que se puede pensar por sí mismo, no entiendo por qué tantos graduados entran en el mundo real pensar que todo lo que necesitan hacer es aplicar las reglas que les enseñaron a ciegas sin pensar en razones e implicaciones. Voy a repetir lo que he dicho anteriormente - en el mundo real a veces encontramos muy buenas razones para romper las reglas. No seguimos a ciegas, y no rompemos ciegamente tampoco. El desarrollo de software es un arte, y como todas las artes hay que saber cuándo podemos y no podemos y tan importante cuando debemos y no debemos romper las reglas. Como graduado, usted ha aprendido las reglas, usted ha demostrado. Ahora tiene que hacer lo que el curso estaba realmente tratando de enseñarle -. Aplicar lo que ha aprendido a pensar por sí mismo
  • Escuchar - Usted se sorprendería de la cantidad de veces que veo el código escrito porque el desarrollador "creía saber lo que el cliente quería" en lugar de realmente escuchar lo que el usuario está diciendo y la comprensión de su real necesidades.
  • Comprensión -. Va de la mano con la escucha
  • Las habilidades de comunicación
  • Hablando con la técnicamente inepto - es decir, una gran parte de su base de usuarios
  • Proyecto de Mediación - vender sus ideas a los que escriben los cheques
  • Priorización -. Cómo decidir qué características son más importantes que otros
  • Presupuesto - la estimación del tiempo
  • Gestión del Tiempo - cómo conseguir las cosas a tiempo, cuando todos a tu alrededor está impidiendo en su tiempo y no tiene cuidado de los plazos de entrega. Al igual que cuando todos sus amigos que están esperando para ir al pub para una pinta o diez cuando se tiene una pieza, por supuesto, el trabajo no ha comenzado todavía debe en el final del día de mañana.
  • arrastramiento del alcance - cuándo decir, no, eso no está en la especificación / presupuesto
  • .

E incluso si hicieron arreglan para aprender todo lo que en su curso, me atrevo a decir que le Todavía aprender más de cada tres o cuatro meses de prácticas en una de desarrollo de software consultoría de un callibre decente que en todo el curso. He aprendido más en mis primeros 6 meses después de mi licenciatura de lo que hice en mi curso entero de 3 años. Es cierto que me he caído de plano la cara sin muchas de las cosas que aprendí en ese curso, pero había tanto que enseñaron innecesaria que podría haber sido reemplazado por el contenido mucho más útil.

Otros consejos

La clase en la que pasa su verano en un software de escritura real de la empresa.

En serio - CS clases no están destinados a producir buenos programadores. Están destinados a producir los informáticos que, como efecto secundario, también puede escribir software.

Ciencias de la Computación! = Programación.

Si está buscando mejores programadores, buscar gente con la educación de un programa universitario de 2 años que se centra específicamente en eso.

No hay nada como los conocimientos adquiridos por los proyectos de construcción, que en realidad no importa que por supuesto es que, si usted está tomando las bases de datos relacionales supuesto construir un proyecto de sistema de bibliotecas, si usted está tomando el lenguaje ensamblador construir algo como herramientas de PC con 32 / conjunto de 64 bits.

Sólo se puede llegar a ser mejor programador haciendo "Programación" no sólo tomando cursos y conseguir un alto promedio.

La más importante y relevante no son cursos de CS. Usted tendrá que comunicar bien. Cualquiera que sea cursos que puede llegar a ser un mejor oyente / lector y un mejor escritor / hablante.

  • Negocios 101
  • Política de la oficina 200
  • Nada es nunca académica en el mundo real

En realidad, entrar en un trabajo de programación que no se espera que sea un desarrollador de alto nivel desde el día 1. Aprender algunos de los fundamentos de codificación sin duda le lleva un largo camino, pero en el repunte, veo un buen número de estudiantes de informática en la lucha el mundo real, ya que no se sabe muy bien lo que están recibiendo en sí mismos el día 1. ellos luchan con los dominios de negocio y entender por qué hacen lo que hacen. Ellos no saben que se comunique con otras personas de negocios.

Esa es una pregunta difícil de responder, pero una cosa que creo que obstaculiza programadores en una gran cantidad de programas CS es la falta de práctica en la codificación. Es importante conocer la teoría de la informática, pero creo que una gran cantidad de programas CS altamente teóricas caen al no requerir ejercicios de programación en sus clases. Por ejemplo, he visto un montón de clases de IA que requieren investigación y papeles, pero ningún código. En mi opinión, es muy importante entender la teoría de la informática, pero es igualmente importante ser capaz de aplicarlo.

Creo que el vacío académico debería ser llenado por organizaciones estudiantiles o proyectos estudiantiles independientes.

En mi universidad teníamos la Asociación de maquinaria informática capítulo estudiantil específicamente para estudiantes de informática y también teníamos una organización estudiantil dedicada al desarrollo de videojuegos.Estas organizaciones ayudaron a enseñar a los estudiantes sobre el "mundo real" al traer oradores de la industria y obligaron a los estudiantes a trabajar entre sí.

También recomendaría que los estudiantes que se especializan en Ciencias de la Computación con especialización en Negocios si están interesados ​​en liderar grupos de software o si los estudiantes quieren volverse más expertos técnicamente, tengan una especialización en Artes Liberales.Sé que parece extraño, pero hice esto y descubrí que en realidad te enseña cómo pensar fuera de una perspectiva puramente técnica y matemática y cómo aplicar el pensamiento humano al desarrollo de software.

Yo diría que es un empate entre los sistemas de base de datos y un curso de Proyectos de Ingeniería de Software. Ni por supuesto que se requiere para un título de grado en mi escuela, pero puede ser tomado por estudiantes universitarios. Tener algún conocimiento de las bases de datos es probablemente más necesario que los algoritmos para la mayoría de los programadores. Trabajando en un equipo de proyecto, incluso en un proyecto de curso, puede ayudar a entender la dinámica del equipo y la forma de trabajar en un ambiente de equipo.

Por otro lado, creo firmemente que una buena comprensión de los temas fundamentales de la informática, incluyendo estructuras de datos, algoritmos, sistemas operativos, etc. son fundamentales para preparar uno para crecer como programador.

Los dos más relevantes para el lugar de trabajo de mi carrera de Ingeniería de Software de la Universidad de Sheffield eran el módulo de software Hut en el segundo año, que involucró a lo largo de un término en los equipos de producción de un producto de software para un cliente real mundo. Había tres clientes diferentes, creo, y equipos compitieron entre sí para producir el mejor sistema para ellos.

A continuación, en el cuarto año de un tercio de las marcas años venía de dirigir una compañía de software, una vez más para los clientes del mundo real. Aunque no es del todo como el funcionamiento de un negocio real, debido a las restricciones de IP en cualquiera de los productos que produjo (ya que aún eran estudiantes en la Universidad, que poseían la obra), hicimos participar en la mayoría de los aspectos de funcionamiento de la empresa - prohibir cualquier la escritura de contabilidad / contrato.

Diseño de base de datos

La programación funcional

Programación orientada a objetos

x Driven Design

Mi opinión (como un director que Inglés) es que un día en una oficina es digno de una semana en la escuela y, como tal, si se puede fidn una manera de conseguir un poco de experiencia que valdrá la pena.

Aparte de eso simplemente tener confianza en su abilty, jugar con sus puntos fuertes y estar preparados para cualquier cosa que google no sabe!

Si desea destacar entre la multitud habitual de TI a continuación, asegúrese de que usted es capaz de comunicarse correctamente, ya que es increíble la cantidad de 'top' graduados no pueden.

Mejores programadores derecha de la universidad? Hasta que las escuelas comienzan la enseñanza de conceptos como la cohesión, acoplamiento, buenas prácticas de programación, control de versiones, gestión de la configuración, los modelos de desarrollo modernos - Yo no lo creo. Lo que veo es comúnmente estudiantes autónomos que desean hacer lo correcto aprendizaje por su cuenta o si tienen suerte son contratados en una organización que predica y practica cosas buenas.

Todo depende de lo que quieras programar y del tipo de problemas que te interesen.

Obviamente la combinación general de

  • Matemáticas discretas (tu lógica, teoría de grafos, algo de teoría de números y recurrencia)

  • Diseño de algoritmos (aprender varios modelos de resolución de problemas, paradigmas de diseño, pensar en recursos informáticos)

  • Ingeniería de software (administrar proyectos de software, trabajar con componentes existentes, trabajar con pares o en grupo, controles de versiones, patrones, etc.) como esto

  • Programación intensiva cursos (tomé este curso) que le enseñan ideas generales sobre cómo abordar un problema, reunir su pensamiento antes de escribir una sola línea de código, exposición a diferentes paradigmas de programación

    Lo preparará para la mayoría de los desafíos de programación.

Después de eso, todo depende del dominio en el que quieras trabajar.Pregúntele a su asesor, a los estudiantes del último año de su universidad y a sus profesores y hable con ellos sobre sus objetivos e intereses.Ellos le aconsejarán mejor que nadie aquí.

Sin embargo no ignores el pensamiento crítico y las clases de escritura.Toma clases que te permitan presentar tus ideas y prepararte para hablar en público.

Creo que el curso que he tomado me dieron la mayor parte de los Estructuras de datos y algoritmos . El conocimiento es independiente del progreso de la tecnología, y proporciona las herramientas básicas utilizadas por los programadores de todo tipo.

Una clase que habíamos requerido para nosotros construir algo como un proyecto de servicio a la comunidad de las clases. Esto nos obligó a utilizar y aprender todo el ámbito de Ingeniería de Software.

No obstante menos que el maestro decide poner unos cuantos chiflados en la clase cuyo objetivo es tratar de hacer las cosas lo más difícil posible, un curso como éste será bastante escasa ...

Estructuras de Datos y Algoritmos supuesto, durante mi licenciatura, me ayuda mucho en mi lugar de trabajo

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