Jaký jazyk zvolit pro začátečníka

Rootlama

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #30 kdy: 15. 10. 2010, 15:55:28 »
Já začal s C# a přijde mi to celkem srozumitelný a lehčí jak Pascal. Ne že bych uměl .NET 4.0, ale dost věcí z .NET 1.0 (základy) bych dal.
Ale v IT bych asi začal jako tester. Co myslíte? Po mě na testech chtěj akorát Excel, klikat do aplikace a upravit si jednořádkový SELECT. Když se k tomu doučím Bash a základy Unixu, tak doufám, že by mě mohli někde vzít jako junior testera. A ne jenom na občanou brigádu za 70 na hodinu  :'(.
C++ mi přijde nejtěžší, pořád mi všechno padalo i na jednoduchých věcech.


pavel

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #31 kdy: 15. 10. 2010, 19:11:21 »
Nepatří to sem, ale přece:
Díky za ty odkazy, David Strejcy.

Program

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #32 kdy: 15. 10. 2010, 19:34:58 »
Jestli si to bude číst nějaký začáteční tak bych napsal pár bodů:
1) Pascal NE! To stejné, co se naučíte v pascalu, se třeba v C naučíte taky a z C vychází prakticky všechny dnešní prog. jazyky. Při učení programování se člověk chtě nechtě učí i samotný jazyk a pascal můžete následně klidně zapomenout. Je to tedy zbytečná práce.
2) C na začátek určitě dobré a jeho znalost se určitě bude hodit.
3) Java - Skvělý jazyk (nejen) pro začátečníka. Možná bych jej doporučil ze všeho nejvíce. Ale je nutné si uvědomovat existenci GC, že se ta paměť musí odalokovat, jen to dělá "jazyk" automaticky. Java vede k psaní čistého kódu, což je pro začátečníka docela užitečné.   
4) Python na výuku taky hodně dobrý jazyk. Jen si člověk musí krom GC uvědomovat i beztypovost, že tam ty typy jsou, ale jazyk je řeší. Ale to asi člověk časem pochopí sám.
5) C++ NE! Nejsložitější jazyk co snad existuje, je příliš obecný a nevede člověka (narozdíl třeba od javy) k čistému programování.
6) Perl také ne - to je jazyk pro zkušené programátory, kteří ví, co píší. (proto ho taky spousta lidí odsuzuje, protože v něm píší prasárny)
7) C# - nemám osobní zkušenosti
8) PHP také ne. To vás naučí leda špatné návyky

Jak jste si asi všimli vyzvedávám jazyky, co člověka tlačí do dobrého coding stylu. Pokud se toto nenaučíte a programujete jen pro sebe, tak maximálně po půl roce svůj program nepochopíte, ale v kolektivu vás poženou a budete se muset všechno přeučovat.

ondra.novacisko.cz

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #33 kdy: 15. 10. 2010, 20:10:50 »
2) C na začátek určitě dobré a jeho znalost se určitě bude hodit.
5) C++ NE! Nejsložitější jazyk co snad existuje, je příliš obecný a nevede člověka (narozdíl třeba od javy) k čistému programování.

S Javou bych pro výuku souhlasil, to je dobrý kompromis, s výhradou k GC a k nemožnosti vytvářet destruktory nebo objekty, které se sami likviduji v okamžiku kdy končí jejich platnost (tedy rychleji, než to dělá GC). Bohužel, tohle je vlastnost Javy, která se na první pohled zdá, že je bezvýznamná, ale pokud někdo hojně využívá destruktorů v C++ bude si v Javě připadat jako bez rukou a nohou.

Cituju oba body, protože bych je prohodil. Čisté C rozhodně víc svádí k prasárnám, než C++.

Coding style se dá naučit nezávisle na jazyku a je to čistě věc osobní disciplíny. Prasit se dá i ta Java. Viz mé počátky v Javě.

Semestralky, BP a DP

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #34 kdy: 15. 10. 2010, 20:12:53 »
1. volitelně Pascal a pak Object Pascal
2. C a pak C++
3. Pak i třeba Javu, nebo C#

