Wenn ich in einer Stellenausschreibung lese:
"Anforderungen: [..] Hierfür erwarten wir gute Kenntnisse in C++ oder
Delphi und Mathematik [...]"
Ab wann hat man "gute Kenntnisse"? Ich stolpere immer wieder über solche
Formulierungen, doch finde ich eine solche Aussage sehr schwammig.
Ich habe damals zB sehr viel in Turbo Pascal programmiert und bin jetzt
dabei in C/C++ einzusteigen. "Programmieren" an sich habe ich also
verstanden.
MfG
Thomas
man sollte es nicht unterschätzen. Im Vergleich zu Delphi oder Turbo
Pascal ist c++, gerade wenn man versucht, OO zu programmieren, eine
etwas andere Liga.
Wenn man alle Viertelstunde zweimal die Referenz nachschlagen muss, ist
man noch nicht so weit. Die ueblichen Konzepte sollten auch bekannt
sein. Doppelt verlinkte Listen, Statusmaschinen, Objektgeneratoren,
Singlets, Semaphoren, Scheduler, das Uebliche eben ...
Ich verstehe gute Kenntnisse so, dass man allgemein Programmiererfahrung
hat und die Standardsprachkonstrukte kennt. Im Fall von C++ zum Beispiel
Bedingungen, Schleifen, Klassen, Templates, vielleicht STL, Umgang mit
Header- und Programmdateien. Also so, dass man nicht von
Sprachkonstrukten überrascht wird, wenn man sich fremdem Code ansieht.
Dussel schrieb:> Also so, dass man nicht von> Sprachkonstrukten überrascht wird, wenn man sich fremdem Code ansieht.
Das sind Grundkenntnisse. Für 'gute' Kenntnisse darf man mindestens noch
erwarten, dass man all diese Konzepte von sich aus richtig einsetzen
kann.
Ja, das meinte ich eigentlich auch. Ich meine, man kann nicht jede
Funktion und ihr Arbeitsweise kennen, aber die Grundlagen, mit denen
alles aufgebaut wird, sollte man kennen und nutzen können.
Gut heisst NICHT, das man die paar Schlüsselwörter der Sprache kennt,
sondern die tausenden Funktionen der üblichen APIs benutzen kann,
und den einen oder anderen Fallstrick aus eigener Erfahrung.
Ein Programm in der Sprache geschrieben haben reicht nicht, man sollte
schon jahrelang darin programmieren.
Hey noch Was schrieb:> Wenn ich Delphi waehlen koennte, wuerd ich mir C++ nicht antun.
für ein Komandozeilen programm, mit vielen Threads, Mutexen und vielen
system aufrufen ( CreateProcess, DuplicateTokenEx usw. )?
man sollte eine sprache nach der Aufgabe auswählen! Treiber schreiben
sich auch sehr schlecht in Delphi.
Einen Treiber wuerd ich mir in gar nichts antun. Wenn man ein
vernuenftiges Timing haben muss, ist ein PC sowieso ganz falsch. Dann
sollte man auf Hardware gehen. Fuer ein beliebig komplexes
Steuerprogramm, das nicht ganz so enge Timinganforderungen hat ist auch
Delphi richtig. Wird alles unterstuetzt.
Hallo,
leider ist es bei solchen Selbsteinschätzungen häufig so, dass man die
eigenen Kenntnisse um so kritischer betrachtet, je besser sie in
Wirklichkeit sind.
Dummerweise gewinnen bei solchen Einschätzungen auch schnell die Blender
den Blumentopf, die sich schon dann als "Experte" oder "Spezialist"
titulieren, wenn sie kaum den Namen einer Qualifikation buchstabieren
können.
Ich selbst war vor einigen Jahren auch einmal auf so einen "Experten"
hereingefallen. Er besaß angeblich eine jahrzehntelange Berufserfahrung
im Bereich UNIX und Linux, machte aber immer wieder wirklich fatale
Anfängerfehler. Teilweise waren die Fehler sogar so elementar, dass ich
bei der gemeinsamen Fehlersuche nicht auf Anhieb auf die Idee gekommen
war, dass man überhaupt so blöde Fehler machen konnte. Dummerweise
musste ich ziemlich bald meinem Kunden erklären, dass ich einen
Vollpfosten auf sein Projekt angesetzt hatte.
Dieser Typ rennt vermutlich auch heute noch als "Experte" durch die
Gegend, wobei die Liste seiner "erfolgreichen" Projekte noch länger
geworden sein dürfte.
Ungefähr:
Gute Kenntnisse in Python = 2 Jahre Praxis
Gute Kenntnisse in Java = 3 Jahre Praxis
Gute Kenntnisse in C++ = 5 Jahre Praxis
Unter der Prämisse, dass man auch 50 % Praxis in anderen
Programmiersprachen, also bei Python + 1 Jahr was anderes, bei C++ 2,5
Jahre was anderes als C++.
Der C++-Standard ist extrem umfangreich und kompliziert, daher erreicht
man gute Kenntnisse recht spät.
wenn Du Dir schon selbst unsicher bist, was "gute" Kenntnisse sind, dann
hast Du auch keine.
Im übrigen lächerliche Fragestellung, bewirb Dich oder laß es bleiben.
Wenn Du den Job nicht bekommst, dann war einer besser - so läuft das
Spiel.
Andreas Schweigstill schrieb:> leider ist es bei solchen Selbsteinschätzungen häufig so, dass man die> eigenen Kenntnisse um so kritischer betrachtet, je besser sie in> Wirklichkeit sind.
Das kann man unterstreichen. Es gibt ein Gleichnis, ich glaube von
Descartes, der das Wissen des Einzelnen mit einer Fläche vergleicht. Der
Flächeninhalt korrespondiert dann mit dem vorhandenen Wissen. Das
Nichtswissen liegt außerhalb dieser Fläche. Nimmt der Flächeninhalt zu,
nimmt aber auch Flächenumfang zu, also der Grenze zwischen Wissen und
Nichtwissen. Umso mehr jemand weiß, desto stärker wird er sich auch über
sein Nichtswissen bewusst.
Im konkreten Fall: Eigentlich würde ich "gute Kentnisse" relativ
weit oben ansiedeln; aber hier heißt es "gute Kenntnisse in C++
oder Delphi". Dann würde ich mal von der Schnittmnenge der beiden
ausgehen, und damit die Anforderungen etwas bescheidener betrachten.
Es sieht eher nach hausbackener Programmierung aus, sonst würde
sich die Wahl nicht stellen.
Also mit etwas Selbstbewusstsein wird es zu schaffen sein.
es kommt natürlich auch darauf an, ob es eine Stelle für
Berufseinsteiger ist oder schon jahrelange Berufserfahrung vorausgesetzt
/ erwartet wird. Dies wirkt sich natürlich auch auf die erforderlichen
Kenntnisse aus.
Ich merke es bei mir, wo es an Kenntnissen und Erfahrung fehlt. Im
JavaEE Umfeld war ich jetzt nicht so bewandert, bis auf zwei kleinere
Projekte (eins während meiner Diplomarbeit und ein weiteres im
Nebenjob), aber in JavaSE ganz gut. Aufgrund der Komplexität diverser
Frameworks, mit denen ich bislang noch nichts zu tun hatte, macht man
als Anfänger durchaus auch den ein oder anderen dummen fehler:
Sortierfunktionen in Entities, um sie nach Datum zu sortieren. Total
bescheuert ist sowas, funktioniert aber leider ...solange nur eine
Person ist System ist ;-)
>wenn Du Dir schon selbst unsicher bist, was "gute" Kenntnisse sind, dann>hast Du auch keine.
Na das ist eine sehr kühne Theorie.
Es gibt eben Leute mit wenig Selbstvertrauen, die aber wirklich was
können und es gibt Blender, die nichts können, aber es nicht merken. Ein
Mensch mit wenig Selbstvertrauen kann also ebenso die obige Frage
stellen, obwohl er längst Profi ist. Das sind die, die dann ihr ganzes
Leben beschissen werden von den Blendern.
Laut Duden bedeutet Kenntnisse "das Wissen über einen bestimmten
Sachverhalt". Wenn im Stellenangebot keine langjährige Erfahrung,
sicherer Umgang oder ähnliches gefordert wird, dann sollte eine etwas
intensivere Beschäftigung im Studium reichen.
Programmierprofi schrieb:> Gute Kenntnisse in Python = 2 Jahre Praxis> Gute Kenntnisse in Java = 3 Jahre Praxis> Gute Kenntnisse in C++ = 5 Jahre Praxis
Wenn 5 Jahre Programmiererfahrung vom AG gefordert wären, dann hätte er
es auch geschrieben. Einer der größten Fehler den man machen kann ist es
irgendetwas in eine Stellenausschreibung herein zu interpretieren oder
am besten noch dem potentiellen AG im Gespräch die Ausschreibung zu
erklären (hatte ich im letzten Monat 2x - bin zum Glück nicht
personalverantwortlich). Immer auch den Kontext beachten: AT ist eine
komplett andere Baustelle z.B. als Kernel-Programmierung.
Ich finde man darf bei so etwas auch nicht vergessen, dass die Lernkurve
bei in der Programmierung recht steil ist und man in des seltensten
Fällen irgendetwas von Grund auf neuprogrammiert. Solange man dabei
nicht komplett wie ein Ochs vor Berg steht, kann man sich ruhig
bewerben. Wenn es nicht reichen sollte, gibt es halt eine nette Absage
(und vielleicht 5€ vom Amt).
Klaus schrieb:> und man in des seltensten Fällen irgendetwas von Grund auf> neuprogrammiert.
Genau so ist es. In der Industrie hat man praktisch immer eine
bestehende Codebasis, zu der eine weitere Funktionalität hinzugefügt
werden soll. Was man eigentlich viel öfter braucht als selbst etwas
komplett neu zu entwerfen ist die Fähigkeit, von anderen geschriebene
Software zu lesen und zu verstehen, und die eigenen Änderungen so
einzufügen dass das ganze System weiterhin so funktioniert wie
gewünscht. Mit dem an den Hochschulen gelehrten Software Engineering hat
das nicht immer viel gemein ;-)
Mark Brandis schrieb:> Was man eigentlich viel öfter braucht als selbst etwas> komplett neu zu entwerfen ist die Fähigkeit, von anderen geschriebene> Software zu lesen und zu verstehen, und die eigenen Änderungen so> einzufügen dass das ganze System weiterhin so funktioniert wie> gewünscht.
Und wenn derjenige zusätzlich seinen Kollegen die Notwendigkeit der
vorgenommenen Änderungen erläutern kann und dann noch die Arbeit
vernünftig dokumentiert...
Ich mag es mir kaum vorstellen.
>Mit dem an den Hochschulen gelehrten Software Engineering hat>das nicht immer viel gemein ;-)
Demnach dürfte ein Hochschulabsolvent nie eine Anstellung bekommen. Die
Informatiker lernen oft mit Pseudosprachen. Eine exakte
Programmiersprache zu erlernen, ist jedem Studenten dann im Eigenstudium
überlassen. Wenn er Delphi richtig beherrscht, sollte der Umstieg auf
C++ nicht die große Hürde darstellen. Borland hatte damals ja seinen C++
Builder gänzlich auf Delphi aufgebaut. Ging auch.
Paul schrieb:> Demnach dürfte ein Hochschulabsolvent nie eine Anstellung bekommen. Die> Informatiker lernen oft mit Pseudosprachen
Engineering ist etwas komplett anderes als Programmieren. Beim ersten
malt man Kästchen und Rauten auf Papier, beim zweiten tippt man
kryptische Wörter und Zeichen in den Rechner.
>Engineering ist etwas komplett anderes als Programmieren. Beim ersten>malt man Kästchen und Rauten auf Papier, beim zweiten tippt man>kryptische Wörter und Zeichen in den Rechner.
Nichts anderes schrieb ich. Beschäftigung mit Algorithmik, ausgedrückt
in Pseudocode. Die eigentliche Programmiersprache tritt in den
Hintergrund
Paul schrieb:> Demnach dürfte ein Hochschulabsolvent nie eine Anstellung bekommen. Die> Informatiker lernen oft mit Pseudosprachen. Eine exakte> Programmiersprache zu erlernen, ist jedem Studenten dann im Eigenstudium> überlassen. Wenn er Delphi richtig beherrscht, sollte der Umstieg auf> C++ nicht die große Hürde darstellen. Borland hatte damals ja seinen C++> Builder gänzlich auf Delphi aufgebaut. Ging auch.
Ich bin absolut der Meinung, dass ein Hochschulabsolvent der
Informatik/Technischen Informatik/Mathematik/Physik/etc. im Prinzip jede
Programmiersprache innerhalb einer überschaubaren Zeit erlernen kann. Es
sind die Arbeitgeber, die an dieser Stelle leider sehr unflexibel sind:
Da wird in Stellenausschreibungen stets gern verlangt, dass man
Programmiersprache X im Dialekt Y seit mindestens drölfzig Jahren
beherrscht, und man das Framework ABC bis aufs siebte Bit hinterm Komma
genau kennt.
> Die eigentliche Programmiersprache tritt in den Hintergrund
Nicht in der Realität der Arbeitgeber :-(
@Mark Brandis
Ich stimme Ihnen zu. Es ist leider so, dass zu sehr darauf geschielt
wird, dass jemand eine Sache Ewigkeiten macht. In zwanzig Jahren C++
kann er vielleicht auch zwanzig Jahre Stuss abgeliefert haben. Ich habe
ja darauf hingewiesen, dasas man neben der eigentlichen, gefragten
Programmiersprache auch noch andere Sachen können sollte. Ich nehme
lieber denjenigen, der fünf Jahre C++ programmiert hat, aber auch
insgesamt 15 Jahre extra in anderen Programmiersprachen, als jemanden,
der 20 Jahre C++-Erfahrung hat und sonst nichts. Gerade auch "exotische"
Programmiersprachen sollte man als Student lernen. Es kommt immer gut
an, wenn man sagt, dass man sich z. B. mit Lisp beschäftigt hat.
Schnelle Einarbeitung ist aus Arbeitgebersicht wichtig und für den
Bewerber auch nachvollziehbar, aber was da auf dem Arbeitsmarkt abgeht
ist Realsatire, wenn ein mickriges kleines Unternehmen solche
Anforderungen stellt und dann auch noch nicht mal bereit ist, 35k im
Jahr zu zahlen, bei einem befristeten Arbeitsvertrag. Ich hatte mal ein
Stellenangebot vorliegen, dass jemand gesucht wurde, der drei
Programmiersprachen und zwei DBMS beherrschen soll.
Dort wo Fachkräfte bei der Einstellung mitwirken, Leute, die früher auch
Software entwickelt haben, ist der ganze Bewerbungsprozess wesentlich,
weil die wissen, worauf es ankommt und keine Strichliste führen. Will
man aber jemanden haben, der schnell eingearbeitet ist, dann sind
vorhandene Kenntnisse in der gefragten Programmiersprache von Vorteil.
Einen Hinweis an die AGs möchte ich mir noch erlauben: Ich habe doch
nicht ohne Grund den Vergleich Python, Java und C++ gemacht. Bei Python
lernt man in zwei Jahren das, was man in fünf Jahren C++ lernt, weil
Python sehr viel abstrakter, intuitiver und sauberer ist. Daher sollte
man, wenn man die Möglichkeit hat, neue Projekte in moderneren
Programmiersprachen als C++ entwickeln. Da kann man die Kosten
verringern und der Nachwuchs ist auch schneller angelernt.
Meinungen zur Programmierkenntnisse:
Anfänger bedeutet: Ja, ich habe schon etwas davon gehört und weiß was
Variablen und Konstante zu bedeuten haben. (1. Level)
Fortgeschrittene bedeutet: sicheren Umgang mit OOP,
Entwicklungsumgebung, diverse Programmiertechiken bzw. Technologien,
kann selbständig GUI und Programmmodule entwickeln.(2.Level)
Professionell deutet: Softwaresystemen entwerfen,planen und umsetzen.
Z.B. Hardwaretreiber, Echtzeit kernel oder komplexe Steuerungsprogramme
selbst zu entwickeln dürfte für ein Profis kein Problem sein. (High
Level)
C++ Gurus: Was ist C++ ?
stimmt jemand mir zu ?
>Fortgeschrittene bedeutet: sicheren Umgang mit OOP,>Entwicklungsumgebung, diverse Programmiertechiken bzw. Technologien,>kann selbständig GUI und Programmmodule entwickeln.(2.Level)
Natürlich sicherer Umgang mit OOP. Aber es muß nicht C++ sein. Wie
gesagt, wenn er mit Delphi o. ä. gut umgehen kann, ist der Umstieg auf
C++ nur eine Fleißsache. Und die Spezialisierung auf eine
Entwicklungsumgebung ist m. E. nonsens. Jeder Firma kocht da im
embedded-Bereich seine eigene Suppe (Keil, IAR, Lauterbach, Metrowerks
usw.). Vielleicht bringt da Eclipse mal einen Wandel, wobei die
Debugging-Schiene wieder schwierig wird?. Die Einarbeitung in eine neue
Entwicklungsumgebung ist eine Sache von Tagen. Kannste eine, kannste
alle.
>Professionell deutet: Softwaresystemen entwerfen,planen und umsetzen.>Z.B. Hardwaretreiber, Echtzeit kernel oder komplexe Steuerungsprogramme>selbst zu entwickeln dürfte für ein Profis kein Problem sein. (High>Level)
Wieviele Informatiker, die wahrlich Profis sind, können hardwarenah
programmieren (Hardwaretreiber)? Echtzeitkernel und Steuerungsprogramme
ist auch nicht für jeden Profi machbar, obwohl er super in OOP ist und
jahrelang z. B. Datenbankanbindungen programmieren kann.
Ehrlich gesagt, ich bin kein Informatiker sondern ETler. Einen
Hardwaretreiber, komplexes Steuerungsprogramm programmieren, traue ich
mir zu (auch schon gemacht). Aber eine relationale Datenbank, einen
Kernel, GUI-Gräber überlasse ich lieber dem Informatiker.
Zu Deiner Frage:
In deinem Fall dürften "gute Kenntnisse" praktisch anwendbare, also
keine reinen Anfängerkenntnisse gemeint sein. Der AG wird kaum
"Grundkenntnisse" schreiben, sonst wird er von Bewerbungen erschlagen.
Ich schließe dies daraus, dass C++ und Delphi absolut nicht zu
vergleichen sind und eigentlich nur in der Anwendungsentwicklung
miteinander konkurrieren können. Wenn Du Automatisierung schreibst,
könnte ich mir vorstellen, dass die jemanden suchen der eine Anwendung
zur Parametrierung irgendeines Systems entwickelt. Am Ende findest Du
dich mit C# und .NET wieder.
Grundsätzlich:
C++ ist wesentlich(!) komplexer als C#, Java, usw.. Man kann 15 Jahre
lang Software in C++ machen (z.B. Windows MFC-Anwendungen) und nur einen
kleinen Teil der Sprachmöglichkeiten ausnutzen. Dass grosse Teile von
C++ in einer Entwicklung "tabuisiert" werden, ist sogar üblich, z.B.
Operator-Overloading, virtuelle ("Diamond-") Vererbung. Templates werden
auch nur selten benutzt (selbst programmiert!). Sogar der Einsatz von
STL ist bereits ein sehr fortgeschrittenes Topic.
Um erfolgreich mit C++ zu programmieren, genügen Kenntnisse in Syntax
von C++, in OO und Patterns absolut nicht. Man muss wissen können, was
der Compiler daraus macht. Java und C#, etc. sind im Vergleich zu C++
Kinderkram.
Grüße
Stephan
>Ich schließe dies daraus, dass C++ und Delphi absolut nicht zu>vergleichen sind und eigentlich nur in der Anwendungsentwicklung>miteinander konkurrieren können.
Borland hat das Gegenteil bewiesen.
Paul schrieb:> Borland hat das Gegenteil bewiesen.
Ich kann mich nicht daran erinnern, dass es Borland geschafft hat,
Delphi-Compiler für den Embedded-Bereich zu etablieren, insbesondere
Microcontroller. Ggf. hat es noch eine ordentliche Verbreitung bei
Embedded PCs auf x86-Basis.
Pascal im Embedded-Bereich gab es ja z.B. damals für die KatCe-Rechner;
damit hatte ich doch einige Projekte umgesetzt (Steuerrechner für
Messatenerfassung, Interferometrie, Rastertunnelmikroskopie).
>Ich kann mich nicht daran erinnern, dass es Borland geschafft hat,>Delphi-Compiler für den Embedded-Bereich zu etablieren, insbesondere>Microcontroller.
Das meine ich nicht. Sondern, daß Borland seinen C++ Builder gänzlich
als "Kondom" über das Borland Delphi gezogen hat. Wenn man den
"Objektcode" des C++ Builders sieht, fällt das Zwischenübersetzen von
C++ nach Delphi auf. Das bedeutet, daß Delphi ähnliche Sprachkonstrukte
(natürlich strenger typkontrolliert) anbietet wie C++.
Übrigens ist C++ im "Hardcore"embedded Bereich auch eher die Ausnahme.
Dort wird in Assembler oder C geschrieben. Erst bei größeren
Prozessorsystemen (ARM, EPC) ist es angebracht.
Hi,
MaWin schrieb:> Gut heisst NICHT, das man die paar Schlüsselwörter der Sprache kennt,> sondern die tausenden Funktionen der üblichen APIs benutzen kann,> und den einen oder anderen Fallstrick aus eigener Erfahrung.
Na ja, da bist Du schon etwas mutig! ;-) Ich kenn' da ein paar API's,
die Du sicher nicht kennst ... :-)
Anyway, ein paar Jahre aktive Programmiererfahrung in nicht nur einer
Sprache und nicht nur mit Visual Studio (!!!) ist in Sachen "gute
Kenntnisse" schon hilfreich. In's konkrete Umfeld musst Du Dich sowieso
immer einarbeiten.
Schönen Tag noch, Thomas
MaWin schrieb:
> Gut heisst NICHT, das man die paar Schlüsselwörter der Sprache kennt,> sondern die tausenden Funktionen der üblichen APIs benutzen kann,> und den einen oder anderen Fallstrick aus eigener Erfahrung.
APIs zu kennen gehört für mich nur sehr sekundär zu 'guten' Kenntnissen.
Was der eine täglich braucht und beherrscht, wird der andere nie zu
sehen bekommen. Jegliche API-Kenntnisse sind somit Spezialkenntnisse und
der Arbeitgeber sollte sie spezifisch angeben. (Wenn ich z.B.
Linux-Kerneltreiber schreibe werde ich wohl kein einziges gemeinsames
API verwenden wie der Kollege, der sich mit grossen Datenbanken
befasst.)