Voglio iniziare questo articolo con una digressione insolita, a prima vista. Più tardi diventerà chiaro il motivo esatto.
Cominciamo dall'inizio o Ciao, Java World!  -1
Quindi, immaginiamo Qualcuno. Questo Qualcuno vuole padroneggiare lo sci alpino. E per questo compie i seguenti passi:
  • Istruttori, libri di testo, manuali, ecc. - tutto questo viene dal maligno. Puoi imparare a sciare da solo. Inoltre a scuola ha imparato abbastanza bene a praticare lo sci di fondo. Di conseguenza, tutti i consigli di persone più esperte vengono ignorati.

  • Viene scelta l'attrezzatura più bella. Non al di sotto del livello esperto. Stivali duri che ti fanno male ai piedi. Sci duri che richiedono uno sforzo fantastico per piegarsi, superando di gran lunga il livello di forma fisica di Qualcuno. Bene, ecc.

  • La pista di prova è... beh, diciamo, la pista che ospita la tappa di slalom gigante della Coppa del Mondo. Questo è giusto per studiare.
  • Continua con lo stesso spirito.
Quindi ecco la domanda. Come chiamerai questo Qualcuno? Personalmente, come persona che ha familiarità con lo sci alpino da circa 20 anni, lo chiamerò (e questo è ancora molto mite!) - senza speranza. È completamente impossibile imparare qualcosa con questo approccio. Ma un modo sicuro per farsi male. E la cosa PIÙ sicura è abbandonare per sempre l’idea di sciare. Penso che sarai d'accordo con me in questa valutazione. In ogni caso, sono quasi sicuro che questo Qualcuno non si aspetterà che gli venga rivolto qualcosa di spiacevole. Ora immaginiamo un altro Qualcuno. Lascialo, diciamo, essere uno studente di informatica. Ha una certa conoscenza di C++, C#, Pascal. Vuole imparare Java. Le sue azioni:
  • La letteratura corrispondente al suo livello di conoscenza (livello zero, francamente) viene spazzata via. Basato su una leggera familiarità con la citata teoria C++, C# e OOP.
  • Viene preso l'ambiente di programmazione più potente. Diciamo Eclipse o NetBeans. Quello che fa tutto da solo, basta premere un pulsante.
  • Come applicazione di prova selezioniamo... beh, diciamo chat. Un'applicazione client-server, la parte client sotto forma di applet, la parte server - un servizio web o, nel peggiore dei casi, servlet. Giusto per studiare.
Domanda. Come chiamerai questo Qualcuno? Sapete qual è il paradosso? Il fatto è che in questo caso ci saranno molte meno valutazioni imparziali. Nonostante le situazioni siano identiche sotto tutti gli aspetti. A meno che le conseguenze per la salute e la vita nel secondo caso non siano meno fatali. Forse è questo il problema? Le situazioni sono davvero molto simili. Li ho descritti specificatamente nello stesso stile. E una cosa strana: se l'assurdità del primo è evidente, al secondo scenario segue un numero allarmante di sviluppatori alle prime armi. La padronanza di Java inizia con la scrittura di MIDlet, client per database, chat, creazione di siti Web basati su servlet... Puoi andare avanti per molto tempo. Ma il punto è comunque ovvio. Allo stesso tempo, la letteratura entry-level viene messa da parte con disprezzo. Leggi questo? Per me? Sì, scrivo in C++ ormai da tre anni! (Le opzioni sono in Pascal e anche in Visual Basic.) E so OOP! Bene, in generale. Allora, qual è il prossimo passo? E poi questo:
  • Come convertire un array da 8 byte in lungo?
  • Perché succede questo NoClassDefFoundError?
  • Perché avvio l'applicazione in Eclipse ( NetBeans/IDEA/JBuilder) e tutto va bene, ma senza di essa digito java HelloWorld.classe si verifica un errore?
  • Perché si blocca ClassNotFoundException?
  • Perché non c'è una biblioteca? L'ho già inserito in classi.zip, ma è tutto inutile!
  • Perché creo un array di oggetti, ma quando provo a utilizzare un elemento dell'array ottengo NullPointerException?
  • E perché ...?
  • E perché ...?
  • E perché ...?
