Seuraa 
Viestejä919
Liittynyt19.3.2005

Olen matemaatikko ja nyt minulle ehdotettiin ohjelmoinnin opettelua, kun omalta alalta ei löydy työtä. Kuinka paljon ohjelmoinnin opettelu vaatii aikaa? Esimerkiksi jos avoinna on signaalinkäsittelyyn tai massadataan liittyviä töitä. Kannattaako ostaa oppikirjoja vai Googlailla ratkaisuja ongelmiin? Onko järkevämpää opiskella ensiksi C vai C++?

Sivut

Kommentit (88)

NytRiitti
Seuraa 
Viestejä2851
Liittynyt12.9.2012

pöhl kirjoitti:
Olen matemaatikko ja nyt minulle ehdotettiin ohjelmoinnin opettelua, kun omalta alalta ei löydy työtä. Kuinka paljon ohjelmoinnin opettelu vaatii aikaa? Esimerkiksi jos avoinna on signaalinkäsittelyyn tai massadataan liittyviä töitä. Kannattaako ostaa oppikirjoja vai Googlailla ratkaisuja ongelmiin? Onko järkevämpää opiskella ensiksi C vai C++?

Ehdotan lineaarista tai dynaamista ohjelmointia.

mdmx
Seuraa 
Viestejä5216
Liittynyt23.11.2009

Ohjelmointi on matemaattisten/loogisten sääntöjen kuvaamista ohjelmointikielellä, eli saat kyllä etua nykyisestä ammatista.

Kauanko opettelu vaatii aikaa, noh, aina riittää uutta opittavaa. Kauanko sitten kestää että saavuttaa tason, että pystyy työskentelemään ammattimaisesti. Sekin riippuu ihan projektista, on olemassa helppoja ja vaikeita projekteja. Mut aika guru olet jos vuoden jälkeen pystyt siihen, ehkä pari vuotta aktiivista opiskelua ja koodausta voisi riittää.

Sinun kannattaa luonnollisesti aloitella projekteista joissa matematiikka on pääosassa, ja arkkitehtuuri/tiedonkäsittely/yms eivät ole niin olennaisia. Signaalinkäsittely kuulostaa hyvältä.

Suosittelen että aloitat opettelun niin että ryhdyt tekemään jotakin pientä softaa. Hello Worldista kaikki lähtee liikkeelle. Kirjat tai netti on makuasia, itse suosin nettiä mutta käytänkin sitä hyvin spesifisten ongelmien ratkaisujen etsimiseen. Kun lähtee alusta liikkeelle, joku 'for beginners' kirja kyllä voi olla passeli.

Ansi-C:tä ei kannata opetella, enkä lähtisi edes C++ liikkeelle jos tarkoitus on tehdä tietokone ohjelmia, eikä ohjelmoida esimerkiksi DSP prosessoreita. Ja ohjelmointi kannattaa mielestäni joka tapauksessa aloittaa tietokone ohjelmilla, embedded puolella tulee sitten ihan omat ongelmansa eteen, joita on helpompi ratkoa kunhan perusteet on ensin hallussa.

Itse aloittaisin C#:lla, sillä pääsee helpoiten alkuun ja se on hyvin yleisesti käytetty kieli. Siitä on melko helppo siirtyä C++:n jos pitää tehdä jollekin muulle kuin Windows:lle. Tai sitten Qt C++. 

Tuosta vaan ilmainen Visual Studio Community Edition.

https://www.visualstudio.com/products/visual-studio-community-vs

Sitten vaikka täältä harjoituksia tekemään:

http://www.homeandlearn.co.uk/csharp/csharp.html

Siitä se lähtee. Sitten kun olet tehnyt pari ekaa omaa softaa, ja ymmärrät miten ne saisi tehtyä paremmin jos tekisit uudelleen, tiedät kauanko sulla kesti ennenkö olet valmis työelämään. :)

Simplex
Seuraa 
Viestejä3025
Liittynyt26.1.2010

Tietenkin APL. :)

Myös kaupallinen Matlab tai ilmainen Octave voivat olla hyviä tutustumiskohteita koska niissä on valmiina kattavasti funktioita ainakin signaalinkäsittelyn ja tilastodatan käsittelyyn.

Ei pidä unohtaa myöskään sitä kuinka data voidaan esittää helposti graafisessa muodossa. Pythonissa on tarjolla Scipy ja Numpy, joista saattaa olla iloa.

Java on myös varsin suosittu kieli C#:n ohella.

Varsin usein käytetään eri työkalujen ja ohjelmointikielien kombinaatioita, eli datan murskaaminen tehdään Java/C#/Python/C++ -kielillä ja graafiseen esittämiseen käytetään jotakin toista työkalua esim. Pythonin Matplotlib:iä tai muuta vastaavaa ohjelmakirjastoa/ohjelmaa/työkalua.

Noin yleisesti voisi todeta että harvemmin kannattaa lähteä itse kirjoittelemaan perusalgoritmejä ja datan graafiseen esittämiseen tarkoitettuja funktioita, vaan pyrkiä käyttämään mahdollisuuksien mukaan valmiita kirjastoja, jolloin voi keskittyä varsinaiseen ongelmaan. Tietenkin jos on vaikkapa tarvetta äärimmäiseen optimointiin, niin tällöin joutuu yleensä kirjoittamaan noita algoritmeja ihan itsekin.

Kyttääjä
Seuraa 
Viestejä469
Liittynyt4.1.2016

Ja aina se uudelleenkoodaaminen tuottaa vähän lyhyemmän algoritmin. Kun koodi ei enää lyhene, vaikka kuinka tuumaa, on saanut aikaan ensimmäisen hyvän algoritmin.

Koodin siisteys on toinen asia, johon kannattaa kiinnittää huomiota heti alussa, sillä siististä koodista näkee heti, mistä kohtaa voi optimoida. Tee ensin vaikka yhtälöryhmän ratkaisu Gaussin eliminointimenetelmällä - sehän on pelkkää matematiikkaa. Kun teet algoritmin satakertaa, kuten allekirjoittanut, niin sen ymmärtää aika hyvin algoritmitasolla.

C++ on omiaan matemaattisessa ohjelmoinnissa. Oliot ovat matemaattisia struktuureja. C:llä funktiot kuitenkin kirjoitetaan, joten kannattaa jättää väliin P. Hietaniemen C++ opas, joka keskittyy input/output olioiden käyttöön - eikä sanaakaan itse koodaamisesta tai algoritmien ratkaisusta.

Muistelisin, että C sisältää alle 20 käskyä: if, else, elseif, while, for, do - while, struct, typedef, enum, goto, ...,?

Kyttääjä
Seuraa 
Viestejä469
Liittynyt4.1.2016

Simplex kirjoitti:

Noin yleisesti voisi todeta että harvemmin kannattaa lähteä itse kirjoittelemaan perusalgoritmejä ja datan graafiseen esittämiseen tarkoitettuja funktioita, vaan pyrkiä käyttämään mahdollisuuksien mukaan valmiita kirjastoja, jolloin voi keskittyä varsinaiseen ongelmaan.

Useimmat uusien kielien kirjastot bugittavat. Meininki on sama kuin Microsoftilla, eli siitä vain kaikki paska jakeluun sen kummemmin testaamatta. Myös Borland on sotkeutunut tähän vyyhtiin, eli tehdään bugittavia kirjastoja. Mitä enemmän olioita kastaan päälekkäin sivuttain, ocv. sen varmemmin joku säie bugittaa.

Perinteiset C-kirjastot eivät bugita.

pöhl
Seuraa 
Viestejä919
Liittynyt19.3.2005

Öläskiperse kirjoitti:
Tee ensin vaikka yhtälöryhmän ratkaisu Gaussin eliminointimenetelmällä - sehän on pelkkää matematiikkaa. Kun teet algoritmin satakertaa, kuten allekirjoittanut, niin sen ymmärtää aika hyvin algoritmitasolla.

Itse asiassa koetin tällaista jo mutta epäonnistuin. Koetin ratkoa ongelmaa osoitteessa http://www.ohjelmointiputka.net/postit/tehtava.php?tunnus=muslam

Öläskiperse kirjoitti:

Muistelisin, että C sisältää alle 20 käskyä: if, else, elseif, while, for, do - while, struct, typedef, enum, goto, ...,?

Mulla on Kernighanin ja Ritchien The C programming language second edition. Sen mukaan käskyjä olisi 32: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typeof, union, unsigned, void, volatile ja while sekä joissain järjestelmissä asm ja fortran. Mutta C:stä on varmaan uudempiakin standardeja.

Simplex
Seuraa 
Viestejä3025
Liittynyt26.1.2010

pöhl kirjoitti:
Öläskiperse kirjoitti:
Tee ensin vaikka yhtälöryhmän ratkaisu Gaussin eliminointimenetelmällä - sehän on pelkkää matematiikkaa. Kun teet algoritmin satakertaa, kuten allekirjoittanut, niin sen ymmärtää aika hyvin algoritmitasolla.

Itse asiassa koetin tällaista jo mutta epäonnistuin. Koetin ratkoa ongelmaa osoitteessa http://www.ohjelmointiputka.net/postit/tehtava.php?tunnus=muslam

Kannattaa yrittää vielä uudelleen.

Kyttääjä
Seuraa 
Viestejä469
Liittynyt4.1.2016

Simplex kirjoitti:

pöhl kirjoitti:

Öläskiperse kirjoitti:

Tee ensin vaikka yhtälöryhmän ratkaisu Gaussin eliminointimenetelmällä - sehän on pelkkää matematiikkaa. Kun teet algoritmin satakertaa, kuten allekirjoittanut, niin sen ymmärtää aika hyvin algoritmitasolla.

Itse asiassa koetin tällaista jo mutta epäonnistuin. Koetin ratkoa ongelmaa osoitteessa http://www.ohjelmointiputka.net/postit/tehtava.php?tunnus=muslam

Kannattaa yrittää vielä uudelleen.

Debugaaminen kynällä ja paperilla on tehokasta. Ratkaise ensin vaikka lineaarinen yhtälöpari. Kun eliminoit yhden arvon, tulosta heti kaikki arvot, jotta näet, että tulos on sama kuin mitä olet paperille laskenut.

Kyttääjä
Seuraa 
Viestejä469
Liittynyt4.1.2016

pöhl kirjoitti:

Mulla on Kernighanin ja Ritchien The C programming language second edition. Sen mukaan käskyjä olisi 32: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typeof, union, unsigned, void, volatile ja while

Jaa, onpas niitä paljon.

z
Seuraa 
Viestejä2918
Liittynyt8.9.2011

Kannattaisi yrittää mahdollisimman hyvin hyödyntää omia vahvuuksiaan ja jättää peruskoodaaminen amk:n koodikuleille. Big data on nyt kovassa nousussa hype-käyrällä ja ei varmaankaan menisi pahasti metsään, jos panisi kaikki panokset sen puolesta.

Tällöin C ja C++ kannattaa unohtaa - niissä menee itse kielen haltuunottoon aivan liian kauan aikaa eikä kummassakaan ole mitään erityistä tukea massadatan käsittelylle.

Netistä löytyi tällaisia juttuja:

The 9 Best Languages For Crunching Data

Which freaking big data programming language should I use?

R voisi olla matemaatikolle helpoin omaksua, mutta en tiedä onko se Suomessa työllistymisen kannalta optimaalinen valinta. Python ja Java (ehkä Scala?) olisivat ehkä varmempia valintoja. Kannatta ehkä vähän vilkuilla työpaikkailmoituksia ja selvittää minkä ohjelmointikielten osaamista niissä vaaditaan.

Omasta kokemuksesta voin suositella Pythonia - sen perusteet on nopea opetella, siinä on sisäänrakennettuna tuki monille hyvin näppärille tietorakenteille ja erilaisia kirjastoja löytyy melkein joka tarpeeseen. Käytän sitä töissä nykyään lähes kaikkeen (algoritmien kehitys) - vaikka tulokset tulee kyllä usein analysoitua ja visualisoitua R:llä...

Eipä ole viimeaikoina juuri tullut kaipailtua C:tä (jossa olin lähes Guru-tasoa) tai C++:aa (johon oli palavasti ihastunut joskus...)

En tiedä onko Pythonin opiskeluun mitään erinomaista kirjaa - itselleni riitti aikoinaan perustutoriaali ( https://docs.python.org/3/tutorial/ ) ja sittemmin on pärjänyt Library Referencellä ja googlettamalla (stackoverflowsta löytyy usein hyviä vinkkejä..)

zz

Vanha jäärä
Seuraa 
Viestejä1567
Liittynyt12.4.2005

Öläskiperse kirjoitti:

Useimmat uusien kielien kirjastot bugittavat. Meininki on sama kuin Microsoftilla, eli siitä vain kaikki paska jakeluun sen kummemmin testaamatta. Myös Borland on sotkeutunut tähän vyyhtiin, eli tehdään bugittavia kirjastoja. Mitä enemmän olioita kastaan päälekkäin sivuttain, ocv. sen varmemmin joku säie bugittaa.

Perinteiset C-kirjastot eivät bugita.

Myös erikoisemmat vanhojen kielten kirjastot ovat bugisia. Oikeastaan voi sanoa niin, että normaalitapaukset toimivat, mutta erikoisemmat parametriyhdistelmät tuottavat tuskaa, eli ohjelmistoja ei ole suunniteltu, toteutettu saati sitten testattu kunnolla.

Tosin ymmärrän hyvin tilanteen: perustapauksen ohjelmointiin menee 20 prosentin vaiva, loput 80 prosenttia kuluu erikoistapausten käsittelyyn. Lisäksi mutkikkaimmissa tapauksissa ei kenenkään mielikuvitus edes riitä fataalimman parametriyhdistelmän selvittelyyn, ennen kuin sellainen käytännössä sitten sattuu kohdalle.

Vanha jäärä

Kyttääjä
Seuraa 
Viestejä469
Liittynyt4.1.2016

NieVei3a kirjoitti:

Omasta kokemuksesta voin suositella Pythonia - sen perusteet on nopea opetella, siinä on sisäänrakennettuna tuki monille hyvin näppärille tietorakenteille ja erilaisia kirjastoja löytyy melkein joka tarpeeseen. Käytän sitä töissä nykyään lähes kaikkeen (algoritmien kehitys) - vaikka tulokset tulee kyllä usein analysoitua ja visualisoitua R:llä...

Eipä ole viimeaikoina juuri tullut kaipailtua C:tä (jossa olin lähes Guru-tasoa) tai C++:aa (johon oli palavasti ihastunut joskus...)

En tiedä onko Pythonin opiskeluun mitään erinomaista kirjaa - itselleni riitti aikoinaan perustutoriaali ( https://docs.python.org/3/tutorial/ ) ja sittemmin on pärjänyt Library Referencellä ja googlettamalla (stackoverflowsta löytyy usein hyviä vinkkejä..)

Python on tulkkaava kieli. Laskeppa huviksesi kaikki sellaiset alkuluvut, joissa on 32 bittiä väliltä [2, 2^63-1]. Python hyytyy, mutta C ei hyydy.

Simplex
Seuraa 
Viestejä3025
Liittynyt26.1.2010

Vanha jäärä][quote=Öläskiperse kirjoitti:

--snip--

Tosin ymmärrän hyvin tilanteen: perustapauksen ohjelmointiin menee 20 prosentin vaiva, loput 80 prosenttia kuluu erikoistapausten käsittelyyn. Lisäksi mutkikkaimmissa tapauksissa ei kenenkään mielikuvitus edes riitä fataalimman parametriyhdistelmän selvittelyyn, ennen kuin sellainen käytännössä sitten sattuu kohdalle.

Ada-kielen SPARK-subsetti saattaisia tuoda ratkaisun tähänkin mainitsemasi inhinmilliseen tuskaan. Nimittäin SPARK:ssä suunnittelija määrittelee reunaehdot ohjelmalle ja funktioille, jonka perusteella SPARK pystyy todistamaan toimiiko ohjelma speksien mukaisesti. Varsin näppärää.

Ada:ssa on kieleen speksattuna natiivi tuki kompleksiluvuille, mikä saattaa ilahduttaa matemaatikkoja.

Valitettavasti Ada ei ole saavuttanut suurtempaa suosiota ns. yleisenä ohjelmointikielenä. Lähes poikkeuksetta esitetty kritiikki alkaakin sanoilla "Kuulin että kaverin serkun kaima koodasi Adaa vuonna 1987, ja se oli todella vaikeaa kun kääntäjät olivat todella hitaita ja tuottivat lähes kelvottoman tehotonta koodia ... ja kun se on niin erilaista kuin C".

z
Seuraa 
Viestejä2918
Liittynyt8.9.2011

Öläskiperse kirjoitti:
NieVei3a kirjoitti:

Omasta kokemuksesta voin suositella Pythonia - sen perusteet on nopea opetella, siinä on sisäänrakennettuna tuki monille hyvin näppärille tietorakenteille ja erilaisia kirjastoja löytyy melkein joka tarpeeseen. Käytän sitä töissä nykyään lähes kaikkeen (algoritmien kehitys) - vaikka tulokset tulee kyllä usein analysoitua ja visualisoitua R:llä...

Eipä ole viimeaikoina juuri tullut kaipailtua C:tä (jossa olin lähes Guru-tasoa) tai C++:aa (johon oli palavasti ihastunut joskus...)

En tiedä onko Pythonin opiskeluun mitään erinomaista kirjaa - itselleni riitti aikoinaan perustutoriaali ( https://docs.python.org/3/tutorial/ ) ja sittemmin on pärjänyt Library Referencellä ja googlettamalla (stackoverflowsta löytyy usein hyviä vinkkejä..)

Python on tulkkaava kieli. Laskeppa huviksesi kaikki sellaiset alkuluvut, joissa on 32 bittiä väliltä [2, 2^63-1]. Python hyytyy, mutta C ei hyydy.

No, jos suorituskykyä kaipaa, niin sitten kannattaa käytää JITiä eli vaikkapa pypyä - tässä yksi vertailu:

Speed comparison with Project Euler: C vs Python vs Erlang vs Haskell

Toisekseen pythonilla olen kerinnyt viilaamaan algoritmin valmiiksi kymmenien iteraatiokierrosten kautta siinä vaiheessa, kun sinä kirjoittelet viimeisiä kaarisulkuja koodin ensimmäiseen versioon ja pohdit että pitäisikö vielä tehdä Makefile vai kääntäisikö ensimmäiset versiot suoraan komentoriviltä...

zz

Sivut

Suosituimmat

Uusimmat

Uusimmat

Suosituimmat