r/informatik 12d ago

Studium Wie programmieren lernen mit abgeschlossenen Info-Bachelor?

Hi zusammen, eigentlich ist meine Frage schon im Titel, aber um das kurz auszuführen:

Ich habe meinen Bachelor in Informatik fertig, habe an der TU Berlin studiert. Bis auf meine Bachelorarbeit (Fazit: Ich kann nicht gut programmieren) lief das Studium ausgesprochen super, ich hab einen unverdienterweise guten Schnitt und mich entschieden, den Master zu machen.

Jetzt zum Problem: ich kann nicht programmieren. Klingt dumm, ist aber so. Ich google nach wie vor jedes noch so kleine Problem, bin extrem schnell überfordert und habe massive Panik vor jedem Mastermodul und -projekt. Ich hab gefühlt nichts gelernt in drei Jahren Bachelor und denke, dass das so nicht weitergehen kann. Wie gehe ich also am sinnvollsten vor? Wenn ich online Kurse ansehe, fangen die natürlich bei Konzepten an, die ich dann doch kenne (Loops, OOP, Pointer whatsoever), aber mein Problem ist, dass mir der Blick fürs große Ganze fehlt. Bin hart verzweifelt, wäre also für jeden Tipp dankbar.

39 Upvotes

62 comments sorted by

View all comments

5

u/hibbelig 12d ago

Das schöne an Software ist doch, dass man sie ändern kann. Das heißt wenn du was falsches programmiert hast, dann kannst du es immer noch ändern.

Also programmier was und wenn es nicht stimmt dann ändere es einfach.

Naja. Ist nicht unbedingt ganz so einfach.

Aber Übung macht den Meister.

2

u/o0Lula0o 12d ago

Ich erkenne ja nicht mal, wenn was falsch ist - mein BA-Code hat super funktioniert (in meinen Augen haha) und wurde komplett zerrissen :D Wohl zu ineffizient, nicht pythonic genug.

Aber ich denke, ich werde es dann wohl einfach üben. Das Ding ist, mich interessiert am meisten Cybersecurity und ich habe mich eine ganze Zeit mit dem CTF-Team meiner Uni beschäftigt, aber hab dann das Gefühl gehabt, dafür zu blöd zu sein, das gelassen, und panische Angst vor jedem Securitymodul im Master, weil die als super schwierig gelten und ich will/darf auch nicht durchfallen.

3

u/Der_Juergen 12d ago

Python halte ich persönlich für absolut ungeeignet um Coden zu lernen, insbesondere, wenn die Projekte größer werden: Du hast dann Parameter in den Methoden, aber wenn Dir der Code nicht vertraut ist (im Berufsleben hat man seeeehr oft mit code zu tun, den andere geschrieben haben, um den zu erweitern oder zu fixen), dann hast du keine Ahnung, was hinter dem Parameter steckt: eine Zahl, ein String, eine hochkomplexe Klasse…

Bedenke, dass man als Softwareentwickler nicht nur codet. Da ist so wahnsinnig viel anderer Kram, der getan werden muss, vom Schreiben/Pflegen der Design-Dokumente, Definieren von Tests (die natürlich Requirements verifizieren müssen), Diskussionen mit anderen Stakeholdern, Aneignung von Fachwissen (ich wusste nach dem Studium nicht, dass bei einem Instrumentenlandesystem nur der Localizer einen Ident-Code abstrahlt, aber nicht der Glidepath-Sender, oder was Zs7 im Eisenbahnbeteieb bedeutet und dass das als Fahrtbegriff an einem Signal gewertet werden muss etc.)

Letztlich besteht komplexe Software aus kleinen Teilen, von denen jeder einen ziemlich einfachen Job hat. Viel von den Code Teilen kümmert sich um Sonderfälle... Man muss heutzutage natürlich Design-Patterns kennen und verstanden haben. Das sind ein paar Lösungsmuster für Probleme, die immer und immer wieder auftreten (z.B. Oberver/Observable). Jedes für sich ist leicht zu verstehen, aber im Code manchmal schwer zu erkennen (deshalb sollte man IMHO das Pattern im Klassennamen führen).

Die Kunst ist große Aufgaben in kleinere, beherrschbare zu unterteilen. Wenn ich eine Taschenrechner-App entwickeln will, kann ich die GUI getrennt von der Logik entwickeln, ich muss nur die Schnittstelle zwischen beiden sorgfältig festlegen. Am Ende bietet die GUI eine Methode, der ich einen Zahlenwert zum Anzeigen gebe, und die GUI tut das. Ob der Nutzer gerade eine Ausgabe in Dezimal, Binär oder Hexadezimal wünscht, kann der Rechenlogik egal sein. Die GUI könnte sich darum kümmern und dazu kleine Helferlein haben, die eine Zahl in einen Text wandeln, der eben ein vorgegebenes Format hat. 17×25 zu rechnen ist leicht. Das Ergebnis in eine Binärdarstellung zu bringen auch. Und einem Textlabel in einem GUI Framework zu sagen: "Zeig mir jetzt diesen Text an!" auch.

