Quali sono le differenze chiave tra ingegneri del software e programmatori? [chiuso]


103

Quali sono le differenze chiave tra ingegneri del software e programmatori?


1
Joel ha già posto questa domanda Questa non è una domanda facile a cui rispondere e non sono sicuro che ci sia una risposta chiara. Ma so che Joel ha già posto questa domanda.
Denaem,

Risposte:


80

Quando assumiamo, cerchiamo una distinzione tra qualcuno che sarà in grado di aiutarci a progettare il nostro sistema, definire i processi, creare specifiche tecniche, implementare refactoring avanzato, ecc. E qualcuno che ci aiuterà a completare le attività di programmazione da una lista di controllo . Credo che potresti chiamare il primo un ingegnere del software e il secondo un programmatore .


10
Potete chiarire, assumete entrambi (per lavori diversi) o solo gli ingegneri del software?
Jaap,

2
Si potrebbe chiamare l'ex un Software Engineer, ma non vorrei. Come sfugge a Brendan, questo è in genere il lavoro di un architetto del software.
JᴀʏMᴇᴇ,

131

Dipende davvero dall'azienda, poiché non credo che esista un quadro giuridico per imporre una denominazione o un'altra, o almeno non di cui io sia a conoscenza e questo potrebbe variare da paese a paese (ad esempio, l'uso del termine "ingegnere" è in realtà abbastanza regolamentato in Francia, ma ci sono varianti che sono consentite per i casi "abusivi").

Detto questo, la tendenza generale va così:

  • Una posizione di programmatore è di solito quella di un professionista assunto per produrre il codice di un programma per computer . Implica che sai come scrivere il codice , capire un algoritmo e seguire le specifiche . Tuttavia, di solito si ferma lì in termini di responsabilità.

  • Una posizione dello sviluppatore è generalmente considerata un super-tipo della posizione del programmatore . Comprende le stesse responsabilità, oltre alla capacità di progettare e progettare un componente software e di scrivere la documentazione tecnica per esso (comprese le specifiche). Sei in grado - almeno tecnicamente - di guidare altri (quindi programmatori), ma non necessariamente una squadra (arriva il fuzz ...)

  • Una posizione di ingegnere di solito implica che sei uno sviluppatore che ha un tipo specifico di laurea , una certa conoscenza dell'ingegneria ed è in grado di progettare un sistema (come in: una combinazione di componenti / moduli software che insieme formano un'intera entità software) . Fondamentalmente, vedi un quadro più ampio e sei in grado di progettarlo, spiegarlo e separarlo in moduli più piccoli .

