Come posso insegnare a una persona brillante, senza esperienza di programmazione, come programmare? [chiuso]


100

Mi è stato chiesto di portare una persona nel nostro dipartimento IT che non ha esperienza di programmazione ma è una persona intelligente e capace e lo aiuta a passare alla programmazione, diciamo uno sviluppatore entry level che supporta le applicazioni .Net esistenti. Credo fermamente che questa persona possa farlo, ma sto cercando il modo più veloce per farlo accelerare. Ho un sacco di idee ma volevo vedere cosa pensavano gli altri. So che dipenderà anche molto da come impara, ma sto parlando in generale.

Quindi la domanda: quali pensi siano i modi migliori per far accelerare rapidamente un non sviluppatore (in questo caso .Net)?



Ho sentito che Learn Python The Hard Way è utile per i non programmatori che iniziano.
john2x,

Dai un'occhiata a Small Basic . È semplice, ma utile per i principianti.

3
Penso che spiegare la programmazione a qualcuno che non ha un modello mentale di qualcosa di cui parli sia inutile. Cerca di capire in che lingua parlerai e fai in modo che seguano i tutorial e si sporchino le mani, poi spiega. Lotteranno e tu entrerai e accelererai il processo di apprendimento.
The Muffin Man,

1
Gli chiederei di leggere Edgser Dijkstra | Sulla crudeltà di insegnare davvero la scienza dell'informatica |, fargli conoscere il motivo di quell'articolo, quindi può essere cauto sul possibile danno cerebrale che può essere inflitto da lui generalmente accettato modi di insegnare la programmazione
vfclists

Risposte:


125

Di solito prescrivo la stessa sequenza per chiunque voglia imparare la programmazione. È molto teorico, ma pone una buona base. Dovrebbero essere necessari tre o quattro mesi di studio a tempo pieno, ma la programmazione non è qualcosa che impari dall'oggi al domani.

Se non riesci a superare questa sequenza, non sarai in grado di programmare, quindi potresti anche rinunciare ora.

  1. Codice, di Charles Petzold.
  2. Il linguaggio di programmazione C, K&R
  3. La struttura e l'interpretazione dei programmi per computer, Abelson e Sussman.

La mia regola è: passa attraverso questi tre libri con la pura forza, se necessario. Poni tutte le domande che hai, ma solo dopo aver lottato per capirlo da solo. Se riesci a superare quei tre libri, congratulazioni, sei un programmatore, ora posso lanciarti PERL IN 15 MINUTI o qualsiasi altra spazzatura sia nella libreria del Big Bookcase di Java e riuscirai bene. Se non riesci a superare quei tre libri, arrenditi, vai a casa, non lo otterrai mai.

Non credo che tu debba imparare C e Scheme, a dire il vero. Sono solo una base per l'apprendimento futuro. Questi due libri abbastanza semplici sono entrambi molto semplici in superficie (C e Scheme sono linguaggi semplicissimi) ma approfondiscono la vera arte della programmazione senza perdere tempo a confondere la sintassi, quindi sono eccellenti per iniziare a ricollegare il tuo cervello per essere un buon programmatore.

I tentativi di prendere una scorciatoia e andare direttamente all'apprendimento della cosa esatta che vuoi imparare in questo momento (come iniziare con C # e ASP.NET) sono condannati.


25
Come qualcuno che ha dovuto sbattere la testa sulla scrivania rispetto ai "programmatori" che sono stati vivamente consigliati per le loro abilità in C #, ma che non potevano fare cose semplici come implementare una classe base molto ben documentata, trovare perdite di memoria nei programmi c e c ++, o semplicemente capire un problema da soli o imparare una nuova idea anche a un ritmo moderato, sono d'accordo. Questo non è elitarismo; è buon senso. Se non riesci a padroneggiare i puntatori e la ricorsione, non sarai mai molto utile a chiunque abbia bisogno di sviluppatori in grado di risolvere i problemi da soli.
Jonathan Henson,

53
No, non è l'unico modo per essere un buon programmatore. Ma se tre libri sono una "lista scoraggiante" di quanto potresti sottovalutare ciò che fanno i programmatori.
Joel Spolsky

32
A volte sei così fuori dal mondo, Joel.
Robert S.

46
Scusate, i giornali impiegano un paio di giorni per arrivare al mio club privato perché devono essere stirati da un cameriere prima che possiamo vederli.
Joel Spolsky

19
Sfortunatamente, questa risposta fallisce la up to speed quicklyparte.
rlb.usa,

30

Il modo migliore per accelerare rapidamente un non sviluppatore è ispirarlo !

Per avere successo, il candidato deve essere almeno curioso, se non appassionato , di programmazione (indipendentemente dalla piattaforma).

Mentre sono d'accordo con Joel nel caso del candidato ideale, starei attento a non stipare troppa teoria in una mente debole - li rimanderà soltanto. Se sono ispirati, curiosi e, si spera, appassionati, vorranno capire la teoria dopo aver visto la magia.

Sono completamente d'accordo con @karudzo: l'autorealizzazione e una revisione costruttiva possono essere molto stimolanti.


29
"Se vuoi costruire una nave, non fare a pezzi le persone per raccogliere legna e non assegnare loro compiti e lavori, ma piuttosto insegnare loro a desiderare l'immensità infinita del mare." - Antoine de Saint-Exupery
Julien Chastang,

Julien - carino! Esattamente!
jkoreska,

Sono completamente d'accordo con te su questo! Ho seguito / tutorato molti sviluppatori che non avevano esperienza e che a volte non avevano idea che sarebbero finiti programmatori. L'ho fatto semplicemente guidandoli lungo il percorso ... la loro stessa curiosità e passione li porta al risultato finale. Se non avessero avuto nessuno di questi due attributi, non credo che sarebbe stato possibile per loro ottenere ciò che hanno raggiunto. Lavoro con troppi programmatori a cui mancano uno o entrambi quegli attributi e ci sono solo perché c'è molto lavoro disponibile ... è terribile!
Jeach,

Sono d'accordo. Sento che la questione dell'apprendimento della programmazione ha una risposta molto letterale. Le persone imparano le cose per un motivo. Le persone imparano a programmare per risolvere problemi, aiutare le persone e trasformare le idee in qualcosa di reale. Ho incontrato persone che l'hanno dimenticato lungo la strada e quando l'hanno riscoperto hanno riscoperto il loro amore per la programmazione. Quando ti piace davvero qualcosa che imparerai, troverai modi per imparare e migliorerai.
Luis Perez,

12

Sto cercando il modo più veloce per farlo accelerare.

Il modo più veloce potrebbe essere quello di dargli il tempo necessario , anche se potrebbe facilmente essere un anno o due.

Certo, sembra facile insegnargli un linguaggio semplice (C #, se deve fare cose .NET), ma imparare una lingua non sta imparando a programmare.

Se non ha mai programmato, quindi, oltre alla sintassi e alla libreria di almeno una lingua, dovrà conoscere array, liste collegate, il modello di compilazione di qualunque lingua apprenda, modularizzazione, gestione delle risorse, paradigmi, schemi, Big- Notazione O ... - l'intera enchilada. Ci sono molte cose da approfondire e la maggior parte di noi ha impiegato diversi anni solo per imparare queste basi, e ancora di più per diventare un vero programmatore professionista.

C'è materiale là fuori che copre gran parte di questo (come il libro più recente di Stroustrup che insegna la programmazione usando il C ++, piuttosto che insegnare il linguaggio C ++), ma non ce n'è molto e niente che copre tutto. Quindi il ragazzo deve essere disposto a imparare e a leggere molti libri e articoli.

Quanto a come fare questo: non ho a portata di mano un curriculum completo da incollare qui. (Mi dispiace.)
Tuttavia, ciò che consiglierei è iniziare con l'insegnargli un linguaggio di programmazione, in modo che abbia la possibilità di fare rapidi progressi iniziali e ottenere risultati incoraggianti. Ci sono molti libri là fuori per insegnare tali lingue, scegline uno che conosci. Se il libro ha molti esercizi ed è disposto a farli, preparati a dedicare molto tempo ad aiutarlo con quelli. Se il libro non ha (m) alcuno, inizia a pensare ai tuoi, molto avanti, ma sii pronto ad adattarli al suo livello / velocità di comprensione.
Se quella prima lingua non era né C o C ++, IMO avrebbe dovuto impararne una dopo. K&R va bene per questo, come lo è la TCPL di Stroustrup o, se può (con il tuo aiuto) affrontare una ripida curva di apprendimento, Koenig / Moo. Il motivo per cui lo consiglierei è che, una volta che conosci C o (preferibilmente IMO) C ++, è relativamente facile raccogliere uno di quei derivati ​​C come C #, Java, ObjC ...

Per il resto, forniscigli un flusso costante di buoni libri e articoli. Non credo sia molto utile se ne suggeriamo troppi, dal momento che 1) deve adattarsi alla cultura della tua azienda e 2) devi sentirti a tuo agio nel dirgli di imparare quella roba.


1
"sviluppatore entry level che supporta applicazioni .Net esistenti" ... "dovrà conoscere array, liste collegate, il modello di compilazione di qualunque linguaggio apprenda, modularizzazione, gestione delle risorse, paradigmi, schemi, notazione bit-O" sono tutti "simpatici", ma scommetto che una buona parte degli sviluppatori che hanno scritto il codice non ha queste abilità.
Kirk Broadhurst,

