Doporučte programovací jazyk pro Windows

qelurg

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Datove tridy v Pythonu
« Odpověď #135 kdy: 09. 03. 2020, 16:10:34 »
Variabilni pocet atributu metody java umi taky, se silnymi typy v parametrech, ktere mimochoden jsou soucasti signatury metody a netreba provadet zhuverilosti jako je toto.
https://stackoverflow.com/questions/25343981/method-overloading-for-different-argument-type-in-python

Tohle nená žádná zhůvěřilost, máš tam v odpovědi krásný příklad využití dekorátoru @singledispatch na přetěžování. Alternativou je použití dekorátoru @overload.


qelurg

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #136 kdy: 09. 03. 2020, 16:14:34 »
Mno, staci mit zajimave metody nahore, seno dole. Kazdy vi co je getter, setter, toString().
...
Java neni rozhosdne ukecana vic, nez je potreba.

Java je neuvěřitelně ukecaný a těžkopádný jazyk. Sekl jsem s ní už kdysi dávno, protože odmítám ztrácet čas  'senem'. Já vím, ide mi ho vygeneruje.

Re:Datove tridy v Pythonu
« Odpověď #137 kdy: 09. 03. 2020, 16:43:58 »
Python neumi nic, co by neumela java(akorat vylozene nebezpecne veci se tam delaji ukecane, typicky reflection api, to je zalesitost pro tvurce frameworku, bezny jouda do toho nema co hrabat), naopak to zdaleka neplati. Ostatne jython je imementace pythonu v jave, javu v pythonu nikdo nenapsal

Opravdu? Umi java duck typing? Umí java modifikovat tridy realtime za behu programu? Umi java neco jako:

def fce1(arg1, /, arg2, *, arg3):

Ne neumi.
Protoze to jsou znouzectnosti, Java vsechny tyto veci resi jinak a robustneji.
Ducktyping je znouzectnost, protoze python neumi silne typy. Ducktyping neni nic jineho, ze nemam ZADNOU kontrolu typu, proste zavolam stejnojmennou metodu bez rozliseni typu atributu a dej se vule bozi.
IDE s tim maglajzem neudela nic, v Jave ti eclipse pri znalosti signatur metod pise podstatny kus kodu za tebe, staci mackat CTRL+SPACE

Modifikovat tridu za behu je prasecina, v Jave se zkratka pouziva misto hrabani do trid dynamicka kompozice typu Spring IoC.
Variabilni pocet atributu metody java umi taky, se silnymi typy v parametrech, ktere mimochoden jsou soucasti signatury metody a netreba provadet zhuverilosti jako je toto.

https://stackoverflow.com/questions/25343981/method-overloading-for-different-argument-type-in-python

O generickych metodach ani nemluvim.

Výborně, máme vyvráceno nesmyslné tvrzení, že Java umí všechno, co Pythoh.

Duck typing není z nouze ctnost, je to chtěný a žádaný stav. Není pravda, že to znamená žádnou kontrolu typů. Python je vyšší jazyk, kde typ je vlastnost hodnoty nikoliv proměnné. Python má silné typy, ale vyhodnocuje je dynamicky. Pomocí MyPy je umí vyhodnocovat i staticky, ale z toho pramení mnohí nechtěných omezení, žakže já třeba jazyky se statickýmá typy odmítám, nejsou pro mě dostatečně flexibilní.

Já spoléhám na sebe, nikoliv na ide a je mi fajn. Ty prostě neumíš dobře programovat, ovládáš možná statické programování, ale plaveš v tom dynamickém, neumíš myslet v dynamickém jazyku. To je celé. Omezuješ sám sebe. Já zase neumím myslet ve funkcionálních jazycích, ale beru to jako svůj nedostatek, nikoliv jako nedostatek (těch blbých) funkcionálních jazyků.

Můj dotaz nezněl na variabilní počet argumentů.

Jojo, dynamic typing je takovej zazrak, az se to Pythonu 3.5 dostal modul typing a v 3.8 to rozsirili napr o final, podobnost s klicovymi slovy javy je ciste nahodna.
A Typescript vsnikl nad Javascriptem taky z cisleho masochismu lidi, co si neumi uzivat blaho dynamickeho bordelu.

