Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web development, networking and server security. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Brzo upoređivanje najpopularnijih jezika za učenje računarskog programiranja

U CS odeljenju gde trenutno predajem nedavno sam se uključio u raspravu o tome koji programski jezik bi trebao da se koristi za predavanje početnicima. Java i C su najčešće korišćeni jezici u odeljenju, i za mnoge stvari su mogući, ali ne i (verujem) za apsolutne početnike. Verujem da je Python mnogo bolji izbor za početnike, i da bi učvrstio svoju poziciju izveo sam vrlo kratki, vrlo nenaučni test opisan u nastavku teksta.

***

Test

Želeo sam da pogledam šta je uključeno u pisanje vrlo jednostavnih programa u (malo) različitim jezicima. Jezici koje sam birao bili su BASIC, C, Java i Python. Koristio sam C i Javu, jer oni su u opštoj upotrebi u odeljenju (u drugim nastavnim institucijama) Izabrao sam Python jer ga volim, i mislim da odličan izbor za nastavu, a izabrao sam BASIC jer, dobro, je previše lak .....

"Zdravo Svete" je izgledalo previše trivijalno, pa sam se odlučio na relativno jednostavan zadatak, čitanja dva korisnička broja, dodajući ih zajedno i štampajući rezultat. Moj interes je bio da:

  • Koliko treba da se napiše i otkloni greška u kodu
  • Koliko stvari se učenik treba da razume da bi napisao ovaj kod

Vremena dato da se napiše kod očigledno nije trebalo da bude predstavnik vremena potrebnog od strane studenata, ali ja verujem da oni daju grubo preciznu meru poređenja. Ja sam prilično vešt (1-5 godina profesionalnog iskustva) u svakom jeziku, tako da ne mislim da je nerazumno pristrasan.

_________________________________________________________________________________________________________________________________________

BASIC

Naučio sam da programiram još kasnih 70-tih na Level I TRS-80 i na time sharing sistemu kome je moja srednja škola povremeno imala pristup. Program je trivijalno dobri “stari Basic”.

10 INPUT A 20 INPUT B 30 C=A+B 40 PRINT C RUN

Vreme da se napiše:

15 sekundi. Priznajem da nemam BASIC prevodilac pri ruci i nisam ovo testiraoi, ali ja samo znam da radi. (U redu, ja sam “napaljen” na TRS-80 emulator i zapravo vodi ga - radiće ...)

Stvari da se objasne:

  • Brojevi linija
  • Promenljive
  • INPUT
  • PRINT
  • RUN

Za i protiv

BASIC je vrlo lak za početnike, ali to je stari, loše dizajniran jezik, sa nedostatcima u skoro svakoj modernoj funkciji. Visual Basic dodaje mnogo na "dobri" stari BASIC ", ali nije prikladno (verujem) da se nauči jednostavna platforma vlasničkog jezika. I to je još uvek nije stvarno dobar jezik ....

_________________________________________________________________________________________________________________________________________

C

#include 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

Vreme da se napiše:

Oko 3 minuta uključujući i otklanjanje grešaka.

Stvari da se objasne:

  • # include, funkcije (glavne), povratne tipove, argc, argv
  • promenljive, vrste (int)
  • scanf (i uskoro njegova ograničenja i kako da se radi oko njih)
  • printf, format strings
  • pokazivači (već!!)
  • komplajmiranja, zagrade i zareze

Za i protiv

C je dizajniran od strane vrhunskih hakera za sopstvenu upotrebu. Dizajniran je za pisanje operativnih sisteme, kompajlera i drugih sistemskih alata, i u toj ulozi je gotovo potpuno dominantan.

On može da obezbedi odlične performanse (pod pretpostavkom dobrog izbora algoritma i dobre veštine C) i omogućava nizak nivo pristup hardveru, ali to su stvari koje se obično ne zahtevaju od početnika. Upotreba C pokazivača je izvor frustracija i konfuzije za početnike, ali oni su neophodni i u prilično trivijalnim programima (kao onaj gore, iako na trivijalan način).

Dalje, C niz znakova je slab u poređenju sa mnogim drugim savremenim jezicima (scanf funkcija koja je navedena gore je notorno problematična).

C je veliki i veoma važan jezik, a svi programeri treba da imaju značajnu izloženost prema njemu. To je, međutim, užasan jezik da ga početnik nauči. Ima previše C koji treba da se objasni, ostavljajući tako manje vremena za objašnjavanje programiranja.

_________________________________________________________________________________________________________________________________________

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

Vreme da se napiše:

19 minuta! Zapravo, proveo sam oko 15 minuta, nisam uspeo, a onda tražio primer na Googlu. Kod iznad je kopiran sa web stranice , koja, kako kažu, pomislio sam, počinje sa rečima "Može se pomisliti da program koji čita cele brojeve dva korisnika i ispisuje njihov zbir će biti jednostavan deo koda ".

Očigledno, ovaj kod nije savršeni ekvivalent drugim programima koji su ovde predstavljeni, jer nema odgovarajuće proveravanje grešaka, ali Java čini da nije teško da uradi provera greške. Morate uhvati izuzetke, i pošto ste ih uhvatili možda i nešto uradite sa njima.

Ja se ustvari stidim jer sam imao toliko problema sa ovim. Radim na komercijalnom Java paketu već dve godine, ali zato što je GUI osnova retko sam morao da se bavim čitanjem konzole. Pravi Java programeri će verovatno gledati na mene sa mešavinom sažaljenja i gađenja. Takav je život.

Stvari da se objasne:

  • import, classes, tačke i zarezi, velike zagrade
  • public, static void, String, glavni args []
  • InputStreamReader, BufferedReader, Sistem.in
  • promenljive, tipovi
  • try, catch, izuzetci, readLine, parseInt
  • System.out.println, compiling, running

Za i protiv

Java je koristan jezik za razvoj cross-platforme GUI, robustan je za razvoj OO platforme, i ima obiman i veoma razvijen skup biblioteka klasa. Možda je najvažnije, to što je najpopularniji jezik okolo i ima puno posla za Java programere.

Obimna biblioteka klasa je, međutim, prilično zastrašujuća. Izgleda da je klasa za skoro sve, i mnogo "​​programiranje u Javi" izgleda da se sastoji od "potrage za pravom klasom". Čak i nakon dve godine ja sam ne mogu mnogo uraditi u Javi bez stalnog pozivanja na dokumentaciju.

Java sprovodi orijentaciju objekta, izuzimajući proverei stroga ukucavanja- sve su to (verovatno) dobre stvari - one olakšavaju grupi programera da snažno stvori velike sisteme. Ali za male probleme (kao što su oni sa kojima ste suočeni u uvodnim programskim klasama) ovakve stvari postaju ništa više nego komplikovane, nepotreban teret i gubljenje vremena.

Zapošljavanje je dovoljan razlog da se Java jezik koji se "mora naučiti", ali ja verujem da radimo na štetu naših studenata ako je ovo najbolji jezik da im pokažemo.

_________________________________________________________________________________________________________________________________________

Python

import sys a = sys.stdin.readline() b = sys.stdin.readline() c = int(a) + int(b) print c %> python add.py

Vreme da se napiše:

Oko jedan minut, uključujući i testiranja i debagovanja

Stvari da se objasne:

  • import
  • variable
  • sys.stdin
  • readline (čita niz)
  • int (konvertuje niz u ceo broj)
  • print

Za i protiv

Python ima strašno mnogo dobrih strana:

  • sprovodi dobar stil programiranja (udubljenje ima smisla)
  • OO na raspolaganju, ali se ne primenjuje
  • Izuzeci se koriste, ali ne primenjuju
  • Nije igračka ili akademski jezik - mnogo rada u realanom svetu vrši se u Python-u
  • Dozvoljava koncentraciju na algoritme i probleme, a ne na osobine i mane jezika.
  • je cross platforma i moćan skup biblioteka
  • je siguran - on ima dinamičnu Run Time vrstu provera i granice provere nizova
  • ima ugrađene moćne tipove podataka - rečnici, liste, nizovi, funkcije, garniture (u 2.4)
  • ima moćne ugrađene kontrolne strukture - jednostavne petlje preko sekvenci, mapa, generatori, listu razumevanja, regularne izraze...
  • zahteva manje linija koda za bilo koji problem, i više je čitljiv -.. tako je produktivniji.

