handdator

Visa fullständig version : Läsvärt om datorvetenskap


Muskelbyggaren
2008-12-04, 11:33
Dessa har visst 20 år på nacken men har tyvärr undgått mig till idag.

http://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1036.PDF

eller HTML om man så vill:

http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html

Hade jag mer tid och energi hade jag skrivit en massa om vad jag tänker och tycker om det här, och så har ju Dijkstra redan formulerat mycket av vad jag ändå skulle säga. Men kort sagt...

Datorvetenskap som den ser ut idag är dömd att misslyckas. Man försöker ständigt skapa människovänliga gränssnitt ämnade att dölja det totalt oförlåtande logiska maskineri som gömmer sig där under. Man tillskriver datorer egenskaper som de inte alls har, vilket den som tittat på Microsofts "felsökare" eller tagit hjälp av den förträffliga "Office-assistenten" alldeles säkert märkt. Slopa försjäligandet av datorer och låt dem vara vad de är, överlåt intelligensen till människan och dumräknadet åt datorn. Få programmerare att se på sitt jobb som matematiker istället för skulptörer. Dator 1 snackar aldrig med Dator 2, utan det skickas signaler dem emellan som möter vissa specifikationer. Det senare tar 2 sekunder längre att förstå men förebygger så mycket missförstånd.

Datorn är ett fenomen så skilt från alla våra tidigare upplevelser att det inte är lönt att kränga in den i gamla begrepp i hopp om att fler ska ha möjlighet att förstå den. Dijkstra gör en liknelse med att lära sig kvantmekanik: till en början försöker man likna de nya fenomenen med den vanliga världen, men snart inser man att det är bättre att bryta ny mark och acceptera helt nya begrepp. Datorvetenskapen borde göra det samma. Hans förslag på slutet om att börja lära ut programmering utan datorer tycker jag är klockrent. Programmeraren borde kunna skriva program minst lika bra på papper som på datorn. För om inte betyder det ju att han använder datorn för att se om det fungerar, vilket är som att bevisa en formel genom att testa om den stämmer för ett fåtal värden. Just därför uppstår "buggar", fel orsakade av att programmeraren inte tänkt igenom sin skapelse.

Nu tog tiden slut, hoppas nån orkar läsa länken!

jwzrd
2008-12-04, 11:39
Trams. Jag har inte läst artikeln än men du blandar ihop en massa saker. Du och jag, Snackar(tm) inte heller med varandra utan utbyter tankar med varandra enligt ett bestämt protokoll också. Mänskligt språk i den svenska varianten. Datorer är förvisso dumma, men inte dummare än en skiftnyckel och du ser inte särskilt många artiklar om hur sådana borde göras mer lika ursprungsämnet järnmalm. Det är givetvis klart som korvspad att man behöver lägga en väldig möda på att fortsätta anpassa datorer efter oss så att de kan vara och bli de verktyg vi behöver i olika sammanhang.

Jag förstår sen inte hur papperet förklarar något. Du talar om utbildningsväsendet som om du visste hur programmering lärs ut på precis alla ställen. Mitt bidrag till det är snarare: programmering lär man sig själv för att man kan precis som att ett barn lär sig svenska själv. Har man inte verktygen så bör man inte försöka heller utan rikta sin uppmärksamhet på andra saker.

Saft und Kraft
2008-12-04, 13:34
Men detta är väl alls inte kontroversiellt egentligen (om någon nu tycker det), annat än för insnöade degknyten som helst av allt önskar gömma skallen mellan sina skinkor.
Och visst, degknyten av detta slag ger väl knappast några högre poäng i fågelskådarklubbens rullor. Jag menar däremot att det är en fullständig självklarhet, att man genom analogier lär sig nya begrepp och försöker forma dessa till något man kan behandla, så fullständigt som möjligt, efter den förmåga man åtminstone tror sig besitta. Detta är endast naturligt. (Möjligen ett riskabelt ordval men jag är bold as hell kamrater.) Jag får dock utifrån texten inte uppfattningen att Dijkstra skulle mena, vad han skriver, på ett sådant sätt. Det handlar om en högst generell inställning till hur man ska betrakta problemlösning, med hjälp av lite kisel och annan skit.

Den stora ”faran” ligger i att helt enkelt vara för dum för att antingen begripa att något är mer komplext än att man sinnligen kan behandla det, eller att man helt enkelt låter till synes lika fenomen ärva, för att sedan äga, egenskaper vilka för fenomenet i fråga ej existerar. En analogi har just syftet att låta något förklaras på ett sätt som gör det spjälkningsbart. (Om analogin nu är vettig vill säga.) Man använder sig av sådana, för att ha ett angripningsätt, att lära eller lära ut kunskaper och begrepp, vilka förväntas vara svåra att ta till sig då dessa inte förväntas kunna förstås intuitivt, exempelvis. Detta skulle jag gissa är mer eller mindre allmängiltigt för den, åtminstone största delen av för någon tillskansad intelektuell kunskap. Det man från födseln lär sig tidigast, ordnar man nya intryck efter helt automagiskt. Nu väljer jag att inte gå in på medfödd förståelse och vad sådant innebär eller skulle innebära men jag tror ändå att min poäng framgår. Nu är det förstås så att frågan kring ”sanningar” är ganska komplicerad, enligt min mening, eftersom man i sammanhanget ytterst behöver svara på huruvida man verkligen kan se och helt förnimma en sanning, som människa. (Här menar jag att man naturligtvis måste ta hänsyn till ämnet i fråga då jag inte har för avsikt att förvandla detta till vad de flesta antagligen skulle kalla trams.) Nej det som är intressant, delvis p.g.a. dess praktiska möjlighet till utvärdering, är somligas, som Dijkstra sagt, ovilja att hålla sig till verkligheten. Verkligheten så som den är, inte på det vis man tror sig förstå den och därmed kunna övertyga andra om den. Föregående mening kan säkert uppfattas som öppnandes precis alla förbannade portar in i min borg, men då har man helt enkelt inte förstått min mening. Detta var inte menat som en lustighet kring ämnet analogier, men lyckas i.s.f. ändå med bedriften att stärka min urspungliga tanke, tycker jag nog allt även om det är hur tramsigt som helst. Läsaren (fat chanse) kan härmed se sig uppmanad att suga på denna lilla smällkaramell.