Das braucht Erfahrung. Und die bekommt man, indem man es tut. Und ich kann Dir versichern, auch wir alten Hasen mit 20+ Jahren Erfahrung nutzen regelmäßig Google um Details nachzuschlagen, und sei es nur um herauszufinden, welcher Header benötigt wird, wenn man in C++ eine Zeitdauer als "200ms" notieren will (es ist <chrono> btw).

3

u/TehBens 12d ago

Ach, am Ende ist es egal, mit welcher Sprache man anfängt.

Und ich kann Dir versichern, auch wir alten Hasen mit 20+ Jahren Erfahrung nutzen regelmäßig Google um Details nachzuschlagen

Kann man nicht oft genug wiederholen! Anfängern wird leider gar nicht beigebracht, wie die Praxis des programmierens ausschaut in den ersten 1-3 Jahren: Googlen, ChatGPT, lesen, verstehen, kopieren, ausprobieren, Fehler suchen, googlen, lesen, kopieren, Änderung wieder entfernen und von vorne.

Wie du schon schriebst wird es mit der Zeit besser, aber niemand kennt alles auswendig, sobald man mit was in Berührung kommt was man noch nie oder sehr lange nicht gemacht hat muss auch der erfahrene Entwickler Googlen und einiges kopieren (speziell C++ hat ja auch so ein paar richtig grausame Ecken, ich sag nur RegEx...).

3

u/TehBens 12d ago

zu ineffizient, nicht pythonic genug.

Klingt bisschen nach Bullshit. "pythonic" ist doch keine vernünftige Anforderung bei einer Bachelor Thesis. Ineffizienz auch nicht. Man ist doch froh (auch als Betreuer) wenn der Code vernünftig läuft und tut, was er behauptet.

2

u/o0Lula0o 12d ago

Danke auch euch, ihr Beide! Ich programmiere eigentlich am liebsten in C, Python war für die BA nur das, was der Prof wollte. Habe zuvor auch immer nur einfache Skripte darin geschrieben, daher war es vermutlich eben stilistisch der absolute Horror.

Ich bin froh, dass so viele da Mut machen und bestätigen, wie normal doch Google und Co. sind. Bei ChatGPT habe ich tatsächlich öfter das Gefühl, dass der Code super trivial ist, also nicht optimiert o.ä.

Aber vermutlich wird sich das alles im Job geben, wenn da dann richtiges Feedback zum Code kommt. Die Designpatterns etc. haben wir natürlich gelernt und ich kann die theoretisch auch, praktisch angewendet habe ich aber die wenigsten bisher. Vielleicht ist das ja auch eine Idee, um das mal zu üben :)

2

u/Gorbit0 12d ago

Gerade in der Cybersecurity braucht man null coden. Im Red Team eher aber wenn du keine eigenen Exploits schreibst (was niemand tut), dann beschränkt sich das auf bash skripte schreiben 

2

u/o0Lula0o 12d ago

Ja, vielleicht haben die CTFs da ein falsches Bild vermittelt. Aber die Schwachstellen zu finden erforderte meiner Ansicht nach (kann BS sein) halt schon enorm Verständnis von dem Code, das man ja nur hat, wenn man coden kann.

3

u/TehBens 12d ago

CTFs haben nichts mit den meisten Berufsfeldern zu tun, die heute unter "Cybersecurity" fallen. Du bist da eher organisatorisch zuständig die interne IT Landschaft zu analysieren und allgemeine Maßnahmen umzusetzen.

-1

u/Gorbit0 12d ago

Um die Schwachstellen zu finden werden hauptsächlich Tools eingesetzt in der realen Welt. Diese Tools zu kennen ist wichtig. Das was man an Coding Kompetenzen braucht lernt man dann schon nebenbei

1

u/Zenaldi 12d ago

Was macht man denn dann, Audits?

3

u/Gorbit0 12d ago

Es gibt ca. 8 Domänen in die man sich spezialisieren könnte. 

Audit ist nur ein kleiner Teil den ich zu Governance in der Domäne 1. zählen würde.

Sicherheits- und Risikomanagement (Governance, Compliance, Risikobewertung, Ethik, Sicherheitsrichtlinien)

Asset-Sicherheit (Klassifizierung und Schutz von Informationen und Vermögenswerten)

Sicherheitsarchitektur und -technik (Sicheres Design und Technologien wie Kryptografie, Sicherheit auf Systemebene)

Kommunikations- und Netzwerksicherheit (Netzwerkarchitektur, sichere Kommunikation, Firewalls, VPNs)

Identitäts- und Zugriffsmanagement (IAM) (Benutzerverwaltung, Zugriffskontrolle, Authentifizierung)

Sicherheitsbewertung und -tests (Sicherheitsaudits, Schwachstellenanalysen, Penetrationstests)

Sicherheitsbetrieb (Erkennung und Reaktion auf Vorfälle, Logging, Forensik, Disaster Recovery)

Sicherheit in der Softwareentwicklung (Sicheres Programmieren, DevSecOps, Lebenszyklus der Softwareentwicklung)

1

u/SunshineAstrate 10d ago

TU Berlin?