Perché Python è raccomandato come linguaggio di programmazione entry level? [chiuso]


16

Ho letto qui su P.SE altre domande in cui si consiglia ai programmatori principianti di scegliere Python come primo linguaggio di programmazione.

Non fraintendetemi, mi piace Python. Mi piace un sacco! Ma la sua filosofia ruota attorno a "Siamo tutti adulti consenzienti qui".

Dal punto di vista dell'esperienza / conoscenza, un programmatore principiante non è un adulto. Che quindi significa che è più facile spararsi nel piede e prendere alcune cattive abitudini anche se sopravvivi alla ferita.

Sto pensando che in un linguaggio "più statico" sarebbe più difficile spararsi ai piedi in quanto sarà più restrittivo.

Torna alla mia domanda. Perché Python è raccomandato come linguaggio di programmazione entry level?

Quali sono i punti che lo rendono utile per insegnare un linguaggio di programmazione? Oppure ... è la preferenza personale del consulente?


17
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot- beh, C e C ++ sono digitati staticamente e rimarrai gravemente sorpreso nel vedere quanti modi diversi puoi far saltare il piede usando loro ...
Péter Török

@ Péter Török: Sì, e ti toglie tutto il piede (c ++: D). Ho detto "più statico" cercando di evitare guerre di fiamma per qualcosa come ... Non lo so ... Java?!?! ... che tutti sembrano odiare come si pensa a scuola / università e la gente ha fa paura ...
JohnDoDo,

1
Penso che il C ++ sia un linguaggio di partenza migliore, perché mi ha aiutato a capire meglio le cose in altre lingue.
systemovich,

1
Ho il mio manzo con Python come lingua di partenza dopo aver frequentato una lezione di programmazione del primo semestre che lo usava. Gli studenti spesso non capivano i "tipi" e le dipendenze degli spazi bianchi li uccidevano. Hanno anche avuto difficoltà a comprendere gli oggetti con quella "auto" referenziazione del business di OO. Ha i suoi meriti ma sicuramente ha anche i suoi detrattori.
Rig

2
@MahmoudHossam Sono d'accordo. Stavo solo mettendo in evidenza alcuni dei punti critici della mia esperienza. Java, C #, Lisp, ecc. Hanno tutti i loro problemi. Questi erano solo i problemi principali che ho riscontrato insegnando Python ai programmatori per la prima volta.
Rig

Risposte:


30

IMO, i punti più importanti che parlano per Python come linguaggio entry-level sono questi:

  • ha una curva di apprendimento superficiale : passare dal nulla a "Hello world" è molto più veloce che nella maggior parte delle altre lingue
  • è intuitivo : la sintassi è stata progettata per seguire il principio della minima sorpresa ed è nel complesso molto coerente (purtroppo le librerie standard non seguono sempre questa coerenza)
  • richiede pochissimo boilerplate : un tipico "mondo Hello" è una riga di codice e i programmi semplici possono essere scritti senza alcun rumore di fondo aggiuntivo che deve essere spiegato (come parole chiave della dichiarazione di funzione, istruzioni di importazione, costrutti di classe, direttive del preprocessore, eccetera.)
  • ci sono strumenti eccellenti e semplici per lavorare con il codice Python, in particolare l'interprete interattivo; non è necessario imparare un sistema di generazione, un IDE, un editor di testo speciale o qualsiasi altra cosa per iniziare a usare Python: un prompt dei comandi, l'editor interattivo e un semplice editor di testo sono tutto ciò che serve
  • utilizza la tipizzazione dinamica , ma a differenza di molte altre lingue tipizzate dinamicamente, i tipi sono trasparenti e le insidie ​​relative al tipo sono rare

Voglio solo enfatizzare l' intuitività della lingua. Ho visto persone con 0 esperienza di programmazione imparare rapidamente Python. Ciò è in gran parte dovuto alla sintassi / grammatica molto vicina all'inglese parlato.
Stephen Gross,

12
All'ultimo punto: le persone spesso mescolano la digitazione dinamica con la digitazione debole. Python è digitato in modo dinamico (tipi associati a valori anziché a variabili) ma è anche fortemente tipizzato (quindi i programmi si arrestano in modo anomalo invece di ingoiare in silenzio errori di conversione)
hugomg

@missingo I secondo - Eagle eyes you have;)
yati sagade

@missingno: conosco la differenza. Un esempio di tipi non trasparenti sono le chiavi dell'array di PHP - le matrici si comportano diversamente per le chiavi intere rispetto a qualsiasi altro tipo; se aggiungi due numeri interi sufficientemente grandi, potresti finire con un float. E questo è solo un esempio - specialmente PHP e javascript (i due linguaggi dinamici più popolari nello sviluppo web) sono pieni di oscuri casi di battitura.
tdammers,

A giudicare dal tuo commento, per "i tipi sono trasparenti" intendi che le regole che governano i tipi sono facili da capire? Cosa intendevi dire esattamente?
phant0m

8

Il mondo di Hello in Python:

 print "Hi there"

ciao mondo a Java:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

ciao mondo in C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

Cerca di parlare della compilazione per gli altri due, e Python è molto più semplice. Devo solo parlare dell'unica idea che mi interessa guardare, tutto il macchinario che complica la faccenda scompare in Python. Posso aspettare che siano pronti a parlare dei moduli, non c'è bisogno di affrettarlo per ottenere stdio.h per programmi semplici. Posso aspettare che siano pronti per argomenti come le lezioni, non c'è bisogno di affrettarli per i loro primi programmi. Ha un REPL per scherzare alla riga di comando. Python è molto bravo a essere concettualmente minimale. Questa è una buona cosa perché aiuta i principianti a concentrarsi sul compito da svolgere.


15
Hai dimenticato "return 0;" nell'implementazione C :) Avviso del compilatore!
Stephen Gross,

2
Questo è il motivo per cui BASIC esisteva in primo luogo. 10 STAMPA "Hello World!" 20 FINE Per un credito extra, il programma Python fallisce "Ha detto 'Hello World!'?" unit test :-)
Ross Patterson il

3
Lo stesso in F #: printfn "Hello World!". Sì, F # è buono per i principianti!
Den

7

Questo è un punto di vista insolito.

La cosa degli adulti consenzienti è una parte molto piccola della filosofia di Python. Certamente non "gira" attorno a quello. Non fa nemmeno parte dello "Zen di Python" che ottieni se lo fai import thisnell'interprete.

Altre cose, come "esplicito è meglio di implicito", "Semplice è meglio di complesso" e "Contabilità della lettura" sono molto più centrali in Python e mostrano perché Python è un buon primo linguaggio.

Ad ogni modo, gli "adulti consenzienti" riguardano solo la mancanza di oggetti privati ​​in Python. Il che di per sé è, a mio avviso, un'altra indicazione del perché è buono per i principianti: non devi preoccuparti di cose come le interfacce quando hai appena iniziato.


1
Sì, ma riguardo a quelle parti "private", dato che puoi accedervi, potresti essere tentato di hackerare alcune soluzioni alternative / scorciatoie intorno a loro non conoscendo meglio.
JohnDoDo,

@JohnDoDo Che differenza fa se, in C # o Java, ho deciso di convertire i privatecampi publicper hackerare? A proposito, in Python, puoi aggiungere il prefisso alla proprietà con un carattere di sottolineatura per renderlo privato (anche se non realmente nascosto)
Onesimus Nessun impegno

4

Esistono due diversi punti. Quando cresci un bambino, dovresti metterli in una bolla che contiene solo cose sicure o lasciarli giocare nel cortile dove potrebbero inciampare e cadere?

Essere dentro la bolla è molto restrittivo. Devi scrivere il tuo codice in un modo molto specifico per farlo funzionare. Quando le persone iniziano per la prima volta, tutto ciò che non è lì per fare ciò che la persona vuole viene visto come uno spreco. Questo può anche portare a "Non so perché sia ​​lì, ma qualcuno mi ha detto che è necessario."

In Python, quello non esiste. Se vuoi dire "Hello World", basta print "Hello World". L'uso di Python come punto di accesso consente a qualcuno di colpire il terreno in esecuzione e scrivere semplicemente il codice di cui ha bisogno per realizzare ciò che desidera. Un programmatore per la prima volta non può comprendere il valore dell'incapsulamento prima di comprendere le basi della programmazione.

Inoltre, nei programmi di piccole dimensioni, la sicurezza dei tipi non è un grosso problema. Qualsiasi codice scritto da uno sviluppatore principiante sarà piccolo e contenuto. Solo quando hai una base di codice più ampia, con molte sezioni che usi come livelli di astrazione e a cui non pensi attivamente, quando la sicurezza del tipo mostra i vantaggi di assicurarti di fare quello che ti serve. Quando tutto il codice è nello stesso file, è più semplice andare a vedere la funzione e vedere cosa hai fatto di sbagliato.

Altri benefici:

  • Molte biblioteche che fanno molte cose
  • Flessibilità di insegnare tecniche di programmazione orientate agli oggetti e funzionali senza far sembrare che uno sia stato costretto a inserirsi in un linguaggio progettato per fare l'altro.

3
Contro analogia: insegnare a tuo figlio a non giocare con il fuoco. 1) Puoi parlargli, spiegare cos'è il fuoco e cosa fa il fuoco, mostrare diapositive di PowerPoint qualunque .. o 2) lasciarlo giocare con il fuoco e farsi bruciare. Il secondo metodo è molto più efficiente. Quello che mi interessa è la possibilità che possa dare fuoco alla casa o addirittura piacerlo e diventare un piromane perché non sono state prese misure di sicurezza. È una situazione estrema, ma non riesco a esprimerla a parole.
JohnDoDo,

1
@JohnDoDo - Quindi lascialo bruciare ... è la migliore scuola e chi non è stato bruciato in una partita da bambino? Non lo ucciderà ...
Rook,

