Was versteht man unter 'guten Kenntnissen' in einer Programmiersprache?

6 Antworten

Für mich heißt das eine blinde Umsetzung. Ich schildere dir mein Problem, du interviewst mich ggf. und baust dir im Kopf schon dein Programm zusammen. Du sagst mir deine Aufwandsabschätzung. Du setzt es eigenständig um.

Soll heißen du bist geübt im Umgang und musst nichts nachschlagen. (Es sei denn es ist eine komplett neue Technologie)

Lamanini  18.07.2020, 15:30

Wenn man sich erst gut auskennt, wenn die Umsetzung eines beliebigen Problems ohne Nachschlagen geht, dann kennt sich wohl kaum ein Mensch gut aus.

Wenn ich meinen Mentor was Frage, dann googelt er es in 1/4 Fällen. Einfach weil Softwareentwicklung so komplex ist, dass man vieles nicht auswendig wissen kann.

0
safur  18.07.2020, 15:38
@Lamanini

Dann hat er es wohl nie ordentlich gelernt.

Das ist die neue Generation von Entwickler. Ich muss es nicht können kann es ja googeln 😉

Die kopieren dann auch Schnipsel zusammen 😂

0
Lamanini  18.07.2020, 16:06
@safur

Wenn du nichts nachschlägst, bist du entweder ein Genie, oder machst jeden Tag die gleichen Handgriffe ohne irgendeine Abweichung vom Tagesablauf zu vertragen.

Sich über andere Leute lustig zu machen, welche so klug sind, sich einzugestehen, dass andere Leute besser als man selber bei etwas sein können, zeigt eher, wie weit am Anfang man noch ist. Wo man gerade die ersten Schritte gemacht hat, und jetzt meint, gut zu sein. Das Unwissen, was man alles nicht weiß, führt eben zu genau dieser Arroganz.

Die Realität ist aber, dass es zu viel Wissen für einen Einzelnen ist. Wie Einstein schon gesagt hat, ist Bildung nicht das Auswendig wiedergeben von Fakten.

Die Realität ist, dass die Informatik ein viel, viel zu komplexes und riesiges Gebiet ist, die man nicht auswendig kennen kann. Wenn wir unser Können darauf beschränken würden, was man sich in den Kopf prügeln kann, um es dann ohne Nachschlagen ausführen zu können, würden wir nicht da sein, wo wir sind.

Ein Entwickler erstellt Systeme, deren Komplexität einiges in den Schatten stellt. Und dann steht so einer wie du daneben und lachst über ihn, weil er nicht mehr auswendig weiß, ob der Endpoint jetzt /auth/token, /authentification/token oder sonst was war, oder weil er nicht mehr weiß, ob die Methode jetzt GetProperty<Property>() oder Get<Property>() oder Get(Property.class) war.

Relevantex xkcd.

2
safur  18.07.2020, 16:25
@Lamanini

Du vermischt hier Themen. Klar ist Informatik komplex. Ich mache mich auch nicht lustig, ich sagte es sei denn neue Technologien. Eine Programmiersprache bzw. Mehrere solltest du schon blind beherrschen.

Natürlich muss man die Syntax wissen ohne nachzudenken. Vielleicht hast du es dann einfach nicht verstanden.

Hier liegt aber der Unterschied. Ich hatte vor dem Studium eine Ausbildung und kam aus der Praxis. Wenn du also nur aus der Uni kommst, verstehe ich deinen Ansatz.

Es geht nicht darum selbst zu entwickeln sondern zu führen und leiten.

Ehrlich gesagt würde ich dann nie gute Kenntnisse in x behaupten.

Es heißt auch nicht, dass der FS es lernen kann

0
Lamanini  18.07.2020, 19:23
@safur
Du vermischt hier Themen.

Genau das tust du. Sehen wir gleich.

Eine Programmiersprache bzw. Mehrere solltest du schon blind beherrschen.

Dann definiere doch mal "blind beherrschen".

Natürlich muss man die Syntax wissen ohne nachzudenken.

Genau hier vermischst du Sachen. Gerade eben hast du noch behauptet, dass man dir ein beliebiges Programm umsetzen können muss, ohne irgendwas nachzugucken, solange man die Technologie dahinter schonmal gennengelernt hat. Jetzt ist es plötzlich nur noch Syntax. Da sind Welten dazwischen. Große Welten. Aber auch die Aussage ist Unsinn. Es kommen zu vielen Sprachen regelmäßig neue Features dazu. Und die hat man dann vielleicht mal auf irgendeinem Blatt gesehen, aber muss dann, wenn man sie einsetzt, vielleicht trotzdem nochmal nachgucken, in welcher Reinfolge man jetzt was schreibt.

In C# kam z.B. dazu, dass man Usings nicht mehr nur

