Programátorův pohled na svět

Ivan Nový

Re:mysleni pana Programatora
« Odpověď #75 kdy: 06. 01. 2016, 13:08:52 »
Jinak, i ten filtr je v Elixiru daleko čitelnější:
Kód: [Vybrat]
red_cars = cars |> Enum.filter(fn x -> x[:id]==XXXX end) |> Enum.map(fn x -> x[:color]=:red end)
nebo ještě zhuštěněji:
Kód: [Vybrat]
red_cars = cars |> Enum.filter(&(&1[:id]==XXXX)) |> Enum.map(&(&1[:color]=:red))
Dlouhé řádky nejsou čitelné. navíc oproti mému řešení v Pythonu je ve vašem zápisu mnohem více redundandních znaků, například |>, &, u lambda výrazů musíte v hlavě postupně simulovat co dělají, nemůžete s nimi pracovat jako se symbolem, tudíž ztrácíte nadhled nad kontextem. Je ale možné, že někdo je čte jako slova, naskočí mu simulace sama, jako když si přečte slovo jablko, tak uvidí vnitřním zrakem jablko, to ale můj případ není. Zajímalo by mě, zda to někdo takto umí. Je to váš případ?
No a pak přijde zákazník s tím, že potřebuje vyhledávat ne podle id, ale podle regulárního výrazu nad id, u mě to znamená, že upravím jednu funkci, a u vás to znamená, že musíte procházet všechny lambdy v aplikaci, protože někde jste použil jako proměnnou x, jinde třeba id atp., na významově totéž.


Kit

Re:Programátorův pohled na svět
« Odpověď #76 kdy: 06. 01. 2016, 13:10:31 »
lojza: Automatické přistání řízené počítačem zvládal Concorde v roce 1969, ten počítač byl analogový.

Analogové počítače jsou super. Jednoduché, funkční a nemusí se řešit nějaký kmitočet procesoru, protože vše běží v reálném čase.

dalo by se nejak prirovnat analogove/digitalni *** spojite/diskretni vstupy *** realna/priblizna cisla ?

nekde jsem cetl ze realna cisla (pocitani v nich) je pro panaboha, pro nas bezne smrtelniky vzdy pracujeme pouze s urcitou aproximaci (viz napr. pi atd..), coz je u neketyrch systemu problem, potrebovali bysme na vstup davat realna cisla (napr. deterministicky chaos) priroda v nasich meritkach (ne kvantovka) je asi spis spojita nez diskretni tak by se vic hodily na vstup ty spojite signaly a analogove pocitace ?

Analogové počítače mají jeden problém: Přesnost. Zatímco pro fyzikální výpočet (přistání Concorde, rezonance mostu či nápravy, rozměry komponent výrobku,...) je přesnost 0.1 % naprosto vyhovující, pro jiné už méně a například pro finančnictví totálně nevyhovující (nestačí jim ani real či double u digitálních). Navíc analogové počítače bývají náchylné na rušení (proto se jimi nederivuje, ale integruje).

Digitální počítače pracují s takovou přesností, jakou potřebujeme. Nevyžadují seřízení, stačí je naprogramovat.

Ivan Nový

Re:Programátorův pohled na svět
« Odpověď #77 kdy: 06. 01. 2016, 13:22:13 »
No mně teda pořád ještě praktický Haskell připadá dost pěkný - ve srovnání s čímkoliv jiným.

Citace
slo by nejak (asi na zaklade analogie s necim z bezneho zivota co kazdy zna ?) priblizit cloveku, co nikdy neprogramoval ani nebude, cim a jak se lisi "pohled na svet"tech opravdu nejlepsich programatoru od bezneho smrtelnika jako ja ?

Zjistíš, že v 95% příkladů je chyba u tebe. Na druhou stranu zjistíš, že v 5% příkladů je chyba v něčem, čemu jsi absolutně věřil (při jednom projektu jsem našel chyby v gcc a prakticky každém emulátoru, na který jsem šáhnul). Zjistíš, že počítači je jedno, jestli bys chtěl, aby něco nějak fungovalo.

Nevím, jestli je to zrovna programováním, ale myslím, že mám mnohem menší problém změnit názor, když zjistím, že je někde nějaký logický problém. Spousta lidí má tendenci uvažovat stylem "já to tak ale chci, tak si pro to najdu zdůvodnění" - ale počítači je jedno, co chceš, buď je to správně nebo ne. Stejně tak se spousta lidí odvolává na autority - ale autority nic neznamenají. Občas se i autority mýlí - občas ta chyba prostě není u tebe.

