.NET 3.0: Zu kompliziert für Anfänger?

August 15th, 2007 Permalink

In seinem Weblog fragt sich Microsoft MVP Jon Skeet ob .NET 3.0 nicht bereits zu groß geworden ist, um für einen Programmieranfänger als Einstieg geeignet zu sein. Ich sage: auf jeden Fall, aber Java auch!

Jon Skeet schreibt:

I’ve been looking at C# 3 in a fair amount of detail recently, and likewise going over the features of C# 2….I feel sorry for someone wanting to learn C# 3 from scratch. It’s becoming quite a big language….It’s often been said in the newsgroups (usually when someone has been moving from another language to C#) that C# itself only takes a few days to learn….I suspect it would be hard to do it any sort of justice in less than about 700 pages, which is a pretty off-putting size (at least for me).

Ich bin der Meinung, daß C# nicht mehr in ein paar Tagen erlernbar ist, wenn nicht bereits ein paar Grundlagen in C++ oder Java vorhanden sind. JavaScript macht’s auch nicht, denn dann hätte man auch erst Dinge wie statische Typisierung, Werttypen und Referenztypen, Vererbungsmodelle, Events / Delegates, anonyme Funktionen, etc. lernen müssen.

C# 3.0 ist schwer zu erlernen…

Mein erstes C#-Buch (für .NET 1.0) war etwa 650 Seiten stark und wurde als “Intermediate/Advanced” eingestuft. Kein Problem, schließlich ging es darum, die Sprache zu lernen und nicht die Konzepte der objekt-orientierten Programmierung zu verstehen. Das Buch war genau richtig für mich, aber ein Anfänger hätte sich die Zähne ausgebissen und frustriert von der Programmierung abgewendet.

Führt man sich vor Augen, daß diese Dinge alle vor der Einführung von Generics, LINQ, WPF, WCF und WF waren, würde ein Anfänger heute kaum den Durchblick behalten.

Allein die Betrachtung eines einfachen Hello World in C# wirft einige wichtig konzeptionelle Fragen auf: Namespaces, Klassen, Referenzen, Unterschied zwischen statischen und Instanzmethoden und -variabeln. Und um das wirklich zu verstehen muß man wiederum den this-Zeiger und v-Tables verstehen; damit einher geht dann auch die Untersuchung in wie fern sich die CLR von dem zugrundeliegenden Speichermodell unterscheidet. Versuchen Sie doch einmal einem Anfänger zu erklären, was genau public static void Main(String[] args) bedeutet.

Die meisten lernten C# nachdem sie Erfahrungen mit Java, zuvor aber C++ und davor C gesammelt haben. Keine dieser Programmiersprachen kann in “ein paar Tagen” erlernt werden. Daher auch: Hände weg von den “Teach yourself [what you want] in [xx] days/hours” Büchern.

…Java aber auch!

In der Vergangenheit habe ich erfolgreich Kurse in der Programmierung mit Java gegeben. In etwa 5 Tagen konnten fast alle auf solide Kenntnisse der Sprache zurückblicken, doch von den oben genannten Konzepten, von denen nicht alle auf Java umsetzbar sind, hatten die meisten danach auch keine Ahnung. Das ist auch nicht verwunderlich, denn die meisten Konzepte erlernt man erst in der Praxis und dazu braucht man mehr Zeit als ein paar Tage.

Es ist mit Java also nicht anders als mit C#. Während die Sache 1993 ganz harmlos mit ein paar Klassen begann und java schnell viele Freunde machte, dauerte es nicht lange bis einige tausend Klassen hinzukamen und wir heute auf etwa 16.000 Klassen blicken.

Erschwerend kommt hinzu, daß unzählige Packages, APIs und Technologien in das Java-Umfeld schwappten: JMS, EJB, JXP, JSP, JDO, JDBC, JAXP, etc. Die Liste ließ sich noch lange fortsetzen.

Jedem Einsteiger in die Programmierwelt empfehle ich zunächst C zu lernen und anschließend objekt-orientierte Grundlagen mit C++ zu erwerben, dort aber nicht zu lange zu verweilen (denn C++ ist eine schmutzige Sprache) um gleich zu Java oder C# zu wechseln. Damit dürften wichtige Probleme im Vorfeld vermieden werden.

Kommentieren