1
@JohnDoDo: Solo perché la lingua ti permette di giocare con il fuoco non significa che l'insegnante non sottolinei che il fuoco è molto pericoloso e spiega come evitarlo. Penso che l'altra cosa che ti manca sia che qualcuno non è legato a una lingua. Dopo aver acquisito una conoscenza di base della programmazione, possono usare una lingua diversa per apprendere concetti più grandi (come non bruciare l'edificio).
unholysampler il

3

Python è un ottimo linguaggio per i principianti perché rende semplici le cose semplici mentre rende possibili cose abbastanza complicate da non essere considerato un linguaggio giocattolo inutile e persino i programmatori avanzati lo trovano lo strumento giusto per alcuni lavori. In particolare, le cose semplici includono:

  • Un minimo assoluto di codice boilerplate per programmi semplici.

  • Raccolta dei rifiuti.

  • Digitazione dinamica

  • Sintassi semplice e pulita.

Confrontalo ad esempio con Java o C ++ e la difficoltà di spiegare tutti i concetti coinvolti in un programma "Hello, world". Le cose complicate includono:

  • Introspezione (equivalente di Python alla riflessione).

  • Patch di scimmia.

  • Le cose che si possono fare con l'enorme libreria standard.

Detto questo, nessuno che conosce solo Python è un buon programmatore perché nessuno che conosce solo una lingua o uno stile di linguaggio è un buon programmatore. Chiunque sia serio sulla programmazione dovrebbe infine imparare qualcosa di livello inferiore, non solo mentre sta ancora cercando di controllare il flusso, la ricorsione e altre nozioni di base.


2

Vedo Python come una buona scelta. In genere per la programmazione di livello "entry" si desidera qualcosa di semplice ma produttivo. Ricevere feedback rapidi supporta sia la motivazione che la velocità di apprendimento. Oserei dire che non si tratta di imparare la "strada giusta", ma piuttosto "farsi agganciare e innamorarsi della programmazione per la vita". Il resto arriverà piacevolmente più tardi attraverso l'esperienza, l'istruzione secondaria, qualunque cosa.


1

IMHO, insegnare alle persone a programmare in lingue "sicure" è una pessima idea. Le persone credono che tutto sia facile e pensano solo all'aggiunta di livelli e livelli di codice. E perdere ogni possibilità di essere in grado di eseguire il debug / risolvere i problemi quando si presentano.

I bravi programmatori devono assolutamente conoscere C / C ++ o persino assembly. E la loro mentalità deve provenire anche da quella parte. E non - "Oh, GC, fa Magic (tm) siamo fantastici, e perché C ++ non ha GC, è stupido." atteggiamento.


1

Per un programmatore principiante, la mancanza di tipi statici è una caratteristica, non un bug!

Quando si impara a programmare anche le cose più ovvie possono essere difficili da capire. I sistemi di tipo dinamico sono molto semplici e si allontanano dagli argomenti più urgenti in un corso introduttivo, come la modularizzazione, il flusso di controllo, ecc.

Ci sono anche alcuni vantaggi concettuali per la digitazione dinamica in un contesto educativo:

  1. I tipi sono associati ai valori, non alle variabili. Questo è probabilmente più intuitivo poiché riflette il motivo per cui i programmi si bloccano effettivamente.

  2. I messaggi di errore sono molto più immediati e concreti. In Python ottieni una bella traccia dello stack e un messaggio che indica cosa è effettivamente andato storto. In una lingua tipicamente statica viene visualizzato un avviso del compilatore che dice cosa potrebbe andare storto.

    Gli studenti che lavorano con un compilatore possono lavorare solo su programmi che comprendono appieno, per non affrontare un errore di compilazione che non possono risolvere.

  3. Il controllo degli errori di runtime consente di eseguire programmi incompleti. Ciò consente programmi più incrementali in cui lo studente può prima preoccuparsi di rendere corretto l'avvio del programma e solo allora vedere cosa succede.

  4. Alcuni concetti importanti, come il polimorfismo parametrico e la tipizzazione delle anatre, sono disponibili gratuitamente in un linguaggio dinamico ma richiedono sistemi di tipo più complessi in un linguaggio statico.

Infine, mentre devi ancora gestire la stessa complessità, non ottieni tutti i vantaggi della digitazione statica quando inizi a programmare:

  • I programmi per principianti sono piccoli e non hanno molti percorsi di codice (quindi non devi preoccuparti troppo dei bug di tipo nei bit di codice a cui si accede raramente)

  • I programmi Begginer non usano interfacce e funzioni di alto livello, quindi non c'è molto da guadagnare nel dipartimento "usa il sistema dei tipi per progettare il programma".


1

C'è una cosa molto, molto , molto importante in Python per i programmatori principianti che tutti sembrano aver trascurato: forzare un rientro valido.

Come alcuni degli altri commentatori, ho insegnato ai principianti per alcuni anni. Era inquietantemente comune vedere cose come questa:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

Ora immagina questa orribile incoerenza su circa un centinaio di righe di codice. Per alcuni studenti, tutti i loro progetti sembravano così.

Non ho idea di come siano riusciti a farlo, e non li ha mai disturbati. Ogni volta che ho chiesto, la loro risposta è stata qualcosa del tipo "Beh, non importa perché il compilatore lo capirà." Anche quando mostro loro un ovvio bug risolvendo il rientro, non ne hanno mai avuto idea.

In Python, questo tipo di rientro è semplicemente non valido. Sono costretti a usare qualcosa che sia almeno leggibile, anche se è un po 'incoerente. Dà loro un'abitudine che, si spera, continuerà quando alla fine impareranno qualche altra lingua.


0

Python è un'ottima prima lingua per la maggior parte dei motivi indicati in precedenza. In particolare, un requisito per una prima lingua è una curva di apprendimento delicata, che ha Python. Non devi sapere tutto sulle classi, per esempio, per iniziare. Sotto questo aspetto è un po 'come il Basic che molti di noi hanno iniziato.

Una cosa che non è stata finora evidenziata è che molte lingue hanno una curva di apprendimento delicata, ma si imbattono rapidamente in un muro di mattoni quando si cerca di fare cose più avanzate. La vecchia scuola di base ne è un buon esempio. Con Python puoi entrare in alcune cose molto avanzate prima di sentire che un'altra lingua potrebbe essere una scelta migliore.

A quel punto un principiante è in grado di capire di più su scelte e compromessi ed è pronto per C / C ++, Java, Assembler, Prolog, Lisp, ecc. In realtà, anche Lisp potrebbe essere un buon primo linguaggio, anche se è piuttosto austero !


-1

Il problema chiave con Python come prima lingua sono la tipizzazione dinamica e la mancanza di dichiarazioni variabili. IMHO sono l'unico grosso problema con la lingua.

La semplice aggiunta di una riga che dice che memorizzerò solo una stringa nella variabile foo consente al programmatore, all'ambiente di sviluppo, al linguaggio (e per "codice professionale" il povero pazzo che deve tornare freddo e supportarlo in seguito) lavorare insieme. Per i normali sviluppatori e principianti, in particolare, non ha senso usare una variabile per più di un tipo. Va bene nelle rare occasioni in cui ha senso usare un tipo var / object esplicito che consenta una digitazione dinamica.

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.