Author Archive for Trenskow

En halvtynd kop kakao, tak

Jeg vil gerne byde copenhagencocoa velkommen, med et par tanker fra en helt almindelig Objective-C Cocoa programmør.

Hvad vil det egentlig sige at være Macintosh udvikler? Jo, vi er en priviligeret lille frustreret gruppe, som sidder med en niche-viden, hvor det officielle Danmark stadig er en Microsoft kontrolleret organisation. Hvor mange af os har ikke været frustreret over, at de offentlige tjenester sådan delvist virker på mac, eller at man har siddet på dr.dk, hvor man lige skulle se den udsendelse fra i går som man missede, for blot at finde ud af at QuickTime choker i det.

Her sidder vi så med vores niche-viden, som egentlig ikke er det helt store værd. Der er ikke rigtigt nogle seriøse virksomheder i Danmark, der bruger Macintosh som deres primærplatform, og derfor er behovet for Macintosh-orienteret viden heller ikke så stort. Ikke som vis man nu var hardcore COBOL programmør, hvor man kunne sidde og tjene kassen på at vedligeholde de store bankers backbone, som allesammen kører på et eller andet forældet system, og som er alt alt for dyrt at erstatte uden tab.

Men vi er unikke på mange måder. Vi besidder en viden, som ikke alverden gør. Godt nok kommer der flere og flere udviklere til på verdensplan, nu hvor Macintosh platformen begynder at tage fat i markedandelene igen, men alligevel er vi en sjælden race.

Hvad er det så vi får fra Apple, som gør at vi alle sammen er rigtigt glade for at være under deres folder? Apple tilbyder noget så forfærdeligt som Objective-C, som er halvt noget, halvt noget andet. Det er ikke rigtigt C og det er heller ikke rigtigt C++. Det er en mellemting. Syntaksen er helt ude i skoven. Hvor mange gange har man ikke siddet og talt, hvor mange led man skulle ned i en klassestruktur, så der kunne komme det rigtige antal klammer på, for alligevel at sidde i sidste ende af linien og konstatere at man har talt forkert, og må tilbage og fjerne eller tilføje en. Godt nok får man C med i købet, hvilket er et rigtigt stort plus. Langt de fleste styresystemer nu om dage bliver udviklet i C, fordi den er en god balance mellem let syntaks og rigtig god low-level kompabilitet.

Men Objective-C er noget rod. Det er halvt SmallTalk, halvt C. Ikke rigtigt to sprog der er så nemme at kombinere, og det bliver da heller ikke uden nogen form for ofringer, da der bliver tilføjet en (relativ) stor overhead. Apple har da også på sin vis selv erkendt at Objective-C ikke er for sarte sjæle, i og med at WebObjects for længst har smidt understøttelsen af sproget, og kun bruger Java som dens hovedsprog.

Java understøttelsen af Cocoa er på den anden side blevet droppet fra og med Tiger. Det har sine åbenlyse grunde. Java er godt til web-udvikling, fordi det har en fælles brugergrænseflade i form a HTML. Java lider af at være udpræget cross-platform, i den forstand at det ikke rigtigt er godt til nogle platforme overhovedet. Heller ikke Mac OS X. Men da HTML er rimeligt platform uafhængigt, er Java perfekt til det formål.

Hvilke alternativer kunne Apple så komme op med, for at vi udviklere er tilfredse. Det første man kunne se på var nogle flere broer til nogle flere sprog. C++ kunne være en mulighed. Man tør ikke rigtigt tage skridtet fuldt ud, og udelukkende udvikle sine programmer i C, både fordi Apple konstant truer med “move to Cocoa”, hvilket gør at alle udviklere bliver en lille smule Carbon angst.

Det leder mig videre til de frameworks der er i OS X, hvilke er intet mindre end fantastiske. Her kommer glæden tilbage som Macintosh udvikler. En god integreret objekt-orienteret API, som gør det legende nemt at implementere det man ønsker. Cocoa er jo faktisk ikke mindre end rigtigt godt. Og så alligevel…

Det bygger helt sikkert på nogle programmeringsparadigmer, som er omkring 20 år gamle. Mange kigger på Cocoa og tænker det som enormt innovativt, fordi det er en nye måde at tænke programmering på. Faktisk er det ikke helt rigtigt. Sandheden er faktisk at grunden til det ser nyt ud, er fordi det er ældgammelt. Husk arven fra NextSTEP. Hvor meget ligger man ikke og roder med NSArrays og NSDictionaries, udelukkende for konstant at skulle kigge i dokumentationen for hvilke nøgler de indeholder i forhold til det vi leder efter? Det kunne være løst med en mere objekt-orienteret API, hvor man brugte langt flere properties. Et godt eksempel er NSViewAnimation, som bruges til at animere NSViews. Her definerer man hvad der skal flyttes hvorfra og hvortil via NSArryes og NSDictionaries. Det kunne helt sikkert godt have været lavet nemmere.

Steve Jobs konstante råb om “move to Cocoa, move to Cocoa” er ikke helt uden problemer. Faktisk er det kun en håndfuld af Apples teknologier, som rent faktisk er tilgængelige i en object-orienteret facon. Rigtigt mange features i Mac OS X er stadig pr. Leopard kun tilgængelige via Carbon. Og hvordan er det så lige det står til med det der Carbon? Apple bliver ved med at skubbe udviklere til udelukkende at udvikle til Cocoa, men det er ikke uden ofringer. F.eks. er SystemConfiguration frameworket kun tilgængelig i Carbon. Det samme gælder QuickTime, og det er selvom QTKit er på banen, men som kun gør en lille overflade af Carbon udgaven tilgængelig i en object-orienteret forstand. Det giver sig også til udtryk i at software som Microsoft Office og Adobe Photoshop, stadig er implementeret v.h.a. Carbon. Jeg tror deres begrundelse ligger i, at selvom de flyttede til Cocoa, så skulle store dele af deres software alligevel implementeres v.h.a Carbon, og dermed er en portering nærmest nytteløs.

Når Apple refererer til Cocoa, lyder det i mine ører ikke som selve frameworket, men mere i en forstand af “move to Objective-C”.

Jeg skal hermed komme med en opfordring. Hvis Apple seriøst mener at vi alle sammen skal “move to Cocoa”, så er det med at få de sidste frameworks opdateret, så vi kan kan smide vores Carbon kode i skraldespanden. Det skal ikke kun være en overfladisk Objective-C implementering. Vi vil kunne ku’ det hele. Hvis de mener det, skal det også kunne lade sig gøre at implementere det man har lyst til via Objective-C, og ikke alligevel skulle stå en situation hvor man tænker: “Jeg bliver nød til at move to Carbon…”