Sunt de lucru pe un proiect care reunește carte și interactiv „Kay Horstmann despre cărți și nu numai

Sunt de lucru pe un proiect care reunește carte și interactiv „Kay Horstmann despre cărți și nu numai

Există o mare varietate de cărți despre Java - și există un număr de „Ever“ cărți despre Java. Printre acestea se numără «Core Java» (în ediția românească a «Java. Biblioteca profesională") Kay Horstmann și Geri Kornella. Acesta a apărut doar un an mai târziu, limba în sine, imediat devenind una dintre principalele surse de informații cu privire la acest subiect. Și pentru următorii douăzeci de ani a stat timp de zece ediții, scrupulozitate completate cu informații cu privire la noile versiuni ale Java, astfel încât acesta a crescut mai mult de o generație Java-developers.

Kay este încă în urma îndeaproape inovațiile Java, iar in toamna la conferința St. Petersburg Joker spune. că în Java 9 bun. Și, în așteptarea sosirii lui, l-am întrebat despre multe lucruri: despre activitatea pe carte, și despre dacă acestea disloca cursuri on-line, precum și despre diferențele dintre lumea academică a industriei și viitorul Java.

- lucru pe o carte de zeci de ani - ce e asta? Are „Legacy“, apare atunci când un fragment al simțit depășite, ci pur și simplu „ridica si arunca“ este imposibil? Se pare că în cazul în care actualizarea cărții pe refactoring? Și provoacă acolo acum ceva scris ani, sentimentul de „cât de prost am scris?“

Și da, lucrul la o nouă ediție se simte ca refactorizare. În multe cazuri, un nou mod de a face ceva pentru a face alte abordări depășite, și am de a face cu sute de exemple de cod. Îmi place să folosesc noile caracteristici în toate cazurile în care acestea sunt adecvate pentru cititori nu a apărut un amestec confuz de vechi și noi. Simplu caz - operator de diamant, este nevoie doar pentru a găsi expresii cum ar fi «nouă ... <.>(.)“. Dar, atunci când este adăugată la o expresie lambda, a trebuit să rescrie mai mult de jumătate din programele de eșantionare, uneori greu le vom reorganiza.

Noi nu am vrut să «Core Java» Stouter până la trei volume, astfel încât, în fiecare ediție unele lucruri sunt eliminate. Printre acestea - informații despre bug-uri în versiunile mai vechi care sunt deja nimeni nu îi pasă, „rezolvări“, care au devenit caduce ca urmare a îmbunătățirii limba, și pe scară largă „cosi“ API. Odată ce am avut o descriere foarte detaliată a CORBA, și a scăpa de ea a fost decizia destul de ușor. Atunci când eliminat descrierea RMI, unii cititori s-au supărat, dar ascultă, atunci când a fost ultima data cand cineva nu a utilizat în exemplul de jucărie? Și acum ales ca urmare a unei decizii dificil: ce să fac cu Swing?

Uneori textul se furișează o eroare tehnică, și eu sunt o listă de erori văzut, astfel încât cititorii să le poată raporta. Sunt vin foarte serios la acest „bug-rapoarte“ la eroarea nu trăiesc mai mult de o ediție. Din fericire, situația este „cât de prost am fost,“ apare rar, dar uneori perspectiva mea se dezvoltă în timp. De exemplu, atunci când clasele imbricate, eu sunt în detaliu pentru a explica modul în care confiscarea variabilelor locale Rezultatele decompilare prin javap. Mai târziu, m-am gândit la asta. Am explicat în detaliu, cum ar fi, de exemplu, se execută punct de vedere tehnic apeluri de metode? Nu, și cititorii nu au nevoie de astfel de detalii. În practică, programatorii sunt pe deplin pregătiți să aibă încredere compilator că este capabil să înțeleagă și să conteste metoda și cu captura variabilele locale, așa că am eliminat părțile inutile.

- În timp ce unele dintre cărțile face apel la un public restrâns, «Core Java» deschide tot felul de oameni care au cunoștințele și experiența este foarte diferită. Apar dificultăți, atunci când scrie „pentru toți“? Acest lucru ajută să facă față cu ei?

- Dificultăți au, și este inevitabil ca nu ne putem aștepta la înțelegere în toate materialele avansate de cititor novice. Mă aștept ca cititorul, care este doar de învățare de programare orientat-obiect, se va ocupa cu grijă cu moștenire și interfețe, și reflecție sau module doar priviri superficiale, în timp ce expertul va face opusul. Cu capetele de API mai ușor, există natural pentru cititorii să săriți peste acele capitole care nu sunt interesați.

In zilele noastre, puțini oameni citesc programare carte din scoarță în scoarță. Mulți dintre cititorii mei folosesc Safari Books, care se deschid doar pagina dedicată unui anumit subiect. Și am structurat «Nerăbdătoare» serie de cărți, astfel încât materialul poate fi ușor de înțeles în această formă, fără referințele constante la alte site-uri ale aceleiași cărți.

- Când scrie despre Java de mai mulți ani și vdaoshsya în detaliu dacă există un sentiment de „cât de mult de Java se face complet greșit“? Am încercat acolo ceva mai bun?

- Desigur, atunci când este vorba de o astfel de platformă mare și complex, cum ar fi Java, există multe lucruri pe care ceva este greșit. Dar numai în cazuri rare, ceva este teribil de greșit, de exemplu, este existența unor tipuri primitive, care ar trebui să fie o chestiune internă a mașinii virtuale. (Și sper că noua versiune de Java este corectă în viitor.)

Dar, desigur, există multe substanțe iritante mici. De exemplu, de ce API-ul a luat douăzeci de ani pentru a ne da o metodă pentru a citi fluxul într-o matrice de octet? De ce API pentru Unicode atât de rău? Am putea numi zeci de alții.

Prin sozhelaniyu, ele nu sunt atât de ușor să se stabilească. În alte proiecte opensorsnyh cineva doar sugerat ar fi ceva mai bun ar putea fi o discuție, rafinament se întâmple, și apoi ar fi fost făcute modificări în cazul în care nu au existat obiecții puternice. Și în cazul Java opuse. Avem nevoie de resurse pentru a promova în mod activ orice schimbare, și că a trecut prin cadrul de reglementare. Desigur, din aceasta există un avantaj, aceasta înseamnă că programul Java 1.0 o ocazie excelentă de a compila cu succes. Dar descurajează de asemenea, toată lumea de la au făcut modificări.

Ca un exemplu, am sugerat o dată că necesitatea de a fi capabil de a rula programul, apelează constructorul (cu parametrul String [] sau fără argumente) a clasei specificate în linia de comandă, în cazul în care clasa conține o metodă principală. Eu chiar l pună în aplicare - cod rula în VM nu este atât de dificil. De ce aș face la acest lucru? Pentru că ar fi o mană cerească pentru studenți și prepodateley, care nu ar trebui să se ocupe cu public static void main în prima lectură. ar arata ca acest «Hello, World!»:

Un al doilea program-pilot va scufunda imediat în obiecte fără a avea grija «statice».

Nu a existat nici un risc de erori de compatibilitate înapoi, deoarece anterior, o astfel de clasă nu a putut fi lansată.

A fost propunerea mea modestă este aprobat? Departe de ea. Acesta a fost respins ca fiind „prea complicat“ și „capacitatea de a amenința compatibilitatea inversă.“

Dar, fie ca aceasta poate, în timp, multe dintre caracteristicile enervante ale API sunt corectate. Poate din cauza faptului că oamenii din Oracle ei sunt enervante la fel ca noi.

- Ai auzit de Java-dezvoltare, care cărțile nu sunt doar le-a predat Java, dar și-au influențat stilul lor de programare?

Există o excepție. Am scris o carte despre Scala lui, în cazul în care am un punct destul de clar de vedere: vizualizați Java-programator care nu vrea să renunțe la lor orientate spre obiect și a trece la o programare pur funcțională. Acei cititori care împărtășesc punctul meu de vedere, mi-a plăcut. Pentru cei care nu împărtășesc - nu foarte.

Acesta este pericolul cărții cu o opinie personală. Dacă acest lucru nu este atât de adevărat și convingătoare, încât devine opinia majoritară, atunci limitați mai mult public. În cazul cărților «Core Java» Eu spun cititorului cum să folosească în mod eficient Java, dar dincolo de asta, nu predica nici o metodologie specială.

Sunt de lucru pe un proiect care reunește carte și interactiv „Kay Horstmann despre cărți și nu numai

- Tu pe site-ul sub «citate memorabile» un citat, teasing Herbert Schildt. Din cauza cărților despre Java concura, vreau să știu - este doar o glumă, sau ai o rivalitate. )

- Cu arme - nr. Nu l-am cunoscut. Nici măcar nu știu dacă el există. Poate este un nume de cod pentru un program cu inteligență artificială. Glumeam, Herb :-) doar mi-a placut citatul.

- Ai participat la crearea intro curs de programare Java pe Udacity. Simti că viitorul programare pentru predare cursuri on-line? Fie că cărțile sunt din ce în ce mai puțin relevante? Ce sfat aveți în primul rând la persoana care dorește să devină un dezvoltator: o carte sau Mooc?

- Ai experiență de lucru în universități, și într-un startup, adică, știi, și lumea academică și industrie. Care este comuta între aceste contexte? Cât de departe aceste două lumi în afară?

- Aici se află o neînțelegere pe scară largă. Elevii cere de multe ori ceva de genul: „De ce trebuie să predau teoria automatelor? Ceea ce am cu adevărat nevoie este un curs pe AngularJS ».

Nu infirm cu faptul că în cazul în care un student pentru un anumit proiect are nevoie de angularjs, că el ar trebui să învețe AngularJS. Dar, ca un curs universitar. Universitatea este bun pentru a învăța lucruri care vor fi în continuare relevante 20 de ani mai târziu. Și să învețe să învețe. Deci, după 20 de ani, atunci când un fost student va trebui să învețe cadrul XYZ, acesta va avea abilitățile și de fond este de a stăpâni rapid propria lui.