Perché perché perché? Ma perché Java non è C++ o Pascal. E non Perl. La conoscenza di queste lingue non solo molto spesso non aiuta, ma ostacola anche. Se non altro perché queste lingue hanno ideologie completamente diverse. Ma la somiglianza esterna è fuorviante. Naturalmente, tutti questi “perché” e “come” trovano risposta nei libri. Nella letteratura del livello più elementare. Ma leggerlo è pigro (opzioni: vergogna, mancanza di tempo, ecc.). Conosco molti stereotipi trasferiti a Java da buoni specialisti di C++. Un esempio recente: non dovresti mai lanciare un'eccezione in un costruttore. Perché? Sì, perché in C++ lo stato di un oggetto del genere non è definito. Di conseguenza, si verifica una perdita di memoria. In Java, in linea di principio, non esiste un problema del genere, a causa della presenza di un garbage collector. Tuttavia, ci sono persone che cercano di evitare tali situazioni. Proprio secondo uno stereotipo radicato. E la cosa peggiore è che, come risultato di questi sforzi, il codice diventa molto più complicato. La sintassi è facile da imparare. E completamente non abbastanza. L’ideologia del linguaggio è molto più importante. E per padroneggiarlo nel modo più efficace, dovresti iniziare dall'inizio. Perché esattamente e come? E questa è un'altra questione. COSÌ. Dove e come iniziare. Dipende da cosa vuoi ottenere. Se vuoi diventare una scimmia programmatrice esperta, puoi iniziare con quasi tutto. Se vuoi diventare un professionista le cose sono un po’ più complicate. La mia esperienza mi dà motivo di dire quanto segue. La differenza tra uno sviluppatore professionista e un "codificatore" è che lui capisce cosa sta succedendo. Fa qualcosa di più che premere pulsanti. Un ambiente potente è di grande aiuto. Per chi può farne a meno. Ma spesso è l’unico strumento di chi ha iniziato con esso. E in sua assenza, il valore della scimmia codificante è zero. Perché non ci sono pulsanti da premere. In generale, la pressione dei pulsanti può assumere forme davvero mostruose. Uno dei miei colleghi ha visto un prodotto scritto in Java. Le istruzioni per l'installazione iniziavano con le parole: "Installa JBuilder dal disco..." Ora QUESTO è già fatale. Se gli sviluppatori non potessero far funzionare il prodotto senza un ambiente di sviluppo, rabbrividisco nel pensare a come è stato scritto. Per lo meno, è stato scritto da dilettanti. Cosa intendo con "capisce cosa sta succedendo?" Ciò significa che una persona deve comprendere quanto segue:
  • Cos'è una macchina virtuale e perché è necessaria?
  • Cos'è una classe dal punto di vista di una macchina virtuale.
  • Cos'è un pacchetto?
  • Cos'è una biblioteca?
  • Come la macchina virtuale cerca e carica le classi; cos'è un caricatore di classi e come funziona; quanti ce ne sono per impostazione predefinita; cos'è il percorso di classe.
Eccetera. e così via. L'elenco potrebbe continuare. Tieni presente che non ho incluso conoscenze specifiche dello sviluppatore stesso. Cos'è un thread, cos'è una classe dal punto di vista OOP e in cosa differisce da un oggetto, come funzionano i gestori di layout: QUALSIASI sviluppatore dovrebbe sapere tutto questo. Tutto quello che ho elencato è più un tecnicismo. Ma molto spesso si scopre che conoscerli è fondamentale per capire cosa non funziona. Un esempio dalla vita. Esiste una libreria per lavorare con XML chiamata xalan. Contiene diversi pacchetti javax.xml...: parser, trasformatori, ecc. Questa libreria è molto popolare. Il problema è che questi stessi pacchetti sono presenti nel J2SDK dalla versione 1.4. Domanda. Quale classe verrà caricata quando si accede alla classe javax.xml.transform.stream.StreamSource dalla libreria, se xalan è presente anche nella libreria classpath o da J2SDK? Per rispondere a questa domanda, devi sapere come funziona il caricatore di classi. Una volta ho visto una discussione di quattro giorni in uno dei forum che alla fine si è ridotta a questa domanda. Il codice non ha funzionato correttamente proprio perché il caricatore non ha preso la classe che ci si aspettava da esso. A cosa sto arrivando? Il punto è questo: più potente è l'ambiente di sviluppo, più cose fa per lo sviluppatore, meno deve pensare. E questo è già oh, quanto è brutto. Così vicino alla scimmia. Ciò porta alla prima conclusione, per quanto paradossale possa sembrare:

Conclusione 1. È consigliabile iniziare ad apprendere Java SENZA un ambiente potente.

