Se qualcuno ti offre una dichiarazione non verificata relativa alle pratiche di sviluppo del software, rispondi con "citazione necessaria"? [chiuso]


14

Di recente ho partecipato a una conferenza tenuta da Greg Wilson (Chief Scientist of Software Carpentry). Dall'abstract:

L'idea che le affermazioni sulle pratiche di sviluppo del software dovrebbero essere basate su prove è ancora estranea agli sviluppatori di software, ma questo sta finalmente iniziando a cambiare: qualsiasi accademico che afferma che un particolare strumento o pratica rende lo sviluppo del software più veloce, economico o più affidabile è ora si aspettava di sostenere tale affermazione con una sorta di studio empirico.

Nel complesso, la lezione è stata molto istruttiva e mi ha lasciato riflettere molto profondamente sul mio approccio allo sviluppo. In particolare, ora mi ritrovo a cercare citazioni a sostegno di molte dichiarazioni. In precedenza, avevo preso l'abitudine di ripetere semplicemente le verità offerte, con forse una nota mentale per andare a controllare più tardi.

Per dirla senza mezzi termini, stavo diventando credulone .

Ecco un esempio tratto dalla lezione:

"Se oltre il 25% del codice deve essere sottoposto a refactoring, è più veloce riscriverlo".

Sembra plausibile, ma è vero? Dov'è lo studio a sostegno di questo? È vero per tutte le lingue? E così via.

OK, è del tutto possibile portare questo all'estremo e non credere a nulla da nessuno a meno che tu non l'abbia derivato dai primi principi. In questo modo sta la follia (o forse la matematica ;-)). Ma, se qualcuno ti viene incontro con una dichiarazione sulla falsariga di "Ehi, facendo questo in [scegli la lingua del momento] saremo in grado di aumentare la produttività del [scegli multipli del 10]%" sei propenso a accettalo o chiederai prove comprovate?

Se è quest'ultimo (e spero lo sia) allora

  1. dove andresti a trovare queste prove?
  2. quanto saresti severo?

In breve, se qualcuno ti offre una dichiarazione non verificata, risponderai con "citazione necessaria"?


2
In quanti campi, al di fuori della scienza, le persone richiedono prove empiriche? Secondo la mia osservazione, non quanti ne vorrei.
David Thornley,

1
Che ne dici di alcuni commenti sui voti stretti? "Troppo localizzato" e "Non è una vera domanda" non è proprio autoesplicativo in questo contesto.
Inaimathi,

1
Sì, anch'io vorrei conoscere il ragionamento alla base dei voti stretti.
Robert Harvey,

@Robert Grazie per la modifica. Molto meno infiammatorio sulla riflessione.
Gary Rowe,

1
Ottima domanda Ho visto il Prof. Wilson parlare alla CUSEC l'anno scorso e sono stato anche fortemente influenzato da ciò che aveva da dire. La parte migliore è stata quando uno studente lo ha sfidato a citare la sua affermazione che le affermazioni dovrebbero essere citate, e lo ha fatto senza perdere un colpo.
Matteo Leggi il

Risposte:


3

Il problema con questo tipo di affermazioni è che anche se avessi prove empiriche a supporto del reclamo, sarebbe molto difficile determinare se lo studio che ha portato alle prove si è applicato alla tua situazione attuale.

Quasi tutto nella professione ha un avvertimento, o diversi quindi ogni miglioramento in un posto ha la probabilità di essere un disservizio da qualche altra parte.

Le persone giù nelle trincee conoscono la differenza attraverso l'esperienza e generalmente non hanno i finanziamenti / il tempo / le risorse per provare a dimostrarlo attraverso uno studio scientifico.

Le persone che provano a dimostrarlo attraverso uno studio scientifico hanno ovviamente risorse da dedicare a tali studi e sono quindi molto propensi a venderti qualcosa, quindi direi che dovresti applicare ancora più rigorosamente la tua esperienza personale a tutto ciò che afferma di essere supportato dalla ricerca empirica.

Se qualcuno ti dicesse "Se è necessario il refactoring per oltre il 2% del codice, è più veloce riscriverlo", sapresti che è falso come se qualcuno ti dicesse "Solo se più del 98% del codice necessita di refactoring, è più veloce a riscriverlo ". La posizione del numero effettivo dipende da ciò che si sta facendo e dalla distanza dall'ideale del codice corrente.

L'idea che dopo un certo punto sia più facile eseguire un rifrattore nucleare è ovviamente vera in molti casi, ma la percentuale effettiva è più di un esempio che è necessario considerare attraverso l'obiettivo della propria esperienza (della squadra) e della situazione attuale.


