PDC dag 0
Efter de sædvanlige trade-offs, som jetlag, hotel og taxi problemer og registrering er PDC i gang. Jeg har været til Microsoft Developers Conference preconference.
Preconference er traditionelt muligheden for en relativ grundig gennemgang af et felt. I mit tilfælde bruger jeg dagen med Windows Mobile.
Mine kompetenser på området er tæt på ikke eksisterende. Det er det indtryk, som dagens sessioner har efterladt.
Jeg laver en klassisk fejl, jeg bruger rammeværk og teknik, som var det en traditionel desktop applikation jeg skriver. Det skal man ikke har jeg lært her til formiddag.
Jeg har lært at Windows Mobile i virkeligheden blot en en branding af en samling af applikationer oven på WinCE (http://en.wikipedia.org/wiki/Windows_CE).
Der var to talere og for "native" var det Doug Boling (http://bolingconsulting.com/blog/). Han gjorde faktisk et så fint job at jeg gik fra sessionen med en fornemmelse af at Wince (Windows CE blandt venner) er jeg bare nød til at eksperimentere med.
Doug var rigid fortaler for native platform i Windows Mobile. Han gjorde en dyd ud af, kærligt at håne den anden taler Jim Wilson (http://www.pluralsight.com/community/blogs/jimw/default.aspx), med bemærkninger om at managed code er "Warm and Fuzzy stuff".
Det var ikke kun underholdende, men det blev også uddybet af følgende udsagn:
"En udvikler bruger managed frameworks når der hurtigt skal skrives kode"
vs
"En udvikler bruger native platform når der skal skrives hurtig kode".
Så budskabet var at de dårlige egenskaber man kunne tage med fra desktop verdenen ikke har nogen plads på telefonen/PDA. Win32 eller anden native er de gode kompetencer at slæbe med sig.
Doug understregede dog at ofte er tingene i managed compact framework dog skrevet så godt, at en preformance penalty kan godkendes fordi man vinder i udviklingstid og vedligeholdelse.
Han gav tips og eksempler på ting man som managed udvikler bør lægge fra sig hvis man absolut skal "stay managed" på mobiltelefonen:
- Ingen 'foreach' loops - altid 'for'
- Ingen boxing - 'ArrayList' er signifikant langsommere end 'Array'
- StringBuilder klassen er god til opbygning af strenge og væsentlig mere effektiv end string med '+='
- Garbage Collection i .Net CF kører kun hvis der er noget garbage at collect'e - så lad være med at skrive kode der genererer garbage 
Sidst fortalte Doug Boling og Jim Wilson om tooling og udviklingsværktøjer. Lidt kompliceret stuff, med connection simulering for Bluetooth, Wifi, GPRS, EDGE, ...osv. Simulering af GPS er et helt kapitel for sig selv.
Dagens sjoveste historie var historien om den perfekte mobile forretningsapplikation, som aldrig blev deployet, fordi den var udviklet og testet på Virtuel PC.
Kommentarer (2)
Ofte ser jeg, at folk advares mod bestemte sprogkonstruktioner, fordi de er langsomme. Men i min erfaring er det mestendels implementeringen af disse features, der er langsomme, selv om det er muligt at implementere dem hurtigt.
Det kan give en negativ spiral: Hvis ingen udviklere bruger en feature, fordi implementeringen er langsom, ser implementøren ikke grund til at gøre den hurtigere, for der er jo ingen, der bruger den.
Et eksempel er exceptions i .NET. Der er ikke gjort noget særligt for at gøre dem effektive, for de er tiltænkt undtagelseshandling, som jo netop ikke sker ret tit, og ofte vil programmet standse efter håndteringen, hvorfor et par millisekunder ekstra ikke betyder noget.
Men exceptions kan udmærket bruges til andet, f.eks. backtracking. Jeg vejledte engang et projekt, hvor studerende lavede en oversætter for Prolog til .NET. Det var helt oplagt at bruge exceptions til at implementere cut i Prolog, men resultatet var at programmer med cut kørte urimeligt langsomt (hvor cut i Prolog ellers ofte bruges til at optimere kørslen).
Noget lignende gælder flere af de nævnte konstruktioner: I princippet kan foreach gøres hurtigere end en for-løkke, fordi implementeringen potentielt kan vælge en mere optimal gennemløbsrækkefølge og ikke behøver at opdatere en programmørsynlig variabel med tælleren. Og GC behøver ikke at være langsom. En god generationel spildopsamler kan være hurtigere end malloc() og free().
Iøvrigt er "PDC" for mig en forkortelse for Prolog Development Center. :-)
Cringely har en tankevækkende artikel om mobil-markedet og de forskellige styresystemer på det marked.
Han spår kort og godt, at Windows Mobile dør. Hvorfor? Jo, der er p.t. tre platforme, som kan anvendes til at bygge en mobil platform: Symbian, Android og Windows Mobile. Af de tre er det kun Windows Mobile, som koster penge at licensere. I et marked hvor producenterne optimerer omkostninger ned til sidste dollar, er det ikke det bedste udgangspunkt.
I 2011 hedder de store spillere (iflg. Cringely, og derfor naturligvis rent gætværk): iPhone (lukket software, lukket platform), Android (åben software, mange platforme), RIM/Blackberry (lukket) og Symbian.
Artikel:
http://www.pbs.org/cringely/pulpit/2008/pulpit_20081023_005500.html
