¿Qué habilidades son esenciales para la programación profesional que no se enseña comúnmente en las escuelas? [cerrado]

14

Soy un estudiante de primer año de informática. Fui a una feria de trabajo, repartí currículums, para mi sorpresa, obtuve una entrevista y, finalmente, una pasantía como desarrollador.

Le expliqué al entrevistador (que será mi jefe) que solo tengo un primer año y que no tengo mucha experiencia en programación. Simplemente me dijo que porque tengo una sólida formación en matemáticas (ya casi terminé mi licenciatura en matemáticas, además de que tengo algunos cursos de posgrado), confía en que lo haré bien.

Lo hago bien en todos los cursos de programación, pero todavía siento que estoy en desventaja. En este momento, solo quiero hacerlo bien en este trabajo cuando comience. El trabajo usará principalmente C #, pero además de aprender algo de C #, ¿cuál es la habilidad que desearías haber aprendido antes de convertirte en un verdadero programador?

Cualquier consejo es muy apreciado, pero si tienes algún libro en mente, dímelo. Gracias!

    
pregunta Eric 20.04.2013 - 19:17
fuente

12 respuestas

21

En la escuela, aprendes a escribir código. Lo que no aprendes es el resto del desarrollo de software. Las principales cosas de las que nunca aprendí nada en la escuela son:

  • trabajando como parte de un equipo de desarrollo
  • utilizando el control de versiones
  • utilizando un rastreador de errores

Estas son habilidades muy importantes para cualquier desarrollador, y no es probable que las obtengas en un aula, desafortunadamente.

    
respondido por el Mason Wheeler 20.04.2013 - 19:37
fuente
20

Desearía haber sabido anteriormente en mi carrera que como desarrollador, tengo un papel muy importante en el negocio . No soy solo un código mono.

Como desarrollador, tiene una gran participación en las partes del negocio relacionadas con el software en el que está trabajando.

Si su empresa no escribe pruebas para su código, comience a escribir pruebas ahora.

Si no rastrean los errores, encuentre un rastreador de errores adecuado ahora.

Si su jefe quiere que comience a trabajar de inmediato en una animada animación para la pantalla de bienvenida de la aplicación de la hoja de cálculo, pero aún tiene docenas de errores que corregir y varias características importantes sin terminar antes de la próxima fecha límite de lanzamiento del cliente, converse sobre priorizando correctamente el trabajo.

Incluso si solo es un "empleado normal", actuar como un consultor es una excelente manera de diferenciarse de otros desarrolladores que simplemente escriben código y no actúan como si tuvieran un interés personal en el negocio.

    
respondido por el Mark Rushakoff 20.04.2013 - 19:31
fuente
9

Mi escuela nunca me enseñó a resolver problemas. Ellos me enseñaron los mecanismos de codificación, pero poder estudiar un problema, entenderlo y encontrar una solución es algo que no enseñaron. Requiere paciencia, rigor e intuición además de la comprensión de un lenguaje de programación.

Tampoco enseñaron sobre el trabajo en equipo, sobre el control de versiones y sobre la importancia de escribir código que sea fácil de mantener. Tampoco enseñaron mucho sobre cómo probar el software. Es posible que hayan tocado pruebas de unidad, pero no se adentraron demasiado en los conceptos de pruebas de aceptación, pruebas de regresión, etc.

Descargo de responsabilidad: Fui a la universidad en los años 80. Sin embargo, veo evidencia de esto en las personas que contrate hoy: recién graduados que tienen muy poco conocimiento del mundo real de la programación: control de versiones, pruebas, codificación limpia, habilidades de depuración, etc.     

respondido por el Bryan Oakley 20.04.2013 - 21:51
fuente
7

En mi opinión, algunas de las cosas más importantes que no se aprendieron (o que no se aprendieron correctamente) en la escuela son:

  • Cómo usar apropiadamente e IDE; El uso de toda la potencia de un IDE moderno proporciona un enorme aumento de productividad: refactorización automática, navegación de códigos, integración de VCS, análisis de códigos, finalización de códigos, etc.
  • Cómo utilizar correctamente un depurador: depuración remota, depuración de aplicaciones de subprocesos múltiples, evaluación rápida, etc.
  • Corrección de errores y mantenimiento; en la universidad no te enseñan casi nada sobre esto, pero en la industria es bastante común corregir errores.
  • Cómo trabajar en un equipo grande y en un proyecto grande; Básicamente en la universidad, los proyectos son un poco pequeños, en comparación con los grandes proyectos industriales.
  • Cómo escribir un buen código y cómo poner énfasis en la legibilidad; esto viene con experiencia, pero hay algunos libros que le enseñan lo básico (Código Completo, Código Limpio, etc.).
  • Cómo utilizar un marco de trabajo en toda su potencia, utilizando su personalización; en la universidad quizás aprendiste a usar algunos marcos en algunos escenarios muy básicos; en la industria llegarás a los casos de esquina.
  • Cómo entender y escribir código después de la especificación; probablemente aprenderá cómo escribir especificaciones, pero ahora cómo leerlo y cómo interpretarlo

Los VCS, los sistemas de seguimiento de errores, las herramientas de construcción, etc. son herramientas que debe aprender para poder trabajar con un equipo; no requieren mucho tiempo para aprender a un nivel básico, y son bastante sencillos después de eso (al menos al principio); la lista anterior contiene sutilezas que, si se conocen, aumentan su productividad.

    
respondido por el m3th0dman 11.05.2013 - 14:12
fuente
4

Lo más importante que no veo en los nuevos graduados es una buena comprensión del control de versiones.

Si tiene experiencia en el desarrollo de software de código abierto utilizando repositorios de código fuente (como GitHub ) está un paso por delante de most de tus compañeros de clase.

Lo segundo es comprender la complejidad ( big O ). La mayoría de las personas fuera de la universidad han escuchado sobre esto, pero aún tienen que desarrollar software real en el que entra en juego y, por lo tanto, no entienden su importancia real.

Cuando los conjuntos de datos son tan grandes que la fuerza bruta nunca lo reducirá y la comprensión de otras técnicas es útil y poder adivinar cuándo la fuerza bruta estará bien para la situación, es algo que se desarrolla con experiencia los errores.

    
respondido por el Martin York 20.04.2013 - 19:53
fuente
3

Cómo depurar bien, especialmente usando un depurador y adoptar un enfoque adecuado para abordar un error, es decir, averiguar qué está causando, descubrir por qué lo está causando y comprender por qué su solución lo corrige en lugar de simplemente intentar cosas y esperar .

La mayoría de los graduados en ciencias de la computación son sorprendentemente deficientes en la depuración y, como resultado, toman mucho más tiempo para arreglar las cosas de lo necesario y crean más errores al hacerlo.

Otras cosas, como el control de versiones, el seguimiento de errores, etc., son dignas de mención, pero en mi opinión, la falta de enfoques sensatos para la depuración es un tema mucho más importante y que requiere más aprendizaje.

    
respondido por el Jack Aidley 10.03.2015 - 00:09
fuente
2
  

¿Cuál es la habilidad que desearías haber aprendido antes de convertirte en un verdadero programador?

     

En mi experiencia, mi escuela nunca me enseñó a resolver problemas.

En mi experiencia, la programación tiene que ver con resolver problemas. En mi escuela, solo comprobaron si se puede escribir un programa sin error de sintaxis. Lo que realmente se requiere no se da como entrada. La sintaxis es solo algo que puede consultar en cualquier libro si es necesario. Pero la capacidad de resolver un problema no se puede lograr desde cualquier lugar, excepto que practicas bien y te entrenas para ello.

Deja que sea de cualquier tipo, trata de completar tantas preguntas como sea posible para que tengas más confianza en ti mismo. Intenta hacerlo con algo de pasión en tu mente, y seguramente lo superarás.

    
respondido por el Abijith Kp 21.04.2013 - 14:07
fuente
2

Tómate un tiempo para aprender algunos patrones de diseño comunes: fábrica, singleton, adaptador, comando y observador (mi universidad no los enseñó).

Si la empresa utiliza la metodología Agile para el desarrollo de software, sería valioso comprenderla.

    
respondido por el user86834 21.04.2013 - 14:26
fuente
2

Muchas de las habilidades que necesitará como programador profesional son casi imposibles para cada una en un entorno universitario / académico.

Solo pueden provenir de la experiencia que trabaja directamente en el campo.

  • Aprenda a colaborar y comunicarse con personas ajenas a su "profesión", como diseñadores gráficos, diseñadores de productos, gerentes, etc.

  • Comprender que su trabajo no es escribir código, sino dar vida a un producto. Es más fácil decirlo que hacerlo.

  • Saber cómo equilibrar las buenas prácticas de codificación con consideraciones prácticas. Adquirir la capacidad de juzgar cuándo el código es "suficientemente bueno", "sobre diseñado" o "necesita refactorización".

  • Aprendiendo a superar tus propias debilidades e inseguridades. Adquirir la capacidad de soportar las críticas. Dejar ir a tu ego. Aprender lo que significa asumir la responsabilidad personal y luego tomarlo.

Es fácil leer sobre todo esto. Es algo completamente diferente para poner esto en práctica. La única manera es hacerlo. Serás mordido muchas veces y probablemente te dolerá, pero saldrás más fuerte y mejor.

Lectura relevante: Patrones de aprendizaje

    
respondido por el hasen 10.03.2015 - 12:14
fuente
1

Todo depende de la escuela. En mi colegio, tenemos muchos proyectos prácticos. Muy a menudo en equipos y utilizando varios controles de origen. Así que creo que algunas escuelas se centran en ellas.

Pero una cosa que la escuela no enseña: detalles. Muy a menudo, cuando la escuela enseña algo de tecnología o práctica (como el desarrollo web, el desarrollo de interfaz de usuario de JAVA, las bases de datos avanzadas), solo rascarán la superficie y nunca entrarán en detalles, que serían necesarios para utilizar esta tecnología o práctica en negocios del mundo real. Obtendrá una descripción general de las formas posibles de resolver sus problemas, pero tendrá que aprender los detalles necesarios.

El único momento en que la escuela enseña algo en detalles es cuando hay una base matemática o teórica sólida detrás de algo. Cosas como los lenguajes formales o las bases de datos SQL son a menudo parte central del currículo escolar, porque se basan en una base matemática y se usan mucho en informática o ingeniería.

    
respondido por el Euphoric 20.04.2013 - 22:35
fuente
1
  • requisitos: hacerlos mal y descansar es principalmente un desperdicio
  • prioridades (la función en la que se publica)
  • hacer o usar fuera de la caja (comprar / freeware)
  • trabajo en equipo
  • gestión de proyectos: requisitos, calidad (muestras de datos en prod, casos de prueba, cómo realizar pruebas, cobertura antes de codificar, hay un costo similar pero no relevante. lea un libro de PMI
  • herramientas de comunicación (correo, reuniones: planificador de calendario)
  • gestión de código fuente
respondido por el tgkprog 21.04.2013 - 15:57
fuente
0

Desearía haber decidido mucho antes en el juego si quisiera o no ser un programador general, aprender muchas cosas, idiomas, bases de datos y plataformas diferentes y eventualmente convertirme en un desarrollador web, o debería especializarme en Un CMS, o incluso simplemente especializarse en Photoshop, al ser un especialista, sus habilidades serían tan valiosas y rentables que las de un programador real. En otras palabras, si solo necesitas ganar un buen dinero, especialízate en UNA COSA. Si amas la computadora y te encanta resolver problemas, entonces sé un programador.

[reflexionando sobre y después de aprender como 4 o 5 'frameworks' de javascript diferentes antes de que JQuery realmente fuera fuerte, se certificara en JAVA y nunca obtuviera una posición java, y después de trabajar en múltiples plataformas; AS400- rpg, > .NET - c #, y PHP, antes de desear que acabo de dominar Photoshop y ganar el mismo dinero sin tener que corregir errores o escribir software. ]

Quiero decir que hay una cierta satisfacción al conocer una amplia gama de temas, pero la satisfacción se ve obstaculizada cuando ves a alguien que sabe que el photoshop cobra el mismo cheque de pago.

    
respondido por el Eric 11.05.2013 - 13:50
fuente

Lea otras preguntas en las etiquetas