Lasciate che affronti prima l'ultima domanda. "Ingegnere del software" è uno di una serie di termini molto vaghi, tra cui anche programmatore, analista, sviluppatore [di software], e molti altri. In genere non ci sono definizioni rigide e veloci. Il modo in cui generalmente penso a questi termini è:
- Un "analista" può o non può scrivere codice, ma di solito è più coinvolto nell'analisi di come funziona un sistema, sia esso già automatizzato o un insieme di procedure eseguite manualmente. Se scrivono codice, è probabile che sia roba abbastanza semplice solo per incollare le cose insieme, o forse un semplice prototipo o una demo truccata.
- Un "codificatore" scrive solo codice, di solito per adattarsi alle specifiche molto precise di qualcun altro, più o meno solo traducendo.
- Un "programmatore" può essere una tacca o due al di sopra di questo, con più libertà nel decidere quali algoritmi usare.
- Uno "sviluppatore" o "sviluppatore di software" o "sviluppatore di qualche tecnologia specifica" (es, sviluppatore Java o sviluppatore Rails) di solito ha quasi tutta la libertà di decidere su algoritmi, organizzazione, ecc. Sono spesso soggetti a tali vincoli solo da cose come le guide di stile dell'azienda, o da decisioni del team leader o dell'architetto del progetto. (Comunque, uno "sviluppatore junior" è spesso più simile ad un "codificatore" o "programmatore" in questa gerarchia.)
- Un "ingegnere del software" è come uno "sviluppatore" ma con più cura e più abilità nell'assicurarsi che il codice sia mantenibile, corretto, robusto ed efficiente, e che pezzi diversi interagiscano bene (iniziando ad entrare nella zona "architetto" qui). Un SE di solito è più corretto nelle stime di quanto tempo ci vorrà per implementare un dato pezzo di funzionalità e le probabili sfide. Cioè, è molto più vicino a un "vero ingegnere" nel senso, per esempio, dell'ingegneria elettrica o meccanica, rispetto alla sciatta "codifica da cowboy" che affligge l'industria del software.
Ora, torniamo alla prima domanda. Quali sono le differenze tra uno sviluppatore di app/web/software?
- Uno sviluppatore web lavora su cose che sono sul web. Potrebbe essere back-end (logica di business), front-end (presentazione), full-stack (entrambi), o qualche combinazione non del tutto completa, ma c'è sicuramente un uso del "web" per trasportare le richieste e le risposte tra i due. Per esempio, io faccio circa il 95% di back-end, il 5% di front-end.
- Uno sviluppatore di app è un po' mal chiamato IMHO. Di solito significa sviluppatore di app mobili, come Ian Atkin e Bastien Koert implicano. Può anche occasionalmente riferirsi a uno che scrive applicazioni per il desktop, specialmente nel mondo Mac ora che hanno un App Store per il desktop.
- Uno sviluppatore di software può essere uno dei due sopra citati o sviluppare qualsiasi altro tipo di software, compresa la scrittura del sistema operativo stesso, utility, giochi, software embedded come quello che è già sui chip del vostro telefono (o auto o TV), qualsiasi cosa.