Vidare är det knappast en hemlighet att mycken programvara är högst bristfällig. Vad som är ännu värre är att detta sällan är lätt att bevisa eller kanske i vissa fall ens påvisa innan det går åt helvete. Att balja efter balja med kod tar käpphästen till helsefyr handlar ofta om att det är förbannat svårt att med fullständig kontroll låta det stå klart att ”Nu fungerar detta killar” och samtidigt vara säker på att man har rätt. Nja, säker är man kanske ibland ändå, vilket återigen är en del av problematiken. Åtminstone om man är tillräckligt säker för att tro sig kunna pracka på andra det hela.

Och något angående tester: Precis som med en algoritm, på låt säga ett papper (pappret är högst symboliskt trots att det inte behöver vara det), kräver ett fullständigt (om vi talar om diskreta mängder åtminstone) uppräknande av testfall samma slags omsorg som algoritmen i sig. Däremot är det inte alls konstigt att också som matematiker testa sig fram med ”lämpliga” värden, om man tror sig ha upptäckt något eller vill kontrollera om det kan finnas något att upptäcka. Däremot skulle aldrig en matematiker (ja här vågar jag nog generalisera) likställa detta med ett bevis. Man kan dock i bästa fall, utifrån ett resultat forma ett bevis och denna initiala testning vore det i.s.f. oklokt att betratka som kätteri eller allmän vårdslöshet.

Till sist vill jag bara säga att om herr Dijkstra haft åsikter om något, är min mening att man nog gjorde klokast i att beakta dessa, om man nu bryr sig. (Märk väl att det jag skrivit inledningvis inte är en paradox i sammanhanget.) Mannen hade skills och därmed punkt.

Trance
2008-12-04, 13:49
Dijkstra var cool men det han säger passar inte riktigt in tycker jag. Det han pratar om handlar mer om Computer Science än det som de flesta håller på med, Software Engineering.

Visst går det bevisa vissa programs korrekthet med formella bevis, men de programmen är oftast väldigt simpla och representationer av några rena isolerade algoritmer. Så när du skall skapa en algoritm för att söka i något i en rymd med x dimensioner så visst kan det säkert vara bra att göra ett formellt bevis som visar att ditt program kommer att vara korrekt. Computer Science är väldigt intressant och den forskningen är viktig, det som upptäcks letar sig långsamt men säkert in i de formella språken, t.ex. kan man tydligt se C# och dess adaption av funktionella paradigmer som visat sig värdefulla. Dijkstras forskning har ju själv betytt väldigt mycket för den mesta mjukvaran i vilken dator som helst.

Men sedan kommer man till den verkliga världen som den absolut största majoriteten lever och verkar i. Hur skriver du ett formellt bevis på att ditt GUI fungerar som det skall? Eller trådar, databaser, tredjeparts bibliotek, interaktion med filssystem, att ditt javascript fungerar som det skall i IE6?

Den mesta utveckling som sker idag handlar om att limma ihop olika mjukvarubibliotek under tidsbrist och med ständiga förändringar i kravspecar. Man bombarderas med nya teknologier och sitter alltid med gammal dåligt skriven kod som man inte har tid att skriva om.

Det räcker bara att titta på vad du bör kunna om du skall vara duktig på att utveckla webbapplikationer. Vissa saker kan man ignorera om man har ett stort team men man behöver fortfarande ha grundläggande kunskap:

HTML/CSS
Javascript samt numera förmodligen jQuery eller liknande.
HTTP
Programmeringsspråk och ramverk, t.ex. C#/.NET
Editor/IDE/Debugger
HTTP-patters som PRG, webbspecifika patterns som MVC
Kunna loggning, felhantering, valdidering och då gärna kunna använda tredjepartsprodukter som log4j/log4net.
Kunskap om enhetstestning, orm-mappers, mocking etc.
SQL, stored procedures, enklare administration av de olika databasmotorerna.
Säkerhetstänk så man undviker XSS, injections etc.
Bra arktiktekturtänk, separation of concerns osv.

Har säkert missat massor men det är grundläggande kunskap och det är jäkligt mycket att kunna.

Till viss del tycker jag att jwzrd har rätt. För att bli bra Software Engineer så måste man lära sig det själv och med det menar jag att man måste hela tiden vilja lära sig. De som bara gör labbarna på utbildningen eller den som bara ser programmering som ett "8-17"-jobb som vilket som helst blir aldrig en riktigt bra utvecklare. Det gäller att vilja lära sig

Så ett av de stora problemen med varför det finns så mycket dålig programvara är att det är så väldigt mycket man måste lära sig, det förändras snabbt, utvecklas under tidspress och det finns ofta stora brister i kompetensen.

Det är också tyvärr detta som gör att många högskolor förändrar sig och går mot att försöka utbilda java/.net-programmerare istället för lära folk programmering. Skillnaden är t.ex. föreläsningar som tar upp hur man pratar med en databas i Java istället för en föreläsning som tar upp tankesättet bakom den objektorienterade paradigmen (nu har man ofta båda men ni förstår säkert vad jag menar). Detta görs eftersom marknaden skriker efter folk som kan Java/.NET och att de som går de linjerna inte sitter på sin fritid och lär sig det som behövs för att bemästra språken.