1
@KirkBroadhurst: Se è così, allora qualcosa non va nella tua azienda.
sabato

@sbi Penso che troverai molte cose che non vanno in molte aziende. La società di OP sta suggerendo che un non programmatore (ma è un "ragazzo intelligente"!) Venga spostato in un ruolo che supporta le applicazioni. Non so dove si lavora ... ma nella mia esperienza questo è 'il mondo reale'. I programmatori veramente bravi e competenti sono l'eccezione - come nella maggior parte dei settori, la maggior parte delle persone fa abbastanza bene per cavarsela.
Kirk Broadhurst,

1
@KirkBroadhurst: dove lavoro è la mia decisione. Sono fuggito dalle aziende per essere incompetente e sarei fuggito se nessuno degli sviluppatori fosse a conoscenza almeno della maggior parte di queste cose.
sabato

7

Non li avvierei su .NET. Ho fatto questo errore troppe volte. Non lasciare che un datore di lavoro ti spinga a creare un programmatore incompetente a causa del tempo. .NET può essere una piattaforma di sviluppo veloce, ma non obbliga gli sviluppatori a imparare la programmazione. Solo in C #, troverai uno sviluppatore bloccato su tipi di riferimento, durata degli oggetti, lasceranno enormi perdite di memoria (sì, è possibile in .NET) e avranno progetti scadenti. Sarebbe molto meglio avviarli su C o C ++ (probabilmente c ++ poiché dovranno usare i concetti OOP) e poi dire qualcosa del tipo: "Ora non sarebbe bello se la tua memoria fosse gestita per te, ogni cosa era oggetto orientato e non hai avuto a che fare con tutte queste brutte indicazioni? " Ecco C # e JAVA. Se hanno imparato il c ++, vinceranno entrambi in una settimana o due ciascuno. Consiglio il reggimento di Joel. Questa era la lista che il mio insegnante di CS 101 mi ha dato, e stavo molto meglio quando ho colpito l'analisi numerica per questo. Questo ti permetterà anche di sapere in anticipo se il candidato taglierà la senape o no. Inoltre, una volta ottenuti c e c ++, capirai automaticamente c # e java dopo aver letto l'introduzione ai libri. Non solo li capiresti, ma li capiresti meglio di qualcuno che non conosceva c e c ++.


4
"" Ora non sarebbe bello se la tua memoria fosse gestita per te, ogni cosa fosse orientata agli oggetti e non avessi a che fare con tutte queste brutte indicazioni? "Intendi qui è la STL. Aspetta, cosa Perché non mi hai insegnato a usare l'STL in C ++ sin dall'inizio ?!
Raynos,

Bene, STL è dolce. Mi riferisco di più all'API di Windows per quanto riguarda la programmazione di Windows. L'API di Windows non è progettata pensando a OOP. Trovo che sia un ottimo esercizio far scrivere ad un povero ragazzo un'applicazione che usa l'API in c ++. Poi gli faccio scrivere una classe Window e incapsulare il ciclo degli eventi così via ... lo sai, renderlo orientato agli oggetti. Quindi, dopo che finalmente hanno funzionato, mostro loro Windows Forms. Li costringe davvero ad affrontare alcuni concetti di base - ovvero come funziona un'applicazione Windows - che qualcuno non otterrebbe mai se fosse appena passato a .NET.
Jonathan Henson,

4
perché qualcuno dovrebbe toccare l'API di Windows con un bastone. Voglio dire, stavano parlando degli hWNDanni '80, giusto? Chiaramente usi invece una bella astrazione (Quale astrazione è un dibattito completamente diverso). Sicuramente sapere come funziona sotto il cofano è bello ma non hai bisogno di C # .NET per l'astrazione
Raynos,

2
L'API di Windows è sorprendente. Ad ogni modo, lo uso solo come strumento didattico. Ad esempio, le persone di solito non comprendono in che modo gli eventi vengono generati magicamente nei programmi di Windows. È utile che debbano scherzare con il loop degli eventi. Inoltre, i programmatori devono almeno avere familiarità con l'HWND, specialmente se avranno a che fare con qualsiasi apis che scherza con la grafica, proprio come farai fatica a fare qualcosa in Unix senza sapere come usare un XID. Ad ogni modo, li costringe a imparare come funziona un programma Windows. Inoltre, una volta terminato, sanno come funziona Windows.Forms.
Jonathan Henson,

Non deve essere una transizione a C # btw, ma solo a .NET in generale. Penso che @Joel abbia un buon articolo sulla Legge delle astrazioni che perdono sul perché spesso è bene che i programmatori guardino sotto il cofano prima di usare un framework.
Jonathan Henson,

6

Dai loro qualcosa di semplice, ma utile da risolvere. Lasciali frugare un po 'e aiutali a lucidarlo. Non c'è niente come un piccolo risultato per aiutarli a spronarli (anche se qualcuno non è interessato alla programmazione w


6

Coppia di programmazione. Lascia che ti ombreggino mentre scrivi il tuo codice - qualsiasi codice. Entro poche ore, poi invitali a inserire il codice per te, mentre dici loro cosa fare, premere i tasti anche se necessario. Rispondi ad alcune delle loro domande, ma non così tanto da rallentare di molto: lascia che assorbano tutto. Troveranno anche i tuoi errori di battitura e più bug di quanto tu possa pensare. Entro pochi giorni, saranno in grado di iniziare la 'navigazione' indicandoti quale codice inserire per attività simili a quelle che hanno visto prima.

Ho imparato molto di ciò che conosco come sviluppatore in questo modo in un mese e ho insegnato a molti altri nuovi sviluppatori in questo modo, uno dei quali è stato in grado di assumere il posto di me come sviluppatore principale in una startup dopo diversi mesi. Quando abbiamo iniziato a lavorare insieme, non aveva mai scritto una sola riga di codice.


1
Penso che la programmazione in coppia sia davvero un ottimo modo per insegnare ai programmatori alle prime armi, ma penso che la programmazione in coppia tutto il tempo possa essere problematica. Penso che i programmatori alle prime armi abbiano bisogno di un po 'di tempo per lavorare da soli per imparare a risolvere i problemi e a rafforzare la fiducia nelle proprie capacità.
Helephant

Sì, falli andare avanti con la programmazione della coppia e dai i compiti semplici: compiti reali, sul software su cui dovrebbero lavorare, nella lingua in cui dovrebbero lavorare, con risultati reali. Revisiona e guida tutto il loro lavoro e progrediranno.
Thomas W,

2

Dagli un buon ide (visual studios, express è ancora buono). Insegnagli il comune 60% di sintassi (lascia fuori la resa, linq, enum, attributi, ecc., Insegna lezioni, virtuale e ignora). Trascorrere del tempo sul debugger (in particolare callstack). Quindi digli di google "msdn functionanme" ogni volta che ha bisogno di aiuto e questo dovrebbe farlo partire rapidamente.

Insegnagli anche a non catturare e ingoiare mai un'eccezione. Digli che deve ricodificarlo o registrarlo!

Bonus: insegnagli come serializzare i dati json in modo che possa facilmente leggere / scrivere su un file. Un db è eccessivo e troppo da imparare e non si vuole fargli scrivere formati di file personalizzati anche se potrei lasciare passare una voce per tipo di linea di file per salvare / caricare un array di stringhe come accettabile.


1

So che molte persone hanno parlato di lingue e libri per quelle lingue. Io sono diverso.

La programmazione riguarda l'apprendimento del pensiero analitico. Innanzitutto, la persona dovrebbe essere in grado di pensare e inventare l'algo su un pezzo di carta per quale sia il problema. Devi guidarli in modo che ottengano la giusta tecnica di pensiero.

Poi vengono i fondamenti della lingua. Iniziali con la lingua che preferisci. Dare un problema al programma.

Dopo che questo primo taglio è finito, fagli fare i fondamenti di CS e i Design Patterns.

Adesso inducili a riprogrammare il problema precedente con questi nuovi concetti.


1

Iniziarlo con le basi: variabili, loop, mentre loop, per loop, array, insegnargli le basi, stampare sullo schermo, fare qualche semplice matematica. Passa a metodi e OOP di base, cose come ecco come creare una classe, mostragli il perché non solo il come.

Il linguaggio non ha importanza, ma scegli qualcosa che sai e che è altamente astratto (java, python ecc ...) in questo modo non deve preoccuparsi di cose come la gestione della memoria, i puntatori ecc ... Insegna le basi di ricorsione, torri di hanio o ricorsivamente alla ricerca di elenchi.

Imparare a programmare è una buona risorsa gratuita sulla programmazione di Ruby. Rendilo divertente, facile e divertente.


1

Dagli alcune sfide e fagli imparare come trovare risorse per risolvere il problema da solo.

Se puoi insegnargli come trovare risposte ed essere autosufficiente, imparerà naturalmente a programmare bene. Il pensiero critico e l'intraprendenza sono due abilità chiave per un programmatore.

Alla fine della giornata, la passione / interesse sarà sicuramente un fattore chiave per il successo che avranno nell'apprendimento rapido. Se non ha o rileva "il bug", potrebbe essere un processo lento e / o doloroso. Se riesce a catturare il bug, sarà in ritardo di programmazione, fuori orario di lavoro, avendo il tempo della sua vita.

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.