"Informatica! = Ingegneria del software" è una scusa per insegnare male alla programmazione?


23

L'abbiamo sentito tutti; ogni volta che c'è una discussione sui laureati in CS che hanno scarse capacità di sviluppo qualcuno alla fine qualcuno dice,

L'informatica non è ingegneria del software.

Il problema che vedo è che la programmazione e lo sviluppo del software vengono insegnati nei corsi CS. Sono semplicemente insegnato male. Se viene insegnato, allora perché non insegnarlo nel modo giusto la prima volta? *

Quindi vorrei vedere quali sono le opinioni su 2 domande:

  1. L'argomento CS! = SE è un copout o una scusa per non insegnare correttamente le abilità di programmazione.

  2. Indipendentemente dalla tua risposta alla domanda 1; se tu fossi nella posizione onnipotente di prendere una tale decisione: forzeresti a porre l'accento sul corretto insegnamento della programmazione nei corsi di CS?

*. Ho il sospetto, basato su prove aneddotiche che ho ottenuto durante la mia istruzione, che la maggior parte degli accademici sul campo non ha dovuto scrivere codice per mantenere e non ha mantenuto il codice, e di conseguenza non ha le conoscenze / abilità per insegnarlo efficacemente.


7
Chiarirò il mio commento; nella mia mente, sono diversi (CS! = SE). Quindi, se sostituisco CS e SE con altri 2 campi A, B, dove A! = B, potresti ottenere qualcosa come Lezioni di bowling! = Storia giapponese. Allora la tua discussione diventa: BL! = JH è una scusa per non insegnare correttamente JH? Questa è ora una domanda assurda e dovrebbe essere respinta. Se hai visto un laureato in CS che non sapeva perché avresti usato una tabella hash su un elenco collegato, gli era stato insegnato male. Se hai visto un laureato CS che ha fatto un codice di refactoring di lavoro scadente, questo può essere scusato.
Jeremiah Nunn,

2
@Jeremiag Nunn: per usare la tua analogia: la storia giapponese non viene insegnata in tandem con il bowling. Sto sostenendo che ogni programma CS, in effetti, insegna la programmazione e che usano l'argomento "CS! = SE" per scusarsi dall'insegnare bene.
Steven Evers,

2
Un altro pensiero: la mancanza di abilità SE in un determinato livello di laurea specialistica è colpa della scuola o dello studente? In ogni classe avresti probabilmente un'abilità piuttosto ampia da competente a orribile.
Adam Lear

2
@SnOrfus L'ingegneria del software è l'arte della creazione di software. L'informatica è la teoria alla base del software. Conoscere entrambi è l'ideale, ma sono ancora separati. Un'analogia migliore (IMO) di quella di @Geremia sarebbe quella di costruire strumenti anziché suonarli.
dash-tom-bang,

5
La nota a piè di pagina sul fatto che gli accademici non devono scrivere codice mantenibile è quasi esattamente il punto. Non è questo che interessa a CS.
dash-tom-bang,

Risposte:


27

Non penso che sia un copout, ma piuttosto un'asserzione che l'informatica non è ingegneria del software, non è programmazione - è, beh, la scienza del calcolo formalizzato. In sostanza, è matematica (in effetti, molti programmi CS sono iniziati come programmi di matematica applicata).

Penso che il problema risieda più nell'industria che nel mondo accademico. L'industria vede un dottorato di ricerca elencato in un curriculum e pensa: "Fantastico, questo ragazzo è bravo con i computer" e lo assume per fare qualsiasi cosa relativa a un computer: IT, programmazione, sviluppo software, qualunque cosa. Queste cose non risiedono necessariamente nel regno di competenza di un laureato in CS. A loro volta, molte persone a cui piace costruire computer o giocare ai videogiochi entrano in un programma CS che si aspettano di fare quel tipo di cose e ottengono una brutta sorpresa; cioè, molti studenti che frequentano CS non appartengono davvero a questo, e starebbero meglio in un programma di laurea più mirato.

In secondo luogo, c'è un tempo molto limitato per insegnare CS - una materia molto ampia - in un tipico curriculum universitario. Il mio curriculum universitario aveva 8 corsi CS (per un BA) o 12 corsi CS (per un BS), oltre a tutti i corsi di matematica richiesti. Questo non è un sacco di tempo per insegnare CS e la matematica e la programmazione e ingegneria del software, così ad un certo punto si deve decidere cosa è importante e ciò che uno studente può prendere da soli.

Quest'ultimo punto è cruciale: penso che un bravo studente - in qualsiasi area tematica - esplorerà le idee da solo. Ho una laurea in CS, ma penso di essere uscito dal college come uno sviluppatore decente, perché ho studiato e scritto software da solo . Il college non riguarda solo le lezioni; si tratta anche di dare agli studenti il ​​tempo di sviluppare le loro capacità in modo semi-autonomo, fornendo comunque una guida preziosa.

Ritengo che la teoria dell'insegnamento - CS, matematica, ecc. - sia altrettanto importante, se non più importante, dell'insegnamento di specifiche abilità lavorative. Se insegni a uno studente il perché dei metodi e delle tecniche, e non solo il cosa , finirai con qualcuno che è molto più adattabile quando applica le sue conoscenze. Ad esempio, sono andato in una "scuola Java" molto diffamata e quindi mi è stato insegnato in Java, ma ho anche tenuto corsi di teoria dei linguaggi di programmazione, che hanno spiegato il perché dietro molte lingue; di conseguenza, ho imparato a scrivere un software molto migliore rispetto a se non avessi quel background. Certo, non scrivo software in Haskell nel mio lavoro quotidiano, ma conoscere molta teoria del linguaggio di programmazione mi ha permesso di capire cheè stato applicabile al mio lavoro di programmatore.

Penso anche che l'industria si aspetti troppo dagli studenti universitari. L'industria vuole tagliare i propri costi, quindi invece di formare nuove reclute per il proprio lavoro, si aspettano che le scuole diventino scuole commerciali / tecniche; in effetti, vogliono che i college si allenino per loro. I laureati non possono aspettarsi di sapere tutto appena uscito dal college. Essere un buon sviluppatore riguarda tanto l'esperienza quanto la conoscenza (specialmente in un campo relativamente giovane come lo sviluppo del software).


Questo è esattamente il mio pensiero, ma spiegato molto meglio della mia risposta.
Jeremiah Nunn,

+1: Tanta roba buona qui, odio scegliere una cosa, ma considerando che CS ha avuto origine come matematica applicata, ciò non implica l'importanza della sua applicazione - in questo caso, la programmazione?
Steven Evers,

2
@SnOrfus: nella misura in cui la matematica viene applicata alla programmazione, sì. Ma proprio come l'informatica! = Ingegneria del software, programmazione! = Ingegneria del software.
mipadi,

1
@David Thornley: in primo luogo, io e tutti quelli che conosco che hanno preso la fisica abbiamo usato un oscilloscopio durante lo studio delle onde. Tuttavia, l'analogia non regge. Agli studenti viene già insegnata la programmazione nell'ambito di un corso di laurea specialistica. Eravate, io ero, tutti noi che abbiamo partecipato a un nonstisty. Non era nemmeno una sezione unica di un corso. È parte integrante di almeno 1-2 classi per semestre.
Steven Evers,

2
+1 per spiegare che la scuola (college, università, qualunque cosa) dovrebbe insegnarti come pescare e non solo darti il ​​pesce
Emiliano

25

Parte del problema qui è il fatto che 4 anni non sono abbastanza per diventare un ingegnere del software raffinato. Dato che vogliamo che gli studenti universitari abbiano un'esposizione a più cose oltre ai soli corsi di matematica e CS e al fatto che ci sono molte meccaniche pure da imparare (algoritmi, strutture dati, sintassi del linguaggio), non possiamo aspettarci che un CS verde sia importante un ingegnere del software.

Concordo sul fatto che CS! = SE e non sono sicuro che puoi semplicemente andare a scuola e diventare un SE (anche con un Master)


+! 1: Vedo il tuo punto, ma non è solo "raffinato". Molti mancano di alcune abilità di base.
Steven Evers,

Immagino che dipenda da ciò che consideri abilità di base. Ad esempio, SQL è un'abilità di base nella mia mente, ma ho scoperto che i miei laureati CS sono in realtà piuttosto deboli e penso che ci si debba aspettare. Se stai dicendo che sono deboli nella sintassi del linguaggio o nella modularità di base o nei concetti di OOP, allora questo è un grosso problema e inizierei a cercare laureati di diverse scuole
bigtang

Ho programmato professionalmente per 14 anni. Ho esaminato SQL e posso anche creare query di base, ma anche queste competenze di base sono arrivate solo nell'ultimo anno. SQL non è CS. SQL è un'implementazione della teoria dei database, che è CS.
dash-tom-bang,

@ dash-tom-bang: Considereresti le istruzioni del flusso di controllo in linguaggi imperativi come basi? Posso confermare che esiste un diploma per nuovi laureati CS che non ne conoscono la maggior parte.
Steven Evers,

Non considererei l'implementazione del controllo di flusso in alcun linguaggio particolare tra "le basi dell'informatica". Tuttavia, se qualcuno non capisce il controllo del flusso come un concetto , non ha imparato CS.
dash-tom-bang,

10

CS non è in realtà SE. E la gente sembra confondere i due continuamente, anche se lo ammette. L'informatica dovrebbe davvero essere ribattezzata in qualcosa di simile alla computologia o alla scienza dell'informatica. In effetti, l'informatica ha ben poco a che fare con i computer. È teoria dei grafi, analisi dell'algoritmo, strutture di dati, ecc.

Le persone vogliono assumere un nuovo laureato CS in realtà è un laureato ITT; vogliono qualcuno che è stato formato in una vocazione. L'informatica è scienza, la programmazione è un'arte. Questi non sono gli stessi.

È come chiedere perché un nuovo laureato in Fisica non sia un buon ingegnere automobilistico. È sciocco.


2
La programmazione è un'arte, non un'arte.
dash-tom-bang,

6
La programmazione è arte, ingegneria e arte.
Maciej Piechotka,

2
Non lo rinominerei. Che cos'è l'Informatica, ma la scienza dei computer? in altre parole, lo studio delle macchine calcolatrici, che implica lo studio del calcolo.
Michael K,

1
Dovrebbe essere rinominato perché le persone hanno fatto confusione su di te come te. conosci Edsger W. Dijastra? una volta disse: "l'informatica non riguarda più i computer di quanto l'astronomia riguardi i telescopi". :)
fischi

1
L'arte crea bellezza; il mestiere crea utilità. L'arte è creata per la sua bellezza; craft è stato creato per la sua utilità. L'arte potrebbe essere utile; l'imbarcazione potrebbe essere bellissima. L'ingegneria del software crea utilità; pertanto, l'ingegneria del software è un mestiere.
systemovich,

8
  1. Almeno negli Stati Uniti, l'istruzione nel suo insieme è diventata un profitto. Le scuole stanno smorzando il curriculum su tutta la linea per aumentare le iscrizioni. Ci sono più persone al college che non appartengono più che mai. L'apprendimento delle tecniche appropriate non è qualcosa che puoi insegnare facilmente, quindi non lo fanno.
  2. Personalmente metterei più enfasi su SE di quanto non sia in genere, ma credo che CS come programma sia meno appropriato per le persone che vogliono entrare nel settore. Penso che più istituzioni dovrebbero offrire un programma pratico SE.

+1 per il n. 1. L'ho notato quando sono andato a scuola. Era una scuola a scopo di lucro e sentivo che molti studenti non erano qualificati per essere lì. Inoltre, la scuola ha ottenuto solo denaro per corso e il fallimento di uno studente significava che non avevano più denaro da loro, quindi abbastanza spesso gli insegnanti facevano di tutto per passare gli studenti. Avevamo almeno una persona laureata con la laurea che non credo potesse nemmeno scrivere un programma Hello World nella loro lingua scelta!
Rachel,

da quando hai toccato il sistema educativo degli Stati Uniti e il ruolo del profitto, ecco un coro Milton Friedman obbligatorio: youtube.com/watch?v=W3Seg0JE1PM
Lavoro

7

L'argomento CS! = SE è un copout o una scusa per non insegnare correttamente le abilità di programmazione.

No. CS non è SE. Questo è un dato di fatto, non una scusa.

Indipendentemente dalla tua risposta alla domanda 1; se tu fossi nella posizione onnipotente di prendere una tale decisione: forzeresti a porre l'accento sul corretto insegnamento della programmazione nei corsi di CS?

No. Sarebbe come forzare gli astronomi a conoscere i dettagli della costruzione di telescopi. O costringendo i programmatori a conoscere i dettagli della costruzione di computer. Cose correlate, ma un uomo non ha bisogno di sapere tutto.


6

Sì, questo mi sembra un cop-out e un segno dell'immaturità di CS come disciplina accademica.

Un programma BS accreditato dall'American Chemical Society richiede che tu abbia superato corsi specifici per dimostrare particolari competenze sia in teoria (lezioni frontali) sia in pratica (lezioni di laboratorio). Al momento, CS non ha nulla del genere per quanto ne so.

Uno dei miei professori di scuola elementare era un teorico della torre d'avorio il cui ufficio non era mai stato imbevuto di niente di più fisicamente chimico di un acquario con Magic Rocks, ma quando ero il suo TA per la matricola chimica, ha anche dimostrato di essere un chimico da banco abbastanza competente .

Quando lavoravo come chimico per vernici industriali, si sarebbero derisi all'idea che avrei avuto una laurea ed essere incompetente in laboratorio. Ovviamente i dettagli di ciò che stavo facendo in laboratorio erano diversi da quelli che avevo avuto nelle lezioni di laboratorio a scuola, ma i principi erano gli stessi: abbiamo usato solo un mixer e una lattina, piuttosto che un bicchiere e un agitatore magnetico .

Se si dovesse applicare lo stesso approccio al CS, i dettagli di ciò che si potrebbe insegnare come abilità pratiche di sviluppo software per un curriculum CS / SE potrebbero variare da scuola a scuola e nel tempo. Ma mi sembra folle che sia accettabile che qualcuno possa ottenere una laurea nel campo e non essere competente a scrivere, eseguire il debug e mantenere un qualche tipo di codice. (Certo, è così che stanno le cose in molti programmi CS, ma è ancora pazzo.)


Non è pazzo, è un'epidemia. Circa il 90% del codice che ho visto scritto dai miei colleghi è mantenibile come la torre pendente di Pisa.
Marcel Valdez Orozco,

5

Concordo sul fatto che 4 anni sono solo abbastanza tempo per dare loro una buona base su cui crescere. Tuttavia, penso che una cosa che aiuta davvero sia quando le persone del settore vengono coinvolte nello sviluppo del curriculum e persino nell'insegnamento in classe. L'anno scorso sono stato membro del settore in una classe di sviluppo software presso un'università locale. È stata un'esperienza davvero sorprendente per me. Il professore e io abbiamo lavorato insieme sul contenuto del corso e abbiamo messo molte più informazioni sul processo di sviluppo, sulle migliori pratiche del settore e sulle situazioni del "mondo reale" rispetto a quanto avessero fatto prima. Ciò che abbiamo scoperto è stato che, poiché la maggior parte degli istruttori non sviluppa codice ampiamente utilizzato e mantenuto, portare qualcuno dall'industria ha contribuito a identificare e insegnare le competenze necessarie per farlo.


Mi piacerebbe provare qualcosa del genere.
ChaosPandion,

Dovresti contattare la tua università locale e vedere se hanno qualcosa del genere. Dove ti trovi?
Beth Whitezel,

3
  1. Sì, è un copout al 100%, dovrebbero insegnare abilità a lungo termine che saranno utili durante la nostra carriera. Indipendentemente dal fatto che la tua intenzione sia quella di entrare nel mondo accademico o nel settore, dovrai essere in grado di programmare in un modo che possa essere mantenuto, anche se è solo da solo.

  2. Sì, anche se sarebbe sottolineato solo nei corsi corretti. Personalmente, se dovessi parlarti per capire meglio come hai provato a implementare un algoritmo, segnerei il tuo voto.

Anche se vai alla pura ricerca CS, probabilmente dovrai creare codice per dimostrare le tue idee. Ad un certo punto ti saranno utili le adeguate capacità di programmazione, quindi perché non iniziare al college.


Le competenze a lungo termine sono il CS. "Java" non è un'abilità a lungo termine, né lo sono .NET, SQL, Pascal o COBOL. A meno che per "lungo termine" intendi "sii felice di avere un lavoro quando hanno bisogno di qualcuno che mantenga quei sistemi legacy".
dash-tom-bang,

Mentre sono d'accordo che sono necessarie le competenze di base (CS), intendo scrivere codice che sia mantenibile e di facile lettura indipendentemente dal linguaggio di programmazione in cui è scritto. A lungo termine significa competenze che vanno oltre le tecnologie utilizzate.
JustJohn,

1
CS IMHO è necessario per essere in grado di affrontare un problema più complesso, molte persone qui intorno, non hanno bisogno di una laurea in CS per scrivere codice, ma se hai bisogno di gestire una matrice 10x10 milioni di dati e manipolarla, non riesco a capire come un SE può gestirlo senza un grado CS.
fischi

3

Penso che il nostro problema sia che siamo molto più simili ai dottori di quanto siamo disposti ad ammettere ... Abbiamo questa idea che una laurea di quattro anni dovrebbe preparare gli studenti a scrivere software. Non è nemmeno vicino.

La nostra professione è in gran parte agli inizi rispetto ad altre discipline. Forse la domanda dovrebbe essere: come possiamo migliorare CS in modo che gli studenti che si laureano con quel grado siano più adatti a diventare membri produttivi di un team di sviluppo software del mondo reale in un arco di tempo molto più breve?

Forse dovremmo essere più simili alla medicina. Quattro anni di lavoro di base (laurea specialistica) e poi di residenza - pratica dell'imbarcazione sotto la supervisione di un ingegnere del software più esperto. Forse è quello che abbiamo già, ma è meno formale ... Voglio dire, come un residente, apprendiamo le nostre più preziose competenze sul posto di lavoro nei nostri primi lavori.

Forse come disciplina dobbiamo solo formalizzare questo meglio.


O un programma Master Craftsman / Apprentice
Austin Salonen,

1
Il programma MD non è un programma scientifico. Vuoi studiare la scienza, prendi la biologia. Se hai un problema medico, tuttavia, non lo porti da un biologo.
David Thornley,

Questa è un'ottima idea: formalizzare il fatto che anche l'ingegneria del software è una questione di esperienza. Lo stesso vale per avvocati e medici
Emiliano,

Ma di cosa stiamo parlando di David? Quanti di noi si sono laureati in CS e poi effettivamente trascorrono le nostre carriere facendo "Informatica"? Ciò che la maggior parte di noi fa veramente è uscire nel mondo e praticare l'arte dello sviluppo del software. È lo stesso di un MD: "praticano" la medicina. Pratichiamo la costruzione di applicazioni.
Chris Holmes,

@Chris Holmes: Sono davvero infastidito dall'idea che un diploma CSci dovrebbe trasformarti in un programmatore pronto ad assumere un lavoro usando l'ultima lingua calda. C'è un sacco di spazio per quel tipo di laurea o certificato, probabilmente molto più del vero CSci. Penso che lo sviluppo del software sia analogo alla pratica della medicina qui, ma non ottieni il tuo MD dai dipartimenti di biologia o psicologia, lo ottieni dalla scuola di medicina. È un titolo molto rispettato, ma non è un dottorato di ricerca.
David Thornley,

3

Ho una laurea in CS e per un anno intero del mio programma non c'è stata programmazione, solo teoria. Ci è stato detto che non stiamo ottenendo una laurea in programmazione ma in Informatica. Se vuoi essere un programmatore, vai al college della comunità.

Abbiamo imparato su algoritmi, schemi di progettazione e molte teorie sulla risoluzione dei problemi senza un linguaggio spaziale. I linguaggi di programmazione vanno e vengono, ma la teoria alla base rimane la stessa.

Quindi, alla tua prima domanda, no, non credo che CS! = SE sia un copout. È un fatto.

Alla tua seconda domanda, no, non penso che lo farei. Come insegnate correttamente la programmazione? Al di là di loop, ifs, metodi, classi e OOP, quale sarebbe la "corretta programmazione" e come lo renderesti pertinente per qualsiasi linguaggio di programmazione là fuori? Hai bisogno di esperienza nella scrittura di codice, qualcosa per cui una laurea di 4 anni non può prepararti.

Una cosa che vorrei fare è fornire un corso sullo sviluppo nel mondo reale. Controllo del codice sorgente, tracciamento di ticket / bug, traccia del codice e tutto quel jazz sarebbe un buon inizio per preparare tutti coloro che presto saranno laureati per ciò che dovranno affrontare nei loro nuovi lavori.

Penso che spetti a noi quando assumiamo un nuovo laureato per capire che probabilmente non scriveranno un codice vincente. Hanno bisogno di guida e direzione.


++ - punti eccellenti. Sarebbe bello se i curricula CS offrissero una o due lezioni su questo "mondo reale", sono d'accordo. Ne avevamo parlato nella mia università (nel 1993) ma non è mai andato da nessuna parte.
dash-tom-bang,

Come ti aspettavi di dimostrare la tua competenza nelle classi che costituivano l'anno della teoria della sola programmazione? Esami scritti solo?
Carson63000,

@ Carson630000 - incarichi scritti, a volte scrivendo diagrammi di stato, a volte scrivendo saggi che indicano come affrontare e risolvere un problema o come applicare vari concetti di CS. Ci ha costretto a capire la teoria e non un linguaggio di programmazione specifico.
Tyanna,

2

È importante per l'università trovare un buon equilibrio tra conoscenze teoriche e abilità pratiche. Durante i corsi diversi ho imparato entrambi. Durante i primi anni c'era molta matematica e algoritmi / strutture dati. Quella che seguì fu una scelta: o potevi continuare ad imparare l'informatica (tipo di percorso artistico, dove ad esempio potresti frequentare corsi con sofisticati algoritmi di adattamento delle stringhe) o concentrarti sull'ingegneria del software. In questo periodo dovevi ancora ottenere un solido background di programmazione.

Ho scelto l'ingegneria del software, perché non sono mai stato molto interessato ai problemi astratti. Ma anche quelli a cui piaceva la pura informatica dovevano:

  • programmare un piccolo file system nello spazio utente, creare un linuxmodulo kernel e modificare il kernel stesso, scrivere un gioco orientato agli oggetti puro in SmallTalk,
  • scrivere il proprio protocollo di comunicazione e quindi implementarne uno, scelto dall'insegnante (era davvero bello, quando i programmi di due studenti potevano comunicare facilmente, anche se non avevano mai collaborato prima),
  • creare un progetto più ampio Javain una squadra di quattro,
  • costruire un progetto di programmazione funzionale,
  • scrivere diversi programmi solidi Cper la programmazione parallela (le idee erano astratte, ma le recensioni erano piuttosto dure, come perdere punti per non fornire un output adeguato, quando il programma falliva, come programdovrebbe fare un buon unix ),
  • creare un portale Web utilizzando un framework Web (abbiamo scelto django, che mi ha fatto amare questo framework),
  • creare un programma abbastanza grande usando LAMP(ho ancora degli incubi php, ma usato al postgresqlposto di MySQLe sono molto felice di saperlo DBMSora),
  • e se qualcuno scegliesse, potrebbe scrivere un programma per la sua tesi di master - ho scritto pythonun programma desktop da 10k righe usando PyQt.

Forse c'erano altri progetti, ma ora li ho semplicemente dimenticati.

Il mio punto è: tutto dipende dalla scuola. Non mi piace per l'approccio di ingegneria del software puro, dov'è Javala lingua principale. Una volta ho dovuto aiutare un amico, che frequenta una scuola del genere e ha dovuto scrivere un programma per la programmazione parallela. Ho dovuto scrivere per lui in fondo, perché ha però, che sizeof(some_string)nel Cdà la lunghezza della stringa.

Sarò onesto: odiavo la matematica, soffrivo, quando dovevo prepararmi per compiti astratti, che sarebbero stati serviti su esami di algoritmi / strutture di dati. Ma mi dà un certo vantaggio: posso pensare in modo molto astratto. È come quando impari le arti marziali e non fai la guardia (almeno in quelle, dove dovresti). L'allenatore continua a venire e ti colpisce in testa, quando abbassi le mani, perché hai dimenticato o perché sei stanco di tenerli su. Ma dopo qualche tempo, continui a tenerli su. E diventa davvero difficile colpirti in faccia. Lo stesso con problemi algoritmici astratti. Comprendi il contenuto di Introduzione agli algoritmi e davvero poche cose sorprenderanno nel lavoro.


Sembra un buon programma. Qualche teoria. Molta pratica.
Mike Dunlavey,

1

Penso che la risposta sia sì (in un certo senso).

Il fatto è che non è possibile insegnare ai bambini in un breve periodo di programmazione. Dovrebbero essere insegnati il ​​pensiero logico dei programmatori, come risolvere (su scala minore) i problemi del programmatore.

Sono certo che i programmi della scuola dovrebbero essere rivisti, il mio piccolissimo paese del "terzo mondo", fortunatamente, si sta facendo uno sforzo affinché questo accada. Siamo il primo paese ad attuare il programma OLPC; http://laptop.org/en/


1

Per esperienza personale (al momento sono uno studente), devo dire di sì, è una scusa. Tutti si riferiscono al CS come a una scienza che ci insegna tutte le basi dei computer, e SE come un ramo speciale in CS che insegna esplicitamente alla programmazione. Imo, tutti coloro che hanno BS in CS, devono sapere come scrivere codice buono e ottimizzato (anche se la programmazione non è la sua area di specialità). Quindi sì, se avessi una posizione onnipotente di prendere una tale decisione, costringerei gli studenti ad acquisire buone capacità di programmazione.


La mia laurea si intitola Ingegneria Informatica e Software ed è stata concepita per darti il ​​meglio di entrambi i mondi, ovvero essere un programmatore competente e conoscere la teoria abbastanza per essere in grado di andare a scuola o ricerca. Penso che sia stato un buon approccio.
Michael K,

1

Supponendo che l'obiettivo è quello di educare i bravi ingegneri del software (programmatori) perché il mondo ne ha bisogno, è giusto rispondere dicendo ciò che penso dovrebbe essere insegnato?

Innanzitutto, questo è importante perché attualmente il trasferimento delle conoscenze è molto inefficiente. Quando i potenziali programmatori sono in classe, le loro menti sono aperte e assorbono ciò che viene loro insegnato. Allo stesso tempo, i professori (ero uno) troppo spesso sono più interessati a riempire la pipeline della scuola di specializzazione con studenti che possono lavorare su materie esoteriche. Quando viene sollevata l'obiezione che gli studenti non sono preparati per i problemi del mondo reale, ho visto i professori affermare che non è il loro lavoro . Questo è il lavoro del mondo reale.

Quindi quando gli studenti diventano programmatori nel mondo reale, sono desiderosi di imparare dai loro nuovi colleghi? Non nella mia esperienza. Piuttosto sono ansiosi di diffondere qualsiasi vangelo acquisito a scuola. Ricordo come uno studente e un giovane praticante pensare a quanto sarebbe stato difficile promuovere nuove idee tra i vecchi fuddy-duddies là fuori. Ora che sono un vecchio disordinato, vedo quanto sia difficile aprire gli occhi di nuovi programmatori alla differenza tra teoria e pratica.

