¿Con qué temas debe estar familiarizado todo ingeniero de software?

¡Abstracción! Aquí hay algunas razones de por qué:

  1. El código bien resumido es más fácil de entender para los humanos, lo que facilita su mantenimiento y, en general, aumenta enormemente la felicidad.
  2. No tiene que escribir el mismo código muchas veces si puede escribir una versión más general una vez.
  3. Comprender nuevos conceptos es más fácil si puede relacionarlo con algo que ya sabe, y es más probable que suceda si las cosas que conoce son muy generales.

Y aquí hay algunos ejemplos concretos (heh) de esas razones:

  1. Consulte Solicitudes, un módulo de manejo de HTTP en Python, para una excelente demostración de esto.
  2. Estaba en un equipo de FIRST Robotics Competition (# 125) en la escuela secundaria, y ayudé a sus nuevos programadores el año después de graduarme. Tenían un gran desafío frente a ellos. El robot para disparar frisbee que estaban construyendo tenía una entrada desplegable que alimentaba a los frisbees en una revista, que tuvo que retirarse antes de que pudiera disparar. El mecanismo de disparo podía inclinarse hacia adelante y hacia atrás y estaba en un elevador que podía subir y bajar, pero no todos esos movimientos eran posibles con la revista aún extendida. Podría haber sido un desastre codificar. Ingrese la abstracción clave: cada subsistema esencialmente tenía dos estados, encendido y apagado, a veces con un tiempo de transición. Después de hacer esa abstracción, todo lo que había que completar para cada subsistema era exactamente qué hacer (motores en movimiento, neumáticos, etc.) cuando el subsistema se encendía o apagaba y cuánto tiempo esperar como retraso de transición. Había dos comandos básicos: activar / desactivar un subsistema y activar / desactivar un subsistema con un retraso de transición antes de continuar.
  3. En el curso introductorio EECS del MIT (6.01), una de las tareas de laboratorio es implementar funciones en distribuciones de probabilidad. La mitad de la tarea era descubrir qué se suponía que debían hacer las funciones. Una de ellas era la probabilidad total (PA, PBgA): dada una distribución PA en algún conjunto A y una función PBgA de A a distribuciones en un conjunto B (que le da la probabilidad de x dada y para cada x en A e y en B ), calcule la distribución general de probabilidad en B. Resulta que totalProbability es una instancia de una de las operaciones básicas de mónada, al igual que algunas de las otras funciones que tuvimos que implementar. Aunque nunca antes había visto ninguno de los problemas en el laboratorio, conocer un poco sobre las mónadas me dio un andamiaje para los conceptos relevantes, y completar los detalles fue relativamente simple.

Análisis, Diseño, Comunicación, Codificación.

La codificación suele ser solo 1/4 del trabajo.

Mi conocimiento de las estructuras de datos y algoritmos tal como se enseña en la academia solo ha entrado en juego en uno de cada diez proyectos.

Algoritmos y estructuras de datos.

Estructura de datos

La diferencia entre Código y Producto.

La optimización prematura es la raíz de todo mal (y quema dinero)

More Interesting

¿Es mejor escribir varias funciones más pequeñas o una función más grande para realizar cierta tarea?

¿Por qué los desarrolladores no se mudan a Utah?

¿Cuál es el costo promedio por año, después de FICA, seguro de salud, espacio de oficina y salario, para un ingeniero de software en Silicon Valley?

¿Qué tan mala es la cultura corporativa mientras trabaja como ingeniero de software? ¿Es mejor trabajar en una startup en Silicon Valley?

¿Cuáles son algunas de las ventajas y desventajas de hacer una Maestría en Ciencias de la Computación (MS CS) para alguien con una Licenciatura en Ciencias de la Computación de una de las principales universidades indias / chinas, que actualmente trabaja en una subsidiaria local de una importante compañía de software de los Estados Unidos?

Estoy estudiando c ++ de un libro y escribo casi todo lo que leo en un cuaderno, ¿es esto un error?

¿Qué es un ciclo de vida de caso de prueba?

¿Cuáles son los defectos de diseño en Swing?

Soy un estudiante de secundaria con experiencia en el desarrollo de proyectos Java y en el uso de herramientas de la industria, pero sin antecedentes formales (sobre los cuales las compañías insisten). ¿Cómo puedo desarrollar efectivamente un fondo tan formal?

¿Se está volviendo una moda criticar los productos de software de Microsoft?

¿Dónde puedo comprar softwares matemáticos?

¿Cuál es el valor de un campo de prueba en Infosys? ¿Es igual a la posición de un equipo de desarrollo?

¿Cuán limitado seré como programador si soy malo en algoritmos y tengo malas habilidades matemáticas?

¿Cómo evalúa la calidad del código de Rails?

Cómo evitar el agotamiento como programador