Come scrivere meno codice [chiuso]


12

Una qualità che vorrei sviluppare è scrivere codice più conciso. Con una scrittura più concisa, almeno secondo me, l'opportunità di aggiungere bug al codice è più piccola. È più facile leggere il codice per altri.

La mia domanda è se si tratta di qualcosa che viene solo con l'esperienza o è qualcosa che puoi fare esplicitamente per sviluppare quella qualità?


6
Traccia la tendenza e vedi quando attraversi l'asse x ...

1
Puntatore obbligatorio a macro, macro, macro: paulgraham.com/avg.html
vemv

È possibile generare codice molto conciso e leggibile adottando lo stile di programmazione inutile. La programmazione inutile sta programmando solo applicando le funzioni. Puoi riconoscerlo grazie al suo ampio uso di funzioni di ordine superiore come mappa, filtro, concat, piega / riduci / inietta / [inserisci altri nomi per un catamorfismo di lista] ecc.
dan_waterworth

2
-1: Sembra un'auto-congratulazione sotto mentite spoglie.
Jim G.

Non ho ancora visto il codice gratuito punto leggibile. non in nessuna biblioteca significativa.
Simon Bergot,

Risposte:


12

Direi che nel complesso è qualcosa che arriva con il tempo e l'esperienza, ma potresti scoprire che se fai un po 'di lavoro con lingue più concise, riporti quella qualità nelle tue normali lingue di lavoro.

Certamente dopo un anno o due di lavoro con Ruby ho scoperto che il mio C # è diventato molto più tonico. Penso che se dovessi capire meglio la programmazione funzionale (un'ambizione in corso), probabilmente ne trarrebbe di più.

Inoltre ci sono alcune linee guida che possono aiutare, ad esempio se scrivi le stesse due righe più di una volta per dividerle nel loro metodo. Questa è una semplice linea guida, ma riduce rapidamente le righe di codice e taglia e incolla la programmazione, di cui la maggior parte di noi è colpevole di volta in volta.

Se capisci l'eredità, puoi spesso risparmiare ripetendo lo stesso codice in luoghi diversi, fornendo funzionalità comuni alle classi principali. Questo è ovvio in linea di principio, ma qualcosa che alla gente spesso manca nella pratica.

Ci può essere una differenza tra scrivere meno codice e avere meno codice nella tua applicazione- a volte puoi usare la generazione di codice per evitare di doverti ripetere, quindi scrivi solo poche righe di codice, ma quelle generano un sacco di altro codice per te - questo può darti molta influenza. Guarda cosa fa uno strumento come Rails o Entity Framework per capire quanto possa essere utile. Sii chiaro sulla necessità e pensaci due volte, tre volte e poi quattro volte a far rotolare la tua generazione di codice, che può portarti all'inferno di YAGNI.

Comprendi la tua lingua, la tua API e i tuoi strumenti. Ancora una volta questo sembra ovvio, ma nel corso degli anni ho scritto così tanto codice che in seguito mi sono reso conto che stava riproducendo funzionalità che avrei potuto ereditare dall'API o utilizzare una funzione del linguaggio per semplificare che sono arrivato a capire che poche ore di lettura su la documentazione per l'API con cui sto lavorando mi farà risparmiare molte ore di programmazione o debug in seguito. Allo stesso modo, la maggior parte delle piattaforme con cui lavori hanno una grana: impara a lavorare come si aspettano e la tua vita sarà molto più semplice. Dedica un po 'di tempo a trovare la direzione della resistenza minima per la piattaforma con cui stai lavorando e otterrai risultati molto migliori.

Se ti stai chiedendo se esiste un modo migliore per fare qualcosa, probabilmente c'è e vale sempre la pena scoprire come fare le cose meglio.


Sì, a mio avviso, l'unica ragione per le funzioni private a una riga è il principio DRY

Da quando ho avuto più di quelle funzioni, il numero di righe di codice nelle mie classi è notevolmente diminuito e sembra molto più ordinato e chiaro.
glenatron,

Sembra un po 'di contraddizione, più funzioni ma meno linee, ma forse posso vedere la stessa tendenza anche nel mio codice .. Devo pensarci ...

Hai altre di queste linee guida che potrebbero essere seguite? Sembra che potrebbero essere utili a un giovane sviluppatore come me.
stuartmclark,

@stuartmclark - Ne ho aggiunti alcuni altri, anche se sospetto che non ci sia troppo lì che non avresti sentito altrove.
glenatron,

16

Un ottimo modo per scrivere meno codice è cercare di evitare di reinventare la ruota e utilizzare i componenti software esistenti quando disponibili.

Una risposta comune che ottengo quando chiedo perché le persone hanno fatto il proprio ORM, il proprio motore di registrazione, i propri componenti dell'interfaccia utente o il proprio tutto:

Ma il nostro è meglio

Credo che questa affermazione sia corretta nella maggior parte dei casi, ma l'impatto negativo sul ROI è molto elevato nella maggior parte dei casi. Mamma, fai i piatti migliori, vero? Ma non puoi chiedere a tua mamma di tornare a casa e prepararli tutti i giorni.

Ecco perché penso che gli sviluppatori debbano interessarsi all'impatto finanziario delle loro scelte. Alcuni di loro sono:

  • Lavoro extra richiesto per costruire il componente
  • Lavoro extra per i nuovi arrivati ​​per impararlo
  • Enorme lavoro extra per mantenerlo

Mi piace pensare che quei fornitori di componenti siano il tuo team esteso che lavora per te per una piccola parte di ciò che avresti pagato per costruirlo, mantenerlo e migliorarlo da solo.

