¿Cómo puedo convertirme en un mejor ingeniero de software, dada una sólida formación en informática?

Hay cinco tipos muy diferentes de habilidades y conocimientos que se necesitan para tener éxito en la ingeniería de software:

  1. Dominio técnico de un rango suficiente de disciplinas centrales de CS: el espacio tecnológico de la ingeniería de software, que incluye lenguajes, herramientas, modelos y métricas, semántica y análisis, patrones y marcos, concurrencia, elementos de proceso, etc. Tener una verdadera profundidad en un conjunto representativo de tecnologías y prácticas actuales (en cada una de estas áreas) es más importante que las elecciones exactas de qué áreas en particular.
  2. Una apreciación y respeto por el proceso y sus elementos, particularmente los procesos ágiles de equipos pequeños y las personas que los promulgan. Una vez más, los modelos de procesos particulares (ágil, scrum, kanban, xp, etc.) importan menos que la comprensión de la infraestructura del desarrollador y del equipo, la voluntad de ser miembro del equipo, la comprensión de la dinámica de los equipos humanos y la capacidad de respetar las reglas aparentemente arbitrarias de participación en equipo. Para proyectos más grandes, también se trata de comprender los habilitadores arquitectónicos del modelo de equipo pequeño.
  3. Una comprensión de cómo emprender proyectos de diseño creativo. Esto significa apreciar las realidades gemelas del riesgo de ingeniería y la deuda técnica, cómo se evalúan y cómo se pueden mitigar de manera eficiente. En esencia, se trata de cómo innovar continuamente y lograr resultados exitosos.
  4. La capacidad de llegar al mundo y mantenerse actualizado e informado sobre el flujo y reflujo de los ecosistemas socio-técnicos que son la infraestructura de casi todos los proyectos de software. Raramente comienzas con una hoja de papel limpia, ni quieres hacerlo. Una vez más, la elección de sistemas particulares importa menos que tener una comprensión de cómo evaluar estos sistemas desde el punto de vista de las características técnicas y de mercado, y cómo participar, técnica y socialmente, para avanzar en la curva de aprendizaje de estos sistemas. Esto incluye la capacidad de leer el código y revisar el código. Al igual que la literatura, la capacidad de leer y criticar (y ser criticado) es un precursor esencial de la capacidad de escribir.
  5. Finalmente, la voluntad y la capacidad de trabajar continuamente para mantenerse al día con la tecnología. El ritmo de cambio es rápido, y las habilidades y el conocimiento pueden quedar obsoletos rápidamente sin una acción explícita para mantenerse al día. Al mantenerte actualizado y hacer de esto parte de tu rutina, ganas sabiduría de ingeniería y te conviertes en un jugador más valioso. Esto incluye la habilidad de aprender de otros expertos que estén dispuestos a revisar su trabajo, incluidos códigos, modelos y diseños, pruebas y análisis, planes de proceso, etc. Superar el miedo y comprometerse con el aprendizaje siempre son importantes, pero especialmente merecen atención explícita. elige ascender en los niveles gerenciales o ser un líder empresarial.

Desarrollar software en un equipo tiene mucho que las universidades no te enseñan tradicionalmente. Interpreto su pregunta como “si ya soy fuerte en teoría y habilidades y sé que también necesito mucha práctica, ¿qué más debería hacer para prepararme?”

Si eso no es lo que quieres decir, toma esta respuesta con un grano de sal.

Desarrollar en un equipo requiere muchas habilidades de las personas. Los desarrolladores de software junior a menudo son “junior” específicamente porque carecen de esas habilidades; no es raro ver a los desarrolladores junior con mejores habilidades “duras” que los desarrolladores de mayor rango y más altos. De hecho, es fácil volverse amargado por eso como desarrollador junior porque aún no puede ver lo que lo separa de ellos.

Aquí hay algunos ejemplos de esa separación:

– Más desarrolladores senior han estado haciendo esto por más tiempo y a menudo pueden estimar la dificultad de una tarea con mayor precisión. Esto es necesario para que los gerentes de varios tipos tengan una mejor idea de cuándo entregará ese software. Eso es absolutamente vital en los negocios, pero a menudo los desarrolladores lo consideran poco importante (“se hace cuando se hace”).

– Más desarrolladores senior a menudo comprenden mejor el clima de negocios que rodea su software y pueden priorizar las funciones y el esfuerzo de forma independiente porque saben qué partes de su software son más vitales para realmente * vender * ese software. Esto a menudo no está relacionado con la funcionalidad en bruto.

– Más desarrolladores senior a menudo comprenden mejor otros roles en la empresa (ventas, marketing, gestión, etc.) y pueden optimizar mejor su comunicación e incluso su software para ayudar a esas personas. ¿Cómo hace que el software sea fácil de demostrar de manera impresionante para que el marketing pueda mejorar con él? ¿Cómo lo hace más obvio * a medida que construye * qué partes aún no se han hecho, y cómo se hacen, para que la gerencia y las personas no técnicas entiendan el progreso? ¿Cómo se construye el software para que sea fácil ver su estado actual para personas no técnicas como la atención al cliente? ¿Cómo hace que sea amigable con las herramientas y la GUI para que personas no técnicas puedan interactuar con él?

– Los grandes ingenieros superiores tienen un profundo amor por la documentación y la automatización. Esto se debe a que otras personas adoptan sus cosas más fácilmente si su código lo tiene, y porque es mucho más fácil para usted recoger algo más tarde si lo hace trivial para cavar y comenzar.

– Más ingenieros superiores a menudo pueden adquirir nuevas herramientas y bases de códigos rápidamente porque pasan mucho más tiempo entendiendo y manteniendo códigos incorrectos. Hay muchas sub-habilidades para esto: es complicado aprender bien, y sobre todo solo necesitas mucha experiencia en ello.

Entonces, claro, ese es un pequeño argumento de venta divertido para desarrolladores senior experimentados. ¿Pero qué haces * tú * para convertirte en uno?

– Recoge el código incorrecto. Hay un montón de código abierto incorrecto, no tiene que ser específicamente un código incorrecto corporativo. Bifurca algo abandonado en GitHub con un conjunto de herramientas que normalmente no usas y comienza a jugar con él. Incorpore parte de esa documentación y automatización para que sea fácil comenzar. Y “malo” no tiene que ser generalizado. Simplemente elija algo que no sea terriblemente popular sin una rampa de acceso fácil para los nuevos desarrolladores.

– Leer libros de negocios, especialmente aquellos destinados a marketing, ventas, gestión y gestión de productos / proyectos. Las publicaciones de blog también ayudan, pero nada supera a un libro completo. Esta no es la mejor manera de aprender los roles de otras personas, pero (generalmente) es más fácil que rastrearlos a todos y vencerlos 😛

– Utilice una metodología de desarrollo real cuando trabaje, hasta escribir tarjetas de tareas, estimar tareas y mover las tarjetas entre columnas en un tablero. Te sentirás estúpido haciéndolo, pero nada mejor que haber trabajado de esa manera. Scrum y Extreme Programming son buenas opciones que no son demasiado difíciles de comenzar y no agregan demasiados gastos generales. La razón para hacer esto, por cierto, es ser bueno en la estimación. El resto del proceso puede ayudar un poco, pero la parte más importante es que divida los proyectos en subtareas y calcule esas subtareas. Luego, mira qué tan cerca estuviste cuando terminaste.

– Lea estudios de casos de empresas, éxitos * y * fracasos. Puede hacer esto con libros de negocios, pero también lea sobre eventos actuales (de negocios). Estás tratando de tener una idea de cómo los productos tienen éxito o fallan. Es un trabajo de por vida para hacerlo realmente bien, pero si le dedica quince minutos libres una vez a la semana, todavía está por delante de la mayoría de los desarrolladores.

Luego, haga las mismas cosas que sabe que necesita hacer. Como dices, desarrolla. Si se te ocurren proyectos que pueden ser útiles y luego los promocionas, eso te enseñará una gran cantidad del resto.

¡Ah, y asegúrate de que eres el único que tiene que mantenerlos! ¡Esa es la otra parte que debes aprender, operaciones básicas!

Estas son algunas de las cosas que son imprescindibles para la Ingeniería de Software pero que no se enseñan en el ámbito académico:

1. Escritura de código de calidad: por calidad, no solo quiero decir que el código debe estar libre de errores, sino que debe ser legible, mantenible y fácilmente extensible. Te sugeriré que pases por “Java eficaz” de Joshua Bloch (un alumno de tu universidad). Es una muy buena guía para diseñar una API y las personas, incluso de fondo no Java, pueden aprender mucho de ella. Estudiar patrones de diseño también te ayudará a este respecto.

2. Código de calidad de lectura: como muchos han dicho, un buen ingeniero de software dedica más tiempo a leer código que a escribirlo. Revise algunos proyectos existentes que tienen gran reputación por la calidad de su código. Vea ¿Cuáles son algunos de los proyectos de código abierto excepcionalmente bien diseñados para estudiar?

3. Productividad del desarrollador: utilice el conjunto de herramientas adecuado para aumentar su productividad. Intenta automatizar tanto como puedas. Esto puede ser útil para usted y para los miembros de su equipo.

4. Habilidades blandas: hacer estimaciones correctas para sus tareas, documentar su trabajo, se consideran atributos de un buen ingeniero de software.

Con una sólida formación en informática, lo que significa que ya es bueno en diseños algorítmicos, resolución de problemas, etc., para convertirse en un buen ingeniero de software, necesita aprender sobre software (productos) y le sugiero que aprenda sobre clases como Ingeniería de Software, Gestión de Proyectos de Software y Human Interacción con la computadora … el resto vendrá

Trabaja en más proyectos de equipo y en varias capacidades en cada equipo. Voluntario para los equipos de FOSS que necesitan el puesto que desea probar si uno no está disponible como su actuación principal o si su actuación principal no le permite cambiar de roles tan a menudo como le gustaría mejorar sus habilidades de ingeniería de software.

Aprenda habilidades valiosas que no solo lo ayudarán a mejorar en su trabajo, sino que también pueden aumentar su salario.

Habilidades que afectan los salarios de los ingenieros de software
Pitón
C
Linux
UNIX
JavaScript
Java
C ++
Oráculo
SQL
HTML
PHP
C#
.RED
ASP.NET
Microsoft SQL Server
Basado en el salario del ingeniero de software

En la actualidad, usted tiene una licenciatura en ciencias de la computación, por lo que mi consejo es que debe obtener el título de maestría porque este título lo ayudará a hacer su carrera más brillante y le brindará una experiencia detallada para comprender todos los fundamentos de la informática muy claramente.

La mayoría de las aplicaciones se alojarán en la nube. Sugiero comprender específicamente el desarrollo de SaaS, PaaS y las últimas herramientas de desarrollo proporcionadas para los primeros usuarios.

More Interesting

Como ingeniero senior sin una educación CS o SE significativa, ¿cómo puede dar forma a su camino profesional para seguir subiendo la cuesta de grandes y desafiantes problemas técnicos?

¿Cuánto cuesta la etapa de análisis de requisitos de una solución de software?

¿Puedo estudiar ingeniería mecánica e ingeniería de software al mismo tiempo en la universidad de Irlanda?

¿Cuál debería ser el enfoque para aprender lo básico y debe saber cosas (como la estructura de datos - algoritmos) relacionadas con la programación desde cero después de desmayarse de una rama que no es CSE?

¿Por qué los sitios web comenzaron a usar el nuevo reCAPTCHA incluso para las páginas de inicio y los clics por primera vez este año?

¿Cuál es el consejo de Adam D'Angelo para ingenieros de software principiantes?

¿Cuál es la relación entre la ingeniería de software y la informática?

¿Lo que un programador se llama a sí mismo realmente hace una diferencia en términos de cuán habilidoso se percibe que es?

¿Qué tipo de preguntas se hacen en una entrevista de desarrollo de software?

¿Cuáles son los conceptos principales que cualquier ingeniero de software debe conocer?

¿Qué compañías en Silicon Valley tienen la reputación de tener los "peores" ingenieros?

¿Por qué querría un nuevo ingeniero de software graduado unirse a Databricks sobre Cloudera, o viceversa?

¿Cómo se ve una buena solicitud de función (de un empleado no técnico)?

¿Qué antecedentes necesito para ser un buen ingeniero de sistemas integrados?

Cómo bloquear usuarios que cambian su dirección IP o usan un proxy