2009-02-06 16 views
12

Nella mia carriera ho incontrato due grandi tipi di teoria: teorie fisiche ed educative/teorie di gestione:Le teorie di ingegneria del software

teorie fisiche sono o corretto (in condizioni adeguate) o non corretta, come giudicato dalla mondo fisico.

Le teorie educative/gestionali hanno l'aspetto di essere come teorie fisiche, ma mancano test rigorosi. Al massimo danno nuovi modi di pensare ai problemi. Molte teorie sono utili perché una di loro potrebbe parlarti nel modo giusto.

Come studente hobbista di ingegneria del software sembrano esserci molte teorie sull'ingegneria del software (programmazione agile, progettazione basata su test, schemi, programmazione estrema). Devo considerare queste teorie come fisiche o educative/gestionali?

Oppure ho capito male l'ingegneria del software e mi sono ritrovato nella posizione di "non proprio sbagliato"?

+0

e che dire delle teorie economiche/politiche/sociologiche? ancora peggio: teorie psicologiche. questi sono così non falsificabili che creano scuole. ma in qualche modo non penso che siano 'educativi/gestionali' – Javier

+0

Ci sono un sacco di teorie in psicologia che si basano su una rigorosa sperimentazione, e quindi possono essere tranquillamente applicate a tutte le matricole delle major (il normale pool di test). Ci sono molte teorie appena infondate. Non incolpare tutti gli psicologi. –

+0

@Javier Hah vero. Le teorie dell'ingegneria del software dovrebbero, in generale, essere più pratiche e utili di quelle di economia e psicologia. Mi dispiace per lo psicologo perché il gioco (la mente umana) è così difficile e tuttavia le risposte arriveranno probabilmente un giorno quindi ne vale la pena. L'economia come attività accademica sembrerebbe essere priva di significato. –

risposta

21

L'ingegneria del software si basa in definitiva sulla psicologia, su come gli esseri umani gestiscono la complessità. Quindi i principi dell'ingegneria del software sono molto più simili alle teorie sull'istruzione e sulla gestione che sui principi fisici.

Alcuni ingegneri del software hanno una solida matematica dietro: O (n log n) gli ordinamenti sono più veloci di O (n^2), ecc. Ma soprattutto l'ingegneria del software riguarda il modo in cui gli esseri umani pensano al software. Come organizzare le cose in modo che i manutentori non impazziscano, anticipando ciò che è probabile che cambi e ciò che non lo è, prevenendo e rilevando errori umani, ecc. È una branca della psicologia o della sociologia.

+0

Post eccellente! Non potrei essere più d'accordo. – Syntax

+0

Buona descrizione, eccetto che l'ingegneria del software non fa parte della psicologia o della sociologia, sebbene un ingegnere del software di successo utilizzerebbe entrambi quelli a beneficio dei suoi progetti. –

+0

Sono d'accordo con gran parte del sentimento qui, ma direi che i concetti e le teorie relative alla complessità temporale algoritmica sono equi e quadrati nel dominio dell'informatica piuttosto che cercare di ingegnerizzare in modo efficiente sistemi software efficaci. Sono d'accordo con @DimaMalenko che non è certamente un ramo della psicologia, ma può trarne vantaggio. –

1

Sono come le ricette: sono le linee guida, il cui successo dipende:

  • In parte, sulla qualità della ricetta
  • In parte, sulla qualità degli ingredienti
  • In parte, il l'abilità (e il tempo a disposizione) dei professionisti
3

Neanche sbagliato.

Tutte le "teorie" dell'ingegneria del software sembrano essere nient'altro che consigli su cose particolari per cercare di vedere se rendono voi e il vostro team più produttivi. Anche se si potesse renderli falsificabili come teorie scientifiche, non ci sarebbe molto da dire. Questo non vuol dire che non valga la pena di conoscerli: al contrario, dovresti familiarizzare con il maggior numero possibile di loro e cercare di capire in quali tipi di team e ambiente potrebbero funzionare meglio. Ma attenzione: evita il dogma e pensa che ci siano proiettili d'argento.

+0

a destra. la domanda nasce da un cattivo uso dei termini – Javier

+0

sì, alcuni termini sono usati male, ma la domanda è ancora valida. –

+0

Capire quando è utile può essere fatto scientificamente e potrebbe essere una cosa utile da fare. –

3

Non chiamerei programmazione agile, progettazione basata su test, schemi, programmazione estrema, "teorie", metodologie o stili di lavoro. non fanno alcuna affermazione.

+1

fanno un'asserzione implicita. "seguendo questo paradigma migliorerà " –

+1

Fanno un'asserzione molto esplicita, questo metodo produce codice con meno errori in meno tempo. In teoria questo è testabile in pratica è raramente lo è. –

