?
Ich glaube nicht das man einen Zeitraum benennen kann bis jemand C++ beherrscht. Manche brauchen dafür vielleicht wirklich nur 6 MOnate, andere haben es auch nach 30 Jahren nicht kapiert.
Das Problem liegt ganz wo anders. Wer wirklich programmieren lernen will muß die Fähigkeit haben sich selber immer wieder in Frage zu stellen, die Bereitschaft haben, auch Dinge die er seit Jahren "so gemacht hat" über den Haufen zu werfen wenn sie sich als falsch erweisen.
Ich erinnere mich da an die beiden "Programmierer" die es als logisch empfanden, true auf 0 und false auf 1 umzudefinieren... das machten sie ja schon immer so... (Leider kein witz)
Menschen lernen indem sie für richtiges Verhalten belohnt und für falsches Verhalten bestraft werden. So unlogisch dies auch klingen mag, dieses Prinzip ist der Grund warum es so viele schlechte Programmierer gibt. Gerade in der Programmierung gibt es oft viele Möglichkeiten die zu ungefähr ähnlichen Ergebnissen führen. Als Anfänger sieht man aber selten den Unterschied zwischen einer guten und einer schlechten Lösung. Alles was man sieht ist, _ob_ das Programm funktioniert oder nicht.
Dabei definieren wir "funktionieren" meistens sehr freizügig. So ein Programm kann memory-leaks haben so groß wie Scheunentore und alle 10 Minuten abstürzen, aber wir betrachten es als: Läuft, stürzt nur ab un zu ab... Wenn das Programm aber (nach dieser Definition) funktioniert, dann haben wir ja alles richtig programmiert und halten uns zumindest für einen passablen Programmierer...
Im realen Leben sind wir es gewohnt kleinere Fehler zu übersehen. Und das ist auch notwendig. Wenn z.B. eine Wegbeschreibung nicht auf den Meter genau ist finden wir so trotzdem zum Ziel. In der Computerei aber ist jeder noch so kleine Fehler halt ein Fehler und ein Programm müßte solange als Fehlerhaft gelten bis es _genau_ das macht, was es soll, und nicht nur ungefähr. Dabei reicht es nicht wenn der Fehler nicht mehr auftritt, imho gilt ein Fehler erst dann als beseitigt wenn man genau erklären kann warum er überhaupt aufgetreten ist.
Doch um einen Fehler als solchen erkennen zu können muß man im ersten Schritt begreifen, was der Code überhaupt macht. Erst wenn man genau erklären kann was der Code macht und wenn er sich auch genau so verhält wie man es erwartet, erst dann fängt man an Programmieren zu lernen. Ich behaupte das viele diesen Punkt nie erreichen... (Und wers nicht glaubt sollte sich mal die Beispiel auf www.thedailywtf.com anschauen...)