Nekatera vprašanja in odgovori o uporabi programa Java v računalniških znanjih

Doug Lea

[Večinoma napisana zima 1996 in v zadnjem času ni posodobljena.]

Mi smo v oddelku za računalništvo na Državni univerzi v New Yorku pri Oswego od septembra 1995 uporabljali Java v osnovnem uvajalskem programskem tečaju (“ CS1 ”), in drugem (programski tečaj za novinarstvo / drugo leto) (“ CS2 ”) od januarja 1996.

V zadnjem času me je veliko ljudi iz drugih računalniških oddelkov vprašalo, kako se dogaja. Nikoli ne vem, kaj naj rečem “do sedaj, tako dobro”. Namesto tega zbira nekaj posebnih vprašanj in odgovorov tukaj. Posodabljam in dodam predmete, ko dobim priložnost.

Prvič, tukaj je nekaj hitro ozadje: to so 13-tedenski semester-dolgi 3-kreditni tečaji predavanj z programskimi laboratoriji. CS1 (in nekateri CS2) laboratoriji vključujejo strukturirane, nadzorovane vaje. Craig Graci poučuje CS1. Sem učitelj CS2 tega semestra študentom, ki (z nekaj izjemami) naučijo Java v CS1. Prav tako smo uporabili Java v nekaj drugih tečajih CS, mnogi naši mladi / višji študenti pa se odločijo za uporabo Java za projekte na naprednih tečajih. Toda CS1 in CS2 (in do neke mere obseg CS3 in sorodnih tečajev) predstavljata naša glavna trenutna prizadevanja pri razvijanju našega večinoma ACM-jevega programa BA / BS Computer Science s podiplomskim programom s splošnim poudarkom na sistemih in programskem inženiringu. CS1 in CS2 prav tako prevzamejo glavarji informacijskih znanosti, mladoletniki CS, nekateri matematiki in znanstveniki ter drugi zainteresirani dijaki. Poleg programskega zaporedja CS1 / 2/3 zahtevamo tudi, da se predavatelji izvajajo tečaje v (1) računalniški arhitekturi in programiranju na nižjih nivojih, (2) uvod v formalne metode, (3) primerjalni programski jezik, kjer študenti (4) uvod v programsko inženirstvo, ki temelji na PSP-u Wattsa Humphreyja (ki se je pred kratkim naučil z uporabo Java). Pred uporabo Java v CS1 / 2/3 smo uporabili (najnovejši prvi vrstni red) C ++, Modula2, Pascal in Fortran za osnovne tečaje. Standardiziramo na jezikih samo za sekvenco CS1 / 2/3. Poleg tega učitelji zahtevajo ali predlagajo uporabo katerega koli jezika, ki je smiseln za njihove tečaje, ali pa ga pustite na voljo študentom. Še nikoli ne uporabljamo Java na noben od naših tečajev za »storitve« za nemedicinske delavce.

  1. Ali naj uporabljamo Javo v našem programu CS?
  • Resnično ne morem misliti na noben dober pedagoški razlog, da ne. Nekatere očitne prednosti so:

    • Je majhen, objektno usmerjen in ga je lažje naučiti kot večina drugih verjetnih uvodnih programskih jezikov.
    • Večina študentov meni, da je prijetno; včasih celo zabavno.
    • Študenti (skoraj gotovo upravičeno) verjamejo, da je učenje dragoceno resnično znanje sama po sebi.
    • Ker je enostavno naučiti osnov, lahko predstavite več o programiranju, oblikovanju in reševanju problemov, kot pa pri uporabi jezikov, kot je C + +.
    • Če nič drugega, je študentje znatno preprostejše, da se seznanijo z nekaterimi konvencijami jezikov v sintaktični tradiciji C (C + +, Obj-C, CORBA-IDL itd.).

Obstaja seveda nekaj različnih mnenj tam zunaj. Ni težko najti člankov, spletnih strani in pošte, da bi morala biti Java bolj kot Ada ali Eiffel ali Smalltalk ali ML ali … verjetno tudi Cobol.

2. Ali to ni samo očarljiv odziv na priljubljene trende?

Ne mislimo tako. Na primer, ne poskušamo naučiti Visual Basic, čeprav je to verjetno najbolj razširjen programski jezik na svetu.

Ampak Java je drugačna. Java podpira minimalen niz konstruktov, ki skupaj odražajo večino tehničnega napredka v metodologiji programiranja, ki se je zgodila v zadnjih petnajstih letih. Njegov status je v mnogih pogledih podoben kot pri Pascalu in Unixu v zgodnjih sedemdesetih letih. Pascal, Unix in Java so nastali kot preprostejše, razumljivejše in bolj praktične alternative obstoječim tehnologijam (Algol68, itd, itd.). Poleg tega je vsak prispeval nove ideje in na koncu služil kot tehnični substrat za nadaljnji teoretični in tehnični napredek.

Tako ni toliko jezik Java, temveč programski koncepti in veščine, ki so neločljivo povezani z jezikom, ki vpliva na kurikulume CS. (V tem smislu je dejstvo, da je Java sorazmerno enostaven za učenje in da postaja izjemno priljubljen v komercialni in drugi vsakodnevni rabi, večinoma samo dodali spodbude za ponovni premislek o kurikulumih.) Te vključujejo:

Izdelava kompozicijske programske opreme
Skoraj vsi programi so izdelani iz delov, od katerih jih večina avtor ne zapisuje. Iskanje, razumevanje in uporaba zunanjih komponent sta dragocena in zahtevna tehnična znanja, v katerih študentje CS potrebujejo usposabljanje in izkušnje. Java poudarja pomen takšnih veščin, saj se programatorji zdaj morajo spoprijeti z komponentami, ki jih je mogoče enkrat uporabiti (Java “ .class ” datoteke), ki jih lahko najdete na celotnem spletu.

Object-Oriented Design in programiranje
Večina programov CS je v zadnjih desetih letih vse bolj integrirala koncept OO v svoj kurikulum. Toda jezikovna vprašanja so bila delno krivda za težko zagovarjano težnjo, da bi poučevali programiranje OO po tradicionalnem procesnem načrtovanju, namesto prej – pojav, ki je podoben učenju strukturiranih zank šele po poučevanju surovih skokov. Vidiki OO v Javi so tesno povezani in dovolj enostavni, da se naučijo, da ni razloga, da jih ne bi najprej naučili. Hkrati je za razliko od drugih temeljito predmetno usmerjenih jezikov Java (vsaj sintaktično) dovolj podobna surove C, da bi učenci imeli manj težav kasneje, ko se učijo C v tečajih za programiranje na nizki ravni in sistemih.

Reaktivno programiranje
Na vseh ravneh obsega je večina programske opreme, ki jo ljudje uporabljajo, reaktivno – programi, ki se odzivajo na dogodke UI, dohodne telefonske klice, zunanje dražljaje vseh vrst. Študenti, ki se učijo samo za načrtovanje in izvajanje samostojnih enopredmetnih programov, niso pripravljeni graditi celih kategorij uporabne programske opreme. Java zagotavlja preprosto in zabavno vstopno točko v reaktivno programiranje preko programov Applets – UI, ki se lahko izvajajo iz strani HTML. Nadalje, ker Java neposredno integrira vzporedne konstrukte v sam jezik, se lahko večnacionalne večnitne reaktivne tehnike programiranja uvedejo sorazmerno zgodaj in seveda brez potrebe po preklopu na druge jezike ali orodja.

Širša vloga programiranja in programerjev
Nemogoče je napovedati, kako široko ali kako dolgo bo Java uporabljen v aplikacijah WWW, multimedia in aplikacijskih naprav ter podobno. Vendar pa je varno stava, da se bo vrsta integracije programiranja v vsakdanje življenje, ki jo vidimo z Javo, kmalu umirila. Programiranje apetov, ki je dostopen WWW, ki ga vodijo ljudje na pol poti po vsem svetu, daje nežen uvod v nekatere standardne inženirske probleme: vpliv programske opreme na družbo, potrebo po sodelovanju z drugimi strokovnjaki (če le kolega študent, ki pozna bitno o grafičnem oblikovanju) pri izdelavi artefakatov ter odgovornosti in etike v inženirstvu.

Ena podobnost med temi pojmi je, da se “običajno” programiranje poleg tistih, ki obkrožajo algoritmike in računanje, vse bolj zanašajo na načela načrtovanja in inženiringa. Potreba po razumevanju klasičnih podatkovnih struktur, algoritmov, formalizmov in analitičnih tehnik sploh ni izginila. Vendar takšnih tem ni mogoče obravnavati ločeno ali izključiti druge. Morda je bilo nekoč res, da je bila izvedba dobre podatkovne strukture enaka izvedbi koristnega programa. Ker pa se je aplikacija, obseg in razširjenost programske opreme povečala, je treba tudi zajeti, strukturirati in uskladiti takšne implementacije kot komponente večjih sistemov.

Skratka, verjamemo, da bi bilo nerodno, da bi te programe uvedli že prej kot razumni, koncepti in spretnosti, ki se v Java dobro podpirajo. Uvedba Jave zagotavlja pravočasno sredstvo za ponovno preučevanje teh vidikov standardnega učnega načrta, podobnega ACM.

3. Ali ni težava, da ni nobenih dobrih učbenikov CS1 / 2/3 na osnovi Java?

To ni bilo velik problem; samo manjša neprijetnost. (Navedite Jim Waldo, ki citira nekoga drugega: Jezik prav tako ni tako težak!) Trenutno v besedilu CS1 trenutno ne uporabljamo besedila. V CS2 uporabljam jezikovno neodvisno strukturo podatkovnih struktur, predvsem kot referenco, ne da bi se predolgo uskladili s predavanji. Od tega pisanja ni mogoče priporočiti nobenih knjig iz Jave, ki sem jih videl (kar nikakor ni vse), kot besedilo tečaja. Vendar pa lahko knjige, kot sta Arnold in Goslingov jezikovni program Java, služita kot koristna pomožna besedila.

4. Imate študentke, ki v celoti uporabljajo program Applets?

Ne za CS1; da za CS2. V CS1 uporabljamo Java v standardnem besedilnem okolju, ki ureja prevajalnik, in piše programe s samostojnim omrežjem. V CS2 so vse naloge napisane kot Applets. To je bilo prvotno storjeno predvsem zaradi logističnih razlogov – v našem kampusu ni dovolj SparcStations ali Windows95 osebnih računalnikov, da bi zagotovili zadosten dostop za 70-100 CS1 študentov na semester.

Vendar pa se zdi, da se je izkazalo za zelo dober dogovor. Zelo težko je opisati gradbene mehanike Applet za dokončanje novic, dokler niso imeli nekaj izkušenj z izrazi Java, spremenljivkami, metodami, razredi in tako naprej. Toda, ko vedo te stvari, je enostavno in zabavno uvesti Applets. (Vse to bo zagotovo spremenilo, ko bodo na voljo boljša orodja za razvoj orodij in okolje. Tudi če bodo ti na voljo, bi lahko še vedno zagotavljali boljšo podlago za odložitev njihovega uvajanja, dokler učenci ne bodo imeli boljše ideje o tem, kaj se dogaja pod njim ali morda ne. Ker ustreznih orodij ni na voljo, nimam mnenja.)

5. CS1: Ali začnete pokrivati razrede?

Precej. Pravzaprav začnemo govoriti o reševanju problemov na splošno in računati na splošno. Toda predmeti in razredi so uvedeni skoraj istočasno z izrazi in izjavami.

6. CS2: ne zajema stvari, kot je Applets, oddaljiti od razrednega časa, ki bi se lahko bolje porabili za podatkovne strukture in druge standardne CS2 materiale?

  • Da, potreben je čas. Ne, mislim, da ni zapravljen čas. Pravzaprav se zelo dobro prilega načinu, na katerega (na podlagi mojega modela) je izdelana vsaj moja OOish različica) CS2:
    • Applet in AWT mehanika sta nujni deli uvajanja pojma modelov stvari z vizualnim videzom.
    • Študentom nudi izkušnje z razvojem na podlagi komponent. Študenti morajo vedeti, kako najti in razumeti vnaprej zgrajene razrede, ki so dovolj dobri, da jih uporabljajo z lastnimi razredi.

Poudarjanje teh stvari pred in med napadom na klasične podatkovne strukture in algoritme je zelo dobro delovalo.

Po drugi strani pa obstaja nekaj režijskih stroškov, ki se ne ujemajo tako dobro. Preveč časa v zvezi s logistiko je povezano z uporabo Netscape, Solaris in Win95 in tako naprej. Plus, poučevanje dovolj HTML in povezanih WWW mehanike za preživetje.

7. Ali pokrivate celoten jezik v CS1? CS2?

Ne; to ni niti cilj. Naučimo koncepte in spretnosti, primerne za tečaj, in kako jih izrazimo v Java, ne obratno.

8. Ali od študentov zahtevate, da delajo skozi Sun Java Tutorials?

Št Sun (in drugi WWW) vaje niso vse, kar je koristno za učence, ki se učijo Java v kontekstu učenja računalništva.

9. Kakšen je vpliv na opremo in naprave?

Boste želeli več računalniške moči in boljše povezanosti. Ampak potem, vedno delaš. Prav tako boste morali živeti z namestitvijo rednih posodobitev JDK, HotJava itd.

10. Kakšna je največja napaka, ki ste jo naredili?

V prvem letu smo verjetno preveč izkoristili, kako enostavno se je naučiti osnov; včasih pozablja, da še vedno potrebuje čas, da pridobi minimalno “programsko zrelost” v katerem koli jeziku.

11. Kaj je najbolj presenetljivo?

Zame se način, na katerega se študentje CS2 tako hitro prilagajajo pojmu izgradnje reaktivnih, porazdeljenih programov na internetu in kako to, toliko ali bolj kot objektno usmerjeni vidiki programiranja Java, tako temeljito ureja njihov odnos do tega, kaj programiranje je vse okoli.

12. Ali pokrivate istočasno (Java niti itd.) Ali porazdeljeno programiranje (na primer z uporabo Java RMI) v CS1? CS2?

Ne, predvsem zato, ker še nismo ugotovili, kako ravnati v zvezi s temi vidiki programiranja v okviru teh tečajev. Ampak glej Lynn Andrea Stein’s Rethinking CS101 projekt (MIT), ki poskuša to storiti.

13. Imate načrt dolgoročnega kurikula?

Nič uradnega. (Čeprav se nekateri moji kolegi iz oddelkov močno ne strinjajo, menim, da je kontraproduktivno narediti kakršno koli dolgoročno načrtovanje računalniških učnih načrtov, ne da bi zagotovili dovolj strukturne svobode, da bi se lahko prilagajali, razvijali in eksperimentirali s tečaji. Glavna nezaželena posledica je da imajo učenci na naprednih predmetih neenakomerno ozadje. Torej, kaj.)

14. Imate kakšno gradivo za tečaj?

Večina zapiskov, obrisov, primerov, laboratorijskih vaj, podporne kode itd. Se piše, ko gremo skupaj. Nekatera gradbena gradiva so na voljo na moji domači strani, domači strani Craig Graci in domači strani Rameen Mohammadi.

15. Ali lahko podate kvantitativne rezultate o razlikah med tečaji na osnovi Java ali C ++ / Modula /…?

Nič več, kot smo že videli, da smo do sedaj videli manjšo izgubo kot pri uporabi C + +.

16. Katere druge šole, univerze ali srednje šole uporabljajo Java v CS tečajih?

Sonce je na spletu vzdrževalo seznam, vendar se je zdelo, da je izginilo. Spletna stran ACM SIGCSE vsebuje tudi nekatere povezane povezave.

Prav tako si oglejte nekaj izmenjav o uporabi Java v ETS AP CS izpitu.

Dodatna vprašanja in pripombe so dobrodošli! Pošljite jih na dl@cs.oswego.edu.

Vir: http://gee.oswego.edu/dl/html/javaInCS.html