Podcasts

Jeg hører ekstremt mye på audio podcasts for utviklere. Jeg synes også at video podcasts er en perfect måte å lære ny teknologi og teknikker på, og forsøker å få med meg litt av det også. Her skriver jeg litt om podcastene jeg synes er ekstra interessante.

Bowling Kata

Jeg har laget en ny video til dere; denne gangen har jeg tatt opp mitt forsøk på å gjennomføre Bowling Kata i Clojure (bakgrunn om Bowling Game Kata på codingdojo.org og butUncleBob.com).

Jeg sier forsøk fordi jeg knoter litt underveis. Jeg valgte derimot å beholde videoen slik den var i stedet for å ta den opp igjen – å se hvordan jeg feiler, og hvordan jeg får hjelp av testene til å hente meg inn igjen, har også en viss verdi.

Så hvis du trenger litt TDD og/eller Clojure-inspirasjon, her har du en ærlig og munter code cast:

Brainf*ck

brainfuck_inofficial_logo

Vi utviklere er noen merkelige dyr av og til! Og det er når vi er på vårt aller mest merkelige at vi henter frem programmeringsspråk som brainfuck.

Brainfuck er ikke laget for å være praktisk; det er et fullverdig, Turing-komplett språk, men det er verken forståelig eller spesielt enkelt å bruke til noe fornuftig. Grunnen til at det i sin tid ble laget var at man ville se hvor liten man kunne få en kompilator. Oppfinneren Urban Müller klarte å lage en kompilator for brainfuck til Amiga OS som var på bare 240 bytes.

Jeg har lekt meg litt med brainfuck i det siste. Hvorfor det spør du kanskje? Tja, det er jo noe å lære seg.., en mental utfordring. Millioner av folk over hele kloden bruker jo timevis hver uke på å løse Sudoku – å løse oppgaver i et kryptisk programmeringsspråk er vel egentlig ikke så veldig mye mer spesielt?!

Jeg har til og med installert et integrert utviklingsmiljø for brainfuck – bfdev – hvor jeg kan steppe gjennom instruksjoner, inspisere program-minnet o.l.

bfdev_s

Men jeg har tatt det litt lengre enn som så også – jeg har nemlig implementert min egen brainfuck-tolker. På github finner du nå bf-clj som du kan bruke til å kjøre brainfuck fra Clojure. Igjen har jeg gjort dette fordi det var en mental utfordring.

Så veldig krevende var det heller ikke, men litt spennende å få til i et funksjonelt språk. Det er ikke alltid lett å finne små men utfordrende øvingsoppgaver man kan bruke til å trene programmering, men brainfuck kan i alle fall være en slik. Så jeg anbefaler alle å forsøke å implementere sin egen brainfuck-tolker.

Her har jeg laget en liten video som demonstrerer bf-clj…

En funksjonell Stack-basert kalkulator

NNUG-møtet i Bergen på onsdag ble jeg inspirert til å gjøre en stack-basert kalkulator-kata. Det var nok ikke det som var foreleserens intensjon, men dette var det mest spennende jeg fikk ut av foredraget.

Siden onsdagen har jeg gjort denne kataen tre ganger, i Clojure, med ganske ulike resultat hver gang. Den siste gangen filmet jeg det jeg gjorde, la på litt musikk, og her er resultatet.

Men les gjerne det som står nedenfor først, sånn at du vet hva du går til…

Stack-based Calculator Kata in Clojure from Torbjørn Marø on Vimeo.

Ren og skitten kode

Det som kanskje er litt spesielt er at jeg implementerer kalkulatoren med funksjonell programmering og “rene” funksjoner. Det vil i praksis si at koden ikke kan pushe eller poppe data på/av stacken. Funksjonene må ta inn en stack som parameter, returnere en ny stack tilbake som programmet kan bruke videre, og ellers ikke gjøre noen ting.

Denne implementasjonen illustrerer derfor seperasjonen mellom “ren” kode uten bieffekter og “skitten” kode med bieffekter, slik som jeg snakket om i blogposten hemmeligheten bak funksjonell programmering avslørt.

TDD

I videoen bruker jeg tester som støtte når jeg implementerer den rene delen av programmet. Men dette var som sagt tredje gangen jeg løste oppgaven, og jeg følte meg ganske sikker. Derfor ble testene kanskje ikke så gode, dvs. de drev ikke utviklingen på samme måte som første og andre gangen.

