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

1674

    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. Naiset miltä kiihottuminen teissä tuntuu

      Kun miehellä tulee seisokki ja ja sellainen kihmelöinti sinne niin mitä naisessa köy? :)
      Sinkut
      114
      8955
    2. Olet sä kyllä

      ihme nainen. Mikä on tuo sun viehätysvoiman salaisuus?
      Ikävä
      39
      2653
    3. Teuvo Hakkaraisesta tulee eurovaalien ääniharava

      Persuissa harmitellaan omaa tyhmyyttä
      Maailman menoa
      129
      2390
    4. Hiljaiset hyvästit?

      Vai mikä on :( oonko sanonut jotain vai mitä?
      Ikävä
      22
      1999
    5. Miksi kohtelit minua kuin tyhmää koiraa?

      Rakastin sinua mutta kohtelit huonosti. Tuntuu ala-arvoiselta. Miksi kuvittelin että joku kohtelisi minua reilusti. Hais
      Särkynyt sydän
      14
      1756
    6. Turha mun on yrittää saada yhteyttä

      Oot mikä oot ja se siitä
      Suhteet
      11
      1550
    7. Kyllä poisto toimii

      Esitin illan suussa kysymyksen, joka koska palstalla riehuvaa häirikköä ja tiedustelin, eikö sitä saa julistettua pannaa
      80 plus
      15
      1507
    8. "Joka miekkaan tarttuu, se siihen hukkuu"..

      "Joka miekkaan tarttuu, se siihen hukkuu".. Näin puhui jo aikoinaan Jeesus, kun yksi hänen opetuslapsistaan löi miekalla
      Yhteiskunta
      10
      1438
    9. Näkymätöntä porukkaa vai ei

      Mon asuu yksin. Mitas mieltä ootte ?
      Ikävä
      14
      1306
    10. Voi kun mies rapsuttaisit mua sieltä

      Saisit myös sormiisi ihanan tuoksukasta rakkauden mahlaa.👄
      Ikävä
      5
      1257
    Aihe