it-swarm.dev

Unterschiede zwischen Programmieren in der Schule und Programmieren in der Industrie?

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

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

50
rdasxy

In einem traditionellen Informatikprogramm für Studenten lernen Sie nur Programmieren. Aber die reale Welt will keine Leute, 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:

  • Sammeln und analysieren Sie Anforderungen wenn sie Ihnen nicht direkt gegeben werden
  • Architektur entwerfen und analysieren mit nahezu endlosen Möglichkeiten
  • Erstellen Sie Testpläne und handeln Sie danach m 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 die unterschiedliche Bedürfnisse haben, 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 Softwareentwicklers in Anspruch nimmt.

Es ist also nicht so, dass frisch geprägte Informatik-Studenten nicht wissen, wie man programmiert (viele sind tatsächlich sehr gute Programmierer). Es ist so, dass viele von ihnen nicht wissen, wie sie etwas anderes machen sollen.

72
Michael

An der Universität...

Ihr Lehrer gibt Ihnen:

  • Ein genau definiertes, isoliertes Problem, dessen Lösung innerhalb einer kurzen und genau definierten Zeitspanne bereitgestellt werden kann (und das anschließend verworfen wird).
  • Eine genau definierte Reihe von Tools, die Sie vor der Zuweisung kennengelernt haben
  • 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 eine Reihe widersprüchlicher Anforderungen, die sich im Laufe der Zeit ändern. Ihre Lösung muss flexibel und robust genug sein, damit Sie in akzeptabler Zeit auf diese Änderungen reagieren können.
  • Die Werkzeuge müssen von Ihnen ausgewählt werden. Vielleicht ist in der 10 Jahre alten Codebasis Ihres Teams bereits etwas brauchbares, vielleicht gibt es ein Open-Source-Projekt oder vielleicht eine kommerzielle Bibliothek, oder vielleicht müssen Sie es selbst schreiben.
  • Um festzustellen, ob die aktuelle Iteration Ihrer Software eine Verbesserung darstellt (weil Sie mit einem Softwareprojekt fast nie fertig sind), müssen Sie Regressionstests und Usability-Tests durchführen, wobei letzteres normalerweise bedeutet dass sich die verschwommenen, komplexen, widersprüchlichen, in den Kontext eingebetteten Anforderungen erneut verschieben.

Fazit

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

36
back2dos

Sie stehen vor einem anderen Aspekt des Problems:

Die Wissenschaft konzentriert sich hauptsächlich auf die "Wissenschaft des Programmierens", um zu untersuchen, wie ein bestimmter Algorithmus effizient gestaltet oder Sprachen entwickelt werden können, 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 sind, sondern auch die Bibliotheken, die Frameworks usw.

Dieser Unterschied im "Fokus" macht einen akademischen Master in C praktisch unfähig, eine Windows-Anwendung zu schreiben (da wir Windows-API nicht im C99-Standard enthalten sind!), Und fühlt sich daher "nicht programmierbar". Tatsächlich hat er jedoch alle Fähigkeiten, um selbst zu lernen, was ihm fehlt. Etwas, das - ohne ordentliches akademisches Studium (nicht unbedingt im akademischen Bereich gemacht) - ziemlich schwer zu finden ist.

20

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

Ein Unterschied besteht in der Leistungsanalyse. Ich habe viele Beiträge 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 es nur dann effektiv tun, wenn Sie tatsächlich wissen, was Sie minimieren möchten.

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

10
Mike Dunlavey

Update: Als ob jemand meine Gedanken gelesen hätte: Erwartungen der Absolventen gegenüber der Realität ...

Meine Meinung, zwei weitere Faktoren:

Problemgröße : Im akademischen Bereich musste ich meistens Software "von Grund auf neu" entwickeln, was bedeutete, dass die meiste Zeit das größte Programm war, auf das ich gestoßen war der größte, den ich geschrieben habe. Dies unterstreicht die notwendige Fähigkeit, mit Komplexität umzugehen und umzugehen, die sich aus der Interaktion verschiedener Softwareteile ergibt. Wenn ich mir der Anstrengungen bewusst gewesen wäre, die erforderlich sind, um die Komplexität zu verstehen, hätte ich mich möglicherweise 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 im akademischen Bereich gewartet), zur Erweiterung oder einfach zur Arbeitsteilung. Daher wird das Lesen von Code um ein Vielfaches wichtiger als das Schreiben.

