{"id":496,"date":"2024-02-12T20:10:00","date_gmt":"2024-02-12T19:10:00","guid":{"rendered":"https:\/\/djax.se\/blog\/?p=496"},"modified":"2024-10-12T11:24:19","modified_gmt":"2024-10-12T09:24:19","slug":"hur-skall-vi-forklara-hur-det-ar-att-vara-en-programmerare","status":"publish","type":"post","link":"https:\/\/djax.se\/?p=496","title":{"rendered":"Hur skall vi f\u00f6rklara hur det \u00e4r att vara en programmerare?"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>a hacker using a typewriter in a dark forest<\/p>\n<cite>Prompt som skapat den AI-genererade bilden<\/cite><\/blockquote>\n\n\n\n<p>Jag l\u00e4rde mig p\u00e5 allvar att programmera i &#8221;vuxen&#8221; \u00e5lder. Det fanns ju f\u00f6r fasen inga Commodore kvar n\u00e4r jag b\u00f6rjade bli lite medveten. Inga s\u00e5dana d\u00e4r tidningar med hela program som skulle knappas in som alla \u00e4ldre kodare tillber sina kodarkunskaper.<\/p>\n\n\n\n<p>Jag kommer ih\u00e5g hur mytomspunna jag tyckte programmerare var. Hur kan de skapa en emulator som g\u00f6r det det m\u00f6jligt att spela gamla spel igen? <a href=\"https:\/\/github.com\/adajoh\/Spelpojken\">(Nu vet jag)<\/a>. Hur kan de koda spel med grafik och interaktion? <a href=\"https:\/\/github.com\/adajoh\/Kantele\">(Nu vet jag)<\/a>. Hur kan de koda sm\u00e5 intellekt inuti maskin som startar och stoppar verkliga processer som tillverkar de varor vi beh\u00f6ver? <a href=\"https:\/\/web.archive.org\/web\/20130206093443\/http:\/www.idg.se\/2.1085\/1.488226\/mackmyra-whisky--goda-klunkar-i-rostfria-bunkar\">(Nu vet jag)<\/a>.<\/p>\n\n\n\n<p>Det finns fortfarande saker jag tycker \u00e4r mytomspunnet. Hur fasen kan de <a href=\"https:\/\/en.wikipedia.org\/wiki\/No-disc_crack\">\u00e4ndra n\u00e5gra av bitarna i en exe<\/a> s\u00e5 den inte l\u00e4ngre kr\u00e4ver cd skiva i l\u00e4saren? (Beh\u00f6ver l\u00e4ra mig <a href=\"https:\/\/github.com\/NationalSecurityAgency\/ghidra\">Ghidra<\/a>&#8230;). Hur kan de komma p\u00e5 exakt r\u00e4tt bitar att skicka till den \u00f6ppna porten p\u00e5 en VPN som g\u00f6r att en virtuell tjuv \u00e4r helt inne p\u00e5 ett annat f\u00f6retag?<\/p>\n\n\n\n<p>I stridens hetta \u00e4r det sv\u00e5rt f\u00f6r utvecklare att beskriva varf\u00f6r en till synes enkel \u00e4ndring kr\u00e4ver stora omtag, n\u00e4r n\u00e5got annat som k\u00e4nns mycket sv\u00e5rt visade sig kunna implementeras p\u00e5 en f\u00f6rmiddag. Denna text \u00e4r en filosofisk grund till diskussionen f\u00f6r hur framtidens mjukvara kan skapas p\u00e5 ett h\u00e5llbart s\u00e4tt.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Jag har t\u00e4nkt mycket p\u00e5 vilket annat yrke som \u00e4r mest likt systemutvecklare och min b\u00e4sta liknelse \u00e4r <strong>f\u00f6rfattare<\/strong>. Det finns s\u00e5 mycket olika f\u00f6rfattare. En del har en karri\u00e4r i att skriva faktab\u00f6cker om det <a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Demon-Haunted_World\">objektiva vi f\u00f6rs\u00f6ker inrama<\/a>. Andra skapar <a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Lord_of_the_Rings\">hela fiktiva v\u00e4rldar<\/a> med helt p\u00e5hittade inneh\u00e5ll eller efterforskade sammanblandningar fr\u00e5n den verkliga v\u00e4rlden. Vissa skriver bara biografier om <a href=\"https:\/\/en.wikipedia.org\/wiki\/Walter_Isaacson#Bibliography\">andra m\u00e4nniskors<\/a> liv. B\u00f6cker kan antingen skrivas av en person <a href=\"https:\/\/en.wikipedia.org\/wiki\/James_S._A._Corey\">eller flera<\/a>. Det beror lite p\u00e5 vad det \u00e4r f\u00f6r typ av bok och vilka individer som finns till hands att skriva den.<\/p>\n\n\n\n<p>N\u00e5got som \u00e4r lika mytomspunnet som en programmerare som skapar en b\u00e4sts\u00e4ljare <a href=\"https:\/\/www.stardewvalley.net\/\">helt sj\u00e4lv<\/a> \u00e4r en hur en f\u00f6rfattare som skapar en hel v\u00e4rld i b\u00f6cker med bara sin hj\u00e4rna och tangentbord.<\/p>\n\n\n\n<p>Vissa f\u00f6rfattare kan skriva olika genrer. Medans andra bara skriver samma typ av verklighets inspirerade thrillers igen och igen. Alla f\u00f6rfattare har s\u00e4kert sitt egna arbetss\u00e4tt som gjort de framg\u00e5ngsrika i sin produktion av verken. Jag kan t\u00e4nka mig att en del vill skriva allt fr\u00e5n start till slut medans andra g\u00f6r de viktigaste delarna f\u00f6rst f\u00f6r att sedan fylla p\u00e5 med passagerna emellan.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Nu b\u00f6rjar liknelserna mellan programmerare och f\u00f6rfattare.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"124\" src=\"http:\/\/djax.se\/wp-content\/uploads\/2024\/02\/hold-onto-your-buts-butt.gif\" alt=\"\" class=\"wp-image-521\" style=\"width:650px;height:auto\"\/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Att vara agil p\u00e5 riktigt \u00e4r att s\u00e4ga stopp v\u00e4nta: &#8221;jag \u00e4r en f\u00f6rfattare av sk\u00f6nlitter\u00e4ra romantik pockets&#8221;. Skall jag skriva en faktabok om dinosaurier s\u00e5 beh\u00f6ver vissa anpassningar i arbetss\u00e4ttet g\u00f6ras. Skall jag ocks\u00e5 g\u00f6ra det ihop med n\u00e5gra andra som var och en har en annan bakgrund som inte heller \u00e4r relaterad med dinosaurier m\u00e5ste vi l\u00e4ra k\u00e4nna varandra.<\/p>\n\n\n\n<p>Ibland kanske boken har p\u00e5b\u00f6rjats av n\u00e5gon men av n\u00e5gon anledning beh\u00f6ver en ny f\u00f6rfattare ta vid. Hur l\u00e4tt tror du att det skulle vara att f\u00e4rdigst\u00e4lla en halvf\u00e4rdig Sagan om ringen?<\/p>\n\n\n\n<p>Om boken skall skrivas fort kan det vara en god ide att flera jobbar samtidigt. Men hur skall arbetet f\u00f6rdelas? Kan varje person skriva varsitt kapitel? Hur ser vi till att n\u00e5got som h\u00e4nder i ett kapitel inte blir mots\u00e4gelsefullt senare i boken? H\u00e4r m\u00e5ste alla medf\u00f6rfattare vara mycket \u00f6verens fr\u00e5n b\u00f6rjan hur slutresultatet skall se ut. B\u00e4st \u00e4r att h\u00e5lla antalet f\u00f6rfattare <a href=\"https:\/\/www.theguardian.com\/technology\/2018\/apr\/24\/the-two-pizza-rule-and-the-secret-of-amazons-success\">s\u00e5 l\u00e5gt<\/a> som m\u00f6jligt. Dock \u00e4r det s\u00e5 klart negativt i bem\u00e4rkelsen om n\u00e5got skulle h\u00e4nda en av f\u00f6rfattarna.<\/p>\n\n\n\n<p>Ibland beh\u00f6ver vi l\u00e4gga till ett kapitel i en mycket mycket gammal bok. Den ursprungliga f\u00f6rfattaren finns inte l\u00e4ngre. Kapitlet skall s\u00e5klart passa in obem\u00e4rkt med befintlig historia och karakt\u00e4rer. Vad \u00e4r det f\u00f6r superm\u00e4nniska som kan klara av det? Den nya f\u00f6rfattaren g\u00f6r b\u00e4st i att l\u00e4ra sig s\u00e5 mycket den kan om den gamla boken f\u00f6rst och f\u00f6rs\u00f6ka s\u00e4tta sig in hur den f\u00f6rsta f\u00f6rfattaren t\u00e4nkte n\u00e4r den skrev ursprungsverket. Inte l\u00e4tt! Den nya f\u00f6rfattaren beh\u00f6ver mycket st\u00f6d och utrymme att r\u00e4tta sina misstag innan den helt kan fylla ut skorna den gamla f\u00f6rfattaren l\u00e4mnat \u00f6ver.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Each existing system is a DoS attack on you by dozens of people you may not even know; a booby-trapped palace of ticking complexity time-bombs planted years ahead of your involvement. <\/p>\n<cite><a href=\"https:\/\/maheshba.bitbucket.io\/blog\/2024\/05\/08\/2024-ThreeLaws.html\">Three Laws of Software Complexity (or: why software engineers are always grumpy)<\/a><\/cite><\/blockquote>\n\n\n\n<p>Hur skall andra personer runtomkring f\u00f6rfattarna kunna hj\u00e4lpa dom i arbetet? Det \u00e4r inte deras hj\u00e4rnor som \u00e4r fyllda av alla detaljer i boken som \u00e4r sammankopplade med varandra p\u00e5 otaliga s\u00e4tt. Det \u00e4r detta som s\u00e4tter niv\u00e5n f\u00f6r kvaliteten p\u00e5 hela verket. Blir j\u00e4ttekonstigt om n\u00e5gon som inte \u00e4r med och skriver boken best\u00e4mmer i till exempel vilken ordning saker skall skrivas i. Eller nekar n\u00e5gon att renskriva direkt n\u00e4r det \u00e4r f\u00e4rskt i huvudet f\u00f6r att n\u00e4sta kapitel m\u00e5ste p\u00e5b\u00f6rjas. Hur skall en av f\u00f6rfattarna a priori veta innan boken \u00e4r p\u00e5b\u00f6rjad hur l\u00e5ng tid det kommer ta att skriva kapitel 23?<\/p>\n\n\n\n<p>Det blir inte l\u00e4tt f\u00f6r den nya f\u00f6rfattaren att f\u00e5 sin f\u00f6rsta (sedan innan tidsbest\u00e4md) uppgift som best\u00e5r i att: <strong>&#8221;i kapitel 12, stycke 34, l\u00e4gg till en bakgrunds f\u00f6rklaring till varf\u00f6r karakt\u00e4r #13 \u00f6verraskade med sina ov\u00e4ntade handlingar i kapitel 3 i formen av en inre monolog&#8221;<\/strong>. Vem \u00e4r karakt\u00e4r #13? Vad gjorde den i kapitel 3? Hur vet jag att f\u00f6rklaringen jag hittar p\u00e5 rimmar med bokens \u00f6vriga k\u00e4nsla?<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>What is required is that the new programmer has the opportunity to work in close contact with the programmers who already possess the theory, so as to be able to become familiar with the place of the program in the wider context of the relevant real world situations and so as to acquire the knowledge of how the program works and how unusual program reactions and program modifications are handled within the program theory<\/p>\n<cite><br><a href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/Naur.pdf\">Peter Naur \u2013 Programming as Theory Buildin<\/a><\/cite><\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Snart kanske en av f\u00f6rfattarna \u00e4r en AI som kan, b\u00e4ttre \u00e4n alla andra m\u00e4nniskor, h\u00e5lla hela utkastet av boken i huvudet samtidigt. Ber vi den d\u00e5 fylla p\u00e5 med lite egna meningar h\u00e4r och var s\u00e5 kan det nog bli riktigt bra.<\/p>\n\n\n\n<p>Om man fr\u00e5gar en f\u00f6rfattare om en specifik dialog mellan tv\u00e5 karakt\u00e4rer i kapitel 7 s\u00e5 kanske inte hen kommer ih\u00e5g n\u00e5got om detta fast den sj\u00e4lv har skrivit det och hela boken sj\u00e4lv. Hen kan s\u00e4kert friska upp minnet lite men m\u00e5ste d\u00e5 f\u00f6rst l\u00e4sa passagen sj\u00e4lv och kanske ocks\u00e5 de kringliggande. Du gissade r\u00e4tt, s\u00e5 h\u00e4r \u00e4r det ocks\u00e5 f\u00f6r systemutvecklare. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>Nobody<\/em> can read the source code of Chrome. Not alone, not as a team. Humans don&#8217;t live long enough<\/p>\n<cite><a href=\"https:\/\/www.theregister.com\/2024\/02\/12\/drowning_in_code\/?td=rt-3a\">Drowning in code: The ever-growing problem of ever-growing codebases<\/a><\/cite><\/blockquote>\n\n\n\n<p>Saken g\u00f6rs oftast inte b\u00e4ttre av att hela boken (programmet) finns beskrivet i en annan form, p\u00e5 en annan plats, oftast ben\u00e4mnt som &#8221;dokumentation&#8221;. Koden l\u00e4r \u00e4nd\u00e5 beh\u00f6va l\u00e4sas av f\u00f6rfattaren f\u00f6r att kunna ge ett korrekt svar. Dokumentation kan ist\u00e4llet beskriva varf\u00f6r bokens historia \u00e4r uppbyggd p\u00e5 det s\u00e4tt den \u00e4r och anledningen till valen som gjorts. Detta hj\u00e4lper nya f\u00f6rfattaren att plocka upp pennan och forts\u00e4tta i framtiden.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Programmerare kan vara olika bra p\u00e5 spr\u00e5k. Likt en f\u00f6rfattare som bara skriver sci-fi kanske en viss programmerare \u00e4r b\u00e4st p\u00e5 system med mycket kartor och platsdata eller e-handel. <\/p>\n\n\n\n<p>Varf\u00f6r st\u00e5r det d\u00e5 bara om massa tekniker i utvecklarannonser? Ber\u00e4tta om syftet med er bok ist\u00e4llet. Skulle tro att det faktiskt inte \u00e4r s\u00e5 m\u00e5nga utvecklare som \u00e4r petiga kring exakt vilket spr\u00e5k som anv\u00e4nds. <\/p>\n\n\n\n<p>F\u00f6r en f\u00f6rfattare av barnb\u00f6cker kan det s\u00e5klart vara sv\u00e5rt att be den skriva en biografi om Bill gates. P\u00e5 samma s\u00e4tt kan en senior utvecklare upplevas som l\u00e5ngsam n\u00e4r den nu skall koda faktural\u00f6sningar om den tidigare endast jobbat med dataspel. Programmeringsspr\u00e5ket och all annan teknik \u00e4r fortfarande det samma i mina t\u00e4nkta exempel, men allt annat \u00e4r f\u00f6r\u00e4ndrat, det \u00e4r en helt ny bok. Ingen kan s\u00e4tta sig direkt ner och skriva n\u00e4sta mening \u00e4ven fast spr\u00e5ket \u00e4r k\u00e4nt.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Jag hoppas att med denna text beskriva hur det \u00e4r som utvecklare att lyssna in visionerna fr\u00e5n intressenter som sedan skall omvandlas till den bok de f\u00f6rv\u00e4ntar sig. Ibland \u00e4r &#8221;kraven&#8221; mycket detaljerade ner p\u00e5 specifika h\u00e4ndelser som m\u00e5ste h\u00e4nde i ett visst skede i boken. Ibland \u00e4r f\u00f6rfr\u00e5gningarna mer m\u00e5lande. Det \u00e4r inte helt l\u00e4tt f\u00f6r intressenterna att veta hur detaljrikt det de s\u00e4ger \u00e4r. Utvecklaren beh\u00f6ver kunna bolla tillbaka fr\u00e5gest\u00e4llningar kring hur detaljer den kanske funnit efter l\u00e4sningar av koden skall kunna passa ihop med andra delar av systemet som kanske inte ens uppenbart berodde p\u00e5 varandra.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Det blir sv\u00e5rt att planera f\u00f6r och s\u00e4kra h\u00e5llbarheten i verksamheten om s\u00e5 mycket h\u00e4nger p\u00e5 f\u00e5 personer som k\u00e4nner till kodbasen intimt. Att AI kan hj\u00e4lpa nya programmerare f\u00f6rst\u00e5 en ok\u00e4nd m\u00e4ngd kod kan vara en del av l\u00f6sningen. Mer AI inom systemutveckling kanske ocks\u00e5 ger en &#8221;<a href=\"https:\/\/sv.wikipedia.org\/wiki\/Regression_mot_medelv%C3%A4rdet\">str\u00f6mlinjeformande&#8221; <\/a>effekt p\u00e5 v\u00e4rldens kodbaser.<\/p>\n\n\n\n<p>Utvecklare m\u00e5ste ocks\u00e5 skriva sin kod s\u00e5 den \u00e4r l\u00e4sbar av andra som kanske inte har samma bakgrundsinformation som fanns tillg\u00e4nglig d\u00e5 koden initialt skrevs. Intressenter beh\u00f6ver n\u00e5got s\u00e4tt att kunna hj\u00e4lpa utvecklarna se till att detta efterf\u00f6ljs, hur det skulle kunna se ut i praktiken vet jag inte, mer processer och rutiner \u00e4r inte l\u00f6sningen. Koden skall ocks\u00e5 kunna vara f\u00f6rberedd p\u00e5 att i framtiden kunna flyttas runt och omformas utefter externa f\u00f6r\u00e4ndrade omst\u00e4ndigheter.<\/p>\n\n\n\n<p>Jag tror ocks\u00e5 yrket \u00e4ntligen beh\u00f6ver mogna och etablera arbetss\u00e4tt (heuristik?) som sedan inte tummas p\u00e5. De skall finnas utanf\u00f6r varje hype-cyckel.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Heuristik \u00e4r en metod, enkel procedur eller tumregel baserad p\u00e5 en kombination av empiriska observationer och obepr\u00f6vade teorier som kan ge ofullst\u00e4ndiga men f\u00f6r situationen tillr\u00e4ckliga och anv\u00e4ndbara svar p\u00e5 olika fr\u00e5gor eller kunskapsunderlag inf\u00f6r beslut<\/p>\n<cite><a href=\"https:\/\/sv.wikipedia.org\/wiki\/Heuristik\">https:\/\/sv.wikipedia.org\/wiki\/Heuristik<\/a><\/cite><\/blockquote>\n\n\n\n<p>Exempelvis beh\u00f6ver vi best\u00e4mma oss f\u00f6r om det skall finnas enhetstester eller inte. Sluta debattera om det och v\u00e4lj en l\u00f6sning som alla framtidens projekt bara skall f\u00f6lja! En elektriker g\u00e5r inte bananas och best\u00e4mmer att den skall minsann v\u00e4lja en annan typ av kabel bara f\u00f6r lusten faller p\u00e5.<\/p>\n\n\n\n<p>D\u00e5 kan utbildningar l\u00e4ra ut etablerad <strong>software engineering<\/strong>. Idag \u00e4r det en mix av verktyg fr\u00e5n arbetslivet och akademiska <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mutation_testing\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/Mutation_testing\">f\u00f6rhoppningar<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>a hacker using a typewriter in a dark forest Prompt som skapat den AI-genererade bilden Jag l\u00e4rde mig p\u00e5 allvar att programmera i &#8221;vuxen&#8221; \u00e5lder. Det fanns ju f\u00f6r fasen inga Commodore kvar n\u00e4r jag b\u00f6rjade bli lite medveten. Inga s\u00e5dana d\u00e4r tidningar med hela program som skulle knappas in som alla \u00e4ldre kodare tillber [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":503,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-496","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-systemutveckling"],"_links":{"self":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=496"}],"version-history":[{"count":1,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/496\/revisions"}],"predecessor-version":[{"id":693,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/496\/revisions\/693"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/media\/503"}],"wp:attachment":[{"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}