Politik

Startupkulturen i Silicon Valley: behöver man kunna datavetenskap för att bli programmerare?

Donald Knuths ikoniska bok om datavetenskap.

Startupkulturen här i Silicon Valley är befolkad av tiotusentals unga programmerare, ofta i tidiga tjugoårsåldern, som startar IT-företag på löpande band.

Inte bara det, efter mellan 18 månader och två år så är det inte helt ovanligt att deras företag har fått ett par tre miljoner dollar i riskkapital och att några av dom har kunnat sälja sina företag till etablerade IT-företag för några miljoner dollar. Ibland kan det t.om. röra sig om dussintals till hundratals miljoner och i fallet Instagram, var siffran en helt otrolig en miljard dollar.

Kan alla dom här programmerarna verkligen ha en gedigen utbildning i datavetenskap från USA:s stora universitet, och om inte, vilken bakgrund har dom verkligen?

Och hur bra kan man vara på att programmera om man inte har läst datavetenskap?

Datavetenskap, som vi kan se från den här kursen på MIT, är nära besläktad med matematik och logik, med den brittiska logikern och matematikern Alan Turing som grundare.,

Datavetenskap handlar mycket om datastrukturer och algoritmer, alltså om hur man strukturerar och manipulerar data så effektivt som möjligt i s.k. Turing-maskiner, som är en abstrakt definition av vad alla datorer idag är.

Man kan med viss rätt säga att vad datorvetenskap handlar om är att överkomma de begränsningar som finns i alla datorer, oberoende av hur stora de är. Begränsningar i tid och rum.

Den mest inflytelserika boken om datavetenskap är Stanford-professorn Donald Knuths
The Art of Computer Programming som rekommenderas för alla som är intresserade av ämnet.

Här är en innehållsförteckning som ger en bra översikt över de viktigaste områdena inom datavetenskapen:

  1. Chapter 1 – Basic concepts (volume 1)
  2. Chapter 2 – Information structures (volume 1)
  3. Chapter 3 – Random numbers (volume 2)
  4. Chapter 4 – Arithmetic (volume 2)
  5. Chapter 5 – Sorting (volume 3)
  6. Chapter 6 – Searching (volume 3)
  7. Chapter 7 – Combinatorial searching (volume 4)
  8. Chapter 8 – Recursion (volume 4)
  9. Chapter 9 – Lexical scanning (also includes string search and data compression) (volume 5)
  10. Chapter 10 – Parsing techniques (volume 5)

När jag själv började programmera så var det på en Apple IIE och jag skrev en sorteringsapp som sorterade titlarna på alla de tidningar och tidskrifter som vi prenumererade på, på det förlag jag jobbade på. Så att vi kunde hålla koll på när dom kom in och när vi skulle behöva förnya våra prenumerationer.

Jag körde ett test på 30 tidningar och det fungerade felfritt. Jag visade chefen som blev imponerad av vad man kunde göra med en dator. Min framtid var säkrad.

Nästa dag körde jag testet med 40 tidningar och fick ett “out of memory”-fel, vilket var min introduktion till datavetenskap och mitt slut som programmerare på det där förlaget.

Precis som en schackspelare bär på hundratals gambit i huvudet så har datavetare hundratals algoritmer och s.k. designmönster i huvudet så att de t.ex. vet vilka sorteringsalgoritmer som passar bäst för vilken slags data.

Datavetenskap kan vara en fråga om liv och död. När Irans Gröna Rörelse kämpade mot mullorna så skapade Austin Heap, en idealistisk programmerare från San Francisco, Haystack, en proxyserver som kunde användas av demokratikämparna inne i Iran för att kringgå censuren. Tyvärr visade det sig att Heap inte behärskade de mycket komplicerade datasäkerhetsalgoritmerna han använde, och han fick dra tillbaks Haystack, som hotade säkerheten på de aktivister som kunde komma att använda den.

Vi har samma situation i Sverige där FRA i samarbete med amerikanska NSA använder avancerade dekrypteringsalgoritmer för att läsa alla svenskars elektroniska meddelanden.

En modern variant av Haystack-teknologin är Tor, som bl.a. den Svenska regeringen är med och finansierar.

Det är lätt att lära sig programmera små och medelstora appar i Ruby och Ruby on Rails eller Python och Django för hundra och t.o.m. tusen användare. Det är en helt annan sak att sen expandera dessa appar så att de kan hantera tiotusen eller hundratusen användare – eller ännu fler.

Det är där som datavetenskapen kommer in. Har man rätt sorteringsalgoritmer så att det inte tar en timme att sortera vad som tidigare tog en sekund? Har man rätt slags cache så att ens webbserver inte står och stampar när man helt i onödan måste ladda om varje webbsida för varje användare? Har man rätt Databasnormalisering så att databasen kan expandera till miljoner användare, och har man rätt arkitektur så att man har stöd f.r s.k. failover?

Allt handlar om begränsade resurser, alltför många data och alltför många användare som vill komma åt datan nu, på en gång, utan att behöva vänta.

Datavetenskap är ett synnerligen fascinerande ämne, som man alltså inte behöver lära sig för att börja programmera. Vissa programmerare lär sig aldrig datavetenskap, precis som jag misstänker att många komponister inte nödvändigtvis är speciellt bevandrade i musiklära.

Det kan gå bra ändå.

Men för den som aspirerar på att jobba som programmerare på Google, Apple, Facebook eller Twitter så gäller det att kunna sina algoritmer. Det är nämligen såna som jobbintervjuerna handlar om.

Vilka programmeringsspråk man bör lära sig är idag rätt enkelt. Den som antingen börjar med Ruby och Ruby on Rails eller med Python och Django har knappast gjort fel. Den som vill fokusera på utvecklingen av mobila appar börjar antingen med Apples Objective-C eller med Java för Android. Sen lär sig de flesta programmerare efter några år mer än ett språk.

Den historiska MOOC-rörelsen där Stanford och andra universitet bjuder in studenter från hela världen till gratiskurser på nätet handlar mycket om just datavetenskap, som Udacitys datavetenskapliga kurser.

Pressklipp:
Kanske Apple köper oss,Plattans år,“Java ett hot mot Android”,Ubuntus molntjänst nu även för Mac

[tags] Dataprogrammering, Datavetenskap, Startupföretag och Datavetenskap, Datavetenskap Silicon Valley[/tags]