¿Cuál considera que es el primer principio de la programación?


59

Siempre me ha gustado preguntarme "¿cuál es el (los) primer (s) principio (s) de esto?" después aprendí las cosas básicas de algo (por ejemplo, programación). Es una pregunta inspiradora, OMI, que puede obligarlo a pensar en los principios más importantes detrás de algo, especialmente una habilidad como la programación.

Entonces, ¿cuál crees que es el primer principio de la programación? Daré mi respuesta a continuación un poco más tarde.


No hablamos de club de lucha.
Trabajo

Respuestas:


97
  1. BESO - Mantenlo simple estúpido
  2. SECO - No te repitas
  3. YAGNI - No lo vas a necesitar

KISS debe ser Keep It Simple Smart. La primera vez que tenga que reescribir una gran parte de su código porque no diseñó de manera inteligente y extensible, estará de acuerdo con esto. :)

8
Creo que KISS debería ser "¡Hazlo simple, estúpido!"
Dennis C

De hecho, estoy trabajando en una publicación de blog sobre cómo estos dos son los dos más cercanos y queridos para el corazón de un programador y cómo, al mismo tiempo, son un poco de oxímoron, ya que muchas veces tendrá que elegir uno contra el otro

10
También agregaría YAGNI.

3
Herramienta @Programmin: no creo que "estúpido" sea superfluo. Creo que transmite que tenemos una tendencia a querer ser "inteligentes" y esto se manifiesta como una complejidad innecesaria. Desde mi punto de vista, el "estúpido" trata de recordarnos esta tendencia al ayudarnos a recordar lo que inicialmente pensamos que es "inteligente".
codekaizen

37

Escriba el código como si fuera usted quien tendría que mantener ese código.


Esta es una heurística muy práctica, 3x :)

19
Escriba el código como si un psicópata con hacha tuviera que mantenerlo. FTFY.
Semicolon olvidado el

10
... y el psicópata con hacha sabe dónde vives.
CAD bloke

2
.., y él sólo ha agudizado su hacha ...
Roalt

1
... y él está trabajando a tu lado.
Broken_Window

29

Sé lo más vago posible.


2
De nuevo, demasiado general, OMI. Esto plantea la pregunta "¿Qué tan vago es la cantidad apropiada de pereza, de verdad?", Porque obviamente "descuidado" es algo que tampoco quieres ser.

Esta es una referencia a "Pereza, impaciencia y arrogancia" de Perl

Entonces, ¿estamos hablando de diferentes tipos de pereza? Pensé que por "perezoso" Bob significa "no te molestes en organizar tu código antes de que se enrede": D

2
Demasiado general. Según esa analogía, todas las variables y funciones serían de 1 letra porque era "demasiado vago" para escribir algo significativo. Sin embargo, suponiendo que también tuviera que mantenerlo, tal vez esté en lo correcto, porque lo haría lo más fácil de mantener posible.
Kyle Ballard

3
@ Kyle: Sí, ese es el punto. La "verdadera pereza" está facilitando las cosas tanto para usted como para el futuro. Lo que resulta ser lo mismo que hacer las cosas correctamente. Si trabajas menos ahora pero trabajas más tarde, no estás siendo "lo más vago posible" :)

23

Zen, parte I: la programación es solo el camino, no el camino.

La programación es solo la técnica para enseñarle a una computadora lo que debe hacer. Tener éxito en la creación de software rápido y confiable significa conocer sus algoritmos, mejores prácticas y todo lo demás que no necesariamente está conectado a su Programación (lenguaje).

Zen, parte II: si tienes prisa, camina lentamente. Si realmente tiene prisa, haga un desvío.

Suena tonto, pero no te metas en compromisos que (realmente) pueden molestarte después. Tengo una regla: si estás en el centro de un programa, trata de ser lo más preciso y bueno posible. Si está utilizando métodos del núcleo que son profundos en su software, intente ser más rápido en la codificación. Si está codificando por encima de estos dos, incluso puede ser un poco más descuidado.

Los errores de diseño son los más difíciles de encontrar y / o corregir, el siguiente paso son los errores de programación en partes en las que todos confían, luego las "partes reales del software de exhibición". Si necesita corregir un error de diseño al final de un proyecto, mmm, eso no es bueno ... ;-)

