Come massimizzare il tuo diploma in Informatica

La maggior parte dei programmatori moderni ha ricevuto la propria formazione nelle università. Col tempo, questo cambierà, ma attualmente le buone figure professionali nelle aziende IT provengono comunque dalle università. In questo post, Stanislav Protasov, direttore delle relazioni universitarie di Acronis, condivide la sua visione sulle peculiarità della formazione universitaria dei futuri programmatori. Insegnanti, studenti e chi li assume possono persino trovare alcuni consigli utili più avanti.

Come massimizzare il tuo diploma in Informatica

Negli ultimi 10 anni, ho insegnato matematica, algoritmi, linguaggi di programmazione e apprendimento automatico in diverse università. Oggi, oltre al mio ruolo in Acronis, sono anche vicecapo del dipartimento di informatica teorica e applicata al MIPT. Dalla mia esperienza 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 certo che vi sia già capitato di sentire parlare della regola dei 30 secondi, secondo cui un programmatore dovrebbe essere in grado di comprendere lo scopo di una funzione dopo una rapida occhiata al suo codice. Questa regola è stata ideata molto tempo fa e da allora sono state sviluppate molteplici 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 come se fosse composto da formule magiche. Oggi, se non si è immersi nel dominio specifico, la regola dei 30 secondi smette di funzionare. Altrimenti, non basteranno 30 secondi, ma neppure 300, per capire cosa significhi ogni cosa.

Ad esempio, se vuoi scrivere driver, dovrai immergerti in questo campo e leggere migliaia di righe di codice specifico. Con questo approccio allo studio, un professionista sviluppa una sensazione di “flow”. Come nel rap, quando la sensazione di buone rime e giusto ritmo emerge senza una razionalizzazione particolare. Allo stesso modo, un programmatore ben preparato può facilmente riconoscere codice inefficace o semplicemente scadente, senza entrare nei dettagli su dove sia avvenuta la violazione dello stile o sia stato utilizzato un approccio non ottimale (ma spiegare questa sensazione può essere piuttosto difficile).

La specializzazione e la crescente complessità portano al fatto che un diploma di laurea non offre più la possibilità di esplorare tutti i settori in modo sufficientemente approfondito. Ma proprio a questo livello di istruzione è necessario acquisire una visione ampia. Solo dopo, durante la magistrale o nel lavoro, sarà necessario spendere del tempo per immergersi nelle problematiche e nella specificità del settore, studiare il gergo, i linguaggi di programmazione e il codice dei colleghi, leggere articoli e libri. Penso che solo in questo modo, grazie all'università, si possa “allenare la barra” per il futuro. specialisti a forma T.

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

Come massimizzare il tuo diploma in Informatica
Con mia grande gioia, i docenti universitari hanno già abbandonato la ricerca di una risposta corretta alla domanda: 'Su cosa è meglio programmare?'. Le discussioni su cosa sia migliore — C# o Java, Delphi o C++ — sono praticamente svanite. L'emergere di molti nuovi linguaggi di programmazione e l'accumulo di esperienza pedagogica hanno portato a una comprensione consolidata nel mondo accademico: ogni linguaggio ha la sua nicchia.

Il problema di insegnare utilizzando un linguaggio di programmazione piuttosto che un altro non è più una priorità. Non importa in quale linguaggio venga tenuto il corso. L'importante è che il linguaggio sia sufficientemente espressivo. Il libro “The Art of Multiprocessor Programming” è una buona illustrazione di questa osservazione. In questa edizione già classica, tutti gli esempi sono presentati in Java — un linguaggio privo di puntatori, ma con Garbage Collector. È difficile sostenere che Java sia la scelta ottimale per scrivere codice parallelo ad alte prestazioni. Ma per spiegare i concetti esposti nel libro, il linguaggio si è rivelato adeguato. Un altro esempio è — corso classico di machine learning Insegnato da Andrew Ng in Matlab nell'ambiente Octave. Oggi si potrebbe scegliere un altro linguaggio di programmazione, ma in fondo, che differenza fa, se ciò che conta sono le idee e gli approcci?

Più pratico e vicino alla realtà

