Compilatori, lingue e framework più intelligenti rendono programmatori più stupidi? [chiuso]

StackOverflow https://stackoverflow.com/questions/428571

  •  06-07-2019
  •  | 
  •  

Domanda

I compilatori, le lingue e i framework sempre più avanzati che abbiamo che automatizzano le attività o ci nascondono certe complessità, alla fine ci rendono programmatori più stupidi?

Jim C fornisce la seguente analogia di una calcolatrice:

  

Qualcuno estrae una radice quadrata di recente,   usando carta e matita? Usiamo a   calcolatrice o semplice chiamata a una funzione   nel nostro linguaggio di programmazione preferito.   Quanti di noi sanno cosa   calcolatrice fa o addirittura la funzione?

Quindi perché non tutti diciamo ai nostri figli di dimenticare di imparare la matematica, ecco cosa abbiamo i calcolatori? Ciò non renderebbe intrinsecamente più stupidi i nostri figli?

È stato utile?

Soluzione

Non rendono più stupidi i bravi programmatori, li rendono più produttivi; ma rendono le persone più stupide in grado di programmare e pensare di essere grandi programmatori.

Chiarimento: non ho una definizione precisa per essere stupido. Da stupido intendo una cosa generale che sono le persone che non dovrebbero davvero essere programmatori o dovrebbero cercare di imparare cose importanti. Ho visto un sacco di persone che non riescono davvero a programmare e semplicemente copiare cose da qui e là. La valutazione della qualità del software non è facile. Finalmente costruiscono un software scadente che funziona in qualche modo (a causa dell'esistenza di buoni strumenti) in modo da non perdere il lavoro e pensano di essere dei buoni programmatori e, quindi, non dovrebbero mai cercare di imparare nulla. Credimi, c'è una cosa che ho visto in ogni buon sviluppatore: " Non smettono mai di imparare e non imparano solo il pezzo di codice di cui hanno bisogno per completare il loro lavoro. & Quot; Le persone di cui ho parlato non provano mai ad apprendere nulla al di là di ciò di cui hanno bisogno e strumenti eccezionali riducono questo "bisogno".

Questo non significa che gli IDE siano cattivi. Li adoro e penso che dovrebbero essere sviluppati il ??più possibile.

Altri suggerimenti

Penso che consentano programmatori più stupidi, non fanno programmatori più stupidi.

Gli agricoltori sono più stupidi perché usano macchine automatizzate per piantare, raccogliere e mantenere le colture?

Una buona automazione delle attività rende semplicemente i programmatori più efficaci, non più stupidi.

  

Quindi perché non tutti diciamo ai nostri figli di dimenticare di imparare la matematica, ecco cosa abbiamo i calcolatori? Ciò non renderebbe intrinsecamente più stupidi i nostri figli?

Una calcolatrice è uno strumento che consente di eseguire determinate attività. Sicuro di poter fare matematica complessa e integrazione multivariabile, ma senza imparare la matematica, come faresti a sapere che BISOGNO di svolgere quel compito in un determinato momento?

Stessa cosa con la programmazione e gli SDK, puoi lanciare molte campane e fischi usando un codice predefinito, ma quando arriva il momento in cui devi scrivere qualcosa per RISOLVERE un problema, tutti gli strumenti e l'automazione del mondo hanno vinto ' ti posso aiutare lì (l'IA non è ancora così avanzata;).

Sulla media , sì. :)

Non ci rendono noi più stupidi programmatori. Ciò che fanno è consentire a più programmatori stupidi (che suppongo significhi che, in media, siamo più stupidi). Avere strumenti migliori significa che qualcuno con poca esperienza e una comprensione losca dei concetti di CS può ancora estrarre il codice che alla fine funziona e fa qualcosa di utile. Questo non è possibile quando si scrive in assembly, ma lo è quando si scrive in, diciamo, VB. (Naturalmente, c'è una maggiore possibilità di eventuali catastrofi in stile WTF quando una persona meno esperta sta scrivendo grandi app che alla fine crollano sotto il peso della loro scarsa architettura.)

Certamente, "stupido" è una parola infiammatoria da usare qui. Solo perché qualcuno sa di meno non li rende stupidi, significa solo che sono meno esperti. Ma il punto è compreso.

Visual Studio Rot the Mind?  - Charles Petzold

Penso che macchine più veloci peggiorino i programmatori .... oggigiorno la maggior parte dei programmatori impiega pochissimo tempo a scrivere codice ottimale. I compilatori non possono ottimizzare il codice errato in un buon codice.

Le macchine veloci significano che i programmatori cattivi possono cavarsela con codici cattivi perché nessuno ne conosce i cattivi. Ai vecchi tempi il codice doveva essere elaborato e perfezionato in modo che funzionasse abbastanza velocemente da funzionare effettivamente in modo accettabile.

Tony

No,

I compilatori intelligenti consentono ai programmatori intelligenti di concentrarsi su cose veramente importanti, come la progettazione di un buon software.

s/make/allow/

Essere un po 'meno glibiti: sono strumenti. Gli strumenti non fanno nulla e non rendono alcun artigiano migliore o peggiore. Neanche gli strumenti potenti - agiscono semplicemente come una leva, amplificando la competenza di un particolare artigiano (o la sua mancanza).

Alcuni strumenti di programmazione hanno avuto l'effetto di ridurre le barriere all'ingresso, se non per la professione di ingegnere del software, almeno per far funzionare un'app. Accorciare la quantità di pensiero che deve andare a produrre un'app funzionante (o "funzionante") taglia entrambi i modi: gli esperti competenti vengono liberati dal lavoro di scout e possono fare grandi cose, ma i novizi vacillanti a volte ottengono un codice negativo nella produzione che loro non avrei mai potuto lavorare senza "intelligente" utensili. Quest'ultimo effetto ha probabilmente avuto un impatto maggiore rispetto al primo nel plasmare la reputazione di BASIC, VB, PHP e la recente ondata di framework di sviluppo rapido MVC per il web - e in effetti sulla nozione di tali strumenti in generale.

Per più intelligente intendi automatizzato . Fare un lavoro ripetitivo non rende nessuno più intelligente, quindi la risposta è no .

Fammi espandere usando l'esempio della calcolatrice. La tecnica per calcolare una radice quadrata con carta e penna è semplicemente un processo che può essere appreso. Non ti rende più intelligente conoscere questo processo, ti consente solo di calcolare radici quadrate in assenza di una calcolatrice.

Ora, se hai scoperto un algoritmo per calcolare le radici quadrate, ora che ti rende intelligente.

Stessa cosa con i nostri strumenti di programmazione. Un linguaggio che fa la gestione della memoria per te non ti rende stupido, né essere in grado di fare la gestione della memoria da solo ti rende più intelligente.

Rende più facile per i programmatori meno esperti entrare nel campo, tutto qui. Non rende un buon programmatore più stupido. Sarebbero stupidi se ignorassero strumenti che potrebbero potenzialmente aumentare la loro efficienza.

I computer stanno rinforzando i dispositivi. Così stupido diventa più stupido e intelligente diventa più intelligente.

Solo se glielo permetti.

Se hai imparato qualcosa di duro e schizzinoso (come il mio laptop Tandy 102), pensi ancora in quella modalità anche con strumenti più intelligenti.

Certamente è facile fare affidamento sugli strumenti per svolgere il proprio lavoro e, per gran parte, sono grato.

Ad esempio, non insegnate alla gente come fare la lavorazione del legno con seghe da banco e trapani a colonna: inizi con seghe a mano e trivelle o piccoli trapani a mano. In questo modo quando passi agli utensili elettrici, non fai qualcosa di stupido (tm).

Affidarsi allo strumento è grandioso, ma è anche importante saperlo fare senza lo strumento.

No, ma crea programmi e codice migliori.

Direi che le competenze sono diverse nei linguaggi di livello superiore, devi pensare alle astrazioni molto di più, ci sono molte più API di cui preoccuparsi e le persone si aspettano un livello superiore di qualità nel loro software. Come risultato di quanto sopra, un programmatore deve affrontare diverse sfide e gli strumenti sono all'altezza di tali sfide.

Non necessariamente rendono i programmatori più stupidi, ma possono renderli pigri. Mi sono ritrovato a fare questo a volte semplicemente scorrendo un po 'di codice e facendo affidamento sul compilatore per aiutarmi a trovare tutti i miei errori invece di farlo nel modo giusto.

A proposito, questo non è il modo raccomandato di fare le cose. Normalmente ci vuole molto più tempo.

Ok, i primi due computer che possedevo, mi sono costruito da solo. Era intelligente allora, non sono così sicuro che sarebbe un buon uso del mio tempo ora. Ho programmato in un mix di assemblatore e BASIC nei primi anni '80, ancora una volta intelligente allora, non così intelligente ora.

Quello che sto ottenendo qui è che il contesto è cambiato, e nel campo dell'informatica abbiamo dovuto scambiare profondità di conoscenza con ampiezza di conoscenza, con il necessario "smorzamento" che ciò comporta. Al fine di supportare l'enorme complessità e l'ampiezza delle applicazioni coperte dal "calcolo di oggi", siamo anche costretti a lavorare a livelli di astrazione molto più elevati. Da un lato, vediamo specialisti delle applicazioni di dominio che utilizzano strumenti altamente astratti per fornire ottime soluzioni, e dall'altro vediamo esperti di tecnologia di elaborazione / programmazione che producono codice superbo che ha la capacità di far avanzare l'intero settore informatico. Definire stupido entrambi i lati è infiammatorio, e probabilmente l'unica parte stupida del dibattito.

Lo smorzamento in questo contesto è semplicemente consentire a un pubblico più ampio di utilizzare gli strumenti efficaci che sono i computer moderni. Questa è una buona cosa, e i programmatori hard core non dovrebbero sentirsi minacciati, dopo tutto è il loro bambino.

In media, sì, rendono i programmatori più stupidi. Ma questo è solo perché rendono la programmazione più accessibile a persone che non sono intelligenti come noi, il che abbassa la media "smartness".

: -)

Un programmatore intelligente che denuncia la convenienza dei moderni ambienti di sviluppo probabilmente non è poi così intelligente.

più scemo? Non necessariamente. Come è stato detto prima, avere strumenti più intelligenti consente allo sviluppatore di concentrarsi su cose più importanti, come far funzionare correttamente l'applicazione. Un aneddoto pertinente della mia carriera:

Non sono un matematico esperto. Mi sono allontanato dal pre-calcolo (ok, scontato, è stato perché non ho mai fatto i compiti) e sono anche un po 'arrugginito su alcune formule di base della fisica (calcolo dell'attrito, per esempio). Questo perché sono decisamente fuori allenamento, il che è semplicemente perché non lo uso mai.

