Wie man das Beste aus einem Computer-Science-Studium herausholt

Die meisten modernen Programmierer haben ihre Ausbildung an Hochschulen erhalten. Mit der Zeit wird sich das Ă€ndern, aber derzeit ist es so, dass gute FachkrĂ€fte in IT-Unternehmen nach wie vor aus UniversitĂ€ten kommen. In diesem Beitrag spricht Stanislav Protasov, Direktor von Acronis fĂŒr die Beziehungen zu UniversitĂ€ten, ĂŒber seine Sichtweise auf die Besonderheiten der universitĂ€ren Ausbildung zukĂŒnftiger Programmierer. Dozenten, Studierende und die, die sie einstellen, können sogar unter dem Cut ein paar nĂŒtzliche Tipps finden.

Wie man das Beste aus einem Computer-Science-Studium herausholt

In den letzten 10 Jahren habe ich Mathematik, Algorithmen, Programmiersprachen und maschinelles Lernen an verschiedenen Hochschulen unterrichtet. Neben meiner Position bei Acronis bin ich heute auch stellvertretender Leiter des Lehrstuhls fĂŒr theoretische und angewandte Informatik an der MFTI. Aus meiner Erfahrung an guten russischen (und nicht nur) UniversitĂ€ten habe ich einige Beobachtungen zur Ausbildung von Studierenden in Computerwissenschaften gemacht.

Die 30-Sekunden-Regel funktioniert nicht mehr

Ich bin mir sicher, dass Sie mit der 30-Sekunden-Regel in BerĂŒhrung gekommen sind, die besagt, dass ein Programmierer den Zweck einer Funktion nach einem flĂŒchtigen Blick auf ihren Code verstehen sollte. Diese Regel wurde vor langer Zeit aufgestellt, seitdem sind viele Betriebssysteme, Sprachen, Hardware und Algorithmen entstanden. Ich schreibe seit 12 Jahren Code, aber relativ neu habe ich einmal den Quellcode eines Produkts gesehen, der mir schon auf den ersten Blick wie magische ZaubersprĂŒche erschien. Heutzutage, wenn Sie nicht in das Fachgebiet eingetaucht sind, hört die 30-Sekunden-Regel auf zu funktionieren. Ansonsten reichen Ihnen nicht einmal 30 oder 300 Sekunden, um zu verstehen, worum es geht.

Wenn Sie zum Beispiel Treiber schreiben möchten, mĂŒssen Sie in dieses Gebiet eintauchen und Tausende von Zeilen spezifischen Codes lesen. Bei einem solchen Ansatz zum Erlernen des Themas entwickelt der Spezialist ein "Flow-GefĂŒhl". Wie beim Rap, wenn das GefĂŒhl fĂŒr gute Reime und den richtigen Rhythmus ohne spezielle Rationalisierung aufkommt. So kann auch ein gut ausgebildeter Programmierer leicht ineffizienten oder einfach schlechten Code erkennen, ohne sich detailliert damit zu beschĂ€ftigen, wo der Stil verletzt wurde oder ein suboptimales Vorgehen verwendet wurde (aber es kann sehr schwierig sein, dieses GefĂŒhl zu erklĂ€ren).

Spezialisierung und wachsende KomplexitĂ€t fĂŒhren dazu, dass ein Bachelor-Abschluss nicht mehr die Möglichkeit bietet, alle Fachrichtungen ausreichend tief zu studieren. Gerade in diesem Bildungsniveau ist es jedoch wichtig, einen breiten Horizont zu entwickeln. Danach, in der Master-Ausbildung oder im Job, wird man einige Zeit investieren mĂŒssen, um in die Problematik und die Spezifika des Fachgebiets einzutauchen, den Slang, die Programmiersprachen und den Code der Kollegen zu lernen, Artikel und BĂŒcher zu lesen. Mir scheint, nur so kann man mit Hilfe der UniversitĂ€t die "Kraft einer Cross-Disziplin" fĂŒr die Zukunft aufbauen. T-shaped Spezialisten.

Welche Programmiersprache sollte an der UniversitÀt unterrichtet werden?

