C# nebo Python?

ToMePodrz

Re:C# nebo Python?
« Odpověď #45 kdy: 24. 01. 2014, 23:01:42 »
Hosi hosi,


tuny pradnych kecu o tom, jak je nekdo linej pouzit google. Zabere
vic casu precist vsechny vase prispevky nez "najit spravnou odpoved".

Z pythonem jsem zacinal, a muzu vam rict, jakmile jsem mel
v hlave nacrt aplikace, okamzite jsem na tom zacal delat, a verte,
ze to dlouho netrvalo a byla hotova. Samozrejme jsem ji musel jeste
jednou prepsat, bylo to po roce a bylo tam par zbytecnych radku kodu.

Nic vic, nic min. Co je zaklad uceni  ?  Nabirat informace o vecech ktere
neznam. Ne nechat si nasbirat informace ktere si pak jen prectu, nepochopim
to, a jsem tam, kde jsem byl na zacatku.

Tod asi vse k te vasi zbytecne diskuzi.







iwtu

Re:C# nebo Python?
« Odpověď #46 kdy: 25. 01. 2014, 11:13:49 »
Díky itwu, žes nám sdělil, že tebe průměr nikdy nezajímal. To jsme fakt všichni potřebovali vědět.
Že jazyk není to, co dělá programátora programátorem, to je přece banální pravda, kterou nikdo nerozporuje. Jenže když někdo ještě programátor není a žádný jazyk neumí, tak holt nějaký jazyk potřebuje. A pro začátečníky je zásadní rozdíl v jakém jazyce se učí programovat. Jak rychle jim to půjde, jestli je to bude bavit, jestli rychle dosáhnou nějakého zajímavého výsledku, který je potěší a utuží. Anebo jestli se zamotají do problémů a vzdají to. A všechny tohle se umocňuje, když se jedná o samostudium neprogramátora.

Fakt myslíš, že tvůj příspěvek - kromě toho, že asi tobě pomohl upevnit ego - nějak pomůže začátečníkovi? Jo vlastně, ještě je tam rada stanovit si cíl - ale ten on už má - naučit se programovat v C#, ve kterém chce potom něco dělat.

Ak je cielom sa naucit programovat v C#, tak potom je C# logicka volba. Ked je so C# problem, idem za niekym, kde svoj problem popisem a skusim sa pohnut dalej. Ak mi to nepomaha, je nieco spatne. Ale ciel, alebo jazyk, ktory je nahodou sucastou ciela. Alebo nieco, co ma nenapada. Mna kedysi ucili v skole chvilu Delphi s OOP a nechopil som ho ani za boha. Davali tam ukazkove priklady polymorfizmu, ktore avsak nemalo v ziaden ulohe zmysel pouzit, lebo som kazdu ulohu spravil bezproblemom s tym, co som vedel.

Ibaze tu sa riesi jazyk. A zaciatocnikovi je urcite najlepsie vysvetlit rozdiel medzi 20 jazykmi, ktore nema sancu pochopit a samozrejme vecny Lisp, Schceme..

A potom si predstav, ze existuju zaciatocni, pre ktorych je najlepsia volba C. Pre inych assembler. Pre inych PHP. Pre niekoho C#. Ja ak sa tak spatne divam, pre mna bola vhodna volba prveho jazyka C, lebo som sa chcel hrat s pointrami. Aj keby som asi nic nenamietal preti Pythonu. No ja som clovek, ktory si chcel vychodit cestu s rozumnou nizkou abstrakciou, co je C az po C#, C++11. V Pascale som stravil roky, lebo som ani nevedel, ze nejake C existuje.

Teda chlapec, namiesto toho, aby tu ludia mi prikazovali aky jazyk sa ma ucit, ma 2 moznosti.

1. popise aky ma v C# s OOP problem, pokusime ma mu pomoct. Neviem, ako OOP chape on, ja som typ cloveka, ktory to plne pochopi, az ked take nieco vyuzije odrazu sa hodi v praxi.
2. hm, narazil, skusi iny jazyk. Napriklad Python.
3. vykasle sa na to.
4. bude sa stale tocit do kolecka

V OOP je dolezite poznat SOLID princip, navrhove vzory atd.. Ale mne pride kontraproduktivne, zaciatocnika ucit co je SOLID princip a za kazdu cenu ho presvedcit, ze sa mu hodi. Radsej nech nevie, co je SOLID princip naprogramuje nieco vacsie, par krat to zmeni tak sa bude sam zamysliat. Zaciatocnik sa podla mna musi ucit na vlastnych chybach. Ucit ho slepo best practises je ako memorovanie poezie bez jej prezitia.

A z prispevkov tuna mam dojem, ze kazdy mu chce tu ten najlepsi jazyk a best practises..

Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re:C# nebo Python?
« Odpověď #47 kdy: 25. 01. 2014, 13:31:02 »
Prave nutnost pisat zatvorky pri bezparametrickej funkcii je specialita jazyka C (a jazykov z neho vychadzajucich). Ostatne jazykove rodiny (Pascal, Modula, ML, Lisp, Basic, Ruby, ADA, Eiffel) nic take nevyzaduju. Vo funkcionalnych jazykoch zvykne byt ()  specialny typ.

- Závorky u funkce bez argumentů je naprosto logická věc, která umožňuje distinkci mezi funkcí a voláním té funkce.

- Existuje spousta jazyků, co to vyžaduje a není pascal - like, např. Python, Fortran, Go...

- Lisp závorky pro evaluaci funkce bez argumentů vyžaduje (jen u něj je operátor zavolej funkci jiný, nikoli závorky za názvem funkce, ale kolem funkce (jsem si vědom částečného významového rozdílu)).

- Na jedné straně mluvíš o rodině C like jazyků, kde házíš vše do jednoho pytle (i když např. takové C a Javascript jsou naprosto odlišné jazyky), a na druhé straně děláš výčet s Pascalem, Modulou a ADou, přitom druzí dva jsou přímí potomci pascalu.

- Co se týče např. Basicu, tak sám microsoft v dokumentaci tvrdí, že se sice závorky mohou "omitnout", ale že to nedoporučuje dělat kvůli čitelnosti...

- V Ruby zas díky tomu, když chci udělat operátor map, tak místo čistého pole.map(f) musím vytvářet lambda funkci pole.map(|e| f(e)) - vopičárna

- Většina z Tebou uvedených jazyků se v praxi moc nepoužívá.

Když to shrnu - tak ano, existují jazyky, které umožňují závorky nepsat, ale není pravda, že je to jen jedna rodina jazyků, je to naopak většina dnes v praxi používaných jazyků a asi i rodin jazyků, je to většina jazyků vzniklých v poslední době -  za good habit se to považuje i v imperativních jazycích které to striktně nepožadují a ty jazyky, které to nepožadují, za to platí nutností speciální konstrukce pro zápis "funkcionálních" operací.













Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re:C# nebo Python?
« Odpověď #48 kdy: 25. 01. 2014, 14:24:42 »
...
Za běhu Python nerozlišuje typy, ale tagy.
....

Směšuješ informaci s implementací. To, že má nějaký objekt uloženou informaci o svém typu pomocí tagů je sice hezké, ale nic to nemění na tom, zdali ten objekt má nebo nemá typ a zdali ten typ je nebo není odlišný od typu jiného objektu.
V této oblasti je terminologie poměrně dost dobře ustálená a dá se říci:

Python je typový jazyk, neboť objekty si s sebou nesou informaci o svém typu a můžeš se na jejich typ zeptat (např. fce isinstance, __class__ vlastnost objektu atd...).
To, že python nevyžaduje deklaraci typu proměné (někdy se mluví o slabé typovosti) a že nemá type-checking (ani statický, ani dynamický) na věci nic nemění.

Beztypový jazyk je např. lisp (all is list), asi by se za něj dal považovat i javascript (pokud se budeme bavit o objektech a pomyneme to, že kromě nich tam existuje pár primitivních typů jako číslo atd...)

