Hallo Tom,
ich wüßte gar nicht, wie das "Können" einer Programmiersprache zu definieren sei, das ist wohl auch aus einigen der bisher eingetrudelten Antworten auf Deine Frage herauszulesen. Mit dem Problem schlagen sich zahllose Arbeitgeber herum, die sich aus Zeugnissen, Zertifikaten und Selbstdarstellungen der Bewerber ein Bild machen sollen. Ich bin überzeugt, daß es in dieser Frage keine harten Kriterien zur Beurteilung gibt - besser: geben kann. Für mich wäre das Testen der Kandidaten mit einer komplexen Aufgabe die einzig richtige Methode zur Beurteilung des Könnens, was für das praktische Wirtschaftsleben nahezu unmöglich ist.
Einige Dinge gehen mir durch den Kopf, die die Frage nach einer wie auch immer definierten Könnerschaft - und damit auch die erforderliche Zeit, um etwas können zu können - merklich beeinflussen:
1. Erfahrungen aus bereits erlernten Sprachen und Systemen beschleunigen nachfolgende Lernphasen erheblich. Oder bewirken das genaue Gegenteil: ich denke da an Programmierer, die in prozeduralen Sprachen hervorragende Arbeit leisteten und dann OO-Systeme lernten. Schnelle Lernfortschritte. Gute Prüfungsergebnisse. Output in der beruflichen Anwendung: katastrophal; ich habe das so oft gesehen... Ein Gutteil unserer labilen Großsysteme geht sicherlich auf dieses Konto. Da scheint es an so etwas wie "Meta-Können" zu fehlen, im OO-Beispiel die Befähigung zu objektorientiertem Denken, Kenntnis, Verständnis und Anwendungsfähigkeit von Design Patterns und Systemarchitekturen, also von Dingen, die weit über die Beherrschung von semantischen und syntaktischen Eigenarten einer Sprache hinausgehen.
Allerdings gibt es auch Sprachen, die völlig anders "ticken" als der große Brei Pascal/C/C++/Basic. Da fällt mir meine völlige geistige Überforderung (anfänglich) beim Erlernen von Prolog ein. Oder, vor zwei Wochen erst, mein Versuch, mal eben auf die Schnelle für den XEmacs in LISP ein kleine rekursive Funktion zu schreiben, die Umlaute gegen ihre HTML-Entitäten austauscht. Bei aller Bescheidenheit halte ich große Stücke auf meine Fähigkeit, mir in küzester Zeit neue Systeme anzueignen; und da ich vor 15 Jahre mal mit LISP AutoCAD-Erweiterungen zur 3-D-Darstellung von Magnetfeldern entwickelt habe, dachte ich, das wird in einer Stunde erledigt sein. Denkste! Was für ein Waterloo - nach zweieinhalb Tagen in völliger Verzweiflung haben mich Hinweise aus dem Usenet erst auf den richtigen Weg gebracht...
2. Manche Sprachen haben einen enorm großen Sprachumfang. Als Beispiel ich selbst: das System, bei dem ich am meisten zu können glaube, ist Visual FoxPro, es verfügt über etwa 1.000 Funktionen und Objekte. Nur einen kleineren Teil davon kann ich direkt aus dem Kopf abrufen, spezielle, selten gebraucht Dinge muß ich nachschlagen (was in der Regel wenige Sekunden dauert). "Kann" ich FoxPro? Spielt der Anteil der auswendig verfügbaren Schlüsselwörter eine Rolle für meine Fähigkeit zur Bewältigung komplexer Aufgaben?
3. Das systemische Umfeld einer Sprache spielt häufig eine wichtige Rolle. Jemand, der im Alltag mit JavaScript umgeht, erlernt Flashs ActionScript in wenigen Stunden. Wenn er die Logik - und Unlogik - der Timelines und der diversen Objektbesonderheiten, die nichts mit der Sprache ActionScript zu tun haben, nicht beherrscht, bringt er mit Flash nichts zustande. Im Bezug auf mein FoxPro-Beispiel von oben ist die Qualität meines Outputs maßgeblich bestimmt durch mein Datenbankdesign und meine SQL-Fähigkeiten; alle Sprachkenntnisse allein wären nutzlos.
Zu dem Thema gibt es noch jede Menge zu sagen (etwa die Betrachtung komplexer Sprachelement wie z.B. die regulären Ausdrücke - wann spricht man da von "Können"?), das soll erst mal reichen - und Arbeit ist auch noch da!
hth Robert