Unii oameni cred că universitățile merg prea departe cu predarea de materiale inutile, iar acestea sunt cu programul lor de patru ani, lipsit de flexibilitate. De aceea, există toate aceste „academie de hacking» și «nanodegree». M-am venit în minte sunt câteva modalități de modernizare a curriculum-ului în informatică, și, de asemenea, eu recunosc că unele dintre aceste metode nu vor fi puse în aplicare din cauza barierelor instituționale. Dar, programe de educație non-tradiționale, du-te la cealaltă extremă prin faptul că nu furnizează cunoștințe de bază suficiente. Acestea diferă de la universități într-un alt mod: ei trebuie doar să se concentreze pe cei mai motivați capabili să umple multe dintre tine golurile.

O altă mare diferență între universitate și activitatea în industrie este că cercetarea academică sa concentrat pe originalitate și de muncă în industrie - pe repetabilitate. În universități, puțin calitatea codului apreciat, cu excepția persoanelor care studiază ingineria software. Poate prea mult se sprijină pe o cercetare originală în universități. Un cuplu de ani în urmă, am lucrat într-o instituție de învățământ elvețian mici în cazul în care facultatea au fost acordate pentru munca lor cu companiile locale. Am crezut că a fost o idee bună.

- Și din cauza diferenței dintre cele două lumi nu este, astfel încât ideile bune din lumea academică, care ar putea fi utile în industria pur și simplu nu ajunge acolo?

- Nu știu dacă acest lucru se întâmplă cu industria a ratat o mulțime de muncă academice cu utilizarea aplicației. Multe companii de software au angajați cu grade academice, este foarte familiarizat cu literatura de cercetare.

De exemplu, uita-te la vehicule aeriene fără pilot. A început în universități, iar apoi sa mutat în mod natural în industrie.

Sau, în lumea limbaje de programare, uita-te la colectarea gunoiului. Acest lucru de-a lungul anilor a fost un subiect de cercetare, dar atunci când a fost potrivit pentru mediul industrial, acesta a fost preluat rapid în funcțiune. Deci, eu nu sunt deosebit de îngrijorat cu privire la secretele intelectuale nepretuite ascunse într-un turn de fildeș.

- Ai învățat CS în lume - în SUA, Elveția, Vietnam și Macao. Ce a cauzat o astfel de răspândire?

- Îmi place să călătorească.

- Și în ceea ce privește munca ta, dacă nu a existat nici o diferență semnificativă între cele două țări, sau știință de calculator și informatică din Macau?

- Peste tot la fel. Peste tot am fost și studenți cu merite deosebite, și nu prea proeminent. Ei bine, elevii vietnamez nu erau obișnuiți să se bazeze pe propria lor judecată. Ei în mod constant mi cele mai mici întrebări cu privire la modul în care acestea ar trebui să acționeze, și întotdeauna am răspuns că acestea sunt foarte inteligente (ei chiar au fost astfel, au fost selectate dintr-un 1%, ca urmare a unui examen școlar), și trebuie să formeze propriile opinii. Cred că le-a învățat mai mult decât orice informații tehnice am fost de prelegeri.

Eu credem că în știința calculatoarelor, destul de norocos cu zona în care realizările pot fi evaluate în mod obiectiv destul, iar oamenii din diferite locuri au fost cooperat cu succes. Când despre Silicon Valley spune că există o meritocrație, este într-o oarecare măsură, adevărat. Desigur, numai o anumită - ne-am povești de oameni care nu oferă oportunități egale de a se dovedi ca un programator auzit. Dar în știința calculatoarelor acest lucru este mult mai bine decât în ​​alte zone, în cazul în care cea mai mare parte a banilor primite de oameni din același partid.

- Wikipedia afirmă că de mai mulți ani ați folosit în cărțile de propriul său stil de indentare, și apoi abandonat. De ce am început, sa oprit, și de ce?

Povestea este. În cazul C, avem stilul KR și stilul Allman:

Ceea ce dorim - pentru a economisi spațiu, sau pentru a alinia acolade? Și dacă avem dreptate și că, și alta? Aici, de asemenea, vine în „stil Horstmann“:

Oamenii nu ia plăcut. Pentru a face acest lucru, nu a existat nici un motiv rațional vizibile; scrie asa ca parea ciudat. În cele din urmă, am renunțat, pentru că stilul a fost nici un sprijin din partea tulinga. Jocul nu este în valoare de lumânare.

- Scrii despre Java de zeci de ani și am văzut cum sa schimbat de-a lungul timpului. Ce părere aveți despre viitorul Java? Acesta a trecut de vârf și va pierde încet în popularitate? Sau încă să vină, și tinerii-limbile JVM, cum ar fi Scala, și Kotlin ajuta întregul ecosistem?

Am vedea, de asemenea, o mulțime de entuziasm în jurul valorii de Python în domenii cum ar fi știința datelor. Nu există nici un motiv pentru biblioteca corespunzătoare nu au putut fi scrise în Java, dar ele nu sunt scrise pe ea. Și pe Kotlin și ei nu scriu. La Scala are suprafața sa vizibilă, în special Spark.