Paremmaksi ohjelmoijaksi

Coding Horror kirjoittaa, kuinka tulla paremmaksi ohjelmoijaksi ohjelmoimatta ja esittelee ajatuksen, että keskinkertainen ohjelmoija ei kokemuksen lisääntyessä muunnu taianomaisesti hyväksi ohjelmoijaksi. Hyvät ohjelmoijat tuntuvat omaavan luonnollisen kyvyn ohjelmointiin jo alusta alkaen. Asia ei tietenkään ole aivan näin yksiselitteistä ja esimerkiksi harjoittelemalla päästään parempiin tuloksiin.

Tiedetään, että on leveä kuilu ohjelmointia osaavien ja sitä osaamattomien välillä, mutta sama pätee myös ihmisiin, jotka osaavat ohjelmoida; hyvien ja keskinkertaisen ohjelmistokehittäjien välillä on suuri ero.

Jeff Atwood, Coding Horror -blogin kirjoittaja, lainaa Programmers at Work -teosta, jossa haastatellaan kuuluisia ohjelmoijia vuoden 1986 tienoilla.

Does accumulating experience through the years necessarily make programming easier?

Bill Gates: No. I think after the first three or four years, it’s pretty cast in concrete whether you’re a good programmer or not. After a few more years, you may know more about managing large projects and personalities, but after three or four years, it’s clear what you’re going to be. There’s no one at Microsoft who was just kind of mediocre for a couple of years, and then just out of the blue started optimizing everything in sight. I can talk to somebody about a program that he’s written and know right away whether he’s really a good programmer.

Jeff Atwood puoltaa Bill Gatesin ajatuksia ohjelmointitaitojen kehittymisestä ja on itsekin todennut, että hyvä ohjelmointitaito joko omataan, tai sitten sitä ei ole. Mikä sitten tekee ohjelmoijasta paremman ohjelmoijan, jos ei kokemus? Onko taitojen kehittäminen mahdotonta?

Coding Horror -blogin kirjoituksen mukaan paremmaksi ohjelmoijaksi kehitytään omaamalla ja kehittämällä intohimo kaikkeen muuhun ohjelmoinnin ympärillä. Et voi kehittyä paremmaksi ohjelmoijaksi vain pelkästään ohjelmoimalla, vaan voit vain täydentää ja parantaa jo olemassa olevaa ohjelmointitaitoasi laajentamalla sitä. Paremmaksi ohjelmoijaksi kehittymiseen tarvitaan oppimista ja kiinnostusta käyttäjistä, alasta ja bisneksestä. Mitä enemmän olet kiinnostunut eri asioista, sitä parempaa tulee työsi olemaan.

You’ve been haacked -blogi vastaa Coding Horrorin kirjoitukseen otsikolla ”Paremmaksi ohjelmoijaksi ohjelmoimalla paremmin”. Blogin kirjoittaja Phil Haack on samaa mieltä Jeff Atwoodin kanssa, että suurten kuvioiden ymmärtäminen on tärkeää etenemisessä hyväksi ohjelmistokehittäjäksi, etenkin jos olet ohjelmointitaidoissa 99 prosentin tasolla. Kuitenkaan useimmat ohjelmistokehittäjät eivät ole 99% tai edes 90% tasolla ja täten pystyvät kehittämään ohjelmointitaitojaan edellä mainittujen tärkeiden taitojen lisäksi.

Phil Haack ei tosin ole vakuuttunut, että ohjelmointitaitojen kanssa synnytään, sillä väitteen tueksi ei ole empiirisiä todisteita. Voiko ohjelmoija siis nousta 50% tasolta 90% tasolle? Haack kirjoittaakin, että viimeaikaisten tutkimusten mukaan uskomus ”synnynnäisiin lahjoihin” on vailla kovia todisteita väitteen tukemiseksi. Scientific American artikkeli ”The Expert Mind” toisaalta puoltaa Atwoodin ajatusta, että henkilön kokemus ei vaikuta suorituskykyyn, mutta lisää yhtälöön suunnitelmallisen opiskelun ja harjoittelemisen.