Lidi, kteří se začali nejprve učit Javu a pak C#, už se nikdy nedokázali naučit napsat pořádný program v pointerovém jazyku. Opačně to šlo.

Pointery vychovávají schopné programátory, kteří skutečně ví, co jejich kód vlastně dělá. I když mě za to asi příznivci Javy sežerou:-)


D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #35 kdy: 15. 10. 2010, 23:28:27 »
Jenze prave proto, ze je to jazyk nizsi urovne, tak je mnohem vetsi pravdepodobnost, ze duvod chybneho chovani programu snaze najde

"Snaze najde"? Kdyz nekde v ramci programu pretecu prez hranice pole, tak v C v nejlepsim pripade program spadne - tzn. dostanu core dump. V C# dostanu hlasku "v souboru xyz na radce abc pretekl index pole". Nechapu, co je snazsiho na hledani chyby v coredumpu... A to coredump je jeste ten nejlepsi moznej zpusob, jak se chyba projevi.

Ano, snaze najde. Hlaska "v modulu/souboru xyc doslo k preteceni indexu pole", sice vypada docela pekne ale jeji uzitecnost je minimalni (mozna v pripade, ze jste omylem zamenil operatory). V pripade kdy pouzivate dynamicke struktury a pole muzete byt pekne v ... Coredump vam takovou hezkou halsku asi nevypise, ale bude alespon obsahovat stav aplikace a pokud mozno i kontext ve kterem doslo owerloadingu.   

A co kdyz vam selze sprava pameti - i to se stava, a neni to nic zas tak vyjmecneho, z duvodu, ktere zna jen on? V C/C++ pokud to nesprasi programator k nicemu takovemu by dojit nemelo. Jeste jednou - pokud to neprasi programator.

Navic pokud se Vam straci zdroje v C/C++ kodu, je chyba vetsinou odhalitelna primo v kodu - nejsou tam zadne tajuplne zasahy a invence ze strany kompilatoru....

Citace
Clovek si lejhce zvykne na to, ze spravu zdroju a podobne lahudky [...] za nej dela jazyk.

No a?

V C si zase člověk snadno zvykne na to, že se nemusí zamýšlet nad tím, do kterých registrů se co ukládá. A to je jako špatně?

Dneska se prostě vyvíjí v jazycích, které mají GC a podobná usnadnění. A když ho nemají, tak se tam dodělá poloautomatický GC (C++, Objective C). Není důvod se (obzvláště na úplném začátku) prudit s něčím, co člověk v praxi stejně nebude potřebovat.

Jenze o tom to asi je. Nesouhlasim s nazorem, ze vse co se dnes dela je jaksi automaticky lepsi - to ani omylem. Je docela nesmysl tvrdit, ze znalosti a zkusenosti se spravou zdroju nebude zacinajici programator nikdy potrebovat  - presne tento postoj vede pouze k tem typum programu, jake se v Pythonu, nebo C# pisi - zbytecne molochy resici ulohy, ktere by shellscript, nebo program v C/C++ zvladl v polovicni rezii, jen proto, aby byla programatorovy poskytnuta iluze, ze se muze oprit o funkcnosti, jejich spolehlivost je asi na stejne urovni, jako spolehlivost tydeni predpovedi pocasi. Tohle je lepsi? Ja tvrdim, ze ani omylem...

Java, C# a Python - na to by mel byt zbrojni pas....   
« Poslední změna: 15. 10. 2010, 23:58:05 od D.A. Tiger »

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #36 kdy: 15. 10. 2010, 23:29:54 »
Pointery vychovávají schopné programátory, kteří skutečně ví, co jejich kód vlastně dělá. I když mě za to asi příznivci Javy sežerou:-)

+100 naprosty souhlas.

hurda

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #37 kdy: 15. 10. 2010, 23:51:21 »
Všechno co tady lidi napsali jsou subjektivní věci a nemá moc smysl se podle toho řídit. Není možné obecně říct jestli je lepší začít s jednoduchým jazykem a potom přejít na složitější. To záleží na tom, co komu vyhovuje.
Já bych doporučil nejdřív začít se základními algoritmy a datovými strukturami. Programovací jazyk není až tak podstatný a vybíral bych si podle množství a kvality dostupných materiálů a ne podle toho co je zrovna in nebo co kdo radí jako zaručený postup.

David Strejc

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #38 kdy: 16. 10. 2010, 08:06:59 »
Nepatří to sem, ale přece:
Díky za ty odkazy, David Strejcy.

:o))) Sice jako v kazdem programu i tady je chyba (nejsem David StrejcY ale David Strejci ;o))) Tvrdej jsem jak blazen to je jasny ;o) A pro vsechny, kteri maj radi UNIX (Live Free Or Die) - fakt doporucuju si precist uplne vsechny koany zde:

http://catb.org/esr/writings/unix-koans/

Je to starsi, lec platne cteni ;o) (je to starsi, ale platny kod {kdyz Luk Skywalker leti na Endor a Darth Vader se pta, jestli maji platny kod ;o))})

Je to i v The Art of Unix Programming - z toho jsem si odnesl tu nejdulezitejsi vec a myslim, ze je to i tady do diskuze platne ;o) - NIC NEOPTIMALIZOVAT!!!!!!!!!! - funguje to v Pythonu? Fakt to dela to, co chces? Pak si radsi koupim rack serveru (cca pul milionu), nez abych platil pul roku optimalizatora, ktery to bude prevadet do Ccka - proc? Proc proboha? Zaprve tim ziskam to, ze mam pul roku volneho cloveka a za druhe ... Python neni zas az tak pomaly ... Stroje to spocitaj. ;o)

bubavanek

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #39 kdy: 16. 10. 2010, 13:11:52 »
No tak jsem přehodnotil své stanovisko, asi začnu s Cečkem, prozatím jsem našel na internetu lepší dokumentaci.
Moc vám všem děkuji

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #40 kdy: 16. 10. 2010, 14:56:31 »
novacisko:
Citace
Které moderní jazyky jste zde měl na mysli?
Např. Java, C#, Delphi, dokonce i blbý php. Všechny tydle jazyky např. podporují interfacy, které se sice dají V C++ emulovat vícenásobnou dědičností, někdy to ale vyžaduje virtuální dědičnost a to ne vždy jde (např. u interfaců z cizí knihovny).
Další věc, která v C++ není jsou např. anonymní funkce, které se používají jako handlery, s member pointery taky není úplně ideální práce atd... Není to samozřejmě nic, co by nešlo obejít, ale objektově se dá psát i v assembleru, ale v jiných jazycích má člověk víc předpřipravených programátorských idiomů.

Citace
A co kdyz vam selze sprava pameti - i to se stava, a neni to nic zas tak vyjmecneho, z duvodu, ktere zna jen on?
Co to znamená selže správa paměti? Tobě se jako v javě stalo, že ti něco alokátor odalokoval, když neměl???

Citace
V C/C++ pokud to nesprasi programator k nicemu takovemu by dojit nemelo. Jeste jednou - pokud to neprasi programator.
Jenže to je právě to o čem mluvíme. Pokud se člověk učí programovat, tak dělá chyby. Takže na učení je vhodnej jazyk, kterej mu jasně a srozumitelně řekne kde je chyba. To C není - např. chyba v mezích pole se projeví jen tím, že se přepíše hodnota nějaké jiné proměnné a program běží dál....

Další nevýhoda C je v tom, že je to velmi výrazově bohatý jazyk. Což ale vede k těžko odhalitelným chybám, púamatuju si, jak jsem kdysi asi den ladil to, že místo
(*c)++ jsem napsal *c++. Skončilo to přepsáním CMOSKY a nefunkčním tátovým počítačem :-).

Jinak já netvrdím, že ty všechny výhody, které C má (že dělá jen to, co člověk chce) nejsou pro učení podstatné. IMHO každej programátor by měl někdy v takovém jazyku psát. Akorát nejsem přesvědčen, že (obzvlášť pro samostudium, kde Ti tu chybu nikdo nenajde) je vhodné s ním začínat.
Nicméně po nějaké průpravě s Delphi a Visual basicem to asi už jde....

ondra.novacisko.cz

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #41 kdy: 16. 10. 2010, 19:28:02 »
novacisko:
Citace
Které moderní jazyky jste zde měl na mysli?
Např. Java, C#, Delphi, dokonce i blbý php. Všechny tydle jazyky např. podporují interfacy, které se sice dají V C++ emulovat vícenásobnou dědičností, někdy to ale vyžaduje virtuální dědičnost a to ne vždy jde (např. u interfaců z cizí knihovny).
Další věc, která v C++ není jsou např. anonymní funkce, které se používají jako handlery, s member pointery taky není úplně ideální práce atd... Není to samozřejmě nic, co by nešlo obejít, ale objektově se dá psát i v assembleru, ale v jiných jazycích má člověk víc předpřipravených programátorských idio...

Ja tedy nevim, ale ja jsem interfaci bral jako emulaci neexistujici vicenasobne dedicnosti, a to z implementacnich duvodu. C++ prave ma pravou vicenasobnou dedicnost a vsichni znaji jeji omezeni. To ze do toho pletete virtualni dedicnost spis ukazuje, ze varite z vody. Objektove programovani ve skutecnosti zadne interfacy nema, a vicenasobna dedicnost ma tak nejak blize k OOP nez interfacy. Interace je popis protokolu komunikace s objektem a ten lze popsat jak interfacem tak abstraktni tridou v C++

Anonymni funkce lze vzdycky nahradit neanonymni. 100% nahrada.

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #42 kdy: 16. 10. 2010, 20:45:44 »
Anonymni funkce lze nahradit neanonymnimi? Ano, i v assembleru lze psát objektově. Bohužel
1) funkce se definuje jinde než se používá, tzn. kód je hůře čitelný
2) namespace se zaplácává zbytečnejma identifikátora a tím např. stěžuje orientaci v kódu pomocí automatizovanejch nástrojů, zapleveluje automaticky generovanou dokumentaci etc...

---
ad interfacy: Mám knihovnu, ve které je interface IA a IB poděděné z IA. Implementuju objekt A implementující IA a jeho potomka B implementujícího IB. Přestože objekt B má všechny metody interfacu IA, C++ kompilátor zařve, že mu schází všechny metody IA, poděděné skrze IB.
Proto pomocí vícenásobné dědičnosti v podání C++ neimplementují vše, co nabízejí jiné jazyky v podobě interfaců.

Řešit to lze pomocí virtuální dědičnosti, ale
1) knihovna, ve které mám ty interfacy nemusí být moje a tedy nemusím mít možnost ji upavovat
2) i pokud je knihovna moje, tak proč bych musel při návrhů interfaců přemýšlet o tom, jestli se někdy budou nebo nebuou účastnit diamantové dědičnosti? To je čistě záležitost implementace a proto do návrhu interfaců nepatří.
3) Řešit to celé tím, že všechny interfacy budou děděné virtuálně taktéž není řešením, neboť hlubší virtuální dědičnost má velké nároky na výkon.

Citace
prave ma pravou vicenasobnou dedicnost
Ano, C++ má pravou vícenásobnou dědičnost. Bohužel není v praxi příliš použitelná.
Jediné, co v C++ odpovídá vícenásobné dědičnosti tak, jak ji chápe OOP je vícenásobná virtuální dědičnost.A ta je natolik paměťově i časově náročná, že se používá minimálně.
Běžně užívaná prostá vvícenásobná dědičnost se již chová jinak, než by člověk čekal: je to něco mezi dědičností a kompozicí.

Navíc rozlišování mezi virtuální a nevirtuální dědičností vede k tomu, že musím u předka přemýšlet nad tím, jací a jak budou implementováni potomci (a jestli tedy musím dědit virtuálně či ne). Což je úplný opak toho, o co se snaží OOP - aby jednotlivé objekty byly implementovány samostatně.

Citace
a vsichni znaji jeji omezení
I v assembleru lze psát objektově a všichni znají jeho omezení. Přesto bych na objektové programování doporučil jiný jazyk.

Implementace vícenásobné dědičnosti v C++ má svoje plusy a svoje mínusy.Když píšu v C++, vadí mi absence interfaců (respektive její ne uplně dobrá emulace pomocí vícenásobné dědičnosti), když píšu v jiných jazycích, někdy mi vadí absence vícenásobné dědičnosti.
Přesto myslím, že jak mé zkušenosti, tak i obecná praxe a výsledek vývoje nových programovacích jazyků ukazuje, že interfacy jsou daleko užitečnější než vícenásobná dědičnost: zatímco snad všechny moderní jazyky mají interfacy, snad žádný neimplementuje vícenásobnou dědičnost. Přičemž vzhledem k tomu, že drtivá většina z nich je interpretovaná či alespoň runtime kompilovaná, nebyl by s přidáním vícenásobné dědičnosti žádný problém.

Semestralky, BP a DP

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #43 kdy: 16. 10. 2010, 21:10:15 »
Nepatří to sem, ale přece:
Díky za ty odkazy, David Strejcy.

:o))) Sice jako v kazdem programu i tady je chyba (nejsem David StrejcY ale David Strejci ;o))) Tvrdej jsem jak blazen to je jasny ;o) A pro vsechny, kteri maj radi UNIX (Live Free Or Die) - fakt doporucuju si precist uplne vsechny koany zde:

http://catb.org/esr/writings/unix-koans/

Je to starsi, lec platne cteni ;o) (je to starsi, ale platny kod {kdyz Luk Skywalker leti na Endor a Darth Vader se pta, jestli maji platny kod ;o))})

Je to i v The Art of Unix Programming - z toho jsem si odnesl tu nejdulezitejsi vec a myslim, ze je to i tady do diskuze platne ;o) - NIC NEOPTIMALIZOVAT!!!!!!!!!! - funguje to v Pythonu? Fakt to dela to, co chces? Pak si radsi koupim rack serveru (cca pul milionu), nez abych platil pul roku optimalizatora, ktery to bude prevadet do Ccka - proc? Proc proboha? Zaprve tim ziskam to, ze mam pul roku volneho cloveka a za druhe ... Python neni zas az tak pomaly ... Stroje to spocitaj. ;o)


Každý OS musí mít optimalizovanou minimálně správu přerušení, aby jejich okamžitá obsluha dokončila svou činnost co nejdříve. Že se někde nedá použít /O3 je dáno hardwarem, ne programátorským přesvědčením o čistotě kódu. Další ukázkou optimalizace, která ukazuje nesmyslnost přístupu "koupím další rack" (kromě toho, že asi volné místo na další racky nejspíš není nafukovací), je eliminace BigLocku v SMP kernelu Linuxu.

Ultimator

Re: Jaký jazyk zvolit pro začátečníka
« Odpověď #44 kdy: 16. 10. 2010, 21:11:06 »
Vy mu teda dáváte. Další přesvědčený na jazyk C. Jestli v tom bude vyvíjet OS pro Oracle, drivery, signálové procesory nebo programovatelné logické obvody, tak ať se to učí. C není nic jiného než assembler. Jenže to on dělat nebude!
Jasně vám napsal, že umí PHP, HTML a CSS a je to teda lampasák, jesli vám to něco říká. A protože zná i základy Visual Basicu, tak by se mu hodilo se ho pořádně doučit a přidat k tomu C#. Ale konkurence je fakt velká, musíš znát ještě databáze, ASP.NET a slušně MS Sharepoint, jinak ti nedají ani toho Junior Programmera.