Carey Aydelotte ha l'idea di base giusta, ma voglio aggiungere i miei due centesimi. Ok, forse più come dieci. Non importa. Non sono "in tutta la faccenda della brevità" oggi 🙂
Front vs. back end sono un "asse" della programmazione, dove le mie definizioni di questi termini si allineano abbastanza con le sue. "Ingegnere del software" è semplicemente uno dei tanti titoli di lavoro che possono o non possono essere lungo un altro asse, rispetto ad altri titoli come "sviluppatore di software", "programmatore", "codificatore", e così via.
Il "possono o non possono" è perché c'è pochissima definizione delle differenze tra i titoli, tranne in alcuni luoghi che richiedono certificazioni per poter usare la parola "ingegnere". Così, alcune aziende chiamano tutti i loro produttori di codice con un solo titolo, mentre alcune hanno una progressione da quello che considerano un titolo più "basso" a titoli più "esaltati", alcune lasciano che le persone scelgano i propri titoli (ma forse hanno alcuni prefissi come "Junior" e "Senior"), ecc.
Così, si possono spesso vedere questi assi (e altri, come la lingua, il settore, ecc. Per esempio, si possono vedere persone con titoli come "Back-End Financial Rails Developer", "Front-End Elm Cryptography Software Engineer", "Full-Stack JavaScript General Random Keyboard Pounder", ecc. ecc. ecc.
Tutto ciò detto, di solito ho sentito "software engineer" riferirsi a persone che sono ben avanti nella loro carriera, bilanciando compromessi a lungo termine, avendo molto più dovere sulla qualità del software, e il business stesso. Oltre a questo, il loro ruolo potrebbe essere principalmente o esclusivamente da una parte o dall'altra, o "full stack" (entrambe le estremità), o fluttuante.