Strengt tatt kunne jeg ha droppet en av testene jeg brukte også, for den var veldig lik en av de andre. Men det oppdaget jeg ikke i farten…

å forstå Clojure-koden

Koden som demonstreres i videoen er egentlig ganske basic, og bør passe for dem som er relativt ferske i Clojure. Her er noen tips som kan gjøre det enklere å følge med.

Den beste datatypen å bruke for å representere en stack i Clojure er en vector. Det er en slags array som er optimalisert for å legge til elementer på enden. Man kan opprette en tom vector slik: [], eller en vector med noen numre slik: [1 2 3 4 5].

For å legge til et nytt element på stacken brukes funksjonen conj. (conj [1 2 3] 4) returnerer en ny vector: [1 2 3 4].

I denne tredje implementasjonen valgte jeg å bruke det som kalles destructuring – en form for pattern matching. Når jeg gjør dette: (let [[x y & r [1 2 3 4]]]) vil x få verdien 1, y får verdien 2, og r får resten av vectoren, altså [3 4] i dette tilfellet. Men om du følger nøye med så ser du at jeg nå plukker elementer fra starten av vectoren, og da ser det mer ut som en kø enn en stack. Trikset er at jeg reverserer stacken før jeg gjør dette, og da går det jo for det samme.

Selve utregningen, evalueringen av pluss, minus, gange og deling, benytter seg av det faktum at i Clojure er data det samme som kode, og kode er det samme som data. Jeg bygger rett og slett opp et Clojure-uttrykk, f.eks. (+ 1 2), som jeg så evaluerer og får resultatet 3.

Bloopers

Alle filmer inneholder feil, også denne. Blant annet implementerte jeg en måte å avslutte programmet på (ved at man sendte kommandoen quit), men jeg tok den aldri i bruk.

Den morsomste feilen er derimot metoden som ble hetende promp! Det skulle selvsagt ha vært prompt.

En universell server (video)

Har du lyst til å se meg kode? Jeg har laget en code cast video jeg håper du vil like, men først litt bakgrunn…

Joe Armstrongs foredrag om Message Passing Concurrency in Erlang på QCon London i fjor forandret meg! Han viste meg en måte å trylle med kode på som inntil da hadde vært helt fremmed for meg. Etter det har Erlang, og deretter Clojure, formet nye mønstre i hjernen min, om hvordan det er mulig å skape fantastiske ting med dynamisk kode.

I presentasjonen lagde Armstrong noe han kalte for en universell server – en server som kunne bli hva som helst, bare ved at man sendte den ulike kommandoer. I min video lager jeg en lignende server i Clojure. Jeg forventer ikke at min video skal gi noen den samme kvasireligiøse a-ha-opplevelsen som Joe gav meg, men kanskje den kan gi deg noen nye ideer…

Jeg hadde veldig lyst til å bruke Daft Punk’s TRON Legacy soundtrack som bakgrunnsmusikk, men jeg turde til slutt ikke å bruke musikk jeg ikke har rettighetene til. Musikken er derfor hentet fra Mevio’s Music Alley. Skru på høytalerne!

The Universal Server from Torbjørn Marø on Vimeo.

Vil gjerne høre hva du synes!

God test, bedre kode

Av alle de spennende tingene som skulle skje på Norwegian Developer Conference 2009, var det en ting jeg gledet meg mere til enn noe annet. Jeg skulle nemlig få oppleve en hel dags workshop med Scott Bellware.


http://www.flickr.com/photos/digidragon/ / CC BY-NC-ND 2.0

Bellware er en utvikler og Agile coach fra Austin, Texas. Han har fått MVP-tittelen fra Microsoft fem ganger, men er mest kjent for å være en sentral person i Alt.Net miljøet, og kritiserer Microsoft ganske åpenlyst. Han er en fargerik person, og kan karrakteriseres som en aldri så liten bråkebøtte. Følger du @bellware på twitter så merker du raskt hva jeg mener.

Jeg var så heldig å få “henge litt” med Scott utenom workshopen og foredragene også, og selv om han er Stor i Kjeften har han mye interessant å komme med, og jeg synes det er helt fantastisk at Jon Arild har invitert Scott til å komme å forelese for NNUG i Bergen senere i år.

