Ist "Computer Science! = Software Engineering" eine Ausrede, um schlecht programmieren zu können?


23

Wir haben es alle gehört; Wann immer es eine Diskussion über CS-Absolventen mit schlechten Entwicklungsfähigkeiten gibt, sagt irgendwann jemand:

Informatik ist keine Softwareentwicklung.

Das Problem , das ich sehe , ist , dass die Programmierung und Software - Entwicklung sind in CS Kursen gelehrt. Sie werden nur allgemein schlecht unterrichtet. Wenn es unterrichtet wird, warum dann nicht gleich beim ersten Mal richtig unterrichten? *

Ich würde also gerne sehen, was die Meinungen zu 2 Fragen sind:

  1. Ist das CS! = SE-Argument eine Ausrede oder eine Entschuldigung dafür, dass Programmierkenntnisse nicht richtig vermittelt wurden?

  2. Unabhängig von Ihrer Antwort auf Frage 1; Wenn Sie in der allmächtigen Position wären, eine solche Entscheidung zu treffen: Würden Sie in CS-Kursen einen Schwerpunkt auf den richtigen Programmierunterricht legen?

*. Ich habe den Verdacht, dass die meisten Akademiker auf diesem Gebiet, basierend auf Anekdoten, die ich während meiner Ausbildung erhalten habe, keinen Code schreiben mussten, um gewartet zu werden, und keinen Code gewartet haben und daher nicht über die Kenntnisse / Fähigkeiten verfügen um es effektiv zu lehren.


7
Ich werde meinen Kommentar klarstellen; In meinen Augen sind sie unterschiedlich (CS! = SE). Wenn ich also CS und SE durch 2 andere Felder A, B ersetze, wobei A! = B, könnte man so etwas wie Bowling Lessons! = Japanese History erhalten. Dann wird dein Argument: Ist das BL! = JH eine Ausrede dafür, JH nicht richtig zu unterrichten? Dies ist jetzt eine absurde Frage und sollte abgewiesen werden. Wenn Sie einen CS-Absolventen sahen, der nicht wusste, warum Sie eine Hashtabelle über einer verknüpften Liste verwenden würden, wurde er schlecht unterrichtet. Wenn Sie einen CS-Absolventen gesehen haben, der einen schlechten Refactoring-Code ausgeführt hat, kann dies entschuldigt werden.
Jeremiah Nunn

2
@Jeremiag Nunn: Um Ihre Analogie zu verwenden: Japanische Geschichte wird nicht gleichzeitig mit Bowling unterrichtet. Ich mache das Argument, dass jedes CS-Programm tatsächlich Programmierung lehrt und dass sie das Argument "CS! = SE" verwenden, um sich zu entschuldigen, dass sie es nicht gut lehren.
Steven Evers

2
Ein anderer Gedanke: Ist der Mangel an SE-Kenntnissen in einem bestimmten CS-Abschluss die Schuld der Schule oder des Schülers? In jeder Klasse würden Sie wahrscheinlich eine ziemlich breite Fähigkeit haben, die von kompetent bis schrecklich reicht.
Adam Lear

2
@SnOrfus Software Engineering ist das Handwerk der Erstellung von Software. Informatik ist die Theorie hinter der Software. Beide zu kennen ist ideal, aber sie sind immer noch getrennt. Eine bessere Analogie (IMO) als @ Jeremiah wäre es, Instrumente zu bauen oder sie zu spielen.
Dash-Tom-Bang

5
Die Fußnote über Akademiker, die keinen wartbaren Code schreiben müssen, ist fast genau der Punkt. Darum kümmert sich CS nicht.
Dash-Tom-Bang

Antworten:


27

Ich denke nicht, dass es sich um einen Copout handelt, sondern vielmehr um die Behauptung, dass Informatik keine Softwareentwicklung ist, sondern keine Programmierung - es ist die Wissenschaft des formalisierten Rechnens. Im Wesentlichen handelt es sich um Mathematik (in der Tat begannen viele CS-Programme als Programme für angewandte Mathematik).

Ich denke, das Problem liegt eher in der Industrie als in der Wissenschaft. Die Industrie sieht einen CS-Abschluss in einem Lebenslauf und meint: "Großartig, dieser Typ kann gut mit Computern umgehen" und beauftragt ihn, alles zu tun, was mit Computern zu tun hat : IT, Programmierung, Softwareentwicklung, was auch immer. Diese Dinge gehören nicht unbedingt zum Fachwissen eines CS-Absolventen. Viele Leute, die gerne Computer bauen oder Videospiele spielen, nehmen an einem CS-Programm teil und erwarten, dass sie solche Dinge tun und eine unhöfliche Überraschung erleben. Das heißt, viele Studierende, die in die CS gehen, gehören nicht wirklich dorthin und sind in einem gezielteren Studiengang besser aufgehoben.

Zweitens gibt es eine sehr begrenzte Zeit, um CS - ein sehr breites Fach - in einem typischen Grundstudienplan zu unterrichten. Mein Grundstudium bestand aus 8 CS-Kursen (für einen BA) oder 12 CS-Kursen (für einen BS) sowie allen erforderlichen Mathematikkursen. Es ist nicht viel Zeit, um CS und Mathematik sowie Programmieren und Software-Engineering zu unterrichten. Irgendwann müssen Sie also entscheiden, was wichtig ist und was ein Schüler selbst lernen kann.

Dieser letzte Punkt ist von entscheidender Bedeutung: Ich denke, ein guter Schüler - in jedem Fachbereich - wird sich selbst mit Ideen befassen. Ich habe einen CS-Abschluss, aber ich glaube, ich habe das College als anständiger Entwickler abgeschlossen, weil ich selbst Software studiert und geschrieben habe . Das College dreht sich nicht nur um den Unterricht. Es geht auch darum, den Schülern Zeit zu geben, ihre Fähigkeiten halbautonom weiterzuentwickeln, und dabei wertvolle Hinweise zu geben.

Ich behaupte , dass die Lehre der Theorie - CS, Mathematik usw. - ist genauso wichtig, wenn nicht mehr wichtig, als Lehre bestimmte berufsbezogene Fähigkeiten. Wenn Sie einem Schüler das Warum hinter Methoden und Techniken beibringen , und nicht nur das Was , werden Sie jemanden finden, der viel anpassungsfähiger ist, wenn er sein Wissen anwendet. Ich ging zum Beispiel auf eine schlecht gemachte "Java-Schule" und wurde daher in Java unterrichtet, aber ich hatte auch Kurse in Programmiersprachtheorie, die das Warum hinter vielen Sprachen erklärten . Infolgedessen habe ich gelernt, viel bessere Software zu schreiben, als wenn ich diesen Hintergrund nicht hätte. Klar, ich schreibe in meiner täglichen Arbeit keine Software in Haskell, aber die Kenntnis vieler theoretischer Programmiersprachen hat es mir ermöglicht, einen Einblick zu gewinnenhat gewesen zu meinem Job als Programmierer anwendbar.

Ich denke auch, dass die Industrie von den Studenten zu viel erwartet. Die Industrie will ihre eigenen Kosten senken, und anstatt neue Mitarbeiter für ihre Arbeit auszubilden, erwarten sie, dass die Hochschulen Handels- und Fachschulen werden. Tatsächlich möchten sie, dass die Hochschulen ihre Ausbildung für sie machen. Von Hochschulabsolventen kann nicht erwartet werden, dass sie alles frisch vom College wissen . Ein guter Entwickler zu sein, bedeutet sowohl Erfahrung als auch Wissen (insbesondere in einem relativ jungen Bereich wie der Softwareentwicklung).


Das ist genau mein Gedanke, aber viel besser erklärt als meine Antwort.
Jeremiah Nunn

+1: So viel Gutes hier, ich würde es hassen, auf eine Sache einzugehen, aber wenn man bedenkt, dass CS als angewandte Mathematik entstanden ist, impliziert das nicht die Wichtigkeit seiner Anwendung - in diesem Fall Programmierung?
Steven Evers

2
@SnOrfus: Soweit es sich bei der Programmierung um Mathematik handelt, ja. Aber genauso wie Informatik! = Software-Engineering, Programmierung! = Software-Engineering.
mipadi

1
@ David Thornley: Erstens benutzten ich und jeder, den ich kenne, der Physik studierte, ein Oszilloskop, um Wellen zu studieren. Trotzdem gilt die Analogie nicht. Im Rahmen eines CS-Abschlusses wird den Studenten bereits das Programmieren beigebracht . Sie waren, ich war, wir alle, die an einer Unbestimmtheit teilnahmen. Es war nicht einmal ein einmaliger Abschnitt eines Kurses. Es ist ein wesentlicher Bestandteil von mindestens 1-2 Klassen pro Semester.
Steven Evers

2
+1 für die Erklärung, dass die Schule (Hochschule, Universität, was auch immer) Ihnen beibringen sollte, wie man fischt und nicht nur den Fisch gibt
Emiliano

25

Ein Teil des Problems ist die Tatsache, dass 4 Jahre nicht genug Zeit sind, um ein polierter Software-Ingenieur zu werden. Angesichts der Tatsache, dass wir möchten, dass der Undergrad mehr als nur Mathe- und CS-Kurse kennt und dass es eine Menge reiner Mechanik zu lernen gibt (Algorithmen, Datenstrukturen, Sprachsyntax), können wir nicht erwarten, dass ein grüner CS-Major vorhanden ist ein Software-Ingenieur.

Ich würde zustimmen, dass CS! = SE und ich bin nicht sicher, ob Sie einfach zur Schule gehen und SE werden können (auch mit einem Master)


+! 1: Ich verstehe Ihren Standpunkt, aber es ist nicht nur "poliert". Vielen fehlt es an sehr grundlegenden Fähigkeiten.
Steven Evers

Ich denke, es hängt davon ab, was Sie als sehr grundlegende Fähigkeiten betrachten. Zum Beispiel ist SQL eine grundlegende Fähigkeit in meinem Kopf, aber ich habe festgestellt, dass meine CS-Absolventen tatsächlich ziemlich schwach darin sind und ich denke, dass dies zu erwarten ist. Wenn Sie sagen, dass sie in der Sprachsyntax oder in der Modularität oder den OOP-Konzepten schwach sind, dann ist das ein großes Problem, und ich würde anfangen, nach Absolventen von verschiedenen Schulen zu
suchen

Ich programmiere seit 14 Jahren professionell. Ich habe mir SQL angeschaut und kann sogar grundlegende Abfragen verfassen, aber auch diese grundlegenden Fähigkeiten sind erst im letzten Jahr angekommen. SQL ist nicht CS. SQL ist eine Implementierung der Datenbanktheorie, die CS ist.
Dash-Tom-Bang

@ dash-tom-bang: Würden Sie Kontrollflussanweisungen in imperativen Sprachen als Grundlagen betrachten? Ich kann bestätigen, dass es Studienabschlüsse mit neuem Abschluss gibt, die die Mehrheit von ihnen nicht kennen.
Steven Evers

Ich würde die Implementierung der Flusskontrolle in einer bestimmten Sprache nicht als eine der "Grundlagen der Informatik" betrachten. Wenn jedoch jemand die Flusssteuerung nicht als Konzept versteht , hat er CS nicht gelernt.
Dash-Tom-Bang

10

CS ist in der Tat nicht SE. Und die Leute scheinen die zwei ständig zu verschmelzen, auch wenn sie es zugeben. Informatik sollte eigentlich in Computologie oder Informatik umbenannt werden. In der Tat hat die Informatik sehr wenig mit Computern zu tun. Es geht um Graphentheorie, Algorithmusanalyse, Datenstrukturen usw.

Die Leute wollen davon ausgehen, dass ein neuer CS-Abschluss tatsächlich ein ITT-Abschluss ist. Sie wollen jemanden, der in einer Berufung ausgebildet wurde. Informatik ist Wissenschaft, Programmieren ist Kunst. Das ist nicht dasselbe.

Das ist so, als würde man fragen, warum ein frisch gebackener Physiker kein guter Autoingenieur ist. Es ist dumm.


2
Programmieren ist ein Handwerk, keine Kunst.
Dash-Tom-Bang

6
Programmieren ist Handwerk, Ingenieurwesen und Kunst.
Maciej Piechotka

2
Ich würde es nicht umbenennen. Was ist Informatik, aber die Informatik? mit anderen Worten, das Studium der Rechenmaschinen, was das Studium des Rechnens impliziert.
Michael K

1
Sollte umbenannt werden, weil die Leute wie Sie Verwirrung gestiftet haben. kennst du Edsger W. Dijastra? Er sagte einmal: "In der Informatik geht es nicht mehr um Computer als in der Astronomie um Teleskope." :)
boos

1
Kunst schafft Schönheit; Handwerk schafft Nutzen. Kunst ist für ihre Schönheit geschaffen; Handwerk ist für seinen Nutzen geschaffen. Kunst könnte nützlich sein; Handwerk könnte schön sein. Software Engineering schafft Nutzen; Daher ist Software Engineering ein Handwerk.
Systemovich

8
  1. Zumindest in den Vereinigten Staaten geht es bei der Bildung insgesamt um Profit. Die Schulen verdrehen den Lehrplan in allen Bereichen, um die Einschreibung zu erhöhen. Es gibt mehr Leute in der Schule, die da nicht hingehören als je zuvor. Das Erlernen der richtigen Techniken ist nicht einfach zu lehren, deshalb tun sie es nicht.
  2. Persönlich würde ich mehr Wert auf SE legen, als es normalerweise der Fall ist, aber ich glaube, dass CS als Programm weniger für Leute geeignet ist, die in die Industrie einsteigen möchten. Ich denke, mehr Institutionen sollten ein praktisches SE-Programm anbieten.

+1 für # 1. Ich habe das bemerkt, als ich zur Schule ging. Es war eine gewinnorientierte Schule und ich hatte das Gefühl, dass viele der Schüler nicht qualifiziert waren, dort zu sein. Außerdem bekam die Schule nur Geld pro Kurs, und wenn ein Schüler scheiterte, bekam er kein Geld mehr von ihm. Daher haben sich die Lehrer oft Mühe gegeben, die Schüler zu überholen. Wir hatten mindestens einen Absolventen mit einem Abschluss, von dem ich glaube, dass er nicht einmal ein Hello World-Programm in seiner gewählten Sprache schreiben kann!
Rachel

Da Sie das US-Bildungssystem und die Rolle des Profits angesprochen haben, ist hier ein obligatorischer Milton Friedman-Chor: youtube.com/watch?v=W3Seg0JE1PM
Job

7

Ist das CS! = SE-Argument eine Ausrede oder eine Entschuldigung dafür, dass Programmierkenntnisse nicht richtig vermittelt wurden?

Nein, CS ist nicht SE. Das ist eine Tatsache, keine Entschuldigung.

Unabhängig von Ihrer Antwort auf Frage 1; Wenn Sie in der allmächtigen Position wären, eine solche Entscheidung zu treffen: Würden Sie in CS-Kursen einen Schwerpunkt auf den richtigen Programmierunterricht legen?

Nein. Es wäre, als müssten Astronomen die Details des Teleskopbaus lernen. Oder Programmierer dazu zwingen, die Details des Computerbaus zu lernen. Verwandte Sachen, aber ein Mann muss nicht alles wissen.


6

Ja, das klingt für mich wie ein Cop-out und ein Zeichen für CS Unreife als akademische Disziplin.

Für ein von der American Chemical Society akkreditiertes BS-Programm müssen Sie bestimmte Kurse absolviert haben, um bestimmte Kenntnisse in Theorie (Vorlesungsunterricht) und Praxis (Laborklassen) nachzuweisen. Soweit ich weiß, hat CS derzeit nichts Vergleichbares.

Einer meiner Absolventen war ein sehr elfenbeintürmiger Theoretiker, dessen Büro nie mit etwas physikalisch chemischerem als einem Goldfischglas mit Magic Rocks beschmutzt war, aber als ich sein TA für Freshman Chem war, erwies er sich auch als ziemlich kompetenter Bankchemiker .

Als ich als Chemiker für Industrielacke arbeitete, hätten sie sich über die Vorstellung lustig gemacht, ich hätte einen Bachelor und wäre im Labor inkompetent. Natürlich waren die Details, die ich im Labor machte, anders als in den Schulklassen, aber die Prinzipien waren dieselben - wir verwendeten nur einen Farbmischer und eine Dose anstelle eines Bechers und eines Magnetrührers .

Wenn man denselben Ansatz auf CS anwenden würde, könnten die Details dessen, was man als praktische Softwareentwicklungsfähigkeiten für einen CS / SE-Lehrplan lehrt, von Schule zu Schule und im Laufe der Zeit variieren. Aber es klingt einfach verrückt zu mir , dass es akzeptabel ist , dass jemand einen Abschluss im Bereich bekommen konnte und nicht kompetent zu schreiben, debuggen und Aufrechterhaltung etwas Art von Code. (Natürlich sind die Dinge in vielen CS-Programmen so, aber es ist immer noch verrückt.)


Es ist nicht verrückt, es ist eine Epidemie. Ungefähr 90% des Codes, den ich von Kollegen gesehen habe, ist so wartbar wie der schiefe Turm von Pisa.
Marcel Valdez Orozco

5

Ich bin damit einverstanden, dass 4 Jahre nur genug Zeit sind, um ihnen eine gute Grundlage zu geben, auf der sie wachsen können. Ich denke jedoch, dass eine Sache, die wirklich hilft, darin besteht, dass Leute aus der Industrie in die Entwicklung des Lehrplans und sogar in das Unterrichten im Klassenzimmer involviert werden. Letztes Jahr war ich Industrie-Fellow in einer Software-Entwicklungsklasse an einer örtlichen Universität. Es war eine sehr aufschlussreiche Erfahrung für mich. Der Professor und ich haben gemeinsam an den Kursinhalten gearbeitet, und wir haben viel mehr Informationen über den Entwicklungsprozess, die Best Practices der Branche und die "realen" Situationen zusammengestellt als zuvor. Was wir entdeckten, war, dass, da die meisten Ausbilder keinen weit verbreiteten und gewarteten Code entwickeln, die Einbeziehung von Mitarbeitern aus der Industrie dazu beitrug, die dafür erforderlichen Fähigkeiten zu identifizieren und zu vermitteln.


Ich würde gerne so etwas ausprobieren.
ChaosPandion

Sie sollten sich an Ihre örtliche Universität wenden und prüfen, ob sie etwas Ähnliches hat. Wo befinden Sie sich?
Beth Whitezel

3
  1. Ja, es handelt sich zu 100% um eine Koproduktion. Sie sollten langfristige Fähigkeiten vermitteln, die während unserer gesamten Karriere von Nutzen sein werden. Unabhängig davon, ob Sie in die Wissenschaft oder in die Industrie einsteigen möchten oder nicht, müssen Sie in der Lage sein, Programme auf eine Art und Weise zu programmieren, die beibehalten werden kann, auch wenn dies nur für Sie selbst gilt.

  2. Ja, obwohl es nur in den richtigen Kursen betont werden würde. Wenn ich persönlich mit Ihnen sprechen muss, um besser zu verstehen, wie Sie versucht haben, einen Algorithmus zu implementieren, würde ich Ihre Note herabsetzen.

Selbst wenn Sie reine CS-Forschung betreiben, müssen Sie wahrscheinlich Code erstellen, um Ihre Ideen zu demonstrieren. Die richtigen Programmierkenntnisse werden Ihnen irgendwann von Nutzen sein. Warum also nicht am College anfangen?


Die langfristigen Fähigkeiten sind die CS. "Java" ist weder eine Langzeitfähigkeit noch .NET, SQL, Pascal oder COBOL. Es sei denn, Sie meinen "langfristig", "seien Sie froh, dass Sie einen Job haben, wenn sie jemanden brauchen, der diese Altsysteme wartet".
Dash-Tom-Bang

Ich bin damit einverstanden, dass die Grundkenntnisse (Base Skills, CS) erforderlich sind, aber ich meine, dass Code geschrieben werden kann, der unabhängig von der Programmiersprache, in der er geschrieben ist, leicht zu lesen und zu warten ist.
JustJohn

1
IMHO CS wird benötigt, um komplexere Probleme anzugehen, viele Leute hier brauchen keinen CS-Abschluss, um Code zu schreiben, aber wenn Sie mit einer Matrix von 10 x 10 Millionen Daten umgehen und sie manipulieren müssen, kann ich nicht abschätzen, wie Eine SE kann damit ohne CS-Abschluss umgehen.
Boos

3

Ich denke, unser Problem ist, dass wir viel mehr wie Ärzte sind, als wir zugeben möchten ... Wir sind der Meinung, dass ein vierjähriger Abschluss die Studenten auf das Schreiben von Software vorbereiten sollte. Es ist nicht einmal in der Nähe.

Unser Beruf steckt im Vergleich zu anderen Disziplinen weitgehend in den Kinderschuhen. Vielleicht sollte die Frage lauten: Wie können wir CS verbessern, damit die Studenten, die mit diesem Abschluss abschließen, besser dazu geeignet sind, in viel kürzerer Zeit produktive Mitglieder eines echten Softwareentwicklungsteams zu werden?

Vielleicht sollten wir mehr wie Medizin sein. Vier Jahre Basisarbeit (CS-Abschluss) und dann Aufenthalt - Praktizieren des Handwerks unter Aufsicht eines erfahrenen Software-Ingenieurs. Vielleicht ist es das, was wir bereits haben, aber es ist weniger formal ... Ich meine, wie ein Bewohner lernen wir unsere wertvollsten Fähigkeiten am Arbeitsplatz in unseren ersten Jobs.

Vielleicht müssen wir dies als Disziplin nur besser formalisieren.


Oder ein Meister- / Lehrlingsprogramm
Austin Salonen

1
Das MD-Programm ist kein wissenschaftliches Programm. Du willst die Wissenschaft studieren, du nimmst Biologie. Wenn Sie jedoch ein medizinisches Problem haben, bringen Sie es nicht zu einem Biologen.
David Thornley