Wie man das Beste aus einem Computer-Science-Studium herausholt
Zu meiner Freude haben die Dozenten an den UniversitĂ€ten bereits die Suche nach der richtigen Antwort auf die Frage "Worauf sollte man am besten programmieren?" aufgegeben. Die Debatten darĂŒber, ob C# oder Java, Delphi oder C++ besser ist, sind praktisch zum Stillstand gekommen. Das Auftreten vieler neuer Programmiersprachen und die Ansammlung pĂ€dagogischer Erfahrungen haben dazu gefĂŒhrt, dass sich im akademischen Umfeld die Auffassung durchgesetzt hat: Jede Sprache hat ihre eigene Nische.

Das Problem des Unterrichtens mit der einen oder anderen Programmiersprache hat nicht mehr oberste PrioritĂ€t. Es spielt keine Rolle, in welcher Sprache der Kurs gehalten wird. Das Wichtigste ist, dass die Sprache ausreichend ausdrucksstark ist. Das Buch "The Art of Multiprocessor Programming" ist ein gutes Beispiel fĂŒr diese Beobachtung. In diesem bereits klassischen Werk sind alle Beispiele in Java angefĂŒhrt – einer Sprache ohne Zeiger, aber mit Garbage Collector. Kaum jemand wird bestreiten, dass Java weit von der optimalen Wahl fĂŒr das Schreiben von hochleistungsfĂ€higem parallelem Code entfernt ist. Doch zur ErklĂ€rung der Konzepte, die im Buch behandelt werden, stellte sich die Sprache als geeignet heraus. Ein weiteres Beispiel ist der klassische Kurs fĂŒr maschinelles Lernen von Andrew Ng, der in der Sprache Matlab in der Umgebung Octave unterrichtet wird. Heute könnte man eine andere Programmiersprache wĂ€hlen, aber welchen Unterschied macht das letztlich, wenn die Ideen und AnsĂ€tze wichtig sind?

Praktischer und nÀher an der RealitÀt

Gleichzeitig hat sich in den letzten Jahren die Zahl der Praktiker an UniversitĂ€ten erheblich erhöht. WĂ€hrend russische Hochschulprogramme frĂŒher dafĂŒr kritisiert wurden, dass sie von der RealitĂ€t abgekoppelt sind, kann man heute nicht mehr so ĂŒber die IT-Ausbildung sagen. Vor 10 Jahren gab es an UniversitĂ€ten fast keine Dozenten mit praktischer Berufserfahrung in der Industrie. Heute unterrichten an den Fachbereichen immer hĂ€ufiger nicht festangestellte LehrkrĂ€fte fĂŒr Informatik, sondern aktive IT-Spezialisten, die nur 1-2 Kurse in ihrer Freizeit unterrichten. Dieser Ansatz bewĂ€hrt sich hinsichtlich der qualitativ hochwertigen Ausbildung von FachkrĂ€ften, der Aktualisierung von Kursen und natĂŒrlich der Suche nach potenziellen Mitarbeitern fĂŒr Unternehmen. Ich glaube nicht, dass ich ein Geheimnis verrate, wenn ich sage, dass wir die Basisabteilung an der MFTI unterstĂŒtzen und Beziehungen zu anderen Hochschulen aufbauen, auch um Studenten vorzubereiten, die ihre Karriere bei Acronis beginnen könnten.

Mathematiker oder Programmierer?

Wie man das Beste aus einem Computer-Science-Studium herausholt
Die Kontroversen, die frĂŒher rund um Programmiersprachen entstanden, haben sich in eine philosophische Richtung entwickelt. Jetzt streiten hypothetische „Programmierer“ und „Mathematiker“ miteinander. Im Grunde könnten diese Schulen in zwei Ausbildungsprogramme unterteilt werden, aber die Industrie trennt solche Feinheiten immer noch schlecht, und von Hochschule zu Hochschule haben wir eine Ă€hnliche Ausbildung mit leicht unterschiedlichen Schwerpunkten. Das bedeutet, dass sowohl der Student als auch das Unternehmen, in dem er spĂ€ter arbeiten wird, das Puzzle des Wissens mit fehlenden Teilen ergĂ€nzen mĂŒssen.

