Some Questions and Answers about using Java in Computer Science Curricula [Romanian]

Original at: http://gee.cs.oswego.edu/dl/html/javaInCS.html

Unele întrebări şi răspunsuri despre folosirea limbajukui de programare Java în programul de învățămînt a Informaticii

De Doug Lea.

[Cea mai mare partea acestor a fost scrisă în iarna anului 1996, şi care nu au fost actualizate în ultima vreme.]

Noi, cei din Departamentului de Informatică de la Universitatea de Stat din New York la Oswego am folosit folosit Java la cursuri de programare speciale introductive (“ CS1'' – de la eng. Computer sience), începând din septembrie 1995, și în al doilea (studenții boboci/la doilea an de studenție) curs de programare (“CS2''), începând cu ianuarie 1996.

În ultimul timp, mulţi oameni din alte departamente de informatică mă întreabă cum așa se întâmplă. N-am ştiu ce să spun în afară de ”așa e bine, așa e rău”.În schimb, eu adunat câteva întrebări şi răspunsuri speciale aici. Voi actualiza şi adăuga material noi cînd voi avea posibilitatea.

În primul rând, aici este un o preistorie scurtă: Acestea sunt cursuri de 13 săptămâni pe tot semestru, cu care poți primi 3 credite, ce include lucrul de laborator cu programare. CS1 (şi ceva din CS2) include lucru de laborator structurat, exerciţii de control. Craig Graci predă CS1. Eu predau CS2 acest semestru pentru studenţii care (cu câteva excepţii) au învățat Java în CS1. Am folosit, de asemenea, Java în alte câteva cursuri de CS, şi multe dintre boboci/studenți a ultimului an ai noștri au ales Java pentru proiecte la cursuri avansate. Dar CS1 şi CS2 (şi într-o oarecare măsură, CS3 şi cursuri legate de acest obiect) reprezintă eforturile noastre principale actuale la evoluţia studiilor în stilul Asociației de mașini de calcul (ACM) pentru bacalaureat, cu program ce are un accent general privind sistemele şi software de inginerie. CS1 şi CS2 sunt, de asemenea, luate de către masterați în informatică, studenți de primul curs, unii masterați în matematică şi ştiinţă, şi alţi studenţi interesaţi. În afară de secvenţa CS1/2/3 bazată pe programare, de asemenea, am nevoie de a preda pentru masterați așa cursuri ca (1), arhitectura calculatorului şi de programare de nivel de jos (low-level), (2), o introducere la metodele formale, (3) un curs comparativ despre limbaje de programare în cazul unde studenți vor învăţa limbi ne asemănate cu Java, cum ar fi ML şi cele asociate cu paradigmele lor de programare, (4), o introducere la inginerie a software bazată pe segmentul prefixului programării lui Watts Humphrey (care a fost predat cel mai recent folosind Java). Înainte de a utiliza Java în CS1/2/3, am folosit cel mai recent și după ordine) C + +, Modula2, Pascal şi Fortran pentru cursuri de bază. Ne standardizăm pe limbi numai pentru secvenţa CS1/2/3. Dincolo de aceste, instructorii solicită sau sugerează folosirea oricărui limbaj care au sens pentru cursurile lor, sau pur si simplu dezvoltă latitudinea studentului. Noi nu folosim încă Java în nici un fel în oricare dintre cursurii noastre pentru nemasterați.

  1. Ar trebui să folosim Java în programul nostru de informatică?
    Eu chiar nu pot născoci nici un motiv pedagogic bun pentru ca să nu fie așa. Unele avantaje sunt evidente:

    • Limbajul este mic, orientat pe obiect, şi e mai uşor de a îl învăţa decît majoritatea limbilor plauzibile altor limbaje de programare.
    • Majoritatea studenților consideră că este plăcut; uneori chiar distractiv.
    • Studenţii (aproape sigur pe bună dreptate), cred că de a învăţa pe acesta este o abilitate valoroasă din lumea reală.
    • Pentru că este uşor de învăţat elementele de bază, puteţi introduce mai multe împrejurul programarului, design-ului şi în rezolvarea problemelor. Mai mult decât Dvs. puteţi folosi în așa limbaje ca C + +.
    • Dacă nu e nimic altceva, este o baza mult mai simplă pentru ca studenții să se familiarizeze cu unele convenţii de limbi în tradiţia sintactică de C (C + +, Obj-C, CORBA-IDL etc).
      Desigur există unele opinii diferite. Nu este greu de găsit articole, pagini web, mail-uri ce spun că Java ar fi fost mai mult asemănătoare cu Ada sau Eiffel sau Smalltalk sau ML sau … probabil chiar Cobol.

  2. Nu este aceasta doar o reacţie la tendinţele populare de scurtă durată? Noi nu credem așa. Pe noi nu deranjează, de exemplu, predarea lui Visual Basic, chiar dacă acesta este, probabil, limbajul de programare cel mai folosit din lume. Dar Java este diferit. Java suportă un set minim de constructe care reflectă împreună cea mai mare parte a progreselor tehnice în metodologie de programare care au avut loc în ultimii cincisprezece ani sau cam așa ceva. Statutul său este similar în multe feluri cu acel ce au avut Pascal şi Unix la începutul anilor 1970. Pascal, Unix, Java şi toate au apărut ca limbaje simple, mai uşor de înţeles cu mai multe alternative practice pentru tehnologiile existente (Algol68 etc, etc Multics şi C + + etc respectiv). Mai mult, fiecare a contribuit idei noi, şi în cele din urmă a servit ca substrat tehnic în continuare pentru avansuri teoretice şi tehnice.

    Astfel, aceasta nu este atât de mult limbajul Java în sine, dar mai repede conceptele de programare şi aptitudini care sunt inseparabile de limba care afectează cursa de învățămînd obiectul de informatică. (În acest sens, faptul că Java este relativ uşor de învăţat, şi că aceasta devine extrem de popular în utilizarea de zi cu zi în sfera comercială şi alte domenii în principal doar adaugă stimul pentru reformarea programului). Acestea reforme includ:

    Construirea software-ului compoziţional
    Aproape toate programele sunt facute din părți, dintre care majoritatea nu sunt scrise de autorul programului. Localizarea, înţelegerea şi folosirea componentelor externe este valoros, ceea ce cere abilităţi tehnice pentru care studenți informaticieni au nevoie de antrenare şi experienţă. Java accentuează importanţa unor competenţe, cum, din moment din care acum programatorii au nevoie pentru a face faţă cu componente instantaneu reutilizabile (Java “.class'' files) care pot fi găsite pe tot Internet.

    Design orientat pe obiecte şi programare
    celor mai multor programe de informatică au integrat mai mult de zece ani concepte orientării pe obiect în progamele lor de învățămînt. Dar problemele lingvistice au fost în parte de vina tendinței apărării predarii grele de programare obiect-orientate după programări procedurale tradiţionale, mai degrabă decât înainte – un fenomen asemănător cu buclele de predare structurate numai după ce s-au predat primele salturi. Aspectele orientării pe obiect ale Java sunt destul de strâns integrate, şi destul de uşor de învaţate, de aceea nu există nici un motiv de înveţat mai întâi de dînsele. În acelaşi timp, spre deosebire de alte limbi orientate pe obiect, Java este (cel puţin punct de vedere sintactic) suficient de similară pentru material prim lui C cu care studenţii ar trebui să aibă ceva probleme de învăţare lui C mai târziu în cursuri de nivel scăzut şi sisteme de programare.

    reactivă
    La toate nivelurile de scară, cele mai multe software-ruri pe care oamenii folosesc sunt reactive – programe de răspuns la evenimente interfeței utilizatorului, sau UI (de la ”user interface”), apelurile primite, stimuli externi de tot felul. Studenții care invață doar pentru a elabora şi implementa de sine stătător cu programe un singur scop sunt prost pregătiți pentru a construi categorii întregi de software util.Java dă posobolitatea unei introduceri simple şi distractive în materia programării reactive prin Applets – programe bazate pe UI care poate rula de la pagini HTML. Mai mult, deoarece Java integrează direct constructele concurente în limba în sa, o scară mai mare de tehnici reactive de programare de mai multe curente poate fi introdus relativ devreme şi natural, fără a fi nevoie pentru a comuta la alte limbi sau instrumente.

    Rolul extinderii a programării şi a programatorilor
    Este imposibil de prezis cum extensiv sau pentru cât timp Java va fi utilizat în WWW, multimedia, aplicaţii de informaţii şi altele domenii. Cu toate acestea, este sigur că tipul de integrare a programării în viaţa de zi cu zi cu Java nu va dispărea în curand. Programarea unei aplicații WWW-accesibile, care o să fie rulată de jumătate oameni din întreaga lume oferă o introducere uşoară a unor probleme de inginerie standarte: impactul software-ului asupra societăţii, necesitatea de a lucra cu alți profesionisti (numai în cazul în care un student, care cunoaşte măcar despre design grafic) în producerea de artefacte, responsabilitate a ingineriei şi etică.
    Una moment comun între aceste noţiuni este că aceste programe “ordinar e '' din ce în ce se bazează pe principiile de proiectare şi inginerie, în plus la algoritmii şi calcule înconjurătoare. Necesitatea de a înţelege structurile clasice de date, algoritmi, formalisme şi tehnici de analiză nu a dispărut cu totul. Cu toate acestea, astfel de subiecte nu pot fi studiate în mod izolat, sau cu excluderea altora. Poate că a fost o dată adevărat că punerea în aplicare a unei bune structure de date a fost echivalent cu punerea în aplicare a unui program util. Cu toate acestea, cu evoluția aplicașiilor, scării și adîncimii software-ului, la fel a apărut necesitatea pentru a incapsula, structura şi coordona implementări, cum ar fi componente ale sistemelor mai mari.

    Pe scurt, credem că ar fi un serviciu rău de a NU oferi cursuri de introducere, cu cât mai devreme, precum şi competenţele care se învață să fie bine susţinute în Java. Introducerea în Java oferă un vehicul pe timp pentru a reexamina aceste aspecte ale cursului standart de informatică.

  3. Nu este o problemă că nu există nici un manual bun pentru cursuri de informatică 1/2/3 bazate pe Java?

    Noi nu am gasit ca aceasta să fie o mare problemă, ci doar o pacoste minoră. (Să cităm pe Jim Waldo care citează pe altcineva: Limbajul la fel nu este tot așa de greu!) Noi nu folosim în present material de text deloc în CS1. În CS2, eu folosesc un limbaj independent de structurile datelor de text în principal, doar ca o referinţă, fără coordonarea prea strânsă cu lectura. Ca o lucrare, nici una dintre cărţile despre Java care le-am văzut (care nu sînt nici una bune) pot fi recomandate ca texte de curs. Cu toate acestea, cărţi, cum ar fi The Java Programming Language lui Arnold şi Gosling a pot servi ca texte auxiliare utile.

  4. Aveți studenții programatori care numai folosesc aplicații?

    Nu pentru CS1, dar da pentru CS2. În CS folosim Java într-un mediu editat-compilat rulat standart și bazat pe text, scriind programe de alimentare cu parți sine stătătoare. În CS2, toate sarcinile sunt scrise ca aplicații. Aceasta a fost iniţial realizate în principal doar pentru motive logistice – campusul nostru nu dispune de așa sisteme ca SPARCStation sau Windows95 pe PC-uri pentru a garanta un acces suficient pentru toate 70-100 de studenți ai CS1 pe semestru.

    Cu toate acestea, până în prezent, acest lucru arată că aceasta sa dovedit a fi un aranjament destul de bun. Este foarte greu de descris construcţia mecanicii aplicației pentru a sfîrși învățămîntul studenților până când ei nu au avut o oarecare experienţă cu expresii Java, variabilele, metode, lecții şi aşa mai departe. Dar, odată ce ei ştiu aceste lucruri, este ușor și distractiv de a introduce pe ei în aplicații. (Toate acestea se vor schimba sigur cu cît mai bune instrumente de dezvoltare şi medii a aplicațiilor deven disponibile, dar chiar şi atunci când acestea v-or devini disponibile. Dar chiar dacă aceste v-or fi disponibile, aceasta poate a întârzia introducerea lor până când studenții v-or avea o idee mai buna desrpe ceea ce se întâmplă pe dedesubt. Sau poate că nu. Având în vedere că instrumentele adecvate nu sunt disponibile, eu doar nu am nici o opinie).

  5. CS1: Începeți deja să predați lecții?

    Destul de mult. De fapt, vom începe să vorbim despre rezolvarea problemelor în general, şi mai general, mai mult despre calcul. Dar, obiectiele si lecții sunt introduse aproape simultan cu expresii şi declaraţii.
    CS2: Așa lucruri adăugătoare ca aplicații nu iau din timp de clasă, care ar putea fi mai bine cheltuit pe structuri de date şi alte materiale a cursului CS2 standart?

  6. Da, acesta ia timp. Dar eu nu cred că este timp pierdut. Asta se potriveste destul de bine cu modul în care (cel puţin versiunea mea obiect-orientată) CS2 este construit pe modelare:

    • Aplicații şi mecanica AWT sunt părţi necesare de introducere în noţiunile modelelor de lucruri cu aspect vizual.
    • Acesta oferă studenţilor cu experienţă dezvoltare bazată pe componente. Studenții trebuie să ştie cum să localizeze şi să înţeleagă lecțiile de pre-construire destul de bine ca să le folosească cu lecțiile lor proprii.

    Subliniind astfel de lucruri înainte şi în timp ce se atacă structurile clasice de date şi algoritmi s-a arătat destul de bine.

    Pe de altă parte, există unele momente care nu se încadrează în tot aceasta prea bine. Prea mult timp de clasă pe probleme de logistica despre utilizarea Netscape, Solaris şi Win95 şi aşa mai departe. Plus la aceasta, predare suficientă de HTML şi mecanicii legate de WWW pentru a supravieţui.

  7. Ați atins întreaga limbă în CS1? CS2?
    Nu, nu e chiar un scop. Noi învăţăm concepte şi competenţe adecvate, şi cum să le exprime în Java, dar nu invers.

  8. Dvs. cereți pe studenți să lucreze prin intermediul Java Sun Tutorials?
    Nu. Sun (şi alte WWW) tutoriale, nu sunt toate utile pentru studenţii care învaţă Java în contextul cursului de Informatică.

  9. Care este impactul asupra echipamentului şi a facilităţilor?
    Veţi dori a avea mai multă putere de calcul şi o conectivitate mai bună. Dar apoi, așa faceți mereu. Veţi trebui, de asemenea, să trăiți cu instalarea actualizărilor regulate de JDK, HotJava etc.

  10. Care este cea mai mare greşeală pe care aţi făcut?
    In primul, probabil, am exploatat prea mult subiectul cu cât de uşor este să înveţi elementele de bază. Uneori făceam asta uitând că este nevoie de timp pentru a obţine minim în ”maturitatea programării' 'în orice limbă.

  11. Care este lucrul cel mai surprinzător?
    Pentru mine, modul în care studenții CS2 atât de uşor se adaptează la noţiunea de construire a reactivelor, programelor distribuite pe Internet, şi cum acest lucru, la fel de mult sau mai mult decât aspectele orientate pe obiect de programare Java, astfel reglementează fundamental atitudinea lor asupra totului proces de programare.

  12. Ați atins programare concomitentă (fire Java etc) sau distribuită (de exemplu prin utilizarea Java RMI) în CS1? CS2?
    Nu, în principal pentru că nu ne-am dat seama încă de modul întroducerii acestor aspecte de programare în contextul acestor cursuri. Dar priviți proiectul Lynn Andrea Stein Rethinking CS101 (MIT), care încearcă să facă acest lucru.

  13. Aveți un plan de învățămînt pe lung viitor?
    Nimic formal. (Cu toate că unii dintre colegii mei de departament nu sunt cu aceasta de acord, eu cred că este contraproductiv de făcut orice fel de planificare pe timp lung pentru cursa de informatică dincolo de asigurarea libertăţii suficient structurale pentru ca studentul să poată să se adapteze, evolueze şi experimenteze cu cursuri. Principala consecinta nedorită că studenţii la cursurile avansate au medii inegale. Ei și ce.)

  14. Aveți careva materiale de curs disponibile?
    Cele mai multe note, articole, exemple, exerciţii de laborator, cod de sprijin etc, sunt scrise de-a lungul acestor cursuri. Unele materiale în dezvoltare sunt disponibile de pe pagina mea, pagina lui Craig Graci şi pagina lui Rameen Mohammadi.

  15. Puteţi da orice rezultate cantitative cu privire la diferenţele dintre cursuri bazate pe Java contra cursuri bazate pe C + +/Modula …?
    Nimic dincolo de observare tentativă până acum, am văzut mai puține probleme decât atunci când am folosit C + +.

  16. Alte colegii, universităţi sau școli superioare folosesc java în cursurile lor de informatică?
    Sun a folosit acest limbaj pentru a menţine o listă online, dar se pare că asta a dispărut. Site-ul ACM SIGCSE conţine de asemenea unele link-uri referitoare.

    De asemenea, priviți unele dintre schimburi cu privire la utilizarea Java în examenele ETS AP CS.

Întrebări suplimentare şi comentarii ar fi binevenite! Trimiteți-le la dl@cs.oswego.edu.


Doug Lea