using (var myVar = new Res())
{
  myVar.DoSomething();
}

Sondern jetzt seit C# 8.0 auch mit

using var myVar = newRes();
myVar.DoSomething();

schreiben. Das ist relativ neu.

Ein beliebter Fehler in z.B. PHP ist zum Beispiel, dass man bei der integrierten hmac Methode die Parameter falsch rum angibt. Und PHP schluckt das. Da kann man sich noch so doll freuen, dass man irgendwas reingesteckt hat, was irgendwie funktioniert, aber wenn sich das ein IT-Security Experte anguckt, fällt das auseinander. Hätte man doch mal einen kurzen Blick in die Docs geworfen.

Vielleicht hast du es dann einfach nicht verstanden.

Gewagte Worte von dir, wenn man sich mal so anguckt, was du bis jetzt geschrieben hast.

Hier liegt aber der Unterschied. Ich hatte vor dem Studium eine Ausbildung und kam aus der Praxis.

Was hast du denn studiert? Ich muss sagen ich wäre erstaunt, wenn es was mit Informatik im Namen war.

Ich studiere Dual.

Es geht nicht darum selbst zu entwickeln sondern zu führen und leiten.

Was auch immer du jetzt damit sagen willst. Wenn es "ich weiß nicht wirklich, worauf es ankommt" ist, dann kann man das auch direkt sagen.

Es heißt auch nicht, dass der FS es lernen kann

Wie gesagt. Gewagte Worte.

Beim Entwickeln geht es darum, dass du auf die Schritte kommst, die du machen musst, um ein Problem zu lösen. Ob es dann doThis() oder doThat() in dieser einen Library hieß, ist irrelevant und das kriegt man durch googlen schnell raus. Aber wer immer noch auf dem level ist, dass man Befehle oder Methodennamen aus Libraries auswendig lernt, der hat da keine wirkliche Vorstellung, was man noch so alles sich angucken könnte.

0
safur  18.07.2020, 19:49
@Lamanini

Wenn es um die Frage ging, was man darunter verstehen sollte zitiere ich mal KarlRanseierIII

Gute Kenntnisse heißt, daß ich Probleme in der Sprache gut, (effizient) und leicht leserlich mit den Mitteln der Sprache lösen kann. Also muß ich die Kernsprache beherrschen und einen soliden Überblick über die Möglichkeiten der Standardbibliothek haben (andernfalls mache ich mir unnötige Arbeit).
Wiederkehrende leichte Aufgaben sollte ich ohne Nachschlagen lösen können.

Wenn jemand AE gelernt hat und diesen Berufstitel trägt, erwarte ich er kann mir blind ein Programm umsetzen. Gerade wenn er behauptet seine Kenntnisse wären gut in dieser Sprache. Es gibt leider auch Absolventen die das eben nicht können, das fand ich sehr peinlich.

Das hat noch nichts mit der Weiterentwicklung zu tun bzw., dass die Sprachen auch leben.

Nun zum UNI-Absolventen: Ich habe schon einige gesehen die eben keine modernen Sprachen gelernt haben. Daher geht es viel mehr um den Transfer und das leiten von Menschen. Das hatte ich damit gemeint, das war überhaupt nicht auf dich bezogen.

Ich habe erst vor einem Jahr eine Kollegin bekommen, Duales-Studium - die auch alles googelt. Sie weiß grundsätzlich wie es geht, aber sie ist sich nicht wirklich sicher.

Beim Entwickeln geht es darum, dass du auf die Schritte kommst, die du machen musst, um ein Problem zu lösen. Ob es dann doThis() oder doThat() in dieser einen Library hieß, ist irrelevant und das kriegt man durch googlen schnell raus. Aber wer immer noch auf dem level ist, dass man Befehle oder Methodennamen aus Libraries auswendig lernt, der hat da keine wirkliche Vorstellung, was man noch so alles sich angucken könnte.

Ja das sehe ich tatsächlich ganz anders. Man muss dazu sagen, es gab früher noch lange nicht soviel Unterstützung durch die IDE wie heute. Ein Fehler und der Compiler hing. So gesehen hat es wirklich Sinn gemacht sehr sorgfältig und ohne jegliche Fehler zu arbeiten. Das gleiche würde ich einem Anfänger empfehlen. Wenn du eine Sprache von Grund auf lernst, hast du die für immer in dir.

Der zweite Schritt kommt erst später, der Transfer. Natürlich kann ich zwischen den Sprachen transferieren, weil ich eine Methode aus einer anderen Sprache kenne.

Ob das Ding nun Mid() oder SubString() heißt .. man weiß was man möchte.

0
Lamanini  18.07.2020, 20:14
@safur
Wenn es um die Frage ging, was man darunter verstehen sollte zitiere ich mal KarlRanseierIII

Dir ist bewusst, dass seine Aussage in direktem Widerspruch mit deiner steht?

