UNbhinav Upadhyay è uno sviluppatore di software indiano, collaboratore del progetto NetBSD e lavora con l’entusiasmante campo dell’apprendimento automatico (ML). Recentemente ho fatto una rapida sessione di domande e risposte con Abhinav sul suo viaggio che cambia la vita con NetBSD, su come iniziare con la comunità ML e FLOSS e il suo flusso di lavoro quotidiano.
Chi sei e cosa fai?
Sono Abhinav Upadhyay, un altro essere umano con sede a Hyderabad, in India. Trascorro la maggior parte delle mie ore di veglia leggendo / scrivendo codice, o qualcosa del genere nelle vicinanze, quindi immagino di qualificarmi come sviluppatore di software (anche se ho una forte sindrome da impostore quando dico questo). Ho una laurea in informatica e lavoro professionalmente come programmatore da circa un decennio. Sono un forte sostenitore e sostenitore del software open source e sono stato coinvolto nel progetto NetBSD per diversi anni come sviluppatore. Attualmente faccio parte di una start-up in fase iniziale, lavorando come ingegnere senior.
Come sei entrato nello sviluppo del software per la prima volta?
È iniziato quando ero al 9 ° grado a scuola. Mia sorella stava frequentando la laurea in Informatica a quel tempo. In quel periodo abbiamo anche avuto il nostro primo PC a casa nostra. Ho iniziato leggendo alcuni dei libri di mia sorella e da lì ho iniziato a programmare. Le prime cose che ho sperimentato sono state HTML, JavaScript e poi Visual Basic. Il fatto che potessi vedere i risultati del mio programma visivamente mi ha intrigato, eccitato e mi ha fatto appassionare per tutta la vita. Credo davvero che una volta che sarai eccitato da un’idea o da un concetto, metterai tutta la tua energia in quello ed è quello che è successo con me. Da allora sono passato a cose più serie nel mio viaggio, ma questo è stato il punto di partenza.
Perché hai scelto di lavorare con il modello open source e NetBSD?
Ho iniziato a utilizzare software open source come Linux, Firefox, GCC ecc. Dai miei giorni di laurea. Non sapevo molto dell’open source ma ho iniziato a leggerli e ho capito come si sviluppano. La cosa più sorprendente per me era che tutto il codice era disponibile in open e che potevo cambiarlo. Il fatto che potessi contribuire a un cambiamento in questi progetti che stavo usando e che il mio codice fosse potenzialmente utilizzato da milioni di utenti è stato molto eccitante. Questo è stato il più grande fattore motivante per me per far parte della comunità open source. A parte questo, c’era un effetto collaterale di un’immensa esperienza di apprendimento essendo in compagnia di alcuni degli hacker più intelligenti del mondo.
I miei primi passi sono stati nelle comunità Ubuntu e GNOME. Ho iniziato correggendo bug e contribuendo con alcune piccole funzionalità in Ubuntu e nei progetti maschiaccio GNOME. Il mio coinvolgimento con il progetto NetBSD è iniziato nel 2011 come studente sviluppatore nell’ambito del programma Google Summer of Code. Sono stato mentore di Joerg Sonnenberger sulla riscrittura dell’utility apropos (1) per implementare la ricerca full text delle pagine man. Ho continuato a fornire patch a NetBSD per molto tempo dopo la fine dell’estate del codice, il che alla fine li ha portati a darmi accesso al progetto. La mia associazione con il progetto NetBSD e le persone ad esso associate è stata un’esperienza molto molto fruttuosa, ci sono alcune persone molto eccezionali e gentili da cui ho ricevuto una guida e un mentore. Questo mi ha anche dato l’opportunità di viaggiare a conferenze, in posti come Tokyo, Parigi e Belgrado per presentare il mio lavoro e socializzare con altri sviluppatori del mondo BSD. Questa è stata un’esperienza di una vita.
Potete per favore condividere fatti interessanti e meno conosciuti sul progetto NetBSD?
Ci sono molti fatti interessanti su NetBSD che sono poco conosciuti al di fuori della comunità. Ne citerò alcuni:
All’inizio di quest’anno la NASA ha fatto atterrare con successo il rover su Marte e c’era molta eccitazione per il fatto che fosse eseguito su Linux. Diversi anni prima, la NASA ha utilizzato il sistema operativo NetBSD per misurare l’ambiente di microgravità nella Stazione Spaziale Internazionale e per studiare l’uso del TCP nelle reti satellitari.
NetBSD ha anche fatto parte di un record mondiale. La rete dell’università svedese (SUNET) ha utilizzato NetBSD per registrare il record di velocità terrestre Internet2 più veloce. Sono riusciti a trasferire circa 840 GB di dati in meno di 30 minuti, utilizzando un singolo flusso TCP IPv4 tra un host della Luleå University of Technology e un host a San Jose, CA, USA. La velocità raggiunta è stata di 69,073 Petabit metri / secondo.
NetBSD è ben noto per la sua portabilità e il codice modulare che consente un facile porting su nuove piattaforme hardware. Esistono diverse architetture hardware che sono state a lungo ritenute non supportate dalla maggior parte dei sistemi operativi, come la famiglia VAX, Amiga, Sparc e Sun e così via. NetBSD funziona ancora su di loro fino alla data. È interessante notare che puoi ancora compilare software per VAX con GCC su NetBSD.
Un sistema di compilazione portatile: NetBSD ha uno strumento di compilazione davvero flessibile e sofisticato. Puoi eseguire la compilazione incrociata di NetBSD per un hardware diverso sulla tua macchina e non solo, lo compili anche su un sistema operativo diverso. Ad esempio, è possibile eseguire la compilazione incrociata di NetBSD per aarch64 su un laptop amd64 con Linux o Mac OSX. Questo è molto potente.
Che aspetto ha un “giorno nella vita” quando lavori a un progetto di sviluppo software?
Una giornata tipo per me include spostamenti in ufficio, riunioni, discussioni e programmazione. Da quando la pandemia è iniziata lo scorso anno, abbiamo lavorato a distanza e mi sono goduto il cambiamento, mi lascia molto tempo e flessibilità per portare a termine il lavoro.
Una volta che la giornata finisce, di solito mi prendo una pausa e poi mi dedico ad alcuni dei miei interessi personali. Questi possono includere l’hacking su un progetto secondario, o forse qualche lavoro relativo a NetBSD (anche se non l’ho fatto per un po ‘). A volte passo anche la sera a studiare, ad esempio matematica, apprendimento automatico o compilatori.
Descrivi la configurazione hardware e software del tuo computer. Che hardware usi? E quale software / distribuzione Linux o Unix usi quotidianamente?
Nonostante faccia parte del gruppo NetBSD in cui le persone sono orgogliose di avere uno zoo dell’hardware, non sono troppo stravagante in quell’area. Mi piace avere una macchina potente principale in cui posso svolgere la maggior parte del mio lavoro quotidiano e forse una macchina di backup in caso di problemi. Al momento ho tre laptop: il mio laptop principale è un Intel core i9 octa core, con 64 GB di RAM, eseguo Ubtuntu 20.04 esclusivamente su di esso. Il mio vecchio laptop secondario è un Intel Core i7 con 16 GB di RAM, ho il dual boot con Ubuntu 20.04 insieme a NetBSD 8. Il mio laptop più vecchio è un Intel Core i3 con 4 GB di RAM. Eseguo NetBSD 8 su di esso.
Di quali app / software / strumenti open source non puoi vivere senza?
Ce ne sono troppi: tmux, fish, vim, curl, clang, gdb e altri.
Qual è il miglior consiglio che hai mai ricevuto?
Il miglior consiglio che abbia mai ricevuto è stato all’inizio del college ed era di padroneggiare il linguaggio di programmazione C e leggere il libro “Programmazione avanzata nell’ambiente Unix” di Richard Stevens. Ha cambiato la mia vita, essenzialmente mi ha esposto al mondo Unix – e mi ha dato la capacità di leggere e comprendere molto codice open source là fuori. Se quel consiglio non fosse stato per me, avrei potuto seguire un percorso completamente diverso da quello in cui sono oggi.
Che consiglio daresti a chi inizia da zero con il mondo dello sviluppo di software open source?
Esistono vari modi per iniziare a contribuire a progetti open source. Diventa molto facile se sei un utente pesante del progetto, perché ciò significa che hai effettivamente la motivazione per sistemare le cose e aggiungere funzionalità. La prossima cosa è diventare attivi all’interno della comunità, o nascondendosi sui canali IRC del progetto o iscrivendosi alle loro mailing list. Questo ti aiuta a familiarizzare con il processo di sviluppo e ti consente di conoscere i problemi che sono importanti per la comunità da affrontare e risolvere. Quindi puoi chiedere aiuto con correzioni di bug, miglioramenti della documentazione o test. Di solito ci sono persone simpatiche in ogni comunità generose con il loro tempo che possono guidarti nello svolgere questi compiti e nel processo diventi un contributore attivo. Presentarsi è la chiave.
Quali sono i prerequisiti per iniziare a imparare il machine learning? Quali strumenti open source consigli a qualcuno che non conosce il machine learning?
L’apprendimento automatico è un campo piuttosto eccitante, ma richiede anche un gran numero di prerequisiti per iniziare, il che può sembrare scoraggiante. Sono per lo più un autodidatta in questo settore, il mio punto di partenza è stato il primo MOOC di Andrew Ng sull’apprendimento automatico nel 2011.
Hai bisogno di conoscenza di algebra lineare, calcolo e probabilità. Non abbiamo bisogno di corsi avanzati in nessuna di queste aree, la maggior parte di ciò che abbiamo imparato a scuola o al primo anno di college è sufficiente. Se questo sembra scoraggiante o noioso, consiglio di adottare un approccio dall’alto verso il basso e di iniziare un corso di ML e aggiornare i requisiti di matematica mentre procedi nel corso.
L’altra parte dell’apprendimento del machine learning è la conoscenza della programmazione. È necessario essere in grado di codificare i modelli o prendere un’implementazione del modello esistente e utilizzarla. Un altro aspetto riguarda la raccolta, la pulizia e la preparazione di set di dati per l’addestramento dei modelli, il che richiede familiarità con gli strumenti e le librerie utilizzati per svolgere queste attività. Python è il linguaggio di scelta per questo. Oltre a conoscere Python il linguaggio, è anche utile avere un controllo sulle librerie di programmazione scientifica comuni in Python, come numpy, scipy, pandas, scikit-learn, matplotlib ecc. Il lavoro di machine learning più all’avanguardia può includere librerie di deep learning così come TensorFlow e PyTorch.
Questa è una gamma piuttosto vasta di cose da imparare e può sembrare scoraggiante, ma non c’è davvero una scorciatoia per evitare la curva di apprendimento. Raccogliere un problema da risolvere, curare il set di dati per risolverlo e quindi costruire un modello ti darà un’esposizione a tutto tondo di tutto ciò che è necessario per eseguire un progetto ML.
Non posso resistere alla citazione di uno degli episodi di Bojack Horseman, dove Bojack ha iniziato a correre come un modo per mettersi in forma per un ruolo nel suo film in uscita e solo dopo pochi passi rimane senza fiato, cade sul marciapiede dicendo “Lo odio, correre è terribile, tutto è terribile” e un corridore esperto arriva lungo la strada e dice “Diventa più facile, ogni giorno diventa un po ‘più facile ma devi farlo tutti i giorni e questa è la parte difficile”. È la stessa cosa con l’apprendimento di qualsiasi cosa, dobbiamo dedicare ore.
Durante la codifica:
Ascolti musica di sottofondo? Lo voglio. Questo è davvero una parte del fascino della programmazione: quando sei nella zona, scrivi il codice, la musica ti mette in trance. A volte non vedo l’ora che arrivi il tempo di programmazione solo per sentirmi così in alto.
Il momento migliore per scrivere codice per te? Di giorno o di notte? Mi diverto di più durante la programmazione durante la notte. Sono qualcuno che si distrae facilmente anche dal minimo rumore o da qualsiasi cosa accada intorno a me. Durante la notte, quando le cose sono tranquille, trovo molto più facile concentrarmi.
Te o caffè? Una tazza di tè forte al mattino
IDE / editor di testo? vim
Suggerimento shell preferito? Usare fish come shell predefinita e tmux è stato fantastico per me. Fish ha un’ottima integrazione di completamento automatico con la maggior parte degli strumenti e tmux mi permette di fare tutto all’interno del terminale senza mai toccare il mouse.
Cosa fai quando non stai hackerando e scrivendo codice?
Mi piace giocare a ping pong. Mi piace anche meditare. Leggendo libri (ma sono facilmente distratto quindi devo essere sinceramente interessato all’argomento), alcuni degli argomenti di interesse per me includono astrofisica, finanza / investimenti, storia, matematica. A volte, se sono di umore, mi piace cucinare un bel pranzo.
Nota dell’editore: Puoi seguire Abhinav su Twitter per le avventure quotidiane del Machine Learning e degli sviluppatori di software. Questa intervista è stata condotta il 27 marzo 2021.
Ti e piaciuto questo articolo?
Supporta il mio lavoro, facendo una donazione!
Questo sito utilizza i cookie per migliorare servizi ed esperienza dei lettori. Se decidi di continuare la navigazione senza blocchi premi su Accetto, oppure continua tranquillamente la navigazione, nessun dato sulla tua navigazione verrà raccolto.
Quando visiti un sito Web, esso può archiviare o recuperare informazioni sul tuo browser, principalmente sotto forma di cookies. Controlla qui i tuoi servizi di cookie personali.