Suunnitelmallisella opiskelulla ja harjoittelulla ohjelmoija voi nostaa itsensä keskinkertaisuudesta hyväksi ohjelmoijaksi. Kehittymisessä ei ole kyse ohjelmoinnin määrästä, vaan ohjelmoimisesta paremmin. Mitä enemmän ja paremmin, sen parempi. Useimmilla ohjelmoijilla on vielä tilaa kehittää ohjelmointikykyjään ja ohjelmointiin liittyviä taitojaan. Ohjelmoijan osaamat oheistaidot erottavat hänet toisista ohjelmoijista ja lisäävät ohjelmoijan arvoa enemmän, kuin kehitys ohjelmointitaidoissa. Ohjelmointitaidot eivät rakennu pelkästään syntaksin, kontrollirakenteiden tai muiden teknisten ominaisuuksien osaamisesta.

Ei liene yllätys kenellekään, että harjoittelulla ja suunnitelmallisuudella kehitytään paremmaksi halutussa taidossa. Oli kyse sitten hyvää fyysistä kuntoa vaativista urheilulajeista, älykkyyttä vaativista peleistä, loogista päättelyä sisältävistä tehtävistä tai tässä tapauksessa ohjelmoinnista. Sisäinen lahjakkuus tai taipumus tiettyihin ominaisuuksiin auttaa tietylle tasolle pääsemistä, eikä kaikki välttämättä saavuta harjoittelemallakaan korkeaa tasoa, kuten urheilija suomen- tai maailmanmestaruutta. Hyväksi kehitytään kuitenkin vain harjoittelemalla, oli lahjakkuutta tai ei.

Toisaalta Atwoodin ja Haackin kirjoitusten kommenteissa heräteltiin kysymystä, miten määritellä hyvä ohjelmoija ja mikä tekee toisista ohjelmoijista parempia kuin toiset. Miten mitata koodia ja mihin verrata lopputulosta? Koodi ei ole samalla tavalla fyysinen saavutus, kuten urheilutulokset, joita voisi helposti vertailla. Tietenkin on erilaisia mittareita ja keinoja, joita koodeihin voi soveltaa.

On kuitenkin selvää, että jos ohjelmoimme enemmän, paremmin ja omaamme intohimon ohjelmointiin liittyviin asioihin, kehitymme kohti parempaa ohjelmoijaa.

Osta kolme O’Reilly -kirjaa, maksa kaksi

All about Linux kirjoittaa O’Reillyn ”Osta kolme, maksa kaksi” -kirjatarjouksesta. Hyviä kirjoja, joita olen katsellut luettavaksi saisi nyt suhteellisen edullisesti. Harmillista kyllä, että Suomeen tilattaessa kolmen kirjan toimituskulut ovat 43,14 dollaria, joten tarjouksesta ei juurikaan ole hyötyä.

Katselin vertailuhintoja Dataclubista ja aika hyvin dollari-euro -hinnat menivät yhteen. Esimerkiksi Linux Server Hacks maksoi Dataclubissa 29,9e ja O’Reilly:ssä 24,95 dollaria ja kirjan toinen osa 32,80 euroa ja 29,95 dollaria. Programming Python kustansi vastaavasti 65,5 euroa ja 59,99 dollaria ja Programming .NET Windows Applications 46,9 euroa ja 49,95 dollaria. Vertailukirjat on valittu mielivaltaisesti, vaikkakin kyseiset aiheet ovat kiinnostavia.

Onneksi aina voi luottaa kirjastojen tarjontaan tai ainakin Googleen ja Internetin tietovarastoon, joten kirjojen ostamisen sijasta voi tietoa lainata tai etsiä. Vielä kun löytäisi aikaa kaikelle mielenkiintoiselle tekemiselle ja ehtisi välissä vielä urheilemaankin…

Päivitys, klo 20:46:
Sain sähköpostiin kommentin, jossa kehotettiin tutustumaan ruotsalaiseen AdLibris -kirjakauppaan, jonka hinnat näyttävän olevan erittäin kilpailukykyiset Dataclubiin verrattuna. Vertailtujen kirjojen kohdalla AdLibris kustantaisi 105,8e + 2,90e toimitus ja Dataclub vastaavasti 175,1e + 6e. Kohtalaisen suuri hintaero ja AdLibriksen hinnoilla voisi jopa harkita tilaavansa muutaman opuksen.

Mainittakoon, että en halua mainostaa erityisesti mitään kirjakauppaa, kuten esimerkiksi Dataclubia, jonka kanssa on ollut enemmän ja vähemmän ongelmia. Kun kirjatilausvastaavana killassa toimiessani tilasin pariin otteeseen lähemmäs kymmenen kirjaa, ei Dataclub saanut tilausta menemään kerralla (hyvä jos toisella) oikein ja sama tilanne tuntuu olevan vieläkin. Dataclub vain tuli ensimmäisenä mieleen, kun ajattelin kirjakauppoja, joissa valikoima on ”kattava”.

Kirjat: Dune: House Harkonnen

Brian Herbert ja Kevin J. Anderson jatkavat Predule to Dune -sarjaansa Dune: House Harkonnen -teoksella. Frank Herbertin Dune -sarjaan perustuva Predule to Dune jatkaa toisessakin osassaan Dyynin henkeä ja tarinaa ja juoni etenee sujuvasti. Sarjan toinen teos jatkaa siitä, mihin ensimmäinen osa jäi: juonia, yllättäviä käänteitä ja runsaasti tapahtumia.

Tyyliltään teos on sarjan henkeen uskollinen, mutta sortuu, kuten useat moniosaiset kirjasarjat, edellisen osan tapahtumien ajoittaiseen kertaukseen, joka ainakin itseäni ärsyttää. Jos kirjat heti niiden ilmestyessä eli noin vuoden välein, voi pieni muistinvirkistys olla paikallaan, mutta näin peräkkäin luettuina hieman turhaa. Kokonaisuutena teos on mukavaa luettavaa ja tarinan mielenkiinto pysyy yllä loppuun asti.

Dune: House Harkonnen teoksessa on englanninkielisenä pokkaripainoksena 626 sivua New English Library:n julkaisemana (ISBN: 0-340-75178-9).

Sammuta Linux virtanapista

Tietokoneen sammuttaminen on yleensä helppoa, valikoista valitaan ”sammuta” ja kone sammuu nätisti. Hieman vaikeampaa on tietokoneen sammuttaminen, jos koneessa ei ole näyttöä kiinni, mutta usein tämäkin ongelma ratkeaa ottamalla etäyhteys. Aina tämäkään ei ole mahdollista, joten tarvitaan jotain muuta, kuten ACPI ja sen avulla tehtävät tapahtumat.

Gentoo Wiki:ssä on asiasta hyvät ohjeet, jossa koneen virtanappi laitetaan tekemään tietty tapahtuma, jonka acpid -daemon prosessoi. Tai oikeastaan acpid -daemon tarkkailee, jos virtanappia painetaan ja suorittaa tämän jälkeen halutun skriptin.

Yksinkertaisuudessaan virtanapin virittämiseen tarvitaan seuraavat asiat:

  1. Laitteisto, joka tukee ACPI virranhallintaa
  2. Kerneliin on käännetty tuki ACPI:lle
  3. Virtanappi on rekisteröity ACPI tapahtumaksi
  4. acpid kuuntelee ACPI tapahtumia
  5. Skripti virtanapin tapahtuman käsittelyyn

Kohdat 1, 2 ja 4 ovat triviaaleja, joten en niitä tähän (itselleni muistiin) kirjoita.

Virtanapin rekisteröiminen tapahtuu seuraavasti:

~ # cat >> /etc/acpi/events/default <<EOT

# handle the power button press
event=button[ /]power
action=/etc/acpi/onButtonPress-Power.sh
EOT

Ja sammutusskripti:

~ #cat > /etc/acpi/onButtonPress-Power.sh <<EOT
#!/bin/sh
# /etc/acpi/onButtonPress-Power.sh
# Shutdown when the power button is pressed

logger ”Power button pressed — shutting system down”
/sbin/shutdown -h now
EOT

Lopuksi skriptille annetaan suoritusoikeudet chmod 750 /etc/acpi/onButtonPress-Power.sh ja käynnistetään acpid -daemon uudestaan.

Nyt tietokoneen pitäisi sammua hallitusti virtanapista painamalla. Helppoa ja yksinkertaista. Testattu Gentoo Linuxissa ja toimivuudesta muissa Linux distribuutioissa ei tietoa, joten tarvittaessa sovella.

Pong-kello

Jos normaalit kellot eivät innosta ja vaikuttavat tylsiltä, on Buro Vormkrijgers suunnitellut kellon, joka toimii Atarin Pong-pelin tapaan. Kooltaan 180 x 120 x 32mm (l,k,s), 500 grammaa painava LCD-näytöllinen kello pelaa satunnaisesti pingpong -peliä. Vasen pelaaja voittaa joka tunti ja vastaavasti oikeanpuoleinen pelaaja voittaa joka minuutti. Keskiyöllä peli on ohitse. Kellona toimimisen lisäksi peliä pystyy pelaamaan kelloa vastaan.

Aivan mahtava kelloidea, mutta valitettavasti ilmeisesti vuosi sitten 199 eurolla myyntiin tullut kello on loppuunmyyty. Ei mikään ihme, sillä erikoiset ideat myyvät aina nopeasti loppuun. Kyllä tuollaisesta kellosta olisi hauska seurata ajan kulkua.

Pong Pong

(via Coding Horror)

Cable Open! -viikonloppu ja Digi-tv-viikko

Taloussanomat uutisoi Kaapelitelevisioliiton, paikallisten kaapeliyhtiöiden ja Kopiosto ja Teosto tekijänoikeusjärjestöjen järjestämästä Cable Open! -viikonlopputempauksesta. Perjantai-illasta maanantaiaamuun, 9.2. – 12.2.2007, näkyvät maksu-tv-kanavat kaapeliverkossa digisovittimen avulla veloituksetta. Kanavatarjonta vaihtelee alueittain. Cable Open! -ilmaisviikonloppu aloittaa liikenne- ja viestintäministeriön organisoiman valtakunnallisen Digi-tv-viikon, jota vietetään 12.–18. helmikuuta.

Hieman omituista kyllä, että vaikka olen lukenut paikallislehteä ja seurannut Internetin uutissivustoja, ei Digi-tv-viikko ole tullut eteen muutamaa blogia, Afterdawnin uutista ja IRC:ssä tullutta Taloussanomien linkkiä lukuunottamatta. Ilmeisesti digi-tv-viikkoa ei ole suuremmin mainostettu tai sitten seuraan vääriä medioita ja luen valikoiden. Pah, joku digi-tv-viikko, tv:stä muutenkaan tule juurikaan mitään kiinnostavaa.

Cable Open! -viikonlopun suhteen ihmettelen kyllä mitä hyötyä on järjestää tuollaista katsojia kiinnostavaa ”tarjousta”, mainostamatta sitä riittävästi. Hieman hukkaan menee. Omassa (lue vanhempien) digi-boxissa maksu-tv-kanavat on piilotettu kanavalistasta, eikä juuri tulisikaan mieleen selata salatuiksi tiedettyjä kanavia.

Perjantaiyön sekalaiset

Fan Tent -sivustolla on kerätty YouTube videoita, joilla soitetaan Super Marion tunnus eri soittimilla, kuten balalaikalla, käsin, hanurilla, pianolla, kitarasoittimilla ja kuoron laulamana. Tunnus kuoron esittämänä on huvittava ja esityksen loppupuolella kuullaan Zeldaakin.

BassicTech News Blog -sivustolla on esillä video, jossa esitellään hieman erikoisemman käyttöliittymän toimintaa. Perceptive Pixel on rakentanut, ainakin videolla, toimivan ”Minority Report” -tyylisen, kosketuksella ja eleillä toimivan käyttöliittymän. Näyttää aika ovelalta ja käytännöllisyydestä voidaan olla montaa mieltä. Samantyylisiä konsepteja on ollut esillä aikaisemminkin. Pitkänpuoleinen artikkeli käyttöliittymästä ja sen kehittäjästä löytyy Fast Company -lehden verkko-osiosta ”Can’t Touch This” -otsikolla.

Packet Garden -ohjelma kerää informaatiota Internetin käytöstäsi ja kasvattaa pallon muotoista maailmaa lähettämiesi ja vastaanottamiesi pakettien perusteella. Lataaminen muodostaa laaksoja, eri protokollien paketit muodostavat erilaisia kasveja ja kaikki sijoitetaan pallolle riippuen mistä päin maailmaa data tuli tai minne se meni. Jokainen uusi päivä Internetissä voi muodostaa uuden yksityisen maailmasi, jota voit myöhemmin tarkastella. Packet Garden ohjelmisto on saatavilla Windows, Linux ja Mac OS X käyttöjärjestelmille.

Onko 17 ”eniten satunnainen” luku? Pistää miettimään.