Negli ultimi anni, le università hanno visto un aumento significativo di professionisti pratici. Se un tempo i programmi universitari russi venivano criticati per essere scollegati dalla realtà, oggi non si può più dire lo stesso per l'istruzione IT. Dieci anni fa, nelle università c'erano quasi nessun insegnante con reale esperienza lavorativa nel settore. Adesso, sempre più spesso, le lezioni nei dipartimenti specializzati sono condotte non da docenti a tempo pieno delle scienze informatiche, ma da specialisti IT praticanti, che tengono solo 1-2 corsi nel tempo libero dalla loro principale occupazione. Questo approccio si giustifica in termini di preparazione qualitativa del personale, attualizzazione dei corsi e, naturalmente, ricerca di potenziali dipendenti per le aziende. Non credo di rivelare un segreto dicendo che sosteniamo il dipartimento base presso il MFTI e costruiamo relazioni con altre università anche per formare studenti che possano iniziare la loro carriera in Acronis.

Matematico o programmatore?

Come massimizzare il tuo diploma in Informatica
Le controversie che un tempo si svolgevano attorno ai linguaggi di programmazione sono diventate più filosofiche. Ora si confrontano i cosiddetti “programmatori” e “matematici”. Fondamentalmente, queste scuole potrebbero differenziarsi in due programmi educativi, ma l'industria continua a non separare bene tali sottigliezze, e da università a università abbiamo un'istruzione simile con sfumature leggermente diverse. Ciò significa che sia lo studente che l'azienda per cui lavorerà in seguito dovranno completare il puzzle delle conoscenze con i pezzi mancanti.

L'arrivo nei college di professionisti che scrivono codice industriale in vari linguaggi offre agli studenti competenze di sviluppo di maggiore qualità. Essendo ben familiari con le implementazioni delle librerie standard, dei framework e delle tecniche di programmazione, i programmatori pratici instillano negli studenti il desiderio di scrivere codice di buona qualità, facendolo in modo rapido ed efficiente.

Tuttavia, questa abilità utile porta talvolta alla creazione di dilettanti che reinventano la ruota. Gli studenti programmatori pensano così: “che mi costa scrivere altre 200 righe di codice di qualità che risolvano direttamente il compito?”.

Gli insegnanti con un'istruzione matematica classica (ad esempio, laureati in matematica o matematica applicata) tendono a lavorare più frequentemente in ambienti di ricerca o nell'ambito della modellazione e analisi dei dati. I 'matematici' hanno un approccio diverso ai problemi nel campo dell'informatica. Operano principalmente con algoritmi, teoremi e modelli formali, piuttosto che con il codice. Un importante vantaggio dell'approccio matematico è una chiara comprensione di ciò che può e non può essere risolto, e come affrontarlo.

Di conseguenza, gli insegnanti di matematica trattano la programmazione con un orientamento teorico. Gli studenti che provengono dai 'matematici' tendono a proporre soluzioni ben ponderate e teoricamente più sofisticate, ma generalmente non ottimali dal punto di vista del linguaggio e spesso scritte in modo impreciso. Questo tipo di studente considera che la sua principale obiettivo sia dimostrare la capacità di risolvere tali problemi in linea di principio, mentre l'implementazione può risultare carente.

I ragazzi, che a scuola o nei primi corsi sono stati formati da programmatori, portano con sé una "bici molto bella", che però di solito non funziona in modo particolarmente efficiente asintoticamente. Loro, al contrario, non si pongono l'obiettivo di teorizzare profondamente e di consultare i libri di testo in cerca di soluzioni ottimali, preferendo un codice elegante.

Nei colloqui all'università, di solito noto quale "scuola" sta alla base della sua formazione. E raramente ho riscontrato un equilibrio ideale nella formazione di base. Da bambino, nella mia città, era possibile prepararsi per la matematica olimpica, ma non c'erano corsi di programmazione. Adesso, invece, nei corsi i bambini imparano a programmare usando i "linguaggi trendy" come Go e Python. Pertanto, già all'ingresso nelle università esistono divergenze nei metodi. Credo che all'università sia importante sviluppare entrambe le competenze, altrimenti in azienda arriverà a lavorare o uno specialista con una base teorica insufficiente, oppure una persona che non ha imparato e non vuole scrivere codice di qualità.

Come si fa a "rafforzare la barra orizzontale" per i futuri specialisti T-shaped?