Při programování je dost běžné uvažování - tohle neumím, kde je manuál, jdu se to naučit. Dobrý programátor se prostě pořád něco učí. Potřebuju se naučit cizí jazyk? Je to spousta práce, ale jde to. Jinak celé programování je v podstatě o tom, že přesně popíšeš, co chceš vyřešit v pojmech, které již řešit umíš. A dobré programování znamená, že máš dobře ošetřené i různé krajní stavy - takže profesionální deformace je automaticky v čemkoliv hledat limity, kde to přestává fungovat :)
Bravo, to je nejpřesnější vystižení problému!

andy

Re:Programátorův pohled na svět
« Odpověď #78 kdy: 06. 01. 2016, 14:54:26 »
Kód: [Vybrat]
res = cars & map (set color "red")
                   & filter (\a -> a ^. id == "xxx")
Me to pripada docela citelny... tu filtraci bych mozna pojmenoval, ale to nastaveni barvy fakt ne. Kratke to je a citelne taky (a ma to byt obracene, ale pisu to na mobilu...)

Wololo

Re:Programátorův pohled na svět
« Odpověď #79 kdy: 06. 01. 2016, 15:17:36 »
Programatoruv pohled na svet je trochu jiny, do jiste miry bych to prirovnal k matematikovi, protoze matematici "vidi defakto vsechny veci v cislech", programator je vidi v elementarnich "krocich". Abych ti to prirovnal, manzelka ti rekne "Bez koupit pivo", pusti se ti v hlave "program" "koupit pivo" a tento program obsahuje "1000 kroku" k tomu, abys ho vykonal. Nebudu uplne presny, ale nastinim zhruba jak by to mohlo vypadat.

1.) najit penize (do je defakto dalsi mikro program/funkce)
2.) vzit si tasku/batoh
3.) najit klice od bytu
4.) najit klice od auta
5.) najit auto =)
6.) nasednout do auta (vykonat program rizeni k obchodaku)
7.) najit v obchodaku basu piv
8.) dotlacit vozik k pokladne
9.) zaplatit
10.) najit auto na parkovisti
11.) nalozit pivo
12.) nasednout do auta (vykonat program rizeni domu)
13.) vyndat pivo z auta
14.) dojit domu
15.) otevrit pivo
16.) vypit pivo

defakto jde o rozebirani jednotlivych cinnosti na elementarni casti, vyse zminene je zjednodusene a nepresne, jelikoz kazdy ten krok se da jeste rozebrat do mensich detailu a casti co je treba vykonat napr. "odemknout dvere, otevrit dvere, zavrit dvere, zamknout ...." a defakto je uplne jedno jestli to pisu cesky, anglicky nebo nemecky nebo indiansky. Snad ti to na tvoje filozofovani bude stacit.

Ano, na rozdíl od normálních smrtelníků, kteří uvažují primárně zda je ten který krok pro ně dobrý, pokud se jim zdá, že není, pak pro ně prostě neexistuje. Například krok 1. ne najít peníze, ale jít do práce :-)))

hehehe, no asi jsem mel napsat najit penezenku, coz muze byt volne prelozeno jako, rict manzelce :D


Radovan.

Re:Programátorův pohled na svět
« Odpověď #80 kdy: 06. 01. 2016, 17:20:37 »
lojza: Automatické přistání řízené počítačem zvládal Concorde v roce 1969, ten počítač byl analogový.

Analogové počítače jsou super. Jednoduché, funkční a nemusí se řešit nějaký kmitočet procesoru, protože vše běží v reálném čase.

dalo by se nejak prirovnat analogove/digitalni *** spojite/diskretni vstupy *** realna/priblizna cisla ?

nekde jsem cetl ze realna cisla (pocitani v nich) je pro panaboha, pro nas bezne smrtelniky vzdy pracujeme pouze s urcitou aproximaci (viz napr. pi atd..), coz je u neketyrch systemu problem, potrebovali bysme na vstup davat realna cisla (napr. deterministicky chaos) priroda v nasich meritkach (ne kvantovka) je asi spis spojita nez diskretni tak by se vic hodily na vstup ty spojite signaly a analogove pocitace ?

Analogový počítač je jako logaritmické pravítko, číslicový jako kuličkové počítadlo.

Když chceš na logaritmickém pravítku vynásobit nebo vydělit dvě čísla, posuneš vůči sobě dvě stupnice, a výsledek máš okamžitě před očima. S přesností na jedno desetinné místo. Pro počítání druhé odmocniny, sinu a kosinu, prostě čehokoliv, máš na něm samostatnou stupnici, a můžeš si pomoci posuvníkem, který ti to například vynásobí číslem Pí. Ale pořád jenom s přesností na jedno desetinné místo, zato okamžitě.

Pro kuličkové počítadlo musíš mít sadu postupů (programů), které opakuješ pořád dokola a dokola, dokud nedosáhneš výsledku s požadovanou přesností. Je to mnohem přesnější, mnohem pracnější, a mnohem pomalejší. Navíc musíš mít pro každou činnost předem nachystaný program, který jí bude provádět.

