¿Cuáles son las cosas más pequeñas que han tenido las mayores consecuencias en la historia de la programación?

aquí hay unos pocos

el bueno

OOP (Programación Orientada a Objetos), un paradigma de diseño común ampliamente aceptado que es muy experto en detallar diseños para grandes proyectos de software de una manera sostenible, escalable y autoconsistente. Estos proyectos generalmente se entregan de una manera predecible y confiable con un mínimo de drama que hace que las cosas sean eficientes desde un punto de vista económico. Los aspectos más importantes de OOP no es que no sea demostrablemente perfecto sino que es increíblemente útil y ampliamente aceptado. Por ejemplo, el idioma inglés que estoy usando actualmente no es demostrablemente perfecto, pero también es increíblemente útil y ampliamente aceptado. Así que digiere que los descontentos de OOP.

El avance continuo de los lenguajes de programación de nivel superior a medida que las capacidades de los componentes de hardware continúan aumentando según lo dictado por la ley de Moore (sí, el ensamblador era una perra para hacer algo sustancial). Esta influencia cada vez mayor de la semántica del lenguaje de nivel superior permite que la informática aborde problemas más interesantes y valiosos cada año que antes no eran factibles.

el malo

la referencia nula

Una instancia nula no significa nada, un objeto vacío, una colección vacía, esto es seguro y sensato. Representa la ausencia de elementos, el vacío. Este es un estado muy útil para los objetos. Se portó bien.

Una referencia nula solo significa un comportamiento indefinido, es peligroso y a menudo mortal. Hay una gran diferencia entre una instancia nula y una referencia nula. Una instancia nula es cordura y una referencia nula es locura.

Tony Hoare, el ganador del Premio Turing, autor de quicksort, etc., admite haber cedido a la tentación de piratear en 1965 en momentos de debilidad, creando la referencia nula. Solo el hombre más brillante reconocería un error tan fundamental en público. Los programadores han estado viviendo con este error de diseño durante décadas que lamentablemente impregna la mayoría de los idiomas. De hecho, la mayoría de los programadores aceptan la existencia de referencias nulas usándolas con frecuencia y desconocen las grandes desventajas de las referencias nulas.

“Referencias nulas: el error de mil millones de dólares
Resumen: lo llamo mi error de mil millones de dólares. Fue la invención de la referencia nula en 1965. En ese momento, estaba diseñando el primer sistema de tipo integral para referencias en un lenguaje orientado a objetos (ALGOL W). Mi objetivo era asegurar que todo uso de referencias debería ser absolutamente seguro, con una verificación realizada automáticamente por el compilador. Pero no pude resistir la tentación de poner una referencia nula, simplemente porque era muy fácil de implementar. Esto ha llevado a innumerables errores, vulnerabilidades y fallas en el sistema, lo que probablemente ha causado miles de millones de dólares de dolor y daños en los últimos cuarenta años. En los últimos años, se han utilizado varios analizadores de programas como PREfix y PREfast en Microsoft para verificar referencias y dar advertencias si existe el riesgo de que no sean nulos. Los lenguajes de programación más recientes como Spec # han introducido declaraciones para referencias no nulas. Esta es la solución, que rechacé en 1965 “.

El error de mil millones de dólares

La idea de que las pruebas son realizadas solo por evaluadores, y los programadores tienen una educación demasiado alta como para perder su tiempo en esta actividad.

en realidad, mezclar el 2 tiene varias ventajas masivas, la MENOS de las cuales es la enorme ganancia de tiempo (y todos se benefician de eso …)

si las pruebas se abordan utilizando prácticas de ingeniería de software:

  • el diseño de casos de prueba reutilizables puede enseñarse sobre la marcha al probador: si su desarrollador no sabe cómo reutilizar el código … entonces debería regresar a su universidad y recuperar su dinero.
  • automatizar esos casos de prueba reutilizables para que gane tiempo
  • Administrar los casos de prueba de forma similar a la forma en que administra su repositorio
  • par diseñando el caso de prueba (desarrolladores + probadores)
  • esto le permite al probador aprender las técnicas de diseño como ‘es un’, ‘tiene un’, ‘usa’, ‘extiende’, etc.
  • esto permite al desarrollador aislar y aprender cómo se usa el código (lo que hace que TDD sea muy fácil)
  • Esto permite que sus pruebas automatizadas se reutilicen tanto como sea posible mientras evita la sobre ingeniería y la repetición
  • El desarrollo impulsado por el probador se evita naturalmente ya que el probador está presente con una enorme contribución en las etapas de diseño …
  • el desarrollador ahora tiene un alcance funcional muy reducido para comenzar su TDD … v importante para los inexpertos.
  • cuanto más tiempo haga esto, más confianza tendrá su equipo (ya que su documentación en línea aumenta y sus conjuntos de pruebas automáticas aumentan) y el miedo se reemplaza con optimismo.
  • el compromiso se eleva; en realidad ahorras tiempo y puedes ahorrar ese tiempo para hacer lo siguiente que realmente quieres
  • Punteros y referencias. Fueron inventados en 1964, pero es imposible ver programación sin ellos hoy en día, a pesar de que los punteros ya no se usan como solían ser.

    Esto no es lo que querías decir, pero voy a ser un sabelotodo y decirlo:
    El transistor

    Actualmente a 22 nm, creo, y cada vez más y más cerca de cada año y medio

    http://www.extremetech.com/compu

    Personas que descubren que las plantillas C ++ son en sí mismas un lenguaje de programación funcional puro.