Ero uno studente di ingegneria, in ingegneria meccanica e successivamente elettrica. Una parte fondamentale di ciò era a) basi matematiche eb) risoluzione pratica dei problemi. L'ingegneria del software dovrebbe essere così, non solo la programmazione.

Penso che l'ingegneria del software (programmazione) dovrebbe essere insegnata con abbastanza informatica per essere una conoscenza operativa - teoria degli automi di base e teoria dell'informazione. Non è necessario che siano eseguiti in modo approfondito. Dopo aver insegnato le competenze di programmazione di base, dovrebbero esserci progetti cooperativi di dimensioni non banali. Una parte essenziale di questi dovrebbe essere la proposta e la considerazione di soluzioni alternative di problemi specifici, con analisi di pro e contro, non solo l'ultima religione o "prossima grande cosa" o taglia unica. Infine, dovrebbero esserci cooperazione e partenariato tra l'industria e il mondo accademico, in modo che idee e miglioramenti possano essere comunicati in entrambi i modi, migliorando notevolmente il controllo di qualità.


0

Quelli che possono, lo fanno; quelli che non possono, insegnano.

Nella mia università, la base di conoscenza degli insegnanti è terribilmente carente. Ho visto gli insegnanti lottare per capire come rappresentare le tabelle semi-strutturate in XML mentre si tiene un dottorato di ricerca in Database Design. Ho visto il mio insegnante di Assembly chiedermi cosa fa il mio codice quando è il suo frammento di codice che ho copiato e incollato. Ho visto il mio insegnante di progettazione software dirci che il metodo Agile è lo stesso del metodo a cascata, solo più veloce, che il modello di processo di sviluppo iterativo ha e può avere solo 3 iterazioni perché è quello che l'immagine che il libro usa come esempio raffigura. Uno dei miei insegnanti non sapeva nemmeno cosa fosse un'affermazione di altro tipo.

Non credo che stiano "affrontando", o stiano inventando scuse, credo davvero che stiano facendo il meglio che possono con le loro esperienze, che hanno pochi preziosi.

Sono d'accordo con le altre persone che postano qui che 4 anni non sono sufficienti per diventare un programmatore esperto, ma l'esperienza che i miei insegnanti hanno avuto non è sufficiente a renderli stagionati. È molto simile a Ender's Shadow, dove Bean nota che le metriche usate dagli insegnanti nella scuola di battaglia non sono all'altezza perché l'ultima guerra, che è la regola guida, era troppo breve per mostrare veramente ciò che è effettivamente necessario. In altre parole, gli insegnanti stavano facendo il meglio che potevano, ma non avevano l'esperienza di sapere cosa fosse veramente necessario per diventare un buon comandante (o un buon programmatore in questo caso).


3
Penso che molti dei tuoi esempi siano ovviamente solo casi in cui il tuo insegnante sta cercando di semplificare le cose a tuo vantaggio. Those that can, do; those that cannot, teach.Inoltre non sono affatto d'accordo con questo: le carriere accademiche e industriali portano a stili di vita completamente diversi. Gran parte della ricerca mondiale proviene da accademici. E non vedo alcun modo in cui hai risposto alla domanda originale.
Nessuno il

2
Cosa c'entra l'XML con la progettazione del database, oltre al fatto che se uno non fosse così interessato alle prestazioni, potrebbe usare l'XML come archivio di supporto per un database? Per non dire che alcuni insegnanti possono mancare il punto (ricordo di aver litigato con un istruttore sui punti rimossi a causa di "commenti eccessivi" quando il curriculum a quel punto insegnava "commenti come il vento") ma è una specie di sopravvalutazione. Se qualcuno vuole imparare Java, ci sono modi più economici per farlo che passare attraverso un curriculum CS.
dash-tom-bang,

1
C'è anche il fatto che alcune università sono peggio di altre, e la tua potrebbe avere un dipartimento CS particolarmente cattivo. Tradizionalmente, i laureati in CS sono stati in grado di fare molti più soldi nell'industria rispetto al mondo accademico, quindi quelli nel mondo accademico erano quelli che volevano davvero essere lì e quelli che non potevano avere un lavoro nel mondo reale. Ho visto entrambi e sospetto che il rapporto vari tra le università.
David Thornley,

@ dash-tom-bang, XML è un esempio quasi perfetto di database semi-strutturati. en.wikipedia.org/wiki/Semi-structured_model
Malfist

1
L'XML utilizzato in questo modo è ancora un'implementazione di una teoria del database. Non è essa stessa la teoria.
dash-tom-bang,

0

Gli informatici e gli ingegneri del software sono diversi. Lo scienziato sono i ragazzi che eseguono gli esperimenti folli e escogitano gli algoritmi che noi ingegneri del software sfruttiamo per essere migliori.

Pensa ai chimici che conducono esperimenti per un'azienda farmaceutica. A loro non importa come produrre la sostanza chimica in massa. Né si preoccupano del marketing, dell'imballaggio, della distribuzione o di qualsiasi cosa accada al farmaco dopo averlo scoperto. Al diavolo non importa nemmeno del processo di certificazione. Tutto ciò che gli interessa è trovare una sostanza chimica che abbia un effetto quando somministrata ai soggetti del test. La società è responsabile di spostarlo oltre.

Gli informatici sono come quei chimici. Tutto ciò che fanno è testare le teorie con il codice. A loro non importa quanto sia gestibile il codice. Dimostrano una teoria e passano a quella successiva. Qualcun altro impacchetta l'algoritmo e lo rende utile per le masse e abbiamo MP3 o computer vision con Kinect o streaming video sul tuo iPhone. Quindi CS! = SE è un argomento valido.

SCRIVI la seconda parte della tua domanda. Se mi offrissi una laurea in Teoria della musica, potrebbe esserci un corso obbligatorio di songwriting o qualcosa del genere, ma non richiederei a nessuno di studiare uno strumento. Spetta allo studente cercare le conoscenze che desidera. L'informatica non è ingegneria del software ... se vuoi imparare SE, prendi un doppio maggiore.


0

Edsger Wybe Dijkstra era uno scienziato informatico olandese.

Ha ricevuto il Turing Award del 1972 per i contributi fondamentali allo sviluppo di linguaggi di programmazione , una volta ha dichiarato:

"LA SCIENZA INFORMATICA NON È PIÙ SUI COMPUTER CHE L'ASTROMIA È SUI TELESCOPI."

CS è DAVVERO DIVERSO DA UN SE. (CS! = SE).

Un CS è uno scienziato che ha acquisito conoscenze di SCIENZA DEL COMPUTER.

SCUENZA INFORMATICA o informatica (a volte abbreviata in CS) è lo studio dei fondamenti teorici dell'informazione e del calcolo e delle tecniche pratiche per la loro implementazione e applicazione nei sistemi informatici e viene spesso descritto come lo studio sistematico dei processi algoritmici che creano, descrivono, e trasformare le informazioni.

L'informatica ha molti sottocampi per esempio:

  • Informatica teorica
  • Teoria del calcolo
  • Algoritmi e strutture dati
  • Elementi del computer e architettura
  • multiprocessing
  • Scienza computazionale
  • Intelligenza artificiale
  • Sistemi software

Molti di noi non hanno bisogno di nessuna di queste abilità nel lavoro quotidiano o almeno in parte.

SOFTWARE ENGINEER (SE) è una professione dedicata alla progettazione, all'implementazione e alla modifica di software in modo che sia di qualità superiore, più conveniente, gestibile e più veloce da costruire. È un "approccio sistematico all'analisi, progettazione, valutazione, implementazione, test, manutenzione e reingegnerizzazione di un software applicando l'ingegneria al software"

Come conoscenza del CS, suppone di avere le conoscenze per gestire problemi davvero complessi senza conoscere un linguaggio di programmazione davvero valido. IMHO qui possiamo aprire un altro thread, in cui un GRADO per me è SOLO un PUNTO DI PARTENZA e non un OBIETTIVO FINE.

Come saprà SE, suppone di avere le conoscenze per gestire la produzione di questo problema davvero complesso e gestire lo sviluppo di un team o di un progetto su questo campo.

Insieme facciamo la ricerca scientifica fatta da un CS in Scienze applicate con l'aiuto di una SE.

Non intendo CS è meglio di SE, intendo CS! = SE.

Questo tipo di domanda è la stessa domanda che le persone non informatiche si pongono quando ti chiedono perché, in quanto programmatori, non sei in grado di risolvere telefonicamente il problema del programma X, Y, Z sul sistema operativo J, M, N. ;)

In realtà sono davvero annoiato di scrivere codice dopo 10 anni di sviluppo di sistemi unix nel campo della sicurezza e dopo aver letto questa domanda capisco il punto, ho bisogno di studiare più informatica e meno linguaggio e sistema informatico o protocollo!

Nessuno al mio lavoro è in grado di gestire la differenza tra SE e CS! è davvero una brutta cosa.

Se pensi che un CS possa essere una scusa per le cattive abilità di programmazione, ti manca davvero il punto su cosa sia un CS e cosa sia SE.

Suppongo che tu sia un SE, sai per esempio che tutto il linguaggio, tutti i paradigmi e tutte le cose relative al linguaggio del computer possono essere espressi matematicamente in una serie di funzioni ricorsive parziali e qualunque cosa tu impari una nuova lingua, QUALSIASI NUOVA LINGUA, sei solo apprendere una nuova astrazione sulla funzione parziale ricorsiva SAME?

divertiti :)

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.