Advarsler: Langt indlæg. Debattøren lever af at designe, implementere og sælge APL-systemer.
Michael Deichman har allerede givet sit svar på mange af spørgsmålene - men jeg har en lidt anderledes vinkel på mange af dem, så jeg håber at I tilgiver dette lange indlæg.
Men kan det lave kaffe?
Jeg vil ikke anbefale at man bruger APL til at brygge kaffe. Men hvis man skal optimere produktionen eller transporten af kaffe-bønnerne (specielt hvis man tror man har en ny ide hvor der ikke allerede findes standard-biblioteker til at finde løsningen), så kan APL være et godt hjælpemiddel. Hvis man vil udvikle nye kaffe-sorter, eller finde ud af om man virkelig tjener penge på at sælge kaffen, så ville jeg helt klart se på APL som et potentielt værktøj til analyserne. Ser man derimod på software-udviklere som en billig ressource som blot oversætter specifikationer til kode, og nemt skal kunne udskiftes (eller måske endnu bedre outsources), så er det ikke sandsynligt at man vil få ret meget glæde af APL.
Det scenarie, hvor de aller største gevinster høstes, er der hvor APL anvendes af personer som har direkte indsigt i det fagområde, hvor der skal udvikles nye software-løsninger. Typisk taler vi om aktuarer, økonomer, kemi- og elektro-ingeniører, fysikere etc. Med mindre disse personer samtidig har en IT-baggrund, viser vores erfaring at de faktisk hurtigere bliver produktive med APL, end med traditionelle sprog. Og vigtigere: Det bliver muligt for dem at løse problemer, som de bare ville give op over for, hvis de enten skulle skrive dem i Java/C – eller prøve at ”specificere” dem, så et hold af Java/C eksperter kunne løse dem. For ”opfinderen” er det sidste faktisk tit sværere end at skrive det selv. Det er ikke nemt at hyre og fyre disse personer. Det ER lidt af en udfordring for en leder at skulle forvalte den slags "raw power" - men problemerne kan sagtens løses - og sådan er det altid når man løber stærkt.
Forklaringen på produktiviteten ligger i at APL er en matematisk notation som er designet til undervisning i naturvidenskabelige emner - og til at beskrive af matematiske ”processer”. Den første fortolker blev først udviklet nogle år efter at sproget havde været anvendt i undervisning. Skal man være grov, tager designet af de fleste andre sprog udgangspunkt i at man nemmest muligt skal kunne skrive effektive compilere til dagens hardware – eller undgå bestemte typer af fejl hos udviklere som arbejder med store projekter. Ikke ligefrem noget, det hjælper udvikleren med at tænke kreativt eller undgå "forståelsesfejl".
De fleste store virksomheder, som bruger APL, ansætter normalt mest økonomer eller ingeniører (plus enkelte deciderede softwareudviklere, se nedenfor). Det tager måske 3-4 uger at lære dem nok APL til at de bliver produktive. Jeg vil våge den påstand at det tager en smule længere tid for en typisk C- eller Java udvikler at sætte sig ind i (for eksempel) økonomiske teorier og skattelovgivningen omkring aktier og obligationer - eller petrokemi.
Man kan selvfølgelig ikke forvente at en økonom eller ingeniør uden en egentlig IT-baggrund kan konstruere store og velfungerende systemer (selv om det er forbløffende, hvad de til tyder lykkes med). De kan ikke tage de nødvendige hensyn til overordnede sikkerheds- og performance-hensyn – eller andre krav til ”indpakning”. Derfor bør ”domain-eksperterne” pakkes ind i et hold, hvor der er tilstrækkeligt med folk der både forstår APL-udviklernes arbejdsbetingelser OG de krav som der ellers stilles til moderne IT-systemer.
I vore dage er der ingen problemer med integration af komponenter skrevet i APL: Moderne APL-systemer (som Dyalog APL - se
http://www.dyalog.com), kan generere COM og .NET moduler, implementere WebServices, WCF komponenter, bruges som ”scripting language” på websider – i det hele taget pakkes ind i alle de interfaces som et programmerings-sprog forventes at benytte i dag. DotNet klasser skrevet i APL kan indgå i hierarkier som er delvist implementeret i andre sprog, etc etc.
Men hensyn til modenhed / kompilering: Vores fortolker fejrede 25 års jubilæum i år, så den er efter hånden ”vellagret”. Der findes delvis kompilering eller oversættelse til for eksempel C#. – men ingen ”komplette” compilers til APL (i og med at grænsen mellem kode og data er meget grå i APL, kan man faktisk ikke lave en 100% kompilering). Man kan også anvende APL som et specifikations-sprog og så skrive applikationer om til andre sprog i hånden, når de har stabiliseret sig og problemerne er fuldstændig kortlagte: ExxonMobil anvender en teknik hvor en del optimeringer løses ved at APL-koden genererer FORTRAN (fordi FORTRAN compilerne fremdeles er dem der løber aller hurtigst på mange numeriske metoder), som benyttes som input til optimerings-rutiner skrevet i andre sprog.
Faktisk viser det sig at mange applikationer som afvikles i APL faktisk har bedre performance end konkurrerende produkter baseret på C++. Man kan selvfølgelig ALTID skrive et program som har bedre performance i C eller C++, hvis man bevarer overblikket. Men source-koden vokser tit med en faktor 10 eller mere, og den dekomponering i objekt-modeller etc som normalt finder sted betyder tit at man har let for at overgeneralisere og ender op med noget kode som selv verdens bedste compiler ikke kan få til at køre så hurtigt som kompakt APL. Som Michael nævnte havde IBMs "APL2" support for mainframens vector facility (som det første IBM produkt), og i dag er arbejdet godt igang med at udnytte multi-core maskiner og computation grids fra APL.
Det er selfølgeligt ikke altid tilfældet at APL kører super stærkt – men runtime ydelse er heller ikke altid det vigtigste. Der hvor APL anvendes er det normalt ”time to market” – evnen til at tilpasse produkter til nye markedsbetingelser, tit i løbet af dage eller uger - som er den vigtigste parameter. Denne hastighed kan simpelthen ikke opnås hvis der kommer for mange lag ind i processen mellem dem der virkelig forstår problemerne, og den endelige løsning.
Hvis man i et land som Danmark ønsker at være konkurrencedygtig i fremtiden, bliver det efter min mening nødvendigt at satse på software med et højt niveau af indebygget (teknisk) viden. Der er MANGE penge i at inddrage andre end ”programmører” direkte i udviklings-processerne. Selv om APL har 40 år på bagen er det fremdeles et pænt stykke "forud for sin tid" på dette område.
Advarsler: Langt indlæg. Debattøren lever af at designe, implementere og sælge APL-systemer.
Michael Deichman har allerede givet sit svar på mange af spørgsmålene - men jeg har en lidt anderledes vinkel på mange af dem, så jeg håber at I tilgiver dette lange indlæg.
[quote]Men kan det lave kaffe?[/quote]
Jeg vil ikke anbefale at man bruger APL til at brygge kaffe. Men hvis man skal optimere produktionen eller transporten af kaffe-bønnerne (specielt hvis man tror man har en ny ide hvor der ikke allerede findes standard-biblioteker til at finde løsningen), så kan APL være et godt hjælpemiddel. Hvis man vil udvikle nye kaffe-sorter, eller finde ud af om man virkelig tjener penge på at sælge kaffen, så ville jeg helt klart se på APL som et potentielt værktøj til analyserne. Ser man derimod på software-udviklere som en billig ressource som blot oversætter specifikationer til kode, og nemt skal kunne udskiftes (eller måske endnu bedre outsources), så er det ikke sandsynligt at man vil få ret meget glæde af APL.
Det scenarie, hvor de aller største gevinster høstes, er der hvor APL anvendes af personer som har direkte indsigt i det fagområde, hvor der skal udvikles nye software-løsninger. Typisk taler vi om aktuarer, økonomer, kemi- og elektro-ingeniører, fysikere etc. Med mindre disse personer samtidig har en IT-baggrund, viser vores erfaring at de faktisk hurtigere bliver produktive med APL, end med traditionelle sprog. Og vigtigere: Det bliver muligt for dem at løse problemer, som de bare ville give op over for, hvis de enten skulle skrive dem i Java/C – eller prøve at ”specificere” dem, så et hold af Java/C eksperter kunne løse dem. For ”opfinderen” er det sidste faktisk tit sværere end at skrive det selv. Det er ikke nemt at hyre og fyre disse personer. Det ER lidt af en udfordring for en leder at skulle forvalte den slags "raw power" - men problemerne kan sagtens løses - og sådan er det altid når man løber stærkt.
Forklaringen på produktiviteten ligger i at APL er en matematisk notation som er designet til undervisning i naturvidenskabelige emner - og til at beskrive af matematiske ”processer”. Den første fortolker blev først udviklet nogle år efter at sproget havde været anvendt i undervisning. Skal man være grov, tager designet af de fleste andre sprog udgangspunkt i at man nemmest muligt skal kunne skrive effektive compilere til dagens hardware – eller undgå bestemte typer af fejl hos udviklere som arbejder med store projekter. Ikke ligefrem noget, det hjælper udvikleren med at tænke kreativt eller undgå "forståelsesfejl".
De fleste store virksomheder, som bruger APL, ansætter normalt mest økonomer eller ingeniører (plus enkelte deciderede softwareudviklere, se nedenfor). Det tager måske 3-4 uger at lære dem nok APL til at de bliver produktive. Jeg vil våge den påstand at det tager en smule længere tid for en typisk C- eller Java udvikler at sætte sig ind i (for eksempel) økonomiske teorier og skattelovgivningen omkring aktier og obligationer - eller petrokemi.
Man kan selvfølgelig ikke forvente at en økonom eller ingeniør uden en egentlig IT-baggrund kan konstruere store og velfungerende systemer (selv om det er forbløffende, hvad de til tyder lykkes med). De kan ikke tage de nødvendige hensyn til overordnede sikkerheds- og performance-hensyn – eller andre krav til ”indpakning”. Derfor bør ”domain-eksperterne” pakkes ind i et hold, hvor der er tilstrækkeligt med folk der både forstår APL-udviklernes arbejdsbetingelser OG de krav som der ellers stilles til moderne IT-systemer.
I vore dage er der ingen problemer med integration af komponenter skrevet i APL: Moderne APL-systemer (som Dyalog APL - se http://www.dyalog.com), kan generere COM og .NET moduler, implementere WebServices, WCF komponenter, bruges som ”scripting language” på websider – i det hele taget pakkes ind i alle de interfaces som et programmerings-sprog forventes at benytte i dag. DotNet klasser skrevet i APL kan indgå i hierarkier som er delvist implementeret i andre sprog, etc etc.
Men hensyn til modenhed / kompilering: Vores fortolker fejrede 25 års jubilæum i år, så den er efter hånden ”vellagret”. Der findes delvis kompilering eller oversættelse til for eksempel C#. – men ingen ”komplette” compilers til APL (i og med at grænsen mellem kode og data er meget grå i APL, kan man faktisk ikke lave en 100% kompilering). Man kan også anvende APL som et specifikations-sprog og så skrive applikationer om til andre sprog i hånden, når de har stabiliseret sig og problemerne er fuldstændig kortlagte: ExxonMobil anvender en teknik hvor en del optimeringer løses ved at APL-koden genererer FORTRAN (fordi FORTRAN compilerne fremdeles er dem der løber aller hurtigst på mange numeriske metoder), som benyttes som input til optimerings-rutiner skrevet i andre sprog.
Faktisk viser det sig at mange applikationer som afvikles i APL faktisk har bedre performance end konkurrerende produkter baseret på C++. Man kan selvfølgelig ALTID skrive et program som har bedre performance i C eller C++, hvis man bevarer overblikket. Men source-koden vokser tit med en faktor 10 eller mere, og den dekomponering i objekt-modeller etc som normalt finder sted betyder tit at man har let for at overgeneralisere og ender op med noget kode som selv verdens bedste compiler ikke kan få til at køre så hurtigt som kompakt APL. Som Michael nævnte havde IBMs "APL2" support for mainframens vector facility (som det første IBM produkt), og i dag er arbejdet godt igang med at udnytte multi-core maskiner og computation grids fra APL.
Det er selfølgeligt ikke altid tilfældet at APL kører super stærkt – men runtime ydelse er heller ikke altid det vigtigste. Der hvor APL anvendes er det normalt ”time to market” – evnen til at tilpasse produkter til nye markedsbetingelser, tit i løbet af dage eller uger - som er den vigtigste parameter. Denne hastighed kan simpelthen ikke opnås hvis der kommer for mange lag ind i processen mellem dem der virkelig forstår problemerne, og den endelige løsning.
Hvis man i et land som Danmark ønsker at være konkurrencedygtig i fremtiden, bliver det efter min mening nødvendigt at satse på software med et højt niveau af indebygget (teknisk) viden. Der er MANGE penge i at inddrage andre end ”programmører” direkte i udviklings-processerne. Selv om APL har 40 år på bagen er det fremdeles et pænt stykke "forud for sin tid" på dette område.