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"?
Antworten:
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:
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.
quelle
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.An der Universität...
Dein Lehrer gibt dir:
In der echten Welt"...
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
In der Wissenschaft,
DRAWBACKS
Pluspunkte
In der Industrie,
Überprüfen Sie dies heraus:
http://www.dodgycoder.net/2011/10/how-to-become-better-programmer.html
quelle
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.
quelle
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:
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
Es ist ein anderes Ballspiel, wenn jemand anderes die Regeln macht :)
quelle
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.
quelle
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.
quelle
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.
quelle