Ich bin mir nicht sicher, ob ich die Intention deines Professors verstanden habe. Geht es ihm darum, dass man lieber einfachere Programme schreibt, damit siie möglichst jeder verstehen kann?
Aber warum soll denn deine Überflieger für schwierigeren Code bessere Positionen erhalten? Weil sie (alleine) Besseres programmieren können? Oder weil sie irgendwie für Höheres geschaffen sind?
Ehrlich gesagt weiß ich das auch nicht so genau, ich beobachte das ja nur als interessierter Amateur und von außen.
Wenn ich seinen Vortrag richtig verstanden habe, dann ging es ihm darum, dass zwar die Besten die effizienteste Lösung gefunden hatten. Nur ist sie eben auch sehr mathematisch und nicht jeder Kollege versteht sie auf Anhieb. U.U. ist angesichts typischer Rechenleistungen die effizienteste Lösung nicht immer die Beste.
Wenn ich für meine bescheidenen Zwecke einfache Aufgaben zu lösen habe, dann mache ich, sofern eine Routine nicht x-Durchläufe hat, um die Effizienz kein großes Gewese mehr. Denn so oder so wird sie nicht nur in akzeptabler Zeit laufen, sondern der Zeitgewinn einer mathematisch besseren Lösung liegt im Bereich von 10 Millisekunden oder 20 Millisekunden.
Plane ich allerdings die Mustererkennung einer Kamera in Echtzeit, dann habe ich wiederum andere Probleme.
Ich hatte mal ein Vorstellungsgespräch erst mit Test und danach Gespräch. Beim Test war ich fast zu gut, aber beim Gespräch hinterher konnte ich gar nicht überzeugen, sodass mein sehr gutes Testergebnis keine große Rolle mehr spielte.
Aha, interessant. Warum konntest Du beim Gespräch nicht überzeugen?
Hm, Assembler ist mich keine gerade abstrakte Sprache, aber wer's nicht kennt, für den ist sie sicher umständlich.
Unter "abstrakt" verstehe ich eher abstrakte Konzepte u.a. von objektorientierten Sprachen wie Java mit Interfaces u.ä.
Ich habe Assembler immer geliebt und bin fast bei jeder Rechnergeneration am Ende da gelandet.
Mit diesen kryptischen Sprachen, Klassen und Vererbung komme ich allerdings nicht gut klar.
Ja, Programme solten gut lesbar sein, keine Frage. Wobei aber Dokumentation praktisch in jeder Firma besser und ausführlicher sein kann
Bei Studienbeginn hatte ich mir mal den Spaß erlaubt, in einem kleinen Programm allen Variablen Schachfigurnamen zu geben, nicht gerade gut lesbar
Dann arbeite mal als Sysadmin wie ich mit einem Haufen Grafikern ... die keine Nerds sind und das auch nicht sein wollen, was ja auch okay ist ... und erzähl denen mal etwas über Dateinamen!
Eines Tages habe ich die Verwendung des Wortes "_neu" in Dateinamen grundsätzlich untersagt. Denn irgendwann findet man sonst in uralten Datenbeständen eine Datei namens "Firmenlogo_neu". Oder auch "_neu2", "_neuneu" oder "_aktuell".
Persönlich vergebe ich Variablennamen in zwei Kategorien: Da gibt es zum einen Variablen, die im ganzen Programm verwendet werden, denen gebe ich spezifische Namen, wie DAT_Anz01 o.ä. Und es gibt andere Variablen, die ich nur aus Bequemlichkeit der Berechnung in irgendwelchen Routinen brauche, die nenne ich Ar0, Ar1, Ar2 ... (für Ar=Arbeit).
Ich weiß, eigentlich müsste ich irgendwelche Werte bei Aufruf der Soubroutine korrekt übergeben, und mit lokalen und globalen Variablen arbeiten, das wäre dann sauber.
Mache ich aber so gut wie nie, denn das ist mir irgendwie zu umständlich. Ich verwende dann ausschließlich globale Variablen.
Dann ist es mir auch irgendwann egal, ob ich auch mal bei Ar12 lande, aber so lang wird dann meine Liste an Arbeitsvariablen dann doch nie.
Ich schreibe gern viele kleine Soubroutinen, die nur begrenzte Aufgaben haben. Will ich sie verändern, dann schreibe ich eine neue. Diese Soubroutinen kommentiere ich zu Anfang sehr ausführlich, das mag unter Programmierern verpönt sein, ich liebe das aber. Es sieht dann etwa so aus:
'--------------------------------------------------------------------------------------------------------------------
' OPEN_DAT01
' Öffne Textdatei und lese Textdatei aus
' IN: datpath01 Pfad auf Textdatei
'OUT: txtcont01 Inhalt der Textdatei
' err1 = 0 okay, =1 Fehler
'--------------------------------------------------------------------------------------------------------------------
Innerhalb der Soubroutine habe ich dann aber so gut wie überhaupt keine Kommentare mehr. Oder nur schon mal, solange die Routine noch Probleme mach, das lösche ich aber später dann auch wieder. Es gab schon Listings, die ich anschließend im Netz geteilt habe. Da habe ich die Kommentare sogar in Englisch formuliert.
Besonders schlau sind dann Kommentare bei anderen wie
A=1 ' A jetzt auf 1 setzen
Super, das sehe ich selber auch!
Übrigens vermisse ich in der aktuellen Firma mehr ein dokumentierte Übersicht über die Masse der Programme und deren Zusammenspiel, als wie ein einzelnes Programm funktioniert; so hat alles seine Schwächen.
Vor vielen Jahren habe ich einmal eine Apple-Dokumentation gelesen (überhaupt war darin Apple immer stark), die hieß "The Human Interface Guidelines". Darin ging es an sich nicht einmal um Apple-spezifische Themen, auch wenn die Beispiele mit dem damaligen Apple-Betriebssystem illustriert waren.
Sondern vielmehr um wahrnehmungsspezifische Probleme, Unterschiede diverser natürlicher Sprachen, Dateiorganisation uvm. Im Anhang dann Verweise auf rund 300 wissenschaftliche Publikationen, Psychologie usw. usf.
Das konnte auch jemand lesen und sich bilden, der nicht mit einem Apple-Betriebssystem zu tun hatte (bin aber eigentlich ein Apple-Freak und habe die längste Zeit mit Macs gearbeitet).
Derzeit kann ich mir das aber nicht leisten und bin auf Win 10, ist auch okay.
Ich kenne mich mit dem Win - Betriebssystem nicht näher oder im Detail aus, aber wie es für mich aussieht, hat sich anscheinend eines bislang kaum geändert: Dateien durch Pfade zu identifizieren.
Das war am Mac schon immer anders.
Da konnte man Dateien durch Pfade identifizieren, musste es aber nicht und außerdem riet Apple davon ab.
Stattdessen forderte man vom System eine Identifizierungsnummer an. Hat man diese einmal, ist es völlig egal, wohin der User eine Datei verschiebt, umbenennt oder irgend etwas. Deine Software wird diese Datei mit der ID-Nummer finden und entsprechend behandeln.
Sicher können kluge und sorgsame Programmierer auch mit Pfaden umgehen. Tatsächlich habe ich aber mal mit einem OpenSource-Filmeditor gearbeitet - immerhin eine durchaus anspruchsvolle Aufgabe - der das nicht gut konnte. Denn der funzte immer nur dann, wenn die Dateien auf derselben Partition waren, mit einer externen Festplatte kam der nicht klar.
Im Grunde völlig lächerlich und albern für so ein komplexes Programm.
Außerdem stürtzte das Programm laufend ab - und dann gründlich mit zu erzwingendem Neustart des Rechners - wenn er mal eine Datei nicht finden konnte.
Ich selbst habe auch noch nicht begriffen, wie mal so ein Aufruf auch nur eines simplen Dateiauswahlfensters, geschweige den Dialogboxen mit Radiobuttons o.ä. unter Win 10 läuft. Das wird unter MacOS X (und vorher) viel einfacher, intuitiver und auch durch Mac-eigene Tools unterstützt. Da hat man dann eine Art Editor und kann das grafisch entwerfen, speichern, und vom Programm aus steuert man das Ding mit Werten an, das habe ich für Win 10 noch nicht ausbaldowert.
Aber vllt. werde ich einfach nur alt.