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

1745

    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. Vain vasemmistolaiset rakennemuutokset pelastavat Suomen

      Kansaa on ankeutettu viimeiset 30+ vuotta porvarillisella minäminä-talouspolitiikalla, jossa tavalliselta kansalta on ot
      Maailman menoa
      20
      3365
    2. Persut huutaa taas: "kato! muslimi!"

      Persut on lyhyessä ajassa ajaneet läpi kaksi työntekijöiden oikeuksien heikennystä, joita se on aiemmin vastustanut. Pe
      Maailman menoa
      12
      2785
    3. Menen nyt koisimaan

      Ja en ehkä palaa tänne. Asia on nyt loppuunkäsitelty ja totuus tuli ilmi
      Ikävä
      28
      2414
    4. Olisiko sinulla

      Jonossa vaihtoehtoja, ehkä
      Ikävä
      42
      1817
    5. Pieni galluppi

      Mitäs lahjaa odotat joulupukilta.
      Ikävä
      49
      1555
    6. KL: Mari Hynynen avoimena - Jouni-rakkaan ja Joel-pojan välit ovat nämä!

      Mari Hynynen (ent. Perankoski) on naimisissa Jouni Hynysen kanssa. Marilla on edellisestä liitosta yksi lapsi, Joel Vola
      Suomalaiset julkkikset
      10
      1418
    7. onko kaivattusi

      vaarallinen? :D
      Ikävä
      41
      1381
    8. Haluaisin rakastaa sinua

      Ja olla sinulle se oikea... Rakastan sinua 💗💗💗
      Ikävä
      8
      1335
    9. Oletko uhriutuja?

      vaikka itse olet rääkännyt toista ja aiheuttanut ties mitä toiselle.
      Tunteet
      52
      1253
    10. Missikohu edustaa nykyajan monimuotoisuutta

      Puolesta vai vastaan, saako esittää pilkkaavasti jonkun toisen ihmisen syntyperäisiä ominaisuuksia? Kadulla vastaan tule
      Sinkut
      262
      1115
    Aihe