Das Auftreten von Praktikern an Hochschulen, die industriellen Code in verschiedenen Sprachen schreiben, ermöglicht den Studenten, qualitativ hochwertigere EntwicklungsfĂ€higkeiten zu erwerben. Da sie mit den Implementierungen standardmĂ€ĂŸiger Bibliotheken, Frameworks und Programmiertechniken bestens vertraut sind, fördern praktische Programmierer bei den Studenten das Streben, guten Code zu schreiben, dies schnell und qualitativ zu tun.

Diese nĂŒtzliche FĂ€higkeit fĂŒhrt jedoch manchmal dazu, dass Hobbyisten anfangen, das Rad neu zu erfinden. Studenten, die Programmierer sind, denken sich: „Was spricht dagegen, noch 200 Zeilen guten Codes zu schreiben, die das Problem direkt lösen?“

Lehrer mit einer klassischen mathematischen Ausbildung (zum Beispiel von der Mathematischen FakultĂ€t oder Angewandte Mathematik) arbeiten hĂ€ufiger in einem wissenschaftlichen Umfeld oder im Bereich der Modellierung und Datenanalyse. „Mathematiker“ sehen Probleme in der Informatik anders. Sie arbeiten in erster Linie nicht mit Code, sondern mit Algorithmen, Theoremen und formalen Modellen. Ein wichtiger Vorteil des mathematischen Ansatzes ist das klare grundsĂ€tzliche VerstĂ€ndnis dafĂŒr, was gelöst werden kann und was nicht. Und wie man es löst.

Dementsprechend erlĂ€utern Mathematiklehrer das Programmieren mit einem theoretischen Schwerpunkt. Studierende, die „von den Mathematikern“ kommen, bieten hĂ€ufiger gut durchdachte und theoretisch fundiertere Lösungen an, sind aber in der Regel aus Sicht der Programmiersprache suboptimal und oft einfach schlecht geschrieben. Ein solcher Student glaubt, dass sein Hauptziel darin besteht, seine FĂ€higkeit zu demonstrieren, solche Aufgaben im Allgemeinen zu lösen. Die Implementierung kann jedoch mangelhaft sein.

Junge Leute, die in der Schule oder im ersten Studienjahr von Programmierern ausgebildet wurden, bringen ihren eigenen „sehr schönen E-Bike“ mit, der jedoch normalerweise asymptotisch nicht sehr effizient funktioniert. Sie hingegen vermeiden es, sich tiefgehend mit der Theorie zu beschĂ€ftigen und in LehrbĂŒchern nach optimalen Lösungen zu suchen, und bevorzugen stattdessen eleganten Code.

Bei VorstellungsgesprĂ€chen in verschiedenen Hochschulen sehe ich normalerweise, welche „Schule“ der Ausbildung zugrunde liegt. Und ich habe nahezu nie ein ideales Gleichgewicht in der Grundausbildung erlebt. In meiner Kindheit konnte man in meiner Stadt fĂŒr Olympiade-Mathematik trainieren, aber es gab keine Programmierclubs. Heute lernen Kinder in diesen Clubs Programmieren in den „angesagten“ Sprachen Go und Python. Daher gibt es bereits auf der Ebene der Aufnahme an die UniversitĂ€ten Unterschiede in den AnsĂ€tzen. Ich denke, dass es an der UniversitĂ€t wichtig ist, beide FĂ€higkeiten zu fördern, da sonst ein Fachmann mit unzureichenden theoretischen Grundlagen oder jemand, der nicht gelernt hat und nicht will, guten Code zu schreiben, ins Unternehmen kommt.

Wie kann man dennoch die „Stange“ fĂŒr zukĂŒnftige T-shaped Spezialisten aufbauen?

Wie man das Beste aus einem Computer-Science-Studium herausholt
Es ist klar, dass ein Student unter solchen Bedingungen einfach das wĂ€hlt, was ihm am besten gefĂ€llt. Der Dozent vermittelt lediglich den Standpunkt, der ihm nĂ€her steht. Doch alle profitieren, wenn der Code schön geschrieben ist und die Algorithmen klar, begrĂŒndet und effizient sind.

  • IT-Horizont. Ein Absolvent des Bachelor-Studiums in Computer Science ist bereits ein Fachmann mit einem ausgeprĂ€gten technischen Horizont, der wahrscheinlich seine Spezialisierung gewĂ€hlt hat. An den unteren Kursen wissen wir jedoch nicht, womit er oder sie sich beschĂ€ftigen wird. Vielleicht wird er in die Wissenschaft oder Analyse gehen, oder vielleicht wird er jeden Tag eine große Menge an Code schreiben. Folglich muss dem Studenten alle Aspekte der Arbeit im IT-Bereich gezeigt werden, und er muss mit allen Werkzeugen vertraut gemacht werden. Ideal wĂ€re es, wenn Dozenten aus theoretischen Kursen den Bezug zur Praxis zeigen (und umgekehrt).
  • Wachstumsperspektive. Es ist im Interesse des Studenten, extremes Verhalten zu vermeiden. Es ist nicht schwer zu verstehen, ob Sie „Mathematiker“ oder „Programmierer“ sind. Es reicht aus, auf den ersten Impuls bei der Lösung eines Problems zu hören: Was wollen Sie tun – in einem Lehrbuch nach dem optimalen Ansatz suchen oder ein paar Funktionen schreiben, die spĂ€ter nĂŒtzlich sein werden? Daraus kann man die weitere komplementĂ€re Lernrichtung aufbauen.
  • Alternative Wissensquellen. Manchmal ist das Programm gut ausbalanciert, aber „Systemprogrammierung“ und „Algorithmen“ werden von völlig unterschiedlichen Personen gelehrt, und den einen Studenten liegt der erste Dozent nĂ€her, wĂ€hrend andere den zweiten bevorzugen. Doch selbst wenn Ihnen der Professor nicht gefĂ€llt, ist das kein Grund, in bestimmten FĂ€chern nachzulassen zugunsten anderer. Die Bachelor-Studenten sind daran interessiert, den Willen zu finden, mit Wissensquellen zu arbeiten und auf keinen Fall radikalen Meinungen zu vertrauen, wie etwa „Mathematik ist die Königin der Wissenschaften, das Wichtigste ist, die Algorithmen zu kennen“ oder „guter Code kompensiert alles andere“.

Sein Wissen in der Theorie kann man vertiefen, indem man sich auf spezielle Literatur und Online-Kurse bezieht. Programmierkenntnisse lassen sich auf Plattformen wie Coursera, Udacity oder Stepik verbessern, die eine Vielzahl verschiedener Kurse anbieten. Außerdem beginnen Studenten oft, sich harte Programmierkurse anzusehen, wenn sie das GefĂŒhl haben, dass der Dozent fĂŒr Algorithmen gut in Mathematik ist, aber auf schwierige Fragen zur Umsetzung keine Antworten geben kann. Nicht alle werden mir zustimmen, aber in meiner Erfahrung hat sich die C++-Spezialisierung von Yandex, die alle zunehmend komplexeren Aspekte der Sprache schrittweise behandelt, als besonders hilfreich erwiesen. Insgesamt sollten Sie einen Kurs mit hohen Bewertungen von angesehenen Unternehmen oder Hochschulen wĂ€hlen.

Soziale Kompetenzen

Wie man das Beste aus einem Computer-Science-Studium herausholt
Wenn Absolventen von der UniversitĂ€t in ein Unternehmen eintreten, sei es ein Startup oder ein großes Unternehmen, sind selbst die Studenten der besten UniversitĂ€ten oft schlecht auf die reale Arbeitsumgebung vorbereitet. Das liegt daran, dass die UniversitĂ€ten heute sehr viel „auf die Studierenden aufpassen“. Selbst wenn man viele Kurse verpasst, nicht rechtzeitig fĂŒr PrĂŒfungen und Tests vorbereitet ist, oder zu spĂ€t zur PrĂŒfung kommt, kann jeder bestehen und sogar noch einmal bestehen – und erhĂ€lt am Ende dennoch das Diplom.

Dennoch gibt es heute alle Voraussetzungen, um Studenten auf das Erwachsenenleben und die selbststĂ€ndige BerufstĂ€tigkeit vorzubereiten. Sie mĂŒssen nicht nur programmieren, sondern auch kommunizieren. Und auch das muss unterrichtet werden. In den UniversitĂ€ten gibt es verschiedene Formate zur Verbesserung dieser FĂ€higkeiten, aber leider wird oft nicht genug Aufmerksamkeit darauf gelegt. Dennoch haben wir viele Möglichkeiten, um FĂ€higkeiten fĂŒr die effektive Teamarbeit zu erlangen.

  • Schriftliche GeschĂ€ftskommunikation. Leider haben die meisten Absolventen der UniversitĂ€t kein VerstĂ€ndnis fĂŒr die Etikette des Schriftverkehrs. Die Besonderheiten der Kommunikation in Messengern, der Austausch von Nachrichten tagsĂŒber und nachts sowie die Verwendung eines informellen Stils und einer alltĂ€glichen Sprache. Allerdings könnte die schriftliche Ausdrucksweise durch die Kommunikation der Studenten mit der FakultĂ€t und der UniversitĂ€t trainiert werden.

    In der Praxis sehen sich Manager oft der Herausforderung gegenĂŒber, ein großes Projekt in kleinere Aufgaben zu zerlegen. Dazu ist es wichtig, jede Aufgabe und ihre Bestandteile gut zu beschreiben, damit die junior Entwickler verstehen, was von ihnen erwartet wird. Schlecht formulierte Aufgaben fĂŒhren hĂ€ufig dazu, dass etwas ĂŒberarbeitet werden muss, und daher hilft Erfahrung in schriftlicher Kommunikation Absolventen, in verteilten Teams zu arbeiten.

  • Schriftliche PrĂ€sentation der Ergebnisse seiner Arbeit. Um ihre Studienprojekte zu prĂ€sentieren, können Studenten höherer Semester BeitrĂ€ge auf Habr, wissenschaftliche Artikel sowie einfache Berichte schreiben. Dazu gibt es viele Möglichkeiten – bereits im zweiten Semester beginnen an einigen Hochschulen die Studienarbeiten. Auch Essays können als Kontrollform genutzt werden – sie sind in der Regel formell nĂ€her an einem journalistischen Artikel. Dieser Ansatz wird bereits an der NEU HSE umgesetzt.

    Wenn ein Unternehmen einen flexiblen Ansatz in der Entwicklung praktiziert, mĂŒssen die Ergebnisse der Arbeit oft in kleineren Portionen, aber dafĂŒr hĂ€ufiger prĂ€sentiert werden. Wichtig ist es, die Ergebnisse der Arbeit eines Spezialisten oder des gesamten Teams kurz und prĂ€zise zu vermitteln. Außerdem finden in vielen Unternehmen heute "Reviews" statt – jĂ€hrlich oder halbjĂ€hrlich. Mitarbeiter diskutieren die Ergebnisse und Perspektiven ihrer Arbeit. Ein erfolgreiches Review ist der Hauptgrund fĂŒr berufliches Wachstum und PrĂ€mien, beispielsweise bei Microsoft, Acronis oder Yandex. Ja, Sie können gut programmieren, doch "in der Ecke zu sitzen" fĂŒhrt dazu, dass selbst ein großartiger Spezialist immer demjenigen unterlegen ist, der seine Erfolge gut prĂ€sentieren kann.

  • Wissenschaftliches Schreiben. Besonders hervorzuheben ist das wissenschaftliche Schreiben. FĂŒr Studenten ist es hilfreich, sich mit den Regeln des Schreibens wissenschaftlicher Texte, der Verwendung von Argumenten, der Informationssuche in verschiedenen Quellen und der Formatierung von Verweisen auf diese Quellen vertraut zu machen. Es ist wĂŒnschenswert, dies auf Englisch zu tun, da es in der internationalen akademischen Gemeinschaft wesentlich mehr gute Texte gibt und fĂŒr verschiedene Disziplinen bereits etablierte Vorlagen zur Darstellung wissenschaftlicher Ergebnisse existieren. NatĂŒrlich sind FĂ€higkeiten im akademischen Schreiben auch bei der Vorbereitung russischsprachiger Veröffentlichungen erforderlich, jedoch sind die Beispiele fĂŒr gute moderne Artikel auf Englisch deutlich seltener. Diese FĂ€higkeiten können im Rahmen eines entsprechenden Kurses erworben werden, der mittlerweile in viele Bildungsprogramme integriert ist.
  • DurchfĂŒhrung von Meetings. Die meisten Studenten wissen nicht, wie sie sich auf Meetings vorbereiten, Protokolle fĂŒhren und Daten verarbeiten. Wenn wir jedoch diese FĂ€higkeit an der Hochschule entwickeln, indem wir beispielsweise an Gruppenprojekten teilnehmen, können wir eine Zeitverschwendung am Arbeitsplatz vermeiden. DafĂŒr ist eine Kontrolle ĂŒber die Projektarbeit der Studenten erforderlich, um sie zu lehren, wie sie Meetings effektiv durchfĂŒhren können. In der Praxis kostet dies jedes Unternehmen eine Menge Geld – schließlich möchte man, dass von einem Meeting, an dem mehrere hochbezahlte Mitarbeiter eine Stunde ihrer Arbeitszeit verbringen, auch ein entsprechender Nutzen erlöst wird.
  • Öffentliches Reden. Viele Studenten sehen sich der Notwendigkeit gegenĂŒber, öffentlich zu sprechen, jedoch nur bei der Verteidigung ihrer Bachelorarbeit. Und lange nicht alle sind darauf vorbereitet. Ich habe viele Studenten gesehen, die:
    • mit dem RĂŒcken zu den Zuhörern stehen,
    • hin und her schwingen, wĂ€hrend sie versuchen, die Kommission in einen Trancezustand zu versetzen,
    • Kugelschreiber, Bleistifte und Zeigesticks zerbrechen,
    • im Kreis laufen,
    • auf den Boden schauen.

    Es ist normal, wenn jemand zum ersten Mal spricht. Aber diesen Stress sollte man frĂŒher angehen – beim Verteidigen von Kursarbeiten in einer freundlichen AtmosphĂ€re, unter Kommilitonen.

    Außerdem ist es in Unternehmen ĂŒblich, einem Mitarbeiter die Möglichkeit zu geben, eine Idee vorzuschlagen, dafĂŒr Finanzierung, eine Position oder ein eigenes Projekt zu erhalten. Wenn man darĂŒber nachdenkt, ist das doch eine Ă€hnliche Verteidigung wie bei einer Kursarbeit, nur auf einem höheren Niveau. Warum also nicht solche nĂŒtzlichen KarrierefĂ€higkeiten wĂ€hrend des Studiums trainieren?

