(wieder einmal die Zukunft) Der guten Tradition halber an dieser Stelle ein paar (eher harmlose) Prognosen für das aktuelle Jahr, das immerhin den Beginn des zweiten Jahrzehnts des 21. Jahrhundert markiert (in diesem Jahr spielt bekanntlich der 2. Teil von Arthur C. Clarke's Odyssey im Weltraum - die Gegenwart hat die Zukunft wieder einmal überholt). 2010 wird, zu mindestens was das Thema Microsoft angeht, wieder einmal ein Jahr der großen Releases sein. In diesem Jahr kommen unter anderem: - Visual Studio 2010
- F# 1.0
- .NET Framework 4.0
- SharePoint 2010
- Office 2010
- Die Office WebApps
- Silverlight 4
- Windows Mobile 7.0
Eine beeindruckende Liste. Dennoch wird sich keines dieser Releases sehr stark auf aktuelle Projekte auswirken oder gar zu einem der vielzierten "Paradigmenwechsel" führen, da nüchtern betrachtet einige Neuerungen lediglich Antworten auf Fragen sind, die bislang nur wenige Entwickler gestellt haben. Das beste Beispiel ist für mich die Möglichkeit Programmcode parallel auszuführen zu können, die mit .NET 4.0 Realität werden wird. Diese Herausforderung existiert nicht erst seit dem es Multicore-CPUs bei Aldi&Co gibt, sondern (mindestens) bereits seit Mitte der Achtziger Jahre (Stichwort: Transputer und Occam). Theoretisch ist die parallele Ausführung aus Performance-Gründen eine wünschenswerte Verbesserung, für die Mehrheit der Anwendungen, die heutzutage unter .NET umgesetzt werden, dürfte dieser Aspekt aber noch keine Rolle spielen. Aus diesem Grund ist es zwar wichtig, dass es (endlich) eine entsprechende Unterstützung gibt, Code parallel auszuführen zu können, es wird aber Jahre dauern bis die Mehrheit der .NET-Entwickler das für ihre eigene Anwendungen nutzt (von der Möglichkeit, LINQ-Abfragen parallel auszuführen zu können einmal abgesehen). Cloud-Computing? Die Branche braucht bekanntlich ihre Buzz-Wörter. Aktuell ist Cloud-Computing Buzz-Wort Nr. 1. Am 1.1.2010 ging Microsoft Azure offiziell an den Start - die ersten 4 Wochen sind kostenlos, danach wird jeder CPU-Takt und jede Speicherzelle, die die eigene Anwendung in der Wolke verbrät, abgerechnet. Aber, Azure ist Realität und jeder kann seine Anwendung in der Wolke hosten. Wie es Don Box und Chris Anderson auf der PDC 09 in einer netten Demo (etwa ab 1:05:30 - ansonsten wird man noch mit Bob Muglia konfrontiert;) während der Keynote des 1. Tages gezeigt haben, kann dies sogar ein C++-Programm sein. PHP ist ebenfalls Willkommen. "Love all, serve all" ist das neue Motto bei Microsoft. Auch wenn Microsoft irrsinnige Summen in die Infrastruktur investiert (alleine das erste DataCenter in Chicago kann über 200.000 Server aufnehmen) wird sich das Thema nur langsam entwickeln, da es viele der Anwendungen noch gar nicht gibt, die von einer frei skalierbaren Rechenleistung profitieren können und der Sicherheitsaspekt gerade in Deutschland noch viele Verantwortliche davon abhält über diese Option überhaupt nachzudenken. 64 Bit? Wird 2010 das Jahr für den Wechsel auf 64 Bit? Sicher nicht. Es gab eine Zeit, da stand 16 Bit in der Computerszene für Fortschritt und Aufbruchstimmung, ähnlich Web 2.0 (es gab in den guten, alten 80ern sogar eine Band, die so hieß;). Heutzutage dürften selbst viele Entwickler nicht genau wissen, ob ihr PC über eine 32- oder 64-Bit-CPU verfügt. Dazu ein kurzer Exkurs. Der folgende PowerShell-Befehl findet es über eine WMI-Abfrage heraus: (Gwmi win32_processor | Select description) -match "x64" Diese Abfrage liefert auf meinem ThinkPad X300 übrigens ein $true, so dass ich offenbar ebenfalls glücklicher Besitzer einer 64-Bit-CPU bin. Zwar macht Microsoft mit seiner Ankündigung ernst, dass es künftige Server-Versionen nur als 64 Bit-Versionen geben wird (bzw. bereits gibt), doch solange es keine 64-Bit-Version von Visual Studio gibt, wird auch das Thema 32/64-Bit für Entwickler keine allzu große Rolle spielen. Touch und Surface? Während also im Bereich der (.NET-) Entwicklung in diesem Jahr vermutlich keine sensationellen neuen Trends entstehen werden, sieht es im Hardwarebereich ganz anders aus, wo nicht zuletzt dank Windows 7, aber auch der rasanten Entwicklung bei den mobilen Geräten wieder eine richtige Aufbruchstimmung zu spüren ist. 2010 könnte den Durchbruch für TouchDisplays bedeuten(natürlich ist auch diese Technik alles andere als neu, selbst für den legendären C64 gab es damals eine Art mit Sensoren ausgestattete Folie zu kaufen, die man auf den 12"-Bildschirm kleben musste). Mir gefällt die Auswahl per Fingerdruck und vor allem Fingerbewegung (etwa auf meinem iPod Touch) deutlich besser als die per Maus. Ich kann mir einige Anwendungen vorstellen, die sich mit den Fingern deutlich angenehmer bedienen lassen als mit der Maus. Wer einmal eine Weile mit einem Microsoft Surface-Gerät gespielt hat, sieht die Beschränkheiten der modernen Benutzeroberflächen auf einmal sehr klar und entdeckt völlig neue Möglichkeiten der Benutzerinteraktion. Da steckt großes Potential dahinter (sehr empfehlenswert ist ein Vortrag auf der PDC 09 zu diesem Thema - alleine wegen der Demo, wo jemand ein Glas auf eine Surface-Oberfläche stellt und das Programm erkennen kann, ob das Glas oder leer ist - was das alleine in der Gastronomie für Möglichkeiten eröffnet:). Programmiert werden Touch- und Surface-Oberflächen (natürlich) mit WPF. WPF! Alleine aus diesem Grund wird 2010 für mich das Jahr von WPF. WPF ist nicht ganz einfach zu erlernen und erfordert gerade für erfahrene WinForms-Entwickler eine gewisse "Leidensfähigkeit", da man sich so manches Mal fragt, ob das wirklich die Zukunft ist (ich sitze gerade an meinem Visual Basic 2010-Kompendium, in es natürlich zu 100% um WPF gehen wird, und habe entsprechende "Leidensstrecken" hinter mir und sicher noch etliche vor mir). Auch wenn WPF 4.0 gegenüber WPF 3.51 nicht allzu viel Neues bringt und viele Entwickler noch Vorbehalte haben dürften, hier gilt wieder einmal das Motto: Wer jetzt noch wartet, verliert ganz einfach kostbare Zeit. Dazu ein Tipp: Auf der Basta! Spring wird es auf den Visual Basic Days wieder ein paar sehr gute Vorträge zu diesem Thema geben. Insgesamt wird 2010 für die IT-Branche, insbesondere für Entwickler, ein gutes Jahr werden. Insbesondere für jene, die bereits vor 2-3 Jahren auf die richtigen Themen gesetzt haben. Vorauszuschauend zu planen ist daher meine Empfehlung nicht nur für dieses Jahr.
(leider bei den Express Editionen nicht dabei - VS2008Imagelib.zip) Nachdem ich in den letzten Tagen gleich zwei Leser-Mails mit der Frage nach der VS2008Imagelib.zip-Datei in der Visual Basic Express Edition erhalten hatte (in meinem Buch "Jetzt lerne ich Visual Basic 2008" hatte ich leider vergessen darauf hinzuweisen, dass es die Images nicht bei der Express Edition gibt - ansonsten ist sie im Ordner %Programfiles%\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\1031 zu finden) habe ich mich selber auf die Suche gemacht mit folgendem Resultat: VS2008ImageLib.zip gibt es nicht als freien Download von Microsoft. Fazit: Es gibt leider keinen direkten Ersatz für die Icons und Bitmaps, was schade ist, da man ohne sie Menüs und Toolbars nicht mit eigenen Icons ausstatten kann (interessanterweise funktioniert der Befehl Standardelemente einfügen im Kontextmenü einer Menü- und Symbolleiste auch in der Express Edition - ein paar Icons gibt es also doch). Hier sind ein paar Links, auf die ich bei einer kurzen Webrecherche gestoßen bin (alle Angaben natürlich ohne Gewähr, insbesondere was die Lizenzbedingungen angeht - es sieht aber so als wären die folgenden beiden kleinen Icon-Libraries frei verfügbar): http://famfamfam.com/lab/icons/mini/ (hier gibt es 144 Standardicons, vor allem mit typischen Symbolleisten-Icons, allerdings im Gif-Format, was jedoch kein Problem ist, da sie sich z.B. mit IrfanView konvertieren lassen). http://famfamfam.com/lab/icons/flags/ (hier gibt es die 247 Flaggen der Welt) Die Frage "Angenommen, ein Bekannter hat VS 2008 Professional installiert - darf er mir dann die VS2008ImageLib.zip-Datei kopieren?" lässt sich mit Sicherheit relativ einfach beantworten - offiziell darf er es (natürlich) nicht, denn auch die Bitmaps gehören Microsoft. Allerdings sollte es im Interesse von Microsoft sein, dass möglichst viele Entwickler in ihren Anwendungen die Standardicons verwenden. Es wäre daher sehr schön, wenn es eine Lösung für die Anwender der Express Editionen geben würde. Dann gibt es als letzten Rettungsanker noch die 90-Tage-Testversion von VS 2008 Professional (der Download ist mit ca. 3.5 GByte aber nicht gerade ein Leichtgewicht). Die spannende Frage ist natürlich, ob VS2008ImageLib.zip hier enthalten ist? Und wie kann man es herausfinden, ohne die Version komplett installieren zu müssen? Zum einen mit Hilfe eines der zahlreichen Tools, über die sich eine Iso-Datei wie ein Laufwerk ansprechen lässt (z.B. Magic ISO Maker). Zum anderen kann man die Installation bis zum Auswahldialog der Komponenten laufen lassen und nachsehen, ob die Grafikbibliothek unter "Tools für das Verteilen von Anwendungen" anwählbar ist. Und das ist der Fall, so das der Download der Testversion eine Art vorübergehende Alternative ist (ob man allerdings 3.5 GByte herunterladen und 2.5 Gbyte installieren sollte - die Minimalkofiguration von VS 2008, um eine knapp 10 MByte große Datei zu bekommen ist eine andere Frage). In jedem Fall erlischt nach 90 Tagen die Lizenz für Visual Studio und damit auch die für die Bitmaps, womit wir wieder fast am Anfang stünden.
(wer zu spät kommt...) Dieser Beitrag hat zur Abwechslung nichts mit einem Entwicklerthema zu tun, aber doch erstaunlich (oder erschreckend) viel mit dem Wandel, der durch das Internet in immer mehr Bereiche des täglichen Lebens einzieht, und den wir als Programmierer, Web-Designer, Entscheider in IT-Projekten oder einfach nur als IT-Begeisterte zu einem zwar extrem geringen, aber doch vorhandenen Teil mit vorantreiben. Vor allem geht es um ein Thema, das mir zunehmend Sorgen bereitet, da der Wandel, der durch das Internet immer mehr beschleunigt wird, sich nicht nur auf Versandhaus-Dinosaurier und Kaufhäuser beschränken wird, sondern in naher Zukunft auch andere Bereiche des wirtschaftlichen Lebens betreffen wird (z.B. Verlage). Und wenn einem heutzutage etwas Sorgen bereitet (und es nicht gerade private Themen sind) bloggt man eben darüber. Wozu gibt es schließlich das Internet? Mit der Verschwinden von Quelle verschwindet ein Teil des deutschen Alltagsleben. Viele Tausend Arbeitsplätze (nicht nur in Deutschland, sondern u.a. auch in Österreich) werden praktisch über Nacht vernichtet, was für die Betroffenen und ihre Familien Unsicherheit, Verbitterung, Zukunftsängste und spürbare Einschränkungen im täglichen Leben zur Folge haben wird, vor allem aber auch das Gefühl von einen Tag auf den anderen nicht mehr gebraucht zu werden. Fürth und Quelle mögen für die meisten weit weg sein, aber es gibt sicher bei jedem in der Region ein Beispiel, wo der "Strukturwandel" auf ähnliche Weise sichtbar wird (bei mir vor der sprichwörtlichen Haustür ist es z.B. die Auto-Industrie). Natürlich gibt es Gründe für diese wirtschaftliche Katastrophe. Ich bin mit Quelle, Privileg und Universum zwar aufgewachsen, doch war seit geschätzten 20 Jahren nicht mehr in einem Quelle-Laden gewesen und wäre in den letzten Jahren nie auf die Idee gekommen, z-B. eine Digitalkamera über den Quelle-Katalog zu bestellen. Man ändert einfach sein Konsumverhalten, wozu natürlich Amazon&Co, "Geiz ist geil" usw. dazu beigetragen haben. Natürlich muss man nach den Verantwortlichen fragen, wobei die Frage relativ einfach zu beantworten sein dürfte. Ohne irgendwelche Details zu kennen tippe ich auf das Management des Versandhauses, das sich als komplett unfähig erwiesen hat, offensichtliche Veränderungen im Kaufverhalten der meisten Deutschen zu erkennen und darauf entsprechend zu reagieren. Amazon ist nicht erst seit gestern in Deutschland vertreten und wenn einem selber nichts einfällt, kopiert man ein erfolgreiches Konzept (das hat bei verschiedenen "Sozial-Networking"-Plattformen in Deutschland offenbar ganz gut funktioniert). Tchibo, in den 70er Jahren noch eine eher etwas biedere und "langweilige" Kaffehauskette hat es offenbar erfolgreich geschafft, sich an das Internet-Zeitalter anzupassen (mit 3.65 Milliarden € liegt der Jahresumsatz in Deutschland um einiges höher als z.B. der von Amazon in Deutschland). Eine Teilschuld trägt für mich auch die Politik. Nicht, weil sie bei Quelle nicht mit Staatshilfen wie bei diversen Banken eingesprungen ist, was zwar einen gewissen Beruhigungseffekt (vor allem vor (!) einer Wahl) gehabt, aber an der generellen Situation natürlich nicht das Geringste geändert und das Problem zu Lasten der Steuerzahler einfach nur verschoben hätte. Die Politiker (in diesem Fall jene in Bayern) hätten bereits vor Jahren auf den erkennbaren und voraussehbaren Wandel reagieren und auf einer Art regionaler oder überregionaler "Zukunftskonferenz" mit Unternehmen und Betroffenen über Strategien diskutieren können, wie man auf den durch Globalisierung (mit der die Deutschen generell ihre Probleme haben) und das Internet ausgelösten bevorstehenden Wandel in Deutschland reagieren kann (wozu warb man in Bayern zur Stoiber-Ära noch mit der unwiderstehlichen Kombination aus Laptop und Lederhose?). Zu diskutieren sichert zwar keine Arbeitsplätze, aber es sensibilisiert die Beteiligten und vermittelt das Gefühl handeln zu können und einer Entwicklung nicht ausgeliefert zu sein. Außerdem hätte man etwas mehr Druck auf die Verantwortlichen in potentiell gefährdeten Unternehmen ausüben können auf die bevorstehenden Änderungen zu reagieren. Etwa: Muss man im Jahre 2009 einen 1.500-Seiten Katalog mit 70.000 Artikel an mehrere Millionen Haushalte versenden, wenn mehr und mehr Menschen über das Internet bestellen. In der Autobranche (Stichwort: Klimawandel, C02-Reduzierung, Trend zu erneuerbaren Energien usw.) scheint diese vorausschauende Planung zu funktionieren (bzw. hier ist es so offensichtlich wie nirgendwo anders, dass es dazu keine Alternative gibt). Das bittere an dem Ende von Quelle ist, dass das Unternehmen nicht daran gescheitert ist, dass seine Dienstleistung nicht mehr gefragt ist. Der Versandhandel hat in Deutschland 2008 28.6 Milliarden € umgesetzt und hat (laut Statistik) einen Anteil von 7% am Einzelhandelsumsatz erreicht. Davon fällt auf die Versender mit Katalog- und Internet-Einsatz 16.6 Milliarden €, auf die reinen Internet-Versender stolze 4.5 Milliarden € (die Zahlen stammen vom Bundesverband des deutschen Versandhandels). Die Nachfrage ist also da und wird in den kommenden Jahren mit Sicherheit nicht wesentlich nachlassen. Bei einem entsprechenden Geschäftsmodell hätte sogar die Kombination aus Internet-Bestellplattform mit einem engmaschigen Filialnetz (bekanntlich gibt es in jedem "Kuhdorf" einen Quelle-Shop) ein entscheidender Wettbewerbsvorteil gegenüber reinen Internet-Versendern sein können. Nur hätte diese Entwicklung vor 5 Jahren eingeleitet werden müssen als bereits abzusehen war, dass der Internet-Handel irgendwann in nächsten Jahren den traditionellen Katalogversand verdrängen wird. Quelle wird leider nicht das letzte Opfer des Wandels gewesen sein. Es ist erschreckend (und gleichzeitig auch faszinierend) wie z.B. Google dabei ist, nach und nach ganze Branchen zu marginalisieren (dass sich Herausgeber von Stadtplänen etwas einfallen müssen ist schon länger klar, aber dass z.B. die Hersteller von Navigationsgeräten in naher Zukunft ein Problem bekommen könnten weil praktisch die komplette Funktionalität eines Navi bei einem Android Handy mit dabei ist, ist eine Entwicklung, die zwar ebenfalls irgendwie vorhersehbar war, aber trotzdem überraschend kommt). Als einzelner kann man relativ wenig tun, die Entwicklung zu beeinflussen, aber es gibt Möglichkeiten: Ich werde in Zukunft private Dinge wieder per Brief verschicken (und nicht mehr per Mail, was gleich mehrere Vorteile hat -Stichwort: Privatsphäre - auch die Post hat massiv mit dem durch Mail und SMS veränderten Kommunikationsverhalten zu kämpfen) und Bücher nicht reflexartig beim Online-Kaufhaus bestellen, sondern beim lokalen Buchhändler (von denen die meisten auch eigene Bestellseiten im Internet offerieren). Das bedeutet zwar, dass das Buch eventuell nicht mehr am übernächsten Tag ins Haus geliefert wird (wenngleich jede Buchhandlung damit wirbt, praktisch jedes Buch auf den nächsten Tag bestellen zu können), aber Bequemlichkeit ist generell eine schlechte Ausrede (die Logistikunternehmen müssen sich um ihre Zukunft hoffentlich keine Sorgen machen, wenn mehrere Dutzend Bücher im Jahr nicht per ausgeliefert werden;). Das alles wird weder die Milliardenverluste der Post AG auffangen, noch die nächste Buchhandlung vor einer Insolvenz retten, aber es ist zu mindestens eine symbolische Aktion, die Wirkung zeigen könnte. Ich vertraue hier auf den "Schmetterlingseffekt". Wenn viele das Richtige tun hat das Tun, auch wenn es nur eine Kleinigkeit ist, auch eine Wirkung. die zu einer positiven Veränderung führen kann.
(VB 2010 - ein neues Logo gibt es auch) Seit Mitte Oktober steht die (lang erwartete) Beta 2 von VS 2010 und .NET Framework 4 als Download für alle zur Verfügung (nach der CTP-Preview und der Beta 1 ist dies die dritte Vorabverion, die Microsoft zur Verfügung stellt - am 22. März 2010 soll es angeblich die finale Version geben). Mit dabei ist auch die erste Vorabversion der Express Editionen zu C# und VB.NET (zu F# wird es dieses Mal noch keine Express Edition geben, was nicht bedeutet, dass man VS 2010 Professional kaufen muss, da man es in der "freien" VS 2008-Shell installieren kann und es mit Sharp Develop eine gute Alternative gibt). Nachdem ich in der Vergangenheit mit Vorabversionen von Visual Studio gemischte Erfahrungen gemacht hatte, war ich bei der Beta 2 entsprechend skeptisch. Um so erfreuter war ich daher, dass mein erster Eindruck von VB 2010 Express durchweg positiv ist (wenngleich ich nur die üblichen kleinen Beispielprojekt ausprobiert habe): >Die Installation verlief (unter Vista SP1) per Web-Installation angenehm schnell und problemlos. >Die IDE macht einen aufgeräumten und einladenden Eindruck. Die Umstellung auf WPF hat der IDE gut getan. Optisch wirkt alles ein wenig moderner, ansprechender und entspannter. Die Befehlsauswahllisten wurden gegenüber VS 2008 weiter verbessert, was sich beim Codieren angenehm bemerkbar macht. Ein Problem ist natürlich, dass WPF deutlich höhere Ansprüche an die Grafikhardware stellt (die "Horrorszenarien", über die einigen Blogs berichtet wurde, nach denen alles so langsam wird, dass der Mauszeiger praktisch einfriert, kan ich zum Glück nicht bestätigen). >Im Unterschied zu früheren Express Editionen sind die 2010er Expresss Editionen erweiterbar. Allerdings nicht über klassische Add-Ins, die Erweiterungen basieren auf einem neuen Erweiterungsmodell mit dem Namen "Managed Extensibility Framework" (MEF), mit dem vor allem der Code-Editor erweitert werden kann. >Die Funktionalität der IDE wurde ansonsten kaum erweitert, was ich eher für positiv halte (die zahlreichen Erweiterungen, die es für den Code-Editor bereits gibt und vor allem in Zukunft geben wird, werden zum Glück nicht automatisch geladen). Bei der Programmiersprache Visual Basic 10 gibt es nur wenige Neuerungen, was ich ebenfalls für positiv halte, da die Mehrheit der VB.NET-Entwickler noch ein gewisses Defizit besitzen dürfte was die mit Version 9.0 eingeführten Neuerungen (Stichwort: Lambdas) angeht. Dass sich Lambdas jetzt über mehrere Zeilen erstrecken und aus beliebigen Functions/Subs bestehen dürfen klingt zunächst unspektakulär, ist aber eine geniale Erweiterung in Richtung funktionaler Programmierung. Dass was bei C# 2.0 die anonymen Methoden sind, gibt es endlich auch bei VB.NET, aber in der Visual Basic typischen Syntax. Das folgende Beispiel zeigt eine einfache Methode zur Berechnung der Primzahlen: Dim AnzahlPrims = 0 Dim Prims = Enumerable.Range(3, 100).Where(Function(x) For n = 2 To Math.Sqrt(x) If x Mod n = 0 Then Return False End If Next AnzahlPrims += 1 Return True End Function) ' Wird erst mit dem For Each ausgeführt ' Console.WriteLine("{0} Prims gefunden...", AnzahlPrims) For Each z In Prims Console.WriteLine(z) Next Console.WriteLine("{0} Prims gefunden...", AnzahlPrims) Es ist wirklich toll, dass der Where-Methode eine mehrzeilige Inline-Funktion übergeben werden kann (der Zeilenfortführungsoperator ist ebenfalls nicht mehr erforderlich). Eine Kleinigkeit kann man ebenfalls schnell übersehen, Collections besitzen ab .NET 4.0 eine AsParallel-Erweiterung, durch die Abfragen gegen die Collection "parallel" (also auf die zur Verfügung stehende Kerne verteilt) ausgeführt wird. Insgesamt macht die Beta von VB 2010 einen guten Eindruck. VB.NET 10 rundet die mit der Version 9.0 eingeführten Spracherweiterungen sinnvoll ab. Gegenüber C# hat VB.NET was die Attraktivität der Sprache angeht aufgeholt, was nicht unbedingt zu erwarten gewesen wäre. Wer was die moderne VB-Programmierung angeht auf dem Laufenden bleiben möchte und mit funktionaler Programmierung oder gar paralleler Programmierung beginnen möchte, sollte gleich mit der Beta 2 loslegen.
Ich weiß nicht, ob es irgendwo einen Wettbewerb gibt, aber eventuell könnte ich eine weitere ausgefallene Variante einreichen, die wieder einmal die Primzahlen (allerdings nur in den alleruntersten Regionen) "berechnet". Das Besondere dabei, ich habe sie vollständig mit LINQ umgesetzt: int Obergrenze = 200; var prims = from z in Enumerable.Range(2, Obergrenze-1) let c = (from z1 in Enumerable.Range(2, Convert.ToInt32(Math.Sqrt(z))) where z % z1 == 0 select z1).Count() where c == 0 select z; Console.WriteLine("Anzahl Prims: {0}", prims.Count()); Es kann sein, dass es noch elegantere Varianten gibt (es gibt mit Sicherheit einfachere), aber es ist schon faszinierend, dass dieses kleine Beispiel ohne die übliche for-Schleife und if-Entscheidung auskommt (zugegeben, es lässt sich ein wenig schwerer debuggen und man tüffelt im Allgemeinen eine Weile bis es wirklich funktioniert). Die VB.NET-Variante unterscheidet sich nur geringfügig. Die folgende Variante stammt übrigens aus einem der zahlreichen C#->VB.NET-Konverter, die man im Web findet: Dim Obergrenze As Integer = 200 Dim prims = From z In Enumerable.Range(2, Obergrenze - 1) _ Let c = (From z1 In Enumerable.Range(2, Convert.ToInt32(Math.Sqrt(z))) Where z Mod z1 = 0 Select z1).Count() _ Where c = 0 Select z Die Konvertierung ging sehr schnell, nur kam der Converter nicht damit klar, dass sich die LINQ-Anweisung über mehrere Zeile erstreckt, so dass noch ein wenig Nachbearbeitung erforderlich war. Mit SharpDevelop wäre das nicht passiert, der wirklich geniale Codekonventierer fügt z.B. auch die erforderlichen Zeilenumbruchzeichen ein. LINQ ist eine tolle Sache, funktionale Programmierung auch, wenngleich sie nicht für alles eingesetzt werden kann und sollte (man gelangt ansonsten schnell zu einem Punkt, wo man bereits einen if-Befehl als"unanständig" empfindet, was natürlich nicht die richtige Einstellung ist). Da ich mich gerade ein wenig mit F# beschäftige (Oliver Sturms Vortrag auf der letzten Basta! hatte mich dazu inspiriert - Oliver ist nach Oliver Pocher sicher der meistge - und besuchte Mann im Web, auf seiner Homepage hat er die Vortragsfolien zu seinem F#-Vortrag leider nicht versteckt), habe ich mich noch an einer F#-Varianten versucht. Hier ist das Ergebnis. Zuerst "konventionell": let mutable IsNoPrim = false let mutable j = 2 for i = 2 to 100 do j <- 2 while j < i do if i % j = 0 then IsNoPrim <- true j <- j + 1 if not IsNoPrim then printfn "<%i>" i IsNoPrim <- false Diese Variante enthält zwar zu 100% syntaktisch korrekten F#-Code, hat aber mit funktionaler Programmierung nichts zu tun und würde in C# und VB-.NET praktisch in identischer Form umgesetzt werden. Lediglich das "mutable"-Schlüsselwort wäre dort ein wenig ungewöhnlich, denn weder der C#- noch der VB.NET-Compiler haben etwas dagegen, einer Variablen einen neuen Wert zuzuweisen. Bei folgender typischen F#-Varianten geht es bereit ein wenig mehr "ab": let Obergrenze = 100 let Zahlen = [1..Obergrenze] let MaxTestwert = System.Convert.ToInt32(System.Math.Sqrt(System.Convert.ToDouble(Obergrenze))) let CheckPrim n = not ( {2 .. MaxTestwert} |> Seq.filter (fun d -> n % d = 0) |> Seq.nonempty ) let prims = [2 .. 25] |> List.filter CheckPrim printfn "%A" prims F# kennt einige Sprachelemente, die ich vorher schon der PowerShell kannte - etwa den Bereichsoperator ([1..Obergrenze] und natürlich die Argumentpipeline (|>), durch die z.B. ein komplettes Array einer Filterfunktion zugeführt werden kann. Warum es funktioniert, habe ich zwar noch nicht zu 100% verstanden, aber es funktioniert. Seq.nonempty stammt aus der FSharp.PowerPack.dll, auf die noch ein Verweis gesetzt werden muss. F# ist mit Sicherheit eine faszinierende Sprache, aber nicht leicht zu lernen. Aber ich empfehle es jedem Entwickler im .NET-Bereich, der Zeit und die erforderliche innere Ruhe hat. Bereits das kleine "Tutorial", das als Projektvorlage angeboten wird, gibt einen guten Überblick. Es gibt ein gutes Wikibook und natürlich jede Menge Beispiele und Tutorials bei MSDN. Wer einen gründlichen Überblick wünscht, lädt sich die knapp 200 Seiten starke "Language Specification" herunter. F# gibt es für VS 2005/2008 und ist fester Bestandteil von VS 2010. Und es gibt sogar eine Version für Mono. Den Download für VS 2008 (May 2009 CTP) gibt es hier. Wer nur die Express Editionen besitzt, lädt sich die "freie" VS 2008 Shell herunter, zu der F# ebenfalls nachträglich dazu installiert werden kann. Auch SharpDevelop besitzt eine F#-Projektvorlage, aber keine Intellise-Unterstützung (auf die man aber auch verzichten kann). Ich bin gespannt, ob es ein F# Express geben (ich gehe einmal davon aus) - wenn in knapp 2 Wochen die Beta 2 freigegeben wird, wissen wir unter Umständen mehr. PS: Die Slides von Oliver Sturms F#-Vorträgen gibt es doch (man muss nur danach suchen) - hier ist der Link http://www.sturmnet.org/blog/2009/09/22/slides-and-samples-from-basta-2009
(auf dem Weg zur VIP Reception - die auf dem Bild zu erkennenden Personen sind dem Autor persönlich bekannt) Die Basta! 2009 (21. bis 25. September) ist noch keine 4 Wochen vorbei (unter www.basta.net wird bereits die Basta! 2010 Spring angekündigt!), doch es kommt mir wieder einmal vor wie eine halbe Ewigkeit (was natürlich auch daran lag, dass es bei mir nach der Konferenz gleich mit diversen Terminen weiterging, u.a. mit der Adobe Max Konferenz). Insgesamt war es wieder einmal eine sehr nette und von den Themen interessante Konferenz (viele neue Gesichter bei den Teilnehmern - es ist für mich immer wieder erstaunlich, wieviele Teilnehmer zum ersten Mal bei der Basta! dabei sind, was zeigt, dass auch große Konferenzen nur einen kleinen Teil ihrer "Zielgruppe" erreichen können). Es ist vor allem nett, viele Kollegen wieder zutreffen. Dazu bot die"VIP Reception" am ersten Abend, die dieses Mal auf der gegenüberliegenden Rheinseite in der "Bastion von Schönborn" (einem kleinen Restaurant mit Biergarten direkt am Rhein) stattfand, und natürlich ganz ungezwungen bei einem Bier vor der Rheingold-Halle, die anscheinend endlich fertig umgebaut ist, den passeden Rahmen. Auch das Wetter spielte mit (insbesondere der Montagabend war ein sehr schöner Spätsommerabend), so dass es alles in allem wieder Spaß gemacht hat dabei zu sein (Kritikpunkte fallen mir spontan keine ein, zumal ich die Mittagessen habe ausfallen lassen;) Von meinen vier für die VB Days am Mittwoch und Donnerstag geplanten Vorträgen habe ich nur zwei gehalten: 1) Moderne Visual Basic Programmierung Die Vortragsfolien gibt es hier. Die Beispiele gibt es hier. 2) Moderne XML-Programmierung mit Visual Basic. Die Vortragsfolien gibt es hier. Die Beispiele gibt es hier. Meinen Vortrag "Von Windows Forms nach WPF" hatte Benjanim Gopp übernommen, dafür noch einmal vielen Dank. Unseren gemeinsamen Vortrag "Oracle mit VB" hatte Markus am späten Donnerstagnachmittag alleine gehalten (oder halten müssen;) (wie ich gehört habe, hat er das auch ganz gut gemacht - keine seiner Pemos ist abgestürzt). Ich weiß leider nicht genau, ob er die Vortragsfolien direkt zur Verfügung stellt - es lohnt sich auf alle Fälle, einen Blick darauf zu werfen, da es keinen besseren Überblick über den Stand der Oracle DB-Entwicklung mit .NET geben dürfte. Bei meinem Vortrag Moderne VB-Programmierung fiel mir einmal mehr auf, dass nicht jeder VB-Programmierer mit den neusten Sprachelementen vertraut ist. Insbesondere in Richtung "funktionale Programmierung" (Delegaten, typisierte Delegaten, Lambdas, Funktionsausdrücke, Expression Trees usw.) stelle ich teilweise große Defizite fest, dabei bilden sie das Fundament der modernen Anwendungsentwicklung (Stichwort: LINQ). Ich kann schlecht beurteilen, ob das nur der natürliche Filter ist (ich nehme nur das wahr, was für meine Arbeit/Projekt von unmittelbarer Bedeutung ist), auf chronischem Zeitmangel (gerade VB-Entwickler sind überdurchschnittlich mit dem Warten ihrer Anwendungen beschäftigt, was nicht automatisch bedeutet, dass sie schlecht/schlampig programmiert wurden, sondern weil sich in einem Umfeld bewegen, in dem offenbar viele Kunden/Anwenderwünsche kontinuierlich in kleinen Portionen an sie herangetragen werden, so dass es praktisch immer etwas zu tun gibt) zurückzuführen ist, oder ob auch eine gewisse Übersättigung/Reizüberflutung Schuld sein könnte. Natürlich ist keiner verpflichtet sich kontinuierlich mit dem zu beschäftigen, was sich ein paar Programm Manager in Redmond ausdenken, aber ganz den Anschluss verlieren sollte man auch nicht. Ich behaupte, dass der durchschnittliche (deutsche?) Entwickler 3-5 Jahre hinter der aktuellen Version (was ihre Kernneuerungen angeht) zurückliegt. Eine Maßnahme daran etwas zu ändern bieten natürlich Vorträge auf Konferenzen, aber auch natürlich auch Trainings. Speziell für VB-Entwickler, die sich in einer angenehmen Atmosphäre mit der modernen VB-Anwendungsentwicklung vertraut machen möchte, führe ich zusammen mit John Martin im November einen fünftägigen VB-Kompaktkurs in Bad Ems (an der Lahn) durch - weitere Infos gibt es hier.
Zu den sicheren Mitteln, sich den Tag (oder zumindestens einen Teil davon) zu verderben gehört die automatische Update-Einstellung bei Windows Vista, die meines Wissens voreingestellt ist. Sie hatte neulich zur Folge, dass meine komplette Arbeitsumgebung bestehend aus zwei virtuellen Maschinen, verschiedenen Browserfenstern, mehreren Visual Studio-Umgebungen und diversen anderen Dingen, an denen ich die letzten Stunden gesessen hatte, einfach verschwunden war nachdem ich kurz den Schreibtisch verlassen hatte nur weil Vista der Meinung war, dass es Zeit für einen Neustart sei. Klar, man kann sich alles wieder zusammenbauen, doch dass mir jemand einfach den Rechner neu bootet wenn ich ihn ein paar Minuten alleine lasse kommt in Zukunft nicht mehr vor. Ab jetzt fragt mich Vista jedes Mal, ob es neue Updates installieren darf. Für die Zukunft ist allerdings eine Lösung in Sicht. Im Spiegel (bekanntes Wochenmagazin) war vor ein paar Monaten zu lesen, dass Computer neuerdings in der Lage sind, selbständig physikalische Gesetze zu entdecken. Windows 7 unterstützt bekanntlich Bewegungssensoren. Wenn ich beim nächsten automatischen Update mit anschließendem ungefragtem Reboot meinem Windows 7-Computer einen Tritt versetze, müsste er doch eigentlich daraus folgern, dass diese Aktion den Unmut seines "Herren und Meisters" zur Folge hatte. Das wäre mal eine nette Abwechslung.
(Speaker = Sprecher) Pünktlich zum Herbstbeginn findet auch dieses Jahr wieder die Basta!-Entwicklerkonferenz statt (es müsste die 15te inzwischen sein, dies nachzuzählen ist ähnlich schwierig wie die wahre Versionsnummer von Windows 7 zu ermitteln - hätte man von Windows 1.0 beginnend eine vernünftige Zählweise beibehalten, wäre man inzwischen auch in etwa bei 15 angekommen). Das Programm steht bereits seit Wochen fest und macht auch einen thematisch sehr interessanten Eindruck. Wie üblich sind alle wichtigen Themen vertreten (und von den üblichen Experten der Branche dürfte kaum jemand fehlen, was für die Konferenz spricht). Mit Jeffrey Richter wurde sogar eine regelrechte Windows Entwickler-Legende für die Keynote gewonnen. Ich war als "Track Chair" für die inhaltliche Gestaltung der (beiden) Visual Basic Days vom 23. bis 24. zuständig, mein Dank an dieser Stelle für die Unterstützung durch Alex Bierhaus, Benjamin Gopp und Jörg Neumann, die mit ihren Vorträgen dem Ganzen Qualität und Praxis-Know-how verleihen (es ist außerdem sehr nett von den Veranstaltern, dass "wir" dieses Mal nicht zeitgleich zu den C# Days antreten müssen - man kann also zuerst dem 1. Teil es C# Day beiwohnen, feststellen, dass das alles nichts ist und dann beruhigt am nächsten Tag zur Kenntnis nehmen, dass es mit Visual Basic .NET eine hervorragende Alternative gibt ). Ich werde auf den Visual Basic Days am Mittwoch und Donnerstag folgende Vorträge halten: > Moderne Visual Basic-Programmierung In Visual Basic programmiert "man" nicht mehr so wie es früher (bis zur Version 6.0) der Fall war. Damit ist weniger der Umstand gemeint, dass mit .NET alles ein Objekt ist, sondern dass mit .NET 3.5 und VB 9.0 erste Ansätze einer funktionalen Herangehensweise erkennbar sind, dass mit LINQ eine vollkommen neue Art mit (beliebigen) Daten umzugehen zur Verfügung steht, und dass es praktisch Pflicht ist sich mit Themen wie Entwurfsmuster, Test-Verfahren (Stichwort: Unit-Testing) und was den Entwurf der Oberfläche angeht mit dem zentralen Modell View Controller Pattern (MVC) auszukennen. Auch wenn ein Vortrag über 75 Minuten keine seit Jahre schlummernden Defizite beheben kann, kann er ein paar Denkanstöße geben. Er soll vor allem das Bild der modernen Visual Basic-Programmierung zurecht rücken. Die Visual Basic-Programmierung ist kein "Biotop", in dem die Zeit stehen geblieben ist. Auch, oder vor allem, Visual Basic-Programmierer sollten das Potential, das Ihnen Sprache und Framework (nicht erst seit gestern) bieten, voll ausschöpfen. > Moderner Umgang mit XML System.Xml war gestern, seit .NET 3.5 gibt es mit System.Xml.Linq einen deutlich programmiererfreundlicheren Satz von Klassen für das Auswerten und Erstellen von XML-Dokumenten, der in Hinblick auf LINQ "optimiert" wurde. Zusätzlich bietet VB 2008 SP1 die Möglichkeit, aus einem beliebigen XML-Fragment eines oder mehrere Schema abzuleiten, so dass z.B. im Rahmen einer LINQ-Abfrage Intellisense angeboten werden kann. In dem Vortrag zeige ich, was die Klassen in System.Xml.Linq zu bieten haben und wie sich XML-Daten, die z.B. von irgend woher aus dem Web kommen können, elegant und typisiert weiterverarbeiten lassen. > Von Windows Forms nach WPF Für alle, die es noch nicht mitbekommen haben, spätestens seit .NET 3.5 SP1 (offiziell natürlich bereit seit .NET 3.0) steht für mich fest, dass WPF der rechtmäßige Nachfolger von Windows Forms ist. WPF bietet viele Vorteile und einen Nachteil: Es stellt ein komplett neues Programmiermodell dar, bei dem teilweise andere Regeln gelten als beim eher "gemütlichen" Windows Forms. Der Lern- und Einarbeitungsaufwand darf nicht unterschätzt werden (ein bekannter WPF-Experte sagte, dass es Jahre dauern kann bis das man alles verstanden hat). Dennoch, an WPF geht kein Weg vorbei. Früher ist daher besser als später, auch wenn die Versuchung groß ist, beim nächsten Projekt wieder auf das vertraute Windows Forms zu setzen (meine Windows Forms-Bücher habe ich vor ein paar Monaten recycelt - mein nächstes Visual Basic-Kompendium wird natürlich auf WPF aufsetzen). In meinem Vortrag stelle ich WPF Windows Forms gegenüber und gehe vor allem auf das wichtige Thema "Data Binding" ein. > VB 10 oder lieber gleich C#? (der Termin verschiebt sich möglicherweise noch) Visual Basic ist zwar besser als sein Ruf, aber eventuell liebäugelt doch mancher mit einem Wechsel zu C# (alleine, um sich von seinen Kollegen beim Mittagessen nicht immer dieselben Kommentare anhören zu müssen). C# ist leichter als sein Ruf und hat eindeutig seine Reize. In meinem Vortrag stelle ich beide Sprachen gegenüber und gebe einen kurzen Überblick über die Syntax, nicht ohne aber auf die Vorzüge von Visual Basic an passender Stelle hinzuweisen (falls sich jemand am Ende gar nicht entscheiden kann, es gibt sehr leistungsfähige Code-Konverter in beide Richtungen, z.B. in Sharp Develop, einer IDE, die ich sehr schätze und gegenüber den Express Editionen vorziehe). Neben meinen Vorträgen gibt es natürlich noch mit Sicherheit tolle Visual Basic-Vorträge von Alex Bierhaus, Benjamin Gopp, Jörg Neumann usw. (es kann durchaus sein, dass es weitere VB-Vorträge gibt, die aus welchen Gründen auch immer nicht bei den VB Days angesiedelt wurden). Alles Weitere zu den Vorträgen nicht nur der Visual Basic Days findet man im Zeitplaner der Konferenz. Es wird also wieder einmal einiges geboten auf der Basta! (das darf man schließlich auch erwarten). Eigentlich hatte ich noch gehofft, Daniel Walzenbach als Speaker gewinnen zu können (der in Redmond angeblich an einem "supergeheimen" Projekt arbeitet, dass die Welt der Visual Basic-Programmierung revolutionieren soll), doch Daniel hat sich nach seiner "Zusage" nicht mehr gemeldet (Daniel, wenn Du das hier liest, bitte melde Dich mal...;). Und da wäre noch... Als weiteres Highlight für Entwickler findet auch in diesem Jahr eine Microsoft PDC statt (vom 17. bis 19. November wie üblich im Los Angeles Convention Center, direkt neben dem Staples Center in Downtown L.A.), wobei ich mir im Moment aber noch nicht sicher bin, was ich davon halten soll. Nicht nur, dass die Konferenz mit 3 Tagen recht kurz ist (ok, es ist ein Pre-Conference-Day dabei, aber im Allgemeinen geht die Konferenz am letzten Tag nur bis zum Nachmittag), etwas mehr "Sorgen" bereitet mir die im Moment noch recht diffuse Themenzusammenstellung und der Umstand, dass es "außer" Azure 1.0 und "Silverlight 4" nicht viel Neues zu geben scheint (.NET 4 und VS 2010 sind im Herbst keine Neuigkeiten mehr, zumal sie schon auf der letzten PDC angekündigt wurden). Sollte bei Microsoft was die Technologie-Themen angeht im Moment ein wenig die Luft raus sein? Schlecht wäre eine solche "Pause" nicht, denn mit .NET 4 (Stichwort: Parallele Programmierung, WPF usw.) stehen genug Themen an, mit denen sich die Entwickler in den nächsten 1-2 Jahren intensiv beschäftigen müssen.
|