Come ottenere il massimo da una formazione informatica

La maggior parte dei programmatori moderni ha ricevuto la propria istruzione nelle università. Con il tempo la situazione cambierà, ma ora le cose sono tali che il personale qualificato nelle aziende IT proviene ancora dalle università. In questo post, Stanislav Protasov, Direttore delle relazioni universitarie di Acronis, parla della sua visione delle caratteristiche della formazione universitaria per i futuri programmatori. Insegnanti, studenti e coloro che li assumono potrebbero trovare anche alcuni consigli utili sotto il taglio.

Come ottenere il massimo da una formazione informatica

Negli ultimi 10 anni insegno matematica, algoritmi, linguaggi di programmazione e machine learning in varie università. Oggi, oltre alla mia posizione in Acronis, sono anche vicedirettore del dipartimento di informatica teorica e applicata al MIPT. Dalla mia esperienza di lavoro in buone università russe (e non solo), ho fatto alcune osservazioni sulla preparazione degli studenti nelle discipline informatiche.

La regola dei 30 secondi non funziona più

Sono sicuro che ti sei imbattuto nella regola dei 30 secondi, secondo la quale un programmatore dovrebbe comprendere lo scopo di una funzione dopo una rapida occhiata al suo codice. È stato inventato molto tempo fa e da allora sono apparsi molti sistemi operativi, linguaggi, hardware e algoritmi. Scrivo codice da 12 anni, ma relativamente di recente ho visto il codice sorgente di un prodotto, che a prima vista mi è sembrato un incantesimo. Oggi, se non sei immerso nell'argomento, la regola dei 30 secondi smette di funzionare. Altrimenti, non solo 30, ma anche 300 secondi non saranno sufficienti per capire cosa è cosa.

Ad esempio, se vuoi scrivere driver, dovrai immergerti in quest'area e leggere migliaia di righe di codice specifico. Con questo approccio allo studio di una materia, uno specialista sviluppa una "sensazione di flusso". Come nel rap, quando la sensazione di una buona rima e del ritmo giusto appare senza particolare razionalizzazione. Allo stesso modo, un programmatore ben addestrato può facilmente riconoscere un codice inefficace o semplicemente cattivo senza entrare in uno studio dettagliato di dove si è verificata una violazione di stile o è stato utilizzato un approccio non ottimale (ma questa sensazione può essere molto difficile da spiegare).

La specializzazione e la crescente complessità portano al fatto che l’istruzione di primo livello non offre più l’opportunità di studiare tutte le aree in modo sufficientemente approfondito. Ma è proprio a questo livello di istruzione che occorre acquisire uno sguardo. Successivamente, alla scuola di specializzazione o al lavoro, dovrai dedicare del tempo ad immergerti nei problemi e nelle specificità dell'area disciplinare, studiando lo slang, i linguaggi di programmazione e il codice dei colleghi, leggendo articoli e libri. Mi sembra che questo sia l’unico modo, con l’aiuto dell’università, per “alzare la traversa” per il futuro Specialisti a forma di T.

Quale linguaggio di programmazione è meglio insegnare all'università?

Come ottenere il massimo da una formazione informatica
Con mia gioia, i docenti universitari hanno già rinunciato a cercare la risposta corretta alla domanda: “Qual è la lingua migliore per programmare?” Il dibattito su quale sia il migliore tra C# o Java, Delphi o C++ - è praticamente scomparso. L'emergere di molti nuovi linguaggi di programmazione e l'accumulo di esperienza pedagogica hanno portato ad una comprensione consolidata nell'ambiente accademico: ogni linguaggio ha la propria nicchia.

Il problema dell'insegnamento dell'uso dell'uno o dell'altro linguaggio di programmazione ha cessato di essere una priorità. Non importa in quale lingua viene insegnato il corso. La cosa principale è l'espressività sufficiente della lingua. Libro "L'arte della programmazione multiprocessore” è un buon esempio di questa osservazione. In questa edizione ormai classica, tutti gli esempi sono presentati in Java, un linguaggio senza puntatori, ma con Garbage Collector. Quasi nessuno sosterrebbe che Java sia ben lungi dall'essere la scelta ottimale per scrivere codice parallelo ad alte prestazioni. Ma il linguaggio era adatto a spiegare i concetti presentati nel libro. Un altro esempio - corso classico di machine learning Andrew Nna, ha insegnato in Matlab nell'ambiente Octave. Oggi potresti scegliere un linguaggio di programmazione diverso, ma che differenza fa davvero se le idee e gli approcci sono importanti?

Più pratico e più vicino alla realtà