Das ist eine sehr gute Idee: Die Tatsache zu formalisieren, dass Software Engineering auch eine Frage der Erfahrung ist. Gleiches gilt für Anwälte und Ärzte
Emiliano

Aber wovon reden wir, David? Wie viele von uns haben einen Abschluss in CS und verbringen dann tatsächlich ihre Karriere mit "Informatik"? Was die meisten von uns wirklich tun, ist, in die Welt hinauszugehen und das Handwerk der Softwareentwicklung zu üben. Es ist das gleiche wie bei einem Arzt: Sie "praktizieren" Medizin. Wir üben das Erstellen von Anwendungen.
Chris Holmes

@Chris Holmes: Ich ärgere mich sehr über die Idee, dass ein CSci-Abschluss Sie in einen Programmierer verwandeln soll, der bereit ist, mit der neuesten heißen Sprache einen Job anzustellen. Es gibt viel Platz für diese Art von Abschluss oder Zertifikat, wahrscheinlich viel mehr als das tatsächliche CSci. Ich denke, dass Softwareentwicklung hier mit dem Praktizieren von Medizin vergleichbar ist, aber Sie erhalten Ihren MD nicht von den Biologie- oder Psychologieabteilungen, sondern von der Medizinschule. Es ist ein sehr angesehener Abschluss, aber kein Doktortitel.
David Thornley

3

Ich habe einen CS-Abschluss und für ein ganzes Jahr meines Programms gab es keine Programmierung, nur Theorie. Uns wurde gesagt, dass wir keinen Abschluss in Programmieren haben, sondern in Informatik. Wenn Sie Programmierer werden möchten, besuchen Sie das Community College.

Wir haben etwas über Algorithmen, Entwurfsmuster und eine Menge Theorie zum Lösen von Problemen ohne eine Raumsprache gelernt. Programmiersprachen kommen und gehen, aber die Unterstreichungstheorie bleibt gleich.

Also, zu Ihrer ersten Frage, nein, ich glaube nicht, dass CS! = SE ein Copout ist. Es ist eine Tatsache.

Zu Ihrer zweiten Frage, nein, ich glaube nicht, dass ich es tun würde. Wie unterrichten Sie die Programmierung richtig? Was wäre, abgesehen von Schleifen, ifs, Methoden, Klassen und OOP, die richtige Programmierung und wie würden Sie sie für eine Programmiersprache relevant machen? Sie benötigen Erfahrung im Schreiben von Code, auf die Sie ein vierjähriger Abschluss nicht vorbereiten kann.

Eine Sache, die ich tun würde, ist eine Klasse über Entwicklung in der realen Welt. Quellcodeverwaltung, Ticket- / Bug-Tracking, Code-Tracing und all dieser Jazz wären ein guter Anfang, um die Absolventen auf das vorzubereiten, was sie in ihrem neuen Job erwartet.

Ich denke, es liegt an uns, wenn wir einen neuen Absolventen einstellen, um zu verstehen, dass sie wahrscheinlich keinen preisgekrönten Code schreiben werden. Sie brauchen Führung und Anleitung.


++ - hervorragende Punkte. Es wäre schön, wenn CS-Lehrpläne ein oder zwei Kurse zu diesem Thema der "realen Welt" anbieten würden, da stimme ich zu. Wir hatten an meiner Universität (1993) darüber gesprochen, aber es ging nirgendwo hin.
Dash-Tom-Bang

Wie sollten Sie Ihre Kenntnisse in den Klassen unter Beweis stellen, aus denen sich das Jahr der Theorie ohne Programmierung zusammensetzte? Rein schriftliche Prüfungen?
Carson63000

@ Carson630000 - schriftliche Aufgaben, manchmal Schreiben von Zustandsdiagrammen, manchmal Schreiben von Aufsätzen, in denen angegeben wird, wie wir ein Problem angehen und lösen oder wie wir verschiedene CS-Konzepte anwenden. Es zwang uns, die Theorie und nicht eine bestimmte Programmiersprache zu verstehen.
Tyanna

2

Für die Universität ist es wichtig, ein ausgewogenes Verhältnis zwischen theoretischem Wissen und praktischen Fähigkeiten zu finden. In verschiedenen Kursen habe ich beides gelernt. In den ersten Jahren gab es viele mathematische und Algorithmen / Datenstrukturen. Was folgte, war eine Wahl: Entweder konnten Sie weiter Informatik lernen (eine Art künstlerischer Weg, auf dem Sie zum Beispiel Kurse mit ausgefeilten Algorithmen für den Stringabgleich belegen konnten) oder sich auf das Software-Engineering konzentrieren. Während dieser Zeit musste man noch einige solide Programmierkenntnisse haben.

Ich habe mich für Software Engineering entschieden, weil ich mich nie besonders für abstrakte Probleme interessiert habe. Aber auch diejenigen, die reine Informatik mochten, mussten:

  • Programmieren Sie ein kleines Dateisystem im User Space, erstellen Sie ein linuxKernelmodul und ändern Sie den Kernel selbst. Schreiben Sie ein reines objektorientiertes Spiel in SmallTalk.
  • Schreiben Sie ein eigenes Kommunikationsprotokoll und implementieren Sie dann ein vom Lehrer ausgewähltes Protokoll (es war wirklich cool, wenn Programme von zwei Schülern leicht kommunizieren konnten, obwohl sie vorher nicht zusammengearbeitet hatten).
  • ein größeres Projekt Javain einem Team von vier erstellen ,
  • ein funktionales Programmierprojekt aufbauen,
  • Schreiben Sie mehrere solide Programme Cfür die parallele Programmierung (die Ideen waren abstrakt, aber die Bewertungen waren ziemlich hart, wie der Verlust von Punkten für die nicht ordnungsgemäße Ausgabe, wenn das Programm fehlschlug, wie es ein guter Unix programtun sollte).
  • ein Webportal mit einem Webframework erstellen (wir haben uns entschieden django, weshalb ich dieses Framework liebe),
  • erstelle ein ziemlich umfangreiches Programm mit LAMP(ich habe immer noch Albträume php, werde aber postgresqlstattdessen verwendet MySQLund ich bin sehr froh, dass ich das DBMSjetzt weiß ),
  • und wenn jemand wählte, könnte er ein Programm für seine Masterarbeit schreiben - ich schrieb 10k Zeilen pythonDesktop-Programm mit PyQt.

Vielleicht gab es andere Projekte, aber ich habe sie jetzt einfach vergessen.

Mein Punkt ist: es hängt alles von der Schule ab. Ich habe große Abneigung gegen reine Softwareentwicklung, wo Javadie Hauptsprache ist. Ich musste einmal einem Freund helfen, der eine solche Schule besucht und ein Programm für paralleles Programmieren schreiben musste. Ich musste es im Grunde für ihn schreiben, weil er das sizeof(some_string)in Cder Länge der Zeichenfolge gibt.

Ich werde ehrlich sein: Ich hasste Mathe, ich hatte Schmerzen, als ich mich auf abstrakte Aufgaben vorbereiten musste, die bei Algorithmen / Datenstrukturen-Prüfungen durchgeführt würden. Aber es gibt mir einen gewissen Vorteil: Ich kann sehr abstrakt denken. Es ist wie wenn du Kampfkunst lernst und nicht auf der Hut bist (zumindest dort, wo du es solltest). Coach kommt immer wieder und schlägt dir in den Kopf, wenn du die Hände senken musst, weil du es vergessen hast oder weil du zu müde bist, sie aufrecht zu erhalten. Aber nach einiger Zeit machst du einfach weiter so. Und es wird sehr schwer, dir ins Gesicht zu schlagen. Das gleiche gilt für abstrakte algorithmische Probleme. Verstehen Sie den Inhalt der Einführung in Algorithmen und wirklich wenige Dinge werden Sie in der Arbeit überraschen.


Klingt nach einem guten Programm. Eine Theorie. Viel Übung.
Mike Dunlavey

1

Ich denke die Antwort ist ja (in gewisser Weise).

Die Sache ist, dass es nicht möglich ist, Kindern in kurzer Zeit das Programmieren beizubringen. Sie sollten dem Programmierer das logische Denken beibringen, wie er die Probleme des Programmierers (in kleinerem Maßstab) lösen kann.

Ich bin mir sicher, dass die Schulprogramme überarbeitet werden sollten, in meinem sehr kleinen Land der "Dritten Welt" wird zum Glück versucht, dies zu erreichen. Wir sind das erste Land, das das OLPC-Programm umsetzt. http://laptop.org/en/


1

Aus eigener Erfahrung (ich bin im Moment Student) muss ich ja sagen, es ist eine Ausrede. Alle bezeichnen CS als eine Wissenschaft, die uns alle Grundlagen von Computern beibringt, und SE als einen speziellen Zweig in CS, der ausdrücklich Programmierung lehrt. Imo, jeder, der BS in CS hat, muss wissen, wie man guten und optimierten Code schreibt (auch wenn Programmierung nicht sein Spezialgebiet ist). Also ja, wenn ich eine allmächtige Position hätte, eine solche Entscheidung zu treffen, würde ich die Schüler zwingen, gute Programmierkenntnisse zu erwerben.


Mein Abschluss trägt den Titel Informatik und Softwaretechnik und war darauf ausgerichtet, Ihnen das Beste aus beiden Welten zu bieten, dh ein kompetenter Programmierer zu sein und die Theorie so gut zu kennen, dass ich in die Schule oder in die Forschung gehen kann. Ich denke, das war ein guter Ansatz.
Michael K

1

Unter der Annahme , das Ziel gute Software - Ingenieure (Programmierer) zu erziehen ist , weil die Welt sie braucht, wird sie auf Antwort OK sagen , was ich denke , soll gelehrt werden?

Erstens ist dies wichtig, da der Wissenstransfer derzeit sehr ineffizient ist. Wenn angehende Programmierer in Klassen sind, sind ihre Gedanken offen und sie nehmen auf, was sie unterrichtet werden. Gleichzeitig sind Professoren (ich war einer) allzu oft mehr daran interessiert, die Graduierten-Pipeline mit Studenten zu füllen, die an esoterischen Fächern arbeiten können. Als der Einwand erhoben wird, dass die Studenten nicht auf reale Probleme vorbereitet sind, habe ich gesehen, dass Professoren behaupten , das sei nicht ihre Aufgabe . Das ist der Job der realen Welt.

Wenn Schüler dann zu Programmierern in der realen Welt werden, möchten sie dann unbedingt von ihren neuen Kollegen lernen? Nach meiner Erfahrung nicht. Vielmehr sind sie bestrebt, das Evangelium zu verbreiten, das sie in der Schule erworben haben. Ich erinnere mich, dass ich als Student und junger Praktizierender darüber nachdachte, wie schwer es sein würde, neue Ideen unter den alten Fuddy-Duddies da draußen zu fördern. Jetzt, wo ich ein alter Fuddy-Duddy bin, sehe ich, wie schwer es ist, neuen Programmierern die Augen für den Unterschied zwischen Theorie und Praxis zu öffnen.

Ich war Ingenieurstudent in Maschinenbau und später in Elektrotechnik. Ein grundlegender Teil davon war a) mathematische Grundlagen und b) praktische Problemlösung. So sollte Software-Engineering sein, nicht nur Programmierung.

Ich denke, Software Engineering (Programmierung) sollte mit genügend Informatik unterrichtet werden, um ein funktionierendes Wissen zu haben - grundlegende Automatentheorie und Informationstheorie. Diese müssen nicht in großer Tiefe durchgeführt werden. Nach dem Erlernen grundlegender Programmierkenntnisse sollte es Kooperationsprojekte von nicht-trivialer Größe geben. Ein wesentlicher Teil davon sollte darin bestehen, Vorschläge und Überlegungen zu alternativen Lösungen spezifischer Probleme zu unterbreiten, wobei Vor- und Nachteile zu analysieren sind, nicht nur die neueste Religion oder "das nächste große Ding" oder eine Einheitsgröße. Schließlich sollte es eine Zusammenarbeit und Partnerschaft zwischen Industrie und Wissenschaft geben, damit Ideen und Verbesserungen in beide Richtungen kommuniziert werden können, was die Qualitätskontrolle erheblich verbessert.


0

Diejenigen, die es können, tun es; diejenigen, die es nicht können, lehren.

An meiner Universität ist die Wissensbasis der Lehrer sehr mangelhaft. Ich habe gesehen, wie Lehrer Schwierigkeiten hatten, zu verstehen, wie halbstrukturierte Tabellen in XML dargestellt werden, während sie einen Doktortitel in Datenbankdesign hatten. Ich habe gesehen, wie mein Versammlungslehrer mich gefragt hat, was mein Code tut, wenn es sein Codeausschnitt ist, den ich kopiert und eingefügt habe. Ich habe gesehen, wie mein Lehrer für Software-Design uns sagte, dass die Agile-Methode dieselbe ist wie die Waterfall-Methode, nur schneller, und dass das Modell des iterativen Entwicklungsprozesses nur drei Iterationen haben kann, weil das in dem Buch als Beispiel gezeigte Bild dies ist. Einer meiner Lehrer wusste nicht einmal, was eine elseif-Aussage war.

Ich glaube nicht, dass sie sich "zurechtfinden" oder sich entschuldigen, ich glaube wirklich, dass sie mit ihren Erfahrungen das Beste geben, was sie können, und die haben sie nur wenige.

Ich stimme den anderen Leuten zu, die hier posten, dass 4 Jahre nicht ausreichen, um ein erfahrener Programmierer zu werden, aber die Erfahrung, die meine Lehrer gemacht haben, reicht auch nicht aus, um sie erfahren zu machen. Es ist ähnlich wie in Ender's Shadow, wo Bean feststellt, dass die von den Lehrern in der Kampfschule verwendeten Metriken zu kurz sind, weil der letzte Krieg, der die Regel ist, zu kurz war, um wirklich zu zeigen, was tatsächlich benötigt wird. Mit anderen Worten, die Lehrer gaben ihr Bestes, aber es fehlte ihnen die Erfahrung, um zu wissen, was wirklich nötig ist, um einen guten Kommandeur (oder in diesem Fall einen guten Programmierer) zu machen.


3
Ich denke, viele Ihrer Beispiele sind offensichtlich nur Fälle, in denen Ihr Lehrer versucht, die Dinge zu Ihrem eigenen Vorteil zu vereinfachen. Those that can, do; those that cannot, teach.Dem stimme ich auch überhaupt nicht zu: Akademische und industrielle Karrieren führen zu völlig unterschiedlichen Lebensstilen. Ein Großteil der weltweiten Forschung kommt von Wissenschaftlern. Und ich sehe keine Möglichkeit, wie Sie die ursprüngliche Frage beantwortet haben.
Niemand

2
Was hat XML mit Datenbankdesign zu tun? Abgesehen von der Tatsache, dass man XML als Hintergrundspeicher für eine Datenbank verwenden könnte, wenn man an der Leistung nicht interessiert wäre? Um nicht zu sagen, dass einige Lehrer den Punkt verfehlen können (ich erinnere mich, dass ich mit einem Lehrer über Punkte gestritten habe, die aufgrund von "übermäßigem Kommentieren" entfernt wurden, als der Lehrplan zu diesem Punkt "Kommentar wie der Wind" lehrte), aber es ist irgendwie übertrieben. Wenn jemand Java lernen möchte, gibt es günstigere Möglichkeiten, als einen CS-Lehrplan durchzuarbeiten.
Dash-Tom-Bang

1
Es gibt auch die Tatsache, dass einige Universitäten schlechter sind als andere und Ihre möglicherweise eine besonders schlechte CS-Abteilung haben. Traditionell konnten CS-Leute mit Hochschulabschluss in der Industrie viel mehr Geld verdienen als in der akademischen Welt. Diejenigen in der akademischen Welt wollten also wirklich dort sein und konnten in der realen Welt keinen Job ausüben. Ich habe beides gesehen und vermute, dass das Verhältnis zwischen den Universitäten variiert.
David Thornley

Bei dash-tom-bang ist XML ein nahezu perfektes Beispiel für semi-strukturierte Datenbanken. en.wikipedia.org/wiki/Semi-structured_model
Malfist

1
So verwendetes XML ist immer noch eine Implementierung einer Datenbanktheorie. Es ist nicht selbst die Theorie.
Dash-Tom-Bang

0

Informatiker und Softwareingenieure sind unterschiedlich. Die Wissenschaftler sind die Jungs, die die verrückten Experimente durchführen und die Algorithmen entwickeln, die wir Software-Ingenieure nutzen, um besser zu werden.

Denken Sie an Chemiker, die Experimente für ein Pharmaunternehmen durchführen. Sie kümmern sich nicht darum, wie die Chemikalie in Massen hergestellt wird. Sie kümmern sich auch nicht um Marketing, Verpackung, Vertrieb oder irgendetwas, was mit dem Medikament passiert, nachdem sie es entdeckt haben. Zur Hölle, sie kümmern sich nicht einmal um den Zertifizierungsprozess. Alles, was sie interessiert, ist das Auffinden einer Chemikalie, die sich bei der Verabreichung an Testpersonen auswirkt. Das Unternehmen ist dafür verantwortlich, es darüber hinaus zu bewegen.

Informatiker sind wie diese Chemiker. Alles, was sie tun, ist, Theorien mit Code zu testen. Sie kümmern sich nicht darum, wie wartbar der Code ist. Sie beweisen eine Theorie und fahren mit der nächsten fort. Jemand anderes packt diesen Algorithmus zusammen und macht ihn für die Massen nützlich, und wir haben MP3 oder Computer Vision mit dem Kinect oder Streaming Video auf Ihrem iPhone. CS! = SE ist also ein gültiges Argument.

WRT den zweiten Teil Ihrer Frage. Wenn ich einen Abschluss in Musiktheorie machen würde, gäbe es vielleicht einen erforderlichen Kurs in Songwriting oder so, aber ich würde nicht verlangen, dass jemand ein Instrument lernt. Es liegt an den Schülern, das gewünschte Wissen zu finden. Informatik ist nicht Software-Engineering ... wenn Sie SE lernen möchten, belegen Sie ein Doppel-Hauptfach.


0

Edsger Wybe Dijkstra war ein niederländischer Informatiker.

Er erhielt den 1972 Turing Award für grundlegende Beiträge zur Programmiersprachen zu entwickeln , sagte einmal:

"In der Informatik geht es nicht mehr um Computer als um Teleskope."

CS ist wirklich anders als eine SE. (CS! = SE).

Ein CS ist ein Wissenschaftler, der sich Kenntnisse in COMPUTER SCIENCE angeeignet hat.

COMPUTER SCIENCE oder Informatik (manchmal abgekürzt CS) ist das Studium der theoretischen Grundlagen von Information und Berechnung sowie praktischer Techniken für deren Implementierung und Anwendung in Computersystemen. Es wird häufig als systematische Untersuchung algorithmischer Prozesse beschrieben, die und Informationen umwandeln.

Die Informatik hat viele Teilgebiete, zum Beispiel:

  • Theoretische Informatik
  • Theorie der Berechnung
  • Algorithmen und Datenstrukturen
  • Computerelemente und Architektur
  • Multiprozessing
  • Computerwissenschaft
  • Künstliche Intelligenz
  • Software-Systeme

Viele von uns brauchen diese Fähigkeiten nicht in der täglichen Arbeit oder zumindest ein wenig davon.

SOFTWARE ENGINEER (SE) ist ein Beruf, der sich dem Entwerfen, Implementieren und Ändern von Software widmet, damit diese von höherer Qualität, kostengünstiger, wartbarer und schneller zu erstellen ist. Es handelt sich um einen "systematischen Ansatz für die Analyse, den Entwurf, die Bewertung, die Implementierung, den Test, die Wartung und das Re-Engineering einer Software durch Anwenden des Engineerings auf die Software".

Als CS-Kenntnisse sollte er das Wissen haben, um wirklich komplexe Probleme zu bewältigen, ohne wirklich gute Programmiersprachen zu kennen. IMHO hier können wir einen anderen Thread eröffnen, in dem ein DEGREE für mich NUR ein STARTPUNKT und kein END-ZIEL ist.

Als SE-Kenntnisse sollte er über das Wissen verfügen, um die Produktion dieses wirklich komplexen Problems und die Entwicklung eines Teams oder eines Projekts in diesem Bereich zu verwalten.

Gemeinsam machen Sie die Forschung in der Wissenschaft von einem CS in Applied Science mit Hilfe einer SE.

Ich meine nicht, dass CS besser ist als SE, ich meine CS! = SE.

Diese Art von Frage ist die gleiche Frage, die sich Nicht-Computer-Benutzer stellen, wenn sie Sie fragen, warum Sie als Programmierer das Problem des Programms X, Y, Z auf dem Betriebssystem J, M, nicht telefonisch beheben können. N. ;)

Eigentlich bin ich nach 10 Jahren Unix-Systementwicklung im Sicherheitsbereich total gelangweilt und nachdem ich diese Frage gelesen habe, verstehe ich, dass ich mehr Informatik und weniger Computersprache und Computersystem oder -protokoll studieren muss!

Niemand bei meiner Arbeit kann mit dem Unterschied zwischen SE und CS umgehen! Es ist wirklich eine schlechte Sache.

Wenn Sie der Meinung sind, dass eine CS eine Entschuldigung für schlechte Programmierkenntnisse sein kann, verpassen Sie den Punkt, was eine CS ist und was SE ist.

Ich nehme an, Sie sind eine SE, wissen Sie zum Beispiel, dass alle Sprachen, alle Paradigmen und alle mit der Computersprache zusammenhängenden Dinge in einer Reihe partieller rekursiver Funktionen mathematisch ausgedrückt werden können und was auch immer Sie eine neue Sprache lernen, JEDE NEUE SPRACHE, Sie sind es nur eine neue Abstraktion über die gleiche rekursive Teilfunktion lernen?

habe Spaß :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.