PS: Ad ten blog (Dynamic languages are static languages) - tak autor toho blogu nerespektuje vžitou terminologii (co je typ, třída atd...) a to, že se ohání Widgensteinem na tom nic nemění. Vymyslel si vlastní definici pojmu typ a pak dokazuje, jak jsou dynamicky typované jazyky omezené, protože v té jeho definici mají pouze jeden typ.
To pak prohlašuje jako nevýhodu, přitom tam má pouze dva argumenty, proč tomu tak je. Z toho jeden z nich je špatně (i v dynamicky typovaném jazyku lze zajistit invariant, že do dané metody vstoupí jen argument daného typu, jen je zpravidla (ale ne nutně!) kontrola vykonávána v runtime, což má své nevýhody ale i výhody, např. v preciznější kontrole) a jeden z nich je napůl nepravda a napůl půpravda (že dynamic typing stojí více procesorového času: zaprve, s JIT kompilerem to nemusí platit, zadruhé, static typing zas zabere víc času při překladu a čas programátora je dnes dost často dražší než čas počítače....)



Radek Miček

Re:C# nebo Python?
« Odpověď #49 kdy: 25. 01. 2014, 14:47:15 »
Citace
Python je typový jazyk, neboť objekty si s sebou nesou informaci o svém typu

Nikoliv, v drtivé většině jazyků typy za běhu neexistují. Typ termu aproximuje vlastnosti jeho hodnoty. Za běhu tyto aproximace nepotřebujete, tam totiž znáte přesné hodnoty.

Citace
Ad ten blog (Dynamic languages are static languages) - tak autor toho blogu nerespektuje vžitou terminologii (co je typ, třída atd...)

Myslím, že autor blogu ví velmi přesně, co to je typ. Bohužel mnoho ostatních lidí význam pokřivilo.

Citace
Vymyslel si vlastní definici pojmu typ a pak dokazuje

Ne, typy vymyslel Bertrand Russell. Typy byly původně záležitost logiků, matematiků a filozofů. Harper se tedy naopak drží matematického významu slova typ.


Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re:C# nebo Python?
« Odpověď #50 kdy: 25. 01. 2014, 15:08:57 »
Ano, můžete používat slovo "typ" pro pojem, pro který ho používal Russell. Pokud ale odborná veřejnost v oboru informatika toto slovo už používá pro pojem jiný, pak je dobrým zvykem se přizpůsobit. Jinak totiž diskuse nemá smysl, protože jeden o koze a druhý o voze. Pokud už se přizpůsobit nechcete, tak je dobré diskusi uvést tím, že vlastně mluvíte o něčem jiném než ostatní. Ale pak je zas otázka, proč o tom vůbec mluvíte, že? :-)
(Když si vyjasníme mapování slovo - pojem, tak defakto na příspěvek Python má vlastnost A jste odpověděl: nikoli, Python nemá vlastnost B).

PS: Mimochodem dosti pochybuji, že pojem typ vymyslel Russel. Nejsem odborník na Russela, ale dovolil bych si tvrdit, že filosofové už mnohem dříve operovali s tímto pojmem, byť třeba pro jeho označení použili slovo jiné (např. čím se to liší od Platónových ideí?), Russell tento pojem pouze uvedl do vztahu s formální logikou a označil ho jiným slovem.


Radek Miček

Re:C# nebo Python?
« Odpověď #51 kdy: 25. 01. 2014, 15:32:03 »
Citace
Pokud ale odborná veřejnost v oboru informatika toto slovo už používá pro pojem jiný, pak je dobrým zvykem se přizpůsobit.

Právě že odborná veřejnost v oboru informatika / typové systémy používá význam z knihy Types and Programming Languages, který se shoduje s Harperovým významem.

Když pak mluvíte o jazycích s více typy jako je C# nebo Scala, tak je poměrně matoucí používat slovo typ ve dvou významech - jak navrhujete vy.

Uvažte třeba prázdný seznam Nil - ten má nekonečně mnoho typů (třeba List[Int], List[String], List[Nothing], Nil), ale za běhu jen jeden tag. Pak navíc mohou existovat jazyky, kde se za běhu používají typové derivace (a tedy i typy) a tagy naráz.

Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re:C# nebo Python?
« Odpověď #52 kdy: 25. 01. 2014, 16:53:17 »
Jedna kniha s prominutím nedělá odbornou veřejnost. A ta kniha si prostě evidetně dělá vlastní definice, které jsou v rozporu s obecnou terminologií: už jen z anotace knihy: "A type system is a syntactic method" když mezi běžné termíny z oblasti teorie programovacích jazyků
patří např. dynamic type-checking, které se syntaxí nemá společného nic.

Kde dělám nějaké dva významy slova typ fakt nechápu.

A kde je problém s Listem nechápu také. Buďto mám list, do kterého mohu nacpat cokoli, nebo List, do kterého chci nacpat pouze řetězce. Ty mají dva různé typy a C# to od verze 2.0 umí svým typovým systémem zachytit. Pokud se budem bavit o verzi 1.0, kde generika nebyla, pak to je prostě nedokonalost typového systému C# a nikoli nedokonalostí pojmu typ.
Právě to, že i když List<Int> vypadá stejně jako List<String>, tak stejný typ nemají, je to, čím se typové jazyky liší od duck-typing languages.

Radek Miček

Re:C# nebo Python?
« Odpověď #53 kdy: 25. 01. 2014, 17:09:07 »
Citace
A kde je problém s Listem nechápu také.

Dobře, jaký typ má v C# null? Jaký typ má v C# výraz "ahoj", jaký typ má v C# výraz "ahoj" as object?

Pokud programujete v Haskellu, jaký typ má v Haskellu výraz Nothing?

Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re:C# nebo Python?
« Odpověď #54 kdy: 25. 01. 2014, 17:59:57 »
Jaký je problém v tom, že pro určení typů některých výrazů je třeba znát kontext?





Radek Miček

Re:C# nebo Python?
« Odpověď #55 kdy: 25. 01. 2014, 18:08:31 »
Citace
Jaký je problém v tom, že pro určení typů některých výrazů je třeba znát kontext?

Neříkám, že tam je problém. Jen se ptám na typy daných výrazů - dělám to proto, abych demonstroval, že slovo typ používáte ve 2 různých významech.

Jakub Galgonek

Re:C# nebo Python?
« Odpověď #56 kdy: 25. 01. 2014, 18:23:48 »
Citace
Jaký je problém v tom, že pro určení typů některých výrazů je třeba znát kontext?

Neříkám, že tam je problém.

Jak je to s tím kontextem? Třeba v Javě je null typu null type, kontext nekontext.

Pavel Tisnovsky

Re:C# nebo Python?
« Odpověď #57 kdy: 25. 01. 2014, 18:55:00 »
Citace
A kde je problém s Listem nechápu také.

Dobře, jaký typ má v C# null? Jaký typ má v C# výraz "ahoj", jaký typ má v C# výraz "ahoj" as object?

Pokud programujete v Haskellu, jaký typ má v Haskellu výraz Nothing?

V C#-podivnosti netuším, ale v Javě je to přesně popsáno v JLS a od Javy šestky máme i:
http://www.enseignement.polytechnique.fr/informatique/Java/1.7/javax/lang/model/type/NullType.html
(v naprosté většině aplikací však můžeme předpokládat, že null je hodnota typu null který není pojmenovaný, tudíž
nelze vytvořit proměnnou, atribut či argument tohoto typu)

(podobně je NULL popsáno, i když z jiným významem, v C89, C99 atd.)

iwtu

Re:C# nebo Python?
« Odpověď #58 kdy: 25. 01. 2014, 18:59:33 »
fakt si nemyslite, ze debata je uplne mimo konktext povodnej otazky? Vsimnite si to, obcas..

Radek Miček

Re:C# nebo Python?
« Odpověď #59 kdy: 25. 01. 2014, 19:04:17 »
Citace
Jak je to s tím kontextem? Třeba v Javě je null typu null type, kontext nekontext.

Poslední verze C# nemají žádný typ jenom pro null. Nicméně dříve takový typ ve specifikaci existoval.

Pokud by takový typ Null existoval, tak byl mohl být podtypem všech referenčních typů. Pak díky pravidlu subsumce (má-li výraz x typ S a typ S je podtyp typu T, pak výraz x má typ T) a faktu, že relace býti podtyp je předuspořádání,  by výraz null měl kromě typu Null i všechny referenční typy. Takhle to funguje například ve Scale.