Workshop’en

Workshopen handlet i hovedsak om å skrive automatiserte tester i form av Context Specifictions. Scott’s budskap var at vi må gjemme all støyen fra testene/spesifikasjonene våre – testene er dokumentasjon, og skal være enkle å lese. Han sier at man oppnår høy produktivitet i utvikling om man har et godt design, og et godt design kommer av god TDD.

Med dette som bakteppe kom Bellware inn på mange ulike områder, og her er noen høydepunkter fra notatene mine:

TDD: De to første stegene i TDD – (1) lag en test som feiler og (2) få den til å passere på enklest mulig måte – er egentlig en test av selve testen. Ved å bevise at den først feiler og deretter passerer ved forventet “input til asserten” kan man stole på testen. Først etter at testen er grønn implementerer man funksjonaliteten slik den skal være. (Jeg har forsøkt å poengtere det samme flere ganger, men er ikke alltid like flink til å følge det selv.)

TDD: Gjør TDD i så små steg som mulig. “Jeg trodde at de små stegene Kent Beck presenterer i TDD boken sin var som de var for å illustrere prinsippene,” sa Scott. “Det tok meg to år å skjønne at det faktisk er sånn de beste utviklerne praktiserer TDD.”

TDD: Jobb bare med én test om gangen. Gjør du en endring som fører til at to tester må endres så gjør du sansynlig vis for mye på en gang.

TDD: Ikke bryt testene dine. Skal du gjøre en refakturering som krever en endring av testen er det bedre å legge tilrette for å endre testen uten å fjerne den eksisterende implementasjonen. Når alt er på plass kan du endre testen, uten at den behøvde å bli rød på noe som helst tidspunkt. Til slutt kan du fjerne den delen av implementasjonen som støttet den gamle versjonen av testen.

TDD: Husk å alltid skrive hva du ønsker skal eksistere før du implementerer det. Ikke bar når du skriver tester. “Jeg trenger en metode” oppdages ved å kalle metoden (som ikke finnes enda). Først deretter implementeres den.

DDD og IoC: Unngå dependency injection inn i metoder

DDD og IoC: Unngå dependency injection inn i Enteties

DDD: Enteties bør ikke tilby aggregert data (rapportdata) – som f.eks. TotalOfPreviousOrders

DDD: customer.Orders er no no! repository.GetOrders(customer) er bra!

Verktøy: Check in til kildekode-systemet hele tiden! Hver gang du har gjort en endring som fungerer: Get latest, run the tests (nant/rake), and commit changes.

Verktøy: Autohotkey er et interresant verktøy. Scott gav oss et autohotkey script som lar deg bytte ut space med underscore og dermed gjør den enklere å skrive metode_og_klassenavn_som_dette.

Verktøy: Sett opp shortcut for å kjøre en eller flere tester med TestDriver.net og en annen shortcut for å kjøre tester om igjen. Dermed går det raskere å kjøre samme test eller testsett flere ganger mens man jobber i koden.

Scott brukte også endel tid på å snakke om det jeg kjenner som the onion architecture. Han beskrev dette som et grunnleggende Alt.Net pattern som brukes over alt for tiden. Det virker veldig logisk og i trå med alt jeg har lest av Uncle Bob i det siste, og jeg må sette meg grundig inn i dette og finne ut hvordan det vil endre hvordan jeg designer løsningene mine.

En av testene vi skrev..

Her er et eksempel på hva vi produserte i workshopen. Denne spesifikasjonen beviser at en ordre tar høyde for avslag når man ber om prisen. Scott brukte MSpec, Machine Specification, til å skrive testene.

    9 [Subject("Order")]

   10 public class when_discounting_an_order

   11     : OrderContext

   12 {

   13     Establish context = () =>

   14     {

   15         order = order_with_total_of(100m);

   16         order.DiscountPercentage = 10m;

   17         order_total = order.GetTotal();

   18     };

   19 

   20     It should_discount_the_order_by_10_percent = () =>

   21     {

   22         order_total.ShouldEqual(90m);

   23     };

   24 }

Spesifikasjonen er enkel å forstå, den lar seg lese nesten som vanlig engelsk. Når man har en ordre med en verdi av 100 dollar, og man gir 10% avslag, så skal prisen reduseres med 10%, hvilket vil si at totalen skal være 90 dollar.

Detaljene er gravd ned i OrderContext, som spesifikasjonen arver fra:

   26 public class OrderContext

   27 {

   28     public static Order order_with_total_of(decimal amount)

   29     {

   30         var newOrder = new Order(new Customer());

   31         var item = new Item(amount);

   32         newOrder.AddItem(item);

   33         return newOrder;

   34     }

   35 

   36     protected static decimal order_total;

   37     protected static Order order;

   38 }

Jeg har tidligere blogget om hvordan jeg har gått fra å skrive tradisjonelle enhetstester til å skrive GivenWhenThen senarioer med et rammeverk som heter TinyBDD. Bellware gav meg mange flere tips om hvordan slike spesifikasjoner bør konstrueres. Det ironiske er at jeg etter dette har droppet å bruke BDD-rammeverk til fordel for å skrive mine egne DSL’er. TinyBDD, MSpec og lignende skaper mer støy enn nødvendig, og ved å skrive ren og selvdokumenterende kode føler jeg at jeg kan oppnå vel så god effekt uten dem.

Her er et eksempel på hvordan testene jeg skriver for tiden ser ut:

    1 [TestFixture]

    2 public class ConsoleGameIntroViewTest : ConsoleTestingFixture

    3 {

    4     [Test]

    5     public void Should_display_introduction_text()

    6     {

    7         Given_a_game();

    8         With_introduction(This_is_an_introduction);

    9         When_displaying_view();

   10         Output.should_contain(This_is_an_introduction);

   11     }

   12 

   13     [Test]

   14     public void Should_display_title()

   15     {

   16         Given_a_game();

   17         With_title(A_Long_Time_Ago_in_a_Galaxy_Far_Far_Away);

   18         When_displaying_view();

   19         Output.should_contain(A_Long_Time_Ago_in_a_Galaxy_Far_Far_Away);

   20     }

   21 

   22     Action Given_a_game = () => gameLevel = new GameLevel();

   23 

   24     Action<string> With_introduction = (introduction) =>

   25         gameLevel.IntroductionText = introduction;

   26 

   27     Action<string> With_title = (title) =>

   28         gameLevel.Title = title;

   29 

   30     Action When_displaying_view = () =>

   31     {

   32         introView = new ConsoleGameIntroView();

   33         introView.Show(gameLevel);

   34     };

   35 

   36     static GameLevel gameLevel;

   37     static ConsoleGameIntroView introView;

   38     const string This_is_an_introduction = “This is an introduction”;

   39     const string A_Long_Time_Ago_in_a_Galaxy_Far_Far_Away = “A Long Time Ago in a Galaxy Far Far Away”;

   40 }

Dette er en testklasse for et View i et konsoll-basert spill som bruker Model-View-Presenter. Det viktigste kommer først – selve testene. Og de kan leses av hvem som helst, og lar deg fokusere på adferden – implementasjonsdetaljene er støy, så de kommer lengre nede.

Du synes kanskje dette er galskap? Jeg føler denne måten å spesifisere adferd på hjelper meg å skrive bedre kode, og de dokumenterer ganske bra hva systemet skal gjøre. Forvent mer om mine enhetstester i kommende blogposter..

Mer Bellware?

Er du interessert i å høre mer om hva Bellware har å si om TDD/BDD anbefaler jeg at du lytter til Hanselminutes #146: Test Driven Development is Design – The Last Word on TDD.

Og er du mer interessert i hans bråkete side kan du lytte til Alt.Net podcast #17: The State of Alt.Net, hvor han rakker ned på miljøet han har vært med å bygge opp. I så fall bør du også laste ned show nummer 18: Talking with Jeremy Miller about Alt.Net, som forsøker å roe ned situasjonen igjen.

Knagger: , , , , , , ,

Crowdsource testing av software

Crowdsourcing har vært et hot begrep lenge, men det er først nå i det siste at vi virkelig har begynt å se mange bedrifter etablere seg basert på denne modellen.

Prinsippet er å distribuere problemløsing og produksjon; en oppgave kringkastes til stor gruppe ukjente problemløsere – amatører og frivillige, eller gjerne også profesjonelle. Enkeltpersonene i denne gruppen, the crowd, leverer hver sin løsning. Gruppen kan også brukes til å stemme frem de beste løsningene. Disse blir så levert til oppdragsgiveren, the crowdsourcer, og den/de som vant blir kompansert – enten med penger, en pris, kudos, eller annen form for belønning.

Fordelene ved crowdsourcing kan være at problemer kan løses raskt, og til en relativt lav pris pga. stor konkurranse. Man betaler kun for resultater, og som oppdragsgiver kan man utnytte talentet til mange flere personer enn man tradisjonelt sett kan ansette selv.

crowdsourcing value chain

Det finnes som oftest tre ulike parter innenfor crowdsourcing, illustrert i tegningen over, og alle posisjonene i modellen er interessante. Som profesjonell utvikler kan jeg utnytte crowds til å levere verdi for meg på en kostnadseffektiv måte. Som et individ med kunnskaper og fritid kan jeg også bli medlem av et crowd community, og kanskje tjene litt penger på småoppdrag som distribueres til alle medlemmene. Og som en person interessert i inovasjon og nettverksbygging høres det utrolig spennende ut å fasilitere crowdsourcing, og å kunne høste en fortjeneste på å formidle oppdrag.

Den siste tiden har jeg blitt oppmerksom på flere, nystartede firmaer som tilbyr softwaretesting basert på crowdsourcing. Her er noen tjenester man ikke bør overse i disse trange tider:

uTestTestcrowd 1: uTest
uTest gir deg et virtuelt QA team når du trenger det. Nettverket består for tiden av over 16 tusen testere. Du gjør tilgjengelig det som skal testes, f.eks. linken til en testsite, og beskriver gjerne hva som skal testes og eventuelt hvordan. Du betaler kun for bugs som blir funnet (etter at du har kontrollert dem), og du kan også lage en liste med kjente feil, slik at du ikke trenger å betale for ting du vet om på forhånd.

Testerne bygger opp en kvalitets-score, og som oppdragsgiver kan du spesifisere hvilken type testere du ønsker, hvor mange, hvor lenge de skal teste, osv. Startup Success Podcast #22 går i dybden på uTest, og diskuterer også hvordan man bygger et crowd community. Meget insteressant.

UserTestingTestcrowd 2: UserTesting
Dette nettverket har spesialisert seg på usability testing. Dette er en form for testing som ofte er vanskelig å få til selv, og som normalt koster mye tid og penger om det skal gjøres skikkelig. For 29 dollar tilbyr UserTesting en video av en tester som bruker websiten din mens han forteller hva han opplever, samt en skriftelig oppsummering hvor testeren forteller hva han likte, ikke likte, osv.

Last gjerne ned Startup Success Podcast #20, som går i dybden på UserTesting.com.

BrowserMobTestcrowd 3: BrowserMob
Dette er en litt annen form for crowdsourcing. Kanskje er det mer riktig å kalle det cloudsourcing. BrowserMob automatiserer load-testing av websiden din ved hjelp av virtualisering, og viser deg nøyaktig hvordan siden oppfører seg i ulike browsere under høy last. Startup Success Podcast #18 intervjuer Patrick Lightbody som står bak BrowserMob.com, så lytt gjerne på det hvis du er insteressert.

Mange andre typer crowdsourcing..

Sammen med en kollega har jeg forsøkt meg litt på et crowdsourcing-konsept selv også, nemlig The Forecast Exchange, hvor man kan tappe kunnskapen til en gruppe mennesker for å spå om fremtiden. Nå i mai kjører vi andre runde med beta-testing, og tar du en titt på forsiden kan du se hvor stor tro brukerne har bl.a. på hvordan det vil gå med den norske børsen fremover, om Liverpool kommer på andreplass i premiere league, og om Norge vinner melodi grand prix.

Ting som Open Source Software, Wikipedia og StackOverflow er også varianter av crowdsourcing. Uservoice, som vi bruker på Forecast Exchange, er en crowdsource facilitator som gjør det mulig for oss å få tilbakemelding fra brukerne om hva de vil ha i produktet fremover. 99designs er et crowdsourcing community hvor du kan legge opp en konkurranse for grafiske designere, hvor folk konkurrerer om å komme opp med et design som du er villig til å betale for.

Er du interessert i flere slike crowds kan du ta en titt på denne listen fra Open Innovators over plattformer og tjenester. Crowdsourcing i ulike former er fremtiden. Det betyr mindre og mindre hvor man befinner seg i verden, og de som klarer å tappe kunnskap og talent over internett vil komme seirende ut av de komende årene. Dette er et utrolig spennende felt, og jeg gleder meg til å se mange, nye måter å utnytte dette på fremover.

ProgramUtvikling har startet podcast

For en stund tilbake hørte jeg rykter om at ProgramUtvikling as hadde begynt å podcaste, men da jeg forsøkte å gå til kilden så viste det seg å bare være planer. Men nå, noen måneder senere, kom jeg tilfeldigvis over dette igjen, og ble glad for å oppdage at de to første episodene er publisert.

Du finner podcastet på adressen http://www.programutvikling.no/podkast/. Jeg vet ikke om planen er å gjøre det hver gang, men disse første episodene er i alle fall video-podcasts. Intervjueren er Johannes Brodwall, og objektet er ingen ringere enn Robert C. Martin! Jeg håper dette kan være med på å spre ideene og oppfatningene til Bob i Norge - de er utrolig viktige for at vi skal kunne få en god og solid (pun intended) fremtid i softwarebransjen.

Mens jeg har din oppmerksomhet vil jeg også nevne at .NET Rocks! nummer 439 ble sluppet i går, og intervjuobjektet denne gangen er vår egen Jonas Follesø. Check it out!

En karriære innen programmering

hanselminutes

Har du fulgt med så vet du at jeg liker å høre på hva Robert C. Martin har å fortelle. På Hanselmintes #150 (podcast) sa Onkel Bob Martin noe av det samme som jeg tenkte for 2-3 måneder siden, og som fikk meg til å starte .net ninja-initiativet mitt.

“Our industry does a disservice to people because there’s no consistent career ladder. In a lot of cases the career path is: A couple of years slinging code, a couple of years leading a team, and after that I’m a manager. And once you’re a manager you never write code again.

“I think this is dead wrong. I think it’s the wrong approach for our industry all together. If you are really serious about your profession you’re willing to be slinging code for 30 or 40 year.”

Bob påpeker at advokater forblir advokater, og kirurger forblir kirurger. Noen av dem går over til å administrere, men de fleste fortsetter sitt håndtverk. Han har forøvrig mange ganger tidligere sammenlignet det å være programmerer med yrker som advokat og lege. Alle forholder seg til noe uoversiktelig hvor det finnes mange muligheter – alle jobber med å administrere og redusere høy komplekistet.

Jeg så tidlig for meg å gå mer over til prosjektstyring og administrering – det virket liksom helt naturlig. Og ved å ta ansvar har jeg gjennom karriæren fått tildelt mye ansvar og roller som prosjekt- og teamleder. Men det er egentlig ikke det jeg vil. Jeg tar slike ansvar når det er behov for det – når jeg ikke oppfatter at andre tar dem. Men egentlig vil jeg bare bli en super utvikler.

Og jeg er enig med Onkel Bob – nå er det på tide at bransjen verdsetter programmerere som utvikler seg i faget. Det holder ikke at man kaller seg juniorutvikler de første to årene og deretter er man senior. Det er faktisk ganske latterlig. Jeg vet ikke hvordan vi skal få det til, men kanskje en definert karriærestige er det vi trenger. En som ikke innebærer at man må slutte å programmere.

For mange utviklere som ikke bryr seg

Jeff Atwood og Joel Spolsky fikk kraftige reaksjoner da de snakket negativt om TDD, SOLID-prinsippene og Robert C. “Onkel Bob” Martin. For å gjøre det godt igjen fikk Onkel Bob være gjest på Jeff og Joel’s podcast. Og her kom han med noen svært krasse uttalelser selv:

“I think one of the problems we have as an industry is that we got way too many people slinging code. And we should probably reduce the number of people slinging code to the group that cares about it.”

Jeg har stor respekt for Onkel Bob, og synes han sier mye bra. Nå er ikke dette sitatet like hyggelig for alle, men husk da min kommentar om en utviklers karakter: Alle kan bli dyktige utviklere. Det krever ikke noe annet enn interesse for å utvikle sine egne vaner. Er du en av dem Onkel Bob mener ikke burde kode? Ta deg sammen da vel – alle kan klare det!

Lytt til Stack Overflow Podcast #41 om du vil høre mer.

De 12 beste podcastene for programmerere

Som jeg har nevnt et par ganger tidligere hører jeg utrolig mye på audio podcasts. Det førset jeg gjør om morgenen etter dysjen er å ta på meg headsettet, når jeg går tur med hunden hører jeg på podcasts – alt i alt får jeg minimum med meg to timer podcasts hver dag, uten å ofre noe annet.

Jeg synes dette er en glimrende måte å bygge opp og vedlikeholde interessen for programmering, samtidig som man får med seg alt det viktigste som skjer i .net miljøet.

.NET Rocks! Herding Code Polymorphic Podcast Hanselminutes

Jeg har selvsagt en mening om hvilke podcasts som er nyttige å høre på, og om du ikke har lyst til å bruke like mye tid på podcasts som det jeg gjør så presenterer jeg herved min liste over de 12 beste podcastene for .net-utviklere.

No. 12 Software Engineering Radio
Dette er et plattform-uavhengig podcast om systemutvikling med mange ulike verter og førsteklasses gjester. Men for å være ærlig så synes jeg av og til at enkelte av folkene her ikke henger helt med – de snakker om veldig omstendelige utviklingsmetodikker, og intervjuene blir (av og til) rett og slett kjedelige. Mye bra innhold, men jeg gleder meg ikke alltid til å høre på dem.
No. 11 Spaghetti Code Podcast
Spaghetti Code er et podcast produsert av en Microsoft evangelist, og om du synes det er ok så kan det være greit å få med seg dette. Kvaliteten kunne vært bedre, men det er mange, interessante tema og noen gode diskusjoner man kan få med seg her.
No. 10 The Thirsty Developer
Dave Bost og Larry Clarkin er utvikler-evangelister for Microsoft, og de har et nokså bra podcast hvor de stort sett intervjuer ulike personer om “fersk” teknologi fra Microsoft. Om du ikke blir kvalm av M$-evangelisering er dette et ok show som holder deg oppdatert på nye ting.
No. 9 Polymorphic Podcast
Craig Shoemaker er MVP innen ASP.NET, og jobber for Infragistics. Dette er hans podcast som ifølge ham selv handler om softwarearkitektur, men som egentlig først og fremst handler om ASP.NET. Kvaliteten har ikke alltid vært helt på topp, og showene publiseres uregelmessig og noe sjeldent.
No. 8 Pixel8
pixel8 radio er det andre podcastet til Craig Shoemaker fra Infragistics. Dette handler først og fremst om utvikling av brukergrensesnitt og gode brukeropplevelser. Teknologier som WPF og Silverlight blir hyppig nevnt.
No. 7 Agile Toolkit Podcast
Dette er ikke et .net-spesifikt show, men handler om smidige metoder generelt. Mye stoff og intervjuer om prosjektplanlegging og gjennomføring. Det er svært nyttig å få noen impulser rundt dette også, så dette podcastet anbefales.
No. 6 Alt.NET Podcast
Jeg synes Alt.NET bevegelser er viktig, og dette er deres podcast. Her snakker man om ting som Alt.NET’erne er optatt av: DDD, O/RM, Dependency Injection, TDD og lignende. Man ser også på Microsoft med et noe mer nyansert blikk enn mange av de andre podcastene
No. 5 Deep Fried Bytes
Dette er et show i samme stil som .NET Rocks (se mitt førstevalg) – men med en “sørstats-tvist”. Ledet av Keith Elder og Chris Woodruff.
No. 4 Stack Overflow Podcast
Dette er podcastet til Jeff Atwood (Coding Horror) og Joel Spolsky (Joel on Software), som lar deg bli med på en times diskusjon om det de måtte ha på hjertet. Noe av fokuset er på stackoverflow – de plukker blant annet ut sine favorittspørmål derfra hver uke. Podcastet har fått endel oppmerksomhet den siste tiden pga. negative kommentarer knyttet til Robert C. Martin, TDD og kvalitet – Joel og Jeff har endel spesielle meninger, men det er ikke til å stikke under en stol at de også er to kompetente karer som får ting til. Det er ikke alltid jeg er enig med dem, men det er et underholdende og anderledes show som jeg gleder meg til hver uke.
No. 3 Herding Code
Et ukentlig podcast med K. Scott Allen, Kevin Dente, Scott Koon og Jon Galloway (sjekk ut linkene – de har alle veldig spennende blogger). Det virker av og til litt mindre strukturert, og er ikke så underholdende som enkelte av de andre showene – men det er mere ekte. Det er fire utviklere som sitter og snakker om sine egne erfaringer og meninger, og legger ikke bånd på seg når det gjelder å snakke om ting de mener er feil i bransjen vår. Jeg har begynt å like dette podcastet mer og mer etterhvert som jeg har hørt på det.
No.2 Hanselminutes
Scott Hanselman er en genial fyr.., en utviller man kan se opp til. Han jobber for tiden for Microsoft, men er ikke så evangeliserende som mange andre. Hver uke får du et nytt 30 minutters intervju, og han har et meget vidt spekter på podcastene sine.
No.1 .NET Rocks!
“The Internet Audio Talk Show for .NET Developers.” Dette er er det mest kjente podcastet for utviklere, og absolutt min favoritt. Hver uke får du et timelangt show med Carl Franklin, Richard Campbell og en eller flere gjester. Om du bare vil høre på ett podcast så er det dette du må velge.

Podcasts jeg hører på fra tid til annen, men som ikke nådde helt opp: The ASP.NET Podcast, ThoghtWorks – IT matters podcast, Sparkling Client (Silverlight podcast), Boagworld Web Design Podcast og The .NET Preacher Show. Jeg må også nevne det eneste norske .NET podcastet jeg kjenner til, nemlig Einar Ingebrigtsen’s podcast. Bare to episoder sålangt, men jeg håper han fortsetter – det er veldig bra for utviklermiljøet i Norge å ha sitt eget podcast.

Jeg har også nylig begynt å høre på et noe som heter The Startup Success Podcast. Går du med tanker om å starte ditt eget firma så er dette noe for deg. Det inneholder en viss mengde evangelisering, men ikke for mye. Dessuten laster jeg ned endel audio podcasts fra channel 9, bl.a. fant jeg nylig MSDN radio – et svensk Microsoft podcast.

Til slutt må jeg bare få nevne Mondays. Det er ut sykt, sykt podcast fra folkene bak .NET Rocks! - men det har ingenting med programmering å gjøre. Sjekk det ut om du våger.

Notat til meg selv: Podcasts jeg ikke har hørt på enda, men som jeg bør gi en sjangse, inkluderer OpenWeb Podcast og Elegant CodeCast.


Torbjørn: La oss anta to ulike definisjoner av Template Method pattern - de to ytterpunkte...

Lars-Petter: Hei igjen. Siden du inviterer til å ta diskusjonen i bloggen, og har tatt deg t...

Torbjørn: Lars-Petter: Det er én måte å se det på. Det er absolutt fortsatt Template M...

Lars-Petter: Hei. Har du ikke i prinsippet her gått over fra Template Method (arv) til Strat...

Christian Abildsø: I alle fall i C#, så føles dette som kode som blir mer fleksibel men vanskelig...

Torbjørn: Hei Henrik, og takk for tilbudet. Ble oppmerksom på Rasberry Pi for under en uk...

Henrik Sandaker Palm: Ang. større hobby prosjekt. Du er som er en slik rakker på programmering har j...

Øivind Nilsen: Slutt å bruke mobilnummeret mitt som eksempel !...

Bjørn Einar Bjartnes: Jeg har også latt meg fascinere av Clojure, uten at jeg har kommet så veldig l...

Bjørn Einar Bjartnes: Sweet :) Jeg tror egentlig jeg liker det som det er, med musikk. Litt av utford...

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • Template Method del 4: Multippel arv
  • Template Method Intermesso
  • Template Method del 3: Bare funksjoner
  • Template Method del 2: På vei mot funksjonell programmering
  • Kategorier

  • .net ninja (37)
  • Bøker (17)
  • Diverse prosjekter (35)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (77)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (33)
  • NNUG / community (60)
  • O/RM & databaser (10)
  • Off topic (116)
  • OO-design/clean code (30)
  • Podcasts (14)
  • Polyglot (77)
  • Ruby (27)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (20)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (32)
  • WPF (9)
  • WTF (12)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta