Porovnání C a Javy pro začátečníka

sparrow

Re: Porovnání C a Javy pro začátečníka
« Odpověď #45 kdy: 21. 01. 2011, 12:36:50 »
Ke studiu Javy je vhodný MIT OpenCourseWare(odkaz níže). Je to sedm lekcí Javy z MIT, po každém cvičení je tam zadaný úkol se zdrojáky. Používal jsem to a pak pro mě kurz Javy na FI byl snažší. Knížka Java pro zelenáče je skvělá, autor je kapacita, jenže díky tomu se to téměř nedá sehnat, leda v knihovně. Jediná nevýhoda je, že látku poměrně rychle přerostete. Nebo se podívej po kurzech Javy na českých vysokých školách, určitě nějaké materiály najdeš.

Btw. srovnávat C a Javu je jako srovnávat jablka s hruškama :)

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-092-introduction-to-programming-in-java-january-iap-2010/


Re: Porovnání C a Javy pro začátečníka
« Odpověď #46 kdy: 21. 01. 2011, 13:20:41 »
Aká degradácia typovej informácie? Tá typová informácia tam samozrejme stále je:
Je tam, ale kontrolujeme ji až za běhu. To je stejné jako v pythonu. Tam taky typová informace je (python je silně typovaný), nemůžeme ale provést typovou kontrolu při překladu (python je dynamicky typovaný).

Lukas

Re: Porovnání C a Javy pro začátečníka
« Odpověď #47 kdy: 21. 01. 2011, 15:46:39 »
Ja osobne bych zacatecnikovi, ktery ma zkusenosti s webem doporucil se naucit kombinaci C# a C++, poradi je otazka, ja osobne jsem se ucil nejdriv C++ a pak C# ale podle me to neni tak dulezite. Doporucil bych tyhle dve, proste proto ze s tou kombinaci mam dobre zkusenosti. Navic se mi zda ze Java ( stejne jako C# winforms ) v zakladu nepouziva HW akceleraci, coz na rychlosti GUI nijak nepridava, kdezto WPF jo, a GUI je krasne svizne a hezke, coz v dnesni dobe "prodava" =)

V C++ se naucit delat do konzole, hlavne pochopit praci s pointery a STL. Vic podle me neni potreba.

C# se naucit kvuli GUI, WPF je dobra cesta jak prijit rychle k peknemu rozhrani, navic prace s XAML je hodne podobna klasickemu HTML a pro webare je z toho takovy ten pocit "to znam".

Hodne, hodne moc dulezita vec kterou je v dnesni dobe potreba se naucit jsou thready, s tema nvm jak moc poradit, ja sem se je naucil v C++ na CVUT, na webu nvm jak by byl kvalitni material, ale spis bych doporucil k "samouceni" bez vykladu C# protoze C++ hodne logickych chyb bez reci prezvejka a clovek se nic nenauci protoze pak cumi na chybu a nevi kde kdy a proc.

Do zacatku to budes delit, pokud bude cilem aplikace vykon, napises to v C++, pokud look, napises to v C#. Jakmile prijde chvile kdy to budes potrebovat spojit a mit oboji tak se naucis importovat DLLka ( coz je v C# jen o malo tezsi nez import knihovny ) a ses za vodou dokud nedojdes k tem threadum, jakmile pochopis ty, tak uz vicemene chapes vse je potreba a uz se budes ucit veci specificke pro tvoji ulohu.

Re: Porovnání C a Javy pro začátečníka
« Odpověď #48 kdy: 21. 01. 2011, 15:58:27 »
@Lukas: To jsou presne dovednosti a schopnosti, ktere zacatecnik nepotrebuje. Zacatecnik potrebuje pochopit kompozici a dekompozici, algoritmy a datove struktury. Nepotrebuje loadovat DLL nebo malovat okenka. To je az aplikace neceho elementarnejsiho.

alefo

Re: Porovnání C a Javy pro začátečníka
« Odpověď #49 kdy: 21. 01. 2011, 16:08:54 »
V Jave sa GUI aplikácie extrémne nepresadili presne kvôli mýtu, že ,,Java je pomalá", a to je dôvod, prečo sú prakticky jediné killer GUI aplikácie len prostredia na vývoj v Jave.

Paradoxne, situácia dnes je úplne inde a napr. v NetBeans je možné naklikať aplikáciu práve tak, ako kedysi v Delphi. (A Swing je hardvérovo akcelerovaný :-))

Ako tvrdí kolega, začiatočník potrebuje uchopiť algoritmizáciu a dátové štruktúry, prípadne možnosti knižníc, ktoré povedú k funkčnému a ,,aha aha, čo som naprogramoval" programu.

Ide o to, aby začiatočník vedel zapísať idey v nejakej prístupnej forme a nemusel zápasiť s hardvérom, resp. technickými aspektami jazyka.
Pokročilé elementy ako ,,naučme sa pointre, lebo kto nevie pointre, je lama", zmienené thready a kadejaké ďalšie vylomeniny sa dajú pokojne urobiť aj neskôr.


Lukas

Re: Porovnání C a Javy pro začátečníka
« Odpověď #50 kdy: 21. 01. 2011, 16:26:43 »
DLL, thready atd jsem psal az v konecne fazi samozrejme na relativne pokrocilou aplikaci, mozna jsem je radsi nemel zminovat, jen sem si vzpomnel na noci nad semestralkou s hlaskou segmentation fault tak jsem se mirne zasnil =)
 
Ale s nazorem "nepotrebuje malovat okenka" nesouhlasim, neni to prece jen o malovani, ale o pochopeni predavani udalosti a zprav a vubec o nejakem alespon trosku reprezentativnim vzhledu aplikace. To ze napise cely vykonny kod do obsluhy tlacitka je vec druha, ale kazdy nejak zacinal, hlavne ze pochopi jak se predavaji hodnoty mezi objekty atd.

daemonna

Re: Porovnání C a Javy pro začátečníka
« Odpověď #51 kdy: 21. 01. 2011, 16:53:41 »
jazyk C urcite nie.. ak chces byt pouzitelny programator tak najprv sa nauc principy OOP a potom vyberaj jazyk...

ak c++, tak jednoznacne Qt (qt.nokia.com)
ak java, tak hlavne pozeraj na java 1.6 a vyhni sa vsetkym historickym manualom ;)

Inkvizitor

Re: Porovnání C a Javy pro začátečníka
« Odpověď #52 kdy: 21. 01. 2011, 20:51:15 »
blizboz: Pokud jsem Váš příspěvek dobře pochopil, tak to, co jste popsal, rozhodně není polymorfismus. Polymorfismus je možnost používat stejný interface u objektů různých typů a nikoliv schopnost konkrétního objektu (instance) "měnit svůj tvar". Pokud jsem tedy pochopil Váš příspěvek správně, nejsem to já, kdo potřebuje něco doučit. S tou degradací to už vysvětlili jiní. Jde o degradaci ve smyslu omezení schopnosti kompilátoru rozhodnout o správnosti kódu, omezení samodokumentovatelnosti kódu, zhoršení čitelnosti kódu a zvýšení rizika zavlečení chyby (příklad s prostitutkou a kondomem).

Inkvizitor

Re: Porovnání C a Javy pro začátečníka
« Odpověď #53 kdy: 21. 01. 2011, 21:22:41 »
Ale teď zpátky k tématu. Podle mě je stejně důležité, jako se naučit programovat, naučit se neprogramovat. Základem by mělo být vždycky vyřešení konkrétní úlohy a to může být nejrychlejší v tabulkovém procesoru, v databázi typu Access, v nějakém programu pro statistiku atd. Tedy zvládnout doménu, ve které se úloha nachází, porozumět zadání a korektně vyřešit úlohu v nejkratším možném čase. Pochopit význam Parettova pravidla a nesnažit se v řešení jít dál, než je nutné. Troufám si tvrdit, že není špatné začít zrovna tady.

Další úrovní je pak logicky naučit se jazyk, který má dostatečně velkou abstrakci a velkou zásobu standardních knihoven. Navrhoval jsem Python, ale existují i jiné alternativy (třeba Ruby). V takovém jazyce je možné snadno vyřešit spoustu úkolů bez velké námahy a bez vynalézání kola.

Pokračoval bych algoritmizací - naučit se základní algoritmy (řazení, binární vyhledávání, procházení do šířky a do hloubky) a porozumět datovým strukturám typu strom nebo hash. Naučit se základy OOP a pochopit jeho výhody i nevýhody. Zde je možné pokračovat v Pythonu (Ruby...) nebo zkusit třeba Scalu, Javu, C#. Statické jazyky vedou k lepšímu pochopení úlohy typů, parametrizace, variance apod.

Další krok je naučit se teorii složitosti (Amdahlův zákon), základy vícevláknového / víceprocesového programování (synchronizace, komunikace apod.) a zjistit, že existují úlohy, které jsou paralelizovatelné a úlohy, u nichž dominuje sekvenční složka.

Naučit se SQL, vztahy mezi tabulkami, normální formy, pochopit význam indexů, případně si něco zjistit o relační algebře. Nastudovat si význam a použití uložených procedur.

Teprve pak bych doporučoval nořit se hlouběji do operačního systému, naučit se C a případně C++, pochopit, jakým způsobem se alokuje paměť, naučit se pointerovou aritmetiku atd.

Co zbývá? Exkurze do jiných paradigmat (funkcionální a logické programování), ASM, textové algoritmy, základy konstrukce kompilátorů atd. atp.

Samozřejmě lze jít i jinou cestou - začít si programovat milion šestý grafický nebo textový editor v C, udělat si framework, který už existuje (a pravděpodobně je daleko lepší, než ten, který si člověk bez dostatečných zkušeností a s omezeným časem udělá sám a i tato cesta člověka mnohé naučí. Osobně doporučuju jít obecně "odshora dolů" a ne naopak. Ale to je na každém.

blizz

Re: Porovnání C a Javy pro začátečníka
« Odpověď #54 kdy: 22. 01. 2011, 01:00:53 »
Polymorfismus je možnost používat stejný interface u objektů různých typů a nikoliv schopnost konkrétního objektu (instance) "měnit svůj tvar".

Citujem:

Citace
inkluzívny polymorfizmus: objekt môže patriť do viacerých typov, ktoré sú usporiadané podľa inklúzie. Objekt podtriedy sa môže vyskytnúť všade tam, kde sa vyžaduje objekt niektorej z jeho nadtried.

zdroj: http://neuron.tuke.sk/~zvada/statnice/I/07/index.html#polymorfizmus

Citace
Polymorfizmus (viacznačnosť) je schopnosť objektu nadobúdať viacero foriem. Najčastejšie použitie polymorfizmu je vtedy, keď v referencii na triedu rodiča používame odkaz na objekty triedy potomka.

zdroj: http://kiwiki.fmtnuni.sk/mediawiki/index.php/Java_-_polymorfizmus

Citace
Polymorfismus (lze česky označit jako mnohotvárnost) je způsob přístupu k instancím a je to nejvyšší stupeň OOP.
Odborně řečeno: polymorfismus spočívá v praxi například v tom, že na místo, kde je očekávána instance nějaké třídy, můžeme dosadit i instanci libovolné její podtřídy (třídy, která přímo či nepřímo z této třídy dědí), která se může chovat jinak, než by se chovala instance rodičovské třídy (ovšem v rámci mantinelů daných popisem rozhraní).

zdroj: http://programujte.com/?akce=clanek&cl=2007021001-kurz-delphi-ii-5-lekce

Stačí? Najprv si doštudujte základy OOP.

iwtu

Re: Porovnání C a Javy pro začátečníka
« Odpověď #55 kdy: 22. 01. 2011, 01:24:25 »
Ale teď zpátky k tématu. Podle mě je stejně důležité, jako se naučit programovat, naučit se neprogramovat. Základem by mělo být vždycky vyřešení konkrétní úlohy a to může být nejrychlejší v tabulkovém procesoru, v databázi typu Access, v nějakém programu pro statistiku atd. Tedy zvládnout doménu, ve které se úloha nachází, porozumět zadání a korektně vyřešit úlohu v nejkratším možném čase. Pochopit význam Parettova pravidla a nesnažit se v řešení jít dál, než je nutné. Troufám si tvrdit, že není špatné začít zrovna tady.

...

Krásny príspevok. Neradím počuvať niekoho, kto navrhuje jednoznačné, ba dokonca najlepšie riešenie.

iwtu

Re: Porovnání C a Javy pro začátečníka
« Odpověď #56 kdy: 22. 01. 2011, 01:34:05 »
Citujem:

Citace
inkluzívny polymorfizmus: objekt môže patriť do viacerých typov, ktoré sú usporiadané podľa inklúzie. Objekt podtriedy sa môže vyskytnúť všade tam, kde sa vyžaduje objekt niektorej z jeho nadtried.

...
...
...
Stačí? Najprv si doštudujte základy OOP.

Ono všetky tie definicie sú pravdepobne ekvivatelné a problém je s pochopením slova mnohotvátvosť. Najviac sa mi páči definícia s inklúziou, i keď by ma neprekvapilo, keby pre veľa ľudí bola nezromiteľná. Prosím, prv nez začnete machrovať definiciami na jedno kopyto, najprv pochopte sémantiku písma a nie iba syntax. V tomto osobne skôr súhlasim s inkvizitorom, lebo pod zmenou tvaru fakt prestavím zmenu tvaru a nie ten istý tvar iba osekaný o nejaké veci (to je tá inklúzia). Ako najčistejši polymorfizmus mi prídu interfacy.

ale mýslim, že je to úplne offtopic.

andy

Re: Porovnání C a Javy pro začátečníka
« Odpověď #57 kdy: 22. 01. 2011, 02:19:48 »
alefo problem nie je v rychlosti gui, ale pusti si azureus a potom utorrent a pochopis.

Inak autor tohoto vlakna sa musi dobre zabavat..

alefo

Re: Porovnání C a Javy pro začátečníka
« Odpověď #58 kdy: 22. 01. 2011, 07:46:50 »
Citace
alefo problem nie je v rychlosti gui, ale pusti si azureus a potom utorrent a pochopis.
Vieš to rozviesť? (Okrem toho, že uTorrent má 300kB a Vuze 8MB).

andy

Re: Porovnání C a Javy pro začátečníka
« Odpověď #59 kdy: 22. 01. 2011, 15:49:28 »
No keby 8MB, lenze ked to pustim tak asi 10s, oo.org sa pusta rychlejsie, cucne si 145M, k tomu mi bezi netbeans, firefox+par dalsich veci a uz ma disk chudak co robit. Zato utorrent zabere prijemnych 17M v pamati, starsia verzia tak 7 a spusti sa instantne. Java proste nie je prisposobena moc dobre na desktop, nejde o nejake programatorske vymozenosti, ale o to co ma z toho uzivatel. Ale na serveri jednoznacne ano.