Da dove iniziare a lavorare come programmatore. Imparare la programmazione da zero: una guida passo passo per principianti

Forse per qualche motivo all'improvviso hai voluto diventare un programmatore. La buona notizia è che una volta compreso il sistema, puoi imparare come superare i colloqui e sopravvivere ai primi mesi di lavoro.

La brutta notizia è che dall’abc della programmazione non c’è ancora alcuna via d’uscita e, per sentirti a tuo agio nella tua nuova posizione, dovrai finire al più presto di imparare tutto quello che dovresti già sapere come il palmo della tua mano.

Naturalmente, questo articolo parlerà esclusivamente del mio esperienza personale, che mi ha permesso di ottenere interviste anche per aziende top come Luxoft.

Come sono diventato programmatore

Ho conosciuto il computer per la prima volta all'età di 6 anni. All’età di 13 anni avevo già il mio sito web personale. Andavo male a scuola e anche all'università. Durante il mio secondo anno, il mio amico trovò lavoro come programmatore Java e mi consigliò vivamente di fare lo stesso. L'idea mi ha incuriosito. Era necessario un piano.

Primo passo: riprendere

Il primo e principale problema che devono affrontare i principianti è il loro curriculum. Senza un curriculum adeguato e accattivante, non sarai invitato ai colloqui. Ma che dire di coloro che non hanno alcuna esperienza lavorativa? Per non andare alle risorse umane a mani vuote, io e il mio amico abbiamo scritto nel mio curriculum un intero anno di esperienza lavorando al suo progetto, su cui presumibilmente abbiamo lavorato insieme.

Politica salariale

Prossimo punto importante nel curriculum dopo le tecnologie richieste e in inglese era lo stipendio desiderato. Senza pensarci due volte, io e il mio amico abbiamo deciso di giocare alla grande e abbiamo scritto una somma esorbitante di mille dollari in quel momento, che avrebbe dovuto eliminare le "società canaglia".

Vergogna e vergogna

Le prime interviste furono un fallimento. Hanno letteralmente riso di me. Al primissimo colloquio tecnico, in cui mi sono stati posti un paio di problemi su carta, sono stato risolto in pochissimo tempo. Qualcuno ha addirittura consigliato paternamente il libro Thinking in Java.

Primo lavoro

Alla fine sono stato invitato per un colloquio presso una filiale di un'azienda danese, dove ho risposto a domande fondamentali e ho piacevolmente sorpreso tutti con il mio inglese. Sono stato assunto come sviluppatore Java Junior a una condizione: per i primi tre mesi avrei seguito il corso SCJP (Sun Certified Java Programmer), che avrebbe colmato le mie lacune e mi avrebbe reso uno specialista più preparato. Cosa c'è di meglio di uno stage retribuito senza dover lavorare (tradire la tua incompetenza)? Ho lavorato in questa azienda per sei mesi, così dopo pochi mesi ho potuto essere promosso in un'azienda più grande.

Sulla base della mia amara, ma comunque preziosa esperienza, fornirò un elenco di consigli che aiuteranno gli altri avventurieri a trovare un lavoro come programmatore in tempi relativamente brevi.

  1. Riepilogo. Deve essere correttamente formattato e scritto esclusivamente in inglese. Se non hai abbastanza esperienza, allora puoi (e dovresti) inventarla, ma dovresti prepararti ad essere responsabile di ogni parola scritta nel tuo curriculum. Ad esempio, se hai scritto JMS (Java Message Service), allora dovresti almeno seguire almeno un tutorial e giocare con JMS, fare alcuni esempi, anche se è un banale "Hello, world!" Adesso sarà più comodo mettersi in mostra, hai davvero “lavorato con JMS”.
  • Impara l'ABC della programmazione. Se puoi ancora permetterti di “nuotare” ai livelli profondi di alcune tecnologie complesse come Struts e Spring, le risposte errate alle domande fondamentali non saranno mai perdonate. Se ti sveglio di notte, dovresti essere in grado di parlare di OOP, ereditarietà, incapsulamento, polimorfismo e altri concetti di base, ed essere anche in grado di spiegare tutto con esempi.
  • Pratica. Puoi imparare a programmare solo programmando. Questo è doloroso e spiacevole (se non sei un programmatore), ma non c'è altro modo. L'unico modo per smettere di avere paura dei problemi del colloquio è risolverli a casa da soli.
  • Leggi libri e segui tutorial su Java solo in inglese Assolutamente tutti i termini di programmazione sono più facili da capire nella lingua originale, cioè in inglese. Leggere la letteratura tecnica su Java in russo significa mancare di rispetto a te stesso. Perché? Perché per capirci qualcosa del tipo “...il modulo tabella è per molti versi un'opzione intermedia, un compromesso rispetto allo scenario transazionale e al modello argomento“, devi essere veramente un genio, cosa che difficilmente sarai.
  • Finalmente impara l'inglese! Innanzitutto si tratta dell'inglese parlato. È difficile da contare grande quantità programmatori intelligenti che, per quanto ricordo, furono respinti per un solo motivo: un livello insoddisfacente di inglese parlato. No, se, ovviamente, lavorerai come programmatore da qualche parte in un'azienda nazionale, il tuo livello linguistico non avrà un ruolo importante. Ma se vuoi trovare lavoro in un'azienda internazionale, allora Dio stesso ti ha ordinato di imparare la lingua. Il tuo livello di inglese si tradurrà in centinaia di dollari extra in aumenti salariali.
  • Conoscere il mercato. Cerca posti vacanti, leggi i requisiti, chiedi ai tuoi amici programmatori quanto guadagnano. Utilizza servizi che ti consentiranno di ottenere un quadro più completo del mercato IT. Saresti sorpreso di sapere quanto è grande il numero di programmatori di talento che guadagnano la metà di quanto potrebbero, semplicemente a causa della loro pigrizia e riluttanza a tenere il naso al vento.
  • Affare. Non c'è niente di sbagliato nel contrattare sul proprio stipendio. Il tuo argomento in una controversia può essere un buon inglese o un'offerta di lavoro in un'altra azienda. L’ultimo argomento funziona particolarmente bene: “Sì, ma Luxoft mi offre 300 dollari in più, perché dovrei accettare i tuoi termini? Forse potremmo trovare un compromesso?” Un tempo, sono riuscito a negoziare un centinaio di dollari in più sul mio stipendio un paio di volte e, dopo un anno, questi cento dollari mi hanno dato all'improvviso un reddito aggiuntivo di 1.800 dollari. Devi capire che anche per le piccole società IT straniere, cento dollari in più sono come una goccia nel mare.
  • Trovati un mentore.È positivo se hai un amico più esperto che può aiutarti con consigli e rispondere anche alle domande più stupide. Grazie alla sua esperienza e al suo supporto morale, progredirai nella programmazione più velocemente che da solo. Se non hai un mentore, allora è una buona idea seguire alcuni corsi di programmazione che non solo daranno un quadro più completo di ciò che fa un programmatore, ma ti permetteranno anche di incontrare persone più esperte. Chissà, forse uno di loro vorrà diventare il tuo mentore.
  • Inizia il tuo progetto. Anche se è un esempio delle peggiori pratiche di codifica e non lo finisci mai, almeno avrai qualcosa da fare che ti farà venire voglia di capire la programmazione e apprendere nuove tecnologie. Inoltre, avrai un argomento aggiuntivo per conversazioni intime durante le interviste.
  • Cerca un lavoro in estate. In primo luogo, quando tutti sono in vacanza, è più probabile che le aziende siano a corto di personale e abbiano maggiori probabilità di essere chiamate per un colloquio. In secondo luogo, poiché anche i tuoi concorrenti-candidati sono in vacanza, le tue possibilità di essere notato dalle risorse umane aumentano nuovamente.
  • Non mollare mai. Anche se ritieni di aver fallito il colloquio, è importante perseverare e continuare a cercare di risolvere il problema, non importa quanto possa sembrare difficile. Chissà, forse proprio in questo momento la tua diligenza nel lavoro viene messa alla prova!
  • Evitare attività sul computer. Non c'è modo di risolvere più velocemente un non professionista che gettarlo immediatamente nel calore della programmazione. Il tuo compito è provare a tradurre tutte le conversazioni in alto livello, in cui vengono discussi approcci e concetti generali, ma non un'implementazione specifica nella risoluzione di un problema particolare. Se ti vengono dati carta e penna e ti viene chiesto di scrivere la soluzione, chiedi l'opportunità di disegnarla schematicamente. In questo modo, allontanandoti dalla sintassi di una lingua specifica, non solo ti risparmierai alcuni fastidiosi errori, ma dimostrerai anche che sei in grado di pensare in modo astratto senza entrare troppo nei dettagli.
  • Sii il primo a parlare. Evita le situazioni in cui c’è una pausa nell’aria, durante la quale un’altra domanda insidiosa potrebbe maturare nella mente dell’intervistatore. Non appena si verifica un intoppo, inizia a raccontare qualcosa che conosci bene. Prova a imporre il tuo gioco all'intervistatore.
  • Prova a dire la verità. Se non hai mai scritto procedure PL/SQL, è meglio dirlo direttamente. Questo potrebbe essere uno svantaggio per te, ma ti eviterai di dover uscire dai tuoi schemi rispondendo a una domanda di cui non capisci nulla. Un intervistatore esperto percepirà le tue lacune di conoscenza a un miglio di distanza.
  • Attenzione alle piccole imprese. Le piccole aziende tendono ad avere piccoli team. Meno persone nel team, più velocemente ti capiranno. Il tuo obiettivo è una grande e goffa azienda, dove puoi guadagnare un po' di tempo.
  • Segui il codice di abbigliamento. Se ti presenti a un colloquio per una posizione di programmatore con un abito elegante, susciterà più sospetti che se ti presenti in pantaloncini o un maglione logoro. Sarebbe anche una buona idea mettersi gli occhiali e dire: “Sono un vero topo di biblioteca”.
  • Naturalmente, qualcuno esperto potrebbe sottolineare che la ricetta di cui sopra è più un modo per diventare un programmatore che un programmatore, e avrebbe ragione da qualche parte. Tuttavia, il fatto è che non troverai mai un posto vacante con il titolo "Bad Coder Wanted". Tutti hanno bisogno di programmatori. Preferibilmente senior. Coloro che hanno più di cinque anni di esperienza lavorando su progetti aziendali e che parlano fluentemente diversi linguaggi di programmazione, allo stesso tempo hanno una conoscenza approfondita di DBMS, possono scrivere script bash, procedure memorizzate, parlano fluentemente Linux, TCP/IP , hanno qualità di leadership, resistenza allo stress, capacità di comunicazione e una miriade di altre abilità, “senza le quali è impossibile”.

    Queste persone esistono, le ho viste io stesso. Ma ce ne sono troppo pochi per coprire completamente le esigenze del mercato sempre affamato degli specialisti IT. E questo significa che hai sempre una possibilità, tanto avventuriero sei.

Non ho studiato per diventare programmatore, anche se ho sempre desiderato diventarlo. All'inizio generalmente entravo in una specialità legata all'hardware del computer, ma si è scoperto che non era molto interessante, quindi mi sono trasferito all'optoelettronica.

Lo studio riguardava l'elaborazione delle immagini: questa non è affatto programmazione, ma è comunque più vicina a ciò che volevo. Questa è una specialità legata al computer.

Ho sempre tenuto presente che avrei lavorato come programmatore. Questo è quello che è successo alla fine.

Ho trovato un annuncio di lavoro in

Ho iniziato a cercare attivamente lavoro come programmatore Java al quinto anno, ma prima ho deciso di fare uno stage presso qualche azienda. Ho visto un annuncio per uno stage sulla pagina pubblica MAI su VK. Ad essere onesti, questa è stata la prima volta che ho sentito parlare di Jet Infosystems. Ho trovato informazioni sull'azienda su Internet, tutto mi è sembrato interessante e ho lasciato una richiesta sul loro sito.

Si è scoperto che c'erano molti candidati: cento e mezzo. Ci è voluto parecchio tempo per selezionarli. Prima siamo stati invitati a un'assemblea generale, poi abbiamo superato un test teorico e completato diversi compiti pratici.

Quindi, per coloro che lo hanno fatto con successo, è stata fissata un'altra intervista. Solo dopo siamo entrati tutti nel gruppo di formazione e poi ho ricevuto un invito a lavorare come sviluppatore Java. Ma questa, come si suol dire, è una storia completamente diversa, e non è quello che voglio raccontarvi.

Ho letto solo un libro sulla programmazione

Si può dire che sono un autodidatta.

Sono sicuro che la programmazione sia un'area che puoi comprendere da solo senza lunghe lezioni teoriche all'università.

Prima di iniziare seriamente a imparare a programmare in Java, avevo letto solo un libro sulla programmazione. Era un corso “C++ in 21 giorni”.

Non dico che non mi sia piaciuto o che tutto mi sembrasse troppo complicato e inutile, ma ho comunque optato per Java. A proposito, ora al lavoro devo programmare non solo in Java, ma anche in "plus", quindi non c'è conoscenza inutile.

Perché ho scelto Java?

  • Secondo me Java è forse l'unico linguaggio di programmazione che non richiede molto tempo dall'inizio dell'apprendimento fino all'ottenimento del prodotto finale. Forse sono il tipo di persona che vuole “sentire” rapidamente il risultato. La pura teoria non mi attira molto.
  • Avevo un obiettivo preciso davanti a me. Ho capito che sarebbe stato estremamente difficile per me trovare lavoro come programmatore in un futuro colloquio avrei dovuto mostrare almeno qualcosa e dire: “Non ho esperienza lavorativa, un diploma non è esattamente quello di cui ho bisogno, ma Ho questo... guarda.» Ma fortunatamente ho trovato lavoro tramite uno stage.
  • Ora esiste un numero enorme di guide diverse per lo sviluppo di applicazioni per il sistema operativo. Quindi qui per me tutto corrispondeva letteralmente: c'erano abbastanza materiali per la formazione e c'era la possibilità di ottenere un risultato facilmente tangibile in tempi relativamente brevi.

In breve, dopo un breve corso di C++, ho intrapreso una sorta di tutorial Java per principianti. Non ricordo come si intitolava, ricordo solo che avevo smesso di leggerlo prima ancora di arrivare a metà. Volevo “scappare” il più velocemente possibile.

Poi ho visto molte guide per principianti e posso dire con certezza: non c'è alcuna differenza fondamentale tra loro. Sono più o meno la stessa cosa. Per trovare qualcosa, devi solo digitare "book for Java Starter" nella query e il gioco è fatto.

Ho trovato molte risposte alle mie domande in questo canale Telegram.

Ci sono poche fonti di programmazione in lingua russa su Internet. Affrontare

Sì, e un'altra cosa importante. È necessario fare i conti con il fatto che nel segmento in lingua russa della rete ci sono parecchi libri e risorse sulla programmazione rispetto al numero di fonti in lingua inglese.

Naturalmente, semplicemente non è possibile programmare senza conoscere l'inglese a un buon livello. Quindi, per chi ha familiarità con l'inglese a livello di Google Translator, posso solo consigliare una cosa: migliorare prima il proprio inglese. Tutto il resto viene dopo.

Naturalmente, non tutto è così triste: esiste "Google Developer Tools" in russo. Ma in ogni caso, non è da qui che devi iniziare.

So che esistono vari corsi di programmazione online - a pagamento e gratuiti - ma si è scoperto che potevo farne a meno. Il che ancora una volta depone a favore della mia tesi originaria secondo cui la programmazione può essere appresa senza l'aiuto di nessuno.

Da dove ho iniziato a "fallire"

Dopo aver capito un po' di Java per Android, ho iniziato poco a poco con esempi applicativi tipici, da quelli più semplici a quelli più complessi. A quel punto sapevo già che tipo di applicazione avrei voluto creare.

Sono stato aiutato da un amico che mi ha suggerito di scrivere un'applicazione educativa per gli scolari. Ho pensato e coltivato l’idea per molto tempo. Ho esaminato l'elenco di quelle esistenti e mi sono assicurato che esistessero poche applicazioni simili, dopodiché ho iniziato a svilupparle.

Probabilmente la cosa più difficile per me è stata trovarlo buon argomento per un progetto completo. Non so se questo sia un inconveniente o meno, ma sono fatto in modo che se l'argomento è buono, se l'idea mi piace e mi entusiasma, non ho problemi di motivazione . Non ci sono problemi con la motivazione, non ci sono affatto difficoltà insormontabili.

Quali risorse possono aiutare un principiante?

  • stackoverflow.com.

Lì, con una probabilità fino al 90%, puoi ottenere una risposta esauriente alla domanda che incontri durante lo sviluppo.

  • Repository con fonti Github.com.

Mi ha davvero aiutato a imparare dagli esempi di altre persone.

  • Youtube

Esistono molti screencast che ti consentono di comprendere molto rapidamente una particolare tecnologia.

Ho sviluppato la mia prima applicazione in un mese

In breve, ho presentato la domanda letteralmente in un mese. Le fonti di conoscenza più utili sono state Developer.android.com e lo stesso Stackoverflow.com. La cosa più interessante è che il processo di routine di caricamento di un'applicazione su Google Play ci sono voluti due mesi interi. Anche se, forse, tutto è durato così a lungo perché dopo lo sviluppo la mia passione si è un po' raffreddata. Poco dopo, ho sviluppato una versione web dell'applicazione dopo aver letto il libro Beginning Java EE 7.

Non vorrei concludere la mia storia con una frase banale sul fatto che "tutto è nelle nostre mani" e "bisogna solo volerlo". Certo, non tutti, e mi risulta che grazie ad un po' di fortuna ho comunque trovato lavoro come programmatore: cosa sarebbe successo se non mi fossi imbattuto in questo post su VK?

Inoltre, non voglio in alcun modo sminuire l'importanza della formazione universitaria e dire: “Perché è necessario tutto questo? Guarda, è andato tutto proprio così." Bisogno di. L'università in realtà ti dà molto e, cosa forse più importante, instilla l'abitudine all'apprendimento.

Eppure: puoi imparare a programmare da solo. Ora lo so per certo.

Questo articolo non è un tutorial sulla codifica. E non un post su “quale linguaggio di programmazione scegliere”. Se vuoi capire quanto sei interessato a conoscere il mondo del codice, allora la domanda più importante è: cos’è la programmazione? Che aspetto ha la programmazione dall'interno? Io e la programmazione sono compatibili?

Il principio della “logica, non matematica”

Uno dei più grandi malintesi dei nuovi programmatori è che la programmazione sia piena di matematica. Se pensi che la programmazione ti farà ricordare le tue conoscenze scolastiche di trigonometria, algebra, ecc., allora ti sbagli. Questo tipo di matematica è rara nella programmazione.

Per esperienza, le cose "puramente matematiche" includono, ad esempio, l'ordine delle operazioni in un'espressione e il sistema di coordinate. Niente di troppo complicato. Al contrario, c’è molta logica. La necessità di pensare al futuro, capire in quale ordine fare le cose e come controllare quel flusso, permea ogni aspetto della programmazione. Se hai un talento per la logica, sarà facile per te iniziare ad affrontare le attività di programmazione.

Il principio di “catturare una stella cadente”

La programmazione può essere vista come l’esecuzione di molti “processi” – come se costringesse il computer a “fare il lavoro per te” – e la gestione di tali processi. Nella programmazione, un processo spesso produce un risultato. Il risultato può essere un file, ma può anche essere qualcosa di più semplice, come una stringa o un numero.

Il problema quando si lavora con i processi è che se non si fa nulla con i loro risultati, questi semplicemente si dissolvono. Letteralmente “vanno nell'oblio”, non vengono mai più ricreati, molto simili alle stelle che brillano nel cielo e poi scompaiono. In altre parole, devi “catturarli”.

Se crei qualcosa con un processo, devi afferrarlo o lo perderai. È qui che entrano in gioco le variabili, come modo per "catturare" i risultati di un processo. Questo principio aiuta molto a capire cos'è la programmazione nelle prime fasi dell'apprendimento. E se lo prendi presto, lo troverai molto utile.

Il principio del "dizionario".

Esistono molti "tipi" nella programmazione. Pensa ai tipi come agli elementi costitutivi di un linguaggio di programmazione. Un tipo è una stringa o una raccolta di caratteri tra virgolette. Sia "apple" che "orange" sono stringhe. Possono, ad esempio, essere combinati e resi "mela-arancio". I numeri sono di un tipo diverso. I numeri possono essere aggiunti, sottratti, moltiplicati (tra le altre operazioni). Poi ci sono gli "array": un insieme di oggetti in un certo ordine. ["First", "goes", "before", "second"], ad esempio, è un array con il primo elemento "First" e l'ultimo elemento "second".

Ma forse uno dei tipi più potenti è l’hash, o coppia chiave-valore. L'hash ha molti nomi. In Ruby questo è "hash". In JavaScript si chiama "oggetto". Forse Python gli ha dato un nome migliore: “dizionario”. Se ci pensi un po', un dizionario è un insieme di chiavi (parole) che ne indicano il significato.

Ma perché è importante? Si scopre che una tale struttura è spesso necessaria per archiviare i dati. Ad esempio, puoi impacchettare le informazioni su una persona in questo modo:

("first_name" => "Jonathan", "last_name" => "Richards", "nazionalità" => "Britannico" )

Ci sono le chiavi “first_name” (nome), “last_name” (cognome), ecc. Questi sono come proprietà o attributi di una persona. Puoi anche aggiungere "hair_color" (colore dei capelli), "age" (età) o "gender" (sesso). E ciascuna di queste chiavi ha un significato. Una parte significativa della programmazione implica la definizione dei formati delle strutture dati. E le coppie chiave-valore stanno diventando le armi più preziose nel tuo arsenale, quindi è bene capire come funzionano il prima possibile.

Il principio della "matrioska"

La programmazione è piena di oggetti che sono dentro oggetti dentro altri oggetti. Durante la programmazione, ti ritrovi spesso a provare a strutturare i dati e spesso tali strutture contengono altre strutture al loro interno.

Aggiungiamo la proprietà "fratelli" all'esempio precedente:

("first_name" => "Jonathan", "last_name" => "Richards", "nazionalità" => "Britannico", "fratelli" => ( "fratelli" => , "sorelle" => ["Fiona", "Maria"] ) )

Vedrai questo principio durante tutta la tua programmazione. In HTML, alcuni elementi contengono altri elementi:

Nell'informatica, gli oggetti sono principalmente programmi o file. Questo è un principio estremamente utile. Nella programmazione sentirai spesso i termini "in" e "out": input e output. Il motivo è che l'attività è spesso quella di ricevere input (input), elaborarlo (processo) e apportare modifiche (output). L'elaborazione viene eseguita da processi (bit attivi) controllati dal codice. I bit passivi sono dati su cui operano i processi. È come trasformare la carne macinata in salsiccia.

Il principio “cane, gatto e pesce”.

(o il principio di causa ed effetto)

Immagina di avere una stanza. In questa stanza c'è un gatto e un pesce in una ciotola. Il pesce si comporta come al solito. Ad un certo momento accadono 2 cose: il cane entra nella stanza e il gatto esce dalla stanza. Allo stesso tempo, il pesce inizia a cantare. Domanda: Cosa ha fatto cantare il pesce?

Ci sono molte possibilità da considerare. Possiamo supporre che ciò sia accaduto perché è entrato un cane. E possiamo supporre che il motivo sia che il gatto è uscito. O forse il motivo è una combinazione di entrambi gli eventi. Forse entrambi gli eventi non c'entrano niente. Ma il fatto è che le 18:17 è l'ora in cui un pesce si trasforma in una strega. Forse tutti i pesci cantano. Alcune di queste opzioni potrebbero essere vere.

Ciò che è veramente importante per un programmatore è riuscire a isolare le cause del cambiamento. Incontrerai situazioni come questa finché codificherai. In tali situazioni, potremmo chiederci: possiamo simulare l'ingresso del cane senza che il gatto esca (questo potrebbe chiarire molte cose); possiamo simulare l'uscita di un gatto senza l'ingresso di un cane; possiamo replicare completamente l'ambiente (ad esempio, ore 18:17) per vedere se influenza il canto dei pesci, indipendentemente da cani e gatti? E così via. È importante utilizzare una metodologia per determinare le ragioni del cambiamento. Questa capacità ti aiuterà ancora e ancora finché codificherai.

Astrazioni, ovvero il principio della “pizza”.

Questo è uno dei principi più complicati. Immagina una pizzeria. Ogni giorno lo chef prepara la pizza con condimenti diversi. Ogni pizza viene preparata in un certo ordine: prima si prepara l'impasto, poi lo si lascia, poi lo si mette nella teglia, si aggiunge la salsa di pomodoro, i condimenti, il formaggio e infine si inforna.

Ma naturalmente lo chef non prepara ogni pizza da zero nell'ordine qui descritto. Ci vorrebbero anni. Lui, invece, prepara tutto in anticipo, e quando si tratta di napoletana non deve fare altro che prendere la base (che è già formata), aggiungere la salsa di pomodoro, le acciughe e il formaggio, e poi cuocere in forno.

La cosa importante da capire qui è che il cuoco deve solo conoscere gli ingredienti di ogni pizza specifica, altrimenti tutte le pizze sono simili tra loro. La programmazione sembra molto simile, usi "astrazioni" per memorizzare dati più generali (come la crosta di una pizza) separandoli da dati più specifici (i condimenti).

Trasformiamo la preparazione della pizza in codice. Per prima cosa iniziamo a farlo in modo sbagliato. Realizziamo un metodo make_a_napoletana_pizza (preparare la pizza napoletana):

Prepara_una_pizza_napoletana

Avrà 5 passaggi (preparare la base, aggiungere la salsa di pomodoro, aggiungere le acciughe, aggiungere il formaggio, cuocere):

Prepara_la_base aggiungi_la_salsa_di_pomodoro aggiungi_acciughe aggiungi_formaggio al forno

Grande. Ma cosa succede se vogliamo fare una pizza al salame? Saremo costretti a scrivere un metodo completamente nuovo make_a_salami_pizza (fare la pizza al salame), che avrà molto in comune con il metodo attuale, tranne che aggiungerà il salame al posto delle acciughe. Questo è piuttosto costoso. L'approccio del programmatore è quello di "astrarre" le parti comuni delle tecniche di preparazione della pizza e tenere conto dei diversi ingredienti specifici. Possiamo farlo con un "argomento" che viene "passato" al metodo.

Questo è ciò che significa. Immaginiamo che il nostro metodo make_a_pizza venga chiamato con l'argomento "toppings". Il metodo sarà simile a questo:

Prepara_una_pizza(condimenti)

E funzionerà così:

Prepara_la_base aggiungi_la_salsa_di_pomodoro aggiungi_condimenti(condimenti) aggiungi_formaggio al forno

Nella riga 3 prendiamo i condimenti definiti in precedenza e li aggiungiamo alla pizza.

Ora che abbiamo definito un metodo generale per fare la pizza, possiamo semplicemente chiamarlo e specificare gli ingredienti che vogliamo. Tutto avviene automaticamente. In altre parole, chiamiamo make_pizza(salami) e quando il metodo viene eseguito, il salame diventerà condimento e verrà aggiunto alla pizza quando il metodo raggiunge la terza riga. Cambiando semplicemente i condimenti, puoi creare 2 pizze diverse utilizzando un unico metodo. È economico come quando la cameriera scrive semplicemente "1 x salame, 1 x vegetariano" sul modulo d'ordine e il cuoco sa tutto ciò di cui ha bisogno. Nella programmazione questo si chiama "astrazione".

Ecco qua: sette principi che tipicamente vengono appresi nei primi 3 anni di programmazione e che danno un contributo significativo alla comprensione dell'arte del coding. Se stai iniziando il tuo viaggio, questi principi possono aiutare anche te.

Irina Davydova


Tempo di lettura: 13 minuti

AA

Ognuno sceglie la professione di “programmatore” per un motivo specifico. Uno ha deciso di cambiare semplicemente la sua specialità, il secondo è costretto a imparare un'altra professione, il terzo non capisce se stesso senza codici e qualcuno intraprende la professione semplicemente per curiosità.

In un modo o nell'altro, tutti iniziano da zero. E prima di iniziare da zero, chiediti: hai davvero bisogno di questa professione?

L'essenza del lavoro di un programmatore: principali specializzazioni, pro e contro del lavoro

L’essenza del lavoro di un programmatore dipende dalla specializzazione e dall’azienda.

Tuttavia, a volte un programmatore è allo stesso tempo uno “svedese, un mietitore e un trombettista”. Ma questo, di regola, accade nelle piccole aziende i cui capi risparmiano sugli specialisti.

Le principali categorie in cui possono essere grossolanamente suddivisi tutti i programmatori in base alle loro attività:

  • Specialisti delle applicazioni. Mansioni: sviluppo software per giochi, editor, contabilità/programmi, messaggistica istantanea, ecc.; sviluppo software per sistemi di audio/video sorveglianza, sistemi di allarme, ecc.; adattare i programmi per soddisfare le esigenze specifiche di qualcuno.
  • Specialisti di sistema. Compiti: sviluppo di sistemi operativi, creazione di interfacce per database, gestione di un sistema informatico, lavoro con reti, monitoraggio del funzionamento dei sistemi creati, ecc. Questi specialisti guadagnano più di chiunque altro nel loro campo, a causa della rarità e specificità della professione.
  • Specialisti del web. Compiti: lavorare con Internet, creare siti e pagine web, sviluppare interfacce web.

I vantaggi della professione includono i seguenti vantaggi:

  1. Uno stipendio molto dignitoso.
  2. Elevata richiesta di buoni specialisti.
  3. Opportunità di ottenere un lavoro prestigioso senza istruzione.
  4. L'opportunità di guadagnare denaro da remoto stando seduti a casa sul divano.
  5. Opportunità di lavorare da remoto per aziende estere.
  6. Professione creativa (tuttavia, la creatività spesso dipende dai desideri del cliente).
  7. Condizioni confortevoli che le grandi aziende offrono ai loro specialisti (bevande/panini gratuiti, luoghi speciali per attività ricreative e sportive, ecc.).
  8. Possibilità di ottenere una “opzione”. Cioè, un pacchetto di azioni della società. È vero, solo dopo aver prestato servizio in azienda per un certo periodo di tempo.
  9. Ampliare i tuoi orizzonti. Man mano che sviluppi la tua professione, devi conoscere una varietà di aree della vita e approfondire una varietà di sistemi: dal lavoro d'ufficio alla contabilità, ecc.

Aspetti negativi:

  • Lavorare “tutto il giorno” è comune in questa professione.
  • Questo lavoro sarà noioso e monotono per molte persone.
  • Gli interessi dello specialista e del cliente non sempre coincidono e ciò che è ovvio per il programmatore, di regola, non può essere spiegato affatto al cliente. Ciò porta a conflitti e stress.
  • Le modalità operative di emergenza non sono rare.
  • La necessità di svilupparsi costantemente, imparare cose nuove e avere tempo per evolversi nella sfera IT. Nel giro di pochi anni i programmi diventano obsoleti ed è necessario scriverne di nuovi.

