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



  • 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. 😃



  • Prozent schrieb:

    Das sind 100 %, mehr gibt's nicht.

    Natürlich gibts mehr. Wenn du die Sprach- und Bibliotheksfeatures kennst, kannst du noch lange keine ordentlichen Programme schreiben. Du musst vieles über Softwareentwicklung im Allgemeinen sowie C++-spezifische Techniken und Idiome lernen. Diese wurden erst mit der Zeit entdeckt, guter C++-Code von 2000 und 2010 sieht komplett anders aus.

    B4andit schrieb:

    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.

    Die Regeln, wie sie du nennst, brauchen zwar einige Zeit um sie zu lernen. Aber sie führen dazu, dass du besseren Code schreibst, weniger Entwicklungszeit benötigst, und schliesslich mehr Programme entwickelst. Alleine was z.B. RAII an Zeit einspart...



  • Eine Sache ist es, C++ zu kennen. Aber selbst wenn Du 100% C++ kennst, ist das noch kein Garant, dass Du ordentliche Programme schreiben kannst. C++ selbst ist nur das Werkzeug. Mir sind schon Leute begegnet, die durchaus C++ können, aber deren Programme möchte ich nicht warten müssen oder gar in der Produktion verantworten.

    Programme zu entwickeln hat etwas von Kunst. Man muss Phantasie haben und kreativ sein um gute Programme zu schreiben. Und wie der Künstler auf der einen Seite natürlich wissen muss, mit welchem Pinsel er welchen Strich machen kann, muss er daneben eben auch überlegen, welchen Strich er wie haben möchte. Und je mehr er mit den Pinseln machen kann, desto mehr Möglichkeiten hat er, seiner Kreativität freien lauf zu geben. So in etwa steht das mit der Programmierung.



  • 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++!


Anmelden zum Antworten