4

Penso che la suddivisione teorica appropriata sia quelle "più dure" (dove ci possono essere prove) e gli argomenti più delicati con risposte qualitative e poche prove se ce ne sono.

Il software per me riguarda principalmente la lingua e la comunicazione, un argomento per lo più qualitativo e soggettivo. Ogni tanto tocchiamo algoritmi e altre aree "difficili", in cui esistono prove e formalismi rigorosi. Quindi, si, entrambi per favore.

+0

Sono d'accordo con la tua divisione (+1), ma non la tua definizione di scienza assoluta. Penso che finché si basa sul metodo scientifico (dove "la verità" cambia con le prove) è una scienza assoluta. Le prove in senso matematico non esistono in una scienza assoluta. –

+0

Punto preso, modificato leggermente – krosenvold

1

Oltre alle teorie, ci sono anche strutture, modelli e regole pratiche.Idee, certo, ma basate su una base meno rigorosa, che appartengono genericamente alla tua categoria di produzione/gestione.

Computer Science ha alcune teorie fondamentali (quelle fisiche secondo la tua definizione), ma queste consistono principalmente nel legare insieme gli elementi più piccoli.

L'ingegneria del software, d'altro canto, è una disciplina relativamente nuova che implica l'utilizzo di computer e occasionalmente di informatica per la creazione di sistemi software. La maggior parte della pratica in quell'arena è interamente basata su prove sperimentali e aneddotiche non rigorose. Poiché la giuria è ancora fuori dai problemi più semplici, la maggior parte di ciò che passa per le pratiche potrebbe essere meglio descritta come pura supposizione-lavoro e preferenza irrazionale. È una di quelle discipline in cui devi davvero sapere molto per capire quanto è costruito su una casa di carte molto instabili.

Paul.

1

Essendo intangibile, la programmazione è un'attività molto difficile da relazionarsi con un altro essere umano, anche con altri programmatori. L'ingegneria del software cerca di aggiungere una struttura dove non ce ne sono, ma tale struttura non è radicata nell'inevitabilità della realtà. Quindi tutti questi approcci diventano come le religioni su come si comportano i gruppi di persone quando cercano di placare i loro dèi tecnici (o demoni).

1

Tutte queste teorie e best practice non ci hanno ancora portato al punto in cui siamo in grado di produrre sistemi software in modo affidabile e prevedibile. Il più recente di these surveys è datato 2001; Jeff's column from 2006 lamenta ancora alti tassi di fallimento.

Sarebbe interessante vedere se qualcuno sta lavorando a un sondaggio aggiornato.

L'avionica e il software che eseguono la mia auto non sembrano fallire in nulla vicino alle tariffe indicate per i software aziendali. Perché gli sviluppatori aziendali non seguono più da vicino le loro pratiche? Forse dovremmo tutti scrivere Ada .... [scherzando]

1

Per me, è la mia teoria con molti degli altri utilizzati come base. Non conosco nessuno che usi una singola teoria specifica. E questa non è una risposta da sborsare.

Così come ci sono diversi linguaggi, le teorie/pratiche/metodologie devono essere utilizzate in situazioni distinte. La struttura, le regole e le definizioni sono tutti i modi in cui le persone capiscono come devono essere compiute le cose, ma ciò che deve essere realizzato è soggettivo.

Adattare, conoscendo l'agile, l'estremo o altri metodi a discrezione del cliente, del progetto, del programmatore, del tempo e, soprattutto, di ciò che rende felici/felici. Essere una squadra e adattarsi a ciò che la tua squadra sta facendo per il bene superiore; tieni a mente di avere qualcosa che hai definito nella tua mente, o non è solo caos.

[CASSE DI SAPONE] ho iniziato la programmazione sul Atari 400 con una tastiera piatta convertito e aggiornamento 64K. Quando ho iniziato il college, era VB 1.0 che ho visto usare il mio insegnante di economia per costruire uno strumento didattico per aiutare le persone a imparare di più sull'economia usando grafici e input visivi. Questo era bello! E sapevo di poterlo fare.

Questo stesso insegnante di economia, che in seguito è diventato anche un insegnante di informatica (era bravo), ha chiesto se avrei insegnato un corso sul debugging. Ha detto: "Non ho incontrato qualcuno che capisca i concetti e abbia una naturale capacità di eseguire il debug veloce come te, ci insegni ciò che sai e come lo fai". Questa è stata una spinta nel mio ego, ovviamente, ma per insegnare, guidare e aiutare gli altri.

Ognuna di queste istanze ha soddisfatto il mio desiderio di aiutare le altre persone.Per me, voglio che un computer faccia esattamente quello che voglio, per aiutare gli altri nel mondo degli affari e della vita domestica ad aumentare la loro qualifica di vita, a saperne di più ea fare di più.

