Java on liian helppoa

kaipaan haasteita

Java-kieli ja monet java-tekniikat on liian helppoja omaksuttaviksi ja uudetkin jutut oppii aivan liian nopeasti :( Ei mitään haastetta. Eri juttu se oli ennen vanhaan, kun sai rampata kirjastossa etsimässä millon Ralph Brownin kirjaa keskeytyksistä ja millon Björne Strousoupin C referenssiä, jotta osasi hallita asiat sen verran kuin työn kannalta oli pakollista.

Nykyään sovelluskehitys on pelkkää dokumenttien lukemista ja tekemistä, kun itse koodi syntyy hetkessä.

9

1770

    Vastaukset 9

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 1. Pyri tekemään koodista alustariippumatonta ja noudattamaan kaikkia standardeja.

      2. Pyri tekemään softasta helposti käyttöönotettavaa ja riippumatonta epästandardeista ratkaisuista. Pelkkä siisti käyttöjärjestelmäkohtainen asennuspaketti joka asentuu naxnax kaikkiin yleisiin käyttöjärjestelmiin.

      3. Pyri tekemään softasta mahdollisimman robustia. Eli sen pitää toimia kaikissa erikoisissa tilanteissa kuten äärimmäisessä kuormituksessa tai äärimmäisillä datamäärillä.

      4. Tee softasta aukotonta. Sitä ei pidä pystyä haxoroimaan ja kaikki virhetilanteet pitää käsitellä.

      5. Pyri tekemään softasta mahdollisimman käytettävää. Niin graafisesti kuin komentoriviltä. Käytä hyväksi työpöytäympäristöjen coding standardeja.

      6. Optimoi ohjelman suorituskyky niin, että se on käytettävää.

      -Pyri siihen, että käyttöliittymä toimii reaaliajassa, esim. karttaohjelma jossa otetaan hiirellä kiinni ja pyöritellään asioita. Lagin pitäisi olla käyttäjälle pahimmassakin tapauksessa ohjainlaitteelta ruudun tapahtumiin alle 100ms. Tietysti esim. TFT:n 40ms lagit pitää huomioida yms.

      -Aina kun käyttäjä painaa jotain nappia, pyri siihen että käyttöliittymä vastaa alle sekunnissa.

      -Aina jos joku operaatio vie väistämättä yli 10s, tee joku suorituspalkki.

      7. Edellisillä suorituskykyvaatimuksilla, minimoi laitevaatimukset. Joku 300MHz Celeron, 128Mt muistia on hyvä laitevaatimus.

      8. Tee raskaat laskennat rinnakkaisesti ja aja käyttöliittymä omassa säikeessä. Tee softa skaalautumaan kännykästä palvelinklusteriin.

      9. Optimoi virrankulutus. Profiloi softa esimerkiksi Valgrindillä paljon menee kellojaksoja, paljon tulee cache missejä, paljon luetaan massamuistista, paljon lähetetään tavaraa verkkoon ja jne. Ja tee algoritmit virrankulutus huomioiden. Ennakoi tulevaisuuteen, että prosessorien hyötysuhde ja suorituskyky kasvaa nopeammin kuin muiden komponenttien.

      10. Minimoi tallennustilan tarve.

      ---

      Saat haasteita kun hiot softaa täydellisyyteen.

      • Javaan?

        Ihan kunnioitettavan lista olet kerännyt ohjelmistotekniikan kunnianhimoisia tavoitteita mutta miten nämä liittyvät erityisesti Javalla koodamiseen?

        Yleensäkään millään tavalla koodarin hommiin tai kielen valintaan?

        Tällaisiin asioihin vaikuttavat tekijät päätetään ihan muualla. Jos nyt ei ole kyseessä ihan yhden miehen "autotalliyritys" jossa päätökset joutuu tekemään yksin ja raja ohjelmistosuunnittelun ja koodauksen välillä hämärtyy pahasti.


      • Javaan? kirjoitti:

        Ihan kunnioitettavan lista olet kerännyt ohjelmistotekniikan kunnianhimoisia tavoitteita mutta miten nämä liittyvät erityisesti Javalla koodamiseen?

        Yleensäkään millään tavalla koodarin hommiin tai kielen valintaan?

        Tällaisiin asioihin vaikuttavat tekijät päätetään ihan muualla. Jos nyt ei ole kyseessä ihan yhden miehen "autotalliyritys" jossa päätökset joutuu tekemään yksin ja raja ohjelmistosuunnittelun ja koodauksen välillä hämärtyy pahasti.

        "Ihan kunnioitettavan lista olet kerännyt ohjelmistotekniikan kunnianhimoisia tavoitteita mutta miten nämä liittyvät erityisesti Javalla koodamiseen?"

        Kysyjä valitti haasteiden puuttesta, mutta kyllä niitä vaan keksii helposti. Se sitten riippuu tilanteesta onko Java oikea työkalu, suurin osa noista haasteellisuuksista on kuitenkin kieliriippumattomia.


    • TRRY

      Entäpä jos etsisit haasteita tekemällä jotain mielenkiintoista, etkä vain opettelemalla tekniikoita. Tekniikat on kehitetty ongelmien ratkaisua varten, joten etsi kiinnostava ongelma ja koita ratkaista se oppimiesi tekniikoiden avulla. Ei minustakaan Hello Worldien tulostelu ole kovin palkitsevaa. No ehkä Unlambdalla tai vaikkapa "99"-ohjelmointikielellä

      http://home.san.rr.com/smov/99/

    • Javakoodaaja

      Outo väite !

      Mutta tässäpä sinulle haastetta:

      Pitäisi kirjoittaa javaluokka, joka olisi yleiskäyttöinewn siten, että se toimii sekä j2me että j2se -ympäristöissä.

      Tarkoitus olisi:

      a) toteuttaa samanniminen luokka sekä' j2me että j2se -käyttöön

      JA

      b) laajentaa StringBuilder -luokkaa uusilla hyödyllisillä metodeilla.

      Valitettavasti j2me EI tarjoa StringBuilder -luokkaa. Lähin vastine olisi StringBuffer -luokka.

      Kun javassa olisi EDES ifdef, kuten esim: näissä:

      C, C , Delphi

      niin voisi tehdä jotain tämän tapaista:

      //$IDFEF j2me

      TMyStringBuilder = class extends StringBuffer {

      // luokan uudet metodit tähän.

      }

      //$ELSE

      TMyStringBuilder = class extends StringBuilder {

      // luokan uudet metodit tähän.

      }

      //$ENDIF

      Ikävä kyllä javasta ei löydy edes IFDEF -ehdollista kääntämistä.

      Tuon ongelman (IFDEFin puutteen) voi toki ratkaista kun käyttää kahta PC:tä, joista

      toisessa NetBeans -kehitysympäristö (tähän käy periaatteessa sekä windows että linux, mutta monista j2me -työvälineistä, jotka on suunniteltu integroitumaan NetBeansiin, on tarjolla vain windowsversio, eli valitaan tähän windows-PC).

      ja toiseen koneeseen linux samba.

      nyt, hyödyntämällä linuxin symbolisia linkkejä:

      ln -s /mikälaitetaannäkymään /minne

      saadaan j2me ja j2se -projekteissa haluttaessa sama/eri versio tiedostosta osaksi projektia.

      MUTTA voih, JAVA tarjoaa heti seuraavan ongelman kun yhden ratkaisee:

      ikävä kyllä, sekä StringBuilder että StringBuffer on määritelty näin:

      public final class StringBu...

      ELI: Seuraavaksi mättää tuo final tuossa määrittelyssä, eli etpä periytä kummastakaan luokasta mitään!

      Aiemmin Delphillä koodanneena huomaa nopeasti, että Java on äärimmäisen rajoittunut kieli, jossa Javan tekijät ovat päättäneet valmiiksi, mitä sinun sopii koodata ja mitä ei !

      Samoin tyypittömät var -parametrit puuttuvat (vai pitäisikö laittaa muuttujaparametrit, vastakohtana arvoparametreille, näin käyttäisi suomenkieltä ainakin ohjelmointikieliriippumatrtomalla tavalla).

      Lieneekö syynä tähän taas se, että Javan suunnittelufilosofian mukaan koodaajat ovat idiootteja, ja siksi mikä tahansa mikä saattaisi olla vaarallista, on kiellettyä.

      Tyypittömällä muuttujaparametrillahan on se ikävä ominaisuus, että ilman lisätoimenpiteitä se mahdollistaisi sellaisen muistipaikan osoittamisen, joka on halutun muuttujan varatun tilan ulkopuolella, ja siksi potentiaalisesti vaarallista.

      Tämä tosin olisi voitu välttää sillä, että Javaan olisi määritelty nuo tyypittömät muuttujaparametrit näin;

      public void esimerkkimetodi(var Data; autosize int DataLength, int JotainIhanMuuta, char IhanEriAsia);

      Tuossa siis, kun javassa yleensä erotetaan eri parametrit toisistaan pilkulla, niin tyypitön muuttujaparametrio erotettaisiin sen koon (aina tavuina !) määrittävästä int -tyyppisestä parametrista puolipisteellä; tästä sekä "autosize"-määreestä java -kääntäjä/tulkki tietäisi, että tuolle int DataLength:lle EI ohjelmoija anna mitään arvoa, vaan java -järjestelmä automaattisesti määrittäisi tuon tyypittömän data -parametrin koon tavuina ja täyttäisi automaattisesti tuon dataSize -parametrin arvon.

      Tapa olisi käsittääkseni turvallinen,
      Javassahan ei esim. luokkaviitteelle saa muuta epäkelpoa arvoa kuin null aikaiseksi mitenkään, ja null taas erikoistapauksena on java -runtimen helppo tunnistaa.

      Eli siis: JOS em. esimerkkifunktiota onnistuisi joku kustumaan siten, että Data -muuttujaparametriin tarjottaisiin kutsuttaessa esim. alustamatonta taulukkoa (jonka viitteen arvo siis on null), niin silloin tuolle DataSize:lle java -järjestelmä antaisi automaattisesti arvon 0.

      Tuo tietenkin edellyttäisi absolute -avainsanaa Delphin tapaan esim näin:

      int[] DataAsIntegers absolute Data;
      byte[] DataAsBytes absolute Data;
      long[] DataAsLongs absolute Data;

      Tällöin java -järjestelmän, jos oletamme, että Data:n koko tavuina on vaikkapa 25, pitäisi valvoa, että sallitut indeksit ovat:

      DataAsIntegers: [0..5]
      DataAsBytes[0..24]
      DataAsLongs[0..2]

      ja näiden ylitys tai alitus tietenkin tuottaisivat arrayIndexOutOfBounds -poikkeuksen, kuten Javassa on tapana.

      Ohjelmoijalle lisää mukavuutta tarjoaisi toki Delphistä tutun High() -funktion tarjoaminen myös javakoodareille, eli High() siis palauttaisi:

      high(DataAsIntegers) palauttaisi: 5

      high(DataAsBytes) palauttaisi: 24

      high(DataAsLongs) palauttaisi: 2

      Toisin kuin Delphissä, sensijaan Low() -funktiota ei Javassa tarvita, koska Javan taulukot alkavat aina indeksistä 0, joten low() javassa palauttaisi aina 0, ja on siksi Javassa tarpeeton.

      Toki, näiden ns. avointen parametrien yhteydessä Low() palauttaa Delphissäkin aina 0, mutta Delphissä Low() -argumentiksi voi antaa muutakin kuin avoimen parametrin, ja silloin Delphissä Low() voi palauttaa muutakin kuin arvon 0.

      • huoh

        TAAS vaihteeks meidän delphi-kaveri itkee ifdef:n perään. Miksei homma toimi et teet rajapinnan ja vaikka Antilla määräät kumman käännät?
        Ja mitä tulee tuohon high-metodiin niin tässä:
        Tuon tekemiseen meni ~15 minuuttia ku en o ennen tehnyt juuri mitään generic:sseillä.
        ----------------------
        import java.util.*;
        public class Vertaa{

        public static T high(Collection c){
        T o = null;
        if(!c.isEmpty()){
        Iterator ite = c.iterator();
        o = ite.next();
        while(ite.hasNext()){
        T o2 = ite.next();
        if(o.longValue() < o2.longValue())
        o = o2;
        }
        }
        return o;
        }
        }
        -----------
        Ja esimerkki käytöstä:
        ----------------
        import java.util.*;
        public class Test{

        public static void main(String[] args){
        List doubleList = new ArrayList();
        List intList = new ArrayList();

        doubleList.add(1.0);
        doubleList.add(2.0);
        doubleList.add(7.0);
        doubleList.add(4.0);

        intList.add(1);
        intList.add(2);
        intList.add(3);
        intList.add(4);

        System.out.println(Vertaa.high(doubleList));
        System.out.println(Vertaa.high(intList));
        }
        }


      • väärään vastaus
        huoh kirjoitti:

        TAAS vaihteeks meidän delphi-kaveri itkee ifdef:n perään. Miksei homma toimi et teet rajapinnan ja vaikka Antilla määräät kumman käännät?
        Ja mitä tulee tuohon high-metodiin niin tässä:
        Tuon tekemiseen meni ~15 minuuttia ku en o ennen tehnyt juuri mitään generic:sseillä.
        ----------------------
        import java.util.*;
        public class Vertaa{

        public static T high(Collection c){
        T o = null;
        if(!c.isEmpty()){
        Iterator ite = c.iterator();
        o = ite.next();
        while(ite.hasNext()){
        T o2 = ite.next();
        if(o.longValue() < o2.longValue())
        o = o2;
        }
        }
        return o;
        }
        }
        -----------
        Ja esimerkki käytöstä:
        ----------------
        import java.util.*;
        public class Test{

        public static void main(String[] args){
        List doubleList = new ArrayList();
        List intList = new ArrayList();

        doubleList.add(1.0);
        doubleList.add(2.0);
        doubleList.add(7.0);
        doubleList.add(4.0);

        intList.add(1);
        intList.add(2);
        intList.add(3);
        intList.add(4);

        System.out.println(Vertaa.high(doubleList));
        System.out.println(Vertaa.high(intList));
        }
        }

        Eihän tuo high-homma tee lähellekkään sitä mitä tuos haettiin. Mut genericsien avulla ei tarvita tuota tyyppi parametria.


      • ...tuli mieleen.

        "... Javan suunnittelufilosofian mukaan koodaajat ovat idiootteja, ja siksi mikä tahansa mikä saattaisi olla vaarallista, on kiellettyä."

        Juuri tuo minullekin tuli mieleen kun Javaan tutustuin.


    • tosi kyllästynyt

      kyllä ottaa päähä yoi java asennuksen homma. mun koneeseen on yritetty asentaa javaa,mutta ei onnistu millään .oliskohan kenelläkään tosi selkeää neuvoa.....

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nyt se syksy on sitten alkanut

      Esimerkiksi tänään sataa aamusta iltaan, ja nytkin.
      Maailman menoa
      75
      1220
    2. Olet nainen ollut vaikein rasti

      Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔
      Ikävä
      82
      1137
    3. Kuhmolainen opettaja tuomittu vainoamisesta

      https://yle.fi/a/74-20248184 ”Kuusikymppinen kuhmolaisnainen piinasi naapureitaan lähes kahdeksan vuoden ajan. Nainen
      Kuhmo
      24
      1095
    4. Anteeksi J-mies

      Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t
      Ikävä
      129
      965
    5. Elämäni biisi -paljastus: Tänä lauantaina 26.9. nämä julkkikset istahtavat sinisille sohville!

      Katsotko Elämäni biisiä? Elämäni biisi on monen suomalaisen suosikki. Vieraslista lauantaina 26.9. tarjoilee vieraita m
      Tv-sarjat
      6
      918
    6. Riittääkö mahkut

      Kaivattuusi 🤭.
      Ikävä
      60
      854
    7. Mihin Asiakirjat ovat voineet kunnasta kadota???

      LUE kuinka verorahoja haaskattiin Yle: Ähtärin pandalaskelmat salattiin ja hukattiin - Satakunnan Kansa https://share.
      Ähtäri
      73
      724
    8. Mitä muuta on olemassa kuin lisääntyminen

      Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok
      Sinkut
      132
      682
    9. Ähtäri on taas TV: n ja radion ykkösuutinen

      Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast
      Ähtäri
      50
      652
    10. Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille

      Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.
      Ikävä
      80
      632
    11. Tilanteenne

      Onko tilanteenne tällä hetkellä hyvä?
      Ikävä
      48
      547
    12. Miten sinä voit?

      Kysytkö kukaan sitä sinulta? Olen huomannut, että jos kohtaa empaattisen ihmisen ja hän kysyy noin, saattaa padot murtua
      Ikävä
      90
      540
    13. Kerro kolme hyvää asiaa

      Kaipaamastasi ihmisestä ja lisää perään onko kaivattusi n vai m 😍
      Ikävä
      25
      512
    14. Minulla on ikävä Sinua kulta, rakas

      Olisitpa lähelläni, tarvitsen sinua ❤️
      Ikävä
      36
      495
    15. Suomen 4. seksikkäin mies Miika Nousiaisen tilalle - Pitääkö olla huolissaan palaa tv:seen

      Suosittu keskusteluohjelma tekee paluun. Tällä kertaa panelistina ei jatka enää Miika Nousiainen, vaan hänen tilalleen t
      Suomalaiset julkkikset
      11
      490
    16. haluatko lopettaa

      ihan lopullisesti
      Ikävä
      111
      486
    17. 43
      477
    18. Moottoripyöräonnettomuus

      Mopomiitissä tapahtunut onnettomuus ja uutisointi. Ajoradan ylityksen vaarallisuudesta ei mitään uutisointia. Ei myöskää
      Alajärvi
      40
      448
    19. voi luoja kun uskaltaisin

      laittaa viestiä sinulle...
      Ikävä
      19
      446
    20. Ketä sinä sittten

      Rakastat?
      Ikävä
      33
      405
    Aihe