Video: come diventare programmatore?

Qualità personali e aziendali necessarie, competenze professionali e capacità per lavorare come programmatore: cosa devi sapere ed essere in grado di fare?

Le principali qualità di un buon programmatore

Un buon programmatore dovrebbe...

  1. Adoro il tuo lavoro. E non solo amare: esserne stufo.
  2. Adoro imparare e insegnare da zero.
  3. Sii molto laborioso, diligente e paziente.
  4. Preparati per un lavoro di routine costante.
  5. Essere in grado di lavorare in gruppo.

Di quali conoscenze ha bisogno un futuro programmatore?

Dovresti iniziare studiando...

  • In inglese.
  • Dispositivi informatici e fisica di tutti i processi.
  • Linguaggi di programmazione.
  • Metodologia di sviluppo software.
  • Metodologia di test del software.
  • Sistemi di controllo della versione.

Linguaggio di programmazione: con quale iniziare?

Dovrai anche studiare...

  • Giava. Più popolare di Python e una buona scelta per un principiante. Ma più complesso di Python.
  • PHP. Progettato per il web, ma sarà utile a qualsiasi principiante.
  • Do e Do#. Lingue molto complesse, puoi lasciarle per dopo.
  • Rubino. Una buona opzione per una seconda lingua.
  • Django. Ti insegnerà come programmare correttamente. Simile per complessità a Python.

Molto dipende dalla direzione scelta.

Per esempio…

  1. Un programmatore web trarrà vantaggio dalla conoscenza di HTML, CSS e JavaScript.
  2. Per programmatori desktop: API e framework.
  3. Per sviluppatori di applicazioni mobili: Android, iOS o Windows Phone.

Dove studiare per diventare programmatore da zero: istituti scolastici in Russia, corsi, apprendimento a distanza, apprendimento online?

Se non hai amici che possano insegnarti da zero la professione di programmatore, allora hai diverse opzioni di formazione:

  • Autoeducazione. Il percorso più difficile verso la programmazione, che passa attraverso lo studio di siti, applicazioni, libri, ecc.
  • Università. Se ti sei appena diplomato e sogni di ottenere una professione prestigiosa come programmatore, iscriviti alla facoltà appropriata. Acquisirai comunque le conoscenze di base attraverso l'autoeducazione, ma la "crosta" ti aiuterà ad avvicinarti più velocemente al tuo caro obiettivo. Scegli le università tecniche, dopo aver studiato in anticipo i programmi di formazione.
  • Insegnante personale . Se riesci a trovare un mentore tra i programmatori, l’autoapprendimento sarà più veloce ed efficace. Cerca mentori nei forum online, alle feste IT, alle conferenze tematiche, ecc.
  • Corsi. Possono insegnarti questo o quel linguaggio di programmazione in corsi semplici che si possono trovare anche nelle piccole città. Per esempio, " Portale IT educativo GeekBrains", « Specialista" presso MSTU Bauman, « Accademia Informatica STEP", MASPC.

Puoi ottenere un'istruzione superiore come programmatore in...

  1. MEPhI.
  2. Università russa di economia Plekhanov.
  3. Università statale di ingegneria civile di Mosca.
  4. MSTU Baumann.
  5. Università statale di gestione.

Video: 7 errori commessi dai programmatori principianti

Risorse online e libri utili per imparare a diventare programmatore

  • habrahabr.ru (articoli su argomenti IT, informazioni su una varietà di argomenti). Questa risorsa è nota a ogni programmatore.
  • rsdn.org (libri, questioni attuali, forum utili, colmare le lacune di conoscenza, materiali in russo).
  • sql.ru (eccellente forum conveniente, letteratura utile e persino offerte di lavoro).
  • theregister.co.uk (notizie dal settore IT).
  • opennet.ru (notizie, articoli utili, forum, ecc.). Una risorsa per i professionisti.
  • driver.ru (libreria di driver). Sito utile per principianti.

Risorse di apprendimento:

  1. ocw.mit.edu/courses (oltre 2000 corsi su vari argomenti).
  2. coursera.org (più di 200 corsi, gratuiti).
  3. thecodeplayer.com (guide passo passo per principianti).
  4. eloquentjavascript.net (risorsa per l'introduzione a Java Script).
  5. rubykoans.com (per chiunque stia imparando Ruby).
  6. learncodethehardway.org (impara Python, Ruby, C, ecc.).
  7. udemy.com (corsi a pagamento e gratuiti).
  8. teamtreehouse.com (oltre 600 lezioni).
  9. webref.ru/layout/learn-html-css (per padroneggiare HTML e CSS).
  10. getbootstrap.com (esplorando le funzionalità di Bootstrap).
  11. learn.javascript.ru (frontend di apprendimento e Javascript).
  12. backbonejs.org (per sviluppatori front-end).
  13. itman.in/uroki-django (per imparare Django).

Siti di apprendimento gratuiti per aiutare i principianti:

  • ru.hexlet.io (8 corsi gratuiti in C e PHP, JavaScript e Bash).
  • htmlacademy.ru (18 corsi gratuiti per progettisti di layout).
  • codecademy.com (corsi popolari su lingue, strumenti, ecc.).
  • codeschool.com (più di 60 corsi (13 gratuiti) su HTML/CSS e JavaScript, Ruby e Python, iOS e Git, ecc.).
  • checkio.org (per imparare Python e JavaScript).
  • codingame.com (imparare attraverso i videogiochi, 23 linguaggi di programmazione).
  • codecombat.com (impara JavaScript, Python, ecc.). Un gioco educativo accessibile anche a chi non parla ancora inglese.
  • codehunt.com (formazione per trovare errori nel codice).
  • codefights.com (una piattaforma di formazione attraverso tornei su cui puoi ottenere un colloquio presso una società informatica decente).
  • bloc.io/ruby-warrior# (apprendimento di Ruby e arte/intelligenza).
  • theaigames.com (sviluppo delle capacità di programmazione - un entusiasmante simulatore di giochi online per un programmatore).
  • codewars.com (una raccolta di compiti didattici interattivi per chi ha un minimo di conoscenza).

Di solito sono necessari dai sei ai 12 mesi per apprendere le basi della programmazione da solo.

Come trovare rapidamente un lavoro come programmatore e iniziare a guadagnare denaro: consigli di persone esperte

Naturalmente, semplicemente non sarai in grado di trovare un lavoro in un'azienda normale senza esperienza lavorativa.

Ecco perché…

  1. Leggi libri, studia siti web e informati, ma ora inizia a scrivere le tue primissime righe di codice.
  2. Crea e complica i tuoi compiti in base al materiale trattato.
  3. Cerca i tuoi primi progetti, anche per “soldi divertenti”, scrivilo nel tuo “curriculum”.
  4. Cerca lavoro negli scambi freelance in lingua russa (ru) e anche negli scambi in lingua inglese (upwork.com): lì ci sono più possibilità di trovarlo.
  5. Inizia con piccoli progetti che puoi gestire.
  6. Non perdere l'opzione open source (in tali progetti mancano sempre persone).
  7. Aiuta “per un bel soldo” (o anche gratis, per esperienza) ai programmatori che conosci. Lascia che ti diano compiti semplici.

  • Assicurati di scrivere: la tua esperienza lavorativa, un elenco di lingue e tecnologie che parli, istruzione e contatti.
  • Non inseriamo l’intero elenco delle nostre qualità e talenti nel nostro curriculum. Anche se suoni magistralmente la fisarmonica a bottoni, non dovresti scriverlo sul tuo curriculum.
  • Progetta il tuo curriculum in modo che sia creativo ma pertinente.
  • Non dovresti compilare voci come “i tuoi obiettivi e ambizioni” o “dove mi vedo tra 5 anni”. Basta scrivere cosa hai fatto prima e cosa vorresti fare adesso.
  • Non scrivere di linguaggi e tecnologie che conosci solo per nome. Dovresti scrivere nel tuo curriculum solo quelli in cui nuoti come un pesce nell'acqua. Per tutto il resto c'è una frase magica: "c'è stata una piccola esperienza".
  • Se sei esperto di Delphi, non dimenticare di dire che conosci anche C#, Jave o un altro linguaggio, perché nessuno ha davvero bisogno di un "programmatore Delphi" (Delphi è la base con cui ogni laureato ha familiarità).
  • Non menzionare lavori che non rientrano nella tua specialità. Nessuno è interessato a questo. Inoltre, a nessuno importa se hai la patente o un'auto. Non otterrai un lavoro come corriere.

Prospettive di carriera dei programmatori e stipendi dei programmatori

Lo stipendio medio di un programmatore nelle principali città del paese è: da 50.000 a 200.000 rubli.

Per la Russia nel suo insieme - da 35mila a 120000.

La professione è nella lista delle più richieste e delle più profumatamente pagate. Anche uno specialista modesto può guadagnare abbastanza per comprare un panino con caviale, ma un professionista sicuramente non avrà bisogno di soldi.

Da stagista a capo di un dipartimento IT, il percorso non è così lungo e lo stipendio ai massimi livelli può raggiungere i 4.000 dollari mensili. Bene, allora puoi passare alla guida di un grande progetto (circa - sviluppo software), e qui lo stipendio supera già i 5.000 dollari.

Oggi è difficile immaginare la nostra vita senza cose che sono già diventate cose di tutti i giorni come laptop e personal computer, smartphone e console, terminali nei supermercati, sistemi bancari automatizzati, ecc. Questo elenco potrebbe continuare a lungo, ma tutti hanno una cosa in comune: sono i programmatori che inseriscono il "cervello" in questi moderni dispositivi intelligenti.

Ma, prima di scegliere questa professione, è necessario capire chiaramente da dove cominciare per raggiungere il successo in questo difficile campo.

Chiunque abbia competenze di base, conoscenze e un grande desiderio può diventare un programmatore. Inoltre, devi decidere in quale area della programmazione ti piacerebbe lavorare di più. In questo caso le direzioni principali sono tre.

1. I programmatori web sono la linea di lavoro più semplice. Include:

  • Designer di layout creazione di modelli (progettazione di siti Web);
  • Programmatore di server che crea uno script per un sito Web.

2. I Programmatori Software (livello medio di complessità) si dividono in:

  • Sviluppatore di software;
  • Sviluppatore di programmi di sistema.

3. Programmatori che sviluppano giochi per PC, telefoni cellulari, console: l'area di lavoro più difficile.

Quanto tempo devi studiare?

Tutto dipende dal desiderio e dall'intensità di acquisire conoscenze teoriche e abilità pratiche. Esiste però una regola non scritta secondo cui in un anno si può imparare tutto. La cosa principale è avere il desiderio di imparare e acquisire costantemente nuove competenze. Per quanto riguarda l'età in cui si può padroneggiare questa professione, c'è anche una questione di determinazione. Alcuni all'età di 18-20 anni non hanno voglia ed energia vitale, mentre altri, essendo in età pensionabile, raggiungono facilmente gli obiettivi che si sono prefissati.

Quali conoscenze e qualità sono necessarie?

I giovani che vogliono collegare la propria vita con la programmazione in età scolare dovrebbero capire che l'istruzione che ricevono stando seduti alla scrivania faciliterà notevolmente il loro compito di padroneggiare questa professione.

Dal curriculum scolastico, particolare attenzione dovrebbe essere prestata alle seguenti materie:

  1. Matematica superiore. Oltre alla capacità di eseguire calcoli ordinari, questa è una delle poche materie scolastiche che ti costringe a pensare, analizzare, sviluppare il pensiero astratto e trarre conclusioni personali. Queste sono le competenze che una persona dovrebbe avere;
  2. Lingua inglese. In questo caso è richiesto almeno un “livello intermedio con dizionario”. Idealmente ciò significa una buona conoscenza di un linguaggio tecnico e la capacità di tradurre testi specialistici. Infatti, per la maggior parte dovrai studiare e utilizzare la documentazione, acquistare vari software e anche negoziare con controparti straniere con una padronanza sicura della lingua inglese;
  3. Informatica (teoria della programmazione). È necessario comprendere i tipi di dati e le basi per lavorare con database, operatori di base e linguaggi di programmazione (nel curriculum scolastico questi sono Pascal e C++), nonché le basi della programmazione orientata agli oggetti;
  4. Fisica. Molte persone credono che la conoscenza di questa materia sia assolutamente inutile per padroneggiare la professione di programmatore. Ma questa opinione può essere definita errata. Dopotutto, quest'area di lavoro può essere strettamente correlata alla fisica. Ad esempio, creando un simulatore di una nave spaziale o marittima, nonché giochi per computer il più vicino possibile alla realtà. Potrebbe essere necessaria la conoscenza dell'incidenza e della rifrazione della luce, della creazione di movimenti reali e delle derive di un'auto in varie condizioni meteorologiche, della rappresentazione realistica di acqua, fumo o fuoco, ecc.

Qualità richieste per il lavoro:

  1. Possesso di un pensiero straordinario e logico;
  2. Pensiero matematico;
  3. Capacità di gestire il tempo (senza dimenticare il costante autoapprendimento);
  4. La capacità di dividere un compito di grandi dimensioni in sottoattività;
  5. La capacità di scegliere l'obiettivo giusto e avere il desiderio di raggiungerlo;
  6. Capacità di lavorare in un grande team. Non puoi gestire grandi progetti da solo e i piccoli progetti non sono particolarmente richiesti. È necessario discutere le questioni poco chiare con colleghi più esperti e colmare le lacune conoscitive;
  7. Capacità di apprendere rapidamente. Le tecnologie non si fermano. Pertanto, oltre al lavoro esistente sui tuoi progetti, devi monitorare costantemente ed essere consapevole degli ultimi cambiamenti nel campo della tecnologia dell'informazione.

Conoscenze e competenze minime

Secondo gli ingegneri e programmatori di Google, ogni specialista che si rispetti nel campo della programmazione deve possedere una serie di conoscenze e competenze minime per poter diventare un professionista in futuro. E allora, cosa devi sapere per diventare uno specialista di alto livello:

  • Impara le basi dell'alfabetizzazione informatica utilizzando i corsi di apprendimento a distanza di Coursera o Udacity;
  • Acquisire conoscenza della programmazione in almeno un linguaggio (Python, C++, Java);
  • Imparare altri linguaggi (PHP, Java Script, HTML, CSS);
  • Impara a testare il codice;
  • Imparare a comprendere algoritmi e strutture dati;
  • Acquisire conoscenza della matematica discreta;
  • Studiare le caratteristiche dei sistemi operativi;
  • Acquisire conoscenze sull'intelligenza artificiale;
  • Impara a creare compilatori;
  • Acquisire conoscenze di crittografia e programmazione parallela.

Quando si inizia il lavoro pratico, gli esperti sopra menzionati consigliano:

  • Crea il tuo sito web, server o robot;
  • Sviluppare parte di un sistema di grandi dimensioni, comprendere la documentazione e i codici, eseguire il debug del programma;
  • Inizia a lavorare su un grande progetto in squadra. Ciò ti consentirà di apprendere più velocemente e di abituarti all'interazione del team;
  • Migliorare costantemente le tue conoscenze e abilità;
  • Iniziare il lavoro di insegnamento agli altri.

Dove posso ottenere le conoscenze necessarie?

Puoi acquisire le conoscenze teoriche e pratiche necessarie nel campo della programmazione in diversi modi:

  1. Imparare da libri e riviste. Questa opzione può essere definita standard e collaudata per molti anni. Tuttavia, per risparmiare sull'acquisto di “supporti cartacei”, è possibile scaricare le informazioni più rilevanti sulle problematiche di programmazione dalle risorse Internet. Molti professionisti sostengono che la percezione del materiale studiato è migliore dalle fonti cartacee. E la necessità di scrivere manualmente molti codici diversi ti consentirà di acquisire fiducia in te stesso e di sbarazzarti del modo passivo di scrivere codici di programma come "copia e incolla";
  2. Videocorsi di formazione. Sono una buona alternativa a libri e riviste. I libri sono scritti per lo più in un linguaggio noioso e non sempre comprensibile, senza la possibilità di porre all'autore una domanda di interesse. Se guardi le video lezioni, tutto è molto più semplice. La cosa principale necessaria è ripetere tutte le azioni visualizzate sul monitor. E se dovessero sorgere difficoltà o momenti incomprensibili, puoi sempre porre la tua domanda all'autore sul forum. Un altro aspetto positivo di tale formazione è l'implementazione indipendente di una serie di azioni descritte nella lezione. Sì, ciò avviene sotto forma di una chiara ripetizione delle operazioni effettuate nel video. Ma è proprio questa procedura che sviluppa gradualmente la capacità di creare autonomamente script, applicazioni e programmi.

Avendo acquisito un livello sufficiente di conoscenza, puoi valutare i tuoi punti di forza e competere su vari siti specializzati per programmatori. Inoltre, per ottenere informazioni nuove e utili, nonché per comunicare con i “colleghi”, si consiglia di visitare i forum Internet.

Conclusione

I cambiamenti nelle tecnologie IT, compresi i linguaggi di programmazione, si verificano continuamente. È necessario cercare di stare al passo con i tempi, studiare la varia letteratura dedicata a una specifica area di lavoro. La ricerca costante di modi diversi per risolvere i problemi aiuterà a migliorare la conoscenza professionale. La comunicazione con colleghi o semplicemente persone legate alla programmazione ti consentirà di trovare rapidamente le giuste modalità per portare a termine i compiti assegnati.

Non c’è niente di sbagliato nell’usare costantemente libri di riferimento sui linguaggi di programmazione, perché non puoi tenere tutto in testa e ci sono cose che non devi tenere per forza. Vale la pena avvicinarsi alla soluzione di qualsiasi problema (anche il più semplice a prima vista) in modo approfondito e lento. Quando si applicano per la prima volta le conoscenze teoriche acquisite nella pratica, è necessario imparare come sviluppare il proprio algoritmo di soluzione. È necessario affrontare piccoli problemi di programmazione il più spesso possibile e affinare gradualmente le proprie capacità. Successivamente, con l'esperienza acquisita, il programmatore potrà permettersi, oltre al suo lavoro principale, di condurre ulteriori seminari e consultazioni retribuite, nonché di reclutare studenti. Spero che tali difficoltà non ti abbiano spaventato e continuerai ad avanzare verso il tuo obiettivo.

Pubblicazioni sull'argomento