Warum unterrichten sie diese Dinge nicht in der Schule? [geschlossen]


118

Im Laufe des Sommers hatte ich das Glück, in Google Summer of Code einzusteigen. Ich habe viel gelernt (wahrscheinlich mehr als ich in der Summe aller meiner Universitätskurse gelernt habe). Ich frage mich wirklich, warum sie nicht einige der Dinge unterrichten, die ich früher in der Schule gelernt habe. Um ein paar zu nennen:

  • Unit-Test
  • Versionskontrolle
  • agile Entwicklung

Es scheint mir, dass sie viel Zeit damit verbringen, andere Dinge wie Datenstrukturen und Algorithmen im Voraus zu lehren. Obwohl ich immer noch denke, dass es sehr wichtig ist, diese früh zu lernen, warum unterrichten sie nicht mehr von diesen drei vor ihnen? Oder ist es nur meine Schule, die nicht viel von diesem Zeug unterrichtet?

Versteh mich nicht falsch, ich denke nicht, dass es für Universitäten wünschenswert ist, immer die angesagtesten Programmier-Moden zu unterrichten, aber sollten meine Professoren mir nicht etwas anderes beibringen als "Zeichnen Sie ein Diagramm, bevor Sie mit dem Codieren beginnen"?


47
Ich finde, dass die meisten Lehrer lange genug nicht in der realen Welt waren, um nicht mit den neuesten Trends wie Versionskontrolle und Komponententests auf dem neuesten Stand zu sein.
Ryu

14
Ich bin mir nicht sicher, ob es fair ist, die Versionskontrolle als "neuesten Trend" zu bezeichnen. SCCS wurde 1972 entwickelt - en.wikipedia.org/wiki/Source_Code_Control_System
JeffH

2
Sie unterrichten diese Dinge am RIT.
Geowa4

6
Du hast recht. Sie sollten diese Dinge anstelle von Datenstrukturen, Algorithmen, Parallelität, Netzwerken und Datenbanken lehren. Ich meine, wer jemals lernen muss diejenigen .
Humphrey Bogart

1
Ich denke, das hängt stark von der Universität ab, an der Sie eingeschrieben sind. Zumindest für die Universität, die ich besuche, kann ich Ihnen sagen, dass Unit-Tests von Anfang an eine Voraussetzung für alle unsere CS-Hausaufgaben sind (auch wenn sie nicht den Best Practices folgen, aber ein Anfang sind) sowie für die Versionskontrolle. Abgesehen davon stimme ich der Meinung zu, dass die Universität Ihnen universelle, abstrakte Konzepte beibringen sollte. Um das Testen, die Versionskontrolle und die agile Entwicklung richtig zu verstehen, ist viel Erfahrung aus erster Hand erforderlich, die Sie wahrscheinlich ohnehin nicht in den vollständigen Lehrplan einfügen.
Johannes Rudolph

Antworten:


188

Die einfachste Antwort auf Ihre Frage ist, dass die Bereiche Informatik und Softwareentwicklung beide sehr neu und nicht sehr gut verstanden sind. Obwohl alle wissenschaftlichen und technischen Disziplinen in der heutigen Zeit schneller voranschreiten, können andere Bereiche auf viel mehr Erfahrung zurückgreifen und es gibt ein viel breiteres gemeinsames Verständnis ihrer Funktionsweise.

Zum Beispiel wissen Bauingenieure trotz der jüngsten Fortschritte in der Materialwissenschaft seit etwa 2000 Jahren, wie man einen Bogen baut, der nicht umfällt, und dies kann an der Universität mit relativ wenig Kontroversen gelehrt und gelernt werden. Obwohl ich Ihnen in Bezug auf die Techniken, die Softwareentwickler erlernen sollten, vollkommen zustimme, basiert diese Vereinbarung auf persönlichen Erfahrungen und informellen Überlegungen. Um eine sozial akzeptierte "Best Practice" zu sein, benötigen wir quantitative Daten, deren Erfassung sehr teuer sein kann: Wie viel hilft die Versionskontrolle? Wie hilft es? Unit Testing? Wir können über die Wirksamkeit verschiedener Techniken nachdenken, aber tatsächlich zu beweisen, dass die Wirksamkeit endgültig sehr teuer wäre. Wir müssten von Anfang bis Ende ein vollständiges, realistisches Softwareprojekt ausführen. mehrfach mit Gruppen von Programmierern, die über gleiches Fachwissen verfügen und unterschiedliche Techniken anwenden. Zumindest würden wir viele Daten über bestehende Projekte benötigen, die diese Projekte nicht veröffentlichen würden.

Bauingenieure haben jahrtausendelange Brücken zu sehen, mit vielen Informationen. Softwareentwickler hingegen verfügen nur über wenige Jahrzehnte an Informationen, von denen die meisten geheim gehalten werden, da Unternehmen kaum motiviert sind, Informationen über die Effektivität ihrer Entwickler zu sammeln und zu veröffentlichen, selbst wenn sie diese sammeln (was am häufigsten der Fall ist) 't).

Es gibt auch einige Verwirrung der Felder. Softwareentwicklung oder Software "Engineering" ist wirklich etwas anderes als Informatik. Softwareentwickler benötigen Kenntnisse in Informatik, aber an den Grenzen der algorithmischen Komplexität zu arbeiten oder über Parallelität nachzudenken, wird ein arbeitender Programmierer nicht jeden Tag tun. In ähnlicher Weise wird ein echter "Informatiker" Tonnen von Wegwerfcode schreiben, der einfach nicht funktioniert oder nichts Interessantes tut und nicht so stark von der Strenge profitiert, die ein tatsächliches Softwareprodukt hätte.

Das Aufkommen des Internets und der Open-Source-Community liefert möglicherweise genügend Daten, um diese Fragen endgültig zu beantworten. Selbst wenn die Antworten morgen verfügbar wären, wird es wahrscheinlich 100 Jahre dauern, bis sie die internationale Gesellschaft so weit durchdringen, dass sich alle einig sind, worüber sollte in Schulen unterrichtet werden.

Schließlich gibt es einige wirtschaftliche Überlegungen. Es ist eine relativ kurze Zeit vergangen, seit fast alle an der Softwareentwicklung Beteiligten einen billigen und einfachen Zugang zu dedizierten Maschinen hatten, um die gewünschten Entwicklungstools auszuführen. Vor ein paar Jahrzehnten schien es vielen Menschen leichtfertig teuer gewesen zu sein, eine Maschine nur für die Durchführung Ihrer Tests zu verwenden oder sogar eine unendliche Geschichte des Quellcodes zu speichern.


44

Weil unsere Lehrer:

  1. Nie versucht, Unit-Tests,
  2. Ich weiß nicht, wie man die Versionskontrolle benutzt und
  3. Ich habe noch nicht einmal von "agiler Entwicklung" gehört.

Die Schüler sollten die Angelegenheit selbst in die Hand nehmen. Wir haben das getan und sind gut geworden, nicht wahr?


3
"Wir haben das getan und sind gut geworden, nicht wahr?" - EINIGE von uns ... einige gingen auf dem Weg verloren, weil die Lehrer nicht alles taten, was möglich war.
Andrei Rînea

12
Was auch immer die Lehrer tun, die Leute werden sich immer noch beschweren. Der Scharfe ist immer hungrig nach Wissen und wird sich als gut herausstellen.
Jeffrey Jose

Unsere Lehrer waren keine Softwareentwickler, und wir wollten keinen Abschluss in Softwareentwicklung machen. Wir haben uns größtenteils für die Informatik entschieden, die ein anderes Tier ist und sich mehr auf Theorie als auf Praxis konzentriert.
Dean J

1
@mislav: Wer waren deine Lehrer?
CesarGon

43

Leonardo da Vinci schrieb:

Diejenigen, die sich für die Praxis ohne Wissenschaft begeistern, sind wie ein Pilot, der ohne Ruder oder Kompass in ein Schiff steigt und nie die Gewissheit hat, wohin er fährt. Die Praxis sollte immer auf fundierten theoretischen Kenntnissen beruhen.

Die guten Schulen unterrichten sowohl Theorie (Datenstrukturen, Algorithmen usw.) als auch Praxis (Unit-Test, Versionskontrolle usw.). Dies erfordert eine angemessene Mischung von Fähigkeiten, damit beide Seiten dieser Münze richtig unterrichtet werden können. Eine Fakultät, die ausschließlich aus theoretischen Typen ohne wirkliche Erfahrung besteht, reicht nicht aus. Ebenso reicht eine Fakultät, die ausschließlich aus Praktikern besteht, nicht aus. Sie brauchen eine Mischung, und die guten Schulen haben das.


1
Ich stimme dem Hauptschwerpunkt Ihrer Aussagen zu, aber ich würde argumentieren, dass das Problem der gleichzeitigen Verwaltung mehrerer Versionen ein zentrales theoretisches Element ist, das zu verstehen ist. Im Gegensatz dazu würde ich zustimmen, dass die Verwendung von Tools wie CVS und SVN zur Lösung dieses Problems fest in den Bereich der "Praxis" gehört.
Andrew Swan

Es ist jedoch wahrscheinlich nicht erforderlich, die Versionskontrolle in mehr als ein paar Vorlesungen während eines allgemeinen Kurses vom Typ "Einführung in das Software-Engineering" zu behandeln. Behandeln Sie, was es tut, grundlegende Verwendung, vielleicht ein wenig über das Verzweigen / Zusammenführen.
Adam Jaskiewicz

Ich hatte eine solche Klasse namens "Team Software Project". Es ging nicht um die Versionskontrolle, sondern um UML, Softwareentwicklungsmethoden, Anforderungserfassung, Komponententests usw.
Adam Jaskiewicz

@ Alan, über welche Schulen sprichst du?
Lebensbalance

40

Die Informatik war schon immer etwas widersprüchlich; Der Teil, in dem es um Computer geht, ist keine Wissenschaft, und der Teil, der eine Wissenschaft ist, handelt nicht von Computern.

Universitäten tendieren dazu, sich mehr auf das "wissenschaftliche" Ende zu stützen (Algorithmen, Datenstrukturen, Compiler usw.), weil diese Dinge viel "zeitloser" sind als die aktuellen Best Practices der Branche, die sich von Jahr zu Jahr weiterentwickeln und ändern. Die Versionskontrolle hat zum Beispiel in den letzten 5 oder 10 Jahren erstaunliche Änderungen erfahren, aber Big-O ist immer noch Big-O, und Hashing, Btrees und Rekursion sind immer noch so nützlich wie vor 40 Jahren. Ihre Idee ist im Allgemeinen, Ihnen genügend Grundlagen zu geben, damit Sie Tools wie git aufgreifen und verstehen können, was dies bedeutet, wenn Sie erfahren, dass die zugrunde liegende Datenstruktur ein azyklisch gerichteter Graph von SHA-1-Hashes ist und dass die Entwickler hart gearbeitet haben um die Anzahl der Systemaufrufe so zu optimieren, dass sie io-gebunden sind.

Denken Sie jetzt darüber nach, wo Sie all die Dinge gelernt haben, die Sie wissen mussten, um diesen letzten Satz zu verstehen. Wenn die Antwort "Universität" lautet, machen sie einen guten Job.


13

Alles ist eine Modeerscheinung. Sie werden in Ihrem ersten Studienjahr mehr lernen als in all Ihren Studienjahren. Informatik hat nichts mit Computern zu tun.

Das College bietet Ihnen einen Werkzeugkasten voller Werkzeuge. Dies ist ein Schraubendreher, das ist ein Halbmondschlüssel. Sie könnten jedes Werkzeug einmal im College verwenden. Es ist, wenn Sie in die reale Welt eintreten, wenn Sie wirklich herausfinden, was Sie haben. Sie sortieren die nützlichen aus den anderen aus, die Sie für alle Fälle zu Hause auf der Werkbank lassen möchten, und die, die Sie jeden Tag in der Tasche haben.

Tqm, Iso, Cmm, Agile usw. Dies sind alles Modeerscheinungen, die sie kommen und gehen werden. Keine der erfolgreichen ist mehr als nur gesunder Menschenverstand. Alle erfolgreichen Ingenieure und Unternehmen verwenden einen gesunden Menschenverstand, der sie erfolgreich gemacht hat. Nur wenige brauchten einen Namen dafür. Das Problem ist, dass Sie keinen gesunden Menschenverstand verkaufen können. Ein Manager kann seinen Wert für das Unternehmen nicht beweisen, indem er gesunden Menschenverstand ohne eingängigen Namen schult und kauft. Geben Sie einen Namen ein, den ihre Vorgesetzten in einem Nachrichtenartikel oder einer Zeitschrift gelesen haben, und der Manager behält seinen Job und Sie behalten Ihren. Nur sehr wenige Unternehmen, die behaupten, diese Praktiken zu befolgen, tun dies tatsächlich. Die meisten schreiben einen Scheck an einen Berater und erhalten ihr Jahres- und / oder Lebenszeitzertifikat bei einem Club, damit sie eine Grafik auf ihrer Website oder ein Etikett auf der Verpackung ihres Produkts anbringen können. Viele werden argumentieren, dass dies selten ist ... dort gewesen, gesehen, es passiert. Dies ist alles Teil des Geschäfts. Manchmal muss man Abstriche machen, um profitabel zu bleiben und die Türen offen und die Lichter an zu halten. Die Hardcore-Anhänger all dieser Praktiken haben alle argumentiert, dass der letzte eine Modeerscheinung war und dieser nicht, der letzte war wirklich zu teuer, um zu folgen, dieser ist nicht. Der letzte war eine Fälschung, Sie haben gerade einen Berater eingestellt, dieser ist echt. Wie Programmiersprachen werden sich auch diese weiterentwickeln. Der letzte war eine Fälschung, Sie haben gerade einen Berater eingestellt, dieser ist echt. Wie Programmiersprachen werden sich auch diese weiterentwickeln. Der letzte war eine Fälschung, Sie haben gerade einen Berater eingestellt, dieser ist echt. Wie Programmiersprachen werden sich auch diese weiterentwickeln.

Ihre Fähigkeit, die Realität des Geschäfts, das Universitätssystem und Ihre Rolle darin zu verstehen, ist der Schlüssel. Wählen Sie wie alles im Leben Ihre Schlachten. Es ist nicht die Universität oder das Geschäft oder die Regierung oder die Aufgabe eines anderen, Sie zu unterrichten, die Sie brauchen oder wissen wollen. Es ist Ihre Aufgabe, nach der Nummer eins Ausschau zu halten. Ebenso können Sie niemandem die Schuld geben, Ihnen die Zeit dafür zu geben, Sie müssen es tun. Sie werden vom Pferd fallen, Sie sind kein Opfer, stehen auf und steigen wieder ein, keine Ausreden, das Leben ist kein fairer Umgang damit. Nutzen Sie Handouts und geben Sie nicht vor, unabhängig zu sein. Und zahlen Sie auf jeden Fall Ihre Gebühren, saugen Sie einer Firma keine Handzettel aus, ohne ihnen dafür etwas zu geben (Ihr Bestes zu der Zeit?).

Warum denken die Leute, dass cmm oder agil oder einer der anderen eine Modeerscheinung ist? Warum denken sie, dass sie nicht sind? Warum hat Ihnen der Professor das Programm so beigebracht? Gotos oder Konstanten vermeiden oder dies und das vermeiden? Liegt es daran, dass es zuverlässigeren Code erzeugt? Code mit besserer Leistung? Reduziert menschliches Versagen? Oder liegt es daran, dass es einfacher ist, Papiere / Programme zu bewerten, damit sie mehr Zeit für Recherchen haben? Liegt es daran, dass sie nicht programmieren können und nur einem anderen Buch zu diesem Thema folgen? Haben sie Ihnen beigebracht, dass Sie keinen wartbaren, zuverlässigen und leistungsstarken Code haben können? Sie können nicht einmal zwei wartbare Störungen auswählen, die sowohl zuverlässig als auch leistungsstark sind? Manchmal opfern Sie Zuverlässigkeit für Leistung. Manchmal ist Ihnen Zuverlässigkeit oder Leistung egal, Sie möchten nur die Version 117.34 verwenden. 2 eines weiteren Buchhaltungssoftwareprogramms auf Version 118.0.0. Ihr Geschäftsmodell besteht aus dem Verkauf von Versions-Upgrades und technischem Support. Für Softwareentwickler kann jeder alte Roboter denselben Code auf dieselbe Weise schreiben. Ersetzen Sie den ausgebrannten durch den frisch aus dem College und verkaufen Sie weiterhin Upgrades.

Es gibt keine universellen Antworten auf diese Fragen. Sie müssen herausfinden, was Ihre Meinung ist, damit leben und sie verteidigen. Ändere deine Meinung, lebe damit und verteidige es.

Alles in Frage stellen ... werde ich mich wirklich verbrennen, wenn ich den heißen Topf auf dem Herd berühre? Verursachen die psychologischen Auswirkungen von Angst mehr Schaden als nur Verbrennungen? Gibt es eine sichere Möglichkeit, die Antwort zu testen, ohne verletzt zu werden?

Wenn ich es mir leisten konnte, kaufte ich Transistoren, Kappen, Widerstände usw. in meinem Schlafsaal und schmolz sie schließlich ein, die alle einen ausgeprägten schlechten Geruch haben. Es ist weitaus billiger und einfacher, nur einen Verstärker für Ihre Stereoanlage zu kaufen, als am Tag nach Ihrer ersten Transistorklasse einen zu bauen. Da Linus die Ausnahme ist, ist es natürlich einfacher, nur ein Betriebssystem zu kaufen als eines zu schreiben ... Sie können mehr erledigen, obwohl das, was Sie in dieser Zeit lernen, anders ist als das, was Linus gelernt hat.

Die Welt innerhalb und außerhalb der Universität wird diese Formeln (cmm, agil usw.) zur Lösung von Problemen übernehmen, und wenn die nächste herauskommt, werden sie sie genauso schnell fallen lassen. Sie müssen die Versionskontrolle nicht verwenden, um erfolgreich zu sein, es gibt genauso viele Erfolge mit wie ohne (nun ja, aufgrund des Alters der Branche gibt es bisher viel mehr Erfolge ohne Versionskontrolle). Ebenso können Sie mit minimalen Tests erfolgreich sein (sehen Sie sich die wirklich großen Namen in der Computerindustrie als Beispiele an). Sie können erfolgreich sein, indem Sie Ihren eigenen Code testen, und Sie können erfolgreich sein, indem Sie die Regel befolgen, dass Sie niemals Ihren eigenen Code testen sollten. Sie können mit Emacs erfolgreich sein und Sie können mit vi erfolgreich sein. Sie müssen entscheiden, welche Mischung für Sie funktioniert, und wenn Sie Glück haben, finden Sie einen Arbeitsplatz, der mit Ihnen übereinstimmt.

Wenn Sie das College verlassen und in die reale Welt eintreten, hören Sie zu und arbeiten Sie mit den "Oldtimern" und streiten Sie sich mit ihnen. Sie haben jahrzehntelange bis jahrhundertelange Erfahrung, Fallen, in die sie geraten sind und die Sie möglicherweise vermeiden und / oder selbst testen (vielleicht stellen Sie fest, dass Sie den heißen Topf nicht berühren müssen, um herauszufinden, dass er Sie verbrennen wird). Die meisten werden mindestens eine oder zwei dieser Modeerscheinungen kommen und gehen sehen, insbesondere, wie stark sie verbrannt wurden und was sie getan haben, um sich davon zu erholen. Sie kennen viele verschiedene Möglichkeiten, Dinge zu testen, und die Namen der Teststile, die auch gekommen und gegangen sind. Was funktioniert, was nicht. Wo das Risiko liegt und wie Sie vermeiden können, Zeit mit einer Tangente zu verschwenden. Wenn Sie reifen und zum Oldtimer werden, geben Sie ihn weiter. Zahlen Sie für das, was Sie gelernt haben, indem Sie versuchen, diejenigen zu unterrichten, die Ihnen folgen. Denken Sie daran, ihnen beizubringen, wie man fischt. Gib ihnen nicht nur einen Fisch. Und manchmal muss man sie scheitern lassen, bevor sie Erfolg haben, damit sie nicht zu stark verbrannt werden.

Was ich hier wirklich sagen wollte, ist, dass wir uns gerade in einer seltenen Situation befinden, in der wir eine Entwicklung eines Paralleluniversums beobachten (und es vielleicht beeinflussen) können. Ja, Informatik ist eine junge Wissenschaft im Vergleich zu Physik. Gleichzeitig hat es sich um ein Vielfaches weiterentwickelt. Je nachdem, wo Sie arbeiten und mit wem Sie zusammenarbeiten, können Sie möglicherweise Hardware-Ingenieure beobachten. Programmiersprachen in der Hardware-Welt sind sicherlich nicht neu, aber sie haben sich nicht so schnell entwickelt wie die Software-Welt. Software hatte einige Jahrzehnte Vorsprung. Hardware hat Softwareingenieure immer als Bürger zweiter Klasse angesehen. Unsere Arbeit ist einfach, ihre Arbeit ist schwer. (Hinweis: Ich bin sowohl Hardware- als auch Softwareentwickler.) Interessant ist, dass sie sich derzeit noch mit elementaren oder kindlichen Problemen befassen. Warum sollte ich die Versionskontrolle verwenden müssen? Ich bin der einzige, der an diesem Chip arbeitet. Ihre Erfahrung mit gcc oder anderen billigen Compilern oder kostenlosen IDEs kann möglicherweise nicht mit den teuren Tools verglichen werden, die ich verwende. Wenn das Unternehmen der Meinung ist, dass Sie es wert sind, es zu verwenden, oder sogar wissen, wie man es verwendet, würde es Ihnen eine Kopie kaufen. Und eine lange Liste anderer Ausreden. Ich hatte das Vergnügen, sowohl vhdl als auch verilog zu lernen und in beiden innerhalb einer Woche produktiv zu werden, was von einem solchen Hardware-Ingenieur beinahe gewagt wurde (obwohl mein Diplom besagt, dass Elektrotechniker meine Berufsbezeichnung Software-Ingenieur ist). Ich wollte diese Sprachen lernen, als mir die Werkzeuge zur Verfügung standen, blieb ich bis in die Nacht im Büro und brachte mir selbst bei. Von diesem Zeitpunkt an erkannte insbesondere dieser Ingenieur, dass das, was ich sagte, wahr ist. Sprachen sind nur Syntax. Die Programmiergrundlagen sind die gleichen, die Tools machen alle das Gleiche. Seine Äpfel und Äpfel nicht Äpfel und Orangen.

Im Allgemeinen ist es jedoch immer noch schwierig, die Nachricht zu senden, dass eine dieser beiden parallelen Branchen viel mehr Erfahrung mit Sprachen, Programmiergewohnheiten, Quellcodeverwaltung, Tests, Tools, Programmierumgebungen usw. hat als die andere. Das Problem, das ich zu lösen versuche, besteht darin, die Hardware-Designs während der Entwicklung zu verwenden und kostengünstige Funktionssimulatoren zu erstellen, die wir mit einer Simulation (virtuelle Maschine) des Prozessors verknüpfen können, damit wir mit dem Testen der Hardware und der Entwicklung des Tests beginnen können Lieferbare Software lange bevor wir zu Silizium gehen. Nein, daran ist nichts "Neues", aber wir haben keinen Mechanismus, um den neuesten Code abzurufen und Änderungen im Code zu verfolgen, um zu sehen, wo wir unsere Zeit konzentrieren müssen. Kein Mechanismus zum Verfolgen der Dokumentation, die die Benutzeroberfläche (Programmierschnittstelle) zur Hardware definiert. Die eine goldene Kopie befindet sich in binärer Form im E-Mail-Posteingang einer anderen Person und ändert sich nur, wenn Sie den Verilog nicht lesen müssen, um herauszufinden, was los ist. Warten Sie, dieser Verilog ist wie alt? Dieser Fehler, den ich die ganze Woche mit dir verbracht habe, hat vor drei Wochen herausgefunden und behoben? Fliegen wir also einfach zu einem Urlaubsort und feiern sechs Monate lang und warten darauf, dass die Hardware-Leute ihre Aufgabe erledigen und sie uns über die Mauer werfen, oder nutzen wir diese Gelegenheit, um zu versuchen, geduldig und optimistisch zu sein und ihnen beizubringen, dass sie es tun Es gibt vernünftige Methoden, die nicht so aufdringlich sind und es ihnen ermöglichen, sowohl ihre Arbeit zu erledigen, ihre Arbeit zu sichern als auch ihre Inhalte zur Begutachtung durch Fachkollegen zu teilen ... Dieser Verilog ist wie alt? Dieser Fehler, den ich die ganze Woche mit dir verbracht habe, hat vor drei Wochen herausgefunden und behoben? Fliegen wir also einfach zu einem Urlaubsort und feiern sechs Monate lang und warten darauf, dass die Hardware-Leute ihre Aufgabe erledigen und sie uns über die Mauer werfen, oder nutzen wir diese Gelegenheit, um zu versuchen, geduldig und optimistisch zu sein und ihnen beizubringen, dass sie es tun Es gibt vernünftige Methoden, die nicht so aufdringlich sind und es ihnen ermöglichen, sowohl ihre Arbeit zu erledigen, ihre Arbeit zu sichern als auch ihre Inhalte für Peer Review zu teilen ... Dieser Verilog ist wie alt? Dieser Fehler, den ich die ganze Woche mit dir verbracht habe, hat vor drei Wochen herausgefunden und behoben? Fliegen wir also einfach zu einem Urlaubsort und feiern sechs Monate lang und warten darauf, dass die Hardware-Leute ihre Aufgabe erledigen und sie uns über die Mauer werfen, oder nutzen wir diese Gelegenheit, um zu versuchen, geduldig und optimistisch zu sein und ihnen beizubringen, dass sie es tun Es gibt vernünftige Methoden, die nicht so aufdringlich sind und es ihnen ermöglichen, sowohl ihre Arbeit zu erledigen, ihre Arbeit zu sichern als auch ihre Inhalte für Peer Review zu teilen ...

Denken Sie daran, dass Hardware-Ingenieure das College mit einer Schachtel glänzender neuer Tools verlassen haben, genau wie Sie. Sie haben 17 verschiedene Programmiersprachen gelernt, von denen Sie möglicherweise nur eine verwenden. Der Rest der Sprachen, die Sie in Ihrer Karriere geschrieben haben, wird nach dem Verlassen des College erfunden. Wenn sie das College verlassen haben, können sie Ihnen sagen, was sie über Kalkül und Relativitätstheorie wissen, wie viele Elektronen sich in jedem der Elemente befinden, und die Ladung um eine Gaußsche Oberfläche berechnen. Aber der Großteil ihrer Karriere ist eins, null und oder nicht (hey, wir haben diese gemeinsam, alles, was Sie wirklich über Computer wissen müssen, eins, null und oder und nicht Hardware- oder Software-Ingenieur). Zugegeben, die Grundgesetze der Physik, der Analysis, der Elektronen werden sich nicht so schnell ändern wie die Programmiersprachen. Die Grundlagen der Programmierung sind jedoch in allen Sprachen gleich und werden auch in Zukunft so bleiben. Haben Sie das College verlassen und gewusst, dass Java anders und besser ist als C ++, weil dies und das und das andere?

Wie bei jedem anderen Unternehmen ist es die Aufgabe der Universitäten, profitabel zu bleiben. Sie müssen die richtigen Akademiker einstellen, um sowohl die richtigen Studenten als auch die richtigen Forschungsgelder und die richtigen Arten von Forschung zu bringen, um die Universität rentabel zu machen. Sie müssen die richtigen Klassen anbieten, um die richtigen Studenten zu bringen und die richtigen Absolventen hervorzubringen, damit Arbeitgeber im Laufe der Jahrzehnte sowohl in der Nähe der Universität als auch hoffentlich in der Ferne erkennen, dass diese Universität produktive und profitable Mitarbeiter hervorbringt. (Ja, und manchmal muss man die richtigen Athleten für die richtige Sportart gewinnen, um die richtige Menge an TV-Zeit und die richtige Menge an Bekanntheit und Sporteinnahmen zu erhalten.) Einige Universitäten werden C ++ und Java unterrichten, andere nie. Einige werden CMM erfinden, andere werden Agile lehren, andere werden beides nicht tun. Wenn die Universität überhaupt einen Wert hat, gibt es etwas zu lernen. Sie werden dir nicht alles beibringen, was es zu lernen gibt, aber sie werden etwas Nützliches haben. Erfahren Sie, dass etwas, während Sie dort sind, eine angemessene Anzahl verschiedener Arten von Werkzeugen in Ihrem Werkzeugkasten sammelt. Verlasse die Universität und bekomme einen Job. Wenn Ihre Toolbox scheiße ist, finden Sie vielleicht eine andere Universität und erwähnen Sie nie die erste. Wenn es ein guter Werkzeugkasten ist, verwenden Sie diese Werkzeuge und erstellen Sie einige neue in Ihrer Freizeit. Wenn es ein ziemlich guter Werkzeugkasten ist, sagen Sie gute Dinge über diese Universität und die guten Akademiker, von denen Sie dies und das gelernt haben, und zahlen Sie der Schule das zurück, was sie Ihnen gegeben haben. Auch wenn Sie nicht alle möglichen Werkzeuge im universellen Katalog der Universitätswerkzeuge erhalten haben, werden Sie mit einer bestimmten Teilmenge davonkommen. Auch wenn Sie nicht graduieren ...


12

Ich habe diese Dinge unterrichtet, als ich Adjunct am Oregon Institute of Technology war. Sie werden nur spärlich unterrichtet.


3
Du bist eine Verirrung. Und danke, dass du so gut bist.
Auch Mien

Wie war der Titel der Klasse?
Dean J

11

Die einfachste Antwort ist, dass Sie Informatik studieren und die Dinge, die Sie aufgelistet haben, nicht wirklich mit dem akademischen Bereich der Informatik zusammenhängen. Software - Entwicklung könnte etwas sein , dass Sie tun mit der Informatik, etwas , das auf den Blöcken der Builds , was Sie gelernt haben ... aber Informatik und Softwareentwicklung sind nicht das Gleiche.

Klassen, die Ihnen die Versionskontrolle beigebracht haben oder wie Sie effektive Komponententests schreiben ... das würde Ihnen einen Beruf beibringen , nämlich (gute) Softwareentwicklung.


10

Oh Gott, lass mich nicht anfangen

Ich hatte einmal den Dekan von cs an einer angesehenen Universität, der mir sagte, dass objektorientierte Programmierung nur eine Modeerscheinung sei, so dass sie keine Kurse für vorübergehende Phantasien wie C ++ anboten

Warum sie diese Dinge nicht unterrichten, ist das College da, um Ihnen die Grundlagen der Disziplin beizubringen, nicht unbedingt die besten Praktiken der Branche


2
Oder anders ausgedrückt: Die Universitäten sehen ihre Rolle (zu Recht oder zu Unrecht) darin, eher akademische Bildung als Berufsausbildung anzubieten. Aus diesem Grund wissen viele neue Absolventen nur sehr wenig über das Handwerk der realen Programmierung (z. B. das Schreiben von wartbarem Code).
Andrew Swan

Und jetzt unterrichten sie (zumindest in den ersten Jahren) an vielen Universitäten nur noch Java. Ah, die Ironie.
Matthew Schinckel

Wann hat er dir gesagt, dass OOP eine Modeerscheinung ist? Bis zum Aufkommen von Java war OOP einer Modeerscheinung näher als das erforderliche Wissen.
Andrew Prock

@ [drawster]: 1994, obwohl ich denke, dass Sie Java viel zu viel Anerkennung schenken. OOP ist eine logische Weiterentwicklung der Programmiersprachenentwicklung. es in jeder Phase seiner Geschichte (noch viel weniger im Jahr 1994) als "Modeerscheinung" zu bezeichnen, bedeutet für einen CS-Dekan eine Ignoranz, die über das blasse Maß hinausgeht.
Steven A. Lowe

2
Was ist mit der falschen Zweiteilung zwischen akademisch und real / praktisch? Fast jede einzelne Idee, die Sie in Ihrer "realen" Arbeit verwenden, stammt aus der akademischen Gemeinschaft oder wurde dadurch verbessert. Woher kommt Ihrer Meinung nach der Mangel an GOTO? Objekte kamen 1967 von Informatikern. Viele CS-Leute waren sich der Vorteile von OOP nicht klar und es ist immer noch eine unentschlossene Sache. Die Industrie glaubt, dass es hilft, aber es gibt viele gescheiterte Projekte, die das Gegenteil beweisen.

9

Nun, die Sache mit den Universitäten ist, dass sie Dinge lehren müssen, die wirklich universell sind. So etwas wie agile Entwicklung ist noch ziemlich neu und obwohl im Internet viel darüber gesprochen wird, wird es nicht überall verwendet, sodass das Unterrichten einer ganzen Klasse von Schülern möglicherweise nur wenigen Menschen zugute kommen würde, die in agilen Geschäften gelandet sind.

Die Versionskontrolle ist heutzutage jedoch unentschuldbar. Es ist etwas, das jeder verstehen muss. Es ist ein Tool, das fast so nützlich ist wie ein Compiler, und CVS gibt es seit über 20 Jahren. Die Konzepte müssen zumindest von jedem Programmierer verstanden werden, der eine Universität verlässt. Glücklicherweise haben Sie möglicherweise das Glück, bei einer Gruppenarbeit an der Universität bei jemandem zu landen, der sich bereits mit Versionskontrolle auskennt und Ihre Gruppe davon überzeugt, diese zu verwenden. Ich weiß, dass ich froh bin, dass diese Person in meiner Gruppe war.

Unit-Tests sind ebenso unentschuldbar. Das einzige, was ich dort sagen würde, ist, dass das Buch noch nicht in der testgetriebenen Entwicklung ist und eine 100% ige Codeabdeckung immer mehr Probleme bereiten kann, als es wert ist. Unit-Tests sind jedoch äußerst wertvoll und sollten in einem Software-Engineering-Kurs behandelt werden. Ich würde mir vorstellen, dass einige dieser Dinge den Weg in einige Universitäten finden, aber noch nicht alle erreicht haben.


In einem Universitätskurs ist keine Versionskontrolle erforderlich. Sie könnten genauso gut lehren, "wie man Visual Studio benutzt". Am besten lassen Sie das, wenn Sie einen Job bekommen. Was das Testen betrifft - Unit-Tests sind nicht unbedingt die besten, aber sie sollten zumindest ein wenig von allen Formen von Testpraktiken vermitteln.
Gbjbaanb

@gbj stimmte zu, ich hatte keine Ahnung, was Versionskontrolle ist, bis ich einen Job bekam, und ich sah die Vorteile sofort und lernte es in einem Tag. In der IMO-Schule gibt es viel wichtigere Dinge zu unterrichten.
Temp2290

7

Warum eigentlich nicht? Meine Erfahrung mit meinem CS-Abschluss war ziemlich gleich. Der Grund ist, dass Leute, die Programmieren unterrichten, nicht programmieren, soweit ich das beurteilen kann. Es ist nicht erforderlich, dieses Zeug für die Akkreditierung zu unterrichten, die Lehrer sind damit nicht vertraut, und die Schüler entwickeln im Rahmen ihrer Kursarbeit niemals Projekte von Bedeutung. Es gibt keine Motivation, tatsächlich Programmieren zu unterrichten, im Gegensatz zum Unterrichten von CS-Theorie oder Java-Syntax.


6

Informatiker denken, sie sind Mathematiker, keine Ingenieure, und deshalb unterrichten sie lieber die mathematischen Teile als die technischen Teile. Testen, Versionskontrolle und Dokumentation sind keine Modeerscheinungen mehr als in jeder anderen technischen Disziplin.


Wir sollten also nur Softwareingenieure einstellen und keine Informatiker? ;-)
Andrew Swan

Wenn Sie der Meinung sind, dass eines dieser Dinge der Definition von "Engineering" entspricht, bin ich besorgt. Sie erfüllen die Definition von Pfannen, nicht von Ingenieurwesen.
Benjamin R

6

Das hängt von der Universität ab. Ich habe 2003 meinen Abschluss an einer australischen Universität gemacht. In dieser Zeit lernten wir UML, Unit Testing, XP (und andere agile Methoden) sowie alle formalen Dinge wie Z, Algorithmen und Datenstrukturen, Betriebssysteme usw.

Sie behandelten Unit-Tests jedoch nicht im Detail, sondern bezahlten sie nur für eine Vorlesung. Es wäre großartig gewesen, gelernt zu haben, wie man effektive Komponententests schreibt, und nicht nur "Was ist ein Komponententest?".

Was die Versionskontrolle betrifft, haben wir sie ab dem 2. Jahr in unseren Programmierprojekten verwendet.

Ich stimme auch dem, was Glyph gesagt hat, sehr zu. CS ist ein so unreifes Feld, wirklich nur in den letzten 50 Jahren, dass wir nicht wissen, was wir lernen sollen und was nur eine vorübergehende Modeerscheinung ist. Geben Sie es 150 Jahre, dann könnten sich die Dinge mehr beruhigen. Die Anzahl der gescheiterten Projekte in der realen Welt macht deutlich, dass dies eine unreife Branche ist. Stellen Sie sich vor, 80% der Bauprojekte wären gescheitert!


5

All dies kann leicht (flach) in einer einzigen Klasse über Softwareentwicklungspraktiken behandelt werden. Es ist nicht Teil der meisten CS-Lehrpläne, denn darum geht es bei CS nicht, obwohl ich denke, dass eine gewisse Berichterstattung über dieses Zeug nützlich ist. Meine Schule hatte eine solche Klasse; Es ging nicht um die Versionskontrolle, sondern um UML, das Sammeln von Anforderungen, Entwicklungsmethoden (verschiedene Agile und Wasserfälle), Komponententests, Integrationstests usw. und verlangte, dass wir in Teams von 4 bis 5 Personen arbeiten, um ein Projekt zu entwickeln (eine ziemlich einfache Abzocke von Hinweisen in Java). Wenn Sie weitere Software-Engineering-Kurse benötigen, stehen diese als Wahlfächer zur Verfügung.

Obwohl die Versionskontrolle in keiner Klasse, die ich belegte, erwähnt wurde, verwendeten die meisten meiner Freunde sie für persönliche Projekte, Klassenzuweisungen usw. Es ist also nicht so, als wären wir nicht damit konfrontiert. Die Leute, die es nicht selbst aufgenommen haben, wurden von einem Klassenkameraden im Rahmen eines Teameinsatzes gezwungen, es zu benutzen.

Die Universität soll Konzepte und Theorien vermitteln, denn das sind die Dinge, die man selbst nur schwer lernen kann. Die Versionskontrolle ist ein Werkzeug und ziemlich einfach zu erlernen. Verwenden Sie es ein wenig, lesen Sie einige Tutorials im Web, und schon sind Sie fertig. Wenn Sie Vorlesungen und Hausaufgaben benötigen, um herauszufinden, wie Sie etwas aus SVN heraus überprüfen können, werden Sie große Probleme mit den Dingen haben, die tatsächlich schwierig sind.

Denken Sie daran, dass es außerhalb des Unterrichts viele Möglichkeiten gibt, im College etwas zu lernen. Nutzen Sie das. Sie zahlen viel, um an den Kursen teilzunehmen und die Einrichtungen zu nutzen. Melken Sie also alles, was es wert ist, und gehen Sie zu LUG- und ACM-Meetings, nehmen Sie an Projektteams teil (es gibt immer einige MEs, die einen Roboter bauen, der einen Programmierer benötigt) oder holen Sie sich eine Aufgabe, die den Server der Abteilung für Geisteswissenschaften verwaltet. Wählen Sie einen Computer aus der Laderampe des Materials Engineering-Gebäudes aus, laden Sie eine Linux-ISO mit Ihrer schnellen Internetverbindung im Wohnheim herunter und spielen Sie herum.


Sehr gut gesagt! Melke alles was du kannst.
Andrei Rînea

3

Ich denke, das Problem ist, dass die Universitäten nicht das Gefühl haben, dass sie Sie lehren müssen, ein Profi zu sein, sondern sich auf die akademische Seite des Programmierens konzentrieren. Ich hätte gedacht, dass zumindest auf die neuesten Methoden und Techniken verwiesen werden sollte, die in der Branche verwendet werden, da diese Dinge auch von akademischem Interesse sind.

In unserem Kurs wurde uns der persönliche Softwareprozess beigebracht, der Dinge wie das Aufzeichnen von Zeit für Projekte, gute Kommentare usw. abdeckte, aber keine Erwähnung professioneller Grundlagen wie Versionskontrolle.


3

Sie haben 3 genannt, von denen einige meiner Meinung nach für das Verständnis von Computersystemen (z. B. Versionskontrolle) bei weitem nicht so wichtig sind. Diese Dinge sind Teil eines Jobs, und Sie können ein guter Programmierer / Informatiker werden, ohne es wissen zu müssen.

Ähnliches gilt für Unit-Tests - warum Unit-Tests auswählen? Sicherlich sind Usability-Tests, Systemtests, Benutzerakzeptanztests und Werksabnahmetests wichtiger? Nun, es sei denn, Sie betrachten Ihren Auftrag als abgeschlossen, sobald der Code an die Wartungsabteilung gesendet wurde :)

Denken Sie an die anderen Konzepte, die ich täglich verwende und die für einen Studenten, der sich mit den Grundlagen von Software und Computersystemen auseinandersetzt, wenig nützlich wären:

  • gute Kommentierungspraktiken
  • Einhaltung von Standards (nicht nur internationale, sondern auch Team-Codierungsstandards)
  • Dokumentation
  • Änderungskontrolle (nicht unbedingt dasselbe wie Versionskontrolle, bei der es um das Speichern von Unterschieden geht, hier geht es mehr darum, was und warum Sie etwas geändert haben)
  • Usability-Entwicklung

Die oben genannten sind alle "Soft Skills", die Sie nicht benötigen , um guten Code zu schreiben.

Wenn Sie jedoch die "harten" Fähigkeiten wie Datenstrukturen und Algorithmen vermissen, ist Ihre Chance, guten Code zu schreiben, nahezu unmöglich.


2

Ich habe all das an der Universität gelernt. Vielleicht hängt es von den Kursen ab, die Sie wählen? Meine Kurse waren sehr vielfältig (Software-Design, UI-Design, E-Commerce, KI, funktionale Programmierung usw.). Software Design war Designmustern und Unit-Tests ausgesetzt (ein großes Projekt, das verschiedene Dinge beinhaltete). UI Design ... wir waren eine dreiköpfige Gruppe, die an einem Projekt arbeitete. Ohne Versionskontrolle konnten wir nichts machen, also haben wir das verstanden. Und agile Entwicklung war etwas, worüber uns unsere Professoren ständig erzählten, aber sie überließen es jeder Gruppe, es zu nutzen.

Ich finde, dass viele Universitätsstudenten "einfache" Kurse oder Kurse belegt haben, die ihnen einen hohen GPA verleihen würden. Andere konzentrieren sich auf das, was sie lernen möchten, und erforschen weitgehend, welches Gebiet sie interessieren würde. Und dann gibt es diejenigen, die genau wissen, woran sie interessiert sind ... was gut ist, außer dass sie dazu neigen, ihre Kurse nicht zu diversifizieren.


Die Sache ist, dass diese Klassen zumindest an meiner Schule höhere Klassen sind. Ich bin der Meinung, dass diese zu den ersten gelehrten Dingen gehören sollten oder zumindest, dass sie auf einer mittleren Ebene gelehrt werden sollten.
Jason Baker

2

Um zu beantworten, warum diese Dinge nicht die ersten Dinge sind, die unterrichtet werden: In Undergraduate-Programmen werden Sie normalerweise zum Masterstudenten ausgebildet. Erst wenn Sie anfangen, Ihre eigenen Kurse auszuwählen (was normalerweise in späteren Jahren der Fall ist), können Sie sich entscheiden, etwas über Dinge zu lernen, die außerhalb der Wissenschaft verwendet werden. Aus diesem Grund konzentrieren sie sich auf Algorithmen, Datenstrukturen, ungelöste Probleme usw.

Ich persönlich finde es in Ordnung, dass sie das tun. Das Programmieren ist nicht so einfach, wie es viele von uns vermuten lassen. viele Menschen kämpfen damit. Ich würde es vorziehen, wenn diese Leute zuerst verstehen, wie eine for-Schleife funktioniert, bevor sie herausfinden, welches Monster Perforce ist.