Za nastavu kao prvi jezik on ima neke specifične prednosti. Kao što se može videti iz primera gore (ignorišući BASIC), Python zahteva manje vremena, manje linija koda, manje koncepata koji se uče da se postigne zadati cilj. Ovo omogućava više vremena da se troši na važne stvari. Dalje, neke zajedničke studentske greške su potpuno zaobidjne u Python-u:

  • kraj linije je kraj linije (nema zaboravljenih tačka zarez)
  • nema ukucavanja izjava
  • istinita struktura bloka uvek je očigledna (ne nedostaje greške velike zagrade)
  • dinamička dodela memorije i odnošenje smeća

Na kraju programiranja u Python-u je zabavno.Zabava i česti uspesi rađaju poverenje i interesovanje učenika, koji su potom u boljoj poziciji da nastavi učenje programa.

Ali Python je samo programski jezik

Python se često odbacuje kao "samo programski jezik" (Perl i Ruby takođe pate od ove smešne netrpeljivosti). Ovo je jednostavno netačno. To nije "samo programski jezik" - on je potpuno visoko sadržajni nivo jezika koji je idealan za mnoge aplikacije, uključujući i jednostavne dužnosti skriptovanja.

Činjenica da možete da pišete "brze i prljave" skripte u Python-u je prednost, a ne mana, jer skriptovanja je zapravo suštinski deo profesionalnog programiranja. Ako učenici ne znaju Python (ili Perl, ili Ruby, ili ....), oni će gubiti mnogo vremena pokušavajući da reše scenario poput problema u Javi.

Ali Python je spoooor

Python je jezik tumačenja, i to dodaje izvesna opterećenja. Dinamičke granice provere, dinamično kucanje i druge pametne stvari će usporiti Python još više. Python može biti sporiji od ekvivalentnog C. Međutim

  • Mnoge aplikacije nisu u vezi računanja. Da biste koristili visoke performanse jezika, za njih je na primer greh rana optimizacija.
  • Python se interfejsuje dobro sa C - ogromni dobici se mogu dobiti kodiranjem kritičnih delova u C.
  • Vreme uštedjeno kodiranjem u Python-u i mnogo veća jednostavnost pisanja koda, omogućava mnogo više vremena za eksperimentisanje u efikasnijim algoritmima - često mnogo plodnije nego jednostavno uraditi loš algoritam vrlo brzo.
_________________________________________________________________________________________________________________________________________

Zaključak

C i Java su važni jezici - za koncepte oni otelotvoruju, izgledi za zapošljavanje su veći, kao i za klase problema koje rešavaju. Studenti moraju imati temeljno znanje o ovim jezicima. Oni ipak ne formiraju dovoljan arsenal za profesionalne programere - dobar "programski jezik" je obavezan -niti su oni dobri jezici da nauče studente početnike u programiranju. Oni imaju mnogo nadzemnih i drugih prepreka koje uzimaju puno zadovoljstva, i čine posao i studenta i nastavnika težim nego što bi trebalo da bude.

Postoje ljudi koji tvrde da su prepreke deo discipline programiranja - studenti moraju da nauče da uhvate svoje izuzetke, koristite pokazivače, sve svoje izjave, i tako dalje. Možda, možda ne - ali kasnije ima vremena za to. Pustimo da studenti imaju jednostavnu radost malih uspeha koje smo (dobro, "ja" u svakom slučaju) imali kada smo počinjali.Patrick Jordan - patrick@ariel.com.au - 2004-12-14

_________________________________________________________________________________________________________________________________________

Postscript (Feb 2006)

Na stranu gornjih komentara, ogroman broj ljudi mi je pisao nakon objavljivanja ovoga članak u Daily-ju da istaknem da postoji jednostavniji način da se to uradi u Python-u:

a = input() b = input() c = a + b print c %> python add.py

(različiti jedan lajneri kao što su "print input () + input () 'su takođe predložili i rade isto tako dobro, ali ja tvrdim da su manje korisni za svrhu nastave). Dalje, pošto input () prihvata bilo koji važeći izraz Python, ovaj program samo radi čitav niz inputa - INTS, plovci, stringovi (to će ih povezati u obliku lanca - ali imajte na umu da oni moraju biti u navodnicima drugačije oni će biti protumačeni kao imena promenljivih) ili izrazi kao što su "3.14 ** 2". Dalji dokaz, ako je potrebno, o lepoti Pythona.





Published (Last edited): 31-01-2013 , source: http://www.ariel.com.au/a/teaching-programming.html