Was habe ich verpasst?

Ein Grund fĂŒr das Schreiben dieses Beitrags war ein Artikel, der auf der Website der TjumGU veröffentlicht wurde.Der Autor des Artikels konzentriert sich nur auf die MĂ€ngel russischer Studenten, die von auslĂ€ndischen Lehrern bemerkt wurden. Meine Erfahrung beim Unterrichten an verschiedenen Hochschulen zeigt, dass das russische Schul- und Hochschulsystem eine gute Basis bietet. Russische Studenten sind in Mathematik und Algorithmen versiert, was die professionelle Kommunikation mit ihnen erleichtert.

Im Fall von auslĂ€ndischen Studierenden können die Erwartungen des russischen Dozenten hingegen manchmal ĂŒberzogen sein. Zum Beispiel Ă€hneln die indischen Studierenden, die ich auf dem Niveau der Grundausbildung in Mathematik getroffen habe, den russischen. Ihnen fehlt jedoch manchmal das spezielle Wissen, das man nach dem Bachelorabschluss haben sollte. Gute europĂ€ische Studierende haben in der Regel eine schwĂ€chere mathematische Vorbereitung auf Schulniveau.

Wenn Sie an einer Hochschule studieren oder dort arbeiten, können Sie bereits jetzt daran arbeiten, Ihre kommunikativen FĂ€higkeiten (ob Ihre oder die der Studierenden) auszubauen, die grundlegende Basis zu erweitern und im Programmieren zu ĂŒben. DafĂŒr bietet das russische Bildungssystem alle Möglichkeiten – man muss nur wissen, wie man sie richtig nutzt.

Ich wĂŒrde mich freuen, wenn Sie in den Kommentaren zu diesem Beitrag Ihre Links zu Kursen und Methoden teilen, die helfen, das Gleichgewicht in der Bildung wiederherzustellen, sowie weitere Möglichkeiten, Soft Skills wĂ€hrend des Studiums an der Hochschule zu verbessern.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster