Unterschiede zwischen Programmieren in der Schule und Programmieren in der Industrie? [geschlossen]

50

Viele Studenten, die ihren Abschluss machen und ihren ersten Job bekommen, haben das Gefühl, nicht wirklich zu wissen, wie man programmiert, obwohl sie vielleicht gute Programmierer am College waren.

Was sind einige der Unterschiede zwischen Programmieren im akademischen Umfeld und Programmieren in der "realen Welt"?

rdasxy
quelle
4
Ich würde sagen, dass Sie im akademischen Bereich gründlich lernen: Sie lernen Konzepte, stellen sich Fragen, verbessern das abstrakte Denken. In der Industrie lernt man in der Breite: Man lernt, viele verschiedene Technologien einzusetzen, ohne zu viele Fragen zu stellen, man muss Dinge erledigen. Durch die Erfahrung in der Branche lernen Sie auch, große, komplexe Projekte zu managen: Dies ist ein sehr praktisches Thema, das Sie aus Zeitgründen nicht an der Universität lernen können.
Giorgio,
9
Geht es bei dieser Frage um akademische Fragen auf der Doktorstufe oder nach dem Abschluss oder nur um eine allgemeine Einstellung "Klassenzimmer gegen reale Welt"?
Bob,
@Bob. Hier ging es mehr um die allgemeine Wissenschaft. Klassenzimmer / Forschung / gelenkte Lesungen / Aufgaben im Vergleich zu "realer" Programmierung in der Industrie.
Rdasxy
Okay. Das war nicht sehr klar, denn es gibt so etwas wie "akademische Programmierung", die von Leuten gemacht wird, die sagen wollen, dass sie Biologen dabei helfen, Zellsimulationen herauszufinden.
Bob

Antworten:

72

In einem traditionellen Bachelor-Informatik-Programm lernst du nur Programmieren. Aber die reale Welt will keine Menschen, die nur Programmierer sind. Die reale Welt will echte Software-Ingenieure. Ich weiß, dass viele Stellenbeschreibungen diese Unterscheidung nicht auszudrücken scheinen, was die Sache nur verwirrt. In der realen Welt müssen Sie in der Lage sein:

  • Erfassen und analysieren Sie Anforderungen, wenn diese nicht direkt an Sie gesendet werden
  • Entwerfen und analysieren Sie Architektur mit nahezu unendlichen Möglichkeiten
  • Erstellen Sie Testpläne und handeln Sie danach, um die Qualität eines Systems zu bewerten und zu verbessern
  • Arbeiten Sie gemeinsam in einem Team von Menschen mit unterschiedlichen Hintergründen und Erfahrungsstufen
  • Schätzen und planen Sie die Arbeit, auch wenn Sie nicht genau wissen, was Sie bauen sollen
  • Kommunizieren Sie effektiv mit Stakeholdern mit unterschiedlichen Bedürfnissen, die nicht unbedingt übereinstimmen
  • Verhandeln Sie Zeitplan, Budget, Qualität und Funktionen, ohne die Stakeholder zu enttäuschen

Oh ja, und Sie müssen auch in der Lage sein, Code zu schreiben, obwohl dies im Durchschnitt nur 40 - 60% der Zeit eines Software-Ingenieurs in Anspruch nimmt.

Es ist also nicht so, dass frisch gebackene Studenten der Informatik nicht wissen, wie man programmiert (viele sind in der Tat sehr gute Programmierer). Es ist so, dass viele von ihnen nicht wissen, wie sie etwas anderes machen sollen.

Michael
quelle
18
Oh yeah, and you also have to be able to write code too, but that's, on average, only 40 - 60% of a software engineer's time.- Oder sogar 0-20% in wirklich schlechten und wirklich großen Firmengeschäften.
Ritch Melton
1
+1 für eine sehr gute Antwort und +1 (sollte mehr sein) für Ritch. Wenn ein as / w-Ingenieur mehr als 20% seines Projektlebenszyklus für das Codieren ausgibt, stimmt etwas sehr, sehr nicht. 50% Design, 30% Test,% 20 für den Rest ... alles andere, einschließlich Codierung, scheint in etwa richtig zu sein. Bei richtigem Design sollte die Codierung trivial sein. Ohne das, was die Leute "Codierung" nennen, gibt es eigentlich endlose Umschreibungen, die versuchen, eine Art Design zu hacken, während sie
voranschreiten
36

An der Universität...

Dein Lehrer gibt dir:

  • Ein genau definiertes, isoliertes Problem, dessen Lösung innerhalb einer kurzen und genau definierten Zeitspanne bereitgestellt werden kann (und das anschließend verworfen wird).
  • Ein gut definierter Satz von Tools, mit denen Sie vor der Zuweisung vertraut waren
  • Ein genau definiertes Maß für die Qualität Ihrer Lösung, mit dem Sie leicht feststellen können, ob Ihre Lösung gut genug ist oder nicht

In der echten Welt"...

  • Das Problem ist verschwommen, komplex und in den Kontext eingebettet. Es handelt sich um widersprüchliche Anforderungen, die sich im Laufe der Zeit ändern. Ihre Lösung muss flexibel und robust genug sein, damit Sie in einer akzeptablen Zeit auf diese Änderungen reagieren können.
  • Die Werkzeuge müssen von Ihnen ausgewählt werden. Vielleicht gibt es in der 10-jährigen Codebasis Ihres Teams bereits etwas Verwendbares, vielleicht gibt es ein Open-Source-Projekt oder eine kommerzielle Bibliothek, oder Sie müssen es selbst schreiben.
  • Um festzustellen, ob die aktuelle Iteration Ihrer Software eine Verbesserung darstellt (da Sie mit einem Softwareprojekt so gut wie nie fertig sind ), müssen Sie Regressionstests und Usability-Tests durchführen. Letzteres bedeutet in der Regel, dass die Informationen verschwommen, komplex und widersprüchlich sind , Kontext-eingebettete Anforderungen verschieben sich erneut.

Fazit

Das Programmieren in der Schule und das Programmieren in der realen Welt unterscheiden sich von Natur aus so sehr von dem Punkt, an dem es tatsächlich nur sehr wenige Überschneidungen gibt. CS bereitet Sie auf die Softwareentwicklung in der "realen Welt" vor, so wie das Athletiktraining eine Armee für den Kampf vorbereiten würde.

back2dos
quelle
11
Dies ist im Grunde, was ich beantworten wollte. In der Schule kennen Sie das Problem und Sie kennen die Lösung. In der "realen Welt" kennt man die Lösung selten und kennt oft nicht einmal das reale Problem.
Bob
20

Sie stehen vor einem anderen Aspekt des Problems:

Die akademische Welt konzentriert sich hauptsächlich auf die "Wissenschaft des Programmierens" und untersucht daher die Möglichkeit, einen bestimmten Algorithmus effizienter zu gestalten oder Sprachen zu entwickeln, die darauf zugeschnitten sind, bestimmte Paradigmen ausdrucksvoller zu machen. Die Industrie konzentriert sich hauptsächlich auf die Herstellung von Dingen, die verkauft werden müssen. Es muss sich auf "Werkzeuge" stützen, die nicht nur die Sprachen und Algorithmen, sondern auch die Bibliotheken, die Frameworks usw. sind.

Dieser Unterschied im "Fokus" macht es einem akademischen Meister in C praktisch unmöglich, eine Windows-Anwendung zu schreiben (da wir die Windows-API nicht im C99-Standard haben!) Und fühlt sich daher "nicht programmierbar". Tatsächlich hat er jedoch alle Möglichkeiten, selbst zu lernen, was ihm fehlt. Etwas, das - ohne ordentliches akademisches Studium (nicht unbedingt in der akademischen Welt gemacht) - ziemlich schwer zu finden ist.

Emilio Garavaglia
quelle
10

Gute Antworten. Lassen Sie mich nur hinzufügen, akademische Programmierung ist in der Regel fast wie ein Spielzeug. Das ist gut für den Unterricht. Als Lehrer versuchen Sie, Ideen am effizientesten zu vermitteln. Der Nachteil ist, dass realistische Programme qualitativ so unterschiedlich sind, dass es schwierig ist, diese Lücke zu schließen.

Ein Unterschied besteht in der Leistungsanalyse. Ich habe viele Posts geschrieben, um darauf hinzuweisen. Bei der Leistungsanalyse geht es nur oberflächlich um Algorithmen und Messungen. Um es wirklich effektiv zu machen, müssen Sie es als einen Prozess des Debuggens betrachten.

Ein weiterer Unterschied ist die Wartbarkeit. Dies umfasst alles vom Stil bis zum domänenspezifischen Sprachdesign. Sie können dies nur dann effektiv tun, wenn Sie tatsächlich wissen, was Sie minimieren möchten.

Diese Dinge werden nicht gelehrt und sie machen einen enormen Unterschied in der Produktivität.

Mike Dunlavey
quelle
1
Ich frage mich, wie diese Dinge unterrichtet werden könnten, da sie viel Zeit und Erfahrung auf dem Gebiet erfordern, um zu erwerben. Ich war Assistent eines Software-Engineering-Kurses, bei dem Teams von jeweils 10 Studenten innerhalb weniger Monate (zwei Semester von Oktober bis April) ein kleines Softwareprodukt entwickeln mussten. Dies ermöglichte es ihnen, ein Gefühl für die Programmierung, Planung, Priorisierung von Anforderungen und Aufgaben, Kommunikation usw. zu bekommen. Aber das ist natürlich wenig im Vergleich zu dem, was sie in der realen Welt erleben werden. Aber Sie können nicht 4 Jahre nur damit verbringen, zu studieren.
Giorgio,
@Giorgio: Für die Leistung habe ich eine bereits vorhandene Codebasis (nicht sehr groß), die ich durch eine Reihe von Iterationen optimieren kann, um große Beschleunigungsfaktoren zu erzielen. Es ist eine einfache Fähigkeit zu unterrichten. Für DSLs und Wartbarkeit habe ich auch einige Lieblingsbeispiele, die für den Unterricht verwendet werden könnten. Beides könnte problemlos in einen Semesterkurs passen, mit genügend Platz. Also ich denke es könnte getan werden.
Mike Dunlavey
1
Ok, ich verstehe: Verwenden Sie große, reale Beispiele und lassen Sie die Schüler daran arbeiten. Sehr gute Idee.
Giorgio,
@Giorgio: Ich war vor 30 Jahren Professor, deshalb erinnere ich mich immer noch, wie es geht. Ich habe diese Ideen auch in ein Buch gesteckt , das sich schlecht verkaufte, was nur bedeutet, dass ich Zeit hatte, darüber nachzudenken und zu erklären, wie alles zusammenpasst.
Mike Dunlavey
Ich habe nicht so viel Erfahrung, ich war für ein paar Jahre während meiner Doktorandenzeit als Lehrassistent tätig. Ich arbeite jetzt in einer Firma. In Bezug auf das Programmieren an der Universität liegt die Wahrheit meiner Meinung nach irgendwo in der Mitte: Es gibt einige sehr nützliche Lehrinhalte an der Universität, aber es ist schwierig, alle wichtigen Probleme zu behandeln, mit denen ein Softwareentwickler im Laufe seiner Karriere konfrontiert sein wird. Mit einigem Aufwand können Sie einige Dinge der realen Welt unterrichten, wie Sie bereits betont haben. Natürlich sind nicht alle Universitätsprofessoren dazu bereit.
Giorgio
8

In der akademischen Welt studieren die meisten Menschen Informatik oder verwandte Kurse. Dijkstra bemerkte einmal: "In der Informatik geht es nicht mehr um Computer als in der Astronomie um Teleskope." Wer Informatik studiert, lernt in erster Linie, Wissenschaftler und nicht Programmierer zu werden. Als Programmierer bleibt er ein Amateur, und der Übergang zu einem professionellen Programmierer ist dementsprechend schwierig.

Thiton
quelle
8

Update: Als würde jemand meine Gedanken lesen: Graduierte Erwartungen versus Realität ...

Meine Meinung, zwei weitere Faktoren:

Problemgröße : Im akademischen Bereich musste ich meistens Software "von Grund auf neu" entwickeln, was bedeutete, dass das größte Programm, auf das ich gestoßen war, das größte war, das ich geschrieben habe. Dies hebt die notwendige Fähigkeit hervor, mit der Komplexität umzugehen, die sich aus der Interaktion verschiedener Softwareteile ergibt. Wenn ich mir der Bemühungen bewusst gewesen wäre, die Komplexität zu verstehen, hätte ich mich vielleicht dafür entschieden, überhaupt nicht in der Branche zu sein.

Lesen vs. Schreiben : Ein weiterer Nebeneffekt der Problemgröße ist, dass wir in der "realen Welt" häufig Arbeiten ausgesetzt sind, die von anderen geschrieben wurden, entweder zu Wartungszwecken (ich habe nirgendwo in der Wissenschaft Wartungsarbeiten durchgeführt), zu Erweiterungszwecken oder einfach Arbeitsteilung. Daher wird das Lesen von Code um ein Vielfaches wichtiger als das Schreiben.

Ein Vorschlag für eine verbesserte Programmierausbildung : Die akademische Welt sollte uns mehr realen Situationen aussetzen, ohne auf eine Berufsausbildung zu verzichten. Ärzte müssen sich irgendwann einer Leiche stellen, um zu sehen, ob sie "dafür gemacht" sind (ich habe Geschichten von Leuten gehört, die den Kurs nach dieser Erfahrung abgebrochen haben). Wenn ich in meinen frühen Zwanzigern ein 20K-LOC-Projekt gesehen hätte, das verschiedene Programmierstile umfasste, die ich an einem Tag verstehen und einen Fehler in drei ändern musste, hätte ich möglicherweise andere Karrieremöglichkeiten in Betracht gezogen - obwohl dies wahrscheinlich nicht der Fall ist.

Dimitrios Mistriotis
quelle
Um Ihre Metapher zu erweitern und aus meiner eigenen Erfahrung in der Medizin: Der Arzt lernt allgemeine Konzepte in der medizinischen Fakultät, aber wir alle lernen die Grundlagen und die realen Abkürzungen in der Ausbildung am Arbeitsplatz als Praktikanten und Anwohner.
Luftkissenfahrzeug voller Aale
2
Diese! Wenn Sie zum ersten Mal in eine 1-Millionen-LOC-Codebasis eintauchen, stellen Sie fest, dass dies nicht alles sein wird, was Sie an der Universität getan haben. Es ist sehr schnell klar, dass Sie niemals die Gesamtheit dieser Codebasis verstehen werden, und was auch immer Sie verstehen, muss aus dem Lesen und Verstehen des Codes anderer Leute stammen, anstatt aus dem Entwerfen und Schreiben Ihres eigenen Codes.
Roman Starkov
4

Der größte Unterschied zwischen akademischer und industrieller Programmierung besteht in der Robustheit. Fast jeder hat in seiner Karriere das Paradoxon "Es funktioniert für mich" erlebt, und dies ist eine Erweiterung dieser Bedingung. Im akademischen Bereich liegt der Fokus auf den Algorithmen und Funktionen und es wird wenig Wert auf die Benutzerfreundlichkeit und Stabilität der Software unter alltäglichen Bedingungen gelegt.

Zum Beispiel haben wir in meinem Büro einen Techniker, der die Software übernimmt und in der Lage ist, Abstürze aufgrund von Eckbedingungen zu verursachen. Er klickt so schnell wie möglich auf einen Knopf, bis etwas abstürzt. Wenn eine Operation zu lange dauert, klickt er einfach willkürlich auf dem Bildschirm herum (aus Frustration? IDK ...).

Das Ändern unserer Programmierphilosophie, so dass wir Dinge "Steve Proof" machen, hat im Allgemeinen die Stabilität unserer Anwendung verbessert.

Dave Nay
quelle
3

Ich habe keine persönliche Erfahrung mit Programmiertraining in der Schule - ich war ein englischer Major. Fragen Sie mich nach Keats und Byron! - aber ich habe mehrere neue Absolventen erhalten und sie in der Welt der professionellen Softwareentwicklung erzogen und betreut. Ich kann also aus dieser Perspektive sprechen.

Meine Erfahrung ist, dass wirklich ALLES, was sie von ihrer Schule bekamen, ein Interesse an der Programmierung war. Ihre Fähigkeiten variierten von null bis vernachlässigbar. Ihre Fähigkeit, sich selbst zu lenken, war selbst bei den besten Fachleuten nicht vorhanden. Ihr Denken war nicht nur klein; Sie dachten tatsächlich in Miniatur. Ein System, das mehr als ein paar Dutzend Codezeilen umfasst, hat dazu geführt, dass sie vollständig zerfallen sind.

Aber weißt du was? Sie haben ein Interesse erworben , und das ist eine große Sache. Das Interesse ist groß . Ich kann arbeiten mit jemandem, der interessiert ist. Ich kann sie in einen Entwickler verwandeln , vorausgesetzt, sie haben ein Interesse daran, einer zu sein. Verdammt, damit habe ich angefangen. Das und eine Anerkennung für postmoderne amerikanische Schriftsteller.

Dan Ray
quelle
2

In der Wissenschaft,

DRAWBACKS

  • Wir haben Fristen, die hauptsächlich dazu dienen, Punkte zu sammeln.
  • Bugs verursachen keine wirklichen Probleme, da die meisten Projekte niemals in realen Anwendungen verwendet werden.

Pluspunkte

  • Wir haben genügend Zeit für Nachforschungen.
  • Das Abweichen von den ursprünglichen Zielen verursacht nicht viel Ärger.

In der Industrie,

  • Wir arbeiten an Projekten, die tatsächlich von Unternehmen genutzt werden.
  • Wir arbeiten unter dem Druck sich ständig ändernder Kundenanforderungen.
  • Die Fristen sind selten flexibel, da dies sowohl für die Softwarefirma als auch für die Kunden zu enormen finanziellen Verlusten führen kann.

Überprüfen Sie dies heraus:

http://www.dodgycoder.net/2011/10/how-to-become-better-programmer.html

SHOUBHIK BOSE
quelle
Ich werde über den Teil "tatsächlich verwendet werden" nicht einig sein müssen. In den frühen 90er Jahren war ich 5 Jahre lang in 3 verschiedenen Unternehmen tätig, große, kleine und mittlere, und nichts, was ich geschrieben habe, ging in Produktion. Ich denke nicht, dass dies eine ungewöhnliche Erfahrung ist.
Bruce Ediger
2

In der akademischen Programmierung geht es mehr um Code selbst. Dies ist wichtig, um zu lernen, wie es funktioniert. Codequalität und Revisionskontrolle zählen nicht viel. Mit bemerkenswerten Ausnahmen hat Code keine Lebensdauer, die über die Zuweisung hinausgeht. Der Umfang der Projekte ist tendenziell recht begrenzt und es ist unwahrscheinlich, dass sie sich einschleichen.

In der realen Welt sollten Sie so wenig Originalcode wie möglich haben. Viele Codes werden von Teams entwickelt. Es ist besser, Bibliotheksroutinen zu verwenden, als sie selbst zu codieren. Codequalität und Revisionskontrolle werden wichtiger. Code hat in der Regel eine Lebensdauer, die weit über den ursprünglichen Erwartungen liegt. Der Projektumfang ist in der Regel recht breit und schleicht sich erheblich ein, wenn er nicht verwaltet wird.

BillThor
quelle
1

Tatsächlich,

Es ist unmöglich, zwischen akademischer und realer Programmierung zu unterscheiden.

Ich würde sagen, der größte Unterschied könnte folgender sein: In der realen Programmierwelt muss man mehr als nur programmieren können und sich schnell anpassen können.

Je nachdem, für welche Branche Sie arbeiten, müssen Sie die geltenden Gesetze einhalten.

Michael berührte nur die Spitze des Eisbergs, indem er Programmieraufgaben aufstellte, die ich als das leichte Zeug einstufen würde (wenn Sie den Teig wert sind, werden Sie bezahlt).

Im Allgemeinen stehen Sie in einer Branche vor mindestens ein paar Herausforderungen pro Fach:

  • Geltendes Recht (zB Schweigepflicht für Ärzte)
  • Fachkenntnisse (zB Abrechnungssteuersystem, Inventar, Ressourcenmanagement, medizinische Systeme, Industriestandards)
  • Kundenanforderungen, die fehlen oder nicht existieren oder von den Industriestandards / geltenden Gesetzen abweichen

Wenn Sie ein Forschungsprojekt auf Doktorandenebene mit einem realen Projekt vergleichen, ist die Wahrscheinlichkeit sehr hoch, dass es sich in Bezug auf Schwierigkeitsgrad, Know-how auf Einstiegsebene und Ähnlichem ähnelt.

Der einzige wirkliche Unterschied ist dann, dass das Projekt der realen Welt

  • hat einen Kunden
  • Hat Budgets (Zeit, Geld, Personalressourcen)

Es ist ein anderes Ballspiel, wenn jemand anderes die Regeln macht :)

Schalk
quelle
0

Wenn Sie sich die Fächer ansehen, die in der akademischen Informatik studiert wurden, werden Sie ungefähr die Hälfte der Zeit in Mathematik, Naturwissenschaften, Wahlfächern usw. und die andere Hälfte in akademischen Fächern wie Compilerdesign, Algorithmentheorie, Computerarchitektur usw. verschwenden. Optimierung, Betriebssysteme, digitale Elektronik und einige andere Kurse in Bezug auf die Industrie wie C-Programmierung und Web-Programmierung.

Die meisten der oben genannten Themen sind gut zu wissen, bieten aber auch keinen direkten Hintergrund für die Anforderungen der täglichen IT.

Nehmen Sie die Anforderungen für die Microsoft-Webprogrammierung an (dh Bereiche, die von einer Person benötigt werden, um ein produktives Teammitglied in einer Organisation zu sein):

1- C # .NET oder VB.NET

2- ASP.NET

3- HTML und CSS

4- SQL Server (oder eine andere Datenbank)

5- OO Anwendungsprogrammierung und -design

6- Java Script

7- MVC-Framework

8-Einige Exposition gegenüber Quellcodeverwaltungs-Tools

9- Einige Exposition gegenüber automatisierten Testwerkzeugen

10-Bug-Tracking-Tool

11-E-Commerce-Konzepte (optional)

12-ORM

13-Einige Business-Analyse-Fähigkeiten

14-Einige Kommunikationsfähigkeiten

15-Wahrscheinlich einige Cloud-Computing-Grundlagen

Wie Sie sehen, konzentrieren sich die meisten der oben genannten Anforderungen selten auf das College / die Universität (in einigen Fällen erhalten Sie höchstens einen Kurs).

Man kann Institutionen nicht die volle Schuld geben, da es viele solcher Technologiestapel gibt und sie sich ständig ändern.

Die meisten der oben genannten Informationen von Microsoft helfen niemandem, der Anwendungen in Java entwickeln möchte.

Das eigentliche Problem ist, dass nicht einer der Technologiestacks, die das Unternehmen heute benötigt, jemals vollständig abgedeckt wird.

Das Obige befasst sich mit der Frage der Eignung von Absolventen für kaufmännische Berufe wie Programmieren im Geschäftsumfeld. Der Bedarf an Forschungslabors usw. wird durch diese Antwort nicht abgedeckt. Auch andere Bereiche erfordern mehr Fähigkeiten als die oben genannten, wie z. B. Spieleentwicklung, Embedded-Entwicklung, Echtzeit-Systementwicklung usw.

Keine Chance
quelle
12
Sie haben 15 Artikel in Ihrer Liste. Ich schätze, ich könnte noch 30 hinzufügen. Es ist nicht die Aufgabe der Wissenschaft, Ihnen all diese Dinge beizubringen, sondern Ihnen beizubringen, wie Sie sich durch all diese Dinge zurechtfinden. Und auch, um Wissen zu haben, das noch nutzbar ist, wenn alle aktuellen Technologien überholt sind (in 10 Jahren?). Das ist alles, wofür die Theorie gut ist und keine Zeitverschwendung !
Giorgio
2
@Giorgio, danke für deinen Kommentar, dein Punkt ist gültig. Ich habe ausdrücklich festgestellt, dass "man Institutionen nicht voll beschuldigen kann". Während die ursprüngliche Frage nicht die Natur der akademischen Ausbildung betrifft, ist meine poersonale Ansicht, dass es eine GROSSE Lücke zwischen dem, was Akademiker unterrichten, und dem, was das Unternehmen erwartet, gibt. Die Rechnung für die Überbrückung der Lücke wurde früher vom Unternehmen in teuren On-the-Job-Schulungen bezahlt. Ich frage mich, wer angesichts des großen Wettbewerbs und der schwierigen Zeiten, in denen alle Volkswirtschaften leben, den Preis dafür zahlen wird, diese Lücke heute zu schließen.
NoChance
@Emmad Kareem: Ja, es gibt eine große Lücke, da stimme ich zu. Oft haben Universitätsprofessoren keine Ahnung, was in der "realen Welt" vor sich geht, weil sie sich auf abstrakte Forschung konzentrieren. Es sind jedoch diese abstrakten Denkfähigkeiten, die es mir ermöglichen, innerhalb von Wochen eine neue Sprache zu lernen (Scala jetzt lernen). Ich verstehe auch, dass vielleicht für Sie die Geldfrage stärker empfunden wird. Ich bin in Italien aufgewachsen und studierte an der Universität Studiengebühren in Höhe von ca. 200 USD pro Jahr (und wir mussten die Bücher selbst kaufen). Ich denke, das ist sehr wenig im Vergleich zu dem, was Sie in den USA bezahlen.
Giorgio
3
Wenn Sie Ingenieurwissenschaften studieren und lernen, wie man ein Auto baut, wird Ihnen niemand beibringen, wie man ein bestimmtes Auto fährt. Dies ist nur etwas, von dem Sie erwarten, dass Sie es selbst kennen oder lernen.
Giorgio
1
Verschwendet? Wenn Sie die Abschlüsse haben, die Sie angeblich haben, sollten Sie es besser wissen. Auch wenn Sie nicht dort sitzen und fortgeschrittene Mathematik programmieren, werden die Lektionen, die Sie beim Lernen gelernt haben, direkt in das "Sehen" einer sauberen, eleganten Lösung übersetzt.
Rig
0


Umfang & Fokus Nach meinen Erfahrungen ist der Umfang der Bewerbung, an der Sie arbeiten, im akademischen Umfeld in der Regel viel kleiner. Dieser Umfang kann an einem Tag oder in einer Woche oder sogar so lange wie das Semester von einem oder zwei Programmierern abgeschlossen werden. -Typischerweise ist alles, was Sie schreiben, ein Wegwerfcode, der nach dem Begriff verworfen wird. In der Praxis arbeiten Sie möglicherweise an einer Anwendung, für deren vollständige Entwicklung ein größeres Team Monate oder sogar Jahre benötigt hat. Sie verbringen viel mehr Zeit damit, den Code anderer Leute zu debuggen und zu versuchen, die Infastruktur einer Codebasis zu verstehen, indem Sie versuchen, die vorhandenen Teile nicht zu beschädigen, um neue oder geänderte Anforderungen hinzuzufügen.

Anforderungen, Integration, Kunden Bei
der Entwicklung von Code gibt es auch Aspekte wie Anforderungsanalyse, Integrationstests usw., die in akademischen Projekten tendenziell weniger vertreten sind. Im Interesse einer fairen Benotung werden die Anforderungen in der Regel bereits vom Kursleiter festgelegt und in Besprechungen nicht gemeinsam festgelegt. Sie müssen den Kunden in der Regel nicht über einen bestimmten Ansatz "verkaufen", der nicht ganz dem entspricht, was sie wollten, aber im Gegensatz zu ihren Wünschen ist dies aus technischer Sicht tatsächlich machbar. In einem akademischen Umfeld hat Ihr Kunde (der Schulabgänger oder Ausbilder) in der Regel eine ziemlich konkrete Vorstellung davon, was er möchte. In der realen Welt kann es vorkommen, dass Sie Kunden begegnen, die nicht genau wissen, was sie wollen, und ihr Gehirn auswählen müssen, um zu verstehen, was sie wollen sollte gebaut werden.

Jessica Brown
quelle
0

Wartung & Wartbarkeit

In der akademischen Welt (zumindest auf Bachelor-Niveau) wird Software mit kurzfristigen Zielen entwickelt, um normalerweise einige Hausaufgaben oder ein Semesterprojekt zu erledigen. Sobald die Zuweisung abgeschlossen ist, wird der Code weggeworfen und nie wieder gesehen.

In einer professionellen Umgebung ist die meiste Software für den langfristigen Gebrauch konzipiert. Software ist für eine Nutzungsdauer von mindestens einigen Jahren vorgesehen und muss so erstellt werden, dass sie im Laufe der Zeit leicht gewartet und aktualisiert werden kann.

Damit verbunden ist die Instandhaltungsarbeit. Der Großteil der professionellen Programmierarbeit besteht in der Aktualisierung oder Pflege vorhandener Software. Sogenannte "green field" -Projekte sind eher die Ausnahme als die Norm.

Ken Liu
quelle