Non sostengo la scrittura in editor a livello di blocco note. Ma non lo faccio per l'unico motivo: di regola non hanno l'evidenziazione della sintassi. Questa è una cosa incredibilmente conveniente che non ha un effetto negativo. Puoi usare qualcosa come Notepad++ , capisce la sintassi Java e, tra l'altro, è gratuito. Ad esempio, ho il tipo di file .java registrato nel sistema appositamente per questo. Quindi, un editor di testo con evidenziazione della sintassi e una riga di comando. Due o tre giorni di tormento - e capire cos'è un percorso di classe, come viene lanciato un interprete e un sacco di altre piccole cose - capirlo rimarrà per sempre. Ulteriore. La mia esperienza mi dà motivo di dire che è impossibile acquisire conoscenze per un uso futuro. Nel senso che vale la pena leggere la letteratura solo quando ci sono domande a cui rispondere. Se leggi un libro senza avere domande al riguardo, le informazioni scompariranno entro una settimana. Lo so molto bene, anche per esperienza personale. Una volta ho iniziato a leggere un libro sui servlet cinque volte. Fino a quando non ho iniziato a occuparmene nel mio lavoro, le informazioni non sono state assorbite. E questo non è un caso isolato. C'era una volta, molto tempo fa, circa 8-10 anni fa, ho letto quanto segue, purtroppo non ricordo l'autore: Come insegnare a una persona un nuovo linguaggio di programmazione? Molto semplice. È necessario dargli una lingua, diversi compiti e un minimo di documentazione. Poi, dopo un paio di mesi, quando inizierà a scrivere almeno in questa lingua, fornirà una documentazione completa. Verrà letto tra due settimane come un romanzo poliziesco, dopodiché la persona sarà pronta per lavorare. Sono d'accordo con questa affermazione al 100%. In due mesi, da un lato, tutti i problemi minori scompariranno. Le risposte saranno ottenute in modo indipendente, il che aumenterà notevolmente il loro valore. D'altra parte si formeranno già domande chiare, le cui risposte saranno fornite dalla documentazione. Ciò porta alla seconda conclusione, che non sembra meno paradossale della prima:

Conclusione 2. È consigliabile iniziare a imparare Java SENZA libri di testo. Documentazione API Java + tutorial Java: questo è più che sufficiente.

