Un programmatore è qualcuno che conosce il linguaggio di programmazione utilizzato in un progetto. Crea codice. Sempre più codice. Questo è più o meno il livello a cui si arriva in una scuola mediocre. Puoi scrivere codice, che per lo più funziona, la maggior parte delle volte.
Un ingegnere del software è qualcuno che può eseguire il processo completo di creazione e supporto del software in un processo moderno e ben strutturato. Questa persona può formulare e capire i requisiti, creare un progetto, rivedere i progetti creati da altri. Può scrivere codice, può rivedere il codice. Può creare casi di test per un sistema di test automatizzato. Può correggere i bug. Possono rispondere ai problemi che accadono sul campo una volta che un prodotto è stato rilasciato. Possono capire e gestire il processo di creazione della prossima versione di un pezzo di software.
Il livello di abilità e conoscenza che serve per essere un buon ingegnere del software è circa 3 volte quello della programmazione.
La programmazione è un sottoinsieme dell'ingegneria del software. Se volete essere un buon ingegnere del software, la programmazione è l'abilità più basilare e più importante. Si può insegnare a programmare da soli. Leggete qualche libro, scrivete un po' di codice. In genere ci vuole un po' di esperienza lavorativa per imparare l'ingegneria del software.
Quando un'azienda high tech inizia ad avere difficoltà legate al business, è probabilmente perché non ha capito la distinzione tra programmazione e ingegneria del software.
Un ingegnere non inizia a costruire qualcosa finché non si è convinto che la cosa può essere costruita, e che funzionerà. È come costruire un ponte. Non si versa il calcestruzzo finché i calcoli non sono completi, siamo sicuri che funzionerà.
I programmatori tendono ad iniziare subito a codificare. A volte questo funziona.