"Vanhanakin" vielä oppii... mutta on yksi ongelma Javan kanssa. Miten saa ohjelman jatkamaan, jos ohjelma pyytää pari lukua ja kysyy vaikkapa kumpi on suurempi. Ok. Tähän asti onnistuu, mutta entäs jos haluaa jatkaa edelleen samaa ohjelmaa niin että se pyytää uudelleen aloittamaan alusta? Eli jos vastaan k, niin ohjelma aloittaa kyselyn uudelleen, jos vastaan ei niin ohjelma lopetetaan!!!
Javaa...
Nettimamma
12969
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 12
Vanhimmat
Googleta java do while, niin eihöhän löydy esimerkkejä. "Vanhalle" ja muillekin suosittelisin Javan tilalle Pythonia, on vaan huomattavasti helpompi ja kehittyneempi kieli. http://fi.wikipedia.org/wiki/Python
tuommoiset tulkattavat nippelikielet soveltuu korkeintaan skriptien nysväämiseen siinä missä vaativat ohjelmistot tehdään javalla yms.
Java on hyvä valinta ohjelmointikieleksi vain niille, jotka eivät osaa eivätkä halua oppia ohjelmoimaan. Javalla hekin vaikuttavat tehokkailta (monta riviä koodia!), eivätkä edes tee päivässä montaakaan bugia, koska työaika kuluu kaikenlaisten otsikkotietojen ja tyyppimäärittelyjen kirjoittamiseen. Kääntäjä kyllä itkee, jos tyyppimäärittelyissä on virheitä.
Vakavammin, Java on monimutkainen ja tiukasti yhteen ajattelumalliin pakottava (nykyisten ohjelmointikielten joukossa) matalan tason kieli, jolla tehdyt ohjelmat ovat hitaita resurssisyöppöjä. Java on saavuttanut asemansa vain siksi, että sen takana on paljon rahaa (Sun Microsystems). Sitä huonompia valintoja lienevät vain C ja Visual Basic, joista varsinkin jälkimmäisen levinneisyyteen on myös voimakkaalla markkinoinnilla osansa.
Surullinen tosiasia on, että Javaa käytetään paljon. Toteutustekniikoista päättävät ihmiset eivät ilmeisesti saa uutta tietoa muualta kuin mainosläpysköistä. Niin lienee käynyt myös dsaölasille.
Ohjelmoinnin opettelemiseen suosittelisin sellaista kieltä, joka on mahdollisimman lähellä pseudokoodia. Sillä tarkoitetaan ihmisten --- ei siis kääntäjän --- luettavaksi tarkoitettua koodia. Python on tässä suhteessa paljon pidemmällä kuin Java, eikä siinä ole muitakaan edellä mainitsemiani Javan huonoja puolia.
> koska työaika kuluu kaikenlaisten otsikkotietojen
> ja tyyppimäärittelyjen kirjoittamiseen. Kääntäjä
> kyllä itkee, jos tyyppimäärittelyissä on virheitä.
Jahas, et sitten ole tainnut javaa nähdäkään.. vai tarkoitatko javan paketti- ja import-määrityksiä? Samalla tavalla pythonissakin importoidaan muita luokkia/kirjastoja. Ja tyyppimäärittely? Ai niinkuin "public class Luokka"? No olipa monimutkaista..
> Vakavammin, Java on monimutkainen ja tiukasti
> yhteen ajattelumalliin pakottava (nykyisten
> ohjelmointikielten joukossa) matalan tason
> kieli, jolla tehdyt ohjelmat ovat hitaita
> resurssisyöppöjä.
Huoh. Yleinen ymmärrys taitaa kylläkin olla se, että matalan tason kielillä nimenomaan tehdään tehokkaita, vähän resursseja kuluttavia ohjelmistoja. Kääntöpuolena on se, että matalan tason kielillä tulee helpommin tehtyä ohjelmointivirheitä, varsinkin muistinkäsittelyyn liittyviä, johtuen kielten monimutkaisuudesta.
Java _ei_ ole matalan tason kieli, päinvastoin, javalla on jopa hyvinkin vaikeaa, ellei mahdotonta tehdä mitään ohjelmointialustaläheistä koodia (jota matalan tason kielillä, esim. C väistämättä joutuu tekemään). Muistinkäsittelystä ei käytännössä javassa tarvitse välittää mitenkään (siis muistialueiden varaamisesta ja vapauttamisesta), jne. Java on myös täysiverinen olio-ohjelmointikieli, jolla käytännössä piilotetaan monet matalamman tason ongelmat ohjelmoijan silmistä.
> Java on saavuttanut asemansa vain siksi, että
> sen takana on paljon rahaa (Sun Microsystems)
Ehkä, mutta myös siksi, että se on ensimmäisiä hajautettujen järjestelmien tekemiseen hyvin sopivia teknologioita. Se on hyvin tuettu ja dokumentoitu ja tälläkin hetkellä täysin ylivoimainen saatavilla olevien ohjelmointiframeworkien ja -teknologioiden toteutuskielenä. Myöskään suhteellisen hyvin toteutettu olio-ohjelmointiparadigma ei ole ollut haitaksi verrattuna muihin yritelmiin. Puhumattakaan alustariippumattomuudesta.
> Ohjelmoinnin opettelemiseen suosittelisin
> sellaista kieltä, joka on mahdollisimman lähellä
> pseudokoodia. Sillä tarkoitetaan ihmisten --- ei
> siis kääntäjän --- luettavaksi tarkoitettua
> koodia.
Hassua, että esim. Helsingin yliopisto vaihtoi 90-luvun lopulla perusohjelmointikurssien opetuskielen Pascalista Javaksi. Luulisi niiden tietävän, mikä on hyvä opetuskieli..
Python on käyttökelpoinen kieli, ei siinä mitään, mutta kaikelle on paikkansa. Python on enemmän skriptikieli, sillä on helppo ja nopea toteuttaa joitain suhteellisen yksinkertaisia (ja miksei vähän monimutkaisempiakin) ohjelmistoja, esim. Gentoo-käyttöjärjestelmän hallintaskriptit on pääasiassa toteutettu pythonilla. Mutta toteutappa hajautettua tietokantaa käyttävä, EJB-standardia noudattava skaalautuva 3-tier-järjestelmä pythonilla.. niinpä..
"Java _ei_ ole matalan tason kieli, päinvastoin, javalla on jopa hyvinkin vaikeaa, ellei mahdotonta tehdä mitään ohjelmointialustaläheistä koodia (jota matalan tason kielillä, esim. C väistämättä joutuu tekemään)."
Joo, ei ole matalan tason kieli, mutta ehkä Javaa pitäisi kutsua keski tason kieleksi, sillä esim. Python ja Lisp sisältävät ominaisuuksia joita Javassa ei ole ja ovat siis korkeamman tason kieliä kuin Java. Lisäksi Javan staattinen tyypitys on samalainen kuin matalan tason kielissä.
"Hassua, että esim. Helsingin yliopisto vaihtoi 90-luvun lopulla perusohjelmointikurssien opetuskielen Pascalista Javaksi. Luulisi niiden tietävän, mikä on hyvä opetuskieli.."
Ehkäpä C/C olisi ollut parempi valinta, koska kursseihin kuuluu myös käyttöjärjestemät (ja Linux kehitettiin C:llä Helsingin yliopistossa) ja C on selkeä ja kompakti kieli.
"Mutta toteutappa hajautettua tietokantaa käyttävä, EJB-standardia noudattava skaalautuva 3-tier-järjestelmä pythonilla.. niinpä.."
Mikä estää ja sehän on jo toteuttettu esim. Zope.
> Python ja Lisp sisältävät ominaisuuksia joita
> Javassa ei ole ja ovat siis korkeamman tason
> kieliä kuin Java.
Mitä ominaisuuksia ne lisäävät? Ylipäätään, Javan ja Lispin vertailussa ei ole paljon järkeä, Lisp on funktionaalinen ohjelmointikieli, joka on jo paradigmaltaan hyvin kaukana Javasta tai Pythonista.
Pitäisikö määritellä, mitä tarkoitetaan korkean tason kielellä. Minä ymmärrän sen kieleksi, jossa varsinainen ohjelmointialusta on abstrahoitu jollain tavalla niin, ettei ohjelmoijan tarvitse siitä välittää. Tässä merkityksessä Java, Python ja Lisp ovat korkean tason kieliä, toisin kuin esim. C. Näin sen määrittelee myös Wikipedia. (http://en.wikipedia.org/wiki/High_level_language)
Tosin tällä määrityksellä Python on korkeamman tason kieli kuin Java.
> Lisäksi Javan staattinen tyypitys on samalainen
> kuin matalan tason kielissä.
Niin on, ja ainakin minä pidän siitä. Pythonissa, PHP:ssa, Perlissä ja Javascriptissä ym. tulee paljon helpommin tehtyä typeriä tyypitysbugeja ja niiden debuggaus on yhtä helvettiä. Javassa kivaa on, että kääntäjä jo ilmoittaa näistä. Java5:ssa mukaan tuli myös Genericsit, joilla kokoelmien tyypitys saatiin vähemmän virhealttiiksi. Mutta tämä on mun mielipide, jotkut tykkää enemmän löysästä tyypityksestä.
> Ehkäpä C/C olisi ollut parempi valinta, koska
> kursseihin kuuluu myös käyttöjärjestemät (ja
> Linux kehitettiin C:llä Helsingin yliopistossa)
> ja C on selkeä ja kompakti kieli.
Ei, kyllä ohjelmointia pitää mun mielestä opettaa selkeällä ja suhteellisen helpolla kielellä, jotta varsinaiset ohjelmointiin liittyvät konseptit tulee opittua hyvin. C:ssä liikaa aikaa menisi matalan tason ongelmien ratkaisemiseen, jolla ei ole mitään tekemistä varsinaisen teoreettisen ohjelmointiopin kanssa. (Sitä paitsi IMHO C on kaikkea muuta kuin selkeä ja kompakti kieli..)
TKK:lla aikoinaan tietotekniikkafukseilta otettiin löysät pois opettamalla perusohjelmointitekniikat ja -konseptit schemellä, joka on lispin johdannainen. Tämä sopi hyvin ihmisille, joiden tarkoituksena on opiskella teoreettista tietojenkäsittelyä, mutta perusopetuskieleksi se on kyllä liian vaikea.
> Mikä estää ja sehän on jo toteuttettu esim.
> Zope.
hmm, okei, seison korjattuna. Mutta tässäkin apuna on nimenomaan hyvin tehty ja tuettu sovelluspalvelin, jonka päälle on kiva tehdä sovelluksia. Näinhän se java-maailmassakin on aina mennyt. Tomcatit, JBossit ym. ovat mahdollistaneet javan leviämisen kaikkialle. Lisänä on vielä monia hyviä IDE:jä kuten Eclipse, jonka vertaiseen en ole vielä törmännyt muiden ohjelmointikielien kanssa.
Pythonilla en itse ole kovin paljon töitä tehnyt, mutta muilla heikosti tyypitetyillä, skriptipohjaisilla kielillä kyllä ja omasta mielestäni suurien ohjelmistojen tekemisessä, koodin hallinnassa ja organisoinnissa, ohjelmointiapuvälineissä ja sovelluspalvelimissa Java pesee kaikki muut 6-0.
> Mitä ominaisuuksia ne lisäävät?
Lue ainakin kohdat What Made Lisp Different, Appendix: Power http://www.paulgraham.com/icad.html
Käytännössä ero voi olla radikaali. esim:
"Early in my time at WebLogic I had written a library, in Java, for taking apart Java class files. It worked, but the code was a bit of a mess and hard to modify or extend. I had tried several times, over the years, to rewrite that library, thinking that with my ever-improving Java chops I'd find some way to do it that didn't bog down in piles of duplicated code. I never found a way. But when I tried to do it in Common Lisp, it took me only two days, and I ended up not only with a Java class file parser but with a general-purpose library for taking apart any kind of binary file. "
http://www.gigamonkeys.com/book/introduction-why-lisp.html
Kannattaa muistaa myös, että Pythonilla koodaus on noin(/ainakin?) kaksi kertaa nopeampaa kuin Java/C/C -kielillä, jonka luulisi suuresti kiinnostavan ainakin työnantajia.
> Lue ainakin kohdat What Made Lisp Different,
> Appendix: Power
> http://www.paulgraham.com/icad.html
Ihan mielenkiintoista. Schemellä (= Lispin murre) ohjelmoidessa noita asioita tuli kyllä pyöriteltyä. Samoin javascriptissä tykkään tosi paljon juuri noista lambda-funktioista.
> Käytännössä ero voi olla radikaali. esim:
No toki, jos mun pitäis kirjoittaa ohjelma, joka purkaa tietoa binääritiedostoista, Java ei tosiaankaan olisi ensimmäinen vaihtoehto.
> Kannattaa muistaa myös, että Pythonilla koodaus
> on noin(/ainakin?) kaksi kertaa nopeampaa kuin
> Java/C/C -kielillä, jonka luulisi suuresti
> kiinnostavan ainakin työnantajia.
On ja ei ole. Riippuu monista asioista, kuten API-kirjastojen kattavuudesta, saatavilla olevista IDE:stä, dokumentoinnin laadusta, ohjelmiston laajuudesta jne. Työnantajana mua kiinnostaisi myös suuresti se, että Java-osaajia (tai ainakin ihmisiä, jotka väittävät osaavansa Javaa) on työmarkkinoilla pilvin pimein. Se on firman kannalta ikävä tilanne, kun firman ainoa python-osaaja lähtee pois ja jättää jälkeensä kasan python-ohjelmia ;) (nimim. joudun ylläpitämään entisen työntekijän Rubylla tehtyä ohjelmaa, kun kukaan muu ei halunnut edes opetella kyseistä kieltä..)
"Samoin javascriptissä tykkään tosi paljon juuri noista lambda-funktioista."
Lisäksi "evalointi" http://en.wikipedia.org/wiki/Eval ja makrot puuttuvat Javasta. Luepa tarkaan mitä Graham sanoo Lispin makroista (uniikki Lisp-ominaisuus). Toki Javalla voi evaloinin toteuttaa "kiertoteitse" ( http://mindprod.com/jgloss/eval.html ) esim. Jythonilla.
"No toki, jos mun pitäis kirjoittaa ohjelma, joka purkaa tietoa binääritiedostoista, Java ei tosiaankaan olisi ensimmäinen vaihtoehto."
Ei taida olla poikkeus vaan paremminkin sääntö.
"On ja ei ole. Riippuu monista asioista, kuten API-kirjastojen kattavuudesta, saatavilla olevista IDE:stä, dokumentoinnin laadusta, ohjelmiston laajuudesta jne."
Koodasin JSP:llä geneerisen tietokanta selaimen noin 20 tunnissa, PHP:llä sama n. 3 tuntia. Kaiken lisäksi Javaa oli opiskeltu n. 3kk (6h/pv) ja PHP ohjelma taisi olla mun ensimmäinen! Javan dokumentaatiota "sai" lukea ns. riittävästi. Javaa taitaa vaivata paha "over engineering"-ongelma.
"Se on firman kannalta ikävä tilanne, kun firman ainoa python-osaaja lähtee pois ja jättää jälkeensä kasan python-ohjelmia ;)"
Pythonhan on niin helppo kieli, että Java-koodari oppii sen parissa päivässä.
"(nimim. joudun ylläpitämään entisen työntekijän Rubylla tehtyä ohjelmaa, kun kukaan muu ei halunnut edes opetella kyseistä kieltä..)"
Onpa kireä pipoista porukkaa.
PS. Grahamin ennustus meni pieleen: "I have a hunch that it (Java) won't be a very successful language." http://www.paulgraham.com/javacover.html ("Essays"-linkistä löytyy lisää hyvää luettavaa.)
> Toki Javalla voi evaloinin toteuttaa
> "kiertoteitse"
> (http://mindprod.com/jgloss/eval.html ) esim.
> Jythonilla.
Eval, joo. Täytyy kyllä sanoa, etten ole montaakaan kertaa kokenut tarvetta käyttää evalia, en edes kielissä, jossa se on mahdollinen. Ja hyvin oon selvinnyt ;)
> Koodasin JSP:llä geneerisen tietokanta selaimen
> noin 20 tunnissa, PHP:llä sama n. 3 tuntia.
No, eipä tohon kyllä javallakaan noin kauaa pitäisi mennä. Mutta toki php on varmasti nopeampi yksinkertaisen sovelluksen pystyttämisessä. Sovelluksen kompleksisuuden lisääntyessä alkaa kuitenkin hyvin pian kaipaamaan tukevampaa pohjaa ohjelmointiympäristöltä. Itselläni on ylläpidettävänä php:lla tehty keskilaaja sivusto, jonka koodipohjan, ja esim. upotetun SQL:n hallinta on juuri ja juuri hallittavan rajamailla. Toki koodin uudelleen organisointi ja miettiminen auttaisi paljon, mutta tähän, tai refaktorointiin yleensäkään ei php anna paljon apuja.
> Javan dokumentaatiota "sai" lukea ns.
> riittävästi. Javaa taitaa vaivata paha "over
> engineering"-ongelma.
Mulla on ainakin tapana hyvin ahkerasti käydä lukemassa API-dokumentteja, kielestä riippumatta, koska jos jokin metodi on jo talon puolesta toteutettu, ihan turha mun on keksiä pyörää uudestaan. Ja tämä ainakin mun tapauksessa nopeuttaa koodausta huomattavasti.
> Pythonhan on niin helppo kieli, että
> Java-koodari oppii sen parissa päivässä.
> Onpa kireä pipoista porukkaa.
Niinpä. Tässä nyt on kyseessä se reaalinen tilanne suomalaisissa it-yrityksissä. Uuden oppimiseen ei vain ole aikaa. On hyvin vaikeaa laskuttaa asiakkaalta sitä paria päivää, jotka java-koodari käyttää pythonin opettelussa. Ja koska saman ajan voi käyttää laskutettaviin tehtäviin, ei firman johdollakaan ole kiinnostusta siihen kannustaa. Ja omalla aikaansahan koulunsa käynyt uraputkikoodari ei uuden opetteluun käytä.
Sinä, joka todella osaat javaa, niin otapa yhteyttä sillä tarvitsen apua muutamaan asiaan.
Nämä yliopistojen jutut samoin kuin muutkin eli lukiosta AMKiin asti ovat sitä mitä ovat, mutta heillä kaikilla on jostain syystä milloin Visual Basic, milloin C ja Java... aemmin Pascal ym.
Nyt vain tarvitsen JAVA apua!! Jos joku osaa niin ottakoot yhteyttä pikaisesti, eihän tässä näytä näin aloittelijalta yötkään riittävän...
Kysy Java-alueelta http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000139&subcat=1068
Laita koodisi mukaan, niin eiköhän sieltä vastausta tule.