Så sammanfattningsvis så tror jag inte Dijkstra har lösningen då den verkliga världen är såpass annorlunda mot den verkligheten han satt i när han skrev texten. Sedan så är vårat yrke jäkligt ungt också och förändras så snabbt så förhoppningsvis utvecklas det åt rätt håll så man kan få bättre kod. Antingen genom bättre verktyg, metoder och språk eller med större krav på kompetens hos utvecklare, tror mer på den första än andra om jag skall vara ärlig.

jwzrd
2008-12-04, 14:00
Utmärkt inlägg!

Saft und Kraft
2008-12-04, 14:18
Dijkstra var cool men det han säger passar inte riktigt in tycker jag. Det han pratar om handlar mer om Computer Science än det som de flesta håller på med, Software Engineering.

Men sedan kommer man till den verkliga världen som den absolut största majoriteten lever och verkar i. Hur skriver du ett formellt bevis på att ditt GUI fungerar som det skall? Eller trådar, databaser, tredjeparts bibliotek, interaktion med filssystem, att ditt javascript fungerar som det skall i IE6?

a) Hmmm. Passar inte in vardå? I det han själv väljer att tala om? Men du menar kanske i den zon, de flesta, för vilka det hela är intressant, befinner sig i.

b) Hade man något intresse att skapa ett sådant bevis kunde man kanske också göra det i vissa fall. Jag tycker förstås inte att detta är riktigt relevant i sammanhanget. Men din poäng är högst relevant på många sätt ändå och detta gäller det verkligen att man förstår. Återigen hänvisar du till det praktiska och det är väl vettigt att man ändå i sammanhanget gör, eftersom det annars kan bli precis hur löjligt som helst.

I vissa fullständigt verkliga och existerande situationer kan jag ändå se att Dijkstras tanke är vidkommande. Detta kan man välja att diskutera eller inte.

(Som varandes 100 % anal vill jag bara meddela att jag visst på ett riktigt sätt kan stava till chans på engelska.)

Liten Men Fet
2008-12-04, 14:56
Jag har pluggat datavetenskap i ganska många år nu och det stora problemet med dom flesta program är, som ett par redan sagt, inte att dom försöks göras för "mjuka" utan att dom som gör inte har någon koll på användarvänlighet och inte tar sig tid att testa efter fel ordentligt under utvecklingen.
Sitter man med ett program med 50 000 rader kod så vill man inte ha det så nära ursprunget som möjligt, maskinkod, för det skulle vara helt omöjligt att överblicka.
De verktyg som finns för programmering är väldigt värdefulla men problemet är att samma sak går att göra på 100 olika sätt och en del sätt är bra och en del är dåliga. Det leder till att programmen blir svåra att förstå sig på inte för att det är för abstraherat utan för att det finns 1000 varianter och en del är dåliga. Sen kommer problemet med buggar i utvecklingsverktygen också.

Tar man den vanliga användaren när han/hon ska ställa in något i windows och misslyckas så beror inte det på att det är för abstraherat utan för att dom har gjort det på ett usel sätt med guider som inte fungerar som dom ska och inställningar som är svåra att hitta.
Det är ändå fan så mycket lättare att ställa in nätverket i windows för en ovan än att göra det i ett unix system som bara har en promt.

Moderna system är för stora och komplicerade för att man ska göra allt manuellt, man behöver hjälpmedel och verktyg för att underlätta. Tyvärr läggs det ner för lite resurser just på användarvänlighet så det blir dåligt.

Angående jämförelsen med kvantmekanik så tycker jag den är lite haltande, programmering bygger på logik och resonemang som är ganska naturliga för människan. I kvantmekaniken finns det vissa fenomen som är kluriga att acceptera men inte så svåra att förstå hur dom fungerar.
Jag håller precis på att avsluta mitt examensarbete som handlar om kryptografi i optiska nätverk baserat på just kvantmekanik och jag har tidigare bara pluggat datavetenskap. Där används kvantmekaniska fenomen för att överföra information säkert och inget av det är så svårt att förstå.

Trance
2008-12-04, 22:03
a) Hmmm. Passar inte in vardå? I det han själv väljer att tala om? Men du menar kanske i den zon, de flesta, för vilka det hela är intressant, befinner sig i.

b) Hade man något intresse att skapa ett sådant bevis kunde man kanske också göra det i vissa fall. Jag tycker förstås inte att detta är riktigt relevant i sammanhanget. Men din poäng är högst relevant på många sätt ändå och detta gäller det verkligen att man förstår. Återigen hänvisar du till det praktiska och det är väl vettigt att man ändå i sammanhanget gör, eftersom det annars kan bli precis hur löjligt som helst.

I vissa fullständigt verkliga och existerande situationer kan jag ändå se att Dijkstras tanke är vidkommande. Detta kan man välja att diskutera eller inte.

(Som varandes 100 % anal vill jag bara meddela att jag visst på ett riktigt sätt kan stava till chans på engelska.)

Passar inte in i verkligheten, så som den ser ut. Lite lustigt/dåligt formulerat av mig men det jag menar är att lösningen på problemet med dåligt skriven kod är inte formella bevis då det helt enkelt inte fungerar.

Vårat yrke rör sig snabbt framåt och förhoppningsvis så gäller det även möjligheten att skapa högkvalitativ programvara. Se bara på de senaste åren och hur stort enhetstestning har blivit och hur mycket som gått ifrån språk som c++/c.

Skall jag vara ärlig så skulle jag vilja se formella bevis för någon verklig programvara alls; jag menar är det något som inte måste direkt börja med antaganden hur operativsystem, tredjepartsprodukter, mjukvarubibliotek etc fungerar?

