Java nebo C++ pro absolutní začátečníky?

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #90 kdy: 06. 09. 2012, 20:27:12 »
Stručně tedy můj názor - v tomto případě začít obecné programování v C (elektro průmka) a ve 3 OOP dělat v Javě. Toť můj názor.


Pavel Tisnovsky

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #91 kdy: 06. 09. 2012, 20:59:44 »
Java je na učení naprosto na ho..., protože jenom k blbému Hello world potřebuješ asi 10 řádků. Kromě jiných nevýhod.

Tak pokud ta decka nebudeme hned tlacit do OOP, tak si vystaci s peti radky a jeste se vynecha pitoma metoda main (u ktere je pro zacatecniky strasne mnoho magickych slov a znaku :)

Ja bych osobne pri vyuce zacal se Scratchem, potom asi podle chuti studentu C ci Python...

Pavel Tisnovsky

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #92 kdy: 06. 09. 2012, 21:09:43 »

Pokud máš na mysli kurz 6.001 (Structure and Interpretation of Computer Programs) tak nedávno buď přešli na python, nebo o tom hodně vážně uvažovali. Důvod byl ten, že PLT Scheme (dnes Racket language), ve kterým se to učilo, se v praxi i v jiných kurzech používá minimálně.


Hmm LISPari prave SICP radi argumentovali, no je to myslim i dost skoda, bylo zajimavy si ty prednasky porovnavat treba s tim, co se prednasi u nas (i styl vyuky atd.).

st

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #93 kdy: 06. 09. 2012, 21:54:57 »
Vite o nejakem nastroji na vizualni programovani, ktery by mel primocarost Scratche a pritom dospelejsi neodrazoval svym na mladsi uzivatele zamerenym vzhledem? Jestli sem se vyjadril dobre .)

Jak je na tom Lua s vhodnosti pro vyuku?

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #94 kdy: 06. 09. 2012, 22:52:47 »
Hmm LISPari prave SICP radi argumentovali, no je to myslim i dost skoda, bylo zajimavy si ty prednasky porovnavat treba s tim, co se prednasi u nas (i styl vyuky atd.).

Škoda to rozhodně je, každopádně na původní knížku k SICP se dá stále proklikat přes stránky Racket language.


Natix

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #95 kdy: 06. 09. 2012, 23:03:04 »
Citace
Teraz musím všade dávať aj new() na čo občas zabudnem a zbytočne oveľa viac debugujem a odchytávam výnimky. Na ten new sa dá zabudnúť tak, že pri testovaní sa to neprejaví, až u zákazníka a potom nie je sranda to riešiť.
Ako sa dá zabudnúť na new, keď to je kompilačná chyba?

ak chcem objekt ako member variable tak to nie je (a nemôže byť) chyba pri kompilácii.

Pokud můžu, tak fieldy vždycky zásadně inicializuji in-line, odkládání inicializace do konstruktoru (ve chvíli, kdy to samé můžu udělat rovnou při deklaraci) nebo kdo ví kam jinam je strašlivý zlozvyk.

Zároveň pokud nepotřebuji do hodnoty fieldu znovu přiřazovat, tak automaticky přidávám klíčové slovo final, díky kterému mě kompilátor vyřve, pokud bych zapomněl jeho hodnotu inicializovat in-line nebo alespoň v konstruktoru (v případě objektů, které se do konstruktoru injectují).

Kód: [Vybrat]
public class Container {
    private final List<Object> objects = new ArrayList<>(); // nutné přiřadit, jinak compile error
    private final String name;
    // private final long id; -> zde by byl compile error

    public Container(String name) {
        this.name = name; // kdybych tohle zapomněl -> compile error
    }
}

Natix

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #96 kdy: 06. 09. 2012, 23:07:19 »
...

Samozřejmě že v případě hloupých datových bean s gettery a settery tohle použít nejde (byť v určitých situacích jde udělat beany taky immutable), ale to je zvláštní případ. V objektech, které mají nějaké chování, většinou není problém. Člověk by se až divil, kolik proměnných ve skutečnosti vůbec "proměnných" být nemusí.

Plameňobojovník

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #97 kdy: 06. 09. 2012, 23:25:37 »
Hlavne v Jave je každý neinicializovaná inštančná premenná null.

Kolega Natix veľmi jasne povedal, ako na to.

Neviem ako je to v C++, ale v Jave sa pokojne môže stať, že objekt nemá implicitný konštruktor a v tom prípade je veľmi ťažké "domyslieť si", ktorý z nich sa má automaticky zavolať pri inicializácii inštančnej premennej (popravde, netuším ako je to v C++).

klw

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #98 kdy: 07. 09. 2012, 00:09:08 »
Neviem ako je to v C++, ale v Jave sa pokojne môže stať, že objekt nemá implicitný konštruktor a v tom prípade je veľmi ťažké "domyslieť si", ktorý z nich sa má automaticky zavolať pri inicializácii inštančnej premennej (popravde, netuším ako je to v C++).

V Javě má každý objekt implicitní konstruktor, může ale být private, jestli jste měl namysli tohle? Asi většina běžně používaných "beanových"/komponentových frameworků ale stejně vynucuje přítomnost implicitního public konstruktoru.

Jinak pokud jde o chyby zapomenutí inicializace, ale i o spousty jiných chyb způsobených nejen nepozorností, jsou zde k jejich odhalování k dispozici nástroje a knihovny typu Findbugs, JSR 305, PMD, @Required anotace ve Springu...

Plameňobojovník

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #99 kdy: 07. 09. 2012, 00:21:09 »
Keď mám


public class Troll {
    private int level;
    public Troll(int level) {
        this.level = level;
    }
}


a niekto si vyrobí inštančnú premennú


private Troll najväčšíTroll;


tak Java nemá veľa možností, čo spraviť: tak či onak by to viedlo ku kadejakým prapodivným prípadom. Tento najväčšíTroll je null.

Tak či onak mi súčasné správanie prijde prirodzené: neinicializovaná premenná je null, a očakáva sa explicitná inicializácia.

Ako je to v C++, neviem, povedzte niekto znalý.

hulislav

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #100 kdy: 07. 09. 2012, 01:04:48 »
A aky mate nazor na priradovanie null-u pri clenskej premennej do deklaracie? Napr.

Kód: [Vybrat]
class X {
    public String retazec = null;
    ...
}

Ide o to, ci ma vyznam tam ten null pisat, ked to je null defaultne, aj napriek tomu, ze pocas inicializacie tej triedy este nieco do retazca priradim. Ja tam ten null pridavam, hned tak vidim, ze to je naozaj null a treba s tym tak zaobchadzat a mat to na ociach, ked tam ten null nie je, tazsie sa to cita.

hulislav

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #101 kdy: 07. 09. 2012, 01:25:04 »
a teda, v tomto pripade je este zaujimave to, ze sa nemozno pomylit a napisat nieco ako

class X {
    public final String retazec = null;
    ...
}

tym sme si vlastne odstrihli moznost premennu normalne inicializovat, lebo sa to uz prave stalo.

Natix

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #102 kdy: 07. 09. 2012, 01:48:52 »
"Null sucks." -Doug Lea

"I call it my billion-dollar mistake." - Sir C. A. R. Hoare, on his invention of the null reference

Pavel Tisnovsky

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #103 kdy: 07. 09. 2012, 09:33:51 »
Člověk by se až divil, kolik proměnných ve skutečnosti vůbec "proměnných" být nemusí.

Tesat do kamene - vyresi to spoooustu problemu, zejmena ve chvili, kdy si nekdo vzpomene, ze nasi/vasi tridu pouzije nekde v multivlaknove aplikaci.

Pavel Tisnovsky

Re:Java nebo C++ pro absolutní začátečníky?
« Odpověď #104 kdy: 07. 09. 2012, 09:42:50 »
Vite o nejakem nastroji na vizualni programovani, ktery by mel primocarost Scratche a pritom dospelejsi neodrazoval svym na mladsi uzivatele zamerenym vzhledem? Jestli sem se vyjadril dobre .)

Jak je na tom Lua s vhodnosti pro vyuku?

Na Scratch docela primo navazuje BYOB a Panther:
http://www.root.cz/clanky/scratch-plnohodnotny-programovaci-jazyk-nebo-jen-detske-puzzle-5-cast-projekt-panther/
http://www.root.cz/clanky/scratch-plnohodnotny-programovaci-jazyk-nebo-jen-detske-puzzle-3-cast-scratch-a-byob/

Vsechny tri systemy se daji upravit tak, ze se vyhodi "detske" sprity, takze to bude vypadat dospeleji - vsechny zmeny se ukladaji do jedineho souboru, ktery se muze jednoduse rozkopirovat na pocitace v ucebne. Navic si skutecne myslim, ze strukturovat programy a vubec resit nejaky ukol jeho rozdelenim na podproblemy se jde v techto systemech naucit velmi dobre a studenti nemaji pocit, ze jsou buzerovani prekladacem za to, ze nekde zapomeli strednik nebo spravne neodsadili nejaky radek.

Lua - popravde receno dneska studenti "vyzaduji" plnohodnotne IDE s kontextovou napovedou, automatickym doplnovanim kodu atd., tady Lua trosku ztraci (i kdyz ja sve skripty v Lua pisu stale ve Vimu :)