Ein Vorschlag für eine verbesserte Programmierausbildung: Die Wissenschaft sollte uns mehr realen Situationen aussetzen, ohne auf eine Berufsausbildung zurückzugreifen. Ä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 aus verschiedenen Programmierstilen bestand, die ich an einem Tag verstehen und einen Fehler in drei ändern musste, hätte ich möglicherweise andere Karrieremöglichkeiten in Betracht gezogen - wahrscheinlich jedoch nicht.

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." Eine Person, die 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.

8
thiton

Der größte Unterschied, den ich zwischen akademischer und industrieller Programmierung festgestellt habe, besteht in der Robustheit. Fast jeder hat in seiner Karriere das Paradoxon "Es funktioniert für mich" erlebt, und dies ist eine Erweiterung dieses Zustands. In der Wissenschaft liegt der Schwerpunkt auf den Algorithmen und Funktionen, und die Benutzerfreundlichkeit und Stabilität der Software unter alltäglichen Bedingungen wird kaum berücksichtigt.

In meinem Büro haben wir zum Beispiel einen Ingenieur, der die Software übernimmt und ein Meister darin ist, Abstürze aufgrund von Eckbedingungen zu verursachen. Er klickt so schnell er kann auf eine Schaltfläche, bis etwas abstürzt ... Wenn eine Operation zu lange dauert, klickt er einfach zufällig über den Bildschirm (aus Frustration? IDK ....)

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

4
Dave Nay

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.

Ich habe die Erfahrung gemacht, dass wirklich ALLES, was sie von ihrer Schule bekommen haben, ein Interesse am Programmieren war. Ihre Fähigkeiten variierten von null bis vernachlässigbar. Ihre Fähigkeit zur Selbststeuerung war selbst bei den hochqualifizierten von ihnen nicht vorhanden. Ihr Denken war nicht nur kleinräumig; Sie dachten tatsächlich in Miniatur. Ein System mit mehr als ein paar Dutzend Codezeilen ließ sie vollständig zerfallen.

Aber weißt du was? Sie haben ein Interesse erworben, und das ist eine große Sache. Ein Interesse ist viel. Ich kann arbeiten mit jemandem, der interessiert ist. Ich kann verwandle sie in einen Entwickler, vorausgesetzt, sie kommen zu mir mit dem Interesse, einer zu sein. Hölle, das ist alles I begann mit. Das und eine Wertschätzung für postmoderne amerikanische Schriftsteller.

3
Dan Ray

In der Wissenschaft

DRAWBACKS

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

PLUS

  • Wir haben genügend Zeit für Recherchen.
  • Das Abweichen von den ursprünglichen Zielen verursacht keine großen Probleme.

In der Industrie,

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

Überprüfen Sie dies heraus:

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

2
SHOUBHIK BOSE

Bei 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 über die Zuweisung hinaus. Der Umfang der Projekte ist tendenziell recht begrenzt und es ist unwahrscheinlich, dass er sich einschleicht.

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ünglich erwarteten Werten liegt. Der Projektumfang ist normalerweise recht breit und schleicht sich erheblich ein, wenn er nicht verwaltet wird.

2
BillThor

Tatsächlich,

es ist unmöglich, vollständig zwischen akademischer und realer Programmierung zu unterscheiden.

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

Je nachdem, für welchen Sektor Sie arbeiten, müssen Sie die Gesetze einhalten.

Michael berührte nur die Spitze des Eisbergs, indem er programmierbezogene Aufgaben angab, die ich als einfach einstufen würde (wenn Sie den Teig wert sind, werden Sie bezahlt).

Im Allgemeinen stehen Sie in einer Branche mindestens ein paar Herausforderungen pro Fach gegenüber:

  • Geltende Gesetze (z. B. Vertraulichkeit des Kunden für medizinische Zwecke)
  • Fachliches Know-how (z. B. Rechnungssteuersystem, Inventar, Ressourcenmanagement, medizinische Systeme, Industriestandards)
  • Kundenanforderungen, die fehlen oder nicht existieren oder von Industriestandards/geltenden Gesetzen abweichen

Wenn Sie ein Programmierprojekt auf Forschungs-Phd-Level mit einem realen Projekt vergleichen, sind die Chancen sehr ähnlich, was den Schwierigkeitsgrad, das Know-how auf Einstiegsebene und dergleichen betrifft.

Der einzige wirkliche Unterschied ist dann das reale Projekt

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

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

1
Schalk

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

Anforderungen, Integration, Kunden
Außerdem gibt es Aspekte bei der Entwicklung von Code, wie z. B. Anforderungsanalyse, Integrationstests usw., die in akademischen Projekten tendenziell weniger vertreten sind. Aus Gründen einer fairen Benotung werden die Anforderungen in der Regel bereits vom Ausbilder für Sie festgelegt und in Besprechungen nicht gemeinsam festgelegt. Sie müssen den Kunden nicht nach einem 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 Grader oder Ausbilder) in der Regel eine ziemlich konkrete Vorstellung davon, was er möchte. In der realen Welt können Sie Kunden begegnen, die nicht wirklich wissen, was sie wollen, und ihr Gehirn auswählen müssen, um zu verstehen, was sie wollen sollte gebaut werden.

0
Jessica Brown

Wartung & Wartbarkeit

Im akademischen Bereich (zumindest im Grundstudium) wird Software mit Blick auf kurzfristige Ziele entwickelt, in der Regel um Hausaufgaben oder Semesterprojekte abzuschließen. Sobald die Zuweisung abgeschlossen ist, wird der Code weggeworfen und nie wieder gesehen.

In einer professionellen Umgebung wird die meiste Software für den langfristigen Gebrauch geschrieben. Software ist für mindestens einige Jahre vorgesehen und muss so erstellt werden, dass sie im Laufe der Zeit leicht gewartet und aktualisiert werden kann.

Damit verbunden ist die Wartungsarbeit. Der Großteil der professionellen Programmierarbeit umfasst die Aktualisierung oder Wartung vorhandener Software. Sogenannte "Green-Field" -Projekte sind eher die Ausnahme als die Norm.

0
Ken Liu

Wenn Sie sich die Fächer ansehen, die in der IT im akademischen Bereich studiert wurden, werden Sie feststellen, dass etwa die Hälfte der Zeit in Mathematik, Naturwissenschaften, Wahlfächern usw. verschwendet wird und die andere Hälfte in akademischen Fächern wie: Compiler-Design, Theorie der Algorithmen, Computerarchitektur, Optimierung, Betriebssysteme, digitale Elektronik und einige andere branchenbezogene Kurse 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 Microsoft Web Programming-Anforderungen (dh Bereiche, die von jemandem 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 Tools zur Quellcodeverwaltung

9- Einige Exposition gegenüber automatisierten Testwerkzeugen

10-Bug-Tracking-Tool

11-E-Commerce-Konzepte (optional)

12-ORM

13-Einige Fähigkeiten zur Geschäftsanalyse

14-Einige Kommunikationsfähigkeiten

15-Wahrscheinlich einige Cloud-Computing-Grundlagen

Wie Sie sehen können, konzentrieren sich die meisten der oben genannten Anforderungen während des Studiums/der Universität selten auf (in einigen Fällen erhalten Sie höchstens einen Kurs).

Man kann Institutionen nicht die volle Schuld geben, da es viele solcher technologischen Stapel 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 keiner der Technologiepakete, die das Unternehmen heute benötigt, jemals vollständig abgedeckt wird.

Das Obige behandelt die Frage der Eignung von Absolventen für Geschäftsberufe wie das Programmieren im Geschäftsumfeld. Der Bedarf an Forschungslabors usw. wird von dieser Antwort nicht abgedeckt. Auch andere Bereiche erfordern mehr Fähigkeiten als die oben genannten, wie z. B. Spieleentwicklung, eingebettete Entwicklung, Entwicklung von Echtzeitsystemen usw.

0
NoChance