+1 per un'analisi approfondita dell'istruzione di esempio. Pensi davvero che tutta la ricerca scientifica abbia un angolo commerciale che deve essere sfruttato, però? (Perdona la mia ingenuità ma sono sinceramente curioso di questo)
Gary Rowe,

@Gary: No, è tutto perfetto, ma è molto difficile se non impossibile determinare la parzialità di uno studio dall'esterno. Doppiamente quando non ci sono metriche concordate che coprono l'intera situazione
Bill

8
Se qualcuno ti offre una dichiarazione non verificata relativa alle pratiche di sviluppo del software, rispondi con "citazione necessaria"?

No, lo pubblico qui e vedo se ottiene voti. La prova sociale è meglio di nessuna prova!


2
Potresti arrivare da qualche parte con questo modello, ma rabbrividisco al pensiero di un documento che cita i programmatori. SE come fonte.
Inaimathi,

@Inaimathi: è affidabile almeno quanto Wikipedia, se non di più!
Steven A. Lowe,

+1 per cercare prove - sempre un buon consiglio. Quanti voti prima di crederci? ;-)
Gary Rowe,

1
@Gary: su SO, dieci. su questo sito, venti. su meta, cento - a meno che non coinvolga unicorni e waffle, nel qual caso deve essere vero
Steven A. Lowe,

Adoro il riferimento all'unicorno - devo procurarmene uno
Gary Rowe,

4

Molti sviluppatori basano le loro decisioni momento per momento sull'esperienza nelle trincee che lavorano con il codice e con i clienti che quel codice serve.

Quando una classe o un metodo è diventato così frammentato da correzioni di bug e richieste di modifica da parte del cliente da renderlo non mantenibile, uno sviluppatore a volte prenderà la decisione di riscriverlo piuttosto che refactor, secondo la teoria che farà risparmiare tempo e fatica a lungo termine , perché il codice risultante sarà di qualità superiore.

Questo tipo di esperienza intelligence è ciò che i dipartimenti delle risorse umane chiamano "capitale umano". È una delle cose che rende preziosi gli sviluppatori esperti e uno dei motivi per cui le buone aziende fanno le cose per cercare di preservare la longevità della loro gente.

Non sembra giusto o nemmeno pratico chiedere agli sviluppatori esperti di elaborare uno studio e dati empirici come prova della validità delle loro tecniche. L'esperienza non funziona in questo modo. Al contrario, l'esperienza è una sorta di "senso sentito". Nel mondo del refactoring, spesso lo chiamiamo "odore".

In definitiva, un'affermazione come "Se oltre il 25% del codice necessita di refactoring, è più veloce riscriverlo" non può essere dimostrata in tutte le circostanze, quindi l'affermazione [citazione necessaria] è davvero un modo per informare il programmatore dogmatico che cerca di forzare le sue opinioni sugli altri che non è sempre "La sua strada o l'autostrada".


Ahh, buon vecchio capitale umano e risorse umane, quelle meravigliose frasi gemelle che promuovono la disumanizzazione in corso dei lavoratori ovunque ...
Aaronaught,

@Aaronaught: l'esecuzione di un concetto a volte può non essere all'altezza del vocabolario alto usato per descriverlo. Ecco perché le persone scettiche a volte chiedono prove.
Robert Harvey,

Non sarebbe una buona cosa che l'esecuzione di questi concetti particolari non venisse meno?
Aaronaught,

+1 per un buon uso della difesa "citazione necessaria" contro un programmatore dogmatico - molto utile
Gary Rowe,

4

Penso a tutto ciò che non sai mai fino a quando non lo provi. Anche con la prova a sostegno di un'affermazione, è sempre possibile piegare i fatti a beneficio del tuo punto. Detto questo, non dovresti provare ogni cosa nuova che colpisce le interwebs. Dai il tuo miglior giudizio. Ricorda, se qualcosa sembra troppo bello per essere vero, probabilmente lo è. Chiediti sempre perché devi adottare qualcosa? Cosa devi guadagnare? Ha senso dal punto di vista commerciale? Mai accecato tranne qualcosa sulla fede.


+1 per chiedere "perché devi adottare qualcosa". A volte fare un passo indietro dal limite è una buona cosa.
Gary Rowe,

Trovo che troppo spesso gli sviluppatori rimangano coinvolti nella prossima cosa migliore senza analizzarla e capire come potrebbe sia trarne vantaggio che scoraggiarli. Ho visto situazioni in cui le organizzazioni adottano qualcosa come Asp.Net MVC su Asp.Net Webforms ma non adottano TDD.
Carlosfocker,

3