Tuttavia, tutto ciò è discutibile e, come ho già detto, non ci sono requisiti legali di cui sono a conoscenza nei paesi degli Stati Uniti / Regno Unito . Detto questo, in Francia puoi definirti un "ingegnere" solo se vieni da una scuola di ingegneria (riconosciuta dalla Commission des Titres d'Ingenieurs o qualcosa del genere). Non puoi dire di avere una "Laurea in Ingegneria", ma puoi dire che hai una "Laurea in Ingegneria" se hai studiato una disciplina che rientra nel settore dell'ingegneria e delle tecnologie.

È possibile che alcuni paesi abbiano una distinzione simile, proprio non lo so davvero.

Tornando al titolo di ingegnere del software ... Una volta, uno dei miei insegnanti ha detto alla nostra classe - e giustamente - che non esiste, ad oggi, la cosiddetta "ingegneria del software" . Perché progettare qualcosa (che si tratti di un edificio, un veicolo, un componente hardware ...) significa che sei in grado di immaginarne il design e tutte le fasi della sua produzione e di prevedere con precisione le risorse di cui avrai bisogno, e quindi il costo di produzione.

Questo è vero per la maggior parte delle "vere" discipline ingegneristiche. Ci sono fluttuazioni, ovviamente (i prezzi dei materiali varieranno nel tempo, per esempio), ma ci sono modelli teorici molto limitati (per la progettazione e la pianificazione) e modelli empirici (per mantenere praticamente uno qualsiasi dei primi entro limiti accessibili) che ti consentono di prevedere la data di conclusione di un progetto e il suo utilizzo delle risorse.

Il problema principale con il software è che non è ancora presente. Vogliamo puntare sull'ingegneria del software, ma in realtà non ci siamo ancora. Perché abbiamo un ambiente molto fluido e dinamico, vincoli molto variabili per i progetti e ancora una mancanza di maturità in retrospettiva nei nostri processi. Certo, potremmo dire di migliorarci (altamente discutibile con i dati concreti, però), ma ci siamo riusciti solo dagli anni '60 (i progetti precedenti erano in realtà più vicini ai computer solo hardware, quindi più vicini alla vera ingegneria, ironicamente ). Considerando che costruiamo veicoli a motore da più di un secolo, veicoli in generale per alcuni millenni, e costruiamo per ancora più millenni (e siamo stati abbastanza dannatamente bravi in ​​realtà in qualche parte del mondo, facendoti sentire come noi '

Non riusciamo a prevedere sistematicamente le scadenze in modo accurato , non riusciamo a prevedere sistematicamente i costi in modo accurato , non riusciamo a identificare e mitigare sistematicamente i rischi intrinseci ed esterni in modo efficiente e deterministico . Il meglio che riusciamo a fare è produrre stime abbastanza buone e adattarci a qualche buffer, facendo del nostro meglio per ottimizzare i processi per ridurre i cicli e le spese generali.

Ma vedi, forse questo è l'ingegneria. Ed è quello che, quando qualcuno parla di un "ingegnere del software", dovrebbe pensare e mirare.

Ciò sembra difficilmente intercambiabile con il semplice atto di routine di programmazione o l'atto più avanzato di sviluppo di applicazioni.

Tuttavia, tutto è una questione di tendenze. Ultimamente è abbastanza comune avere un team di sviluppo orizzontale in cui tutti i membri del team sono sviluppatori di software senior (sì, le capitali, perché ciò ci fa sentire speciali, non è vero?), Senza una vera distinzione di età (abbastanza giusto, nel mio opinione) e non tanta distinzione di abilità (uh-oh ...) e responsabilità (ora che non può essere buona, a parte puramente per il buzz di PR).

A volte è anche solo una forza dell'abitudine e specifica della cultura e del gergo di un'industria. Altre posizioni per la produzione di software embedded utilizzano titoli per ingegneri del software. Soprattutto perché probabilmente implica che dovrai sempre avere a che fare con una certa misura anche con l'hardware in questo campo, quindi ovviamente affronti altri aspetti della produzione e dell'intero "sistema" che produci. Non solo i pezzi che vanno fuori di testa al suo interno. D'altra parte, non si vede davvero il termine ingegnere utilizzato nelle posizioni di produzione di software finanziario. O perché è un'evoluzione mimetica di questo settore da parte di uno dei suoi predecessori (per esempio, l'ingegneria integrata trova le sue radici nell'ingegneria automobilistica, per esempio), o perché vogliono solo dare più o meno credito / peso a una posizione.

E per essere sicuri di perdere tutti nella nebbia, troverai altri titoli che mescolano entrambi (come "Software Development Engineer" o "Software Engineer in Test"!), E poi altri che enfatizzano ponti ancora più folli con altri domini ( pensare a "Software Architect" e come "architettura software" potrebbe essere un furto spudorato del vocabolario). E continuali a venire: Ingegnere di rilascio, Responsabile dello sviluppo del cambiamento, Ingegnere di costruzione (anche quello si fà fuori di testa). E a volte semplicemente "ingegnere".

Spero che abbia aiutato, anche se non è davvero una risposta.

Oh, e questo significa che la tua nuova compagnia o sta cercando di attirarti con un nuovo titolo o che a loro non importa davvero dei titoli, o che avrai davvero una posizione di livello superiore. L'unico modo per sapere è leggere le tue specifiche di lavoro, parlare con loro e alla fine provare e giudicare da solo. Spero sia l'ultima opzione e che tu ne sia felice (e potenzialmente incasserai di più). ;)


12
Il libro "Il programmatore pragmatico" afferma anche che il software non è come l'ingegneria. Mentre è possibile pianificare una casa o un grattacielo, come un'analogia per l'ingegneria del software difficilmente può essere utilizzata. Dichiarano: il software è più simile al giardinaggio. Pianifica il giardino, pianta le piante. Quindi vedi cosa cresce, rimuovi le erbacce e pianta nuove piante.
Falcon,

6
"Una volta il mio insegnante ha detto alla nostra classe che ad oggi non esiste una cosa come la cosiddetta" ingegneria del software ". Perché ingegnerizzare qualcosa significa che sei in grado di immaginarne il design e tutte le fasi della sua produzione e di prevedere con precisione le risorse di cui avrai bisogno ". Probabilmente non era vero al momento in cui è stato scritto. Come per l'architettura, non possiamo prevedere i costi senza conoscere i requisiti (quanto costa un grattacielo? Non ti dirò quanto deve essere alto prima di iniziare a costruire ...). Ma siamo in grado di prevedere i costi in seguito, dato un gruppo di sviluppo software maturo.
Saluti

1
@MSalters: Certo, puoi capovolgerlo: come l'architettura, non possiamo prevedere i costi senza requisiti. Ma a differenza dell'architettura , anche con requisiti ben definiti (anche se i nostri sono spesso più fluidi perché sono più difficili da prevedere o abbiamo la tendenza a consentire loro di cambiare), non possiamo prevedere il costo. Puoi farlo in ingegneria normale con un livello di precisione molto accurato, E attualmente siamo più in grado di identificare i costi per circostanze straordinarie rispetto a SE. Facciamo solo ipotesi (abbastanza approssimative). Stiamo migliorando nel realizzarli, ma sono ancora praticamente delle ipotesi.
haylem,

3
@haylem: questa è la norma nello sviluppo del software. Ma se hai lavorato in un'azienda di livello 4/5 CMM, noterai che possono prevedere i costi e spesso attribuiscono loro livelli di affidabilità del 95%. Capiscono abbastanza bene la loro base di software e hanno requisiti abbastanza buoni che i blocchi stradali sono rari. E il costo dei blocchi stradali è inferiore quando hai l'esperienza per affrontarli.
Salterai il

1
@pcurry: nota che non pretendo che questa sia "la mia tassonomia". È solo abbastanza comunemente considerato come questo da reclutatori e buste paga aziendali, ed è anche il modo in cui viene spesso considerato nei corsi CS di informatica. Tendono a spararsi l'un l'altro. Quindi immagino di aver elencato la visione adottata dai (cosiddetti) ingegneri del software più che dai programmatori (autodescritti), ovviamente. Non importa come ti chiami, è più importante ciò che la gente ti considererà. E importa solo se ti preoccupi di quel genere di cose. Onestamente, personalmente non mi interessa essere l'uno o l'altro, non mi cambia.
Hayylem,

81

Gli ingegneri del software sono persone che lavorano in aziende che chiamano le persone che scrivono software per loro "ingegneri del software".

I programmatori sono persone che lavorano in aziende che chiamano le persone che scrivono software per loro "programmatori".

Ci sono anche sviluppatori o sviluppatori di software . Sono persone che lavorano in aziende che chiamano le persone che scrivono software per loro rispettivamente "sviluppatori" o "sviluppatori software".


26
Dovrei notare che questa risposta non era davvero pensata per essere divertente.
Jer

15

Quindi c'è il "Software Engineer", il "Programmer", e anche lo "Developer", "Coder" e non puoi mai dimenticare l '"Esperto SOA"

Questi sono tutti termini di marketing per le persone che non possono dire qualcosa di significativo nel loro CV, come il loro ruolo effettivo (non solo il titolo di lavoro) nelle posizioni precedenti.

Sugli annunci di lavoro, la differenza sta nella persona delle risorse umane.

In conclusione: ogni persona ha il suo punto di vista su "ciò che rende un buon dipendente che lavora con il codice", e ad alcuni piace associare tali e tali competenze a tali e tali titoli.

Cosa devi fare? Gli annunci di lavoro dovrebbero essere descrittivi delle competenze richieste e i CV dovrebbero spiegare i dettagli dell'esperienza del candidato.


10

Nessuna differenza. Sono la stessa cosa. Le aziende, tuttavia, possono avere descrizioni di posti di lavoro formali usando i termini, e quindi potrebbe esserci un significato specifico per il termine.


8

La programmazione riguarda il codice. L'ingegneria del software riguarda il prodotto finale.


3

Dipende molto da come l'azienda definisce le posizioni. Può darsi che come ingegnere del software avrai maggiori opportunità di decisione sul design, mentre come sviluppatore ti darebbero diagrammi UML e tu scriveresti il ​​programma.

Ma non esiste una definizione di set reale in modo che in base al titolo le persone sapranno cosa fai o quanto esperienza hai.

Quando ero un architetto / sviluppatore, il mio titolo era un informatico, ma direi semplicemente alle persone che ero un programmatore, poiché i primi due non sono facilmente definibili, ma la maggior parte delle persone sa cosa fa un programmatore.

Se un titolo è importante per te, accetta quello nuovo, poiché l'ingegnere sembra più alto di uno sviluppatore.


3

Non credo ci siano "differenze ufficiali", per la mia esperienza che potrebbe significare:

  • Alcune aziende usano ingegneri del software e sviluppatori di software per riferirsi alla stessa cosa. Usano solo il loro termine preferito.
  • Altri usano entrambi i termini per diverse posizioni interne, ma i ruoli variano da compagnia a compagnia! In alcuni potrebbe essere solo una differenza nella funzione (un soft. Ingegnere lavorerà sulla manutenzione e sul miglioramento dei sistemi mentre uno sviluppatore lavorerà sul prodotto dell'azienda), o potrebbe essere gerarchico (l'ingegnere è al di sopra dello sviluppatore), o addirittura l'ingegnere dipende davvero dalle domande e risposte!

Inoltre, sono anche termini di moda che cambiano ... Prima il termine era "programmatore", quindi "ingegnere del software" e ora sembra essere "sviluppatore" ...

È meglio leggere la descrizione del lavoro o qualcuno della società specifica


3

In alcune giurisdizioni, "Ingegnere" porta con sé il requisito di essere un ingegnere professionista, che ha un P. Eng. desigazione tra le proprie credenziali. Tuttavia, in altre aree potrebbe non esserci una differenza in quanto ero un "ingegnere progettista di softwere" che lavorava nello stato di Washington alcuni anni fa.


2

Gli ingegneri del software tendono a lavorare su sistemi molto grandi che impiegano molti anni a svilupparsi, ad esempio da 5 a 16 anni. I programmatori tendono ad avere questo stereotipo di solo codifica e nient'altro. Ma dipende davvero dall'organizzazione in cui lavori e da come le risorse umane stanno commercializzando il ruolo come spiegato sopra. Sono essenzialmente la stessa cosa. Basta non essere troppo attaccato a un titolo perché è anche.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.