Source: http://www.ariel.com.au/a/teaching-programming.html
Test
Htio sam da pogledam šta je bio uključen u pisanje vrlo jednostavnih programa u (malom) različitim jezicima. Jezika sam izabrao su BASIC, C, Java i Python. Koristio sam C i Java, jer su u upotrebi u odjelu (i drugih nastavnih institucija. Izabrao sam Python, jer volim ga, i mislim da je odličan izbor za nastavu, i sam izabrao BASIC jer, dobro, to samo je bilo previše lako …..
“Hello World” činilo malo previše trivijalno, pa sam odlučila na relativno jednostavan zadatak čitanja dva broja od korisnika, njih dodajući zajedno i štampanje rezultat. Moj interes je bio
- Koliko dugo je potrebno da se napiše i debug kod
- Koliko stvari ima student treba da shvate kako bi se pisati ovaj kod
Vremena s obzirom da napiše kod očigledno ne treba da bude predstavnik vrijeme koje je potrebno od strane student, ali ja vjerujem da oni daju približno tačna mera usporedbu. Ja sam prilično vješt (1-5 godina radnog iskustva) na svakom jeziku, tako da ne mislim da sam bio neopravdano pristrasan.
BASIC
Naučio sam da programirati, natrag u kasnim 70-ih, na nivou I TRS-80, i na dijeljenje vremena sistem koji moje srednje škole morao povremeno pristup. Program je trivijalan u dobrom starom BASIC:
10 INPUT A 20 INPUT B 30 C=A+B 40 PRINT C RUN
Vremena za pisanje:
15 sekundi. Priznajem da nemam BASIC prevodilac praktičan i nisu testirali ovo, ali ja samo znam da radi. (OK, otpustio sam TRS-80 emulator i zapravo ran to – to radi …)
Stvari objasniti:
- Broj linija
- Varijable
- ULAZ
- RUN
Za i protiv
BASIC je vrlo lako za početnike za početak sa, ali to je stara, loše dizajniran jezik, nedostaje u skoro svakom modernom funkciju. Visual Basic dodaje puno “dobru staru BASIC”, ali to nije prikladno (vjerujem) da nauči jednu platformu vlasnički jezika. I to je još uvijek nije stvarno dobar jezik ….
C
#include <stdio.h> int main(int argc, char*argv[]) { int a,b,c; scanf("%d",&a); scanf("%d",&b); c = a+b; printf("%d\n",c); } %> gcc -o add add.c %> ./add
Vremena za pisanje:
oko tri minuta, uključujući i ispravljanje pogrešaka.
Stvari objasniti:
- #include, funkcije (glavni), povratak vrste, argc, argv
- varijable, vrste (int)
- scanf (i ubrzo je ograničenja i kako raditi oko njih)
- printf, format gudače
- pokazivači (već!!)
- sastavljanje, proteze i zarezom
Za i protiv
C je dizajnirao vrhunski hakeri za svoje potrebe. To je dizajniran za pisanje operativne sisteme, kompajlera i drugih sistema alata, a u ovoj ulozi ona je postala gotovo potpuno dominantan.
To može pružiti odlične performanse (pod pretpostavkom da dobar izbor algoritma i dobre C vještine) i omogućava pristup hardveru niskom nivou, ali to obično nisu stvari zahtijeva početnik. C upotreba pokazivači su izvor frustracija i zbunjenost za početnike, ali su bitne u čak trivijalnih programe (poput one gore, iako u trivijalan način).
Nadalje, C rukovanje string je slab u odnosu na mnoge druge moderne jezike (funkcija scanf iznad koristi je izuzetno problematično).
C je veliki i vrlo važan jezik, i svi programeri trebaju imati značajnu izloženost to. To je, međutim, strašno jezik za naučiti početnike. Previše je C koji se mora objasniti, ostavljajući manje vremena za objašnjavanje programiranje.
Java
import java.io.*; public class Addup { static public void main(String args[]) { InputStreamReader stdin = new InputStreamReader(System.in); BufferedReader console = new BufferedReader(stdin); int i1 = 0,i2 = 0; String s1,s2; try { s1 = console.readLine(); i1 = Integer.parseInt(s1); s2 = console.readLine(); i2 = Integer.parseInt(s2); } catch(IOException ioex) { System.out.println("Input error"); System.exit(1); } catch(NumberFormatException nfex) { System.out.println("\"" + nfex.getMessage() + "\" is not numeric"); System.exit(1); } System.out.println(i1 + " + " + i2 + " = " + (i1+i2)); System.exit(0); } } %> javac Addup.java %> java Addup
Vremena za pisanje:
19 minuta! Zapravo, proveo sam oko 15 minuta, nije uspio, onda tražili Google za primjer. Kod iznad je kopiran iz web stranice, koji, upečatljivo sam mislio, počinje riječima: “Moglo bi se pomisliti da je program koji čita u dva korisnik ušla cijele brojeve i ispisuje njihov zbroj će biti jednostavno deo koda”.
Očito, ovaj kod nije savršeno ekvivalent za druge programe ovdje predstavio, jer radi provjere pravilnog greška, međutim Java otežava da to ne provjeri greške. Morate uhvatiti izuzetaka, i nakon što ih je uhvatila možda i učiniti nešto s njima.
Ja sam nekako sramota sam imao toliko problema s tim – ja sam radila na komercijalnoj Java paket za dvije godine, ali zbog toga što je baziran GUI retko da se bavi čitanjem iz konzole. Real Java programeri će vjerojatno izgledati na mene s mješavinom sažaljenja i gađenja. Takav je život.
Stvari objasniti
- uvoz, klase, zarezom proteza
- public, static, prazninu, String, glavni argumenti []
- InputStreamReader, BufferedReader, System.in
- varijable, vrste
- pokušati, uhvatiti, izuzetaka, readLine, parseInt
- System.out.println, sastavljanje, trčanje
Za i protiv
Java je koristan jezik za razvoj cross-platforma GUI, je robustan platformu za razvoj OO, i ima veliku i visoko razvijenim skup biblioteka klase. Možda je najvažnije, to je najpopularniji jezik oko i ima puno posla za Java programere.
Biblioteka opsežna klasa je, međutim, prilično zastrašujuće. Čini se da je klasa za skoro sve, i mnogo “programiranje u Java” Izgleda da se sastoji od “u potrazi za pravo klase”. Čak i nakon dvije godine mislim da ne mogu učiniti puno u Javi bez stalnog odnosi na dokumentaciju.
Java nameće Object Orijentacija, osim provjera i stroge kucanja – sve su to (vjerovatno) dobre stvari – oni olakšavaju za grupu programera na robustno stvoriti velike sisteme. Ali, za male probleme (kao što su one kojima se suočavaju u uvodnom klase programiranje) ove stvari postaju ništa više nego komplikovana, vrijeme-sisa teret.
Razlog za zapošljavanje sama je dovoljna da se Java se “mora naučiti” lanaguage, ali mislim da ćemo naše učenike lošu uslugu, ako je ovo najbolji jezik smo im pokazati.
Piton
import sys a = sys.stdin.readline() b = sys.stdin.readline() c = int(a) + int(b) print c %> python add.py
Vremena za pisanje:
oko jedne minute, uključujući testiranje i ispravljanje pogrešaka.
Stvari objasniti
- uvoz
- varijable
- sys.stdin
- readline (čita string)
- Int (pretvara string u cijeli broj)
- štampa
Za i protiv
Piton ima jako puno dobrih poena:
- provodi dobar stil programiranja (udubljenje ima smisla)
- OO na raspolaganju, ali ne sprovodi
- Izuzeci koristi, ali ne sprovodi
- nije igračka ili akademski jezik – mnogo stvarni svijet rada se obavlja u Pitonг
- omogućava koncentraciju na algoritmima i problem, a ne na jeziku karakteristike i nedostatke.
- je cross platforma i ima snažan skup biblioteka
- je sigurno – to je dinamičan vrijeme provjere i granica staze tip provjere na nizovima
- je moćan ugrađeni tipovi podataka – rječnika, liste, sekvence, funkcije, setova (u 2.4)
- ima moćne ugrađene kontrolne strukture – jednostavne petlje preko sekvence, karta, generatora, lista shvatanja, regularnih izraza …
- zahtijeva manje linija koda za bilo koji problem, i više je čitljiv – na taj način veću produktivnost.
Za nastavu kao prvi jezik, međutim ima neke specifične prednosti. Kao što se može vidjeti iz primjera gore (zanemarujući BASIC), Python zahtijeva manje vremena, manje linija koda, a manje koncepata koji će se predavati do određenog cilja. Ovo omogućava više vremena da se potroši na važne stvari. Osim toga, neke zajedničke student greške su potpuno byassed u Pitonu:
- kraju linije je kraj linije (bez zaboravio zarezom)
- Ne Vrsta deklaracije
- Istina blok struktura uvijek očigledno (ne nedostaje proteze greška)
- dinamičke alokacije memorije i prikupljanja otpada
Konačno programiranje u Pitonu je zabavno! Zabava i česte uspjeh rase povjerenje i interes student, koji je tada u boljoj poziciji da nastavi učenje programa.
Ali, Piton je samo programski jezik
Piton se često odbacuje kao “samo programski jezik” (Perl i Ruby također pate od ovog glupo netrpeljivosti). To je jednostavno pogrešan. To nije “samo programski jezik” – to je pun oglašen vrlo visokom jezik nivo koji je idealan za mnoge aplikacije, uključujući i jednostavan skriptiranje dužnosti.
Činjenica da možete pisati “brzo i prljavo” skripte u Piton je prednost, a ne mana, jer skriptiranje je zapravo bitan dio profesionalnog programiranja. Ako studenti ne znaju Piton (ili Perl ili Ruby, ili ….), oni će trošiti mnogo vremena pokušava riješiti skripta poput problema u Javi.
Ali, Piton je spoooooooooooooori
Piton je tumačiti jezik, i to ne dodati malo iznad glave. Dinamičan provjera granica, dinamičan kucanje i druge pametan Piton stvari usporiti još više. Piton može biti reda veličine sporije nego ekvivalent C koda. kako god
Mnoge, mnoge aplikacije nisu izračunati vezani. Da biste koristili visoke jezik performansi za njih predstavlja primjer greh ranog optimizacije.
Piton sučelja i do C – ogroman dobitak može biti od kodiranja kritične sekcije u C
Ušteda vremena kodiranje u Pitonu, i mnogo veću jednostavnost kod napisan, omogućava mnogo više vremena za eksperimentiranje u efikasniji algoritmi – često mnogo više plodna nego jednostavno radi loš algoritam vrlo brzo.
Zaključak
C i Java su važni jezika – za pojmove koje utjelovljuju, za izglede za zapošljavanje, a za klase problema su riješiti. Studenti moraju dati temeljno uzemljenje na ovim jezicima. Oni ne međutim formirati dovoljan arsenal za profesionalni programer – dobar “skriptni jezik” je imperativ – niti su dobri jezika podučava učenike nove programiranju. Oni imaju puno nadzemnih i drugih prepreka koje se puno zadovoljstvo van, i da oba studenta i radna mjesta nastavnika teže nego što bi trebalo da bude.
Postoje ljudi koji će reći da su prepreke su dio discipline programiranja – učenici moraju naučiti da uhvatiti svoje izuzetke, koriste pokazivači, proglasiti sve njihove vrste i tako dalje. Možda, možda ne – ali ima vremena za to kasnije. Neka studenti imaju jednostavnu radost malih uspjeha koje smo (dobro, “I” u svakom slučaju) imali kada smo pokretanje. Patrick Jordan – [email protected] – 2004-12-14
PostScript (feb 2006)
Osim komentarima gore, ogroman broj ljudi koji je napisao da me nakon ovog članka pojavio na Daily Python istaći da je postojao jednostavniji način da se to uradi u Pitonu:
a = input() b = input() c = a + b print c %> python add.py
(Različiti jedan obloge poput ‘ulazni print () + ulaz () “su također predložio i rade jednako dobro, ali ja bih tvrde su manje korisni za nastavu svrhe). Nadalje, od ulaza () prihvata bilo koji važi Piton izraz, ovaj program samo radi za čitav niz ulaza – int, pluta, gudače (to će ih spojite – ali imajte na umu da moraju biti u navodnicima drugo oni će se tumačiti kao imena varijabli) ili izrazi kao što su “3,14 ** 2”. Još jedan dokaz, kao da je to bilo potrebno, od ljepote Pitonu.
Komentari
Dobio sam broj komentara na ovu temu, a posebno na jezicima nisam spomenuo (Ruby, C ++, Smalltalk, LISP) …
Pročitajte komentari
Pročitajte još više komentara