L'esempio della lezione è un euristico, una regola empirica e niente di più. Ciò dovrebbe essere implicitamente ovvio.

L'euristica è come qualsiasi altra cosa: sono soggetti a un determinato contesto e dipendono da un numero qualsiasi di ipotesi non dichiarate e la loro utilità può essere molto non deterministica. Tanto giudizio arbitrario finisce per trovarli utili quanto in primo luogo nel formularli.

Ciò significa che sono senza valore? Non lo direi affatto.

L'euristica è uno degli approcci che possiamo adottare per affrontare i problemi NP-completi e, per molti aspetti, l'ingegneria del software è esso stesso un problema NP-completo.


Punti buoni. =)
Pablo,

1

Dipende. :) Quando l'affermazione di qualcuno contraddice l'esperienza ripetuta, riflessiva e verificata personalmente, allora sì, vorrei vedere una sorta di riferimento di uno studio. D'altra parte, se qualcuno fa eco a un'idea che hai visto e vissuto molte volte, non c'è molta reazione provocata (non significa che l'idea sia infallibile però).

Ad esempio, il libro "Codice completo" cita decine di studi in ogni capitolo per evidenziarne i punti, a volte su questioni apparentemente piccole (come rientro e spaziatura o lunghezza del nome variabile). Ricordo alcuni sviluppatori (più giovani) ai quali ho presentato il libro pensando che quel livello di dettaglio e prove fosse sciocco. Ma pochi mesi dopo con più esperienza nella codifica di produzione e dopo alcune revisioni del codice, alcuni di quegli stessi sviluppatori hanno avuto l'onestà di ammettere che sì, anche il numero di spazi nella rientranza è importante. I buoni commenti contano. L'incapsulamento conta. ecc ecc.

D'altra parte, quando un fornitore afferma che un nuovo IDE è più produttivo del 50%, la mia prima reazione è di $ $ ^ ^ &!


1
Dipende, ma anche gli esempi completi di codice dipendono dalla tua situazione. Per esempio: se hai un formattatore di analisi e il tuo strumento diff ignora gli spazi bianchi, l'argomento del rientro diventa abbastanza banale
Bill

1
+1 per l'esempio del codice completo (vero anche per lo sviluppo rapido dello stesso autore Steve McConnell).
Gary Rowe,

@Bill È interessante il fatto che man mano che la tecnologia migliora i problemi che prima richiedevano la prova scompaiono. Mi chiedo se questo è un effetto che riduce la nostra necessità di chiedere prove?
Gary Rowe,

1
@gary Non penso che questo (in senso generale) sia un caso di miglioramento tanto quanto la variazione. Gli esempi di codice completo fanno sicuramente riferimento a un set di strumenti specifico in un determinato momento, quindi sono entrambi, ma il tipo "quando refactoring" ha molto più a che fare con la situazione che con la tecnologia. Pensa a un software critico per la sicurezza in un veicolo rispetto a una soluzione di elaborazione dati. I requisiti dei test saranno molto più alti sul sistema di sicurezza, quindi il punto di rifattore sarà sempre molto più alto prima che ci sia un guadagno netto.
Bill

1

Non è qualcosa che dipende da molte variabili immateriali (variabili che non hanno modo di essere misurate scientificamente)?

Secondo me, stanno parlando di un metodo empirico per misurare le emozioni. Qualcosa che nemmeno Spock poteva realizzare. =)


1
+1 per una versione interessante. Mettendo da parte (intenzionalmente) l'esempio lanoso, se qualcuno ti dicesse che Rails è un framework migliore di SpringMVC come faresti per determinarne la validità?
Gary Rowe,

Come afferma Benjamin Graham nel suo libro classico sugli investimenti ("Analisi della sicurezza"), gli strumenti (di investimento) dovevano essere misurati in due aspetti diversi, ma solitari: il Qualitativo (intangibile, i sentimenti) e il Quantitativo (numeri reali, matematica , calcolo, logica).
Pablo,

Il quantitativo è ciò che stai misurando con un metodo scientifico. Il Qualitativo è ciò che misuri attraverso il tuo stesso istinto. Non è possibile giudicare l'emozione rispetto all'emozione senza avere emozioni riguardo all'analisi.
Pablo,

Per non dire altro, quando parliamo di opinioni e differenze in esse, non possiamo semplicemente concordare un metodo ragionevole, scientifico e tangibile per misurare l'abstract.
Pablo,

La mia risposta è che possiamo misurare solo aspetti tecnici, non pensieri / opinioni astratti. Inoltre, non intendo sembrare un asino. Quei posti non erano intesi come una sorta di risposta folle.
Pablo,
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.