Lukio alkaa osaltani olla kohta ohi, ja sitten olisikin aika miettiä jatko-opiskelupaikkaa. (Armeijakin toki pitää jossain vaiheessa hoitaa.)
(Pistin tämän työn enkä opiskelun puolelle, koska täällä voin kysyä suoraan IT-työstä ja vastaamassa ovat alan ammattilaiset.)
IT-ala kiinnostaa minua, mutta en ole varma onko minulla "rahkeita" siihen. Tarkoitan tällä lähinnä sitä, että en ole varma onko minulla riittävästi matemaattisloogista päättelykykyä ohjelmointihommiin. Käyn kyllä "pitkää matematiikkaa" ja kokeissa olen pärjännyt melko hyvin ollen luokkani parhaita, en tosin aivan paras. Koneella toki osaan tehdä perusjutut ja mielestäni hallitsen Javan ja C++ alkeet sekä tajuan sellaiset ohjelmoinnin perusjutut kuin silmukat ja alkeellisimmat tietorakenteet. Minulla on yksi kaveri, jonka kanssa olemme näitä harrastuksena hieman pähkäilleet.
Kuitenkin, esimerkiksi joku algoritmien kompleksisuusanalyysi vaikutti minusta todella vaikeaselkoiselta, kun eräästä kirjasta yritin lukea alkeet siitä. Toisella kertaa näin erään graafien (Graafithan ovat tärkeitä rakenteita tietojenkäsittelyssäkin.) rakennetta koskevan matemaattisen lauseen ja sen todistuksen, mutta en mitenkään saanut otetta todistuksesta. Lisäksi olen kuullut, että lukion analyysi perusderivaattajuttuineen ei vielä riittäisi oikeasti yhtään mihinkään, mutta minusta sekään ei ole aivan helppoa, joten mitenkä voisin tajuta kunnolla mitään jostain esim. Fourier-analyysistä.
Jututin jo asiasta muutamaa tuttua, he ovat mm. yksi tietojenkäsittelyn maisteriksi pari vuotta sitten valmistunut serkku ja yksi Ammattikorkeakoulun tietotekniikkainsinööriksi valmistumassa oleva puolituttu, joka käsittääkseni tuntee IT-alan ihmisiä melko paljon. Kaikki sanoivat, että minun ei tarvitse huolehtia matemaattisloogisesta ymmärtämyksestäni, sillä heidän mukaansa ohjelmointityössä voi aivan helposti "ansaita leipänsä" ilman, että tarvitsee tarkasti ymmärtää monimutkaisia matemaattisia juttuja. Kuulemma suurin osa perustyöstä ohjelmoinnin & tietokantojen & käyttöjärjestelmän & tietoliikenteen & jne... parissa ei tarvitse mitään monimutkaista matematiikkaa, ja silloinkin kun vähän monimutkaisempia juttuja käytetään niin silloin niitä käytetään "pakettivalmiina", jolloin ei itse tarvitse ymmärtää sovelletun matemaattisen lauseen todistusta tai käytetyn algoritmin analyysia (=toimivaksitodistusta, kompleksisuusanalyysiä jne.), vaan esimerkiksi algoritmin kohdalla riittää sen koodaminen tarvitsematta välttämättä ymmärtää miten tai miksi se tarkkaanottaen toimii. He tähdensivät, että suurimman osan IT-työstä leipänsä saavista ei tarvitse ymmärtää tällaisia juttuja kovinkaan pitkälle, riittää että pieni osa tuntee tällaiset jutut vähän pidemmälle ja kunnolla tällaisten kysymysten kanssa "painivat" lähinnä vain yliopistojen tutkijat matematiikan ja tietojenkäsittelyn/tietoliikenteen puolella.
Nuo tuttuni toki sanoivat, että kun menen opiskelemaan IT-alaa, siellä toki tulee joissain kursseissa eteen noita matemaattisia juttuja (esim. kompleksisuusanalyysia) hieman enemmän tai vähemmän riippuen siitä mihin tarkkaanottaen päädyn opiskelemaan. He kuitenkin lisäsivät, että kursseista pääsee aivan hyvin läpi usein hyvälläkin arvosanalla ilman kurssimateriaalin vaikeimpien kohtien täydellistä ymmärtämystäkin eikä myöhemminkään työssä matemaattisempien kurssien vaikeimpien kohtien juttujen kunnollista ymmärtämistä juuri tarvita, vaikka nämä jutut ovatkin kuulemma "toisella katsomisella" jo paljon helpompia ymmärtää kuin silloin, kun niihin ensi kertaa törmää kurssilla. He toki lisäsivät, että on olemassa paljon hankalampiakin juttuja kuin mikään perustutkinnon kursseissa käsitelty, mutta sellaisiin ei juuri kukaan peruskoodari törmää.
Mitä mieltä tämän paikan asiaatuntevat ovat tästä? Kommentteja? Lisäksi kysyisin kirjoittamani pohjalta teiltä vielä neuvoa siihen, että mihin tarkalleen IT-alan sisällä minun kannattaisi suuntautua. Ohjelmointiin vai enemmän tietoliikenteeseen? Ammattikorkeakouluun vai yliopistoon/teknilliseen_yliopistoon? Mille linjalle ja mihin erityisesti ottaen huomioon TULEVAT TYÖLLISTYMISMAHDOLLISUUDET olettaen, että aikanani valmistun kohtalaisin paperein sieltä mihin sitten menenkin. Kuulemma "itämaat" (Intia, Kiina, jne.) uhkaavat viedä työpaikkoja jo IT-alallakin.
Alan opiskelija vastaa: Tuttusi ovat oikeassa. Suuntaudu siihen, mikä itseäsi kiinnostaa, kunhan loistat siinä, mitä ikinä teetkin. Kiinnostus opintojen aihetta kohtaan nopeuttaa ja helpottaa opintoja huomattavasti. Pyri pysymään kärryillä ICT-alan kehityssuunnista ja trendeistä lehtiä ja online-julkaisuja (artikkelit, videot, yms.) seuraamalla. Ole avoin tulevan työpaikkasi suhteen - koulutusta vastaava työ on toki huippujuttu, mutta useat osaajat myös joko löytävät hyvän työpaikan ns. mutkan kautta, tai heidät koulutetaan hommaan peruskoulutuksen jälkeen työnantajan puolesta. Osaajia löytyy toki Aasiastakin, mutta kyllä ne lentokoneet lentää toiseenkin suuntaan.
LukioBoy kirjoitti:
Käyn kyllä "pitkää matematiikkaa" ja kokeissa olen pärjännyt melko hyvin - - mielestäni hallitsen Javan ja C++ alkeet sekä tajuan sellaiset ohjelmoinnin perusjutut kuin silmukat ja alkeellisimmat tietorakenteet.
Nämä ovat hyvät lähtökohdat ohjelmointialalle.
LukioBoy kirjoitti:
Kuitenkin, esimerkiksi joku algoritmien kompleksisuusanalyysi vaikutti minusta todella vaikeaselkoiselta, kun eräästä kirjasta yritin lukea alkeet siitä. Toisella kertaa näin erään graafien - - rakennetta koskevan matemaattisen lauseen ja sen todistuksen, mutta en mitenkään saanut otetta todistuksesta.
Usein ongelmana ei ole, että asia olisi sinänsä huippuvaikea vaan että matemaattinen esitystapa tekee siitä vaikean. Mainitsemasi kompleksisuusanalyysi on hyvä esimerkki tästä. Asian voi määritellä lyhyesti matemaattisesti, mutta silloin asian ymmärtäminen on hyvin vaikeaa, jos siitä ei ole aiempaa kokemusta. Toisaalta asiaa voi myös selittää käytännön esimerkkien kautta, jolloin sen ymmärtäminen on paljon helpompaa.
LukioBoy kirjoitti:
Lisäksi olen kuullut, että lukion analyysi perusderivaattajuttuineen ei vielä riittäisi oikeasti yhtään mihinkään, mutta minusta sekään ei ole aivan helppoa, joten mitenkä voisin tajuta kunnolla mitään jostain esim. Fourier-analyysistä.
Analyysi ei ole kovin keskeinen matematiikan alue ohjelmoinnin kannalta. Itse asiassa mieleeni ei tule yhtään tietojenkäsittelyn kurssia, jossa olisi tarvittu edes lukiotason derivointia saati sitten vaikeampia asioita. Matematiikan perusopinnoissa analyysilla on sen sijaan tärkeä osa, mutta eivät nämäkään kurssit mahdottomia ole.
LukioBoy kirjoitti:
Kaikki sanoivat, että minun ei tarvitse huolehtia matemaattisloogisesta ymmärtämyksestäni, sillä heidän mukaansa ohjelmointityössä voi aivan helposti "ansaita leipänsä" ilman, että tarvitsee tarkasti ymmärtää monimutkaisia matemaattisia juttuja.
Useimmissa asioissa on tärkeintä, että ymmärtää niiden käytännön merkityksen. Esimerkiksi kompleksisuusanalyysista on paljon hyötyä käytännön ohjelmoinnissa, koska sen avulla voi arvioida, onko suunniteltu tietorakenne tai algoritmi riittävän tehokas. Käytännössä ei kuitenkaan tarvitse tehdä täsmällisiä matemaattisia todistuksia vaan riittää arvioida tyyliin "algoritmissa on kaksi sisäkkäistä for-silmukkaa, joten sen aikavaativuus on O(n^2)".
LukioBoy kirjoitti:
Nuo tuttuni toki sanoivat, että kun menen opiskelemaan IT-alaa, siellä toki tulee joissain kursseissa eteen noita matemaattisia juttuja (esim. kompleksisuusanalyysia) hieman enemmän tai vähemmän riippuen siitä mihin tarkkaanottaen päädyn opiskelemaan.
Yliopistoissa tietojenkäsittelyn kandiopintojen (ensimmäiset kolme vuotta) tarkoituksena on antaa monipuolinen kuva tietojenkäsittelyn osa-alueista. Yksi tärkeä osa-alue ovat algoritmit ja muut matemaattiset asiat, minkä vuoksi myös niistä on kursseja. Näiden opintojen jälkeen erikoistumisalan voi valita oman kiinnostuksen mukaan. Esimerkiksi jos erikoistuu ohjelmistotuotantoon, matematiikan osuus on luultavasti vähäinen. Toisaalta matematiikkaa ei kannata pelätä, ja ainakin minusta tietojenkäsittelyn kiinnostavimmat asiat liittyvät nimenomaan matemaattisiin asioihin.
Minulle tarjottiin kerran työpaikkaa, jossa olisi vaadittu vahvaa tuntemusta tilastotieteestä, soveltavasta matematiikasta ja Mathematican koodaustaitoja. En osannut tarpeeksi tilastotiedettä, joten en saanut paikkaa. Toisaalta olen koodannut työkseni sovelluksia, joissa vaativin matemaattinen osuus oli karkausvuoden huomioon ottaminen ja sen laskeminen, mikä päivämäärä on 30 päivän päästä.
Jaska kirjoitti:
Toisaalta olen koodannut työkseni sovelluksia, joissa vaativin matemaattinen osuus oli karkausvuoden huomioon ottaminen ja sen laskeminen, mikä päivämäärä on 30 päivän päästä.
Ja toisaalta tuotakaan ei yleensä tarvitse osata laskea itse vaan ohjelmointikielestä yleensä löytyy vakiokirjasto, ellei sitten suunnilleen assembleria koodaa.
Näin on, mutta en jaksanut tuolloin plärätä manuaalia.
Olen itse ollut 15 vuotta alalla ja ohjelmistoja kirjoitellut jo lähes 30 vuotta. Matematiikasta ON hyötyä, riippuen tietysti miten suuntautuu. Nykyisin törmäilen aika usein komplekseihin matemaattisiin ongelmiin, joita sitten omasta mielestäni kehnolla matematiikka päälläni pyrin ratkomaan.
Tälläisiä asioita on esimerkiksi enkryptaus algoritmit, varsinkin kun siirrytään julkisen ja salatun avaimen matemaattisiin yhtälöihin. Näiden avainsanojen laskemin tuotti jonkin verran (ihan fyysistä) päänsärkyä, kun koitin ymmärtää kuinka avaimet lasketaan ja tunnistetaan.
Yksi vaativa alue on kolmiuloitteiset matriisit, joihin törmää 3D mallinnuksessa ja pelikehityksessä. Se tosin vaatii pikemminkin asian oivaltamista kuin matemaattisia kykyjä.
Kouluaikoinani en viitsinyt juurikaan paneutua tilastomatematiikkaan, mutta yhä useammin törmään projekteihin, joissa tilastollisesti analysoidaan dataa ja tuotetaan sen perusteella ennustuksia.
Kuten LB:n kaverit olivat maininneet - leipänsä tienaa ilman matemaattista lahjakkuutta, mutta jos haluaa olla kehittämässä uutta tai ylipäätään arkkitehtuuripuolella suunnittelemassa ohjelmistoja on matemaattisista kyvyistä yllättävä apu.
Mitä taas tulee tuohon huoleen intialaisista... muistetaanpa, että ne ovat oikeasti toisella puolella maailmaa omassa kulttuurissaan. Tuota väkeä käytetään lähinnä käsityöläisinä tuottamaan muualla suunniteltuja osioita ja asiantuntemus ohjelmien rakenteeseen ja vaadittaviin ratkaisuihin lähtee paikalliselta tasolta. Näin ollen en näkisi sitä huoleksi...
Tämän sanon ihan käytännön kokemuksesta - kehitämme itse ohjelmistoja maassa, jossa hintataso on kymmenesosa suomalaisesta tasosta, mutta vaikka kaverit ovat loistavan lahjakkaita, he eivät itsenäisesti kykene tuottamaan kokonaisratkaisuja. Heidän kanssaan on todella joutunut projektinjohtokyvyt koetukselle. Monta kertaa pääsee helpommalla kun työ tehdään paikallisesti.
Itse sanoisin, että sinun on syytä panostaa kielitaitoon, sillä mikäli täällä suomessa kävisi työt vähiin on aina mahdollisuus siirtyä toiseen maahan tekemään samaa työtä. Tällöin kielitaito on työllistymisen kannalta olennaisempaa kuin matemaattinen lahjakkuus.
LukioBoy kirjoitti:
Kuitenkin, esimerkiksi joku algoritmien kompleksisuusanalyysi vaikutti minusta todella vaikeaselkoiselta, kun eräästä kirjasta yritin lukea alkeet siitä. Toisella kertaa näin erään graafien (Graafithan ovat tärkeitä rakenteita tietojenkäsittelyssäkin.) rakennetta koskevan matemaattisen lauseen ja sen todistuksen, mutta en mitenkään saanut otetta todistuksesta. Lisäksi olen kuullut, että lukion analyysi perusderivaattajuttuineen ei vielä riittäisi oikeasti yhtään mihinkään, mutta minusta sekään ei ole aivan helppoa, joten mitenkä voisin tajuta kunnolla mitään jostain esim. Fourier-analyysistä.
Itse ainakin opin luennoilla kuuntelemalla 2-3 kertaa nopeammin kuin itse tavaamalla kirjasta, riippuu toki hieman luennoitsijasta. Lisäksi nuo asiat ovat sen verran monimutkaisia, että ne vaativat jo melko lailla pohjatietoja. Ei siis ihmekään, jos lukiotaustalta asioiden ymmärtäminen tuottaa vaikeuksia.
Lakkaat vain murehtimasta, kyllä ne sitten siellä yliopistossa/minne_ikinä_menetkin opetetaan :)
Oppimisnopeus on kanssa aika pitkälti kiinni kokemuksesta. Itse koetin opetella matematiikassa asiat hahmottamalla aina tärkeimmät asiat hyvin ja opettelemalla sitten vähemmän tärkeitä asioita. Siten pystyin palauttamaan matikan kurssien vaikeatkin todistukset edellisten lauseiden todistuksiin useimmiten kohtalaisen vaivattomasti, jolloin opin asioita nopeammin kuin luennoilla. Monesti huomasin, että jotkin lauseet tai kikat ovat melko helposti yleistettävissä muutamantyyppisiin ongelmiin, joten minun kannatti opetella hyvin jotkut asiat. Valitettavasti sen huomaa lähinnä kokemuksesta, mikä on kussakin tehtävässä tai todistuksessa oleellisin niksi ja mikä vähemmän tärkeää.
Toisaalta gradussani oli monia todistuksia, joihin ei meinannut saada millään otetta, ja ohjaaja ei auttanut mua paljonkaan. Silloin piti vain kokeilla järjestelmällisesti lupaavimpia ideoita sekä lukea aiheesta muista kirjoista tai artikkeleista. Pikkuhiljaa ongelmaa koskeva tietomäärä lisääntyi, ja lopulta haastaviinkin ongelmiin löytyi ratkaisu.
Kerran kuitenkin tein bugin tarkkuuden takia. Minun piti koodata jokin ehto, joka on voimassa epänegatiivisilla luvulla, mutta työnantaja sanoi, että tee tarkistus positiivisille luvuille. Toisen kerran minun piti tehdä paloittain määritelty funktio, joka kuvasi luonnolliset luvut parillisille ja muut kokonaisluvut parittomille epänegatiivisille luvuille bijektiivisesti. Kolleega luuli, että viisastelen, kun kysyin onko nolla tässä yhteydessä luonnollinen luku, vaikka asiayhteydestä en tiennyt, pitikö jonkun luvun kuvautua nollalle.
Voin vakuuttaa, että alalla on töissä ihmisiä, jotka eivät ole koskaan kuulleetkaan sellaisesta asiasta kuin "algoritmien kompleksisuusanalyysi". Ensisijainen tavoite on yleensä, että ohjelma toimii; nopeutta voi miettiä sitten jälkikäteen (ellei nyt suunnitelmassa ole jotain perustavanlaatuista mokaa). Hyvän ohjelmoijan tunnusmerkki ei yleensä ole se, että hän osaa analysoida minkä tahansa algoritmin kompleksisuuden, vaan se, että hänen ohjelmansa toimivat jo ensimmäisellä yrityksellä ja ovat koodiltaan selkeitä ja helposti muokattavissa edelleen.
Käytännön ohjelmoinnissa on usein tärkeintä, että hahmottaa helposti yhteyden ohjelman koodin ja sanallisten vaatimusten välillä. Tyypillinen tilanne ainakin omissa töissäni oli, että "asiakas soitti, että pitäisi lisätä ominaisuus X, joka tekee asiat Y ja Z". Sellaisessa tilanteessa on tärkeää, että on heti jokin käsitys, miten tätä lähdetään toteuttamaan: mihin koodi laitetaan, paljonko sitä suunnilleen tulee, pitääkö sen takia ehkä tehdä muutoksia aiempaan koodiin, kauanko koodaus kestää ja oliko tässä vaatimuksessa varmasti kaikki tarpeellinen tieto vai pitääkö mennä kysymään, tarkoittikohan asiakas sittenkin toimintoa W eikä Z.
Tämä ei siis eroa paljonkaan tyypillisestä matematiikan- tai fysiikantehtävästä: Paperilla lukee, mitä tiedetään ja mitä pitäisi laskea. Fiksuimmat tietävät usein jo muutamassa sekunnissa, mitä kautta tehtävän saa helpoiten ratkaistua. Tyhmimmät sen sijaan pyörittävät lukuja satunnaisilla kaavoilla ja yrittävät saada yksiköt täsmäämään. Siltä se näyttää joskus koodauksessakin. >_>
Lisäksi auttaa paljon, että ymmärtää omaa ja toisten koodia ja tulee ajatelleeksi myös sellaisia vaihtoehtoja, jotka eivät syystä tai toisesta ole täysin ilmiselviä. Suurin osa bugeista ja tietoturva-aukoista on seurausta juuri siitä, että joku ei ole ajatellut asioita loppuun asti. Esimerkiksi nettisivujen tekijät usein unohtavat, että käyttäjä saattaa syöttää hakukenttään, palautelaatikkoon tms. lainausmerkkejä tai HTML-koodia, ja verkossa toimivia C- tai C++-ohjelmia tekevät saattavat jättää huomioimatta sen mahdollisuuden, että hakkeri lähettääkin ohjelmalle dataa, joka on väärässä muodossa tai jota on liikaa.
Lopuksi: Ohjelmoinnissa kannattaa säilyttää tietty raja taitavuuden ja perfektionismin välillä. Taitava koodari tarvitsee ongelman ratkaisuun vain murto-osan siitä ajasta, vaivasta, koodimäärästä ja päänsärystä (puhumattakaan virheenkorjauksen aiheuttamasta ahdistuksesta ja ärtymyksestä) kuin huono koodari. Sen sijaan perfektionistin koodi alkaa uudestaan venyä, sitä pitää parannella ja siistiä ihan turhaan, ja parin viikon kuluttua se pitää kirjoittaa alusta asti uudestaan, koska viideskään versio ei vielä ollut täydellinen. ;)
Jos on oikeasti huono matematiikassa, niin sitten ei kannata ajatella Yliopistoa TT:n osalta vaan AKK:ta. Mutta kun olet luokkasi parhaita niin empä usko, että se on ongelma.
Tärkeintä on tieto, taito ja kokemus. Kokemattomalle jokainen haaste(esim. Putkapostit) on uusi, mutta vanha konkari muistaa, että teki joskus samankaltaisen tehtävän ja jos vähän sitä muokkailee niin säästyy vaivalta.
Ei kannata katsoa yliopistojuttuja ennen kuin on käynyt siellä, räjäyttää vain oman päänsä siinä puuhassa, kun ei osaa vielä YO:n perusmatematiikan asioita.
Yliopistoon vaan tai Dippainssiksi lukemaan...
Keskiasteessa aikasi käy pitkäksi.
En sitten ota kommenttia siitä, pitäisikö lukea tietotekniikkaa vai jotain muuta. Tietotekniikan taitoja kun tarvitaan niin monessa muussakin alassa, ja saattaisi olla hyödyksi, että lukisit pääaineenasi jotakin muuta kuin tietotekniikkaa.
Lisäksi ei sinun vielä tarvitse osata niitä. Sinnehän mennään oppimaan.
Pärjää tällä (lue palvelukehitys) alalla ilman matemaattisia/äidinkielellisiä lahjojakin... helppoa se ei silti tule olemaan. Alakohtainen kiinnostus pitää olla kuitenkin huipussaan.
Jokotai kirjoitti:
Jos on oikeasti huono matematiikassa, niin sitten ei kannata ajatella Yliopistoa TT:n osalta vaan AKK:ta.
AKK? Eikös AKK ole vähän vanhemmille? Vai tarkoititko kenties ammattikorkeata (AMK) ?
Matemaattisen esitystavan sekä matematiikan vaativammat opinnot saattavat myös avata aivan uusia ovia tietotekniikan maailmasta. Esimerkiksi monet koneoppimisen algoritmit perustuvat tavalla tai toisella tilastotieteeseen sekä todennäköisyyslaskentaan, jotka taas pohjautuvat matemaattiseen analyysiin. Näiden ymmärtäminen voi olla mieltäavartavaa.
Mutta sit taas käytännön työelämän näkökulmasta tälläiset pohdinnat saattavat olla turhia ja aikaavieviä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.