Allo stesso tempo, negli ultimi anni ci sono stati molti più professionisti nelle università. Se prima i programmi universitari russi venivano criticati attivamente perché lontani dalla realtà, oggi non si può dire lo stesso dell’istruzione informatica. 10 anni fa nelle università non c’erano quasi insegnanti con una reale esperienza nel settore. Al giorno d'oggi, sempre più spesso, le lezioni in un dipartimento specializzato non vengono impartite da insegnanti di informatica a tempo pieno, ma da specialisti IT praticanti che tengono solo 1-2 corsi nel tempo libero dal loro lavoro principale. Questo approccio si giustifica dal punto di vista della formazione del personale di alta qualità, dei corsi di aggiornamento e, ovviamente, della ricerca di potenziali dipendenti in azienda. Non credo che svelerò il segreto dicendo che supportiamo un dipartimento di base al MIPT e costruiamo rapporti con altre università, anche per preparare gli studenti che potrebbero iniziare la loro carriera in Acronis.

Matematico o programmatore?

Come ottenere il massimo da una formazione informatica
Le guerre sante, che in precedenza ruotavano attorno ai linguaggi di programmazione, si sono spostate in una direzione filosofica. Adesso i cosiddetti “programmatori” e “matematici” litigano tra loro. In linea di principio, queste scuole potrebbero essere separate in due programmi educativi, ma l’industria è ancora scarsa nel separare tali sottigliezze, e da università a università abbiamo un’istruzione simile con un focus leggermente diverso. Ciò significa che sia lo studente che l’azienda in cui continuerà a lavorare dovranno integrare il puzzle della conoscenza con i pezzi mancanti.

L’emergere di professionisti nelle università che scrivono codici industriali in diverse lingue offre agli studenti migliori capacità di sviluppo. Conoscendo bene le implementazioni di librerie standard, framework e tecniche di programmazione, i programmatori praticanti instillano negli studenti il ​​desiderio di scrivere buon codice, di farlo in modo rapido ed efficiente.

Questa utile abilità, tuttavia, a volte fa emergere coloro a cui piace reinventare la ruota. Gli studenti di programmazione pensano in questo modo: “Devo scrivere altre 200 righe di buon codice che risolvano il problema direttamente?”

Gli insegnanti che hanno ricevuto una formazione matematica classica (ad esempio, dalla Facoltà di Matematica o di Matematica Applicata) lavorano spesso in un ambiente pseudo-scientifico o nel campo della modellazione e dell'analisi dei dati. I “matematici” vedono i problemi nel campo dell’informatica in modo diverso. Principalmente non operano con codice, ma con algoritmi, teoremi e modelli formali. Un importante vantaggio dell’approccio matematico è la chiara comprensione fondamentale di ciò che può e non può essere risolto. E come risolverlo.

Di conseguenza, gli insegnanti di matematica parlano di programmazione con una preferenza per la teoria. Gli studenti che provengono da “matematici” spesso escogitano soluzioni ben ponderate e teoricamente superiori, ma di solito non ottimali da un punto di vista linguistico e spesso semplicemente scritte in modo sciatto. Un tale studente ritiene che il suo obiettivo principale sia dimostrare la capacità di risolvere tali problemi in linea di principio. Ma l’implementazione potrebbe essere zoppa.

I bambini cresciuti come programmatori a scuola o nei primi anni portano con sé una “bicicletta molto bella”, che però di solito non funziona in modo asintotico in modo molto efficiente. Al contrario, non si pongono il compito di teorizzare profondamente e di rivolgersi ai libri di testo alla ricerca di soluzioni ottimali, preferendo un bel codice.

In diverse università, durante i colloqui con gli studenti, di solito vedo quale “scuola” è alla base della sua educazione. E non ho quasi mai riscontrato un equilibrio perfetto nell’istruzione di base. Da bambino, nella mia città potevi prepararti per le olimpiadi della matematica, ma non esistevano i club di programmazione. Ora, nei club, i bambini imparano a programmare in Go e Python "alla moda". Pertanto, anche a livello di ammissione alle università, ci sono differenze negli approcci. Credo che sia importante mantenere entrambe le competenze in un'università, altrimenti o uno specialista con basi teoriche insufficienti, o una persona che non ha imparato e non vuole scrivere un buon codice, verrà a lavorare in azienda.

Come “gonfiare la traversa” per il futuro Specialisti a forma di T?

