Come presentare un programmatore di 50 anni analfabeta alla programmazione [chiuso]


10

L'altro giorno mio padre mi ha fatto una domanda che non mi sarei mai aspettato da lui.

"Come posso imparare il C ++?"

Mio padre compie 56 anni quest'anno e i computer sono un concetto distante per lui. Non sa usare molto bene un telefono oltre a chiamare i numeri (nessuna chiamata rapida o contatti); anche se ha iniziato a imparare un po 'meglio i computer - al punto che sa come aprire Internet (in Windows) e navigare (e ha completato con successo diverse domande di lavoro interamente da solo online, delle quali gli hanno anche offerto posizioni ). Tuttavia, queste sono esperienze a finestra troppo stretta per significare molto, davvero.

Anche se potrebbe non avere lo sfondo, mio ​​padre sa leggere. E intendo leggere come un'abilità, non solo un'abilità. Ha poca o nessuna istruzione universitaria (problemi finanziari, famiglia, ecc.) Ed è stato abbastanza fortunato da finire il liceo, ma ha comunque imparato a diventare un elettricista esperto ed è stato uno per quasi 30 anni. Ha fatto lo stesso con la chitarra, imparando a suonare a un livello molto professionale ed è stato elogiato per la sua abilità. Al liceo, ha preso un libro di sollevamento pesi - ed era l'unica persona al suo liceo al momento a qualificarsi ufficialmente come un "atleta" secondo gli standard nazionali.

In ogni caso, aveva solo bisogno di qualcosa da leggere. Qualcosa da insegnargli. Assorbe le informazioni come una spugna.

Non ho dubbi sulla motivazione o sulla capacità di mio padre di farlo, quindi il mio obiettivo generale è semplicemente:

Porta mio padre nel mondo dei computer e mettilo sulla strada della programmazione.

Sono fermamente convinto che una volta che lo avrò affrontato nei fondamenti, la sua spinta e abilità di lettura lo faranno andare avanti da solo.

Quindi chiedo a tutti voi: da dove dovrei iniziare con tutto questo? E quali sono le migliori risorse là fuori? Devo convincerlo ad avviare Linux anziché Windows? Il C ++ è una cattiva idea?

Ricorda, prima deve imparare (IMO) i computer, quindi acquisire quella prima comprensione (l'esperienza "Hello world") della programmazione.

Per motivi di denaro e al massimo delle preferenze, vorrei risorse online gratuite che lui potesse leggere, ma sono sicuramente ben accetti eventuali buoni suggerimenti in formato cartaceo o a pagamento online (che potrei eventualmente esaminare in seguito per acquistare).

E inoltre, ho intenzione di avviarlo con C ++ (no Python, Java, ecc.), Perché lo conosco meglio e sarò in grado di aiutarlo con il codice. (Ho una conoscenza minima in questo momento in altre lingue).

Modifica: sto ricevendo molti suggerimenti persistenti per usare Python. L'unica ragione per cui volevo fare C ++ è che LO SO e può esserci quando mio padre ha bisogno di aiuto. La mia PRIMA ESPOSIZIONE alla programmazione di sempre è stata Java. Ho imparato Java e ci sono riuscito. Apro altri suggerimenti, ma fornisci un'applicazione efficace dei tuoi suggerimenti.

EDIT # 2: Capisco che il mio approccio / pensiero / conoscenza potrebbe mancare qui. Sono un laureando di secondo livello CS senior. Se non sei d'accordo con qualcosa nel mio post, dimmi perché - dammi idee, informazioni - ecco perché lo sto chiedendo in primo luogo. Restringere il mio obiettivo generale a specifici obiettivi raggiungibili.


1
Questa domanda non riguarda lo sviluppo di software professionale. Sebbene nel corso della nostra giornata, dobbiamo interagire con altre persone, tecniche e non tecniche, e talvolta insegnare loro, non siamo insegnanti o istruttori professionisti e non possiamo fornire buoni consigli su come insegnare meglio a qualcuno. Se desideri discuterne ulteriormente, puoi porre una domanda sul nostro sito Meta .
Thomas Owens

@ThomasOwens come fai a sapere che non esistono insegnanti o istruttori professionisti nella comunità? Meta meno visto è davvero dove devo andare? Immagino di potermi arrendere (anche se mi piacerebbe davvero che restasse qui), per favore, migralo per me. SE c'è qualcosa che posso fare per far sì che questa domanda si adatti ai criteri per essere vista meglio dalla comunità SO / programmatori, per favore aiutatemi a farlo.
skippr

1
Per quanto ne so, non esiste un sito che accetti questa domanda. Ho appena guardato l'elenco e non ne ho visto uno. Se vuoi discuterne ulteriormente, fai una domanda su Meta .
Thomas Owens

@ThomasOwens Beh, non sono qui per lamentarmi o troll, quindi farò del mio meglio. Grazie
skippr

Nascondendo la mia risposta nei commenti ... Contrariamente alle risposte seguenti, penso che il C ++ sia in realtà un ottimo primo linguaggio. Soprattutto per i principianti. Si inizia con banali console IO e C ++ è molto più facile per i principianti rispetto a Java o C # in questo senso. Meno codice targa caldaia per confondere anche lui. Sicuramente ci sono funzionalità avanzate che causano confusione, ma puoi andare molto lontano limitandoti ad alcune funzionalità di base.
Lord Tydus,

Risposte:


13

Prima di tutto, anche se conosci personalmente il C ++, è una prima lingua orribile e orribile per i principianti, e non posso raccomandare abbastanza forte da tenerlo il più lontano possibile da esso se vuole imparare a scrivere con successo il codice. L'apprendimento della programmazione non riguarda una lingua, si tratta di imparare a esprimere requisiti astratti nella logica formale. Il C ++ rende difficile focalizzarsi su di te perché stai costantemente inciampando su problemi specifici della lingua.

Se vuole imparare ad esprimere idee nella logica formale, cerca qualcosa che lo renda semplice. Le mie scelte sarebbero Pascal (per lo sviluppo a livello di applicazione) o Python (per il lavoro a livello di script) perché entrambi sono progettati con intuitività e facilità di apprendimento come priorità fondamentali. Una volta che conosce effettivamente i principi su come scrivere il codice, quindi se si preoccupa davvero del C ++ in modo specifico, può prenderlo.

Per lo stesso motivo, non avviarlo su Linux invece che su Windows, perché poi ha due problemi su cui concentrarsi: imparare Linux e imparare il codice, allo stesso tempo! Riduci al minimo le distrazioni.

Per quanto riguarda le risorse di programmazione effettive, è abbastanza facile trovare tutorial online, ma ho scoperto che il modo migliore per imparare a programmare è programmando. Trova qualcosa che ti piacerebbe fare, quindi inizia a capire come farlo.

Diversi anni fa, ho visto un gioco e ho pensato: "Potrei farlo e potrei farlo meglio". Così ho licenziato Delphi e ho iniziato a capire i principi coinvolti. Sto ancora imparando nuove cose da quel progetto personale e, lungo la strada, sono diventato un programmatore davvero bravo! Quindi provalo; chiedi a tuo padre cosa gli piacerebbe fare se potesse programmare - e assicurati che sia possibile, e di portata ragionevolmente limitata poiché non ha ancora esperienza - e poi siediti con lui e inizia a capire con lui come fare esso.

E se ha qualche domanda, procuragli un account StackOverflow. :)


4

Penso che l'interesse di tuo padre per il C ++ sia decisamente pulito, ma non sarebbe la mia scelta per un primo linguaggio di programmazione, a meno che non abbia un requisito molto specifico che è interessato a soddisfare. (Anche allora, l'apprendimento del C ++ dopo aver appreso un'altra lingua, più semplice, potrebbe essere ancora molto più semplice.)

C'è una manciata di cose che sono importanti per la programmazione:

  • La capacità di risolvere problemi astratti
  • La capacità di scomporre i problemi in pezzi abbastanza piccoli per la risoluzione dei problemi
  • La capacità di costruire soluzioni in modo iterativo e in pezzi abbastanza piccoli da poter avanzare è possibile
  • Sintassi e semantica di linguaggi specifici.

In molti modi, la sintassi e la semantica di linguaggi specifici è quasi alla fine delle competenze necessarie per la programmazione. Dopotutto, se sei vicino alla destra, la maggior parte dei compilatori ti dirà quale errore hai commesso, anche se ci vuole esperienza per decodificare ciò che dicono specificamente i compilatori.

Quindi, suggerirei che tuo padre affronti un linguaggio di programmazione molto più semplice al primo tentativo: Ruby, Python, C, C #, Haskell, ecc. (Haskell è decisamente difficile per le persone che hanno programmato solo linguaggi imperativi, ma io ' sarei curioso di sapere se i novizi completi soffrono della stessa sensazione di "pesce fuor d'acqua".)

Attaccare con un linguaggio più semplice all'inizio significa che tuo padre avrà più successo in precedenza e troverà più facile "giocare". Il ciclo interattivo REPL di molte lingue è un luogo eccellente per imparare.

Una volta che tuo padre ha familiarità con funzioni, classi, oggetti, metodi, le minuzie e le sfumature del C ++ non saranno così travolgenti. Diamine, anche iniziare con C sarebbe più facile: non è indulgente , ma ci sono meno funzioni confuse di cui preoccuparsi.

Sei curioso di Linux vs Windows; Non sono sicuro che la distinzione conta molto. Se ha già familiarità con l'uno o l'altro ambiente, il passaggio è solo un altro ostacolo. Se non lo sa nessuno, suggerirei Linux, ma principalmente perché l'installazione di buoni strumenti è ridicolmente semplice: apt-get install <foo>funziona sulla maggior parte delle distribuzioni e le distribuzioni che non supportano aptspesso forniscono qualcosa di simile. Un minuto dopo, viene installato il tuo nuovo pacchetto pulito, spesso più veloce di quanto ci vorrebbe per trovare una fonte di download affidabile per i binari di Windows precompilati che non puzza di cavalli di Troia.


Mio padre ha sicuramente quella "capacità di pensare" che è così vitale per i programmatori. Vedo il suo buon senso e la sua intelligenza nelle cose che fa adesso, e so che può essere applicato nella programmazione. Supponiamo di avere un candidato ottimale per l'apprendimento. La mia domanda è: come possiamo farli lì?
skippr

Hrm, ho suddiviso le competenze in diverse categorie per rendere il punto che impantanarsi sulla sintassi e sulla semantica può offuscare lo sviluppo delle altre abilità - un linguaggio con meno regole di sensazione arcana faciliterà il flusso dell'astrazione - ma io sembra non aver affermato bene questo punto.
Sarnold,

1
Tra le lingue suggerite, preferirei sicuramente Python. Ma, se tuo padre è visivamente incline, Processing (vedi www.processing.org) potrebbe essere un'introduzione interessante (anche se ci sono molti tipi di problemi per i quali non è adatto).
James Youngman,

@James: heh, non credo di aver mai visto la frase Programmi interattivi che utilizzano ... PDF output prima. :)
sarnold
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.