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

1723

    Vastaukset

    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. Ja taas ammuttu kokkolassa

      Kokkolaisilta pitäisi kerätä pois kaikki ampumaset, keittiöveitset ja kaikki mikä vähänkään paukku ja on terävä.
      Kokkola
      72
      6348
    2. Mitä siellä ABC on tapahtunut

      Tavallista isompi operaatio näkyy olevan kyseessä.
      Alajärvi
      138
      5772
    3. Helena Koivu on äiti

      Mitä hyötyä on Mikko Koivulla kohdella LASTENSA äitiä huonosti . Vie lapset tutuista ympyröistä pois . Lasten kodista.
      Kotimaiset julkkisjuorut
      486
      3654
    4. Ovatko naiset lopettaneet sen vähäisenkin vaivannäön Tinderissa?

      Meinaan vaan profiileja selatessa nykyään valtaosalla ei ole minkäänlaista kirjoitettua tekstiä siellä. Juuri ja juuri s
      Nettideittailu
      120
      2059
    5. Kuvaile elämäsi naista

      Millainen hän on? Mikä tekee hänestä sinulle erityisen?
      Ikävä
      39
      1361
    6. Suomi vietiin Natoon väärin perustein. Viides artikla on hölynpölyä. Yksin jäämme.

      Kuka vielä uskoo, että viides artikla takaa Suomelle avun, jos Suomeen hyökätään. Liikuttavasti täällä on uskottu ja ved
      Maailman menoa
      402
      1345
    7. Et ilmeisesti aio enää ikinä olla tekemisissä

      Että näinkö se menee
      Ikävä
      73
      1173
    8. Sydämeni on sinun luona

      Koko ajan. Oli ympärilläni ketä oli niin sinä olet vain ajatuksissa ja tunteissa. En halua muiden kosketusta kuin sinun
      Ikävä
      47
      1034
    9. Trump ja Venäjä

      Huomasitteko muuten... Käytännössä ainoat valtiot, joille Trump EI eilen asettanut typeriä tariffejaan, olivat Venäjä ja
      Maailman menoa
      110
      952
    10. Jatkuva stressitila

      On sinun vuoksesi kun en tiedä missä mennään mutta tunteeni tiedän ainoastaan
      Ikävä
      56
      950
    Aihe