[python] Guido o funkcich reduce(), filter() a map() v Python 3000
superman
feed na centrum.cz
Čtvrtek Červen 26 11:23:28 CEST 2008
> C++ je! pokračovatelem C. Přirozeným, nebo nepřirozeným ale je. Že se
> Stroustrup nechal inspirovat jinými jazyky je tak nějak jasné. Protože
> proto asi C měnil, že nemá objekty, že nemá proudy a tak.
> A C++ je zpětně kompatabilní, zvláště u vás mě překvapuje, že tvrdíte
> opak. Rozdíl je pouze v tom, že jsou tam občas háčky. Nehledě k tomu,
> pakliže by jste byl tak velký hnidopich, on je rozdíl i mezi
> jednotlivými verzemi C. Netvrdím že nějak zásadní, ale jsou tam.
>
Ale houby. C++ není pokračovatelem C. Je to vidět i na vývoje, jak C,
tak i C++ se stále vyvíjí samostatně a zcela nezávisle, a nikterak se na
nich neprojevuje, že by "C++ bylo pokračovatelem C". C si střihlo novou
normu C99 a C++ teď vážně míří k normě C++0x - a obě normy velmi
rozevírají nůžky mezi C++ a C. A věřte mi, že zdrojový kód Céčka plně
využívající výdobytků normy C99 ani náhodou nepřeložíte C++ kompilátorem.
Je to prostě lež jako věž - C++ není pokračovatelem C. A jak vidíte i z
vývoje obou jazyků - oba jazyky se chovají zcela individuálně, a
vyvíjejí se naprosto rozdílně.
Celé je to o tom, že C++ má "C like syntaxi" a to proto, že si
Stroustrup (který byl podnikavě praktický, a obchodní hledisko měl v
krvi) uvědomoval, že rychleji prosadí C++, pokud se po přechodu z C
budou muset lidé co nejméně učit. Tato strategie mu vyšla. A stejnou
strategii udělal třeba Sun s Javou, kde jí dal do vínku "C++ like
syntaxi". Stejnou strategii udělal Microsoft s C#, kde mu dal "C++ like
syntaxi".
K faktické stránce: Jazyk C má proudy. Je rozdíl mezi verzemi C, jsou v
zásadě 3 verze: K&R C, C98 a C99. Všechny současné a moderní kompilátory
umějí první verze jako když bičem mrská, a budou je umět i v budoucnu.
Kde je problém?
> Chcete mi trvrdit, že Novell a Migueala tak moc ovlivnil Microsoftí
> marketing? No, možné to je. Ale o tomhle jsem hovořil dále.
>
Chci tvrdit, že marketink má větší sílu, než si všichni uvědomujeme.
> Záruky jsou buzzword. Uznávám, že v tomto máte pravdu. Jsou velice
> důležité. Problém je v tom, že vám je nikdo nedá. Nebo tedy, alespoň já
> jsem se vždycky setkal pouze se sliby. Ale oni se jako záruky dají brát
> i nejen slova, ale chování lidí. Což jste také nastínil. Právě třeba u
> Guida mohu očekávat záruku, že se mi jazyk nebude parchantit, a případné
> nelogičnosti se prostě odstraní. Můžete se na záruku dívat i v tomto.
> Představa, že na fungující kód se nehrabe je sice pěkná, ale ve
> skutečnosti to je přeci jen jinak.
>
Naprostý souhlas - záruky jsou buzzword. Nicméně já třeba ze svého
pohledu dvacet let tvrdých zkušeností v IT sektoru vidím v Guidovi právě
tu záruku parchantění jazyka. A představa, že na fungující kód se
nehrabe je nejen velice reálná, ale ono se to ani jinak nedá - a
minimálně 80% programátorských věcí takto funguje. Ono totiž rozorávat
kód je nejen velice drahé z hlediska nákladů, ale také rapidně snižuje
spolehlivost - a v mnoha oblastech jsou ztráty v důsledku jediné chyby v
sw astronomické.
Zkuste si třeba představit, že děláte firmware do libovolného zařízení,
kterého prodáte milióny kusů. A vývoj Vám bude řídit člověk s teorií, že
"vše přepíše". Po půl roce se ovšem objeví několik závažných chyb ve
firmware - naštěstí je jde přeplácnost změnou firmware, ale i tak to
Vaší firmu a servis stojí milióny. Pak se objeví další chyba, která
bohužel už jde řešit pouze výměnou celého zařízení, nebo základní desku
- a Vy zjišťujete, že jste si stačil udělat špatné jméno, na opravách a
servisech jste prodělal více, než jste vydělal a cena akcií Vaší firmy
jde dolů. Konkurence se ovšem podobným excesům vyhla, vydělává, udělala
si dobré jméno, v podvědomí lidí získala povědomí spolehlivosti, a mohla
dokonce zdražit. Vy ovšem musíte investovat do mohutné P.R. kampaně a
zlevnit, aby Vaše výrobky lidé kupovali. Velmi běžný scénář.
A teď si představte, že děláte sw pro letadla (při chybě škoda rovná se
až zdemolování letadla a pár stovek mrtvol), do auta (škoda trochu
menší), do lékařských zařízení (to osobně dělám já třeba řadu let), do
bank, či do důležitých částí firem.
Představte si to třeba tak, že cena Vaší chyby v programu prudce roste s
počtem prodaných kusů. A ona Vás chyba může i zruinovat, jednak
finančně, a jednak poškozením jména. Velmi mnoho firem zkrachovalo
následkem chyby puštěné ven. Često to projde, a velmi často také ne.
> Nic nemíchám.
> Je to mé tvrzení, tak neprskejte :-)
> Cílem Microsoftu bylo najít skulinu v trhu. Hold business. A tak to
> vzala hezky od podlahy a vytvořila C#. Na základě Javy, Ady, a dalšího
> mraku jazyků jako inspirace.
>
Cílem Microsoftu nebylo najít skulinu na trhu. Cílem Microsoftu bylo
zbavit se a kopnout do čumáku Sun, který si začal moc vyskakovat s Javou
- a neuvědomil si, že proti němu nestojí bezmocný Jouda z vesnice. Do té
chvíle Microsoft udělal nejrychlejší existující implementaci Javy co
existovala a rozvíjel svoje Microsoft Visual J++.
Následkem toho se Microsoft rozhodl udělat .NET projekt, který se
inspiroval asi tak miliónem věcí, nicméně není žádnou z tou věcí. Já
jsem se třeba inspiroval názory své ženy v některých věcech, nestal jsem
se ale tím ženou, ani následovníkem své ženy. A stejně tak se C#
inspiroval mnoha věcmi, ale není nutně následovníkem.
> Pro pochopení mé argumentace: Mezi C a C++ je relativně malý rozdíl,
> protože to byla jen naroubovat třídy do procedurálního jazyka.
> Naopak, mezi Javou a C# je ten rozdíl už mnohem větší, protože se v něm
> promítlo a je zabudováno mnohem více moderních vlastností jazyka.
>
Asi stokrát jsem napsal jako odpověď na dotaz toto:
Otázka: Jak poznám člověka, který skutečně umí C++?
Odpověď: Pokud tvrdí, že C++ je stejné jako C, nebo je mezi těmito dvěma
jazyka jen malý rozdíl, zcela jistě máte vedle sebe člověka, který C++
neovládá jinak, než maximálně v začátečníckém levelu.
> A podobně, mezi pythonem a pythonem 3000 je podobný rozdíl. Že to jsou
> stejné jazyky? Nebo nejsou? To je otázka optiky. Ono lze brát i rozdíl
> mezi K&C C a C99 za různé jazyky. (S trochou nadsázky, samozřejmě.)
>
Dáváte do souvislostí a analogií věci, u kterých to nejde. Jazyky C a
C++ jsou skutečně odlišné jazyky. Vznikem C++ se nepřestal vyvíjet jazyk
C - a oba jazyky se intenzívně stále vyvíjejí, používají, a nikdo
nepredikuje, že buď jazyk C, nebo jazyk C++ skončí a přestane se
vyvíjet. Všechny dnešní kompilátory berou za samozřejmost, že budou
podporovat všechny dialekty C, a hodlají to tak dělat i nadále. (Pro
rejpaly: Podpora C99 je u mnoha kompilátorů v plenkách.).
Zatímco Python starý a Python 3000 je jeden jazyk, přičemž starý
postupně umře, pokud Python 3000 prorazí. Dáváte do analogií věci, které
srovnávat nejsou - proto Vám píšu, že srovnáváte hrušky s jablky.
> Vy chcete, aby se jazyk neměnil, někdo jiný chce, aby se s ním dobře
> pracovalo. Vývoj.
>
Kdybych byl ironický, něco bych napsal. Ale namísto toho napíšu, dnes je
momentální móda několik jazyků někompatibilně syntakticky překopat -
tato nemoc postihla současně Perl, Python, Ruby. Jenže móda je vrtkavá,
a co je dnes v módě za pár let se může ukázat totálně out. Ale výsledky
už se projevují - Perl jde postupně do pozadí, Python opouští spousta
vývojářů, kteří chtějí dělat programy, a ne rozorávat co funguje. Oba
jazyky si tímto podepíší postupně ortel na přechod do jazyků druhé až
třetí kategorie z původně nadějných kandidátů na mainstream jazyky.
Nejlépe se podle mě vzpamatuje Ruby, protože je to styl jazyka, který
dnes chybí (funkcionální plně OOP jazyk ve stylu Smalltalku), a taky si
přiznejme, že nadšení Rubystů je tak mohutné, že to snesou. Navíc v Ruby
není moc aplikací zatím.
> Tato naivní představa tu nebyla. Vždyť jsem to tam psal: "A to hlavně
> díky SUNu a IBM, které na něm založili část své existence."
>
Ok, omlouvám se, moje chyba, že jsem plně nepochopil všechny aspekty
toho, co jste psal. Dávám Vám za pravdu.
>
> Jediná záruka, kterou Java dává, je ta, že se jí SUN nevzdá, a že se jí
> nevzdá její obrovská komunita. Tudíž vždycky se ní bude někdo starat.
> Jakékoliv hledání jiné záruky je obávám se naivní zase od vás. I když
> přístup je to jistě rozumný.
>
Ale no tak. Za prvé vývoj Javy neurčuje jenom Sun, za druhé vývoj Javy
je především v rukách firem, které jsou navýsost praktické. Nikdy by je
ani v nejmenší nenapadlo hazardovat s jazykem jako Rossum třeba. To by
nikdy v Javě neprošlo, a člověka, který by to chtěl udělat by považovali
za blázna první kategorie. To píšu zcela chladně a bez emocí. A toto
jsou ty záruky, byť nepsané, ale obrovské.
Upřímně, Java není moc dobrý jazyk. Ale vynikající na něm je praktičnost
lidí kolem ní a obrovská motivace po výsledcích a po nasazení v praxi. A
to z ní dělá obrovsky silného koně.
> Chachá, otázka je, zda to ten profesionál opravdu udělá desetkrát lépe.
> Řeknu vám, co udělám. Najmu si partu cigánů. Ne pro jejich barvu kůže,
> ale protože oni rozumí svému řemeslu (mluvím teď o konkrétní partě). A
> vím, že oni mi postaví barák, který bude stát za to.
>
Otázka je, zda to ten nadšenec udělá léep, než profesionál. A v mnoha
případech (samozřejmě zdaleka ne vždy) je odpověď neudělá. Jinak máte
pocit, že parta cigánů bude pracovat spíše z nadšení pro zedničinu, a
nebo spíše pro ty prachy, což odsuzujete (jako příznak "profesionálů").
> Když si postavím barák od "profesionální" firmy, přijde za mnou
> kravaťák, a řekne, ano ano, tohle tohle, tady máme tabulku. Bude to stát
> tolik. A postaví mi barák za dva měsíce. Jenže ten cigán z předchozí
> party by mi řekl, že je to blbost, protože jen měsíc tvrdne lepidlo na
> cihlách... Řekne mi to, protože nechce dělat nekvalitní práci. Zatímco
> kravaťák chce vydělat peníze
Já s Vámi souhlasím, ale co tu řešíte je slovíčkaření. První Vaše
definice byla v rozlišení podle toho, kdo to dělá pro prachy. Ok, já sám
mohu říci, že programuji pro peníze. Nejsem ochoten se věnovat
nadšeneckým projektům - i když kdysi ano, ale zjistil jsem, že lidé,
když je to nic nestojí - tak je ani nenapadne, že by šlo problém vyřešit
za třetinu času, je to přeci Váš čas, a nic je to nestojí. Takže kam
byste mě zařadil? Programuji za peníze, nejsem ochoten dělat zadarmo - a
zároveň chci, abych se za svou práci nemusel stydět a tak mnohdy radím i
tam, kde si trochu finančně škodím.
Jinak já kravaťáka nepovažuji za profesionála, myslel jsem, že mluvíme
ne o obchodních zástupcích, ani managerech.
> .
> To jsou ty záruky a to je můj pohled.
>
Ano, to jsou správné záruky. A přesně stejným zárukám rozumím i já.
Miloslav Ponkrác
Další informace o konferenci Python