¿Qué aprendiste de la experiencia en ingeniería de software o al desarrollar proyectos de código abierto?

Hay muchos ángulos para esta pregunta, tantos que no sé por dónde empezar. En primer lugar, es importante darse cuenta de que, en la mayoría de los casos, el usuario no tiene una imagen clara o completa de lo que quiere. Por lo tanto, al comienzo del proyecto, el primer trabajo del desarrollador de software es obtener una visión circunspecta de los objetivos totales, y los activos, detalles y cabos sueltos del (los) entorno (s) del proyecto. Al alcanzar ese nirvana, es crucial contar con un plan y un plan por escrito y acordado de los objetivos, los recursos necesarios y el tiempo para el proyecto.

En segundo lugar, armado con el plan y la línea de tiempo, siempre es útil hacer un inventario detallado de las tareas y la ruta crítica de la creación de los elementos necesarios para completar el proyecto. Eso le permitirá distribuir las tareas al personal que tenga experiencia en cada una, y lo obligará a revolcarse en la especificidad de los detalles de las tareas. Ejemplos de esto podrían ser el empleo de varias tecnologías: bases de datos, CSS, PHP, HTML, etc., que son necesarias para completar varios aspectos del proyecto.

La sección anterior también proporcionará un inventario de artículos que podrá consolidar. Y aquí es donde los buenos ganan sus honorarios. En CADA proyecto hay oportunidades para incorporar eficiencias en la ‘máquina’. Esto requiere la capacidad de pensar de manera abstracta y ver analogías fundamentales en la creación de procesos. Al escribir esto, veo lo difícil que es describir la abstracción en el proceso de diseño del software, pero quizás pueda hacerlo con analogías. Si escribe software para ordenar inventario para una tienda, por ejemplo, puede tener un requisito para ordenar artículos para el hogar, hardware y herramientas. Obviamente, las personas separadas podrían ser responsables de cada uno de estos departamentos, por lo que una solución fácil podría ser presentar una página en blanco con campos desplegables que el usuario podría usar para completar su departamento. Un mejor enfoque podría ser hacer que el usuario declare su departamento, y luego hacer que el programa presente una lista de elementos que podrían ser apropiados para que él ordene. Si abstrae el proceso, solo tendría que escribir esto una vez y permitir que la base de datos llene la hoja correspondiente. Este es un ejemplo de abstracción de un proceso.

Ahora, aunque los diferentes departamentos tienen diferentes personas que ordenan, es probable que exista cierta superposición cuando se trata de los proveedores. Por lo tanto, algunos artículos de hardware, artículos para el hogar y herramientas pueden solicitarse a las mismas compañías. Por lo tanto, debería haber otro proceso que combine los pedidos a las empresas, al tiempo que permite la segmentación del proceso de pedido.

Se debe prestar especial atención al principio de ‘escribir una vez; usar muchas veces “. Un ejemplo de esto se demostró anteriormente, pero hay muchas veces en que uno de esos procesos se realizó en un proyecto anterior, que puede emplearse fructíferamente en el actual. Si es así, esto es algo feliz: feliz por usted porque el código y el proceso ya se han inventado y escrito, feliz por el cliente porque el código ya está implementado y depurado. Esta condición con frecuencia existe dentro de un proyecto, así como entre proyectos. Por lo tanto, es muy importante mantener una biblioteca y una ‘enciclopedia’ de rutinas y procesos a los que pueda hacer referencia y ‘pedir prestado’.

Pero para que esta técnica funcione, es necesario que tenga un conocimiento profundo de las piezas funcionales de sus rutinas y que pueda comprender cómo se pueden modificar para que sean aún más adaptables a las variaciones periféricas en su funcionamiento primario.

Probablemente, lo más importante que he aprendido a lo largo de los años es que la programación y el lenguaje de programación que usas suelen ser la menor de tus preocupaciones (a menos que TODO lo que quieras ser sea un codificador, en lugar de un ingeniero de software). Casi cualquier persona puede comprender los fundamentos de la programación, y la mayoría con práctica y experiencia puede llegar a ser al menos competente.

Las cosas que agregan complejidad a sus proyectos son cosas como

  • en realidad entender QUÉ se necesita construir,
  • cómo hacerlo utilizable (lo que puede ser utilizado por un desarrollador y lo que puede ser utilizado por un USUARIO es generalmente bastante diferente),
  • Cómo trabajar eficazmente en equipos de más de 1, 2 o 3

Hay muchas otras cosas, pero esto ilustra mi punto: la ingeniería de software es mucho más que la codificación.

La ingeniería de software tiene que ver con la actitud. Actitud hacia el proyecto, hacia el equipo con el que está trabajando y, en última instancia, hacia el cliente y sus necesidades. Con la actitud correcta, puede resolver cualquier cosa. Estoy hablando de la actitud cuando estás abordando un problema, cómo intentas resolverlo. Lo más importante es cómo trabaja con otros, cómo aprende del código de otros, cómo interactúa con ellos. Siento que el trabajo en equipo hoy en día es más importante que la habilidad personal.
Se puede dominar un idioma, pero al final, todos los proyectos requieren un subconjunto limitado del idioma. Hacer cosas simples es más importante que usar trucos y características avanzadas del lenguaje.
Entonces, si necesita un consejo: invierta su pasión en sus proyectos, manténgalo simple, manténgase abierto y las cosas funcionarán a su manera.

More Interesting

Cómo prepararse para un hackathon

¿Cómo se construyeron grandes proyectos de software para desarrolladores múltiples antes de la creación de redes informáticas?

Cómo arreglar mi programa para encontrar el k-ésimo elemento más pequeño en la unión de dos matrices ordenadas, para el tiempo O (k)

¿Podría realmente convertirme en desarrollador de software en algún momento en el futuro cercano?

¿Qué patrón de diseño (MVC / MVVM) utiliza en el desarrollo de iOS?

Trabajo con muchos lenguajes de programación todos los días. ¿Leer un montón de código y ajustarlo para mis propósitos sería un método de aprendizaje efectivo?

¿Cuáles son algunos conceptos / técnicas de control de calidad rápidos y fáciles que aumentarán nuestro nivel de control de calidad?

¿Cómo es posible que un error de software se pueda considerar como una característica (o viceversa)?

Soy un profesional de pruebas de software con 8.5 años de experiencia. Mi salario es de 3.8LPA. ¿Puedo seguir esperando sobrevivir, progresar y ganar bien en este campo?

¿Cuál es la diferencia entre un desarrollador de juegos y un ingeniero de software?

¿Cuáles son algunos ejemplos de actividades de gestión de configuración de software?

¿Cuál es el motor de juegos 3D de código abierto más avanzado?

Tengo 26 años con un título en informática trabajando como Consultor ERP en una pequeña empresa de software durante 1 año. ¿Qué educación / certificación adicional me dará ventaja?

¿Por qué los estudiantes de electrónica y comunicación van a trabajos de software?

¿Las pruebas de software son más fáciles que las de mainframe?