Cosa consideri il 1o principio / i di programmazione?


59

Mi è sempre piaciuto chiedermi "qual è il primo (i) principio (i) di questo?" dopo aver appreso le cose basilari di qualcosa (es. programmazione). È una domanda stimolante, IMO, che può costringerti a pensare ai principi più importanti dietro qualcosa, in particolare un'abilità come la programmazione.

Quindi, quali pensi siano i primi principi della programmazione? Darò la mia risposta di seguito un po 'più tardi.


Non parliamo di fight club.
Giobbe

Risposte:


97
  1. BACIO - Keep It Simple Stupid
  2. ASCIUTTO - Non ripetere te stesso
  3. YAGNI - Non ne avrai bisogno

KISS dovrebbe essere Keep It Simple Smart. La prima volta che devi riscrivere un grosso pezzo del tuo codice perché non hai progettato un design intelligente ed estensibile, accetti questo. :)

8
Penso che KISS dovrebbe essere "Keep It Simple, Stupid!"
Dennis C,

In realtà sto lavorando a un post sul blog su come questi due siano i due più vicini e cari al cuore di un programmatore e come allo stesso tempo siano un po 'di ossimoro, come spesso è necessario scegliere uno contro l'altro

10
Vorrei anche aggiungere YAGNI.

3
Strumento @Programmin - Non credo che "stupido" sia superfluo. Penso che ci sia la tendenza a voler essere "intelligenti" e questo si manifesta come complessità non necessaria. A mio modo di vedere, lo "stupido" cerca di ricordarci questa tendenza aiutandoci a ricordare ciò che inizialmente pensiamo che sia "intelligente" di solito non lo è.
codekaizen,


29

Sii il più pigro possibile.


2
Ancora una volta, troppo generale, IMO. Questo fa sorgere la domanda "Quanto è pigra la quantità appropriata di pigrizia, davvero?", Perché ovviamente "sciatta" è qualcosa che non vuoi nemmeno essere.

Questo è un riferimento a "Laziness, Impatience, and Hubris" di Perl

Quindi stiamo parlando di diversi tipi di pigrizia? Ho pensato che "pigro" Bob significa "non preoccuparti di organizzare il tuo codice prima che si aggrovigli": D

2
Troppo generale. Per analogia tutte le variabili e le funzioni sarebbero di 1 lettera perché ero "troppo pigro" per scrivere qualcosa di significativo. Supponendo che dovessi comunque mantenerlo, quindi forse hai ragione, perché lo renderei il più facilmente gestibile possibile.
Kyle Ballard,

3
@Kyle: Sì, questo è il punto. "La vera pigrizia" sta rendendo le cose più facili per te ora e in futuro. Il che risulta essere lo stesso di fare le cose correttamente. Se lavori meno adesso ma più lavoro dopo, non sarai "il più pigro possibile" :)

23

Zen, parte I: la programmazione è solo la strada, non la strada.

La programmazione è solo la tecnica per insegnare a un computer cosa deve fare. Avere successo nella creazione di software veloce e affidabile significa conoscere i tuoi algoritmi, le migliori pratiche e tutte le altre cose non necessariamente connesse alla tua Programmazione (linguaggio).

Zen, parte II: se hai fretta, cammina lentamente. Se hai davvero fretta, fai una deviazione.

Sembra sciocco, ma non lasciarti scendere a compromessi che (davvero) potrebbero disturbarti in seguito. Ho una regola: se sei al centro di un programma, cerca di essere il più preciso e buono possibile. Se stai utilizzando metodi basati sul core che sono profondi nel tuo software, prova ad essere più veloce nella codifica. Se stai codificando sopra questi due, puoi anche ottenere un po 'più sciatto.

Gli errori di progettazione sono i più difficili da trovare e / o correggere, il passo successivo sono gli errori di programmazione in parti su cui tutti fanno affidamento, quindi le "parti reali del software in mostra". Se devi correggere un errore di progettazione alla fine di un progetto, ummm, non va bene ... ;-)

Zen, parte III: Conosci il tuo percorso, Neo.