Příroda se spojitě jenom tváří, ve skutečnosti si s celými čísly úplně vystačí. To jenom omezené lidské myšlení nedokáže obsáhnout přesný počet atomů ve sklenici vody, proto si musí vypomoci umělými makrojednotkami jako je litr, a "reálnými" čísly, popisujícími velmi přibližně celočíselnou realitu. Jako to logaritmické pravítko - nepřesně ale rychle.

Takže je to přesně naopak, přesné počítání s celými čísly je pro pánaboha, lidé si musí vystačit s nepřesnými reálnými. Mimochodem, černé díry jsou místa ve Vesmíru, kde Bůh dělil nulou ;D

Ivan Nový

Re:Programátorův pohled na svět
« Odpověď #81 kdy: 06. 01. 2016, 17:39:23 »
Ad Radovan, to je tím, že se chybně matematické operace i samotný pojem čísla odvozují od sčítání, fyzikálně reálně jako prvotní operace je dělení a v našem vesmíru je dělení zobrazení do přirozených čísel. Zbytky nevznikají, počítáte-li výsledek na kusy (kvanta).

Jinak pozdravujte MEDU :-)

Kit

Re:Programátorův pohled na svět
« Odpověď #82 kdy: 06. 01. 2016, 17:53:23 »
Analogový počítač je jako logaritmické pravítko, číslicový jako kuličkové počítadlo.

To je docela výstižné přirovnání.

Citace
Když chceš na logaritmickém pravítku vynásobit nebo vydělit dvě čísla, posuneš vůči sobě dvě stupnice, a výsledek máš okamžitě před očima. S přesností na jedno desetinné místo. Pro počítání druhé odmocniny, sinu a kosinu, prostě čehokoliv, máš na něm samostatnou stupnici, a můžeš si pomoci posuvníkem, který ti to například vynásobí číslem Pí. Ale pořád jenom s přesností na jedno desetinné místo, zato okamžitě.

Ta přesnost na logáru je o hodně lepší než jen jedno desetinné místo. Jinak by mosty na něm počítané asi spadly.

Citace
Pro kuličkové počítadlo musíš mít sadu postupů (programů), které opakuješ pořád dokola a dokola, dokud nedosáhneš výsledku s požadovanou přesností. Je to mnohem přesnější, mnohem pracnější, a mnohem pomalejší. Navíc musíš mít pro každou činnost předem nachystaný program, který jí bude provádět.

Jenže jsme se naučili vyrábět počítače, které zmíněné nevýhody eliminují. I obyčejné Arduino by dnes dokázalo přistát na Měsíci lépe než tehdejší počítače. Pomiňme, že se pro tento účel nehodí.

Ivan Nový

Re:Programátorův pohled na svět
« Odpověď #83 kdy: 06. 01. 2016, 18:00:08 »
Add Kit, navigační počítač Apolla bylo vlastně takové Arduino, byl docela malý a nebyl analogový. Viz zde https://en.wikipedia.org/wiki/Apollo_Guidance_Computer

hu

Re:Programátorův pohled na svět
« Odpověď #84 kdy: 06. 01. 2016, 18:12:12 »
Add Kit

Ja bych Kita nepricital.

Ivan Nový

Re:Programátorův pohled na svět
« Odpověď #85 kdy: 06. 01. 2016, 18:21:20 »
Add Kit

Ja bych Kita nepricital.
Ha, ha, ha, ... To je moje profesionální deformace.

neznámý

Re:mysleni pana Programatora
« Odpověď #86 kdy: 06. 01. 2016, 18:29:19 »
Ten hlavní důvod, proč se v JS lambdy nadužívají, je, že neumí synchronizovat asynchronní události. Takže v JS musím napsat:
Kód: [Vybrat]
function set_user_val(callback) {
  async_get_data(function(data){
    some_other_async(data,callback)
  })
}

set_user_val(function(data){
  $('#user-val').value(data['user_val'])
})
...a ES6 to vylepší jenom tím, že nemusím psát "function", ale jinak ten kód zůstane stejně pitomě vnořený a plný lambd. V pořádném funkcionálním jazyce, který umí synchronizovat asynchronní události by to mohlo vypadat třeba takhle (Elixir):

Nějak jsem nepochopil ten tvůj JS kód, zvláště pak proč předávat parametry data a callback do funkce some_other_async, když jsou pro ni dostupné přes závoru.
Pro podporu svých argumentů není potřeba protivníka záměrně potápět...  ;)

Taky nesouhlasím s tvým vyjádřením ohledně ES6 (navíc hodně toho jde i v ES5), kromě callbacků můžu použít promises, generátory a async/await (ES7, ale s babelem je to jedno).

S tím souvisí ještě jedna věc.

Asi je to v lenosti naučit se pár příkazů v něčem jiném.

Toto je veliký omyl. Naučit se pár příkazů je záležitost jednoho dne. Ale každý jazyk ma trošku jinou filozofii a komunitu lidí. A proto i tak příbuzné jazyky jako třeba Python, Ruby nebo Javascript jsou z hlubšího pohledu hodně odlišné, existují v nich naprosto odlišné idiomy a přetransformovat se z jednoho na druhý neznamená naučit se pár příkazů, ale porozumět jak v nich programy tvořit, poznat ekosystém, používané knihovny atd. A to je záležitost několika měsíců, minimálně. A poměrně hodně samostudia zdrojových kódů ikonických implementací. A to vůbec nemluvím o filozoficky úplně rozdílných jazycích.

To je důvod, proč např. v node.js neuspěly frameworky napodobující RoR, ale naopak mikrofunkce a mikroframeworky. A celý humbuk okolo microservices z velké čísti pochází z node.js.

Každému si nese svou historickou zátěž a vyhovuje mu něco jiného, proto jsou tak rozdílné názory.

Kit

Re:Programátorův pohled na svět
« Odpověď #87 kdy: 06. 01. 2016, 18:42:27 »
Add Kit, navigační počítač Apolla bylo vlastně takové Arduino, byl docela malý a nebyl analogový. Viz zde https://en.wikipedia.org/wiki/Apollo_Guidance_Computer

On toho dohromady moc neuměl. Bral údaje z přistávacího radaru a zderivoval. Obojí zobrazoval na displejích a řídil podle toho i trysku motoru.

Ty displeje jsou numerické, ale kdyby se ty hodnoty zlogaritmovaly, tak by stačily dva analogové měřáky nebo dvě řady ledek.

Ivan Nový

Re:Programátorův pohled na svět
« Odpověď #88 kdy: 06. 01. 2016, 18:59:13 »
Ad Kit, operační systém uměl multitasking pro osum úloh najednou. Pracoval jste někdy na stroji s feritovou pamětí?

Radovan.

Re:Programátorův pohled na svět
« Odpověď #89 kdy: 06. 01. 2016, 19:14:53 »
Ta přesnost na logáru je o hodně lepší než jen jedno desetinné místo. Jinak by mosty na něm počítané asi spadly.

No, jsou na to finty, ale stupnice na logáru je pořád jenom na to jedno desetinné místo. Správně bych měl říct na dvě číslice, protože to vůbec nemusí být nějaké desetiny ;)
Přesněji se s ním dá počítat také, ale to už zase musíš mít "balík programů" jak to provést, a opakovat je dokola, tím jsme se dostali k hybridním počítačům, což byla vůbec dost divoká kategorie. Ty bych sem radši netahal (vyráběl se i kříženec logára a Addiatoru).

S těmi nepřesnými mosty to nebude tak horké, jsou tam bezpečnostní násobky, a navíc:

Co je to pí?
Matematik: Pí je poměr obvodu kruhu a jeho průměru.
Fyzik: Pí je 3.1415927 plus mínus 0.00000005
Inženýr: Pí je něco kolem tří...


Zato budovy WTC už byly projektované pomocí číslicového počítače!

Jenže jsme se naučili vyrábět počítače, které zmíněné nevýhody eliminují. I obyčejné Arduino by dnes dokázalo přistát na Měsíci lépe než tehdejší počítače. Pomiňme, že se pro tento účel nehodí.

Neeliminují, jen to dokážou dělat mnohem rychleji a s větším počtem kuliček najednou. Arduino bych na Měsíc klidně poslal, jenom bych ho pro jistotu obalil pořádným futrálem z olova. Přece jen ty tranzistory a ferity vesmírné záření tak moc nerozhazovalo. Space Shuttle létal s feritovými pamětmi ještě v devadesátých letech!

Ten počítač v Apollu byl úžasné technické dílo, a neuvěřitelně ohackované už z vývoje. Například během projektování zjistili že na nějaký výpočet nestačí, a stáli před volbou jestli do slova přidat jeden bit, nebo z jedné instrukce udělat prefix pro druhou rozšiřující instrukční sadu, tak vybrali tu lehčí variantu - lehčí na hmotnost, těžší na vývoj ;D
Ale přistání se zapnutým radarem nakonec stejně nezvládl, Armstrong to musel vzít do pracek a přistát sám, mezi dvoumetrové šutry. A Aldrin měl sebou logaritmické pravítko na kterém výpočty počítače po celý let kontroloval, protože mu nevěřil.

Když už jsme zase u toho létání, tak letoun Voyager jako první dokázal v roce 1986 obletět zeměkouli bez mezipřistání a tankování. Celý jeho vývoj prováděl Burt Rutan na vlastním Apple II, v programech které si sám napsal v BASICu!