Guck mal hier:

die Kernsprache beherrschen, soliden Überblick über die Möglichkeiten der Standardbibliothek haben, Wiederkehrende leichte Aufgaben sollte ich ohne Nachschlagen lösen

Und jetzt guck dir mal deine Aussagen an:

Für mich heißt das eine blinde Umsetzung, musst nichts nachschlagen, Dann hat er es wohl nie ordentlich gelernt. Das ist die neue Generation von Entwickler.

Siehst du den Unterschied? Er sagt, dass man Grundlagen auswendig wissen sollte, du sagst, dass man absolut alles auswendig wissen und jederzeit wiedergeben können muss. Und es geht hier auch nicht um seine Worte, sondern um das, was du hier behauptest. Aber frag ihn doch, was er zu deiner Aussage denkt, wenn es dich interessiert.

Wenn jemand AE gelernt hat und diesen Berufstitel trägt, erwarte ich er kann mir blind ein Programm umsetzen.

Jetzt bin ich mir um so sicherer, dass dein Studiengang nicht Informatik im Namen hatte. Ich bitte dich, deine Anforderungen sind losgelöst von der Realität. Sobald ein Programm eine gewisse Komplexität erreicht, ist das praktisch unmöglich, es blind zu erstellen. Es gibt so unglaublich viele Baustellen, die da gelöst werden müssen, um auch nur grundlegende Funktionalität ermöglichen zu können, dass man das nicht alles auswendig wissen kann.

Es gibt leider auch Absolventen die das eben nicht können, das fand ich sehr peinlich.

Ich finde es eher peinlich, wenn sich Leute, die sich mit einem Thema nicht auskennen, hinstellen, und Leuten mit unerfüllbaren Erwartungen Angst machen. Was du da beschreibst behaupten nur Leute von sich, die nicht mal grundlegendes Wissen über die Thematik haben, und deswegen meinen, bereits alles zu wissen. Das ist aber nicht so.

Ich habe erst vor einem Jahr eine Kollegin bekommen, Duales-Studium - die auch alles googelt.

Und worauf willst du jetzt hinaus? Das sie komplexere Probleme löst, und daher nicht alles im Kopf behalten kann, dafür aber weiß, wo sie nachschlagen kann?

Der zweite Schritt kommt erst später, der Transfer. Natürlich kann ich zwischen den Sprachen transferieren, weil ich eine Methode aus einer anderen Sprache kenne.

Das lösen nicht nur Sprachen unterschiedlich, sondern auch Bibliotheken in der gleichen Sprache.

1
safur  18.07.2020, 20:36
@Lamanini
Siehst du den Unterschied? Er sagt, dass man Grundlagen auswendig wissen sollte, du sagst, dass man absolut alles auswendig wissen und jederzeit wiedergeben können muss.

Nein, dann hast du es falsch verstanden.

Ich meine man soll die Grundlagen auswendig kennen.

Wir sprechen aus zwei total unterschiedlichen Perspektiven.

0
Lamanini  18.07.2020, 20:56
@safur

Du sagtest, dass man absolut alles auswendig können muss, was man jemals mal gemacht hat, und hast dich darüber lustig gemacht, wenn Leute was nachschlagen.

1
safur  18.07.2020, 21:04
@Lamanini

Nein, das war nicht meine Intention, das hat du dir wohl herausgegriffen.

absolut alles auswendig können muss

Ich sprach bzgl. dem Kontext

'guten Kenntnissen' in einer Programmiersprache

hier würde ich schon erwarten, dass du alle gängigen Grundlagen beherrscht und diese blind umsetzen kannst.

Ich würde mich wundern, wenn du die Deklaration eines Arrays erst nachsehen musst. Wenn du die Syntax nicht kennst, die Datentypen dort usw.

Jetzt kommt es aber auf deine Erfahrung an. Ich habe z. B. noch NIE etwas mit Python gemacht außer im Bereich Pseudo-KI.

https://lightgbm.readthedocs.io/en/latest/

Ich fände es im Falle des FS durchaus legitim mich zu bewerben, wenn ich mir zutraue diese Sprache schnell lernen zu können.

0
Lamanini  18.07.2020, 22:18
@safur
hier würde ich schon erwarten, dass du alle gängigen Grundlagen beherrscht

Das ist nicht, was du gesagt hast. Du hast gesagt, dass man eine Software umsetzen können muss, ohne irgendwas nachschlagen zu dürfen, wenn das keine neue Technologie ist. Du hast gesagt, dass wenn man was nachschlagen muss, was keine neue Technologie ist, man nie ordentlich programmieren gelernt hat...

Ich würde mich wundern, wenn du die Deklaration eines Arrays erst nachsehen musst.

Ich bitte dich. Die Deklaration eines Arrays ist so wenig zu dem, was du mit "alles ohne nachschlagen können" eingeschlossen hast. Unter letzterem fällt sowas, wie denn jetzt nochmal diese eine Variable in ASP.NET Core bei der IServiceCollection heißt. War es jetzt AddDeveloperSigningCredential() ? Oder war es SignDeveloperCredential? Vielleicht auch SecureWithDeveloperCert() ?

Das googelt man. Und wenn ich meinen Chef frage, wie man denn nochmal genau die API so sichert, und er googelt, wie die Methode denn genau hieß, und dann von dir irgendwelche Kommentare kommen, dass er das wohl nie richtig gelernt hat, dann ist das einfach nur ein Beweis dafür, dass du selber nicht entwickelst.

1
safur  18.07.2020, 22:37
@Lamanini

Ganz ehrlich 😉 sei froh, du weißt nicht mit wem du gerade schreibst.

Wir sprechen wirklich von zwei unterschiedlichen Perspektiven. Ich würde dich dennoch sehr gerne zu einem Bewerbungsgespräch einladen, wenn du dein Studium absolviert hast und 1-2 Jahre Erfahrung gesammelt hast.

Du darfst mich an gerne privat anschreiben.

Gruß Safur!

0
michiwien22  19.07.2020, 18:08
@Lamanini

>Wenn du nichts nachschlägst, bist du entweder ein Genie, oder machst jeden Tag die gleichen Handgriffe 

sehe ich auch so

1

Das bedeutet, dass man die Programmiersprache überdurchschnittlich , also nicht bloß auf mittelmäßigem Niveau beherrscht.

So schnell mal Python zu erlernen reicht in diesem Zusammenhang nicht aus: es gibt unzählige Feinheiten in Python, denen man erst nach langer Zeit wirklich nahekommt, außer man ist ein Genie.

Was das genau heißt, ist natürlich schwammig, aber "fortgeschritten" heißt u.A.

  • Regex
  • Effektive und sichere thread programmierung
  • Co-routinen
  • Asynchrone IO
  • Generatoren
  • Kontext Manager
  • ...

aber auch Erfahrung mit komplexeren Frameworks wie z.B.

  • Qt
  • numpy
  • matplotlib
  • ...

Es lohhnt sich aber, dies Schritt für Schritt zu erlernen.

Alles Blind zu beherrschen (wie oben geschrieben wurde), halte ich für eine weltfremde Illusion, außer man macht tagtäglich das selbe. Es ist normal, 80% der Zeit auf der Suche nach einer Lösung zu sein. Oft sind Experten-Antworten in diversen Foren auf einem sehr hohen Niveau formuliert, sodass man schon sehr viel gelernt haben muss, um diese überhaupt zu verstehen.

Die Zeiten, wo es reichte, die Syntax einer Sprache zu erlernen, sind schon lange vorbei.

Ich würde "gute Programmierkentnisse" so definieren, dass du einfache Aufgabenstellungen implementieren kannst, weitestgehen ohne dabei in einer Dokumentation nachzuschlagen, dass du also von recht vielen häufiger Verwendeten Konstrukten und Befehlen weißt, wie sie sich verhalten und wie sie zu verwenden sind.

An sich ist das allerdings von Auftraggeber abhängig, was genau er mit "gute Programmierkentnisse" fordern will. Im Zweifelsfalle solltest du diesen entsprechend fragen.

Gute Kenntnisse heißt, daß ich Probleme in der Sprache gut, (effizient) und leicht leserlich mit den Mitteln der Sprache lösen kann. Also muß ich die Kernsprache beherrschen und einen soliden Überblick über die Möglichkeiten der Standardbibliothek haben (andernfalls mache ich mir unnötige Arbeit).

Wiederkehrende leichte Aufgaben sollte ich ohne Nachschlagen lösen können.

---

Andererseits definiert der Suchende doch wohl, was er/sie darunter versteht.

Gute Kenntnisse in einem Programm zu besitzen bedeutet, dass du die an dich herangetragenen Aufgaben lösen kannst und als Informatiker in der Lage bist, auftretende Fehler innerhalb des Programms zu erkennen und zu beheben. Du musst also mit dem Programm arbeiten können, ohne etwas nachschlagen zu müssen.

Sehr gute Kenntnisse hättest du dann, wenn du das Programm wie deine Westentasche kennen würdest und jedes einzelne Detail zuordnen könntest. Bei sehr guten Kenntnissen wärst du auch in der Lage, komplexere Aufgaben zu lösen oder ggf. zusetzliche Programmierungen am Programm selbst vorzunehmen.

Du hast zwar nach guten Kenntnissen gefragt, dennoch habe ich dir die sehr guten Kenntnisse mit aufgeführt, damit du den Unterschied erkennen kannst.

Woher ich das weiß:Berufserfahrung