Conosci il tuo ambiente, gli strumenti e le cose su cui fai affidamento su base giornaliera e ordinali in modo che funzioni per te. Meglio se usi il tuo "ambiente" di programmazione così naturale che non devi nemmeno pensarci. Se devi fare un lavoro, non introdurre "cose ​​fantasiose" ma fai il tuo lavoro. Questo materiale può essere introdotto in un nuovo progetto, in particolare quando hai tempo per prepararlo e utilizzarlo.


Uh, e poi ancora: sono atterrato in terra Zen mentre parlavo di programmazione :)

@part III - non aggiungere "cose ​​nuove fantasiose" a meno che non vieni pagato per farlo!
Jason,

+1 per il riferimento Matrix. Sono un fanatico di una buona (quella e lo Zen. Mi fa pensare a Python)

19

BACIO (mantienilo semplice, stupido).

Pone davvero la domanda "Come si definisce semplice?" E anche "Quando è qualcosa di troppo semplice per l'attività a portata di mano?" Ecco perché non puoi diventare un buon programmatore solo conoscendo il primo principio di programmazione.


Penso che questa sia una regola troppo generale. Sorge la domanda "come definisci" semplice ", davvero".

3
e se sei stupido, come faresti a sapere se fosse semplice?
Steven A. Lowe,

È una buona

1
"Ecco perché non puoi diventare un buon programmatore solo conoscendo il primo principio di programmazione" - lo adoro.

1
@Dima: hai ragione, intendo dire che qualità e semplicità (almeno in questo caso) sono entrambi indefinibili, eppure lo sappiamo quando lo vediamo, se i nostri occhi sono allenati.
Adriano Varoli Piazza

18

L'ottimizzazione prematura è la radice di tutti i mali. - Donald Knuth


In fase di implementazione o progettazione.

16

Non reinventare la ruota.


La risposta giusta alla domanda se si debba o meno reinventare la ruota è sempre "dipende". Quindi "non reinventare la ruota" va solo così lontano. Può servire come una buona euristica il più delle volte, ma non tutte le volte.

5
Alcune "ruote" devono essere reinventate.

Dillo a Dunlop. Ha inventato il pneumatico. Se non fosse stato per lui, reinventando la ruota, avremmo avuto un giro piuttosto accidentato.
Kibbee,

3
Che ne dici: reinventare la ruota solo se i benefici
varranno

16

Comprendi prima il problema!


Ah, finalmente qualcuno con questo. Tu baci, Yagni, asciuga tutto ciò che vuoi. Inutile programmare qualcosa per niente.

@ e-satis: Sì, quello che ho pensato la prima volta che ho risposto a questo. Scorro per tutta la risposta e sorprendentemente nessuno ha pubblicato prima.
OscarRyz,

Buona risposta. Ore e ore vengono sprecate quando i programmatori non comprendono correttamente tutti i requisiti di un problema.
Steve Wortham,

Il problema è: come fai a sapere di aver compreso il problema?
CamelCamelCamel

13

YAGNI - Non ne avrai bisogno . L'idea alla base di YAGNI è programmare per le vostre esigenze, non per potenziali funzionalità potenziali. La premessa è che, attenendosi a ciò che è necessario programmare, (tra le altre cose) si taglierà il bloat del codice, si ridurrà la complessità, si eviterà lo scorrimento delle funzionalità e si ridurranno le restrizioni su cosa si può fare (e come si può fare) nel futuro.

Suppongo che funzioni in tandem con un design modulare: le funzionalità future possono essere aumentate senza riprogettare il codice esistente.


12

Sapere quando non programmare.


cosa diavolo dovrebbe significare?

E quando è quello?

A volte è necessario affrontare diversamente un problema degli utenti, non solo codificare una soluzione.

Il giudizio umano e il processo decisionale fanno parte di tutto; a volte non ha senso tentare di automatizzare il giudizio.
S.Lott

1
Ciò che intende è che molti problemi di programmazione possono essere risolti in modo più economico e tempestivo acquistando applicazioni, componenti o librerie standard.
Gordon Bell,

11

Caffè in, codice fuori.


3
Tè nel mio caso =)

+1 hmm più come "Coffee In, Code + un sacco di pause loo?" :) Adoro sia il caffè che il tè, oscillo in entrambi i modi ...
Darknight,

10

Se non è stato testato, è rotto.


Sono d'accordo su quello

7

Esistono due modi per costruire un progetto software: un modo è renderlo così semplice che non ci siano ovviamente carenze e l'altro è renderlo così complicato che non ci sono carenze evidenti. Il primo metodo è molto più difficile.

- Charles Antony Richard Hoare


6
  1. Distinguere tra causa ed effetto (lavorare con i computer)

  2. Distinguere tra fatto e opinione (lavorare con le persone)

  3. Il più semplice possibile, ma non più semplice (design)


5

La programmazione è un mezzo non un fine. O forse, "Can non significa dovrebbe".


5
  1. Comprendi perché il programma renderà felice qualcuno (altrimenti, perché non sei fuori a giocare con tutti gli altri bambini?). (Questa persona puoi essere tu.)
  2. Sviluppa un modello concettuale del dominio aziendale che catturi tutta la complessità necessaria e non di più.
  3. Sviluppa un modello concettuale dell'architettura software che catturi tutta la complessità necessaria e non di più.
  4. Tenere spietatamente ogni altra complessità fuori.

ben detto! non potrebbe essere più d'accordo
Antony,

5

Secondo me, il principio più importante è la riduzione della complessità attraverso la creazione di buone astrazioni .

Ciò comprende

  • capire il problema da risolvere,
  • progettando una soluzione adeguata per esso e
  • implementandolo,
  • preferibilmente in un modo che mantenga il codice comprensibile e mantenibile,

ma anche la determinazione del punto in cui smettere di creare astrazioni e scendere alle proprietà fondamentali delle tecnologie di implementazione (ad es. sistema di database, linguaggio di programmazione) per impedire la creazione di ulteriori complessità evitabili.


4

Programma pensando a un pubblico. Con ciò, non dare per scontato che tutto ciò che scrivi non verrà letto e gestito da te o da qualcun altro.

A corollario di ciò: dimostra di aver compreso il problema che stai cercando di risolvere nominando bene variabili, funzioni e classi!


4

non funziona finché non lo hai mostrato in un test


6
Non è vero, ho scritto tonnellate di codice che funziona e non è testato! : D

1
"Non l'ho provato, ho solo dimostrato che è corretto" :)
Daniel Daranas,

4

Pensa prima, codifica più tardi.

Non sei affatto intelligente come pensi di essere. Fare domande. Impara a valorizzare i tuoi colleghi.

Durante il debug, la prima risposta sarà quasi sempre sbagliata.

Il codice che scrivi con l'intenzione di lanciare tende a diventare una pietra angolare di processi molto più grandi. Non lasciare mai nulla di scritto a casaccio.


3

Qualsiasi problema può essere risolto con un altro livello di riferimento indiretto.


In realtà, avere troppe indirette è di per sé un problema in attesa di essere identificato e risolto. Quindi ..

risolto ... da un altro livello di riferimento indiretto! =)
Erik Forbes,

Stranamente, è vero. Guarda Spring ...


3

Principio: il software è acquisizione della conoscenza .

Conseguenze: molte tecniche per la rappresentazione della conoscenza, tutte basate sull'astrazione . Ci fornisce livelli, livelli, incapsulamento, separazione delle preoccupazioni.

Molte tecniche per la rappresentazione di procedure, tutte basate su sequenza , scelta , ripetizione .



3

Scrivi sempre il codice come se la persona che lo manterrà fosse un serial killer psicotico che sa dove vivi

Inoltre, non pensare mai di sapere tutto sulla programmazione, continua ad imparare


2

Ho iniziato a programmare studiando elettronica digitale, quindi immagino che le porte logiche di base (e non, e, o, xor, implicino) siano state i primi principi di programmazione.



2

Garbage in - Garbage Out Non importa quanto sia bella l'interfaccia utente se i dati non sono corretti.


2

SECCO, praticamente tutto il resto ne deriva. KISS è l'altra estremità dell'atto di bilanciamento per assicurarsi di non perseguire l'eleganza del software a livelli di follia.


2

Inizia con l'output e procedi all'indietro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.