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

Me gustaría enumerar algunas de las cosas básicas que el ingeniero de software debe saber:

  • Conocer los sistemas de control de versiones para que pueda trabajar mejor en la organización.
  • Tener la capacidad de escribir notas de lanzamiento para sus proyectos, enviar mensajes para el control de versiones y documentación clara sobre el proyecto.
  • Ser capaz de expresar códigos largos a expresiones regulares.
  • Ser capaz de usar bibliotecas.
  • Conocer los conceptos básicos de la normalización de la base de datos y poder hacer SELECCIONES (incluidas las UNIONES INNER y OUTER básicas), INSERT, ACTUALIZACIONES y DELETES.
  • Ser capaz de usar IDLE, editores, herramientas CLI de manera efectiva y segura.
  • Ser capaz de depurar con un depurador interactivo.
  • Poder trabajar con el equipo.

Verifique Holberton una vez que desee si desea un enfoque de aprendizaje basado en proyectos. Abogamos por un enfoque de educación progresiva para aquellos sin experiencia previa en programación también. La escuela Holberton enfatiza principalmente en 4 puntos para convertirse en un gran ingeniero de software: tener un sólido conocimiento de la pila completa , capacidad de autoaprendizaje , habilidades blandas , aprendizaje basado en proyectos . En esta escuela, hemos ayudado a muchas personas, incluso a aquellas que no tienen experiencia previa en programación, a conseguir trabajos en software en gigantes como Apple y la NASA, por nombrar algunos. Ha estado capacitando a ingenieros de software full-stack de la mejor manera para satisfacer las demandas del dinámico y desafiante mundo tecnológico.

En primer lugar, no hay razón para que la lista necesite 10 elementos. Aquí están las cosas principales, con la menor jerga que puedo escribir:

  1. Una comprensión del dominio para el que está escribiendo. Ciencia, finanzas, comercio electrónico, etc. Es muy difícil obtener una especificación de alguien si no sabes qué preguntarle. La programación es sorprendentemente social. Saber qué postes pueden moverse y cuáles se moverán vale oro.
  2. Una idea de cómo mantener su código organizado. Si vuelves a este código en un año, ¿lo entenderás? Si desea agregar funcionalidad, ¿cómo lo haría fácilmente? ¿Cómo colaborarían contigo otros programadores? ¿Cómo encuentras errores?
  3. Comprensión de las capas inferiores en las que se ejecuta su código. Sistema operativo, conjunto de instrucciones, cantidad de memoria, ese tipo de cosas.
  4. Intuición de lo simple y lo complejo. Xkcd tenía una caricatura sobre esto. http://xkcd.com/1425/
  5. Dónde obtener ayuda y una expectativa bien calibrada de cómo se verá la ayuda. Esto puede ser tan simple como ir a stackoverflow, pero lleva tiempo saber qué buscar. Por ejemplo, la palabra “pitónico” es sorprendentemente útil.
  6. Soluciones comunes a problemas comunes. Tengo una clase. Quiero una función para hacerme un montón de ellos. ¿Cuál es una forma común de hacer esto? Tengo una lista de clientes y sus direcciones. Tengo una lista de sus autos. ¿Cómo almaceno esta información? No hay nada nuevo bajo el sol.

Todo esto podría ampliarse en ensayos, pero ese es mi resumen.

No hay necesidad de jerga top 10. Si pudieras entender SDLC (Ciclo de vida de desarrollo de software) en diferentes niveles de abstracción, todo comenzaría a tener sentido. Una idea aproximada sobre las fases de SDLC sería (al más alto nivel de abstracción):
1. Análisis de requisitos
2 diseño
3.Construcción
4.prueba
5.Mantenimiento
pasando una capa de abstracción a continuación:
1.El análisis de requisitos es en realidad un estudio de lo que necesita el dominio, cuál es el problema que debe resolverse (el análisis en sí mismo es un proceso de dividir las cosas en sus circunscripciones para ver cómo se vinculan 😉, así que eso es lo que se hace al requisito en esta fase)
2.Diseño: cuando hablamos de codificación, en realidad le estamos diciendo a la computadora qué hacer, pero hay diferentes maneras de decirle a la computadora qué hacer. Un desarrollador simplemente no puede escribir su propia lógica para hacer algo por sí solo (por supuesto que puede, pero eso puede resultar en un caos), porque los requisitos en la industria del software cambian, por lo que si está resolviendo un problema, es va a variar en el futuro, y para que NO comience a escribir las cosas desde cero nuevamente para el problema algo sesgado, es necesario que las cosas estén bien diseñadas para que sean mantenibles, extensibles y puedan cambiarse. Entonces, decirle a la computadora qué hacer no es el único problema, pero decirle inteligentemente cómo hacerlo es el problema que se aborda en esto, y también hay muchas otras decisiones que se toman en consecuencia, como los marcos / idiomas que se utilizarán, puede leer sobre esto en internet.
3.Construcción: aquí es donde los desarrolladores entran en acción. Se utilizan marcos y lenguajes de programación apropiados para diseñar el código.
4.Pruebas: el entregable es unidad / integración / alfa / beta probado, pero no entremos en los detalles, no quiero sonar como un pedante 😉
5.Mantenimiento: resolución de problemas que se encontraron en el lado del cliente para el producto entregado.

Cuando lo obtenga, comprenderá que todos en la industria del software realizan una u otra actividad que forma parte de las fases anteriores, y las cosas realmente comenzarían a tener sentido. Así que profundiza, prueba cada fase, descubre lo que amas de ellos y luego sigue adelante it

1) OOPS
2) Cualquier lenguaje de script
3) Cualquier lenguaje de programación en profundidad
4) Arquitectura de software y patrones de diseño
5) Técnicas de despliegue y liberación
6) Gestión de código
7) Proceso de software y documentos
8) Separación de conceptos de preocupaciones
9) Conceptos de responsabilidad única
10) Arte de Google Surfing

Un ingeniero de software puede significar un probador de software, un desarrollador de software, etc. Por lo tanto, la pregunta es amplia, solo responderé para un desarrollador de software.

1. BESO SECO SÓLIDO

Principio de responsabilidad individual

O – principio cerrado de la pluma

L – principio de sustitución de iskov

I – principio de segregación de la interfaz

D – principio de inyección de ependency

D – on’t

R – repetición

Y – nosotros mismos

K – eep

I – t

S – implica

S – tupido

2. Arquitectura MVC

3. Patrones de diseño

4. Unidad y prueba funcional

5. Desarrollo guiado por pruebas (TDD)

6. Mensajería (arquitectura dirigida por eventos)

7. Algoritmos comunes y estructuras de datos.

8. Control de versión del código fuente, por ejemplo, GIT

9. Seguimiento de problemas, por ejemplo, JIRA

10. Bases de datos relacionales y no relacionales.

Aquí hay algunas habilidades (en lugar de conceptos) que un ingeniero de software debe poseer:
1. Capacidad para resolver problemas
2. Diseñar una solución para el problema (a nivel algorítmico)
3. Capacidad para implementar lo mismo (la habilidad de programación viene debajo de esto).
4. Y lo más importante, el diseño debe ser duradero.

“El diseño no es solo lo que parece y se siente. El diseño es cómo funciona”
– Steve Jobs.

01) La programación no se trata de aprender un idioma, se trata de aprender la capacidad de hacer una lluvia de ideas.
10) Al final todo es solo 1 y 0

Se espera que uno esté familiarizado con paradigmas de programación como programación dinámica, división y conquista, retroceso, algoritmos codiciosos y conozca conceptos como hash y recursión. Además, se espera que cada ingeniero de software conozca e implemente estructuras de datos y algoritmos comunes como se discute en la siguiente publicación:

Principales algoritmos / estructuras de datos / conceptos que todo estudiante de informática debe saber

1. Pensamiento científico
2. “Todo es posible, solo el costo puede diferir” actitud

Matemáticas discretas
Algoritmos (y estructuras de datos)
Patrones de diseño
Frameworks (en estos días, por ejemplo, Spring / Struts en Java)

More Interesting

¿Qué hace el 1% de los mejores ingenieros de software de manera diferente y dónde trabaja la mayoría de ellos?

¿Cuáles son los roles de un arquitecto de software?

Si de repente encuentra que es extremadamente lento para su software comunicarse con la base de datos, ¿cuál es el posible problema?

¿Qué tipos de escalabilidad se refieren generalmente en ingeniería de software?

Cómo crear un compilador usando C ++

Hackers: ¿Cuáles son algunos de los mejores proyectos de hack público?

¿Qué hace a un buen arquitecto de software? ¿Cuáles son las características definitorias de un arquitecto y las diferencias entre un arquitecto y un gerente de ingeniería?

¿Debo ingresar a la industria del juego o convertirme en desarrollador / ingeniero / programador de software? No me importa el dinero.

¿Qué carrera profesional ofrece un mejor crecimiento y seguridad laboral en el punto de un estudiante de ECE, desarrollo de productos de software o desarrollo de productos integrados?

Me acabo de graduar de la universidad y comencé a trabajar como ingeniero de software en Google. ¿Qué debo hacer ahora para maximizar el éxito en mi carrera?

Actualmente estoy en la universidad haciendo el segundo año de B. Tech y quiero saber cuándo puedo prepararme para el Examen de Aptitud de Posgrado en el examen de Ingeniería

¿Cuál será la demanda después de 4 años, informática o ingeniería de software?

Como desarrollador de software, ¿está bien sentirse cansado y cansado de aprender nuevas habilidades técnicas?

¿Cómo prioriza específicamente estas consideraciones al elegir un equipo de software y un producto para unirse?

¿Vale la pena emigrar a Suecia o Noruega como desarrollador de software?