Baan
2008-12-04, 22:15
Det är också tyvärr detta som gör att många högskolor förändrar sig och går mot att försöka utbilda java/.net-programmerare istället för lära folk programmering. Skillnaden är t.ex. föreläsningar som tar upp hur man pratar med en databas i Java istället för en föreläsning som tar upp tankesättet bakom den objektorienterade paradigmen (nu har man ofta båda men ni förstår säkert vad jag menar). Detta görs eftersom marknaden skriker efter folk som kan Java/.NET och att de som går de linjerna inte sitter på sin fritid och lär sig det som behövs för att bemästra språken.

Så sammanfattningsvis så tror jag inte Dijkstra har lösningen då den verkliga världen är såpass annorlunda mot den verkligheten han satt i när han skrev texten. Sedan så är vårat yrke jäkligt ungt också och förändras så snabbt så förhoppningsvis utvecklas det åt rätt håll så man kan få bättre kod. Antingen genom bättre verktyg, metoder och språk eller med större krav på kompetens hos utvecklare, tror mer på den första än andra om jag skall vara ärlig.

Vilka är dessa högskolor du har bra koll på? Som tar approachen du nämner.

Trance
2008-12-04, 22:22
Vilka är dessa högskolor du har bra koll på? Som tar approachen du nämner.

Jag kan inte säga att jag har bra koll på specifika skolor då jag inte har förstahandsinformation men rent genrellt så är det ett känt "problem" i branchen. Både i Sverige och t.ex. USA.

Baan
2008-12-04, 22:29
Jag kan inte säga att jag har bra koll på specifika skolor då jag inte har förstahandsinformation men rent genrellt så är det ett känt "problem" i branchen. Både i Sverige och t.ex. USA.

Jag har inte upplevt det alls men jag antog att du hade lite bättre koll (jag kan bara snacka om Chalmers i princip) när du ändå skrev "många högskolor" men du tänkte väl att ingen skulle bry sig om det antar jag :)

Jag har upplevt det ungefär tvärtom som du beskriver. Jag och många andra som pluggar idag stör väl oss lite på det - men det kanske är bättre egentligen. Svårt att veta egentligen - arbetsgivarna verkar vilja ha mer hantverkare än filosofer men om man kommer in på rätt arbetsplats kanske det mer praktiska kommer lätt av sig själv. Det verkar vara så för dom som pluggat liknande utbildningar här som jag pratat med och som kommit ut i branschen.

Baan
2008-12-04, 22:35
Kan säga så här också, din sista mening i det jag citerade innan att få sitter och kodar häcken av sig för att lära sig dom verktygen som faktiskt används (och inte bara tar åt sig teorin via skolan och sen lär sig verktygen på egen hand) är ju jävligt sant och då vågar jag ändå påstå att jag har koll på ganska många studenter (man är ju fett social). Min skola har dock inte agerat särskilt mycket på det att man kan säga att det är en ren praktisk javaprogrmameringscivilingenjörsutbildning.

Trance
2008-12-04, 22:41
Jag har inte upplevt det alls men jag antog att du hade lite bättre koll (jag kan bara snacka om Chalmers i princip) när du ändå skrev "många högskolor" men du tänkte väl att ingen skulle bry sig om det antar jag :)

Jag har upplevt det ungefär tvärtom som du beskriver. Jag och många andra som pluggar idag stör väl oss lite på det - men det kanske är bättre egentligen. Svårt att veta egentligen - arbetsgivarna verkar vilja ha mer hantverkare än filosofer men om man kommer in på rätt arbetsplats kanske det mer praktiska kommer lätt av sig själv. Det verkar vara så för dom som pluggat liknande utbildningar här som jag pratat med och som kommit ut i branschen.

Det beror på hur seriös man är och hur mycket man har möjlighet att lära sig själv. Använda vettiga källkodshanteringsverktyg, kunna sin IDE/Debugger, veta syntaxen och vad det finns för populära frameworks är saker jag tycker att man kanske borde lära sig själv naturligt.

Chalmers är väl rätt hardcore fortfarande vad jag vet och det är en bra sak att ha i grunden. Sedan är man inte självlärd och man är absolut inte klar för när man är klar måste man som sagt bli hantverkaren och har man tur så hittar man någon på sitt nya jobb som är riktigt vass som man kan lära sig. Den det är alltid bra att ha lite "Computer Science" i grunden, anser jag då.

Fast viktigast är fortfarande viljan att lära sig och det finns så enormt mycket möjligheter nu på Internet med bloggar av de verkliga experterna, gratis böcker, podcasts, screencasts osv.

Vilken typ av programmering och i vilket språk skulle du vilja jobba med när du blir klar? Om man får fråga.

hahavaffan
2008-12-04, 22:47
Vilken typ av programmering och i vilket språk skulle du vilja jobba med när du blir klar? Om man får fråga.Om du frågar, så frågar jag. Vad har du för utbildningar, och vad gör du i dagens läge? Jobbar? Du verkar hur som helst vass som attans :D

Trance
2008-12-04, 22:54
Om du frågar, så frågar jag. Vad har du för utbildningar, och vad gör du i dagens läge? Jobbar? Du verkar hur som helst vass som attans :D

Systemvetare/systemarkitekt och jobbar nu som programmerare, mest med C#. Jag är inte vidare vass men jag har blivit väldigt intresserad de senaste åren och gjort en del för att försöka bli bättre och täcka luckor som jag har. Sedan läser jag mycket nyheter om branchen och vad som händer, vilket nog gör att jag låter bättre än vad jag är.

Baan
2008-12-04, 22:55
Det beror på hur seriös man är och hur mycket man har möjlighet att lära sig själv. Använda vettiga källkodshanteringsverktyg, kunna sin IDE/Debugger, veta syntaxen och vad det finns för populära frameworks är saker jag tycker att man kanske borde lära sig själv naturligt.

Chalmers är väl rätt hardcore fortfarande vad jag vet och det är en bra sak att ha i grunden. Sedan är man inte självlärd och man är absolut inte klar för när man är klar måste man som sagt bli hantverkaren och har man tur så hittar man någon på sitt nya jobb som är riktigt vass som man kan lära sig. Den det är alltid bra att ha lite "Computer Science" i grunden, anser jag då.

Fast viktigast är fortfarande viljan att lära sig och det finns så enormt mycket möjligheter nu på Internet med bloggar av de verkliga experterna, gratis böcker, podcasts, screencasts osv.

Vilken typ av programmering och i vilket språk skulle du vilja jobba med när du blir klar? Om man får fråga.

Om man ska vara riktigt hardcore går man med i IEEE ;)

Jag har fått revidera min syn på vad jag kan jobba med nu när jag sökt exjobb senaste tiden. Någon gång drömde jag om jobb på Cisco (LOL?!) eller liknande väldigt specifikt mot Internetteknik osv. I princip vara med i ett team av riktigt kompetenta människor som utvecklar riktigt kompetenta produkter.

Nu har jag mer fått uppfattningen om att det är främst "tjänster" som gäller i Sverige. Det som finns och som följer drömmen är dom stora företagen som har utvecklingen i Sverige som Ericsson, Volvo, Saab... men då har jag inte riktigt rätt utbildning. Funktionell programmering, som jag gillar spotta på, hade t.ex. varit smart om man vill göra karriär på Ericsson. Utan att filosofera för mycket tänker jag mig att det naturliga vore Java, och vad exakt vet jag inte. Är egentligen inte särskilt duktig på Java heller. Jag hoppas exjobbet ger lite spetskompetens.

Zlin
2008-12-04, 22:58
webbspecifika patterns som MVC

Jag skall inte ens låtsas att jag har något att tillföra i denna diskussionen, däremot dristar jag mig till att gå lite OT. Är det allmänt erkänt att MVC är ett webbspecifikt pattern? Av det jag har läst (Larman, Mattiasen etc) är det ett rätt vanligt förekommande mönster i vanliga desktop-applikationer också.

hahavaffan
2008-12-04, 22:59
Systemvetare/systemarkitekt och jobbar nu som programmerare, mest med C#. Jag är inte vidare vass men jag har blivit väldigt intresserad de senaste åren och gjort en del för att försöka bli bättre och täcka luckor som jag har. Sedan läser jag mycket nyheter om branchen och vad som händer, vilket nog gör att jag låter bättre än vad jag är.Okej, ödmjuk iaf =) Jag vill lära mig så mycket, men det känns inte som man har tid, inte nu när man tvingas på andra ämnen på programmet jag går, som jag kanske inte hade läst om jag enbart gått fristående kurser. Java är först ut iaf, och börjat efter jul.

Zlin
2008-12-04, 23:04
Fast viktigast är fortfarande viljan att lära sig och det finns så enormt mycket möjligheter nu på Internet med bloggar av de verkliga experterna, gratis böcker, podcasts, screencasts osv.


Och edit-tiden gick precis ut för mitt förra inlägg när jag läste ditt. Har du tips på det du nämner ovan?

Trance
2008-12-04, 23:04
Jag skall inte ens låtsas att jag har något att tillföra i denna diskussionen, däremot dristar jag mig till att gå lite OT. Är det allmänt erkänt att MVC är ett webbspecifikt pattern? Av det jag har läst (Larman, Mattiasen etc) är det ett rätt vanligt förekommande mönster i vanliga desktop-applikationer också.

Nej, det var fel sagt av mig. Det har blivit enormt populärt på webben och till och med Microsoft släpper ju asp.net mvc nu men det är självklart inte specifikt för webben. Det finns ju t.ex. Cocoa på OS X om vi snackar desktop.

Trance
2008-12-04, 23:13
Och edit-tiden gick precis ut för mitt förra inlägg när jag läste ditt. Har du tips på det du nämner ovan?

Vilken inriktning?

Zlin
2008-12-04, 23:20
Vilken inriktning?

Kommer antagligen koda mest i Java/C# i framtiden så där är allt intressant.

Allmänt systemarkitektur och "smarta" lösningar på problem tycker jag är riktigt spännande. Typ patterns etc.


Ang. MVC så har du såklart helt rätt, bland annat Zend och rena CMS som Drupal etc känns som om de kommer starkare och starkare. Det är kul. :)

Trance
2008-12-04, 23:59
Kommer antagligen koda mest i Java/C# i framtiden så där är allt intressant.

Allmänt systemarkitektur och "smarta" lösningar på problem tycker jag är riktigt spännande. Typ patterns etc.


Ang. MVC så har du såklart helt rätt, bland annat Zend och rena CMS som Drupal etc känns som om de kommer starkare och starkare. Det är kul. :)

Ok, här kommer lite länkar. En del är specifikt för .NET dock men det mesta är generellt.

Reddit som fungerar som Digg.com där användare skickar in sina egna länkar är ett bra sätt att hitta nya bloggar, intressanta artiklar, nyheter och slösa bort mängder av tid. De "subreddits" som kanske är intressanta:

http://www.reddit.com/r/programming/
http://www.reddit.com/r/dotnet
http://www.reddit.com/r/java
http://www.reddit.com/r/compsci

dotnetkicks, som reddit fast mindre och bara för .net
http://www.dotnetkicks.com/

Bloggar:

John Resig - Skapare av jQuery och smart kille. Skriver om javascript och web
http://ejohn.org/blog/

Steve Yegge - Känd bloggare som nu jobbar på google och skriver enormt långa inlägg, ibland väldigt intressanta och ibland mindre.
http://steve-yegge.blogspot.com/

Jeff Attwood - Också väldigt känd bloggare som mest är känd för att han skriver om uppenbara saker som är lättläst, men helt ok
http://www.codinghorror.com/

Lite olika personer på codebetter, läser väl inte direkt alla inlägg men har ibland guldkorn
http://codebetter.com/

Encosia - Skriver bra om javascript och webforms
http://encosia.com/

Lite blandat
http://programmingmatters.com/

En svensk, Torkel som jag tycker skriver rätt bra om .NET
http://www.codinginstinct.com/

Webdesign/usability
www.alistapart.com

Andra resurser:

Jeff Attwood och Joel Spolsky (också "känd") skapat en typ blanding mellan reddit/forum/wiki och den har blivit väldigt populär. Bra att söka info om problem man har där.
www.stackoverflow.com

Patterns..
http://martinfowler.com/

Sedan har Sun/IBM/Microsoft alla massa siter, kan vara lite lurigt att hitta men de har en del bra artiklar lite spridda.

Typ:http://msdn.microsoft.com/en-us/magazine/cc947917.aspx

Sedan om man vill veta lite vad som börjar bli populärt inom .NET (mycket kommer från open source communityn i Java) så är denna e-boken på bara 80ish sidor väldigt bra. Det går igenom lite patterns, lite test driven design osv: http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx

Jag får återkomma med screencasts senare men det är en start nu. Så kolla vad du gillar och leta upp nytt genom reddit och släng in det i din rss-läsare (www.google.com/reader/ om du inte har någon)

[EDIT]: Sedan finns ju vanliga böcker. Typ Code Complete second edition är väl en av de bästa böckerna någonsin anser nog rätt många:
http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1228431637&sr=8-1

Muskelbyggaren
2008-12-05, 03:02
Mycket intressanta inlägg i tråden! Hinner dessvärre inte läsa ordentligt nu. Jag måste säga att jag inte förespråkar formella bevis istället för traditionell programmering. Jag tycker heller inte att man ska slopa allt vad gränssnitt och anpassning heter. Det är ju en gråzon, och jag tycker att vi i nuläget är alldeles för långt åt förmänskliga(/dumma)-sidan av det.

Konkret så tycker jag att man måste ställa betydligt högre krav på programmerare. Där har datorvetare sin uppgift att visa vägen och tex skapa ordentliga standarder. Hur man sen får in såna idéer hos företagen är ett helt annat dilemma. Hela trasslet beror nog också på att utvecklingen helt enkelt gått för fort och rimligen torde man inom ett antal decennier kommit dit där en svenssondator är en "standardenhet" och inget man själv plockar ihop på Datorbutiken.

Zlin
2008-12-05, 15:18
Ok, här kommer lite länkar. En del är specifikt för .NET dock men det mesta är generellt.

Reddit som fungerar som Digg.com där användare skickar in sina egna länkar är ett bra sätt att hitta nya bloggar, intressanta artiklar, nyheter och slösa bort mängder av tid. De "subreddits" som kanske är intressanta:

http://www.reddit.com/r/programming/
http://www.reddit.com/r/dotnet
http://www.reddit.com/r/java
http://www.reddit.com/r/compsci

dotnetkicks, som reddit fast mindre och bara för .net
http://www.dotnetkicks.com/

Bloggar:

John Resig - Skapare av jQuery och smart kille. Skriver om javascript och web
http://ejohn.org/blog/

Steve Yegge - Känd bloggare som nu jobbar på google och skriver enormt långa inlägg, ibland väldigt intressanta och ibland mindre.
http://steve-yegge.blogspot.com/

Jeff Attwood - Också väldigt känd bloggare som mest är känd för att han skriver om uppenbara saker som är lättläst, men helt ok
http://www.codinghorror.com/

Lite olika personer på codebetter, läser väl inte direkt alla inlägg men har ibland guldkorn
http://codebetter.com/

Encosia - Skriver bra om javascript och webforms
http://encosia.com/

Lite blandat
http://programmingmatters.com/

En svensk, Torkel som jag tycker skriver rätt bra om .NET
http://www.codinginstinct.com/

Webdesign/usability
www.alistapart.com

Andra resurser:

Jeff Attwood och Joel Spolsky (också "känd") skapat en typ blanding mellan reddit/forum/wiki och den har blivit väldigt populär. Bra att söka info om problem man har där.
www.stackoverflow.com

Patterns..
http://martinfowler.com/

Sedan har Sun/IBM/Microsoft alla massa siter, kan vara lite lurigt att hitta men de har en del bra artiklar lite spridda.

Typ:http://msdn.microsoft.com/en-us/magazine/cc947917.aspx

Sedan om man vill veta lite vad som börjar bli populärt inom .NET (mycket kommer från open source communityn i Java) så är denna e-boken på bara 80ish sidor väldigt bra. Det går igenom lite patterns, lite test driven design osv: http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx

Jag får återkomma med screencasts senare men det är en start nu. Så kolla vad du gillar och leta upp nytt genom reddit och släng in det i din rss-läsare (www.google.com/reader/ om du inte har någon)

[EDIT]: Sedan finns ju vanliga böcker. Typ Code Complete second edition är väl en av de bästa böckerna någonsin anser nog rätt många:
http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1228431637&sr=8-1

Berättade jag att jag älskade dig? TACK! :)

Trance
2008-12-05, 20:07
Lite mer tips. Jag fokuserade inte tillräckligt hårt på boken Code Complete 2. Den är bättre än alla kursböcker ni köpt och är det en bok jag rekommenderar så är det den. Det är en bok som varar och den kommer att ge ännu mer när man läser om den efter några års erfarenhet. Ni kanske inte håller med om allt i den heller men även på de ställena man inte håller med så tvingas man tänka hur och varför man gör som man gör. Denna boken är för alla programmerare, oavsett språk typ.

En annan bok jag har hört gott om och som handlar om arkitektur(.Net) är:
Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries , som är skriven av skaparna av .NET frameworket och handlar om varför det ser ut som det gör och tanken på hur man bygger ett framework som går att bygga vidare på men ändå hur man behåller bakåtkompatibilitet. Inte läst den själv men skall nog.

Sedan praktiska tips. Patterns är intressant men fall inte i fällan och tro att det är en "silver bullet" som alltid är bra. För det första så Singleton är så gott som värdelös, den är enkel och oftast det första man gillar och använder. I praktiken så används den för att slippa tänka objektorienterat och används som en global variabel, så i 99% av fallen så är den helt enkelt fel.

Sedan så har framför allt Java-communitien (men även delar av .NET) och det är en tendens till overengineering och allmän mastrubering runt patterns. Så fall inte i fällan efter att ha läst Martin Fowler och andra att designa ett simpelt system där 90% av koden handlar om olika factories, dependancy injection, yadayad. Det blir inte lättare att förstå och det blir inte bättre för att du teoretiskt kan byta ut din datalager hur lätt som helst till ett gäng kineser som skriver för hand genom att ändra i massa xml-filer.

En parodi på hur det kan vara med alla dessa frameworks som skall "hjälpa" dig.
http://discuss.joelonsoftware.com/default.asp?joel.3.219431

I .NET-världen är det en annan sak som suger mest och det är att så jäkla många enbart använder MS produkter. De är enormt misstänksamma mot att använda open source-frameworks, open source-verktyg eller bara allmänt icke-intresserade av vad som händer utanför vad MS säger åt dem. Detta håller också på att ändras lite och MS hjälper till men kan vara rätt jobbigt.

Trance
2008-12-08, 20:24
Mycket intressanta inlägg i tråden! Hinner dessvärre inte läsa ordentligt nu. Jag måste säga att jag inte förespråkar formella bevis istället för traditionell programmering. Jag tycker heller inte att man ska slopa allt vad gränssnitt och anpassning heter. Det är ju en gråzon, och jag tycker att vi i nuläget är alldeles för långt åt förmänskliga(/dumma)-sidan av det.

Jag vet inte riktigt vad du menar med att man anpassar gränssnitt för människan. Det är ju inte så att grep i terminalen är närmare någon inre representation än en söken i utforskaren.


Konkret så tycker jag att man måste ställa betydligt högre krav på programmerare. Där har datorvetare sin uppgift att visa vägen och tex skapa ordentliga standarder. Hur man sen får in såna idéer hos företagen är ett helt annat dilemma. Hela trasslet beror nog också på att utvecklingen helt enkelt gått för fort och rimligen torde man inom ett antal decennier kommit dit där en svenssondator är en "standardenhet" och inget man själv plockar ihop på Datorbutiken.

Utveckla gärna vad du menar med standarder? Nyfiken vad du tänker på.

Baan
2008-12-08, 20:31
Jag hade tänkt läsa artikeln, men eftersom man är lat har det inte blivit av. Generellt sätt var inte Dijkstra direkt den praktiske killen som satt och kodade på något system, han var så mycket teoretiker som man kan bli. Inte särskilt konstigt heller att han ville ha en mer formell systemutveckling - det var ju hans forskningsområde (eller en av hans, är inte säker).

Anledningen till att man inte formellt verifierar det mesta idag - förutom eventuellt riktigt säkerhetskritiska system (som för den delen inte behöver vara sjukligt komplexa) - är att det inte är praktiskt genomförbart. Jag har inte märkt av något större hat mot idéen, snarare om någon är väldigt extrem av sig och hävdar att alla andra tillvägagångssätt är fel, då blir man ju lite förbannad.

Saft und Kraft
2008-12-08, 22:18
Sedan praktiska tips. Patterns är intressant men fall inte i fällan och tro att det är en "silver bullet" som alltid är bra. För det första så Singleton är så gott som värdelös, den är enkel och oftast det första man gillar och använder. I praktiken så används den för att slippa tänka objektorienterat och används som en global variabel, så i 99% av fallen så är den helt enkelt fel.

Nu kräver förstås ett användande av Singleton i regel ingen större skallansträngning men värdelöst vet jag inte direkt. Ibland bör man absolut begränsa mängden instanser du kan skapa av ett givet objekt till ett. Menar du att man i nästan samtliga av dessa fall bara istället borde tänka om, designmässigt, vad gäller just detta?

I övrigt håller jag med dig i att design patterns inte är den slutgiltiga lösningen på precis allt men ur ett ingenjörsmässigt perspektiv finns där nog ändå ganska mycket att vinna.

Trance
2008-12-08, 22:34
Nu kräver förstås ett användande av Singleton i regel ingen större skallansträngning men värdelöst vet jag inte direkt. Ibland bör man absolut begränsa mängden instanser du kan skapa av ett givet objekt till ett. Menar du att man i nästan samtliga av dessa fall bara istället borde tänka om, designmässigt, vad gäller just detta?

Visst finns det fall när du måste begränsa dig till en instans men vad jag menar är att det sällan används som det, utan det används som en genväg för att slippa tänka till och använda objektorienterad design.

Jag tycker Steve Yegge har bra tankar om detta:
http://steve.yegge.googlepages.com/singleton-considered-stupid


I övrigt håller jag med dig i att design patterns inte är den slutgiltiga lösningen på precis allt men ur ett ingenjörsmässigt perspektiv finns där nog ändå ganska mycket att vinna.

Visst finns det jättemycket att tjäna på att kunna och använda design patters och arkitekturella patterns men samtidigt är det en balansgång på vad som faktiskt skapar värde i applikationen och vad som är mastrubering över hur smart man är och hur mycket patterns man kan trycka in.

Det jag säger är väl rätt uppenbart när jag tänker på det.

Saft und Kraft
2008-12-08, 22:43
Visst finns det jättemycket att tjäna på att kunna och använda design patters och arkitekturella patterns men samtidigt är det en balansgång på vad som faktiskt skapar värde i applikationen och vad som är mastrubering över hur smart man är och hur mycket patterns man kan trycka in.

Det jag säger är väl rätt uppenbart när jag tänker på det.

Jo det är ganska självklart men inte därmed onödigt att yttra. Du ger ju själv exempel på att begreppet missbrukas friskt varför det inte skadar att ge sin syn på saken i diskussionen.

Att med våld och omak försöka få något att bli något annat än det är tänkt att vara, kan vara minst lika dumt som att uppfinna hjulet för åttioelfte gången.

Muskelbyggaren
2008-12-09, 10:30
Jag vet inte riktigt vad du menar med att man anpassar gränssnitt för människan. Det är ju inte så att grep i terminalen är närmare någon inre representation än en söken i utforskaren.
Nu när jag försöker komma på nåt exempel för vad jag menar är det tomt, vilket väl innebär att jag bara famlade efter nåt som inte fanns. :)


Utveckla gärna vad du menar med standarder? Nyfiken vad du tänker på.
En gång hade jag kul med att implementera lite olika protokoll, HTTP och FTP tex. Det som slog mig var att det fanns RFC:er och det var bara att gör precis som det stog. Även RFC:er har sina brister så är det idéen som är viktig: en Dijkstra har redan tänkt igenom alla kniviga scenarion åt en. Därför gavs jag inte ens ansvaret att göra "uppläggsmässiga fel". Nu svänger teknikmodet snabbare än standarderna hinner med. Ett exempel på detta är HTML/HTTP/AJAX-härvan. Där bygger man alltihop med verktyg som inte för fem öre gjordes för ändamålet, och inte fungerar bra heller. Är det nån som tänkt på varför Gmail lyckats så bra? En helt vanlig webmail ju. Jag vet, de gjorde vad nästan alla andra helt enkel inte grejade: att skriva ett enkelt program med verktygen som fanns till hands.

Trance
2008-12-09, 21:40
En gång hade jag kul med att implementera lite olika protokoll, HTTP och FTP tex. Det som slog mig var att det fanns RFC:er och det var bara att gör precis som det stog. Även RFC:er har sina brister så är det idéen som är viktig: en Dijkstra har redan tänkt igenom alla kniviga scenarion åt en. Därför gavs jag inte ens ansvaret att göra "uppläggsmässiga fel". Nu svänger teknikmodet snabbare än standarderna hinner med. Ett exempel på detta är HTML/HTTP/AJAX-härvan. Där bygger man alltihop med verktyg som inte för fem öre gjordes för ändamålet, och inte fungerar bra heller. Är det nån som tänkt på varför Gmail lyckats så bra? En helt vanlig webmail ju. Jag vet, de gjorde vad nästan alla andra helt enkel inte grejade: att skriva ett enkelt program med verktygen som fanns till hands.

Nu är det viss skillnad på imlempentera http/ftp och att göra en fullständigt kompatibel html/css-renderare. HTML/CSS har växt fram plågsamt men det är tack vare företagen mycket av det innovativa sker, trots att det är "proprietary" i början innan det (om det är populärt) vävs in i en standard. Hela AJAX-grejen (och då gmail) skulle inte vara möjligt utan Microsofts XMLHttpRequest som sedan resten av alla browsers implementerade.

Visst är det bra med konsortium och långsamt framväxande specifikationer men det går...långsamt ofta (HTML 5.0 skall väl bli klart 2022 har jag för mig) och standardiserade protokoll är inte heller någon garanti på att det blir bra (ftp är rätt dåligt t.ex.)

När vi ändå är inne på ämnet så finns det en rätt känd term som snuddar vid detta ämnet; Worse is better (http://en.wikipedia.org/wiki/Worse_is_better). Det finns hur många exempel som helst på hur "sämre" slår "bättre" på grund av enkelhet att använda och ta till sig. Ett av de bästa är PHP.

PHP är jäkligt hånat för att det helt har gjort så många "fel" när det gäller att skapa ett programmeringsspråk. Det är global namespace hit och magic quotes dit och det är svårt att skriva en större kodbas utan allt blir spagetti. Det finns så jäkla många "bättre" språk men PHP är väldigt lätt att komma igång med, PHP är väldigt tillgängligt, PHP är lätt att köra på många plattformar. PHP tillsammans med MySQL (en annan worse is better, de flesta anser väl att t.ex. Postgre är bättre) har resulterat i facebook, flickr, wikipedia, yahoo, digg osv. Det är svårt att börja mumla (även om jag gärna vill) om hur dåligt PHP när man ser de resultaten.

Trance
2008-12-09, 22:51
Jag hade tänkt läsa artikeln, men eftersom man är lat har det inte blivit av. Generellt sätt var inte Dijkstra direkt den praktiske killen som satt och kodade på något system, han var så mycket teoretiker som man kan bli. Inte särskilt konstigt heller att han ville ha en mer formell systemutveckling - det var ju hans forskningsområde (eller en av hans, är inte säker).

Anledningen till att man inte formellt verifierar det mesta idag - förutom eventuellt riktigt säkerhetskritiska system (som för den delen inte behöver vara sjukligt komplexa) - är att det inte är praktiskt genomförbart. Jag har inte märkt av något större hat mot idéen, snarare om någon är väldigt extrem av sig och hävdar att alla andra tillvägagångssätt är fel, då blir man ju lite förbannad.

Dijkstra har väl även gett vissa rätt bra konkreta tips, typ Go To is considered harmfull ;-)

Baan
2008-12-09, 22:52
Dijkstra har väl även gett vissa rätt bra konkreta tips, typ Go To is considered harmfull ;-)

Ja, han fick igenom for-loopen och liknande konstruktioner 1853 antar jag.