Come insegnante: scegliere un linguaggio di programmazione adatto


8

Non sono sicuro che sia il posto giusto per questa domanda. Scusami se vai un po 'fuori tema.

La scelta di una lingua adatta per il primo corso di programmazione è una delle cose più importanti che ogni insegnante / docente correlato dovrebbe tenere a mente; soprattutto se gli studenti sono giovani o hanno una conoscenza matematica limitata.

Attualmente sto insegnando a un gruppo di giovani altamente entusiasti (dai 16 ai 17 anni) con una conoscenza media della matematica . Stanno frequentando il liceo in prima media. Inizierò a insegnare un linguaggio di programmazione per il prossimo semestre.

Sono un gruppo di studenti selezionati con cura in tutta la città con uno straordinario livello di creatività e diligenza, quindi vedo che lavorare con un vero linguaggio di programmazione non sarebbe un compito difficile per loro. Pertanto, la scelta di semplici soluzioni grafiche e drag'n'drop come Turtle Art, Scratch e Tynker non sono considerate opzioni.

Ci sono alcuni fattori che dovrebbero essere controllati prima di fare una scelta:

  • Semplicità : molti di loro probabilmente non hanno mai sperimentato alcun tipo di vera azione di codifica prima d'ora.
  • Semplicità, ancora una volta : una delle idee principali è insegnare a pensare in modo algoritmico . Avere un linguaggio sofisticato o difficilmente sintattico li allontanerà dal percorso.
  • Generalità : è meglio che il linguaggio non sia progettato per casi di sviluppo speciali. Prendi PHP e MATLAB come esempi che sono rispettivamente progettati per lo sviluppo Web e il calcolo / modellazione.
  • Minimo obiettivo : nessuna programmazione OO forzata (come Java). O almeno con la minima dipendenza dai concetti di OO.
  • Piattaforma : è importante avere Windows come ambiente di sviluppo supportato, poiché quasi tutti sono su Windows.
  • Facile da configurare : è meglio avere un modo semplice di configurare l'ambiente di sviluppo.
  • Preferenza del settore : non è un problema serio. Ma dovrebbe essere almeno una lingua attualmente attiva che consente agli studenti di raggiungere esperienze di sviluppo quasi reali.
  • Portabilità dell'hardware : è importante (ma non necessario) che la lingua sia abbastanza flessibile da essere utilizzata nella programmazione dell'hardware. (Non sto parlando di linguaggi di descrizione hardware come Verilog e VHDL.) L'obiettivo è programmare hardware più semplice basato su processore come microprocessori AVR o interfaccia GPIO Raspberry Pi .

Lo voglio sapere

  1. ci sono altri fattori che mi mancano?
  2. E quali lingue suggerisci come scelte?

2
Per altri criteri che potresti non conoscere, consulta questa domanda .
David Richerby,

1
@DavidRicherby L'avevo visto prima di pubblicare la domanda e, ovviamente, mi ha aiutato molto.
zxcmehran,

Prova Lua.
Ankur,

1
@zxcmehran Sul tema dei paradigmi di programmazione, oggi mi sono imbattuto in questo su Wikipedia e ho pensato che potesse essere rilevante per la tua domanda: confronto di linguaggi di programmazione multi-paradigma
tehDorf

Risposte:


11

La mia risposta? Pitone.

Lasciami spiegare affrontando tutti i tuoi punti.

  1. Semplicità . Il codice Python è come l'inglese. Seriamente, quanto è semplice print("Hello World!")
  2. Generalità . Python può essere utilizzato per lo sviluppo web (via. Flask / Django), l'analisi dei dati (via. NumPy / Pandas / SciPy), i giochi (via. PyGame), nonché una moltitudine di altre attività a causa della grande quantità di librerie presenti siamo.
  3. Obiettivo minimo obiettivo . Puoi fare un po 'di OOP in Python ma non è necessario.
  4. Piattaforma . Python2.7 è praticamente su ogni distribuzione Linux e ci sono molti video di YouTube su come configurarlo su Windows / Mac. Semmai, puoi usare l'interprete online che offre Repl.It.
  5. Preferenza del settore . Correggimi se sbaglio, ma Python è stato costantemente classificato come una delle lingue più popolari.

Nella mia esperienza di insegnamento, è estremamente importante assicurarsi che la sintassi sia il più semplice possibile da scrivere e comprendere. Per un nuovo programmatore, può essere piuttosto scoraggiante quando scrive codice solo per vedere un messaggio di errore (specialmente se non ha la capacità di leggere un messaggio di errore e il debug).

Nota a margine, PythonTutor sarà davvero utile per spiegare alcuni dei principali concetti di informatica / programmazione.


Grazie per averlo condiviso Sono d'accordo con te e penso a Python come una delle migliori scelte.
zxcmehran,

1
Parlando di PythonTutor, JetBrains PyCharm Edu è anche un ottimo strumento per iniziare con Python.
zxcmehran,

Lavoro nella ricerca di linguaggi di programmazione e credo che i buoni linguaggi di programmazione per scopi generici debbano essere digitati staticamente, ma penso anche che Python sia un ottimo linguaggio di apprendimento, specialmente per i giovani studenti. Ci sono molti fattori che altri hanno sottolineato, ma lasciatemi dire anche questo: nella mia esperienza un principiante ha bisogno di vedere il proprio programma crollare e bruciare con i propri occhi. Se il grosso compilatore cattivo continua a dirgli "non puoi farlo perché si schianterà e si brucerà" non è di grande aiuto. Un po 'come se dicessi ai miei figli "non toccare il forno, fa caldo".
Andrej Bauer,

1
E mai e poi mai sottovalutare il fatto che in Python l'indentazione dei blocchi rende evidente la struttura del programma. Basta avere a digitare {e }o begine endai blocchi di codice delimitano è un significativo onere conoscitiva su uno studente principiante. Se la pensi diversamente, passa allo schema e vedi cosa pensi delle parentesi.
Andrej Bauer,

Puoi anche programmare in Python sul Raspberry Pi, il che è carino.
Erica,

10

sfondo

Questa domanda solleva la sua brutta testa ogni 5 anni circa nel nostro dipartimento. Avevamo Miranda e Pascal anni fa, poi avevamo Haskell, ora abbiamo C perché il reparto EE ha deciso di inviarci i loro studenti come prima, ma ha richiesto "qualcosa di pratico come C" e la nostra leadership senza spin non aveva niente di meglio da fare che rispettare.

Perché non uno di quelli raccomandati sopra?

Ne ho insegnato un po 'e ho visto gli studenti uscirne da più di 20 anni. L'unica cosa che si è distinta è che il linguaggio è poco importante fintanto che ti consente di esprimere concetti fondamentali di calcolo con sufficiente facilità e che se non facessi la cosa giusta, riceveresti buoni messaggi di errore, preferibilmente dal compilatore. Ecco dove fallisce Python. I tipi sono importanti! Ecco dove C fallisce: i tipi sono importanti e il polimorfismo è importante! (E no, rendere tutto vuoto di tipo non è una soluzione. Passi semplicemente a Python Land.) Ecco dove java fallisce: i programmi non si adattano alle diapositive - c'è solo troppa caldaia e verbosità.

Quindi, personalmente, non vorrei andare con nessuna delle risposte sopra. Andrei con Haskell. È perfettamente allineato con la matematica. È più conciso di tutti gli altri. Puoi concentrarti sugli elementi essenziali del calcolo. E ghc tende a produrre codice migliore e più veloce rispetto ai compilatori C per i deboli tentativi di ottimizzazione a cui assisto ogni volta che lascio che gli studenti usino C.

Ma veramente..

Detto questo, nella mia esperienza la cosa più importante è che l'insegnante in realtà conosca la lingua meglio di poche lezioni online. Le prime lingue sono proprio questo, le prime lingue. Se i tuoi studenti sono seri ne prenderanno molti altri lungo il cammino. Concentrati sui concetti piuttosto che sulla sintassi.


7

Questa domanda è molto supponente, secondo me. Non c'è nulla che possa scatenare una guerra santa come "quale lingua è la migliore per X". Tuttavia, morderò.

  1. ci sono altri fattori che mi mancano?

Per prima cosa, ti consiglio di leggere cosa ha detto Dijkstra sull'insegnamento . È vecchio ma ancora rilevante - forse molto, molto più rilevante oggi che in passato.

In secondo luogo, consiglierei anche di leggere un post sul blog di Joel Spolsky sullo stesso argomento.

Terzo, e meno importante, i miei criteri personali per una prima lingua sarebbero:

  1. Qualsiasi errore di runtime deve essere segnalato con un messaggio di errore chiaro.
  2. Dovrebbe essere digitato.
  3. Non esiste un unico linguaggio di programmazione in grado di farti comprendere tutti gli aspetti della programmazione. Per diventare un vero programmatore, è necessario imparare molte lingue, specialmente quelle radicalmente diverse.

Il punto 1 è molto, molto utile per un principiante. La maggior parte delle lingue lo soddisfa, con la notevole eccezione di C e C ++. Mentre penso che C sia un linguaggio da conoscere per qualsiasi programmatore (vedi punto 3), penso che sia inutilmente duro per un principiante. La raccolta dei rifiuti è praticamente un prerequisito per il punto 1.

Il punto 2 è il più controverso. Mentre credo che si dovrebbe anche imparare a lavorare in una lingua non tipizzata (di nuovo, punto 3), penso che iniziare con i tipi sia più vantaggioso. Anche in un ambiente non tipizzato, i programmatori spesso pensano a quale tipo di dati dovrebbero essere passati a una subroutine. Inoltre, è utile rilevare errori prima del runtime.

Il punto 2 esclude molte lingue. Nota comunque che Python non è escluso: mentre Python non è tipizzato, c'è il meraviglioso progetto mypy che ti permette di usare un Python tipizzato. Inoltre, Perl6 ha una digitazione facoltativa (graduale), quindi sarebbe ancora presente. Typescript aggiunge anche tipi a JavaScript. Anche se Lisp e Scheme sono esclusi, ci sono molti linguaggi di programmazione funzionale digitati tra cui scegliere (Ocaml, Haskell, F #, ...).

Anche il punto 3 è importante. Bisogna imparare molte cose per essere un buon programmatore. Da cose di basso livello (puntatori, C) al livello più alto (ricorsione, chiusure, polimorfismo / generici parametrici, ...), paradigmi diversi (imperativo, funzionale, logico, ...). Questo non può essere insegnato in un singolo corso, ovviamente. Come primo piatto, dovresti aprire la strada per l'intera strada.


1

Vorrei andare con la risposta di Python, ma mi piacerebbe anche raccomandare un'alternativa: C.

Il mio primo linguaggio di programmazione è stato C e al momento dell'apprendimento mi è davvero piaciuto. L'insegnante (e alcuni compagni) avrebbero preso Java come primo linguaggio di programmazione, ma era impostato per prendere C. L'insegnante mostrava alcuni esempi di Python per mostrare i vantaggi di un linguaggio di programmazione più moderno. Comunque, torniamo all'argomento:

  • Semplicità La sintassi C è piuttosto piccola, ma di tanto in tanto è strana. Non sei costretto ad adottare l'approccio vodoo, ma potresti.

  • Semplicità, ancora una volta Come risultato dei primi punti, gli algoritmi possono essere implementati piuttosto compatti e comprensibili. Pensa a Fibonacci o più avanzato del Knight's Tour.

  • Generalità Usando C potresti implementare ciò che desideri. Puoi anche usare alcuni sottosistemi come i linguaggi di script (Lua).

  • Il minimo obiettivo oggettivo C parla da solo qui. Devi avere una buona conoscenza di C per implementare roba OO.

  • Piattaforma Ogni piattaforma principale supporta il linguaggio, utilizza un compilatore di tua scelta e inizia a scrivere codice.

  • Facile da configurare C non ha bisogno di un IDE con molti pulsanti e una grossa catena di strumenti. Basta prendere un file make (o uno script) e compilare il codice con alcuni comandi. Puoi usare un IDE (Codeblocks, ...) se vuoi.

  • Preferenze del settore Linux, Windows, ...

  • Portabilità dell'hardware Funziona bene con i microcontrollori AVR o con Arduino, che è anche programmabile usando semplicemente il vecchio C.