Come ottenere il massimo da una formazione informatica
È chiaro che in tali condizioni lo studente sceglie semplicemente ciò che gli piace di più. L'insegnante trasmette semplicemente il punto di vista che gli è più vicino. Ma tutti trarranno vantaggio se il codice sarà scritto magnificamente e, dal punto di vista degli algoritmi, tutto sarà chiaro, ragionevole ed efficace.

  • Orizzonti informatici. Un laureato in Informatica è uno specialista già pronto con una visione tecnica sviluppata, che probabilmente ha scelto il suo profilo. Ma al terzo anno non sappiamo cosa farà. Può dedicarsi alla scienza o all'analisi o, al contrario, può scrivere un'enorme quantità di codice ogni giorno. Pertanto, allo studente è necessario mostrare tutti gli aspetti del lavoro nel campo IT e introdurre tutti gli strumenti. Idealmente, gli insegnanti dei corsi teorici mostreranno una connessione con la pratica (e viceversa).
  • Punto di crescita. È nell'interesse dello studente stesso non permettersi di andare agli estremi. Capire se sei un “matematico” o un “programmatore” non è difficile. Basta ascoltare il primo impulso quando si risolve un problema: cosa vuoi fare: guardare nel libro di testo alla ricerca dell'approccio ottimale o scrivere un paio di funzioni che saranno sicuramente utili in seguito? Sulla base di ciò, puoi costruire un'ulteriore traiettoria complementare del tuo apprendimento.
  • Fonti alternative di conoscenza. Succede che il programma è ben bilanciato, ma "Programmazione di sistema" e "Algoritmi" vengono insegnati da persone completamente diverse, e alcuni studenti sono più vicini al primo insegnante e altri al secondo. Ma anche se il professore non ti piace, questo non è un motivo per trascurare alcune materie a favore di altre. Gli stessi laureati sono interessati a trovare la volontà di lavorare con le fonti di conoscenza e non si fidano in nessun caso di opinioni radicali come "la matematica è la regina delle scienze, l'importante è conoscere gli algoritmi" o "un buon codice compensa tutto il resto".

Puoi approfondire le tue conoscenze teoriche rivolgendoti alla letteratura specializzata e ai corsi online. Puoi migliorare le tue abilità nei linguaggi di programmazione su Coursera, Udacity o Stepik, dove vengono presentati molti corsi diversi. Inoltre, gli studenti spesso iniziano a guardare corsi di lingua hardcore se ritengono che l’insegnante di algoritmi conosca bene la matematica, ma non sappia rispondere a domande complesse sull’implementazione. Non tutti saranno d'accordo con me, ma nella mia pratica si è dimostrato efficace specializzazione in C++ da Yandex, in cui vengono analizzate sequenzialmente caratteristiche sempre più complesse della lingua. In generale, scegli un corso con valutazioni elevate da aziende o università rispettabili.

Soft skills

Come ottenere il massimo da una formazione informatica
Venendo dall'università per lavorare in qualsiasi azienda, da una startup a una grande azienda, gli studenti anche delle migliori università si trovano poco adattati al reale ambiente di lavoro. Il fatto è che oggi le università fanno spesso da babysitter agli studenti. Anche dopo aver saltato molte lezioni, non essersi preparati per test e test in tempo, aver dormito troppo o essere in ritardo per un esame, tutti possono superarlo e ripeterlo e alla fine ricevere comunque un diploma.