Kdyz se divam na vyvoj Pythonu3, je to prakticky souvisla snaha nejak napasovat Java (C#, C++) featury do standardni knihovny.

Ehm, ja pouzivam aktivne python i javu. Python je skvely na jednoduche skriptiky, napr. ansible na tom jede sakumprask.
Pro opravdove SW projekty na kterych dela vice lidi obecne ruzne kvality, se to s Javou merit neda.
A poznamka o programovani bez IDE me rozesmala, to musi byt produktivita jak noha a hlavu mit jak patraci balon, abych si v chainu Viewer - Model - Service - Repository pamatovat atributy a nazvy metod. V IDE ctrl+space a doplni se to samo.
Ale proti gustovi zadny disputat.

Re:Datove tridy v Pythonu
« Odpověď #138 kdy: 09. 03. 2020, 16:51:34 »
Jojo, dynamic typing je takovej zazrak, az se to Pythonu 3.5 dostal modul typing a v 3.8 to rozsirili napr o final, podobnost s klicovymi slovy javy je ciste nahodna.
A Typescript vsnikl nad Javascriptem taky z cisleho masochismu lidi, co si neumi uzivat blaho dynamickeho bordelu.

Kdyz se divam na vyvoj Pythonu3, je to prakticky souvisla snaha nejak napasovat Java (C#, C++) featury do standardni knihovny.

Ehm, ja pouzivam aktivne python i javu. Python je skvely na jednoduche skriptiky, napr. ansible na tom jede sakumprask.
Pro opravdove SW projekty na kterych dela vice lidi obecne ruzne kvality, se to s Javou merit neda.
A poznamka o programovani bez IDE me rozesmala, to musi byt produktivita jak noha a hlavu mit jak patraci balon, abych si v chainu Viewer - Model - Service - Repository pamatovat atributy a nazvy metod. V IDE ctrl+space a doplni se to samo.
Ale proti gustovi zadny disputat.

python neznate, nebo nepouzivate IDE, nazvy parametru a metod si pamatovat nemusite

staticke typovani v pythonu to za kratkou dobu dotahlo dal nez java za temer tricet let.

modul typing je vyuzitelny i pro runtime validace, v podstate je to jen kolekce abstraktnich trid. Prave diky dynamickemu typovani se python tak dobre pouziva interaktivne, veskere informace mate k dispozici za behu.

Re:Datove tridy v Pythonu
« Odpověď #139 kdy: 09. 03. 2020, 16:59:11 »
Variabilni pocet atributu metody java umi taky, se silnymi typy v parametrech, ktere mimochoden jsou soucasti signatury metody a netreba provadet zhuverilosti jako je toto.
https://stackoverflow.com/questions/25343981/method-overloading-for-different-argument-type-in-python

Tohle nená žádná zhůvěřilost, máš tam v odpovědi krásný příklad využití dekorátoru @singledispatch na přetěžování. Alternativou je použití dekorátoru @overload.

Tak to mame dost odlisne nazory na krasu:

Kód: [Vybrat]
class S_Unknown: pass
class S_Block: pass
class S_Empty: pass
class S_Function: pass
class S_SpecialBlock(S_Block): pass

@singledispatch
def render(s, **kwargs):
  print('Rendering an unknown type')

@render.register(S_Block)
def _(s, **kwargs):
  print('Rendering an S_Block')

@render.register(S_Empty)
def _(s, **kwargs):
  print('Rendering an S_Empty')

@render.register(S_Function)
def _(s, **kwargs):
  print('Rendering an S_Function')

if __name__ == '__main__':
  for t in [S_Unknown, S_Block, S_Empty, S_Function, S_SpecialBlock]:
    print(f'Passing an {t.__name__}')
    render(t())

OMG, mejme externi knihovnu co se stara o rozhazovani podle _PRVNIHO_ argumentu funkce a sam si to zaregistruj jak u blbejch na dvorku. https://docs.python.org/3/library/functools.html#functools.singledispatch

To jako chceme srovnavat s java method signature, kde se  do signatury pocita vse krome navratove hodnoty?

Heh, tady se vycita jave ukecanost a pak se tu argumentuje selmostrojem ktery za pomoci nevykonneho sena anotaci, manuani registrace dovede pretezovate podel _PRVNIHO_ atributu?

Pricemz podpora IDE (autocomplete, refactoring) pro takovy selmostroj je zakonite nulova?

Zajimave,



qelurg

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Datove tridy v Pythonu
« Odpověď #140 kdy: 09. 03. 2020, 17:23:28 »
Jojo, dynamic typing je takovej zazrak, az se to Pythonu 3.5 dostal modul typing a v 3.8 to rozsirili napr o final, podobnost s klicovymi slovy javy je ciste nahodna.
A Typescript vsnikl nad Javascriptem taky z cisleho masochismu lidi, co si neumi uzivat blaho dynamickeho bordelu.

Kdyz se divam na vyvoj Pythonu3, je to prakticky souvisla snaha nejak napasovat Java (C#, C++) featury do standardni knihovny.

Ehm, ja pouzivam aktivne python i javu. Python je skvely na jednoduche skriptiky, napr. ansible na tom jede sakumprask.
Pro opravdove SW projekty na kterych dela vice lidi obecne ruzne kvality, se to s Javou merit neda.
A poznamka o programovani bez IDE me rozesmala, to musi byt produktivita jak noha a hlavu mit jak patraci balon, abych si v chainu Viewer - Model - Service - Repository pamatovat atributy a nazvy metod. V IDE ctrl+space a doplni se to samo.
Ale proti gustovi zadny disputat.

Ano, Python je flexibilní, takže přidal podporu i pro statické typování při zachování typování dynamického. Kam se na to hrabe Java. Duck typing není zázrak, ale je to jedno z nejoblíbenějších paradigmat. Jak typing v Pythonu tak Typescript se používá spíše okrajově, obávám se, že to vzniká hlavně pro lidi se statickým myšlením, kteří nechápou a nedokáží využít výhody dynamických typů a dispatch dle typu považují za něco špatného. Na vývoj Pythonu 3 se díváte s nepochopením, pravděpodobně ani nevíte, co vše vzniká, příklad s arg1, /, arg2, *, arg3 jste vůbec nepochopil, přitom je to také featura Pythonu 3. Co se týče opravdových projektů, je třeba Dropbox, Youtube, Disqus, Reddit, Instagram, ... myslím že to jde a omezuje ho spíš výkon než co jiného.

qelurg

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Datove tridy v Pythonu
« Odpověď #141 kdy: 09. 03. 2020, 17:27:47 »
Variabilni pocet atributu metody java umi taky, se silnymi typy v parametrech, ktere mimochoden jsou soucasti signatury metody a netreba provadet zhuverilosti jako je toto.
https://stackoverflow.com/questions/25343981/method-overloading-for-different-argument-type-in-python

Tohle nená žádná zhůvěřilost, máš tam v odpovědi krásný příklad využití dekorátoru @singledispatch na přetěžování. Alternativou je použití dekorátoru @overload.

Tak to mame dost odlisne nazory na krasu:

Kód: [Vybrat]
class S_Unknown: pass
class S_Block: pass
class S_Empty: pass
class S_Function: pass
class S_SpecialBlock(S_Block): pass

@singledispatch
def render(s, **kwargs):
  print('Rendering an unknown type')

@render.register(S_Block)
def _(s, **kwargs):
  print('Rendering an S_Block')

@render.register(S_Empty)
def _(s, **kwargs):
  print('Rendering an S_Empty')

@render.register(S_Function)
def _(s, **kwargs):
  print('Rendering an S_Function')

if __name__ == '__main__':
  for t in [S_Unknown, S_Block, S_Empty, S_Function, S_SpecialBlock]:
    print(f'Passing an {t.__name__}')
    render(t())

OMG, mejme externi knihovnu co se stara o rozhazovani podle _PRVNIHO_ argumentu funkce a sam si to zaregistruj jak u blbejch na dvorku. https://docs.python.org/3/library/functools.html#functools.singledispatch

To jako chceme srovnavat s java method signature, kde se  do signatury pocita vse krome navratove hodnoty?

Heh, tady se vycita jave ukecanost a pak se tu argumentuje selmostrojem ktery za pomoci nevykonneho sena anotaci, manuani registrace dovede pretezovate podel _PRVNIHO_ atributu?

Pricemz podpora IDE (autocomplete, refactoring) pro takovy selmostroj je zakonite nulova?

Zajimave,

To je jednoduché, reimplementujte tento celý program v javě a hoďte ho sem, uvidíme :-). A pak to uděláme i naopak, napíšeme to samé po pythonovsku (skrz introspekci v jedné funkci) a vy tento způsob reimplementujete v javě, ok?

qelurg

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #142 kdy: 09. 03. 2020, 18:26:29 »
Zdá se, že reimplementace těchto pár řádků Python kódu v Javě je nad síly kritika Pythonu. Můžeme jen hádat na čem všem se zasekal :-). Budiž to ponaučením pro budoucí posměváčky.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #143 kdy: 09. 03. 2020, 18:52:30 »
Zdá se, že reimplementace těchto pár řádků Python kódu v Javě je nad síly kritika Pythonu. Můžeme jen hádat na čem všem se zasekal :-). Budiž to ponaučením pro budoucí posměváčky.

asi tak, pythonista napise code snippet za par sekund a postne ho do diskuze. Javista jen okecava.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #144 kdy: 09. 03. 2020, 18:58:28 »
Po par letech zkusenosti s Javou a C# a rocni zkusenosti s GO doporucuji GO.
Ja osobne to vidim takto GO > C# > Java.
Ve vsech trech udelam to stejne, ale...
GO je nejmene ukecane
GO mi dela nejmensi binarky
GO ma psane pravidla formatovani kodu, zjednodusuje to prehlednost ve zdrojacich, co vidite poprve (proste jakobyste to psali sami)
GO mi pripadne nejprehlednejsi, kdyz se podivam na kod. Taky je toto kodu nejmin
GO ma perfektne zvladnute rutiny (thready, procesy, ...)

Ale je fakt ze s Pythonem mam zkusenosti nula

Re:Doporučte programovací jazyk pro Windows
« Odpověď #145 kdy: 09. 03. 2020, 19:50:26 »
Zdá se, že reimplementace těchto pár řádků Python kódu v Javě je nad síly kritika Pythonu. Můžeme jen hádat na čem všem se zasekal :-). Budiž to ponaučením pro budoucí posměváčky.

asi tak, pythonista napise code snippet za par sekund a postne ho do diskuze. Javista jen okecava.

Každý dělá, na co je zvyklý.  ;D

Re:Doporučte programovací jazyk pro Windows
« Odpověď #146 kdy: 09. 03. 2020, 20:45:56 »
Zdá se, že reimplementace těchto pár řádků Python kódu v Javě je nad síly kritika Pythonu. Můžeme jen hádat na čem všem se zasekal :-). Budiž to ponaučením pro budoucí posměváčky.

Ne panove, to je zkratka moje prohlednuti, ze vy tu vubec nemate tuseni o cem to melete.
Pisu tady, ze signatura java metody je vcetne parametru metody a vrati se mi dotaz, jak bych asi tu python zpatlaninu udelal v Jave.

No jako tri metody render, ktere se lisi typem atributu s, kluci usati, na telefonu vam to tu rozepisovat nebudu.
A to jeste predpokladam kompletne odlisnou vnitrni implementaci, pokud by vsechny typy objektu s byly z jednoho predka a ja si vystacil s metodami predka, udelam to jednou generickou metodou.

Dalsich debat na toto tema se ucastnit s prominutim nebudu, to je marnost

Re:Doporučte programovací jazyk pro Windows
« Odpověď #147 kdy: 09. 03. 2020, 21:03:23 »
Po par letech zkusenosti s Javou a C# a rocni zkusenosti s GO doporucuji GO.
Ja osobne to vidim takto GO > C# > Java.
Ve vsech trech udelam to stejne, ale...
GO je nejmene ukecane
GO mi dela nejmensi binarky
GO ma psane pravidla formatovani kodu, zjednodusuje to prehlednost ve zdrojacich, co vidite poprve (proste jakobyste to psali sami)
GO mi pripadne nejprehlednejsi, kdyz se podivam na kod. Taky je toto kodu nejmin
GO ma perfektne zvladnute rutiny (thready, procesy, ...)

Ale je fakt ze s Pythonem mam zkusenosti nula

Java programator, co je unesen z gofmt a nepoznal taje ctrl+F v eclipse.
Ktery je unesen z GO, co neumi ani takovou trivialitu, jako je LinkedHashMap a neumi ani generika, aby si to koder dodelal.

A je unesen z prehlednosti kodu, kde jsou po kazdem volani funkce nasazeny if(err!=nil) dohromady zmatlany business kod a error handling do jedne hromady hnoje, protoze to neumi ani vyjimky, natoz aby byly dedicne hierarchicke.

Vystup tohoto java kodera musel byt neco velice zajimaveho

Re:Doporučte programovací jazyk pro Windows
« Odpověď #148 kdy: 09. 03. 2020, 21:50:34 »
Ano, Java je dost ukecany jazyk a taky hodne, hodne tezkopadny. A me to taky dost vadi, protoze je to strasna drina. Jenze na velkych projektech presne tohle potrebujete. Tam se to vam to vrati mnohonasobne vic diky vzniknuvsimu poradku. V Jave jsem napr. doposud nemeli stringy na vice radku:

Kód: [Vybrat]
"""
blabla sql query
bla sql sql
sql
sql
"""

Je to strasne otravne, ale taky strasne dulezite pro Javovske projekty, presne takovato striktnost dela Javu Javou a proto se tak hodne pouziva v enterprise. Protoze vyse uvedeny string patri do Resource, a ne do Tridy:

Kód: [Vybrat]
resource/blabla-query.sql

Takova striknost umoznuje dosahnout to, cemu se rika, ze by mel existovat jediny zpusob, jak neco udelat. Na vyse uvedene omezeni sice bude Pepik programator nadavat, ale prinuti ho to strcit takove veci na jedine misto. A pro ostatni programatory je to prehlednejsi.

A to je taky nejvetsi problem jazyku jako je Python, Javacript, Scala, dost kravin ma i C#. Dneska, v nasem enterprise, Servicy psane v Jave Springu jsou si sobe podobne jako vejce vejci. Nase Javovska platforma omezuje ruzne impresionisticke umelce - at tahnou k Javascriptu. Diky tomu mame v enterprise to, co potrebujeme nejvice, a to je poradk. Samozrejme i v Jave se da vsechno zmrvit a taky vetsina projektu jsou solidni srac ky, ale v Pythony a v javascriptu by byly jeste vetsi.

Java a jejic frameworky je proste tezka zemedelska technika a jde ji to dobre.
« Poslední změna: 09. 03. 2020, 21:55:19 od PetrK »

Re:Doporučte programovací jazyk pro Windows
« Odpověď #149 kdy: 09. 03. 2020, 22:23:43 »
Ano, Java je dost ukecany jazyk a taky hodne, hodne tezkopadny. A me to taky dost vadi, protoze je to strasna drina. Jenze na velkych projektech presne tohle potrebujete. Tam se to vam to vrati mnohonasobne vic diky vzniknuvsimu poradku. V Jave jsem napr. doposud nemeli stringy na vice radku:

Kód: [Vybrat]
"""
blabla sql query
bla sql sql
sql
sql
"""

Je to strasne otravne, ale taky strasne dulezite pro Javovske projekty, presne takovato striktnost dela Javu Javou a proto se tak hodne pouziva v enterprise. Protoze vyse uvedeny string patri do Resource, a ne do Tridy:

Kód: [Vybrat]
resource/blabla-query.sql

Takova striknost umoznuje dosahnout to, cemu se rika, ze by mel existovat jediny zpusob, jak neco udelat. Na vyse uvedene omezeni sice bude Pepik programator nadavat, ale prinuti ho to strcit takove veci na jedine misto. A pro ostatni programatory je to prehlednejsi.

A to je taky nejvetsi problem jazyku jako je Python, Javacript, Scala, dost kravin ma i C#. Dneska, v nasem enterprise, Servicy psane v Jave Springu jsou si sobe podobne jako vejce vejci. Nase Javovska platforma omezuje ruzne impresionisticke umelce - at tahnou k Javascriptu. Diky tomu mame v enterprise to, co potrebujeme nejvice, a to je poradk. Samozrejme i v Jave se da vsechno zmrvit a taky vetsina projektu jsou solidni srac ky, ale v Pythony a v javascriptu by byly jeste vetsi.

Java a jejic frameworky je proste tezka zemedelska technika a jde ji to dobre.

Podle mě se i ta java mírně rozvolňuje, což je plus (defaultní metody umožňují používat něco jako traity, lambdy přinášejí možnost funkcionálního přístupu, pracuje se na pattern matchingu apod.). Paradoxně jsou největší slabiny v nedokonalém OOP a v type erasure u Generik a příslovečné hodnotě null („NULL is the Worst Mistake in Computer Science“).

Nicméně komu nevyhovuje java, ten může na stejné jvm spustit progresivnější jazyky se zachováním skvělé interoperability s javou (Groovy, Scala a další) - vzniknuvší class soubory spustíte a použijete bez problému ve svém java projektu a naopak. A dále odhaduju, že díky Graalvm bude java postupně víc a víc bodovat v mikroservices. Takže IMHO má java dobrou šanci se adaptovat a přitom  zachovat dobré vlastností celé platformy.

To vše píšu s vědomím toho, že k akademickému ideálu to má stále daleko, takový Smalltalk by byl asi elegantnější, ale používá se podstatně méně, asi se příliš odlišuje od C-like jazyků a příliš předběhl svou dobu.

Jinak Python mi přijde v pohodě, ale cíli na trochu jiný mindset než java a oproti Smalltalku zase nejde dost do důsledků. Ale IMHO pořád k velmi dobré volbě pro mnoho případů.