2

Sie unterrichten solche Themen nicht, weil die meisten Schulen akademisch sind, nicht Handel. Das heißt, sie sollen Ideen und Theorien vermitteln und Sie nicht zu einer Karriere ausbilden. Das gesamte Konzept der Qualitätssicherung hat nichts mit Informatik zu tun, außer einen mathematischen Beweis zu bestehen. Außerdem unterscheiden sich die QS-Praktiken und Entwicklungsworkflows von Entwicklungshaus zu Entwicklungshaus erheblich. Daher ist es Zeit- und Geldverschwendung, sie in der Schule zu unterrichten.


2

Ich habe all das Zeug im ersten Jahr gelernt, mit Ausnahme der agilen Entwicklung.

Es geht darum, die richtige Schule zu wählen, IMHO. Wenn Sie in die Top 10 kommen, werden Sie all das schnell lernen.

In Bezug auf CS Education im Allgemeinen bitten wir Professoren grundsätzlich, so viel zu unterrichten (Sprachen aller Geschmacksrichtungen, Datenstrukturen, Laufzeiteffizienzen, wie die Dinge tatsächlich auf Bitebene funktionieren). Ich möchte die Frage stellen: Warum nehmen es die Kinder nicht auf sich, mehr über Software Engineering zu erfahren?


2

Genau wie Studenten ist jedes College anders. Einige Hochschulen oder genauer gesagt einige Professoren sind resistent gegen Veränderungen oder faul. Zum Glück sind die meisten nicht. Theorien, Konzepte, Geschichte usw. sind wichtig und wichtig für jeden CS-Lehrplan. Aber auch die Vorbereitung des Schülers auf sein Arbeitsumfeld. Kein Wunder, dass die Community Colleges in meiner Umgebung sehr aktuelle und anwendbare CS-Kurse anbieten. Nicht so sehr mit einer großen, etablierten und angesehenen Universität.


2

Es liegt einfach daran, dass Datenstrukturen und Algorithmen den Kern des Rechnens bilden und daher viel wichtiger sind. Unit-Tests, Versionskontrolle und agile Methodik sind nur Handwerkszeug (und wenn nötig, wird erwartet, dass man sie bei der Arbeit aufnimmt).


1

Ich denke, gute CS-Programme sollten die Grundlagen vermitteln, die als Grundlage für jede zukünftige Programmierausbildung dienen. Entwicklungsmethoden wie Agile und Tools zur Versionskontrolle sind wie Modeerscheinungen. sie kommen und gehen. Außerdem werden sie in der Regel in Branchenumgebungen und nicht in akademischen Umgebungen verwendet. Daher denke ich, dass es für Universitäten selten ist, Dinge abzudecken, die Sie wahrscheinlich im Beruf lernen werden. Ich sage nicht, dass es richtig ist, aber das ist wahrscheinlich die akademische Mentalität.


Tut mir leid, aber ich sehe Agile und Versionskontrollen nicht mehr als Modeerscheinungen als das Fließband oder die Erfindung des Kalküls war eine Modeerscheinung. In der realen Welt entwerfen wir Dinge, die die Programmierung grundlegend verändern, aber die Universitäten waren in ihren kleinen Vorlesungsständen so weit von der Realität entfernt, dass sie nicht wissen, dass wir uns weiterentwickelt haben.
Austin

1

Ich stimme dem zu, was du sagst. Ich habe erst vor kurzem angefangen, in der Welt der Softwareentwicklung zu arbeiten, und ich habe bereits angefangen, etwas über agile Entwicklung zu lernen, was mir an der Universität nie beigebracht wurde.

Tatsache kann sein, dass Universitätsprofis nicht so viel mit neueren Entwicklungstechniken Schritt halten, wie sie sollten. Sie haben möglicherweise auch das Gefühl, dass andere, wichtigere Dinge in ihrem Lehrplan enthalten sind.


1

Universitätsdozenten wissen nicht, wie man Software schreibt, sie recherchieren sie einfach, lehren sie und schlagen gelegentlich Code aus, der nur funktionieren muss, bis das Papier veröffentlicht wird.

Nur wegen Leuten wie Titus bekommen wir Akademiker, die wirklich programmieren - Lesen Sie hier seine Kommentare zu diesem Thema

Als ich Student war, las ich in der Bibliothek Bücher über Extreme Programming und wir diskutierten es kurz in Klassen - die gleichen Klassen, die verlangten, dass wir uns an das "Wasserfallmodell" der Softwareentwicklung halten, bei dem "Kompilieren" ein Schritt ist besitzen.

Alles Gute für Ihre Karriere, ich hoffe, Sie haben Ihren Abschluss gemacht. Es ist schön, Buchstaben nach Ihrem Namen zu haben. :) :)


1

Alle drei Dinge, die Sie erwähnen (Unit-Test, Versionskontrolle, agile Entwicklung), werden bis zu einem gewissen Grad im Informatik-Programm der Universität Groningen unterrichtet. Ob das gut ist oder nicht, werde ich als offene Frage belassen. aber es ist nicht wahr, dass keine Universität Ihnen das "praktische Zeug" beibringt.


1

Diese basieren auf meinen begrenzten Erfahrungen in einem CS-Programm vor dem Wechsel der Hauptfächer und meiner Erfahrung als Praktikant bei einem großen Softwareunternehmen. Unit-Tests werden nicht gelehrt, da die meisten Programme, die Sie erstellen müssen, nicht groß genug sind, um automatisierte Tests zu erfordern. Sie haben einen bestimmten Satz von Eingaben garantiert, sodass Sie alles manuell testen können. Wenn Sie lernen, wie Sie Tests automatisieren, kann dies auch die Einstufung Ihres Projekts beeinträchtigen, da die meisten Projekte mit Skripten bewertet werden, die automatisierte Tests ausführen, und einen kurzen Blick auf den Code werfen, um sicherzustellen, dass Sie nicht über int foo1 verfügen. int foo2; und Sie verwenden die richtige Einrückung.

Ich weiß nicht, warum die Versionskontrolle nicht gelehrt wird, aber ein Teil davon ist wahrscheinlich die Größe der Projekte. Ich hatte nie ein Projekt, das groß genug für die Versionskontrolle war, und im Großen und Ganzen meine ich über 1000 Codezeilen und das Schreiben dauerte ein ganzes Semester. Ich denke, sie glauben, dass Sie es sich selbst beibringen werden, wenn Sie es brauchen. Alle Gruppenprojekte, die ich hatte, sollten Paarprogrammierungsprojekte sein, und warum die Versionskontrolle verwenden, wenn Sie beide am selben Computer sitzen?

Ich weiß nicht, warum agile Entwicklung nicht gelehrt wird, aber es geht wahrscheinlich auf dasselbe mit der Programmgröße zurück. Während die Entwicklung von Adgile bei neuer Software, die auf PCs und kleinen Servern ausgeführt wird, üblich ist, wird sie im Allgemeinen nicht auf Systemen wie IBM-Mainframes oder in Problembereichen wie Banking oder Medical verwendet, in denen die Dokumentation die Hauptrolle spielt. Es hat wahrscheinlich auch damit zu tun, dass die Adgile-Entwicklung nicht vor etwa 20 Jahren stattfand, als viele Professoren ausgebildet wurden.


> Warum Versionskontrolle verwenden, wenn Sie beide am selben Computer sitzen? Ich benutze die Versionskontrolle, auch wenn ich der einzige am Computer bin! Wie würden Sie sonst Zweige und Patch-Releases verwalten oder sogar eine frühere Version einer Datei anzeigen (zurück, bevor Ihre letzte Änderung sie beschädigt hat)?
Andrew Swan

Das Gleiche gilt für Andrew. Ich benutze SCM-Tools ausgiebig, obwohl meine gesamte Arbeit auf meinem Laptop erledigt wird und das meiste davon solo ist. Sichern, Versionskontrolle, Verzweigen und Zusammenführen, Patchen von altem Code. Sie alle sind Gründe, es nicht nur für den Quellcode, sondern für alle produzierten Inhalte zu verwenden.
Matthew Schinckel

Es gibt keinen Grund, warum Sie nicht bewertet werden, ob Ihr Code die Einheits- / Abnahmetests besteht oder nicht.

1

Der Hauptgrund ist, dass viele (die meisten?) Universitäten sich für ein anderes Ziel halten als eine Handelsschule. Als solche wollen sie den Schülern das Lernen beibringen und die Grundprinzipien der Disziplin . Darüber hinaus gelten Algorithmen und Datenstrukturen für jede Programmiersprache und sind nicht von bestimmten Tools abhängig (die möglicherweise bis zum Abschluss noch verwendet werden oder nicht).

In der Informatik bedeutet dies Algorithmen, Datenstrukturen, Computertheorie, Compilertheorie usw. Bei dem, was Sie auflisten, geht es weniger darum, zu verstehen, wie man programmiert, wie man Probleme löst usw. Es geht um die Praxis des Programmierens (welche, Übrigens ist es ein erstaunliches Buch für jeden im College mit der Absicht, als Programmierer zu arbeiten. Nun, ein Großteil davon wird nicht an einer Einstiegsposition für Code-Affen verwendet, was einige Leute zu der Annahme veranlasst, dass dies nicht nützlich ist. Ich bin nicht einverstanden. Ich denke, es kann sehr nützlich sein. Dies bedeutet jedoch nicht, dass Sie nach Ihrem CS-Abschluss alles wissen, was Sie jemals brauchen, um als Programmierer zu arbeiten.

Was auch nicht heißt, dass die Dinge, die Sie erwähnen, nicht nützlich sind. Sie sind. Sie werden Probleme haben, als Programmierer zu arbeiten, wenn Sie sie nicht lernen, und ich denke, sie sollten zumindest bis zu einem gewissen Grad im College unterrichtet werden. Ich würde mich mit dem Unterrichten von Versionskontrolle, Unit-Tests usw. befassen, genauso wie mit einem Bachelor-Programm in Kunst und dem Unterrichten, was Pinsel sind und welche für verschiedene Fälle verwendet werden sollten.


1

Ich denke, es hängt davon ab, in welcher Art von Informatikprogramm Sie sich befinden. Es gibt diejenigen, die auf die Forschungs- und Wissenschaftsseite abzielen, und es gibt diejenigen, die auf die Implementierungsseite ausgerichtet sind. Ich lehnte insbesondere bestimmte Schulen ab, die nur Professoren hatten, die in der akademischen Welt blieben. Wenn Sie keine Professoren haben, die das, was sie lehren, nicht "benutzt" haben, ist das buchstäblich alles in ihrem Kopf.

Plug: Nachdem ich an der DePaul University BS in Comp Sci und MS in Soft Eng gemacht hatte, wurde ich hauptsächlich von Lehrern / Professoren unterrichtet, die Teilzeit unterrichteten, was für mich in Ordnung war, weil ich sie lieber mit einer Anekdote vom Vortag hereinbringen lassen würde und beziehe es auf die Klasse. Da es sich hauptsächlich um eine Pendler- / Teilzeitschule handelt, haben die meisten Schüler einen Job darin, das zu nutzen, was sie lernen.

Der Lernprozess beginnt immer noch mit der ganzen Theorie, aber dann werden wir normalerweise gefragt: "Wie viele von Ihnen verwenden dies tatsächlich in Ihrem Job?" und die typische Antwort lautet "wir verwenden es, aber auf eine abgespeckte oder einfachere Art und Weise" und dann gehen wir in die praktischen Szenarien der realen Welt.

Während meiner Schulzeit waren Unit-Tests immer anwesend. Obwohl sie Sie mit Java beginnen, haben sie uns dazu gebracht, ANT und JUnit für alle Projekte zu verwenden. Das war ein guter Anfang für die Build-Konfiguration und das Testen von Einheiten.

Und Extreme Programing war in ungefähr 3 oder 4 der Klassen enthalten, die ich besucht habe. Ich erinnere mich, dass sie alle mit den 12 verschiedenen Aspekten angefangen haben, von der Paarprogrammierung bis zum Unit-Test (siehe oben). Und jetzt scheint der Fokus auf Agile zu liegen.

Die schnelle Antwort lautet also: Ja, es gibt Schulen, die einen pragmatischeren Ansatz verfolgen als andere.


1

Unit Testing und Versionskontrolle wurden beide in Informatikkursen im 2. Jahr unterrichtet, in denen ich zur Universität ging. Unit-Tests fielen unter den Teil des Tests, der auch Unterschiede zwischen White- und Black-Box und einem guten Teil der Noten in den Programmieraufgaben des 3. Jahres beinhaltete, für eine gute Fehlerbehandlung, die leicht aus Unit-Tests resultieren kann.

Agile Entwicklung kann in einem akademischen Umfeld, wie ich denke, ziemlich schwer zu lehren sein. Während ich theoretisch etwas über die Wasserfallmethode gelernt habe, habe ich sie erst nach meinem Abschluss auf dem Gebiet gesehen und bin in die reale Welt gezogen, die sich von der akademischen Welt deutlich unterscheiden kann, z. B. mache ich im dritten Jahr alle seltsamen Fehler Fälle und beinahe eine Aufgabe bestanden, bei der ich nie das Herz dessen berührt habe, was die Aufgabe mir über Semaphoren beizubringen versuchte.

Und wie lange gibt es Agile schon und welche Form von Agile meinten Sie? Es gibt viele verschiedene Implementierungen davon, was ich gesehen habe.


1

Ich denke nicht, dass agiles Programmieren eine Modeerscheinung ist, aber gleichzeitig fällt es mir schwer, mir vorzustellen, wie ein Lehrer Ihnen Projekte geben könnte, damit Sie es lernen können. Es sei denn, sie gaben Ihnen Projekt A Build a, Projekt B erweitern auf a. Das Problem ist Zeit und Umfang. In einem 4-monatigen Kurs wäre es schwierig.

Die Methoden zur Versionskontrolle und zum Testen von Einheiten ändern sich ständig und hängen von der Sprache oder der Person ab, die sie definiert.

Die Datenstrukturen und Algos können in einer Klasseneinstellung bearbeitet werden. Ehrlich gesagt, nehmen sie sich viel mehr Mühe, um sie zu verstehen, als Unit-Tests und Versionierung. Versuchen Sie sich daran zu erinnern, dass ein Teil der Universität darin besteht, Ihnen beizubringen, sich selbst zu unterrichten. Collage hat nicht ganz das gleiche Mandat. Oder zumindest nicht im gleichen Maße. MEINER BESCHEIDENEN MEINUNG NACH.


Hmm, ich dachte, College und Universität bedeuten dasselbe. Aber kein Muttersprachler.

Je nachdem, wo Sie (in Bezug auf das Land) in den USA sind, sind sie gleich, in Kanada sind sie unterschiedlich. Ich denke, in den Staaten, die ich Collage nenne, heißt das eigentlich Junior Collage. In Australien heißt es Taff (Rechtschreibung verzeihen). Nicht Muttersprachler zu sein, macht
solche
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.