Come massimizzare il tuo diploma in Informatica
È chiaro che in queste condizioni lo studente sceglie semplicemente ciò che gli piace di più. L'insegnante, d'altra parte, trasmette solo il punto di vista che gli è più vicino. Ma tutti trarranno vantaggio da un codice scritto bene, con algoritmi chiari, giustificati ed efficienti.

  • Orizzonte IT. Un laureato in Computer Science è già un professionista con una solida formazione tecnica, che probabilmente ha scelto la propria area di specializzazione. Tuttavia, nei primi anni non sappiamo cosa farà. Potrebbe dedicarsi alla ricerca o all’analisi, oppure, al contrario, scrivere una grande quantità di codice ogni giorno. Pertanto, è necessario mostrare agli studenti tutti gli aspetti del lavoro nel settore IT, presentando tutti gli strumenti. È ideale se gli insegnanti delle lezioni teoriche mostrano il collegamento con la pratica (e viceversa).
  • Punto di crescita. Не допускать скатывания в крайности — в интересах самого студента. Понять, кто вы — “математик” или “программист” — не сложно. Достаточно прислушаться к первому порыву при решении задачи: что вам хочется сделать — заглянуть в учебник в поисках оптимального подхода или написать пару функций, которые потом точно пригодятся? Исходя из этого можно строить дальнейшую комплементарную траекторию своего обучения.
  • Альтернативные источники знаний. Бывает так, что программа хорошо сбалансирована, но “Системное программирование” и “Алгоритмы” ведут совершенно непохожие люди, и одним студентам ближе первый преподаватель, а другим — второй. Но даже если вам не нравится профессор, это не повод забивать на одни предметы в пользу других. Сами бакалавры заинтересованы в том, чтобы найти в себе волю работать с источниками знаний и ни в коем случае не доверять радикальным мнениям, таким как “математика — царица наук, главное — знать алгоритмы” или “хороший код компенсирует все остальное”.

Per approfondire le proprie conoscenze teoriche, è possibile rivolgersi a letteratura specializzata e corsi online. È possibile migliorare le competenze nei linguaggi di programmazione su Coursera, Udacity o Stepik, dove sono disponibili numerosi corsi. Inoltre, gli studenti spesso iniziano a seguire corsi più avanzati se sentono che l'insegnante di algoritmi conosce bene la matematica, ma non riesce a rispondere a domande complesse sulla loro implementazione. Non tutti potrebbero essere d'accordo con me, ma nella mia esperienza, questo metodo ha dato buoni risultati. specializzazione in C++ di Yandex, che esamina sistematicamente sempre più funzionalità avanzate del linguaggio. In generale, scegliete un corso con valutazioni elevate, offerto da aziende o università rinomate.

Soft skills

Come massimizzare il tuo diploma in Informatica
Arrivando dall'università al lavoro in qualsiasi azienda, da una startup a una grande corporazione, anche gli studenti dei migliori atenei si trovano male adattati al vero ambiente lavorativo. Questo perché oggi le università “si prendono cura” molto degli studenti. Anche saltando molte lezioni, non preparandosi in tempo per i test e gli esami, e arrivando in ritardo, ognuno può superare e ripetere gli esami, e alla fine comunque ottenere il diploma.

Tuttavia, oggi ci sono tutte le condizioni affinché gli studenti vengano preparati alla vita adulta e all'autonoma attività professionale. Dovranno non solo programmare, ma anche comunicare. E anche questo deve essere insegnato. Nelle università esistono vari formati per sviluppare queste competenze, ma, ahimè, spesso non ricevono l'attenzione necessaria. Tuttavia, abbiamo a disposizione molte opportunità per acquisire competenze di lavoro di squadra efficaci.

  • Comunicazione d'affari scritta. Sfortunatamente, molti neolaureati non hanno alcuna idea del galateo della comunicazione. Le specificità della comunicazione nei messaggini includono lo scambio di messaggi di notte e di giorno, oltre all'uso di uno stile colloquiale e lessico informale. Tuttavia, sarebbe possibile migliorare la scrittura attraverso la comunicazione tra studenti e il dipartimento universitario.

    In pratica, i manager si trovano spesso a dover suddividere un grande progetto in compiti più piccoli. È fondamentale descrivere bene ogni compito e le sue componenti affinché i programmatori junior comprendano cosa ci si aspetta da loro. Un compito mal formulato porta spesso alla necessità di rifare qualcosa, perciò l'esperienza nella comunicazione scritta aiuta i laureati a lavorare in team distribuiti.

  • Presentazione scritta dei risultati del proprio lavoro. Per presentare i propri progetti accademici, gli studenti degli anni superiori possono scrivere articoli su Habr, articoli scientifici e anche semplici report. Ci sono molte opportunità per questo — già dal secondo anno in alcune università iniziano i lavori di corso. Inoltre, si può usare il saggio come forma di valutazione — solitamente si avvicina di più all'articolo di cronaca. Questo approccio è già implementato presso l'HSE.

    Se un'azienda adotta un approccio flessibile nello sviluppo, i risultati del proprio lavoro devono essere presentati in porzioni più piccole, ma più frequentemente. È importante quindi saper comunicare in modo conciso il risultato del lavoro di un singolo specialista o di un intero team. Oggi molte aziende svolgono anche “review” — annuali o semestrali. I dipendenti discutono i risultati e le prospettive del lavoro. Una review di successo è il principale motivo per la crescita professionale e i bonus, ad esempio, in Microsoft, Acronis o Yandex. Sì, puoi programmare bene, ma “stando nell'angolo”, anche il miglior specialista perderà sempre contro chi sa presentare bene il proprio successo.

  • Scrittura accademica. È importante sottolineare la scrittura accademica. È utile per gli studenti conoscerne le regole di redazione dei testi scientifici, l'uso degli argomenti, la ricerca di informazioni in diverse fonti e la citazione di queste fonti. È consigliabile farlo in inglese, poiché ci sono molti più buoni testi nella comunità accademica internazionale, e per diverse discipline esistono già modelli consolidati per la presentazione dei risultati scientifici. Certamente, le competenze di scrittura accademica sono necessarie anche per la preparazione di pubblicazioni in lingua russa, ma ci sono molti meno esempi di articoli moderni di qualità in inglese. Queste competenze possono essere acquisite attraverso un corso pertinente, che ora fa parte di molti programmi educativi.
  • Conduzione di meeting. La maggior parte degli studenti non sa come prepararsi per le riunioni, redigere verbali e gestire i dati. Tuttavia, se sviluppiamo questa abilità durante gli studi, ad esempio partecipando a progetti di gruppo, possiamo evitare una perdita di tempo inutile sul posto di lavoro. Per questo è necessario un controllo sul lavoro di progetto degli studenti, per insegnare loro a condurre incontri in modo efficace. Nella pratica, questo costa a ciascuna azienda una fortuna: se diverse persone con stipendi elevati trascorrono un’ora in riunione, è fondamentale ottenere un ritorno adeguato.
  • Presentazione pubblica. Molti studenti si trovano a dover affrontare la necessità di presentarsi pubblicamente solo al momento della discussione della tesi. E non tutti sono pronti per questo. Ho visto molti studenti che:
    • stanno con le spalle al pubblico,
    • ondeggiano, tentando di guidare la commissione in uno stato di trance,
    • rompono penne, matite e punteggiatori,
    • girano in tondo,
    • guardano a terra.

    È normale che una persona si senta così la prima volta che presenta. Ma è importante iniziare a lavorare su questo stress prima, con la discussione dei progetti in un ambiente amichevole, tra compagni di corso.

    Inoltre, è prassi standard nelle aziende dare l'opportunità ai dipendenti di proporre idee, ottenere finanziamenti, una posizione o un progetto dedicato. Ma, riflettendoci, è come la difesa di una tesi, solo a un livello più elevato. Perché non allenare tali utili competenze di carriera durante gli studi?

Cosa mi sono perso?

Uno dei motivi per scrivere questo post è stato un articolo, pubblicato sul sito di TyumGU. L'autore dell'articolo si concentra solo sui difetti degli studenti russi, notati dai docenti stranieri. La mia esperienza di insegnamento in diverse università dimostra che l'istruzione scolastica e superiore russa fornisce una buona base. Gli studenti russi sono ben preparati in matematica e algoritmi, ed è più facile stabilire una comunicazione professionale con loro.

Nel caso degli studenti internazionali, le aspettative degli insegnanti russi possono talvolta risultare eccessive. Ad esempio, a livello di preparazione di base in matematica, gli studenti indiani che ho incontrato sembrano simili a quelli russi. Tuttavia, spesso mancano delle conoscenze specialistiche al termine della laurea triennale. Gli studenti europei di buon livello tendono ad avere una preparazione matematica scolastica meno forte.

Se studi o lavori in un'università, puoi già iniziare a lavorare sulle tue competenze comunicative (le tue o quelle degli studenti), espandere la base fondamentale e praticare la programmazione. Il sistema educativo russo offre tutte le opportunità necessarie — è solo necessario utilizzarle correttamente.

Sarei felice se nei commenti a questo post condivideste i vostri link su corsi e metodi che aiutano a riequilibrare l'istruzione, così come altri modi per sviluppare le competenze trasversali durante gli studi universitari.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster