Soy estudiante de primer año de ciencias de la computación. Fui a una feria de trabajo, entregué hojas de vida, 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 no tengo mucha experiencia en programación. Simplemente me dijo que debido a que tengo una sólida formación en matemáticas (casi he terminado mi licenciatura en matemáticas, además tengo algunos cursos de posgrado en mi haber), confía en que lo haré bien.
Me va bien en todos los cursos de programación, pero todavía siento que estoy en desventaja. En este momento, realmente solo quiero hacer el bien en este trabajo cuando comience. El trabajo utilizará principalmente C #, pero además de obviamente aprender algo de C #, ¿cuál es la habilidad que desearía haber aprendido antes de convertirse en un verdadero programador?
Cualquier consejo es muy apreciado, pero si tiene algún libro en mente, dígalo. ¡Gracias!
Respuestas:
En la escuela, aprendes sobre cómo escribir código. Lo que no aprende es el resto del desarrollo de software. Las cosas principales de las que nunca aprendí nada en la escuela son:
Estas son habilidades muy importantes para cualquier desarrollador y, desafortunadamente, no es probable que las obtenga en el aula.
fuente
Ojalá supiera al principio de mi carrera que, como desarrollador, tengo un papel muy importante en el negocio . No soy solo un mono código.
Como desarrollador, tiene una mano importante 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 errores, encuentre un rastreador de errores apropiado ahora.
Si su jefe quiere que comience a trabajar de inmediato en una animación elegante para la pantalla de inicio de su aplicación de hoja de cálculo, pero aún tiene docenas de errores que corregir y varias características críticas sin terminar antes de la próxima fecha límite de lanzamiento del cliente, tenga una conversación sobre priorizar correctamente el trabajo .
Incluso si usted 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.
fuente
Mi escuela nunca me enseñó a resolver problemas. Me enseñaron la mecánica de la codificación, pero poder estudiar un problema, comprenderlo 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 las pruebas unitarias, pero no profundizaron 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 con las personas que contrato hoy: recién graduados que tienen muy poco conocimiento sobre el mundo real de la programación: control de versiones, pruebas, codificación limpia, habilidades de depuración, etc.
fuente
En mi opinión, algunas de las cosas más importantes que no se aprenden (o se aprenden adecuadamente) en la escuela son:
VCS, sistemas de seguimiento de errores, herramientas de compilación, etc. son herramientas que está obligado a aprender para poder trabajar con un equipo; no requieren mucho tiempo para aprender en 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.
fuente
Lo que más me falta de los recién 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
most
de sus compañeros de clase.Lo segundo es una comprensión de la complejidad (
big O
). La mayoría de las personas que no asisten a la universidad lo han escuchado, pero aún no han desarrollado un software real donde entra en juego y, por lo tanto, no entienden su importancia real.Cuando sus conjuntos de datos son tan grandes que la fuerza bruta nunca lo va a cortar 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 desarrolla con experiencia y comete los errores.
fuente
Cómo depurar bien, especialmente usando un depurador y tomando un enfoque adecuado para abordar un error, es decir, averiguar qué está causando, averiguar por qué lo está causando y comprender por qué su solución lo soluciona en lugar de simplemente intentar cosas y esperar.
La mayoría de los graduados en ciencias de la computación son sorprendentemente pobres en depuración y, como resultado, tardan mucho más en arreglar las cosas de lo necesario y crean más errores al hacerlo.
Vale la pena mencionar otras cosas, como el control de versiones, el seguimiento de errores, etc., pero en mi opinión, la falta de enfoques razonables para la depuración es un problema mucho mayor y requiere más aprendizaje.
fuente
En mi experiencia, la programación se trata de resolver problemas. En mi escuela solo estaban verificando si puedes escribir un programa sin error de sintaxis. Lo que realmente se requiere no se proporciona como entrada. La sintaxis es algo que puede buscar en cualquier libro si es necesario. Pero la capacidad de resolver un problema no se puede lograr desde ningún lado, excepto que practiques bien y te entrenes para ello.
Deje que sea de cualquier tipo, intente completar tantas preguntas como sea posible para que pueda generar cierta confianza en usted mismo. Intenta hacerlo con un poco de pasión en tu mente, y seguramente lo superarás.
fuente
Tómese un tiempo para aprender algunos patrones de diseño comunes: fábrica, singleton, adaptador, comando y observador (mi universidad no les enseñó).
Si la empresa utiliza la metodología Agile para el desarrollo de software, sería valioso tener alguna comprensión de ella.
fuente
Muchas de las habilidades que necesitará como programador profesional son casi imposibles para cada uno en un entorno universitario / académico.
Solo pueden provenir de la experiencia trabajando directamente en el campo.
Aprender 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 equilibrar las buenas prácticas de codificación con consideraciones prácticas. Adquirir la capacidad de juzgar cuando el código es "suficientemente bueno", "sobredimensionado" o "necesita refactorización".
Aprender a superar tus propias debilidades e inseguridades. Adquirir la capacidad de resistir las críticas. Dejando ir tu ego. Aprender lo que significa asumir la responsabilidad personal y luego asumirla.
Es fácil leer sobre todo esto. Es algo completamente diferente poner esto en práctica. La única forma es hacerlo. Serás mordido muchas veces, y probablemente te dolerá, pero saldrás más fuerte y mejor.
Lectura relevante: patrones de aprendizaje
fuente
Todo depende de la escuela. En mi universidad, tenemos muchos proyectos prácticos. Muy a menudo en equipos y usando varios controles de fuente. Así que creo que algunas escuelas se centran en eso.
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 desarrollo web, desarrollo de interfaz de usuario JAVA, bases de datos avanzadas), solo rascarán la superficie y nunca entrarán en detalles, eso sería necesario para usar esta tecnología o práctica en negocios del mundo real. Obtendrá una visión general de las posibles formas de resolver sus problemas, pero deberá aprender los detalles necesarios.
Solo cuando la escuela enseña algo en detalles es cuando hay una sólida base matemática o teórica detrás de algo. Cosas como los lenguajes formales o las bases de datos SQL a menudo son parte central del plan de estudios de la escuela, porque se basan en una base matemática y se usan mucho en informática o ingeniería.
fuente
fuente
Desearía haber decidido mucho antes en el juego si quería o no ser un programador general, aprender muchas cosas diferentes, idiomas, bases de datos y plataformas, y eventualmente convertirme en desarrollador web, o si debería especializarme en un CMS, o incluso especializarse en Photoshop, como especialista, sus habilidades serían tan valiosas y rentables como saber lo que un verdadero programador debería saber. En otras palabras, si solo necesita ganar un buen dinero, especialícese 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' javascript diferentes antes de que JQuery realmente saliera bien, obtener la certificación en JAVA y nunca obtener una posición de Java, y después de trabajar en múltiples plataformas; AS400- rpg,> .NET - c # y PHP, antes de desear que acabara 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 solo conoce el efectivo de Photoshop con el mismo sueldo.
fuente