Prendi, ad esempio, la derivata. Se mi chiedessi di trovare la derivata di una funzione, raggiungerei la mia TI-89 perché non ho la più pallida idea di come farlo. Tuttavia - e sostengo che questo è più importante - so come usarlo. So dove è utile, perché dovrebbe essere usato, ecc. Il prodotto punto è un altro esempio. So come usarlo per calcolare lo speculare di una superficie nello spazio 3D, ma non so come calcolarlo manualmente perché non ne ho mai bisogno.

Non mi definirei più stupido per questo. Forse fuori allenamento, ma altrettanto capace.

No, è qualcosa di simile agli steroidi (e ad altri farmaci che migliorano le prestazioni) - rendono un atleta eccezionale ancora migliore, ma non possono far correre qualcuno come me 100m sotto i 10 anni anche se ho mangiato un'intera farmacia di farmaci. Quindi, dio IDE, linguaggio o framework possono renderti un programmatore migliore, ma se fai affidamento solo su di esso per fare il lavoro, sei nei guai.

Penso di no, ma ci sono molte persone (molto sagge) che la pensano diversamente

Consiglio vivamente questa lezione, è un'opinione molto interessante e un ottimo saggio

Non credo. Strumenti più sofisticati liberano le nostre menti concentrandosi su problemi più interessanti.

Per quelli di noi che hanno imparato a svolgere tali compiti o hanno imparato a parlare di tali complessità in passato, credo che ci renda più efficienti. Siamo più liberi di preoccuparci di altre / cose più importanti. Possiamo tendere a dimenticare "quanto sia stato difficile allora". o lamentarsi di quanto siano fortunati i nuovi programmatori oggi.

Per quelli di noi che hanno appena iniziato e non hanno appreso tali dettagli, credo che ci renda semplicemente una razza diversa. Non più stupido, solo che guardiamo a diversi problemi sotto diversa luce.

Tuttavia, riduce l'ostacolo d'ingresso e quindi rende la programmazione più accessibile alle masse. Se questa è una cosa buona o cattiva è discutibile.

Sì, ma non importa. Qualcuno estrae una radice quadrata di recente, usando carta e matita? Usiamo una calcolatrice o semplicemente chiamiamo una funzione nel nostro linguaggio di programmazione preferito. Quanti di noi sanno cosa fa la calcolatrice o anche la funzione?

Dovresti sapere come funzionano le cose, il programmatore migliore o qualsiasi altra cosa tu voglia essere, più dovresti sapere. Ma ci sono solo tante ore al giorno.

Strumenti migliori ci rendono migliori. Il compromesso è che perdiamo poco controllo sul processo.