Qualcuno mi ha detto una volta: "Sei solo buono come i tuoi strumenti". Impara, pratica e cresci.

Se hai definito qualcosa, sta funzionando, ha un ordine e ti allunga e oltrepassa i confini, non hai torto.

1

Generalmente campo dell'informatica è diviso in 4 aree (bisogno di trovare un link alla fonte, SWEBOK?), Che sono distinti anche se collegati e interconnessi:

  • Computer Science
  • Software Engineering
  • Ingegneria
  • Sistemi Informativi
  • Computer

C'è una buona analisi di it gineering vs. science in "Professional Software Development" di Steve McConnel. Controlla il suo Software Engineering, Not Computer Science.

Lo sviluppo del software è più incentrato sull'ingegneria - trovare soluzioni pratiche a problemi pratici - che altro. È giusto che l'ingegneria del software si basi sull'informatica, la matematica, la teoria della complessità, la sistematica, la psicologia e altre discipline, ma non può essere equiparata a nessuno di essi, né è un gruppo di nessuno di essi.

+0

+1. L'ingegneria del software ** è ** ingegneria. Si tratta di creare cose usando qualsiasi abilità e conoscenza siano utili nel farlo. L'ingegneria potrebbe utilizzare teorie particolari, ma non ci sono teorie scientifiche generali sull'ingegneria più di quanto non ci siano teorie scientifiche generali su come fissare insieme due pezzi di legno. C'è solo buone pratiche (possibilmente basate su molte teorie scientifiche individuali) e l'esperienza di ciò che effettivamente funziona (empirismo). –

1

C'è un tipo di "ingegneria del software"?

Oppure lo sviluppo del software è "ingegneristico"?

Fatti:

  • La nostra industria è molto giovane realtive a molti altri "ingegnerie".
  • Ancora non abbiamo pratiche "solide" e "teorie".
  • Quindi, per essere onesti, se guardiamo in altre opere di ingegneria maturo pratiche perpective, è difficile chiamare quello che facciamo come "ingegneria"
  • Abbiamo una pessima reputazione in mancanza di [nostre tariffe in mancanza non può essere accettabile presso molte filiali tecniche]

Reality or Fantasy? Sceglietene uno :-)

  • Alcuni ragazzi dire che non abbiamo paractices "solidi" e "teorie" visto che siamo un giovane "ingegneria" ramo, da tempo avremo. Questi ragazzi dicono che è necessario lavorare più "teoria" o fondamenti.

  • Alcuni dicono che lo sviluppo del software è "attività sociale sperimentale" a causa della natura del nostro dominio problematico. Avremo processi di metodologie delle teorie pratiche ma avranno sempre un effetto di secondo ordine. Le persone uniche, le loro qualità di sentimenti e le loro interazioni con il resto sono più influenti.Quei ragazzi vedono lo sviluppo del software come complesso adattivo Sistema

E c'è anche un'altra realtà

% 80 delle attività di sviluppo software in realtà non hanno bisogno di mente molto Brilland. Qualsiasi persona "media" può farlo.

Ma il restante% 20 parte è un compito difficile e multidisciplinare.

Anche lì è un altro nuovo punto di vista My One :-)

Questo punto di vista dicono che lo sviluppo del software non è un ramo della "Engineering". È brach di "Scienze Naturali e Scienze Sociali". Quindi abbiamo bisogno di antropologia e antropologia del software.

0

Teoria: Penso che una teoria sia qualcosa che descrive "come" un sistema naturale funziona, e per dimostrarlo ha delle deduzioni logiche basate su conoscenze precedenti, supportate da induzioni logiche fatte usando esperimenti.

Si chiama l'intero corpo di queste teorie e esperimenti come scienza.

Software: Il software è un sistema creato dall'uomo. un sistema ingegnerizzato. L'ingegneria applica la scienza per creare i nuovi sistemi. A tale riguardo, la pura ingegneria del software applica la scienza dei sistemi matematici discreti.

Ma l'ingegneria del software commerciale ha una motivazione diversa denominata Economia. A tale riguardo, deve tenere conto di tutti i fattori che riguardano l'economia, il principale dei quali è Persone. Quindi, la psicologia ha un ruolo enorme. Ma, dal momento che la Psicologia stessa è solo una teoria del "come" la mente umana lavora basandosi sul solo riconoscimento di modelli senza alcuna deduzione logica basata sulla biologia umana, ha molti difetti come la correlazione implica la causalità.

Quindi, sì, penso che dalla risposta di cui sopra, è possibile capire meglio che cosa è in generale l'Ingegneria del software commerciale.

Problemi correlati