La documentazione dell'API Java è un must. Consiglio vivamente di mantenerlo localmente, su disco. Dovrai contattarla più di una volta, non due o anche dieci. Personalmente non passa giorno che non ci vada. Consiglio inoltre di mantenere il tutorial Java localmente. Si tratta di informazioni entry-level che sostituiscono completamente un libro di testo. Tuttavia, ce n'è una discreta quantità lì. Devo dire che negli ambiti che non mi occupo di lavoro trovo comunque qualcosa di nuovo per me. Leggere molto è brutto. Finché non c’è richiesta, non c’è risposta. Anche leggere poco fa male. Dov’è la media aurea? Aderisco a questa regola: leggo finché non comincia a sembrarmi di aver ricevuto la risposta alla domanda. Nel 90% dei casi non è così. Ma è in questo momento che è meglio fermarsi e proseguire per conto proprio. L'impulso iniziale è stato ricevuto e risolvere il problema in modo indipendente darà molto di più. Naturalmente, dopo un po 'vale la pena dedicarsi alla letteratura. Ma ancora una volta, per la letteratura entry-level. Anche se sembra che tutto ciò non abbia senso, vale la pena leggere i capitoli iniziali. Posso quasi garantire che imparerai almeno qualcosa di nuovo. E questo qualcosa potrebbe rivelarsi in seguito estremamente importante. OK. Sembra che abbiamo capito di cosa scrivere. Anche come scrivere. Ma cosa dovrei scrivere? Ricorda dove è iniziato questo articolo. Dovrei iniziare scrivendo un sistema di messaggistica istantanea? La scelta è, ovviamente, tua. Mi sembra che non ne valga la pena. Più il compito è complesso, più domande sorgeranno. In assenza di esperienza, un tale numero di domande darà la sensazione dell'impossibilità di risolverle, seguita da un sentimento della propria inferiorità, stupidità, ecc. Alla fine, questo può portare alla decisione “al diavolo tutto…” e all’interruzione dell’apprendimento della lingua. Quelli. ottenendo esattamente l’effetto opposto a quello necessario. Ciò è caratteristico non tanto di Java quanto del processo di apprendimento stesso. Ma per qualche motivo se ne dimenticano quando si tratta di insegnare la programmazione. Nel frattempo, un piccolo compito completato fino alla fine può dare una soddisfazione molto maggiore e una conoscenza molto maggiore rispetto a un sistema grandioso abbandonato proprio all'inizio del viaggio. Da qui la terza conclusione: Conclusione 3. È consigliabile iniziare ad apprendere Java con compiti adeguati al tuo attuale livello di conoscenza di Java. Non dovresti iniziare a imparare a guidare un'auto su una macchina di Formula 1. Non dovresti iniziare a imparare lo sci alpino sulla pista della Coppa del Mondo. E allo stesso modo, non dovresti iniziare a padroneggiare Java scrivendo qualcosa di enorme. Capisco che l'ambizione sia impegnativa. Ma in questo caso sono infondate. E più ambizioni irragionevoli hai, meno possibilità hai di diventare un professionista. Un fenomeno notevole in termini di apprendimento sono, stranamente, vari forum. Se li usi saggiamente. Saggiamente, questo significa che devi fare il contrario, non come al solito. Cioè, non fare domande, ma rispondere. Qualunque cosa tu abbia la forza di raggiungere. Se pensi che io stesso sappia tutto, ti sbagli di grosso. Sì, lo so molto. Ma ci sono aree che non ho mai incontrato. Oppure sì, ma molto poco. Un classico esempio della mia pratica è lavorare con i certificati: firma del codice, connessioni sicure, ecc. Nel 1998, quando scrivevo la mia tesi, ho fatto così, ma da allora tutto è cambiato molto. Nel corso degli anni ho accumulato domande. Ho anche iniziato a leggere della letteratura. Ma, come ho detto sopra, non è possibile ottenere conoscenza per un uso futuro. È come un piede di porco: entra da un orecchio ed esce dall'altro. Non c'è nessun risultato tranne un buco in testa. E questo è continuato fino a poco tempo fa, quando nel forum è stata posta una domanda su una connessione SSL con Tomcat. Ci sono stati alcuni problemi. E solo questa domanda mi ha spinto a scavare in profondità. E se c’è una richiesta, c’è anche una risposta. Non solo ho capito quale fosse il problema della persona, ma ho anche trovato un sacco di altre informazioni utili. Finalmente ho capito come funzionano i certificati. L'articolo corrispondente è nei piani. E questo accade continuamente. Ho lavorato parecchio, ad esempio, con la GUI. È stato solo in seguito alla domanda di qualcuno nel forum che ho compreso alcune delle funzionalità di TextLayout. Prima di questa domanda non ne avevo idea. Allo stesso modo, di recente ho scoperto che anche JButton interpreta html come propria intestazione. Prima di questo, pensavo che solo JLabel potesse farlo. E questo è ancora una volta grazie al forum. Quindi risulta: più rispondiamo alle domande, più impariamo noi stessi. Questo è il motivo per cui non sono d'accordo con l'opinione popolare secondo cui se una persona si siede su un forum, non fa nulla. Questo è tutt'altro che chiaro e dipende principalmente dal motivo per cui esattamente la persona si trova sul forum. E cosa fa principalmente: chiedere o rispondere. In effetti, puoi anche chiedere. Ma anche saggiamente. Non chiedere una soluzione (e soprattutto con il poscritto “Chi sa, per favore, dia una risposta e non faccia domande!”, che ho incontrato proprio l'altro giorno!), ma ancora, al contrario, chiedere di impostare la soluzione direzione del movimento. È del tutto comprensibile che sia difficile per un principiante capire dove scavare, perché semplicemente gli manca l'esperienza. Questa non è colpa della persona e non è nemmeno un problema. Questo va bene. Tutti ci sono passati. Io compreso. Per me personalmente è molto più importante che una persona voglia imparare qualcosa. E non solo ottenere una risposta, solo per dimenticarselo cinque minuti dopo aver frequentato un laboratorio di programmazione. Ti dirò sempre la direzione del movimento. Se lo conosco personalmente. E se non lo so, almeno posso indovinare. E cercherò sicuramente anche la risposta. Ma probabilmente non do mai risposte dirette, almeno non ricordo. A proposito, è per questo motivo che ho lasciato uno dei forum. Quando ho iniziato a fare domande importanti, mi hanno spiegato all'unisono che è consuetudine che rispondano semplicemente. E con le mie domande posso andare oltre. Considerando che il livello del forum lasciava molto a desiderare, anche grazie a questo approccio! – Ho deciso di non perdere altro tempo. Quindi scegli un forum di tuo gradimento e il gioco è fatto. A proposito, questo sito è apparso proprio grazie a uno dei forum. Dopo aver parlato lì per un po ', ho accumulato un elenco degli argomenti sollevati più frequentemente e ho capito che un sito del genere sarebbe stato richiesto. E così è successo. Quasi tutti gli articoli sono scritti sulla scia di alcune discussioni nel forum. Oppure seguendo la corrispondenza che anch'io svolgo regolarmente. Qual'è il risultato? Lavorare, lavorare e lavorare ancora. Più ti permetti di fare da solo nella fase iniziale, meno conoscenza acquisisci. E più lunga è la strada verso la professionalità. Ma solo tu puoi scegliere chi vuoi essere: una scimmia che preme i pulsanti senza pensare o un professionista. E solo tu stesso scegli il percorso lungo il quale puoi ottenere questo o quello. Il primo modo è chiaro. Ho provato a mostrare il secondo. A voi la mossa, signori! Link alla fonte originale: Cominciamo dall'inizio ovvero 'Ciao, Java World!'