JavaRush /Java Blog /Random-IT /Kay Horstmann e le sue 1500 parole su come diventare un m...

Kay Horstmann e le sue 1500 parole su come diventare un migliore programmatore Java

Pubblicato nel gruppo Random-IT
È probabile che tu abbia già sentito il nome Cay S. Horstmann. È una persona abbastanza importante nel mondo Java e autore di molti libri sulla nostra amata lingua. Tra questi ci sono il corso classico "Core Java" (pubblicato in russo nel libro in due volumi "Java. Professional's Library" ) e una serie con un breve riassunto dell'essenza di "Java for Impatient" (pubblicato in russo "Java SE 8. Corso introduttivo” e “Java SE 8. Corso base” ). Porta l'orgoglioso titolo di "Campione Java". E a questo link potete trovare il sito della sua vecchia scuola con informazioni interessanti.
Kay Horstmann e le sue 1500 parole su come diventare un migliore programmatore Java - 1
Portiamo alla vostra attenzione la traduzione di un articolo per la risorsa InformIT , in cui Kay fornisce diversi suggerimenti per i programmatori principianti e continuativi su come migliorare nella loro professione. Un giorno, Jennifer Bortel, direttrice editoriale di InformIT, mi ha chiesto di scrivere una riga su come diventare un migliore programmatore Java. Ha suggerito che io, l'autore di Core Java for the Impatient, potrei saperne qualcosa. "Non c'è niente di più semplice, basta comprare un libro", ho pensato all'inizio. Ma questa risposta non ha funzionato, perché devo inserirla in 1500 parole, e fino a questo punto ce ne sono solo 62* ( ovviamente, durante la traduzione dell'articolo, non abbiamo cercato di mantenere il numero di parole - circa trad. ). Recentemente ho ricevuto un'e-mail da un amico sviluppatore a cui è stato chiesto durante un colloquio il motivo per cui il seguente codice non era thread-safe:
class ThreadSafeClass extends Thread
{
     private static int count = 0;

     public synchronized static void increment()
     {
         count++;
     }

     public synchronized void decrement()
     {
         count--;
     }
}
Il mio amico ha deciso che il codice in questo esempio era thread-safe e io sono stato d'accordo con lui, notando che nel secondo metodo mancava una parola chiave statice, una volta inserita, l'accesso era controllato dal blocco integrato dell'oggetto classe. Ho anche detto che questa non è una buona domanda per un'intervista perché se hai bisogno di un contatore di thread, è meglio usare AtomicInteger. Ma poi nel cuore della notte mi sono svegliato e mi sono chiesto: e se questa parola staticfosse stata omessa per un motivo? Forse qualche subdolo intervistatore ha deliberatamente strutturato questo esempio in modo tale da fuorviare i candidati? Così ho risposto allo sviluppatore che aveva posto la domanda dicendogli che probabilmente mi sbagliavo prima: in un universo parallelo chiamato Interview Questions, la risposta a questa domanda è: “Il secondo metodo contiene un blocco oggetto”. Dopo questa risposta, il ragazzo mi ha chiesto se gestisco un canale YouTube in cui insegno come gestire questo tipo di problemi di colloquio. Ahimè, non lo faccio. Insegno informatica e scrivo libri, ma il mio obiettivo principale non è quello di creare migliori "risolutori di problemi durante i colloqui", ma di rendere i miei studenti programmatori migliori. C'era una volta Peter Norvig ( scienziato americano nel campo dell'intelligenza artificiale, direttore della ricerca di Google - trad. ca. ) scrisse un bellissimo articolo sul suo blog. Sosteneva che i libri che promettono di insegnarti Java in 24 ore o 21 giorni sono semplicemente ridicoli. Difficile non essere d'accordo con lui: ci vogliono 10 anni, o forse 10.000 ore, per diventare un esperto in qualsiasi campo. Ed è risaputo che gli esperti elaborano le informazioni in modo diverso dai principianti. In un esperimento classico, ai giocatori di scacchi esperti e principianti veniva mostrata per alcuni secondi una scacchiera con una certa disposizione dei pezzi, quindi veniva nascosta e veniva chiesto di disporre i pezzi così come erano. I principianti non hanno affrontato molto bene il compito, ma gli esperti non hanno avuto problemi. Ma solo a una condizione importante: la disposizione dei pezzi deve corrispondere al gioco reale . Se i pezzi venivano posizionati in modo casuale, gli esperti non erano migliori dei principianti nel ricostruire la scacchiera.
Kay Horstmann e le sue 1500 parole su come diventare un migliore programmatore Java - 2
Ecco perché ho risposto esattamente come ho fatto alla domanda contenuta nella lettera. Il mio background è nella programmazione vera e propria, non nelle interviste, quindi ho istintivamente aggiunto la parola chiave mancante e sono arrivato alla conclusione "sbagliata". Mi piace pensare che verrei comunque assunto dopo aver spiegato cosa è successo e perché non avrei mai scritto codice come nell'esempio senza la mia aggiunta. Forse, se una risposta del genere non li soddisfacesse, io stesso non vorrei lavorare con loro.
Ora, non penso che studiare per esami di certificazione o colloqui ti trasformerà in un programmatore migliore. Sono anche sicuro che neanche comprare un gran numero di libri sulla programmazione e poi leggerli da cima a fondo non funzionerà (anche se io, come autore di questi stessi libri, non vorrei ammetterlo!). In effetti, un ottimo modo per diventare un programmatore migliore è creare quanto più software possibile . Di tanto in tanto tengo un corso introduttivo all'informatica nella mia università. Questo è di gran lunga il corso più difficile che abbia mai insegnato. È ancora più difficile del corso di laurea. Quando ho iniziato a lavorare come giovane professore, ho tenuto diligentemente lezioni agli studenti in cui ho trattato diligentemente questioni di programmazione, come la differenza tra loop fore whileloop do. Ho quindi assegnato agli studenti quattro progetti di tre settimane. E questa materia viene insegnata in questo modo fin dall'inizio dei tempi in tutte le università. Dopo il mio primo tentativo, l'istruttore del corso del secondo semestre si è lamentato del fatto che la maggior parte dei miei ex studenti non capivano nemmeno i semplici loop dopo il primo semestre di programmazione. E tali risultati si sono verificati anche dall’inizio dei tempi. Ricordi l'articolo "FizzBuzz o perché i programmatori non possono programmare" ? Quando impari una lingua straniera, la maggior parte dei compiti sono esercizi e pratica, non teoria. È estremamente importante "spingere" la conoscenza nel subconscio. La svolta arriva quando non devi più pensare attivamente a ogni ciclo o (nel caso del francese) a ogni verbo irregolare. Se questo momento è arrivato, allora sei pronto per passare al livello successivo. E non c'è nulla di rivoluzionario in questa idea.
Kay Horstmann e le sue 1500 parole su come diventare un migliore programmatore Java - 3
La chiave di tutto è il feedback immediato. Alcuni psicologi ritengono che potremmo fare molto di più con l’apprendimento basato sul computer con feedback immediato. Ad esempio, in un altro esperimento classico, gli aspiranti piloti in formazione sono stati sottoposti a una sessione di addestramento in cui dovevano guardare più e più volte il pannello degli strumenti e descrivere il movimento dell'aereo. Allo stesso tempo, hanno ricevuto un feedback immediato che indicava se lo avevano fatto correttamente o meno. Dopo due ore di addestramento, hanno sovraperformato i piloti esperti. Naturalmente, questo non significava che potessero essere immediatamente inviati su un vero volo, ma non erano più nervosi per i vari e numerosi quadranti sul cruscotto. Quindi, se stai appena iniziando a imparare Java, fare molti esercizi pratici per esercitarti è l'idea migliore. Esistono numerosi siti Web e corsi online che controllano automaticamente la correttezza del tuo codice. Scegline uno che offra sfide reali piuttosto che parole incomprensibili. Dopotutto, vuoi che il tuo subconscio sia bravo nel codice che scriverai effettivamente nella pratica. Questo è il motivo per cui non sono molto interessato agli esempi di programmazione che utilizzano situazioni artificiose, come classi di animali con metodi che miagolano e abbaiano. Dopo un po' di tempo padroneggerai le basi della programmazione. Per passare al livello successivo, puoi scrivere un paio di progetti. Diversi anni fa, il portale InformIT ha posto una domanda ai programmatori esperti: “Qual è il modo migliore per un programmatore di imparare una nuova lingua?” Se riassumiamo le loro risposte, possiamo concludere quanto segue: “usa questo linguaggio nel tuo progetto attuale”. Quindi, pensa a ciò che hai sempre desiderato implementare e vai avanti. Vent'anni fa, quando Java era ancora molto giovane,il mio amico e talvolta coautore Gary Cornell mi chiamò e mi disse: "Okay, scriveremo un libro su Java". La mia risposta è stata che né lui né io sappiamo veramente nulla di questo Java, al che ha ribattuto: “E allora? Abbiamo già un contratto per il libro." Niente da fare. Abbiamo dovuto sbrigarci perché qualcun altro ha annunciato l'imminente uscita del libro "Teach Yourself to Be a Java Dummy in 24 Hours" ... penso che si chiamasse qualcosa del genere ( Kay prende in giro la serie di libri "For Dummies" - "for dummies" la parola "Dummy" può essere tradotta come "dummy" - nota del traduttore ). Per imparare una nuova lingua, ho iniziato con dei progetti: scrivendo un programma che creasse un'interfaccia utente per la pianificazione pensionistica, e poi un programma che si collegasse a un sito meteorologico e visualizzasse un bollettino meteorologico. Dopo di ciò, un programma che simula il movimento delle auto in autostrada. A quel tempo, questi programmi erano semplicemente fantastici!java.awtjava.nete discussioni ( threads). E ho dovuto imparare come farlo funzionare davvero, non solo cosa diceva la documentazione. A quel tempo queste erano cose completamente diverse. Ecco perché Core Java [1] è stato un successo: non era per i principianti.
Kay Horstmann e le sue 1500 parole su come diventare un migliore programmatore Java - 4
A quel tempo imparare Java era molto più difficile. Non avevamo siti come Stack Overflow ( e non avevamo nemmeno JavaRush, ndr ). A questo punto passo a formulare i seguenti consigli per migliorare la propria “capacità” di programmazione. Quindi, quando lavori al tuo progetto, sei destinato a rimanere bloccato da qualche parte. In questo caso, vai su un forum specializzato e prova a trovare risposte. Credimi, questa è un'ottima idea . Innanzitutto, farai domande che sono già state poste molte volte in precedenza. Ma presto acquisirai conoscenza e le tue domande diventeranno più uniche. Questo è un modo fantastico per imparare! Naturalmente, non si tratta semplicemente di copiare e incollare un pezzo di codice e chiedersi: “Cosa dovrei fare con questo adesso?” Devi andare fino in fondo, spiegare quali tentativi hai già fatto per risolvere il problema prima di rimanere bloccato. Tra l'altro, nella maggior parte dei casi, mentre formulo una domanda per iscritto, trovo la risposta da solo e non devo fare altro che dirmi: "Qual è il problema qui, è un gioco da ragazzi" anche prima di inviare la domanda . Ma anche se ciò non accade... Credimi, le domande ponderate tendono ad attrarre risposte ponderate. Ricorda solo di ricambiare il favore sociale rispondendo alle domande ponderate di altre persone. Sia fare domande che rispondere a domande ponderate ti rendono un programmatore migliore. «Allora, che mi dici dei libri? - tu chiedi. “Sono davvero diventati completamente e irrimediabilmente obsoleti grazie a Google e Stack Overflow ?” Ogni volta che mi occupo di una nuova tecnologia, credo di essere una persona coraggiosa e di poter superare tutte le difficoltà da sola. Ma un'ora di tormento insensato lascia il posto a un'ora di sanità mentale - e compro un libro. I libri tecnici sono un vero affare al giorno d'oggi. Se pago $ 40 per un e-book e ricevo risposta rapidamente a una sola domanda, ho già recuperato i miei soldi. Odio deludere i miei colleghi scrittori, ma non ho mai letto un libro tecnico dall'inizio alla fine. Comincio da dove penso che sia scritto il mio problema e la sua soluzione, e leggo finché non capisco come risolverlo. Per questo motivo attualmente sto cercando di scrivere libri che possano essere letti in questo modo. Questo approccio ha dato origine alla serie “For the Impatient”. E a questo punto dovrei fermarmi: ho superato il limite editoriale di 1500 parole. Vorrei solo aggiungere che per diventare un programmatore migliore, inizia riconoscendo che esistono molti livelli di conoscenza.
  1. Innanzitutto, "tira" le strutture linguistiche di base nel tuo subconscio, ovvero porta le loro conoscenze all'automaticità risolvendo un gran numero di esercizi.

  2. Inizia a lavorare su progetti reali che ti interessano il più rapidamente possibile.

  3. Quindi unisciti a una community in cui puoi porre domande e rispondere.

  4. Una volta fatto questo, sarai in grado di parlare con conoscenza ed esperienza nelle interviste. E non importa se risolvi il puzzle artificioso.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION