SlideShare ist ein Scribd-Unternehmen logo
1 von 53
Mitä on ohjelmointi?
 Määrämuotoisten komentojen antamista tietyssä järjestyksessä toteutettaviksi (mukana on myös
pöytätestaus, jossa ihminen suorittaa komentoja paperia tai muuta apuvälinettä käyttäen)
 Koulusta tutut algoritmit: yhteenlasku, kertolasku ja jakokulma
 Tietokone suorittaa tietokoneohjelmia suorittimessa (CPU), ohjelma tulee RAM-muistista, käytetään apuna
lisälaitteita useimmiten (näppäimistö, hiiri, modeemi ja näyttö), joiden kanssa suoritin kommunikoi
 Tietokoneen käyttöjärjestelmä on ohjelma
 Ilman käyttöjärjestelmää ohjelmat täytyisi asettaa muistiin binäärisinä koodeina esimerkiksi
etupaneelin kautta (Seymour Cray syötti CDC:n supertietokoneen CDC 7600 buuttilataajan
konekoodin etupaneelin kautta muistin alkuun)
 Tyypillisiä tietokoneohjelmia: Microsoft Word, Paint.NET, Excel, PowerPoint, Mozilla Firefox, Laskin,
Angry Birds, Pokemon Go
 Ohjelmointikielen kääntäjä ja kehitysympäristö ovat myös ohjelmia
Mitä on ohjelmointi?
 Määrämuotoisten komentojen antamista tietyssä järjestyksessä toteutettaviksi (mukana on myös
pöytätestaus, jossa ihminen suorittaa komentoja paperia tai muuta apuvälinettä käyttäen)
 Koulusta tutut algoritmit: yhteenlasku, kertolasku ja jakokulma
 Tietokone suorittaa tietokoneohjelmia suorittimessa (CPU), ohjelma tulee RAM-muistista, käytetään apuna
lisälaitteita useimmiten (näppäimistö, hiiri, modeemi ja näyttö), joiden kanssa suoritin kommunikoi
 Tietokoneen käyttöjärjestelmä on ohjelma
 Ilman käyttöjärjestelmää ohjelmat täytyisi asettaa muistiin binäärisinä koodeina esimerkiksi
etupaneelin kautta (Seymour Cray syötti CDC:n supertietokoneen CDC 7600 buuttilataajan
konekoodin etupaneelin kautta muistin alkuun)
 Tyypillisiä tietokoneohjelmia: Microsoft Word, Paint.NET, Excel, PowerPoint, Mozilla Firefox, Laskin,
Angry Birds, Pokemon Go
 Ohjelmointikielen kääntäjä ja kehitysympäristö ovat myös ohjelmia
Mitä on ohjelmointi?
Automaatilla
maksaminen
Valitse tuote
hinta = tuotteen hinta
kerätty <
hinta?
kerätty = kerätty + kolikon
arvo
Syötä kolikko
kerätty = 0
Ota tuote
kyllä
Ota vaihtorahat
Vaihtorahaa
?
Loppu
ei
kyllä
ei
Mitä on ohjelmointi?
Pullonpalautus
Kassissa
Pulloja?
Pullossa
viivakoodi?
Kyllä
Lasipullo vai
muovipullo?
Kyllä
Laita
palautus-
koneeseen
Paina
kuittipainiketta
Ota
kuitti
Ei
Ei
Laita
lasiroskiin
Laita
muoviroskiin
Loppu
Lasi Muovi
Mitä on ohjelmointi?
Pullonpalautus
Kassissa
Pulloja?
Pullossa
viivakoodi?
Kyllä
Lasipullo vai
muovipullo?
Kyllä
Laita
palautus-
koneeseen
Paina
kuittipainiketta
Ota
kuitti
Ei
Ei
Laita
lasiroskiin
Laita
muoviroskiin
Loppu
Lasi Muovi
Pulloja palautettu
= tosi?
Kyllä Ei
Pulloja
palautettu =
tosi
Mitä on ohjelmointi?Pullonpalautus
Kassissa
Pulloja?
Pullossa
viivakoodi?
Kyllä
Lasipullo vai
muovipullo?
Kyllä
Laita
palautus-
koneeseen
Paina
kuittipainiketta
Ota
kuitti
Ei
Ei
Laita
lasiroskiin
Laita
muoviroskiin
Loppu
Lasi Muovi
Pulloja palautettu
= tosi?
Kyllä Ei
Pulloja
palautettu =
true
Pulloja
Palautettu =
false
Konekieli
 Komennot muistissa peräkkäin olevia numerokoodeja, varaavat 1 – 5 tavua vaihtuvamittaisesti
 Prosessori suorittaa komentoja nousevassa muistipaikkajärjestyksessä, muistipaikka muistipaikalta
 Loogiset operaatiot (laskutoimitukset, and, or, not) suoritetaan prosessorin rekistereiden tai rekistereiden
ja muistin välillä
 Käsiteltävää viedään rekistereistä muistiin ja haetaan muistista rekistereihin
 Lippubitit kertovat laskutoimitusten tuloksista
 Lippujen arvojen perusteella hyppyjä muistiosoitteesta toiseen
 Konekoodia kuvataan symbolisesti kolmekirjaimisilla komennoilla
 Esimerkkejä:
ADD EAX, 14 (lisää 14 EAX:ään, EAX on RAX:n 32 alinta bittiä)
MOV R8W, [1234] (siirrä 16 bittiä (Word, W) osoitteessa 1234 R8:n alimpaan 16 bittiin
JE osoite (hyppää tiettyyn osoitteeseen, jos tiettyjen rekistereiden arvot täsmäävät
CALL osoite (hyppy aliohjelman alkuun tiettyyn osoittesseen), RET (hyppy takaisin aliohjelmasta)
Binääriluvut
 Luvut esitetään nollina ja ykkösinä koneen muistipaikoissa ja rekistereissä
 Helppo toteuttaa elektroniikalla
27 + 26 + 25 + 24 + 23 + 22 + 21 + 20
0b00000001 = 1
0b00000011 = 3
0b10000000 = 128
0b11111111 = 255
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
00010011
+00010001
00100100
00010011
x00000010
00100110
00100110
/00000010
00010011
1 tavu
Korkean tason ohjelmointikieli
 Ihmisen helposti luettavissa ja ymmärrettävissä oleva (verrattuna ainakin konekieleen)
 Ohjelmat muodostuvat englanninkielisistä käskyistä
 Käskyillä on kielioppi, muodostuu yleensä komennon nimestä ja sitä seuraavista parametreistä
(esimerkiksi System.out.println(”Kolmion pinta-ala on: ” + (kanta*korkeus)/2);
 Käskyjä ryhmitellään kokonaisuuksiin kieliopin mukaan
 Käskyjä rajallinen määrä, kieli laajennettavissa kirjastoilla tai paketeilla jotka ovat osa kääntäjää
 Kääntäjä kääntää käskyt konekielelle
 Korkean tason ohjelmointikieliä: Fortran, Algol, Cobol, Basic, C, C++, Java, Python, Javascript ja R
 Rakenteisia ohjelmointikieliä: Pascal, Cobol 85, Fortran 77, Visual Basic, Java, C, C++
 Oliosuuntautuneita ohjelmointikieliä: Small Talk, C++, Java, Javascript, Visual Basic, C#
JAVA-ohjelmointikieli
 Kehitystyö aloitettu jo 1991
 James Gosling, Mike Sheridan ja Patrick Naughton
 Sun Microsystems tarjosi ensimmäisen julkaisun 1.0 1995
 Perustuu WORA arkkitehtuuriin (Write Once Run Anywhere)
 Java on objektiorientoitunut kieli
 Java on de facto standardi, ei perustu standardointiorganisaation kehittämään standardiin
 Oracle on ostanut Sun Microsystemsin 2009
 Java laajasti käytetty esimerkiksi pankeissa, sairaanhoidon sovelluksissa ja yliopistoissa
 Java on ohjelmointikielten kärkikolmikossa 2018 riippumatta laskutavasta
 Android sovellukset käyttävät laajasti Javaa
 Javaa käytetään hyvin laajasti ohjelmoinnin opiskeluun
 Java-ohjelmointitaidon perusteella oppii helposti C++ tai C# kieltä ja muita objektiorientoituneita kieliä
 Javascript ei ole osa Javaa vaan on itsenäinen ohjelmointikieli, tosin myös objektiorientoitunut
JAVA-ohjelmointikieli
 Java-kieli perustuu virtuaalikoneeseen
 Ohjelmat käännetään Java-kääntäjässä tavukoodiksi
 Virtuaalikone tulkitsee tavukoodeja varsinaiseksi prosessorin konekieleksi
 Virtuaalikone mahdollistaa siirrettävyyden, sama tavukoodi käy eri ympäristöihin kehitettyihin
virtuaalikoneisiin (Java Run Time)
 Virtuaalikone takaa ohjelmien hallitun suorittamisen ja tietoturvan
 Java Run Time täytyy asentaa koneelle, jotta tavukoodiohjelmia voi suoritta omassa koneessa
 Java-ohjelmien kehitykseen ladataan Java Development Kit (JDK), sisältää kääntäjän ja muita palveluita
 Graafinen työkalu ohjelmistokehitykseen tarvitaan helpottamaan työskentelyä
(esimerkiksi Eclipse)
 Eclipse tarjoaa kielioppivirheiden tarkistuksen ja korjauksen suoraan ohjelmaa kirjoitettaessa
 Eclipse täydentää automaattisesti lausekkeita käyttäjän puolesta
HelloWorld.javaSystem.out.println(”Hello
world”);
Java kääntäjä
Java
Virtuaalikone
Windows 10
Java
Virtuaalikone
Red Hat Linux
Java
Virtuaalikone
Mac OS x
Windows 10
Red Hat Linux
Linux
Mac OS x
Intel Core i5
UltraSPARC T2
Intel Core i5
Tavukoodi
HelloWorld.c
cout << "Hello world!" <<
endl;
C++ kääntäjä
Windows
Konekoodi
Windows/Intel
Windows 10 Intel Core i5
HelloWorld.c
cout << "Hello world!" <<
endl;
C++ kääntäjä
Linux
Konekoodi
Linux/Sun
Red Hat
Linux
UltraSPARC T2
JAVA-kehitysympäristön asentaminen
JAVA-kehitysympäristön asentaminen
JAVA-kehitysympäristön asentaminen
JAVA-kehitysympäristön asentaminen
JAVA-kehitysympäristön asentaminen
JAVA-kehitysympäristön asentaminen
Eclipse-ohjelmointiympäristön asentaminen
Eclipse-ohjelmointiympäristön asentaminen
Eclipse-ohjelmointiympäristön asentaminen
Eclipse-ohjelmointiympäristön asentaminen
Eclipse-ohjelmointiympäristön asentaminen
Eclipse-ohjelmointiympäristön asentaminen
Eclipse-ohjelmointiympäristön asentaminen
Byte
Short
Int
Long
Bitit
0 1 2 3 4 5 6 7
Float
Double
etumerkki eksponentti mantissa
etumerkki eksponentti mantissa
Taulukko
Juha
Matti
Martti
Timo
Pertti
Taulukko
Juha
Matti
Timo
Pertti
Taulukko
Juha
Matti
Timo
Pertti
Poisto Tiivistys
1.
2.
0
1
2
3
4
Indeksi
Taulukkolista
Juha
Matti
Martti
Timo
Pertti
Taulukkolista
Juha
Matti
Timo
Pertti
Poisto
Linkitetty lista
Juha
Matti
Martti
Timo
Pertti
Poisto
Juha
Matti
Martti
Timo
Pertti
Linkitetty lista
Linkitetty lista
Juha
Matti
Martti
Timo
Pertti
Taulukkolista
Juha
Matti
Martti
Timo
Pertti
List<> lista
add()
get()
remove()
set()
Hajautustaulukko Hajautussolut
Avain
Arvo
Avain = ”xyz”
Arvo
Avain = ”C-kieli”
Arvo = 6.10
Avain
Arvo
Avain = ”C-kieli”, arvo 6.10
Hajautusarvon
laskeminen
Hajautusindeksi = 1
FileReader
C:tmptesti.txt
BufferedReader
read()
merkki
readLine()
rivi
TekstitiedostonLuku
.java
a, r, i, … ari, …
Alku
tila
Tila 2 Tila 3 Tila 3
a
a
b
b
c
c
Tila 4
d
d
Säännöllinen lauseke: a+b+c+d+
asetaKanta(float kanta) {
komentoja …
}
asetaKorkeus(float korkeus) {
komentoja …
}
laskePA() {
komentoja …
}
float annaPA() {
komentoja …
}
float kanta
float korkeus
float pintaAla
asetaKanta(float kanta) {
komentoja …
}
asetaKorkeus(float korkeus) {
komentoja …
}
laskePA() {
komentoja …
}
float annaPA() {
komentoja …
}
float kanta = 1
float korkeus = 1
pintaAla = 0.5
asetaKanta(float kanta) {
komentoja …
}
asetaKorkeus(float korkeus) {
komentoja …
}
laskePA() {
komentoja …
}
float annaPA() {
komentoja …
}
float kanta = 2
float korkeus = 2
float pintaAla = 2
Kolmio()
Kolmio()
class Kolmio
Kolmio[]
kanta = 0
korkeus = 0
pintaAla = 0
Kolmio[]
kanta = 1
korkeus = 1
pintaAla = 0
kanta = 0
korkeus = 0
pintaAla = 0
Kolmio[]
kanta = 1
korkeus = 1
pintaAla = 0
kanta = 2
korkeus = 2
pintaAla = 0
Kolmio[]
kanta = 1
korkeus = 1
pintaAla = 0.5
kanta = 2
korkeus = 2
pintaAla = 2
Kolmio[]
Alennusprosentit
Tuote
Tuote
Kirja
AlennustiedotkampanjaAktiivinen
Alennustiedot
Tuote
Lehti
Taulukko
SäieEsimerkki
Lukija
asetaAlkiot
lock()
unlock()
lock()
unlock()toString
Odotus…
ScheduleAtFixedRate
ScheduleAtFixedRate
BufferedWriter
FileWriter
Buffer
PrintWriter
print()
println()
write() write()
C:UsersYleinenDocumentshrek.txt
Java Application
JFrame
Label TextField
JScrollPane
JTextArea
Button
JTextArea
FlowLayout
JFrame ikkuna
Rakentajametodi
JFrame ikkuna =
New JFrame()
Ikkuna.setVisible(true)
IkkunanMuodostus.java
Ikkunan luonti
Ikkunan tekeminen
näkyväksi
Rakentajametodi
this.setVisible(true);
Ikkuna.java
extends JFrame
Ikkunan tekeminen
näkyväksi
main(String[] args)
JFrame ikkuna = new
Ikkuna()
Ikkunan luonti
JFrame
JPanel Border
Label TextField
Button
Label
GridBagLayout
JComboBox
…
Gridx = 0 Gridx = 1
Gridy = 0
Gridy = 1
Gridy = 2
Gridy = 3
Gridy = 4
GridLayout(2,1)
GridLayout(2,2)
BorderLayout
BorderLayout.PAGE_STARTBorderLayout.LINE_START
BorderLayout.LINE_END
BorderLayout.PAGE_END
PAGE_START
PAGE_END
LINE_START LINE_ENDCENTER
GridBagLayout
GridBagLayout
GridBagLayout
KäyttöliittymäLuokka() extends JFrame implements
ActionListener
public Luojametodi() {
Käyttöliittymän täyttö ja näkyväksi tekeminen
luokan kuuntelijan lisääminen käyttöliittymäolioihin A ja B
}
public void actionPerformed(ActionEvent e) {
Onko tapahtuman lähde A vai B käyttöliittymäolio?
Toimenpiteet käyttöliittymän tiedoille ja tiedon
muuttaminen käyttöliittymässä
}
public static void main(String[] args
{
KäyttöliittymäLuokka käyttöliittymä = new
KäyttöliittymäLuokka();
}
Käyttöliittymäolio A
Käyttöliittymä
Java-virtuaalikone
Tiedon näyttöä
Kehotteita
Käyttöliittymäolio A Käyttöliittymäolio B
KäyttöliittymäLuokka/
actionPerformed
KäyttöliittymäLuokka/
actionPerformed
Käyttöliittymäolio B
Käyttäjä valitsee
hiirellä
2.
1.
3.
4.
MenuEsimerkki1()
public Luojametodi() {
Esitettävän tiedon määritys, käyttöliittymäolion a
määrittely
ActionListener menutoiminto = new ActionListener() {
public void actionPerformed(ActionEvent e) {
reagointi valintaan ja muuttuneiden tietojen
täyttö käyttöliittymään
}
};
a.addActionListener(menutoiminto);
käyttöliittymän täyttäminen ja näkyväksi tekeminen
}
public static void main(String[] args
{
MenuEsimerkki1 menuEsimerkki1 = new
MenuEsimerkki1();
}
Käyttöliittymäolio A
Käyttöliittymä
Java-virtuaalikone
Tiedon näyttöä
Kehotteita
Käyttöliittymäolio a
ActionListener/
actionPerformed
Käyttöliittymäolio B
Käyttäjä valitsee
hiirellä
1.
2.
3.
4.
public void actionPerformed(ActionEvent e) {
reagointi valintaan ja muuttuneiden tietojen
täyttö käyttöliittymään
}

Weitere ähnliche Inhalte

Ähnlich wie Johdatus ohjelmointiin

Windows Vista Ja 7 Yhteensopivuus Ja Sovellustestaus
Windows Vista Ja 7 Yhteensopivuus Ja SovellustestausWindows Vista Ja 7 Yhteensopivuus Ja Sovellustestaus
Windows Vista Ja 7 Yhteensopivuus Ja SovellustestausVaihde 7
 
Windows 7 Työn tuottavuus
Windows 7 Työn tuottavuusWindows 7 Työn tuottavuus
Windows 7 Työn tuottavuusVaihde 7
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteTiina Partanen
 
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptPalvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptSovelto
 
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...VincitOy
 
Store App -kehityksen aloittaminen
Store App -kehityksen aloittaminenStore App -kehityksen aloittaminen
Store App -kehityksen aloittaminenSovelto
 
Asennusohjeet
AsennusohjeetAsennusohjeet
Asennusohjeetathoxy
 
Pikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaari
Pikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaariPikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaari
Pikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaariTeemu Tiainen
 
Windows 7 Käyttöönottoprojekti
Windows 7 KäyttöönottoprojektiWindows 7 Käyttöönottoprojekti
Windows 7 KäyttöönottoprojektiVaihde 7
 
T 121 5300 (2008) User Interface Design 1 Final
T 121 5300 (2008) User Interface Design 1   FinalT 121 5300 (2008) User Interface Design 1   Final
T 121 5300 (2008) User Interface Design 1 Finalmniemi
 
Tietotekniikkaa tumpeloille, 1. kerta
Tietotekniikkaa tumpeloille, 1. kertaTietotekniikkaa tumpeloille, 1. kerta
Tietotekniikkaa tumpeloille, 1. kertaMikko Horila
 
Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Tiina Partanen
 
API Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiäAPI Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiäArto Santala
 
Racket alkeet 1. Peruslaskut
Racket alkeet   1. PeruslaskutRacket alkeet   1. Peruslaskut
Racket alkeet 1. PeruslaskutTiina Partanen
 
Data, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemusData, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemusExove
 
Windows 8
Windows 8Windows 8
Windows 8Sovelto
 
AgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti VartiainenAgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti VartiainenDigia Plc
 

Ähnlich wie Johdatus ohjelmointiin (20)

Windows Vista Ja 7 Yhteensopivuus Ja Sovellustestaus
Windows Vista Ja 7 Yhteensopivuus Ja SovellustestausWindows Vista Ja 7 Yhteensopivuus Ja Sovellustestaus
Windows Vista Ja 7 Yhteensopivuus Ja Sovellustestaus
 
Windows 7 Työn tuottavuus
Windows 7 Työn tuottavuusWindows 7 Työn tuottavuus
Windows 7 Työn tuottavuus
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynote
 
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptPalvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
 
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
 
Store App -kehityksen aloittaminen
Store App -kehityksen aloittaminenStore App -kehityksen aloittaminen
Store App -kehityksen aloittaminen
 
Asennusohjeet
AsennusohjeetAsennusohjeet
Asennusohjeet
 
Pikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaari
Pikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaariPikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaari
Pikkusovellusten päivittämisen parhaat käytännöt SCCM-maailmassa -webinaari
 
Windows 7 Käyttöönottoprojekti
Windows 7 KäyttöönottoprojektiWindows 7 Käyttöönottoprojekti
Windows 7 Käyttöönottoprojekti
 
T 121 5300 (2008) User Interface Design 1 Final
T 121 5300 (2008) User Interface Design 1   FinalT 121 5300 (2008) User Interface Design 1   Final
T 121 5300 (2008) User Interface Design 1 Final
 
Tietotekniikkaa tumpeloille, 1. kerta
Tietotekniikkaa tumpeloille, 1. kertaTietotekniikkaa tumpeloille, 1. kerta
Tietotekniikkaa tumpeloille, 1. kerta
 
Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)
 
API Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiäAPI Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiä
 
Racket alkeet 1. Peruslaskut
Racket alkeet   1. PeruslaskutRacket alkeet   1. Peruslaskut
Racket alkeet 1. Peruslaskut
 
Processing
ProcessingProcessing
Processing
 
Data, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemusData, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemus
 
Ruokanen_AO_OP2015
Ruokanen_AO_OP2015Ruokanen_AO_OP2015
Ruokanen_AO_OP2015
 
Windows 8
Windows 8Windows 8
Windows 8
 
OpenOffice
OpenOfficeOpenOffice
OpenOffice
 
AgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti VartiainenAgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti Vartiainen
 

Johdatus ohjelmointiin