In un certo senso

Ad esempio, non so né mi preoccupo di come scrivere i sovraccarichi degli operatori perché ho strumenti che li rendono adatti a me. Non devo nemmeno ricordare come funziona P / invoke perché uno strumento che ho creerebbe automaticamente un progetto DLL C ++ e un [DllImport] nel mio progetto C #. Non devo scrivere un aggiornamento automatico per il mio progetto perché ClickOnce è praticamente tutto. (E non ho idea di come funzioni "sotto il cofano".)

Quindi sì, sono meno intelligente perché non ho idea di molte cose di basso livello che il programmatore C ++ conosce. Ma continuo a ritenere di essere dalla parte dei vincitori, perché posso fare di più. Posso dedicare più tempo alla presentazione, al controllo di qualità e a quelle funzionalità che i clienti vogliono davvero avere. Inoltre, scavare in profondità nel framework .NET richiede un po 'di apprendimento, quindi è un po' un compromesso.

Non direi che rendono i programmatori più stupidi, ma ciò che direi è questo. Per le persone che iniziano lo sviluppo ai giorni nostri, non apprezzano appieno quante cose stanno succedendo dietro le quinte che sono state fatte per noi. Ci sono così tante librerie integrate nelle piattaforme in questi giorni, che le persone che iniziano oggi non hanno idea di come tutto questo debba essere fatto a mano in un punto o nell'altro.

Dirò comunque che non potrò mai più tornare a scrivere una singola riga di codice senza Intellisense :)

Penso che sia necessario disporre di strumenti più intelligenti in modo da poter avere strati di astrazione dalla complessità. Ma penso che dobbiamo essere in grado di cambiare avere accesso a quegli strati di astrazioni. Penso che i programmatori saranno più produttivi ma perderanno facilmente la nozione di molti concetti di base. È un compromesso ... I buoni programmatori saranno quelli che continueranno a comprendere le basi della programmazione. Gli altri saranno i giocatori di " copia e incolla " e Lego.

Al contrario, i compilatori più intelligenti significano che stai combattendo meno con il computer e puoi pensare più a come stai cercando di fare qualcosa.

Se stai lottando con assembler non ti preoccuperai quasi mai di metodi anonimi.

Direi di no.

Sistemi di programmazione più intelligenti (sto pensando a livelli più alti di astrazione, non cose come strumenti che riparerebbero automaticamente il tuo codice) IMNSHO sono in realtà più difficili da usare. L'analogia che ho escogitato è che agiscono come una lunga leva; spingi davvero duramente sul lato corto, lo sposti di una piccola quantità e avvengono enormi cambiamenti.

È più difficile capire cosa bisogna fare, ma è anche molto più difficile sbagliare quando lo fai finalmente.

Lingue, compilatori e framework più intelligenti rendono possibile la programmazione. Voglio dire, potresti immaginare lo stato della programmazione se fossimo ancora limitati a usare il linguaggio Assembly? Diamine, grattalo. Potresti immaginare lo stato della programmazione se fossimo limitati a C o C ++?

I miglioramenti nei compilatori, nelle lingue e nei framework rendono i programmatori più efficaci, supponendo che abbiano un solido background accademico o una buona comprensione semantica.

So che questo è un vecchio thread, ma vorrei ancora esprimere la mia opinione qui ...

Ci rendono più stupidi, la maggior parte di voi qui che reagisce già CONOSCI come programmare in modo decente. E perché? Perché vieni da un'era in cui i framework non venivano usati.

Nel sistema educativo vengono utilizzati sempre più framework nelle classi, ... e nelle classi in cui non viene utilizzato alcun framework, non è incoraggiante iniziare la programmazione. Scopri TUTTO questo codice, mentre nella parte posteriore della testa sai che esiste uno strumento che fa tutto per te. Sai sul campo / piano di lavoro devi usare i framework per andare veloce. Quindi perché passare tutto questo tempo a imparare il codice.

SO: Nel breve periodo, per tutte le persone che già conoscono le lingue, no ... non ti rende più stupido

A lungo termine .... vedrai i programmatori di basso livello migliorare e i buoni programmatori peggiorano in livello.

Segna le mie parole!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top