Lars Wirzenius <liw@iki.fi> wrote:



Samankaltaiset tiedostot
Ohjelmoijan hengissäpysymistaidot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

1. Liikkuvat määreet

anna minun kertoa let me tell you

ASCII-taidetta. Intro: Python

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Choose Finland-Helsinki Valitse Finland-Helsinki

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Information on preparing Presentation

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Harjoitus 3 (viikko 39)

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Ohjelmointi 1 / syksy /20: IDE

Test-Driven Development

Racket ohjelmointia II. Tiina Partanen 2015

Käyttöliittymät II. Käyttöliittymät I Kertaus peruskurssilta. Keskeisin kälikurssilla opittu asia?

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Opiskelijat valtaan! TOPIC MASTER menetelmä lukion englannin opetuksessa. Tuija Kae, englannin kielen lehtori Sotungin lukio ja etälukio

Test-Driven Development

Suunnittelumallit (design patterns)

4. Lausekielinen ohjelmointi 4.1

Tietorakenteet ja algoritmit

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

1. Olio-ohjelmointi 1.1

Uusi Ajatus Löytyy Luonnosta 4 (käsikirja) (Finnish Edition)

Harjoitus 5 (viikko 41)

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

58160 Ohjelmoinnin harjoitustyö

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

PAINEILMALETKUKELA-AUTOMAATTI AUTOMATIC AIR HOSE REEL

Kylänetti projektin sivustojen käyttöohjeita Dokumentin versio 2.10 Historia : 1.0, 1.2, 1.6 Tero Liljamo / Deserthouse, päivitetty 25.8.

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Koodaamme uutta todellisuutta FM Maarit Savolainen

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

COTOOL dokumentaatio SEPA: Refaktorointi

Information on Finnish Language Courses Spring Semester 2018 Päivi Paukku & Jenni Laine Centre for Language and Communication Studies

Information on Finnish Language Courses Spring Semester 2017 Jenni Laine

You can check above like this: Start->Control Panel->Programs->find if Microsoft Lync or Microsoft Lync Attendeed is listed

11/20: Konepelti auki

F-SECURE TOTAL. Pysy turvassa verkossa. Suojaa yksityisyytesi. Tietoturva ja VPN kaikille laitteille. f-secure.com/total

Työkalut ohjelmistokehityksen tukena

LYTH-CONS CONSISTENCY TRANSMITTER

Ohjelmoinnin perusteet Y Python

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Information on Finnish Courses Autumn Semester 2017 Jenni Laine & Päivi Paukku Centre for Language and Communication Studies

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Ohjelmoinnin perusteet, syksy 2006

LANSEERAUS LÄHESTYY AIKATAULU OMINAISUUDET. Sähköinen jäsenkortti. Yksinkertainen tapa lähettää viestejä jäsenille

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Johdatus rakenteisiin dokumentteihin

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Nuku hyvin, pieni susi -????????????,?????????????????. Kaksikielinen satukirja (suomi - venäjä) ( (Finnish Edition)

1. Omat operaatiot 1.1

C++11 seminaari, kevät Johannes Koskinen

Rekisteröiminen - FAQ

C++ Ohjelmoijan käsikirja. Johdanto

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Expression of interest

Ohjelmointi 2 / 2010 Välikoe / 26.3

Vallataan varainhankinta. Salla Saarinen

Ohjelmoinnin peruskurssien laaja oppimäärä

Harjoitustyön testaus. Juha Taina

Tietorakenteet (syksy 2013)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Miksi Suomi on Suomi (Finnish Edition)

Automaattinen yksikkötestaus

Makrojen mystinen maailma lyhyt oppimäärä

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

M. Merikanto 2012 XML. Merkkauskieli, osa 2

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Curriculum. Gym card

Co-Design Yhteissuunnittelu

Web Service torilla tavataan!

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

TIETEEN PÄIVÄT OULUSSA

Uusi Ajatus Löytyy Luonnosta 3 (Finnish Edition)

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

TIE Principles of Programming Languages CEYLON

Harjoitus 2 (viikko 45)

Network to Get Work. Tehtäviä opiskelijoille Assignments for students.

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Alueellinen yhteistoiminta

MISSÄ OLET TÖISSÄ? MINKÄLAINEN ON SINUN TAVALLINEN TYÖPÄIVÄ?

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Ohjelmoinnin perusteet Y Python

9. Periytyminen Javassa 9.1

Capacity Utilization

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Ajettavat luokat: SM: S1 (25 aika-ajon nopeinta)

Transkriptio:

Lars Wirzenius <liw@iki.fi> wrote: Kaikki, mitä ikinä tarvitsee tietää ohjelmoinnista, lukuunottamatta joitakin lähes yhdentekeviä yksityiskohtia ohjelmointikielten syntaksista ja semantiikasta, tietokoneiden toimintaperiaatteista, ynnä muista sellaisista turhuuksista. 21.9.2005

Minkälainen on hyvä ohjelma? Mitä tarkoittaa ohjelman laatu?

Ohjelma on hyvälaatuinen, jos se... tekee mitä sen on tarkoituskin tehdä ei tee ylimääräisiä asioita kestää virhetilanteita järkevästi on helppo käyttää, alussa ja pidemmän päälle on vaivaton paketoida, asentaa, päivittää, poistaa ei ole kohtuuttoman virheellinen ja virheet on helppo korjata on riittävän tehokas

Laatu = ei yllätyksiä (paitsi välillä joskus positiivisesti)

Minkälainen on hyvä ohjelmoija?

Hyvä ohjelmoija... osaa perusasiat: algoritmit, tietorakenteet, analyysin; paradigmat (imperatiivinen, olio, funktionaalinen); suunnittelu ja toteutusmenetelmät (top down, bottom up, vesiputous ja silmukkamallit, XP/Agile, TDD, UML, refaktorointi, design patterns); tarpeelliset kielet (C, C++, C#, Java, Lisp, Perl, Python, PHP, HTML, XML/XSLT/DTD), työkalut (SQL, Eclipse, CVS, SVN, Emacs, Word, Excel) ja protokollat (HTTP, FTP, SMTP, TCP/IP, SMPP, XMLRPC/SOAP, RFC2822/MIME); tietoturvan

Ei pidä uskoa kaikkea roskaa... Asenne ratkaisee! pitää ohjelmoinnista (harrasteohjelmoi!), oppii mielellään uutta, näkee isot kuviot eikä vain nippeleitä Tiedot ja taidot ovat hyödyllisiä, välttämättömiä, mutta eivät ratkaisevia Mitä ei osata, se opitaan jos ei haluta oppia, on asennevika ja iso ongelma

Kyllä tietotaitoakin tarvitaan... Ohjelmointi = maailmankaikkeuden luomista pelkällä ajatuksen voimalla Tärkeää osata: ajattelun tehostajat opi uusia tapoja ajatella esimerkki: Lisp räjäyttää tajunnan CV:ssä on hyvä olla oleelliset lyhenteet, jotta HR osasto osaa tunnistaa hyväksi tyypiksi tietysti pitää osata se, mitä työssään tarvitsee

Miten kehittyä? Kirjoita ohjelmia, myös harrastuksena erilaisia ohjelmia Ylläpidä muiden koodia (tai edes lue) Lue ylipäätään, paljon, monenlaista alan kirjallisuutta Keskustele, väittele, polemisoi, ajattele Kirjoita ohjelmoinnista, pidä esitelmiä

Miten hyviä ohjelmia tehdään? P.t.o.t.m. on ratkaisu!

P.t.o.t.m. = Parhaiten toimiva ohjelmistotuotantomenetelmä Palkataan hyviä ohjelmoijia, jotka tulevat hyvin toimeen keskenään Kerrotaan mitä ohjelman tarvitsee tehdä, riittävällä tarkkuudella Annetaan riittävät resurssit, tarpeeksi aikaa, pyydettäessä palautetta ja TYÖRAUHA

P.t.o.t.m. tiivistettynä Hyviä tyyppejä Työrauha

Tuottavuus = hack mode "Flow" syvän keskittymisen tila vaatii ainakin 15 min työrauhaa alkaakseen katkeaa helposti häiriöihin Ilmankin pärjää, jos on moninkertaisesti aikaa mutta se ei ole ollenkaan yhtä hauskaa hack mode = nirvana

Axes flash, broadswords swing, Shining armour's piercing ring Horses run with polished shield Fight those bastards 'till they yield Midnight mare and blood red roan Fight to keep this land your own Sound the horn and call the cry How many of them can we make die? Follow orders as you're told Make their yellow blood run cold Fight until you die and drop A force like ours is hard to stop Close your mind to stress and pain, Fight 'till you're no longer sane Let not one damn cur pass by, How many of them can we make die? March of Cambreadth (Heather Alexander) Guard your women and children well, Send these bastards back to hell We'll teach them the ways of war, They won't come here any more Use your shield and use your head, Fight 'till every one is dead Raise the flag up to the sky, How many of them can we make die? Dawn has broke, the time has come Move your feet to the marching drum We'll win the war and pay the toll We'll fight as one in heart and soul

Hyviä tapoja välttää hack mode Puhelimet Kokoukset, kysymykset, kahvitauot, keskeytykset meteli ylipäätään karsinat ("avokonttori") Meili, IRC Kiire

Ei makiaa mahan täydeltä Hack mode ei pelasta optimistista aikataulua ei toimi: päivällä sekoillaan miten sattuu, illalla ja yöllä koodataan kovasti tällä tavalla pääsee sairalaan... Normaalit työpäivät, mutta ainakin puolikkaita päiviä pelkästään yhteen asiaan keskittyen ei vain koodausta: kokouksetkin voivat päästä hack modeen, kimpassa se on vain vaikeampaa, kaikkien pitää olla mukana

Tuottavuus = oikeat työkalut Ammattilainen tunnetaan työkaluistaan oikea väline kuhunkin hommaan Väärä työkalu => missä on ammattitaito? copypaste ohjelmointi, toistuvat bugit Jos ei ole hyvää valmista, tehdään itse "Never underestimate the power of a small tactical Lisp interpreter"

Ohjelmointi = puutarhanhoitoa Hyvät ohjelmat kasvatetaan pienestä surkeasta siemenestä, vähän kerrallaan. Täydellisyys on tavoite, ei alkutila. Photo by David Monniaux

Hyvän tiimin tunnusmerkki nro 1 Heistä on HAUSKAA tehdä töitä nimenomaan tätä projektia nimenomaan yhdessä työt ovat hauskoja, ei kortinpeluu kahvitauoilla Jos hauskuus katoaa... Miten saada aikaan hyvä tiimi?

Joitakin väitteitä ohjelmakoodin kirjoittamisesta

KISS: Yksinkertainen koodi on parasta Ei tarvitse kommentoida tai dokumentoida jos koodi tarvitsee kommentteja, jotain on väärin Helpompi saada toimimaan Helpompi korjata Helpompi muuttaa, kun vaatimukset muuttuvat Myönnetään: helppo = tylsää kikkailu on kivaa mutta vaikeat bugit ovat pahempia kuin pieni tylsyys

Testattavuus todella tarpeellista Mitä helpompi ohjelman eri osat, isot ja pienet, on testata erillään, sen paremmin se tulee testattua metodi, olio, oliojoukko, alijärjestelmä, koko ohjelma... yksinkertaisuus auttaa funktionaalisesta ohjelmoinnista hyvä ottaa vaikutteita Helposti testattava ohjelma myös yleensä helposti debugattava

Koodia, ei kommentteja Jos asian voi ilmaista koodilla, tee niin /* Length must be at least 2. */ assert(length >= 2); Koodi on tarkistettavissa automaattisesti

Dataa, ei koodia Ei näin: if (name == "Lars") id = ID_LARS; else if (name == "Lauri") id == ID_LAURI;... Vaan näin: struct { char *name; int id; } tab[] = { { "Lars", ID_LARS }, { "Lauri", ID_LAURI },... };