Zen, parte III: Conoce tu camino, Neo.

Conozca su entorno, las herramientas y las cosas en las que confía a diario y clasifíquelas para que funcionen para usted. Es mejor si usa su "entorno" de programación tan natural que ni siquiera tiene que pensar en ello. Si tiene que hacer un trabajo, no introduzca "cosas nuevas y elegantes", sino que haga su trabajo. Esto se puede introducir en un nuevo proyecto, es decir, cuando tenga tiempo para prepararlo y usarlo.


Uh, y luego otra vez: aterricé en tierra zen mientras hablaba de programación :)

@parte III - ¡no agregues "cosas nuevas y elegantes" a menos que te paguen por hacerlo!
Jason

+1 para la referencia de Matrix. Soy un fanático de una buena (eso y el Zen. Me hace pensar en Python)

19

BESO (que sea simple, estúpido).

De hecho, plantea la pregunta "¿Cómo define simple?" Y también "¿Cuándo es algo demasiado simple para la tarea en cuestión?" Es por eso que no puedes convertirte en un buen programador simplemente conociendo el primer principio de programación.


Creo que esta es una regla demasiado general. Se plantea la pregunta "¿cómo se define 'simple', realmente".

3
y si eres estúpido, ¿cómo sabrías si fuera simple?
Steven A. Lowe

Esa es buena, Steven :)

1
"Es por eso que no puedes convertirte en un buen programador con solo conocer el primer principio de la programación": me encanta.

1
@Dima: tienes razón, quiero decir que la calidad y la simplicidad (al menos en este caso) son indefinibles, pero lo sabemos cuando lo vemos, si nuestros ojos están entrenados.
Adriano Varoli Piazza

18

La optimización prematura es la fuente de todos los males. - Donald Knuth


Ya sea en implementación O diseño.

16

No reinventes la rueda.


La respuesta correcta a la pregunta de si uno debe reinventar o no la rueda es siempre "depende". Así que "no reinventar la rueda" solo va tan lejos. Puede servir como una buena heurística la mayor parte del tiempo, pero no siempre.

55
Algunas "ruedas" deben reinventarse.

Dile eso a Dunlop. Él inventó el neumático. Si no fuera por él, reinventando la rueda, tendríamos un viaje bastante accidentado.
Kibbee

3
¿Qué tal: Sólo reinventar la rueda si los beneficios serán vale la pena los costos
e.James

16

¡Entiende el problema primero!


Ah, finalmente alguien con este. Puedes besarte, yagni, seca todo lo que quieras. Es inútil si programa algo para nada.

@ e-satis: Yeap, eso fue lo que pensé cuando respondí esto por primera vez. Me desplazo por todas las respuestas y, sorprendentemente, nadie publicó antes.
OscarRyz

Buena respuesta. Se desperdician horas y horas cuando los programadores no comprenden adecuadamente los requisitos completos de un problema.
Steve Wortham

El problema es: ¿cómo sabes que entiendes el problema?
CamelCamelCamel

13

YAGNI - No lo vas a necesitar . La idea detrás de YAGNI es programar para sus requisitos, no para posibles características potenciales. La premisa es que al cumplir con lo que necesita programar, (entre otras cosas) reducirá la acumulación de código, reducirá la complejidad, evitará el arrastre de características y reducirá las restricciones sobre lo que se puede hacer (y cómo se puede hacer) en el futuro.

Supongo que funciona en conjunto con el diseño modular: las características futuras se pueden aumentar sin rediseñar el código existente.


12

Saber cuándo no programar.


¿Qué demonios se supone que significa esto?

Y cuando es eso?

A veces, debe abordar un problema de los usuarios de manera diferente, no solo codificar una solución.

El juicio humano y la toma de decisiones son parte de todo; a veces no tiene sentido intentar automatizar el juicio.
S.Lott

1
Lo que quiere decir es que muchos problemas de programación pueden resolverse de manera más barata y más oportuna comprando aplicaciones, componentes o bibliotecas disponibles en el mercado.
Gordon Bell

11

Café adentro, código afuera.


3
Tea in in my case =)

+1 hmm más como "Coffee In, Code + montón de saltos de baño" :) Me encanta el café y el té, me balanceo en ambos sentidos ...
Darknight

10

Si no fue probado, está roto.


Estoy de acuerdo con eso

7

Hay dos formas de construir un diseño de software: una es hacerla tan simple que obviamente no haya deficiencias, y la otra es hacerla tan complicada que no haya deficiencias obvias. El primer método es mucho más difícil.

- Charles Antony Richard Hoare


6
  1. Distinguir entre causa y efecto (trabajar con computadoras)

  2. Distinguir entre hecho y opinión (trabajar con personas)

  3. Tan simple como sea posible, pero no más simple (diseño)


5

La programación es un medio, no un fin. O tal vez, "Can no significa que debería".


5
  1. Comprende por qué el programa hará feliz a alguien (de lo contrario, ¿por qué no estás afuera jugando con todos los otros niños?). (Esta persona puede ser usted).
  2. Desarrolle un modelo conceptual del dominio comercial que capture toda la complejidad necesaria, y nada más.
  3. Desarrolle un modelo conceptual de la arquitectura de software que capture toda la complejidad necesaria, y nada más.
  4. Despiadadamente, evita toda otra complejidad.

¡bien dicho! no podría estar más de acuerdo
Antony

5

En mi opinión, el principio más importante es la reducción de la complejidad mediante la creación de buenas abstracciones .

Esto incluye

  • entendiendo el problema a resolver,
  • diseñando una solución adecuada para ello y
  • implementandolo,
  • preferiblemente de una manera que mantenga el código comprensible y sostenible

pero también la determinación del punto donde dejar de crear abstracciones y llegar a las propiedades fundamentales de las tecnologías de implementación (por ejemplo, sistema de base de datos, lenguaje de programación) para evitar la creación de una complejidad adicional evitable.


4

Programa con una audiencia en mente. Con eso, no asumas que nada de lo que escribes será leído y mantenido por ti u otra persona.

Un corolario de eso: demuestre que comprende el problema que está tratando de resolver nombrando bien sus variables, funciones y clases.


4

no funciona hasta que lo demostraste en una prueba


66
Eso no es cierto, ¡he escrito toneladas de código que funciona y no se ha probado! : D

1
"No lo he probado, solo he demostrado que es correcto" :)
Daniel Daranas

4

Piensa primero, codifica después.

No eres tan inteligente como crees que eres. Hacer preguntas. Aprende a valorar a tus compañeros.

Al depurar, la primera respuesta casi siempre será incorrecta.

El código que escribes con la intención de desechar tiende a convertirse en la piedra angular de procesos mucho más grandes. Nunca dejes nada escrito al azar.


3

Cualquier problema puede resolverse con otra capa de indirección.


En realidad, tener demasiadas indirecciones es en sí mismo un problema que espera ser identificado y resuelto. Entonces ..

resuelto ... por otra capa de indirección! =)
Erik Forbes

Por extraño que parezca, es cierto. Mira la primavera ...


3

Principio: El software es captura de conocimiento .

Consecuencias: muchas técnicas para la representación del conocimiento, todas basadas en la abstracción . Nos da capas, niveles, encapsulación, separación de preocupaciones.

Muchas técnicas para la representación de procedimientos, todas basadas en Secuencia , Elección , Repetición .



3

Siempre escriba el código como si la persona que lo mantendrá es un asesino en serie psicótico que sabe dónde vive

Además, nunca pienses que sabes todo sobre programación, sigue aprendiendo


2

Me metí en la programación estudiando electrónica digital, así que supongo que para mí las puertas lógicas básicas (no, y, o, o, implica) fueron los primeros principios de la programación.



2

Entrada de basura - Salida de basura No importa cuán agradable sea su interfaz de usuario si los datos son incorrectos.


2

SECO, casi todo lo demás se genera. KISS es el otro extremo del acto de equilibrio para asegurarte de que no buscas la elegancia del software a niveles de locura.


2

Comience con la salida y trabaje hacia atrás.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.