Väga kiire võrdlus populaarne keeles õpetamiseks programmeerimine

link: http://www.ariel.com.au/a/teaching-programming.html

CS osakond, kus ma praegu õpetan ma hiljuti ühinesin arutelu, mis programmeerimiskeel tuleks kasutada selleks, et õpetada algajatele. Java ja C on kõige sagedamini kasutatavate keelte osakond, ja paljude teemade see on asjakohane, kuid ei ole (minu arvates) päris algajaile. Ma usun, et Python on palju parem valik algajatele ja kindla kuni minu enda seisukoht ma läbi väga lühike, väga unscientific test kirjeldatud allpool.

Test

Ma tahtsin vaadata, mida oli kaasatud ka kirjalikult väga lihtne programmid (väike) erinevaid keeli. Keeled valisin olid BASIC, C, Java ja Python. Olen kasutanud C ja Java, sest need on üldiselt kasutusel osakonna (ja ka muid õppeasutusi. Valisin Python, sest ma armastan seda, ja arvan, et see on suurepärane valik, õppe -, ja valisin PÕHI, sest, noh, see oli lihtsalt liiga lihtne…

“Tere Maailm” tundus natuke liiga triviaalne, nii et ma otsustasin suhteliselt lihtne ülesanne lugemine kaks numbrit kasutaja, lisades need kokku ja printimisest tulemus. Minu huvi oli

  • Kui kaua aega võtab, et kirjutada ja siluda kood
  • Kuidas paljud asjad, kas üliõpilane on vaja mõista, et kirjutada selline kood

Korda, arvestades, et kirjutada kood ei ole ilmselgelt mõeldud esindaja nõutud aja üliõpilane, kuid ma usun, et nad annavad umbes täpselt võrrelda. Ma olen põhjendatult kvalifitseeritud (1-5 aastat töökogemust) iga keel, nii et ma ei usu, et ma olin põhjendamatult kallutatud.

BASIC

Õppisin programmeerima 70ndate lõpus, I taseme TRS-80-s ja ajaga jagamise süsteemil, mille mu keskkoolis oli aeg-ajalt ligipääs. Programm on tühi vana BASIC:

11

Kirjutamise aeg:

15 sekundit. Ma tunnistan, et mul pole BASIC-i tõlki käepärast ja seda ei testi, aga ma lihtsalt tean, et see töötab. (OK, ma vallandasin TRS-80 emulaatori ja tegelikult jooksisin – see töötab …)

Asjad, mida seletada:
  • Rida numbrid
  • Muutujad
  • INPUT
  • PRINT
  • RUN
Plussid ja miinused

BASIC on algajatele väga lihtne alustada, kuid see on vana, halvasti kujundatud keel, mida ei pea peaaegu iga kaasaegse funktsiooni puhul. Visual BASIC lisab palju “head vana BASIC”, kuid pole (minu arvates) asjakohane õpetada ühe platvormi omandatud keelt. Ja see pole veel hea keelekasutus ….


C

2

Kirjutamise aeg:

umbes kolm minutit, sealhulgas silumine.

Asjad, mida seletada:
  • #include, funktsioonid (peamised), tagasitüübid, argc, argv
  • muutujad, tüübid (int)
  • scanf (ja üsna varsti on see piirangud ja kuidas neid ümber töötada)
  • printf, vormingu stringid
  • näpunäited (juba!)
  • kompileerimine, traksid ja semikoolonid
Plussid ja miinused

C kujutasid peamised häkkerid oma tarbeks. See oli mõeldud operatsioonisüsteemide, kompilaatorite ja muude süsteemitööriistade kirjutamiseks ja selle rolli muutmisel oli see peaaegu täiesti valitsev.

See võib pakkuda suurepärast jõudlust (eeldades hea algoritmi valikut ja head C-oskusi) ja võimaldab madala taseme riistvara juurdepääsu, kuid see ei ole tavaliselt algaja poolt nõutavad asjad. Näidete kasutamine C-s on algajatele pettumuse ja segaduse allikas, kuid need on olulised ka üsna triviaalsete programmide puhul (nagu ülaltoodud, kuigi triviaalselt).

Lisaks on C-stringi käitlemine nõrk võrreldes paljude teiste kaasaegsete keeltega (eespool kirjeldatud skannififunktsioon on teadlikult problemaatiline).

C on oluline ja väga oluline keel ning kõik programmeerijad peaksid seda oluliselt kokku puutuma. Kuid see on kohutav keel algajate õpetamiseks. Seal on liiga palju C, mida tuleb selgitada, jättes programmeerimise selgitamiseks vähem aega .


Java

3

Kirjutamise aeg:

19 minutit! Tegelikult veetsin umbes 15 minutit, ebaõnnestus, seejärel otsisin Google’it näiteks. Ülalolev kood kopeeritakse veebilehelt , mis minu arvates algab sõnadega “Võib arvata, et programm, mis loeb kahes kasutaja sisestatud täisarvud ja väljaprindib nende summa, oleks lihtne kood”.

Ilmselt see kood ei ole täiesti võrdne teiste programmide siin esitatud, kuna see õige vigade kontrolli siiski Java raskendab ei teha vigade kontrolli. Sa pead saama erandeid ja võtnud neid, võite ka nendega midagi ette võtta.

Ma olen tegelikult selline häbelik, et mul oli nii palju probleeme – ma olen töötanud Java-paketti kahe aasta jooksul, kuid kuna see on GUI, siis ma pean konsooli lugemisel harva tegelema. Tõelised Java programmeerijad näevad mulle tõenäoliselt mulle segi kahetsuse ja hirmu. Selline on elu.

Asjad, mida seletada

  • import, klassid, semikoolonid traksid
  • avalik, staatiline, tühine, string, peamised args []
  • InputStreamReader, BufferedReader, System.in
  • muutujad, tüübid
  • proovige, püüda, erandeid, readLine, parseInt
  • System.out.println, kompileerimine, töötab
Plussid ja miinused

Java on kasuliku keelena platvormiülese graafilise kasutajaliidese arendamiseks, mis on kindel platvorm OO arendamiseks ja millel on ulatuslik ja hästi arenenud klasside raamatukogude komplekt. Võib-olla kõige tähtsam, see on kõige populaarsem keel ja Java programmeerijate jaoks on palju töökohti.

Laialdane klassi raamatukogu on siiski üsna hirmutav. Tundub, et seal on klass peaaegu kõike, ja palju “programmeerimine Java” näib koosneda “otsides õige klassi”. Isegi pärast kahe aasta jooksul leian, et ma ei suuda Java-s palju teha, ilma et oleks pidevalt viidatud dokumentatsioonile.

Java täidab objekti suuna, erandite kontrollimise ja range tüübikinnituse – kõik (väidetavalt) head asjad – nad aitavad programmeerijatest rühmitada suured süsteemid. Kuid väikeste probleemide korral (näiteks sissejuhatavate programmiklasside ees seisvad) muutuvad need asjad lihtsalt keerulisemaks, aeglaselt koormavaks koormaks.

Ainult tööhõive põhjus on piisav selleks, et muuta Java “peab õpetama” lanaguage, kuid usun, et me teeme oma õpilastele meeleheite, kui see on parim keel, mida me neile näidame.


Python

4

Kirjutamise aeg:

umbes üks minut, sealhulgas katsetamine ja silumine.

Asjad, mida seletada
  • import
  • muutujad
  • sys.stdin
  • readline (loeb stringi)
  • int (teisendab stringi täisarvuni)
  • printige
Plussid ja miinused

Pythonil on palju häid punkte:

  • tagab hea programmeerimise stiili (taandumine on mõttekas)
  • OO on saadaval, kuid mitte jõustunud
  • Erandid, mida kasutati, kuid mida ei rakendatud
  • ei ole mänguasi ega akadeemiline keel – Pythonis tehakse palju reaalset tööd
  • võimaldab keskenduda algoritme ja probleemile, mitte keelefunktsioonidele ja puudustele.
  • on ristplatvormil ja tal on võimas raamatukogude komplekt
  • on ohutu – see sisaldab dünaamilist käitusajatüübi kontrollimist ja massiivide kontrollimist
  • on võimsad sisseehitatud andmetüübid – sõnastikud, loendid, järjestused, funktsioonid, komplektid (2.4)
  • on võimeline sisseehitatud juhtimisstruktuure – lihtsad looping järjestuste, kaardi, generaatorite, loendi mõistmise, regulaaravaldiste jms kohta.
  • nõuab iga probleemi jaoks vähem rida koodi ja on loetavam, seega suurem tootlikkus.

Esimese keele õpetamiseks on siiski mõned eelised. Nagu eespool näidatud (ignoreerides BASIC-i), nõuab Python vähem aega, vähem koodirida ja vähem mõisteid, mida tuleks konkreetse eesmärgi saavutamiseks õpetada. See võimaldab olulistest asjadest kulutada rohkem aega. Lisaks sellele on Pythonis täiesti tavalised üliõpilaste vead:

  • liini lõpp on rea lõpp (mitte unustamata semikoolonid)
  • ühtegi tüüpi deklaratsiooni
  • tõeline plokkstruktuur on alati ilmne (puudub puuduv trapide viga)
  • dünaamiline mälu jaotus ja prügikoristus

Lõpuks on Python programmeerimine lõbus ! Lõbus ja sagedane edu tõotab enesekindlust ja huvi õpilase vastu, kes on seejärel paremini kursis programmi õppimisega.

Kuid Python on lihtsalt skriptikeelt

Python on sageli “lihtsalt skriptikeelt” loobunud (ka see rumal fantaitsia kannatab Perli ja Ruby). See on lihtsalt vale. See ei ole lihtsalt skriptikeelt – see on täies ulatuses väga kõrge tasemega keel, mis sobib ideaalselt paljude rakenduste jaoks, kaasa arvatud lihtsad skriptimisülesanded.

Asjaolu, et saate kirjutada “kiireid ja määrdunud” skripte Pythonis, on eelis, mitte ebasoodus, sest skriptimine on tegelikult professionaalse programmeerimise oluline osa. Kui õpilased Pythoni (või Perli või Ruby või ….) teadmata, raiskavad nad palju Java-s skripti sarnaseid probleeme.

Kuid Python on Slooooooow

Python on tõlgitud keel ja see lisab veidi üldkulusid. Dünaamiliste piiride kontrollimine, dünaamiline trükkimine ja muud nutikad Pythoni asjad aeglustavad seda veelgi. Python võib olla suurusjärgus aeglasem kui samaväärne C-kood. Kuid

  • Paljud, paljud rakendused ei arvuta seotud. Nende jaoks kõrgtehnoloogilise keele kasutamine näitab varajase optimeerimise pahandust.
  • Python liidestab hästi C-ga – tohutu kasu saab teha, kodeerides kriitilisi sektsioone C-s
  • Pythoni aja salvestatud kodeerimine ja kirjutatud koodi palju lihtsam lihtsus võimaldab palju tõhusamalt algoritme katsetada – see on sageli palju viljakam kui lihtsalt väga halb algoritm.

Järeldus

C ja Java on olulised keeled – nende kontseptsioonide puhul, mida nad kehastavad, tööhõive väljavaadete jaoks ja probleemide kategooriad, mida nad lahendavad. Õpilastele tuleb anda põhjalik maandamine nendes keeltes. Kuid need ei moodusta professionaalsetele programmeerijatele piisavat arsenali – hea “skriptikeel” on kohustuslik – samuti ei ole nad head keelteta, et õpetada õpilastele uut programmeerimist. Neil on palju üldkulusid ja muid takistusi, mis võtavad palju rõõmu ja teevad õpilase ja õpetaja töökoha raskemaks, kui neil peaks olema.

On inimesi, kes väidavad, et takistused on osa programmeerimisest – õpilased peavad õppima oma erandit püüda, kasutama näpunäiteid, deklareerima kõik nende tüübid ja nii edasi. Võib-olla võib-olla mitte – kuid selleks on aeg selleks hiljem. Let’s let õpilastele lihtne rõõm väike edu, et me (hästi, “I” niikuinii) oli, kui me hakkasime. Patrick Jordan – patrick@ariel.com.au – 2004-12-14


PostScript (veebruar 2006)

Lisaks ülaltoodud märkustele kirjutas mulle pärast seda, kui see artikkel ilmus Daily Pythonis, mulle suur hulk inimesi, et juhtida tähelepanu sellele, et Pythonis oli lihtsam viis seda teha:

5

Samuti pakuti välja erinevad voodrid nagu “print input () + input ()” ja töötavad sama hästi, kuid ma väidan, et need on õpetamise eesmärgil vähem kasulikud). Kuna sisend () võtab vastu mis tahes kehtiva Pythoni väljenduse, töötab see programm ainult terve hulk sisendeid – ints, ujukite, stringe (see ühendab need – kuid need peavad olema paigutatud teistele, neid tõlgendatakse kui muutuja nimed) või väljendeid nagu “3.14 ** 2”. Pythoni ilu täiendav tõend, nagu oleks vaja.