In alternativa, che dire dello sviluppo su una piattaforma economica come Arduino (potrebbero esserci alternative migliori). Potresti mostrare loro tutte le cose algoritmiche usando semplici stampe stdout o potresti mettere un po 'di hardware al lavoro. Potrebbe essere utile se il codice risultante non solo stampa del testo (o un'immagine, o la gui, o roba del genere ...) ma consente anche a un LED di lampeggiare o qualcosa del genere. Nella mia compagnia a volte ci sono dei corsi per alunni in cui codificano alcune cose su una bacheca Arduino piuttosto semplice e riceviamo un buon feedback dagli assistenti.


Penso che tu stia facendo le domande giuste e ti auguro tutto il meglio per insegnare ai tuoi studenti.


L'unico punto negativo di C e C ++ è che il programmatore deve comprendere alcune delle strutture di sintassi avanzate (come i puntatori) per poter costruire qualcosa che sembra una vera azione. Nella famiglia C, non puoi raggiungere fantasiose GUI o il potere magico della rete senza capire le parti difficili della lingua. Come studente, sarebbe noioso se tutti gli sforzi nel corso di un semestre risultassero solo in una logica che corre all'interno di una finestra della console nera con un carattere strano. Quindi, penso che usare una lingua con un livello superiore possa essere più interessante per loro e incoraggiarli a continuare la strada della programmazione.
zxcmehran,

1
@zxcmehran Esatto, ecco perché ho suggerito qualcosa come Arduino come approccio alternativo.
maxik,

C è semplice come "gestisci la tua memoria da solo" è semplice. Molti comportamenti indefiniti sono un problema.
Djechlin,

1

Vorrei scegliere Swift, usando Swift Playground. Potresti voler controllare quante persone hanno un Mac o un iPad. Tra gli studenti è del 90% in alcuni luoghi. È anche disponibile online su http://iswift.org/playground , quindi non hai bisogno di altro che di un browser. Puoi usarlo sul tuo telefono se non hai un computer.

Swift è una lingua moderna, è una lingua sicura ed è una lingua che ti farà trovare un lavoro se la padroni. (Qualsiasi nuovo codice scritto da Apple è scritto in Swift.)


0

Modifica: mi dispiace, a tale proposito - ho letto male il tuo punto sulla piattaforma. Fondamentalmente pensavo avessi detto che doveva funzionare solo su Windows, ma ora vedo che è solo la maggior parte dei tuoi utenti che utilizza Windows.

Microsoft ha sviluppato il supporto per Linux e Mac e VS Code e Visual Studio per Mac , rispettivamente, e .NET Core, quindi penso che questa sia ancora una risposta valida, anche se forse non così forte.


Ti suggerirei di esaminare C #, .NET Framework e Visual Studio IDE : coprono praticamente tutti i tuoi 7-8 punti. (a seconda di come conti i primi due; D)

  • Semplicità : la sintassi è abbastanza semplice da raccogliere e sul Web sono disponibili molte informazioni per i tutorial per principianti.
  • Semplicità, ancora una volta : C # è un linguaggio fortemente tipizzato, che aiuta a evidenziare gli errori prima ancora che l'applicazione venga eseguita. Visual Studio è senza dubbio uno dei migliori IDE che puoi ottenere con l'evidenziazione della sintassi, l'intellisense e il supporto per il debug.
  • Generalità : anche se potrebbe non essere la scelta migliore, l'ho usato personalmente per un'ampia varietà di applicazioni, dai siti Web e applicazioni desktop alle apparecchiature robotiche.
  • Minimo obiettivo : modificare la programmazione orientata agli oggetti è uno stile di programmazione incentrato su incapsulamento, astrazione, eredità e polimorfismo. C # ha funzionalità che rendono più semplice la scrittura del codice OO, ma non richiede il loro utilizzo. È possibile scrivere un programma C # in modo procedurale.
  • Piattaforma : modifica .NET Core è la versione multipiattaforma di .NET Framework. Funziona su Mac, Linux e Windows.
  • Facile da configurare : non credo che tu possa trovare una lingua e un IDE più semplici per ottenere la configurazione su Windows. Modifica Per quanto riguarda Mac e Linux, non ho alcuna esperienza con esso, ma ci sono VS Code (Win / Mac / Linux) e Visual Studio per Mac (solo Mac). Suppongo che anche questi sarebbero relativamente facili.
  • Preferenza del settore : C # è sicuramente un linguaggio professionale, anche se puoi dare un'occhiata a te stesso cercando lavoro nella tua zona in base alle lingue che stai prendendo in considerazione. Usando Dice , ho ottenuto risultati pressoché uguali per C # (6.548) e Python (6.639) in tutte le offerte di lavoro aperte, ma non so se Dice ha una propensione in un modo o nell'altro, o se ci sono differenze regionali significative.
  • Portabilità dell'hardware : forse mezzo punto qui - Non penso che ci sia molto supporto per la programmazione di microcontrollori con C # oltre a un paio di schede .NET specializzate come Netduino , ma il Raspberry Pi è supportato .

Come bonus aggiuntivo, Microsoft ha un programma chiamato Imagine (precedentemente DreamSpark) in cui distribuiscono un sacco di software gratuito per insegnanti e studenti delle scuole superiori e dell'università. Hanno anche alcuni concorsi per gli studenti.


Solo per ragazzi di Windows. Inoltre, OOP
Eugene,

@Eugene Errore mio, ho letto male il punto sulla piattaforma, quindi la mia risposta riguardava sicuramente solo Windows. L'ho aggiornato per Linux e Mac. Per quanto riguarda "interamente OOP", l'ho anche affrontato nella mia risposta aggiornata in "Obiettivi minimi". Per favore fatemi sapere cosa ne pensate.
teDorf

Anche se C # è un linguaggio maturo, era fuori dalla mia lista; da quando supponevo che avesse un ambito limitato su piattaforma e hardware. Ti apprezzo, è di nuovo sulla lista. Grazie per i collegamenti, li controllerò.
zxcmehran,

-1

Dai un'occhiata a Lazzaro:

http://www.lazarus-ide.org

Lazarus è un ambiente di programmazione basato su Free Pascal Compiler (FPC). Funziona in modo molto fluido su Windows ed è disponibile anche per altre piattaforme principali. FPC supporta una versione modernizzata di Pascal, che si chiama Object Pascal.

Object Pascal è un linguaggio di programmazione multi-paradigma. Puoi scrivere codice in Pascal standard, quindi iniziare a utilizzare le funzionalità OO quando ne hai bisogno.

Le applicazioni del mondo reale possono essere sviluppate utilizzando Lazarus / FPC. Sono entrambi abbastanza maturi, ma puoi anche usare Delphi come alternativa commerciale.

FPC può compilare in modo incrociato i tuoi programmi su dispositivi come Raspberry Pi o Android.

Inoltre, il futuro di Pascal è luminoso. Il linguaggio di programmazione Oberon alla fine prenderà il posto del modo più produttivo di sviluppare software:

ht tp: //www.projectoberon.com

Si spera che gli strumenti da sviluppare a Oberon matureranno nel tempo. Esiste già un compilatore interessante per il target Win64:

https://github.com/congdm/AyaCompiler


La domanda menziona un criterio: "Preferenza del settore: non è un problema serio. Ma dovrebbe essere almeno una lingua attualmente attiva che consente agli studenti di raggiungere esperienze di sviluppo quasi reali." Non sembra che Lazzaro / Pascal si adatti così bene a quello. Sarebbe bello documentare nella tua risposta quali criteri Lazzaro fa bene e quali no.
DW

en.wikipedia.org/wiki/... <br/> wiki.freepascal.org/Lazarus_Application_Gallery <br/> delphi.wikia.com/wiki/… <br/> jonlennartaasenden.wordpress.com/2014/11/06/… <br/> <br/> Quando Lazzaro ha raggiunto il traguardo di 1.0, ha guadagnato molto interesse. Da allora la popolarità non è diminuita. <br/> Delphi / Lazarus è uno degli strumenti più popolari per lo sviluppo di applicazioni desktop. Sono inoltre in fase di sviluppo frame per l'utilizzo di FPC in applicazioni server e mobili.
srcstorm,
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.