Ni: la programmazione e' solo la parte meno importante del lavoro.
La parte piu' importante e' la progettazione del software.
Attenzione: per progettare il software, bisogna anche saper programmare.
Ma, non basta.
Bisogna:
- conoscere come modellare un database
- come fare della programmazione consorrente (piu' thread sullo stesso computer)
- come realizzare applicazioni ditribuite (usare computer diverso)
- come realizzare applicazioni fault tolerant (non si devono schiantare)
- come generare il log per poter analizzare il comportamento di un'applicazione
- come usare delle librerie di terze parti: non e' solo questione di libreria, ma di specifiche tecniche che la libreria e' preposta a implementare (se lavori in Java, tutto quello che e' Java EE, o il framework .NET se lavori in C#)
- conoscere i protocolli di comunicazione, come minimo il TCP/IP e i protocolli correllati (HTTP, FTP, SMTP, POP3, ...)
- saper integrare librerie scritte in linguaggi diversi (classico Java o Python o C# + C)
- saper realizzare i test case
- saper scrivere la documentazione (la documentazione SERVE!!!!)
Ma questo SOLO per iniziare, l'elenco.
Per fare COSE SEMPLICI ma a livello professionale, e' parecchio piu' lungo.
Anche SOLO per fare applicazione Web (SOLO lato client), ti serve conoscere
- HTML (4 e 5) + CSS
- Javascript (varie versioni)
- XML e JSON
- XSLT
- come realizzare siti responsivi
- come realizzare siti che possono essere distribuiti su piu' nodi di un cluster
- il protocollo HTTP
- WebDav
- come si realizza un interfaccia utente
- concetti di interazione uomo/macchina
- piu' tutte le idiosincrasie dei vari browser Internet sulle varie piattaforme (Android, iOS, Windows, Linux (varianti varie), OSX e browser, Safari, Firefox, Edge, Opera, Delphin, Brave, Vivaldi, Chrome, ed n-mila altri che devono essere supportati)
Ed anche in questo caso, SOLO PER INIZIARE, perche' poi c'e' tutto il resto!
Per fare cose complicate, come MINIMO ti serve un bel po' di statistica, poi tutto il resto!
In pratica, servono ANNI DI STUDIO.
Al contrario di quanto si pensi, la parte piu' importante NON E' la pratica, ma LE CONOSCENZE da metter in pratica.
La pratica ti serve per acquisire l'esperienza che ti permette di fare la scelta tecnica a colpo sicuro perche' HAI GIA" FATTO PRATICA.
La parte piu' complicata della teoria, infatti, e per la quale serve la pratica, e' capire quali sono i limiti della teoria: NON E' possibile saperlo solo in teoria (il gioco di parole ), ma bisogna sbatterci la testa.
Ma non solo, con una SOLIDA base teorica, puoi fare scelte tecniche che il programmatore di basso profilo (ad esempio uno che esce con le sole superiori) non saprebbe mai fare.
Non solo, ma puoi trovare soluzioni piu' intelligenti facendo un mix di tecnologie diverse
Per i lingaggi, e' facile:
Java, C#, C++, C, Python, R, Javascript, Swift, Objective C, Erlang, un po' di Haskell, PHP, qualcosa di Perl, ... ogni tanto Delphi.
Ma anche del sano Assembler