Wieviel Prozent von C++ muss man wirklich können um ordentliche C++ Programme zu schreiben?



  • Ist die Frage, ob du architekturelle Fragen C++ oder Programmierung allgemein unterordnest. Nehmen wir Mal an, dass das nicht zu C++ an sich gehört. Nehmen wir ferner an, dass Du mit dem C++-Wissen eine notwendige Bedingung meinst, diese allerdings nicht die einzige notwendige Bedingung ist (weil man beispielsweise auch noch programmierungs-spezifisches Wissen benötigt, das man aber nicht direkt C++-Wissen zuordnen würde).

    Dann denke ich, dass Du ziemlich wenig Wissen brauchst. Templates sind außerordentlich hilfreich, man kommt aber auch sehr gut ohne aus, es ist dann eben mehr Arbeit. Polymorphie sollte man natürlich im Griff haben, ohne lässt sich wohl nur wenig bewerkstelligen. Und RAII/RRID ist auch ein Grundkonzept, ohne dass es sich nicht so gut leben lässt. Containerwissen ist auch wichtig, aber man muss ja nicht alles so ganz genau wissen... wenn man den vector beherrscht, ist das meiste geschafft.

    Für single-threaded-Programme reicht das also vermutlich. Keine Ahnung, wie viel sonst noch im Standard steht. Für dieses Wissen benötigt man zum lernen unterschiedlich lange, je nach Programmiervorkenntnissen vielleicht nur wenige Monate, komplett ohne möglicherweise Jahre. Aber auch hier ist komplett vernachlässigt, wie viele Stunden man pro Monat voraussetzt. Ich würde bei meiner Schätzung vermutlich 20-80 Stunden pro Monat anrechnen.



  • ca. 15 Prozent



  • B4andit schrieb:

    Das heißt erst mal Java und OpenGL ES und dann schaue ich mir auch noch C++ mit dem NDK an.

    LOL, Java = Just Another Vulnerability Added



  • Prozent schrieb:

    Und wie lange dauert es etwa, diese Prozentzahl zu erreichen, wenn man am Ball bleibt?

    Ich denke, man sollte etwa 75% erreicht haben, bevor man sich ernsthaft mit Softwareentwicklung beschäftigt. Diese 75% sind dann aber auch der alltägliche Umfang, den man so braucht und meines erachtens leicht zu erlernen.
    Für Spielereien reicht durchaus auch weniger, aber ist eben nicht "ernsthaft".

    Hier kannst Du je nach Vorkenntnissen und Vorstellungsvermögen binnen weniger Wochen ankommen und produktiv damit arbeiten. Das schließt dann aber eben auch ein paar Wochen ernsthafte Beschäftigung damit ein und nicht einmal die Woche 'ne Stunde oder so...

    Der Rest ist eher das Zeug, dass man im Ausnahmefall benötigt, wenn man nicht gerade regelmäßig im Ausnahmebereich programmiert. Ich programmiere jetzt seit bald 20 Jahren C++ und würde mich bei 90% sehen, vorrangig, weil ich mit C++11 auch wieder neues dazugekommen ist und ich nicht sicher abschätzen kann, was ich davon noch nicht gesehen habe.

    Wir reden hier aber von C++ - nicht vom Programmieren allgemein. Hier geht es um Erfahrung und die sammelt man halt immer weiter. Meiner Erfahrung nach, entwickelt sich die Welt der Informatik auch schneller in die Breite als ich hinterherkomme, die Bereiche zu überblicken.
    Das gehört aber durchaus zum Reiz der Programmierung: Es gibt immer wieder was Neues.

    C++ ist wirklich fähig. Bis man alles mal selbst ausprobiert und erfahren hat, da sollte man durchaus viel Zeit für einrechnen.

    Prozent schrieb:

    C++ bietet ja oftmals mehr Sprachfeatures als man in der Praxis dann wirklich braucht. Was ist also wirklich wichtig?

    Wenn Du Dir Java-Entwickler anschaust, die bekommen ihre Probleme ja in der Regel auch gelöst. Das Aufrufen von Funktionen eines Frameworks führt zu nutzbaren Programmen. Für viele Probleme reicht das. Vielleicht ist das also das wichtigste.

    Ich persönlich halte es für wichtig, dass man Probleme lösen kann, wo keine fertige Lösung existiert. Und das möglichst auch noch "schön", also ohne sichtbare Hacks und performant.
    Da sind wir dann aber schnell wieder im Bereich von Jahren.



  • Unterschätze mal die Entwicklung für Android nicht. Ich knie mich da jetzt voll rein und lassen Microsoft komplett hinter mir, habe es noch nicht mal mehr auf der Platte. Ich kann mich auch irren, aber ich denke schon dass Android eine große Zukunft hat.



  • B4andit schrieb:

    Ich lerne seit 6 Jahren C++(mit Unterbrechungen) und kann immer noch nicht überall mitreden. Liegt aber auch daran, dass ich vieles gar nicht brauche für meine Miniprojekte.

    Die 100 Regeln was man alles machen kann und sollte, lasse ich einfach weg sonst würde ich wohl bis heute nicht ein Programm geschrieben haben. Auch mixe ich C mit C++ wenn mir danach ist und erfinde auch das Rad neu wenn mir danach ist.

    Kurz, fang einfach an zu programmieren. Wenn dir was fehlt lerne es dazu, wenn dir nix fehlt hast du viel richtig gemacht.

    Ich bezweifle, dass ich jemals richtig C++ lernen werde. Denn ich sattle gerade voll auf Android und Linux um, da ich hier die Zukunft der nächsten Jahre sehe. Das heißt erst mal Java und OpenGL ES und dann schaue ich mir auch noch C++ mit dem NDK an. Microsoft sehe ich in Zukunft immer weiter absaufen. Windows8 ist der IE der OS und über die neue XBox wird sich auch keiner freuen. Das kann nur den Bach runter gehen, wenn sie nicht schnell handeln.

    Danke, die erste brauchbare Antwort.

    Nathan schrieb:

    Wieviel Prozent von C++ muss man wirklich können um ordentliche C++ Programme zu schreiben?

    Auf jeden Fall reicht 1% um Anfängerbücher über C++ zu schreiben. 😃

    Danke auch an dich.

    Genau das habe ich nämlich vor.
    Ich möchte C++ vermitteln können und daher ein Buch für Anfänger schreiben, so ganz nach dem Vorbild der C++ Bücher von Jürgen Wolf.
    Ich werde also etwa diese 1 % lernen und dann meine super C++ Bücher schreiben, so wie ihr mir hier empfohlen habt.



  • Eisflamme schrieb:

    Ist die Frage, ob du architekturelle Fragen C++ oder Programmierung allgemein unterordnest. Nehmen wir Mal an, dass das nicht zu C++ an sich gehört. Nehmen wir ferner an, dass Du mit dem C++-Wissen eine notwendige Bedingung meinst, diese allerdings nicht die einzige notwendige Bedingung ist (weil man beispielsweise auch noch programmierungs-spezifisches Wissen benötigt, das man aber nicht direkt C++-Wissen zuordnen würde).

    Dann denke ich, dass Du ziemlich wenig Wissen brauchst. Templates sind außerordentlich hilfreich, man kommt aber auch sehr gut ohne aus, es ist dann eben mehr Arbeit. Polymorphie sollte man natürlich im Griff haben, ohne lässt sich wohl nur wenig bewerkstelligen. Und RAII/RRID ist auch ein Grundkonzept, ohne dass es sich nicht so gut leben lässt. Containerwissen ist auch wichtig, aber man muss ja nicht alles so ganz genau wissen... wenn man den vector beherrscht, ist das meiste geschafft.

    Für single-threaded-Programme reicht das also vermutlich. Keine Ahnung, wie viel sonst noch im Standard steht. Für dieses Wissen benötigt man zum lernen unterschiedlich lange, je nach Programmiervorkenntnissen vielleicht nur wenige Monate, komplett ohne möglicherweise Jahre. Aber auch hier ist komplett vernachlässigt, wie viele Stunden man pro Monat voraussetzt. Ich würde bei meiner Schätzung vermutlich 20-80 Stunden pro Monat anrechnen.

    Danke auch deine Antwort ist sehr hilfreich.

    Allerdings brauche ich aufgrund der Leistungsanforderungen die Leistung der anderen CPUs, Threading gehört also dazu.



  • Gibt es bei dem Termindruck überhaupt ein ordentliches C++ Programm mit nennenswerten LOC?



  • B4andit schrieb:

    Gibt es bei dem Termindruck überhaupt ein ordentliches C++ Programm mit nennenswerten LOC?

    Die Frage ist - glaube ich - nicht Sprachabhängig.

    In dem Moment, wo eine Deadline von Anfang an drückt, macht man häufig den Fehler in Aktionismus zu verfallen. Das ist aber ein Fehler, der häufig im Vertrieb gemacht wird, wo ein "Experte" weiß "Wir haben da doch schon was, das ist zwar was anderes, aber der Kunde will Geld loswerden, das nehmen wir mit."
    Dann kommt der Vorgesetzte in die Entwicklung und sagt: "Wir haben da doch schon was, das muss man doch nur umarbeiten." gefolgt von "Wir haben dem Kunden versprochen, das in drei Monaten zu liefern."
    Als Variante davon habe ich mal erlebt, dass eine Firma ein ZIP Archiv geliefert hat, mit einem Programm, das nicht startete. Die Lieferung war pünktlich, die Rechnung konnte im richtigen Quartal gebucht werden, anschließend folgten Bugfixes - man könnte auch sagen, man begann das Programm zu entwickeln. 😉

    Diese Methode hat sich in meiner Berufserfahrung zu drei Lehren entwickelt: Erstens: Kein Mensch interessiert sich für ordentliche Programme, aber wenn sie nicht ordentlich sind, sind die depperten Entwickler schuld, die dann schnellstmöglich Patches nachreichen sollen und zweitens: Es ist erstaunlich, was alles (auch zeitlich) machbar ist, obwohl der Entwickler es für unmöglich hält, wenn der "Experte" im Vertrieb es schon verkauft hat.
    Achja... und drittens: Das eine Projekt, was der "Experte" im Vertrieb verkauft hat und auch nach 10 Jahren Entwicklungszeit unmöglich vollständig und vertragsgemäß umzusetzen ist, macht Millionenverluste (irgendwer muss die Entwickler ja auch bezahlen) und die Strafzahlung frisst einen Großteil der Rücklagen auf, die mit viel Betriebsamkeit und Hektik in den letzten 10 Jahren von den anderen Entwicklern aufgebaut wurden.

    Meiner Erfahrung nach ist C++ nicht das Problem. 🙂



  • Ja, da hast du natürlich Recht. Das hat nix mit C++ zu tun. Ich habe auch ein paar Jahre als Entwickler gearbeitet und bis auf einmal waren nur Projekte dabei, so wie du sie beschrieben hast.

    Das war auch mit ein Grund warum ich nicht mehr für Firmen arbeite die Software entwickeln und verkaufen. Wenn, dann arbeite ich nur noch an Inhouse-Lösungen. Ich habe keine Lust mehr immer das "Ich bin schuld, wenn es nicht rechtzeitig und gut fertig ist" T-Shirt zu tragen.

    Mir tun die armen Schweine Leid, die sich so was jeden Tag antun müssen.



  • Prozent schrieb:

    Nathan schrieb:

    Wieviel Prozent von C++ muss man wirklich können um ordentliche C++ Programme zu schreiben?

    Auf jeden Fall reicht 1% um Anfängerbücher über C++ zu schreiben. 😃

    Danke auch an dich.

    Genau das habe ich nämlich vor.
    Ich möchte C++ vermitteln können und daher ein Buch für Anfänger schreiben, so ganz nach dem Vorbild der C++ Bücher von Jürgen Wolf.
    Ich werde also etwa diese 1 % lernen und dann meine super C++ Bücher schreiben, so wie ihr mir hier empfohlen habt.

    Dann bitte deinen Namen, wir brauchen den für die Blacklist. 😃
    Mit 1 % wird ein Buch genauso wie die von Jürgen Wolf - genauso schlecht.



  • Nathan schrieb:

    Prozent schrieb:

    Nathan schrieb:

    Wieviel Prozent von C++ muss man wirklich können um ordentliche C++ Programme zu schreiben?

    Auf jeden Fall reicht 1% um Anfängerbücher über C++ zu schreiben. 😃

    Danke auch an dich.

    Genau das habe ich nämlich vor.
    Ich möchte C++ vermitteln können und daher ein Buch für Anfänger schreiben, so ganz nach dem Vorbild der C++ Bücher von Jürgen Wolf.
    Ich werde also etwa diese 1 % lernen und dann meine super C++ Bücher schreiben, so wie ihr mir hier empfohlen habt.

    Dann bitte deinen Namen, wir brauchen den für die Blacklist. 😃
    Mit 1 % wird ein Buch genauso wie die von Jürgen Wolf - genauso schlecht.

    Aber ihr seid dann schuld, weil ihr mir gesagt habt, dass 1 % C++ Wissen ausreichen. 😃



  • Es gibt gute Programmierer, die schlechte Softwareentwickler sind.
    Es gibt schlechte Programmierer, die gute Softwareentwickler sind.

    Und es gibt sehr gute Programmierer, die ebenfalls seht gute Softwarentwickler sind.
    Von dieser Sorte gibt es nicht sehr viele, vielleicht die besten 5% der Informatiker.



  • Prozent schrieb:

    Re: Wieviel Prozent von C++ muss man wirklich können um ordentliche C++ Programm
    Und wie lange dauert es etwa, diese Prozentzahl zu erreichen, wenn man am Ball bleibt?
    C++ bietet ja oftmals mehr Sprachfeatures als man in der Praxis dann wirklich braucht. Was ist also wirklich wichtig?

    Mal ein anschaulicher Vergleich:

    C++ ist die Weiterentwicklung von C.
    Den Grundwortschatz von C kann man locker in 3 Monaten lernen.
    Theoretisch kann man damit alles programmieren....... 😃



  • fgjadölfajfdöl schrieb:

    Mal ein anschaulicher Vergleich:

    C++ ist die Weiterentwicklung von C.
    Den Grundwortschatz von C kann man locker in 3 Monaten lernen.
    Theoretisch kann man damit alles programmieren....... 😃

    Das geht sogar praktisch ^^

    Und ich halte belastbare Kenntnisse in C für eine der grundlegensten Fertigkeiten, die ein Entwickler haben sollte, gerade weil man alles auch in C ausdrücken kann, man daraus also ableiten kann, was (wahrscheinlich) bei abstrakteren Sprachen passiert, um ein Problem zu lösen und damit abstraktere Elemente, wie zum Beispiel OOP, zu begreifen statt nur anzuwenden.

    Wer C++ lernt, muss allerdings OOP lernen, bevor er sagt "Ich kann". Neben der Sprache und der Möglichkeit ein beliebiges Programm darin zu formulieren, muss er zusätzlich einige Konzepte erlernen, die sein Denken besser strukturieren. Ähnliches gilt für Const-Correctness, Mehrfachvererbung, Templates...

    Das Programm kann man auch in C erzeugen, die Hilfe vom Compiler, es überhaupt programmieren zu können, bekommt man aber nicht.



  • Xin schrieb:

    Und ich halte belastbare Kenntnisse in C für eine der grundlegensten Fertigkeiten, die ein Entwickler haben sollte, gerade weil man alles auch in C ausdrücken kann, man daraus also ableiten kann, was (wahrscheinlich) bei abstrakteren Sprachen passiert, um ein Problem zu lösen und damit abstraktere Elemente, wie zum Beispiel OOP, zu begreifen statt nur anzuwenden.

    Ja und der nächste kommt und sagt, dass belastbare Assembler-Kenntnisse zu den grundlegensten Fertigkeiten gehören. Für den übernächsten ist es Bedingung, dass ein Entwickler mindestens eine funktionale Sprache wegen der ach so tollen Denkweise kennt.
    Jeder will doch ständig nur anderen Aufzwingen, was er selbst am besten kann.
    Alles Blödsinn. Man kann im Jahr 2013 prima als Entwickler überleben, ohne ein C-Guru zu sein. Lesen kann den Schrott doch sowieso jeder.



  • C++ bietet recht viel.
    Da gibts den C Teil, mit dem man sehr low level gehen kann, dann gibts den OOP Teil, dann gibts noch den generischen Teil mit Templates, und wer weiß, vielleicht könnte man ja noch eine weitere Kategorie von C++ finden.

    Welche Teile du benötigst, hängt stark vom Projekt ab.
    Hier im Forum findet man ja immer wieder Experten in Sachen Templates. In der Praxis (also im Beruf) habe ich festgestellt, dass Templates nicht so häufig verwendet werden.
    In meiner derzeitigen Firma müssen wir außerdem zu einem alten Compiler kompatibel bleiben, und dessen Templatefähigkeiten gehen gegen Null! Auch in Sachen STL ist dieser Compiler eher schwach.

    Gute Software besteht nicht nur aus eleganten Codezeilen. Sie besteht sehr stark auch aus guten Ideen. Ich kenne C++ Entwickler, die sind nicht wirklich am neuesten Stand, und verwenden ein C++ das eher an C erinnert. Trotzdem sind die von ihnen betreuten Subsysteme spitze, weil sie aus einem Guss sind (eben nur diese eine Person arbeitet daran), und weil die Personen viel fachliches Know How haben.
    Was bringt es mir, wenn ich perfekt Templates verwenden kann, und den C++ Standard runterbeten kann, mir aber der fachliche Background in einem Projekt fehlt? Seien es nun Hardwarekenntnisse, Netzwerkkenntnisse, oder was auch immer...

    C++ ist ein Werkzeug, man braucht etwas Theorie dafür, aber hauptsächlich Erfahrung.
    Wie beim Autofahren: Wieviel Übung braucht man, um Fahren zu können? Naja, etwas Theorie, ein paar Fahrstunden, dann aber auch möglichst bald ab in die Praxis, erst da lernt man es dann so richtig.

    Von daher: Sieh zu, dass du möglichst bald Praxis bekommst. Du wirst sehen, deine Kollegen sind auch nur Menschen und auch nicht perfekt. Auch nicht in C++!



  • wewrfesdfs schrieb:

    In meiner derzeitigen Firma müssen wir außerdem zu einem alten Compiler kompatibel bleiben, und dessen Templatefähigkeiten gehen gegen Null! Auch in Sachen STL ist dieser Compiler eher schwach.

    Wieso passiert so etwas?

    Wieso tauscht die Firma den Compiler nicht gegen was besseres aus?
    LLVM und G++ kosten doch nichts.

    Und wenn man solche Upgrades von Anfang an, seit Projektbeginn macht und sich an die C++ Standards hält, dann hält sich auch der Aufwand, alte Software immer fortwährend an zukünftige Compiler anzupassen, in Grenzen.

    Was bringt es mir, wenn ich perfekt Templates verwenden kann, und den C++ Standard runterbeten kann, mir aber der fachliche Background in einem Projekt fehlt? Seien es nun Hardwarekenntnisse, Netzwerkkenntnisse, oder was auch immer...

    Der Code wäre wartbar, d.h. eine andere Person könnte das Problem übernehmen und die Entwicklung weiterführen.

    Bei so Spagetticode, den nur ein einziger Guru versteht, geht das meistens nicht und was soll man dann machen, wenn der Guru den Arbeitsplatz verläßt?
    Ja, dann kann man den Code wegwerfen und neu anfangen oder den Code irgendwie stümperhaft weiterflicken.

    Außerdem ist der Guru dann in einer Position die Firma unter Druck zu setzen.
    Kann sich also viel erlauben, ohne befürchten zu müssen, gefeuert zu werden, denn so einer, der so nen unwartbaren scheiß one-man-show Code programmiert, der ist ja wichtig.



  • Wieso passiert so etwas?

    Wieso tauscht die Firma den Compiler nicht gegen was besseres aus?
    LLVM und G++ kosten doch nichts.

    Und wenn man solche Upgrades von Anfang an, seit Projektbeginn macht und sich an die C++ Standards hält, dann hält sich auch der Aufwand, alte Software immer fortwährend an zukünftige Compiler anzupassen, in Grenzen.

    Wäre mir auch lieber, aber es handelt sich um embedded Plattformen, für die es leider nur den Schrott Compiler gibt. Und zu dem müssen wir zumindest noch ein paar Jahre kompatibel bleiben.

    Der Code wäre wartbar, d.h. eine andere Person könnte das Problem übernehmen und die Entwicklung weiterführen.

    Bei so Spagetticode, den nur ein einziger Guru versteht, geht das meistens nicht und was soll man dann machen, wenn der Guru den Arbeitsplatz verläßt?
    Ja, dann kann man den Code wegwerfen und neu anfangen oder den Code irgendwie stümperhaft weiterflicken.

    Außerdem ist der Guru dann in einer Position die Firma unter Druck zu setzen.
    Kann sich also viel erlauben, ohne befürchten zu müssen, gefeuert zu werden, denn so einer, der so nen unwartbaren scheiß one-man-show Code programmiert, der ist ja wichtig.

    Da hast schon recht, allerdings ist der Code gar nicht so schwer zum Verstehen.
    Wir hatten auch mal Leuten da, die meinten, alles müsse ein Design Pattern sein, und dieser Code ist schwer verständlich. Ich behaupte mal, die haben den Code selbst nicht mehr verstanden.

    Da ists mir dann lieber, die Leute verwenden nur den Teil von C++, den sie auch kapieren. Denn solange sie das tun, ist der Code auch verständlich.



  • Die Leute vom ioccc verwenden auch nur den Teil von C, den sie kapieren. 😉


Anmelden zum Antworten