Tuttavia, oggi ci sono tutte le condizioni affinché gli studenti siano preparati alla vita adulta e all'attività professionale indipendente. Dovranno non solo programmare, ma anche comunicare. E anche questo va insegnato. Le università hanno vari formati per sviluppare queste competenze, ma, ahimè, spesso non ricevono sufficiente attenzione. Tuttavia, abbiamo molte opportunità per acquisire capacità di lavoro di squadra efficaci.

  • Comunicazione commerciale scritta. Sfortunatamente, la maggior parte dei laureati che lasciano l'università non hanno idea dell'etichetta della corrispondenza. La specificità della comunicazione negli instant messenger sta nello scambio di messaggi giorno e notte e nell'uso dello stile conversazionale e del vocabolario informale. Tuttavia, sarebbe possibile allenare il discorso scritto quando lo studente comunica con il dipartimento e l'università.

    In pratica, i manager si trovano spesso di fronte alla necessità di scomporre un grande progetto in piccoli compiti. Per fare ciò, è necessario descrivere chiaramente ciascuna attività e i suoi componenti in modo che gli sviluppatori junior capiscano cosa è loro richiesto. Un compito mal definito spesso porta alla necessità di rifare qualcosa, motivo per cui l'esperienza nella comunicazione scritta aiuta i laureati a lavorare in team distribuiti.

  • Presentazione scritta dei risultati del proprio lavoro. Per presentare i loro progetti educativi, gli studenti senior possono scrivere post su Habr, articoli scientifici e anche solo rapporti. Ci sono molte opportunità per questo: i corsi iniziano nel secondo anno in alcune università. Puoi anche usare i saggi come forma di controllo: di solito sono più vicini nella forma a un articolo giornalistico. Questo approccio è già stato implementato presso la Scuola Superiore di Economia della National Research University.

    Se un’azienda pratica un approccio flessibile allo sviluppo, deve presentare i risultati del proprio lavoro in porzioni più piccole, ma più spesso. Per fare ciò, è importante essere in grado di trasmettere brevemente i risultati del lavoro di uno specialista o dell'intero team. Inoltre, molte aziende oggi conducono "revisioni": annuali o semestrali. I dipendenti discutono i risultati e le prospettive di lavoro. Una revisione di successo è la ragione principale della crescita della carriera, dei bonus, ad esempio, in Microsoft, Acronis o Yandex. Sì, puoi programmare bene, ma "seduto nell'angolo" anche uno specialista simpatico perderà sempre contro qualcuno che sa presentare bene il suo successo.

  • La scrittura accademica. La scrittura accademica merita una menzione speciale. È utile che gli studenti acquisiscano familiarità con le regole per scrivere testi scientifici, utilizzare argomentazioni, cercare informazioni in varie fonti e formattare i riferimenti a queste fonti. È consigliabile farlo in inglese, poiché nella comunità accademica internazionale ci sono molti più buoni testi e per varie discipline esistono già modelli stabiliti per la presentazione dei risultati scientifici. Naturalmente, quando si preparano pubblicazioni in lingua russa sono necessarie anche capacità di scrittura accademica, ma ci sono molti meno esempi di buoni articoli moderni in inglese. Queste competenze possono essere acquisite attraverso un apposito corso, che ormai è inserito in molti programmi formativi.
  • Condurre riunioni. La maggior parte degli studenti non sa come prepararsi per le riunioni, prendere verbali ed elaborare i dati. Ma se sviluppiamo questa abilità all’università, ad esempio partecipando a progetti di gruppo, possiamo evitare di perdere tempo sul posto di lavoro. Ciò richiede la supervisione del lavoro progettuale degli studenti al fine di insegnare loro come condurre efficacemente le riunioni. In pratica, questo costa ad ogni azienda un sacco di soldi - dopo tutto, se diverse persone che ricevono un grande stipendio trascorrono un'ora di lavoro ad una manifestazione, si vuole che ci sia un profitto corrispondente.
  • Discorso pubblico. Molti studenti si trovano ad affrontare la necessità di parlare pubblicamente solo mentre difendono la propria tesi. E non tutti sono pronti per questo. Ho visto molti studenti che:
    • stare con le spalle al pubblico,
    • ondeggiando, cercando di introdurre la commissione in trance,
    • rompere penne, matite e puntatori,
    • camminare in tondo
    • guarda il pavimento.

    Questo è normale quando una persona si esibisce per la prima volta. Ma devi iniziare a lavorare con questo stress prima, difendendo i tuoi corsi in un'atmosfera amichevole, tra i tuoi compagni di classe.

    Inoltre, la pratica standard nelle aziende è quella di dare a un dipendente l'opportunità di proporre un'idea e ricevere un finanziamento, una posizione o un progetto dedicato. Ma, se ci pensi, questa è la stessa protezione dei corsi, solo a un livello più alto. Perché non mettere in pratica abilità professionali così utili mentre studi?

Cosa mi sto perdendo?

Uno dei motivi per scrivere questo post è stato l'articolo, pubblicato sul sito web dell'Università statale di Tyumen. L'autore dell'articolo si concentra solo sulle carenze degli studenti russi notate dagli insegnanti stranieri. La pratica del mio insegnamento in diverse università suggerisce che la scuola russa e l'istruzione superiore forniscono una buona base. Gli studenti russi sono esperti in matematica e algoritmi ed è più facile costruire una comunicazione professionale con loro.

Nel caso degli studenti stranieri, al contrario, le aspettative di un insegnante russo a volte possono essere troppo alte. Ad esempio, a livello di formazione di base in termini di matematica, gli studenti indiani che ho incontrato sono simili a quelli russi. Tuttavia, a volte mancano di conoscenze specialistiche quando si diplomano agli studi universitari. È probabile che i buoni studenti europei abbiano un background matematico meno forte a livello scolastico.

E se studi o lavori in un'università, ora puoi lavorare sulle capacità di comunicazione (tue o dei tuoi studenti), espandere le tue basi fondamentali ed esercitarti nella programmazione. A questo scopo, il sistema educativo russo offre tutte le opportunità: devi solo usarle correttamente.

Sarò felice se nei commenti al post condividerai i tuoi collegamenti a corsi e metodi che aiutano a pareggiare l'equilibrio nell'istruzione, nonché ad altri modi per migliorare le competenze trasversali durante lo studio all'università.

Fonte: habr.com

Aggiungi un commento