È meglio per l'intera azienda massimizzare il ROI piuttosto che lavorare per massimizzare la soddisfazione del nostro ego;) Maggiore è il guadagno della tua azienda, maggiori sono le probabilità che le tue condizioni di lavoro e il tuo stipendio aumentino.


1
Sono anche colpevole di ciò, alcuni anni fa ho scritto che la mia classe di percorsi di file poteva convertire i percorsi di file tra i formati Win, Unix e Apples. Abbiamo usato solo windows. Forse anche questa è una regola, non rendere mai le cose a prova di futuro

A volte è dovuto alla tua mancanza di conoscenza di un determinato quadro. Ho anche scritto la mia classe di percorso quando ho iniziato a lavorare con .NET, poi ho scoperto la classe System.IO.Path pochi giorni dopo :-)

Ho preferito gli spaghetti di mia mamma, ma la roba nel barattolo era abbastanza buona. Questo si riduce davvero ai responsabili delle esigenze. Se non si accontentano della soluzione all'85%, non hai scelta.
JeffO,

Mia mamma fa gli spaghetti molto meglio dei tuoi.

1
+ Internet per "evitare di reinventare la ruota". Una delle abilità più cruciali che ho sviluppato è quella di identificare i problemi che qualcuno probabilmente ha già risolto. Non solo mi dà quasi sempre una soluzione migliore di quella che avrei prodotto da solo gestendo un sacco di casi marginali che probabilmente avrei trascurato, ma mi libera di lavorare sui problemi che in realtà sono pagato per risolvere .
BlairHippo,

5

Secondo me, scrivere meno codice può essere fatto in diversi modi:

  • Non ne avrai bisogno . Non codificare qualcosa che non ti serve ancora. Il codice indica solo i requisiti. In questo modo, ridurremo il codice necessario per scrivere.

  • Non ripetere te stesso . Credo che usare CMS, framework o la libreria di terze parti sia un modo per applicare il principio DRY.

  • Astrazione . E, ultimo ma non meno importante, la programmazione dell'astrazione può ridurre molto anche il codice. Astrattando il codice, la possibilità di riutilizzarlo aumenterà perché riduce la duplicità.


3

Al di là della comprensione di un linguaggio di programmazione, penso che la comprensione di un problema da parte degli altri e trovare una buona soluzione abbia molto a che fare con questo. Esistono molte soluzioni alla maggior parte dei problemi, non tutte sono ottimali. Puoi guidare dalla città A alla città B attraverso strade diverse: una potrebbe impiegare due ore, l'altra potrebbe raddoppiare. È la stessa idea in programmazione. Potresti conoscere una lingua molto bene, ma potresti trovare una soluzione che prende, diciamo, due pagine di codice, mentre qualcun altro scoprirà una soluzione che può essere implementata in un quarto della metà della dimensione del codice. L'ho visto molto nel corso degli anni.

Assicurati di avere una buona comprensione del problema. Analizzalo, trova una o più soluzioni, valuta i pro e i contro (ovviamente le "soluzioni con una" s "varieranno notevolmente da un problema all'altro, in generale qui). Poi c'è l'implementazione della soluzione scelta, che è qui che entra in gioco la tua comprensione della lingua (e del framework, se applicabile).


Quanto tempo dedichi alla preparazione della soluzione rispetto alla programmazione della soluzione?

Naturalmente varia a seconda del problema. Non sto parlando di giorni qui. Trascorrere un po 'di tempo a pensare prima di programmare di solito paga. Non si tratta in realtà del tempo impiegato a fare entrambe le cose, in quanto si tratta di una buona soluzione - e idealmente mantenibile a lungo termine -. Posso produrre codice scadente per le soluzioni scadenti, chiunque può farlo.
MetalMikester

1

Si può dire che l'intera arte della programmazione dipende proprio da questo.

Puoi studiare lingue che hanno un'enfasi tradizionale sulla chiarezza e sulla concisione (ad es. Haskell, Scheme, Python) o persino paradigmi terser come Factor e altri linguaggi concatenativi, ma alla fine, tutto ciò che potresti scegliere di studiare dovrebbe in definitiva contribuire ad aiutarti a scrivere più breve , codice meno ridondante.


1

Come tutte le altre afflizioni, se non ammetti di avere un problema, non cercherai una soluzione. L'esperienza inizia ad essere un fattore quando hai appreso come appare meno codice. Quando rivisiti il ​​tuo codice, è il momento giusto per determinare se puoi riutilizzare il codice o eseguire il refactoring su un codice inferiore. Microsoft è stata in grado di migliorare la velocità di stampa con Windows 2000 NON eseguendo lo spooling due volte (citazione del dipendente Microsoft in una delle loro demo gratuite).


Quindi dovrei rivisitare il mio codice e riformattarlo per avere un'idea di come scrivere meno codice o, come dice Piet, codice terser?

2
@Gorgen - potresti se hai tempo o semplicemente guardi qualsiasi codice che hai scritto un'ora fa. A volte individuare un esempio su SO può richiedere di tornare indietro e apportare alcune modifiche al proprio codice.
JeffO,

0
  1. Torna indietro al tuo vecchio codice a lungo,
  2. mettilo sotto controllo di versione,
  3. scrivere alcuni test per avere una ragionevole speranza di non introdurre nuovi bug,
  4. riscrivere.

Ripeti ad libitum. E benvenuto all'inferno.


-2

Lo sviluppo test-driven potrebbe aiutare. Usando questo, scrivi solo il codice minimo richiesto per superare quel test.


In quel contesto, minimo è inteso in termini di caratteristiche, non di lunghezza.
Vemv,
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.