Byla vydána nová major verze 28.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Přehled novinek v příspěvku na blogu.
Český telekomunikační úřad zveřejnil Výroční zprávu za rok 2024 (pdf), kde shrnuje své aktivity v loňském roce a přináší i základní popis situace na trhu. Celkový objem přenesených mobilních dat za rok 2024 dosáhl dle odhadu hodnoty přibližně 1,73 tis. PB a jeho meziroční nárůst činí zhruba 30 %. Průměrná měsíční spotřeba dat na datovou SIM kartu odhadem dosáhla 12,5 GB – v předchozím roce šlo o 9,8 GB.
Z novinek představených na Google I/O 2025: Přehledy od AI (AI Overviews) se rozšiřují do dalších zemí. Užitečné, syntetizované přehledy od generativní AI jsou nově k dispozici i českým uživatelům Vyhledávače.
Šestice firem označovaných jako „MAMAAN“ – tedy Meta (Facebook, Instagram), Alphabet (Google), Microsoft, Apple, Amazon a Netflix – je zodpovědná za více než padesát procent světového internetového provozu. Dalšími velkými hráči jsou TikTok a Disney+. Společně tak zásadně určují podobu digitálního prostředí, spotřebitelského chování i budoucích trendů v oblasti technologií. I přesto, že se podíl těchto gigantů od roku 2023 o něco snížil, jejich dominantní postavení zvyšuje volání po regulaci.
Evropská komise (EK) navrhuje zavést plošný poplatek ve výši dvou eur (zhruba 50 Kč) za každý malý balík vstupující do Evropské unie. Poplatek se má týkat balíků v hodnotě do 150 eur (zhruba 3700 Kč), které v EU nepodléhají clu. V loňském roce bylo do EU doručeno kolem 4,6 miliardy takovýchto balíků. Poplatek má krýt náklady na kontroly rostoucího počtu zásilek levného zboží, které pochází především z Číny.
Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevily v únicích dat a případně se nechat na další úniky upozorňovat.
Oficiálně potvrzeno: Microsoft kupuje GitHub za 7,5 miliardy dolarů.
Tiskni
Sdílej:
a ten slizky MicrosoftTohle není problém Microsoftu, tohle je problém toho, že jste se stali závislí na jedné nesvobodné centralizované službě.
Mě by fakt zajímalo, jestli ti lidé, co tu opěvují GitHub, ToS nečetli, nebo jim fakt nevadí, co se tam píše.U mě za b). S tím, že Github jako firmu jsem nikdy neměl moc rád, ale zároveň k nim nebo jejich ToS nemam dostatečně negativní vztah na to, aby to převážilo přínos, který mi GH přináší, který vnímám jako velký.
Tohle není problém Microsoftu, tohle je problém toho, že jste se stali závislí na jedné nesvobodné centralizované službě.+1
IMHO ti lidi, co teď budou horečně migrovat kód a tak dál, hlavně ztratí čas a zbytečně se budou stresovatSice už „včera bylo pozdě“ – ale stále se odtamtud jde odstěhovat relativně bez stresu a v klidu. Co bys radil ty? Začít stěhováním, až se to tam sesype? To bych naopak považoval za zbytečný stres.
Keď kúpil linkedin. Predtým to bola neprehľadná spamovacia sračka. Teraz je to tiež neprehľadná spamovacia sračka akurát, že má plochejšie a neprehľadnejšie UI ;)
Navíc nemá v dnešní době žádnou náhradu a asi ani dlouho mít nebudePokud jde jen o jazyk, pak náhrady určitě jsou - Scala, Kotlin, Clojure, ... Pokud myslíš náhradu za JVM, napadá mě ten C#, případně asi i Go, ačkoli asi ne na všechno...
Pokud jde jen o jazyk, pak náhrady určitě jsou - Scala, Kotlin, Clojure, ...
Asi tak.
Pokud myslíš náhradu za JVM, napadá mě ten C#, případně asi i Go, ačkoli asi ne na všechno...
C# je VM? To spíš .NET CLR.
Mně by to taky bylo proti srsti, ale překvapivě je dost běžné pro interní komunikaci používat externí služby. Úplně stoprocentně se sdílení dat s cizími firmami ani vyhnout nejde, často je k řešení bugu potřeba crash dump nebo packet capture, což jsou věci, které se úplně sanitizovat dost dobře nedají, a ne všechno lze zreprodukovat v nějaké laboratoři, kde žádná citlivá data nejsou.
Já se obávám že Codeplex neuspěl právě z toho důvodu. U Microsoftu by si nechal citlivá data hostovat jen blázen a nebo sebevrah.
Proto jsem také psal, že u těch privátních firemních repozitářů vidím mnohem větší důvod k panice než u komunitních open source projektů. Jedna věc je svěřit část dat externí firmě a důvěřovat, že vás nepodrazí, ale pokud je ta externí firma váš konkurent, je to úplně jiná úroveň problému. A Microsoft vzhledem k šíři svého záběru konkuruje ledaskomu.
Mně by to taky bylo proti srsti, ale překvapivě je dost běžné pro interní komunikaci používat externí služby. Úplně stoprocentně se sdílení dat s cizími firmami ani vyhnout nejde, často je k řešení bugu potřeba crash dump nebo packet capture, což jsou věci, které se úplně sanitizovat dost dobře nedajíNo... to si tak zvykneš na to, že lidi ochotně pošlou dump, a pak ti jednoho dne přistane bugreport od $výrobce_stíhaček a na dotaz na crashdump jsi poslán někam, že to je secure system, ale že by byli velice rádi, kdyby to bylo vyřešeno... (měli jsme tehdá štěstí, že nedlouho na to stejnou chybu nahlásil i úplně obyčejný dumpy sdílející zákazník).
Předpokládáme, že máte dostatečně chytré věštce, aby jim tohle stačilo.FTFY
No to jsem pochopil, jen jsem nepobral proč tak prostě činit u někoho kdo má očividně k citlivým datům libovolný přístup.Protože dneska je doba cloudová, dokumenty máme na Google Docs, soubory na Dropboxu, maily na GMailu, zdrojáky na GitHubu…
Vůbec nemáš představu, co všechno dokázal M$ zmařit. Jako ochutnávku viz třeba BTRON:
Business TRON (BTRON), is a computer operating system with a graphical user interface (GUI) built upon Central TRON (CTRON), itself a subproject of The Real-time Operating system Nucleus (TRON). TRON was launched in Japan in 1984 as an initiative to create a single, universal operating system with an open architecture.
The Japanese government planned to introduce the Matsushita PC in its schools, but the Office of the United States Trade Representative objected, claiming that the plan constituted market intervention and threatened Japan with sanctions; not coincidentally, the former official of the United States Trade Representative office who issued the threats against the Japanese government, Tom Robertson, had been offered by Microsoft the very lucrative position of being their Tokyo-based director for government affairs in Asia.
Ja bych radsi vzhledem k historii migroval ihned.Jo, ale kam?
smarja, bitbucket, gitlab, moznosti je plno...Možností možná, ale alternativ nikoliv. Jak už jsem psal ve vedlejší diskuzi:
Osobně vidím výhodu Githubu právě v té sociální části. Ostatně nebýt GH tak jsem se asi nikdy tolik nezapojil do opensource projektů a když už, tak asi jen do těch větších. Díky GH čas od času posílám commity i do těch úplně mrňavých, čistě protože se dají jednoduše najít a nebýt githubu, tak bych se o nich ani nedozvěděl. Taky se mi líbí ta filosofie „code first“ a že člověk u menších projektů nemusí vymýšlet žádnou prezentaci - samotný kód je tou prezentací. Vzpomínám si ještě na doby, kdy si člověk musel dělat pro svoje projekty vlastní stránky, což i když už náhodou udělal, tak zabilo objevitelnost (než to zaindexuje google a na jakou pozici to asi tak dá) a u ostatních lidí ochotu zapojit se (nebudou vymýšlet jak kód stáhnout, provést patche a dát mi o nich vědět).Tu komunitu, otevřenost a jednoduchost editace a discoverabilitu ti ani gitlab, ani bitbucket (který mimochodem používám a mám tam okolo desítky repozitářů) prostě nenabízí. Github je především komunitní web, který organizuje issue, diskuze a wiki, uživatelské profily, followování a tak podobně. o že zároveň ještě i hostuje gitové repozitáře je fajn, ale to umí kde co.
A v čem se to liší od gitlabu?Gitlab si hostuješ sám. Například já si nahostuju Gitlab u sebe na serveru, nahraju tam těch 60 projektů co mám teď na githubu a budu čekat, až to někdo sám najde a bude mít náladu se tam zaregistrovat a přihlásit a posílat mi pull requesty, což ze zkušenosti vím, že se prostě nikdy nestane. Oproti tomu ty projekty na githubu měly návštěvnost a pull requesty občas prostě jen proto, že na to někdo narazil a líbilo se mu to. Rozdíl je asi jako mezi tvým osobním webem a abclinuxu, což je stejně jako github web primárně o komunitě. Zcela běžně mám pod blogy stovky diskuzních příspěvků. Víš kolik jsem jich měl na webu, když ještě umožňoval diskuze? Určitě to uhodneš. Github je komunitní projekt. Gitlab není. Bitbucket částečně, ale neusnadňuje to.
Github je komunitní projekt. Gitlab není. Bitbucket částečně, ale neusnadňuje to.Špatně řečeno. Github je komunitní web. Gitlab není. Komunitní projekty jsou to oba.
Může to být fajn projekt, ale je to zase Self hosted. Když to budeš hostovat, tak tam nebude nikdo z tvých známých a kamarádů, nikdo se ti tam nebude chodit registrovat a zakládat ti tam issue a povídat si s tebou o návrzích. Nikdo jen tak náhodně nepřijde a nenapíše ti na wiki jak vyřešit nějaký problém. Nikdo pravděpodobně ani nebude vědět, že to vůbec existuje.+1
Komunitní projekty jsou to oba.Github není komunitní projekt, GitHub je služba běžící na proprietárním softwaru vyvíjeném komerčním týmem.
A v čem se to liší od gitlabu?Gitlab si hostuješ sám. Například já si nahostuju Gitlab u sebe na serveru, nahraju tam těch 60 projektů co mám teď na githubu a budu čekat, až to někdo sám najde a bude mít náladu se tam zaregistrovat a přihlásit a posílat mi pull requesty, což ze zkušenosti vím, že se prostě nikdy nestane.
Tady vidím nedorozumění: je potřeba rozlišovat gitlab jako software (to je to, o čem mluvíte vy) a gitlab jako službu (resp. portál), tj. konkrétní instanci toho prvního, která běží na gitlab.com
Tady vidím nedorozumění: je potřeba rozlišovat gitlab jako software (to je to, o čem mluvíte vy) a gitlab jako službu (resp. portál), tj. konkrétní instanci toho prvního, která běží na gitlab.comHmm, ok. Prozkoumám.
Jo mimochodem, gratujluju. Právě jste byli vytrolováni.
Kdybych měl kompa už v 90. letech (ideálně s linuxem), tak bych byl teďka jindeNemyslím si. Já strašně záviděl kamarádovi (resp. to byl kluk od sousedů) co měl už v té době nějaké Pentium s Windowsama (za těžkých 40litrů – otec byl hraničář, takže si to mohly dovolit) zatímco já si okýnka kreslil jen na Didaktiku. Pařil na tom tehdy Age of Empires (zatímco já o něco málo později právě ten WC2) a že by ho to někam posunulo… To stejné vlastně druhý soused. To býval těžký borec protože dovedl nainstalovat Win 3.11 z disket na obstarožní 286 co tata kdesi sehnal. Myslíš že by tě to někam posunulo? Navíc jak říká Liška, nezapomeň že v té době si se mohl učit tak maximálně číst a psát, ne dělat něco vážného. Ten BASIC byla v mém případě spíš náhoda a úplně první vážnější "jazyk", tedy VRML97 přišlo právě až po přelomu milénia. V 90. letech býval Linux něco absolutně mimo svět běžných smrtelníků (navíc tak jádra 2.4) a představa že jako capart sedím před nějakou 486kou a kompiluju natvrdo do jádra ovladače – to už bych byl větší kinder-hipster než Kolíbáč.
Já strašně záviděl kamarádovi (resp. to byl kluk od sousedů) co měl už v té době nějaké Pentium s Windowsama (za těžkých 40litrů – otec byl hraničář, takže si to mohly dovolit) zatímco já si okýnka kreslil jen na DidaktikuTaky jsem mel osmibitovy pocitac, kdy mezi beznou populaci byly k dispozici 386ky a 486ky. Tehdy me to trochu stvalo, s odstupem casu toho nelituju. Na osmibitech jsem si mohl pohodlne osahat veci, ktere uz dnesni decka nezazijou. Kde si dneska muzou decka v klidu bez nejakeho laborovani zkouset primy zapis na porty jednotlivych zarizeni nebo zapisovat primo do pameti namapovane zarizenimi? Psat rucne strojovy kod na Z80 je o fous pohodlnejsi nez s AMD64.
V 90. letech býval Linux něco absolutně mimo svět běžných smrtelníků (navíc tak jádra 2.4)RedHat 5.x nebo 6.x byly na tu dobu konkurence schopne desktopove Unixy. Co hodne chybelo byl kancelarsky balik, proto se to moc nechytalo.
V retrospektivě už se na to samozřejmě dívá člověk jinak a navíc co se v mládí naučí…
RedHat 5.x nebo 6.x byly na tu dobu konkurence schopne desktopove UnixyJenže v dobách kdy vrchol mých sil byla instalace ilegálních Win98 bych to nedal. To si nebudu lhát do kapsy. Ani bych neměl důvod.
Dnes je na hraní Arduino, Raspberry Pi a docela se rozmáhá jednoduchá robotika.Su rad, ze dneska uz jsou takove moznosti. Ale v Raspi zavazi kernel a Arduino je druhy pocitac (+ je potreba chvilku laborovat s IDE a pripojenim), takze to neni uplne ono. U tech osmibitu bylo bozi, ze clovek mel okamzity pristup ke vsemu, co ten hardware mel. A kdyz na to doslo, slo to treba kombinovat s Basicem. (Na druhou stranu tam byla spousta veci, kde se dalo neco jednoduse rozbit a clovek musel zacit od zacatku.)
Kde si dneska muzou decka v klidu bez nejakeho laborovani zkouset primy zapis na porty jednotlivych zarizeni nebo zapisovat primo do pameti namapovane zarizenimi?V bashi přes devmem prográmek. Polovina mých embedded pokusů má skripty, kde přes to něco nastavuje
No já kompa dostal tak ve 13 letech a byla to zavirovaná 386 (myslím).Odviruješ a máš echt komp k dispozici.
Tam se dalo programovat maximálně v qbasicu.A na čem si myslíš že jsem asi v té době „programoval“ já? A to jen z toho důvodu, že to bylo jako volitelný addon na CD s W95. Jinak by to byly BAŤáky v M602.
Kdybych začal rovnou v céčku, tak bych si to osvojil mnohem líp, protože bych se to učil mladší.Tak to si nenech nakecat. Oh, what the hell…tak dobrá, když zpověď, tak zpověď (doufám že to vytáhne zas nějaký anonymní debílek):
Tak v sedmé, osmé třídě jsem měl „nehodu“. Skončil jsem v rehabilitačním centru/léčebně pro děcka přes léto. Běžná průměrná populační retardace, takže se tam stejně moc nedalo dělat, nicméně jednoho dne tam přišel takový nerdson, jak ho popsat? Béžový pletený svetr, na hlavě místo vlasů atomový hřib, "ř" nedovedl pořádně vyslovit když by měl u sebe pravítko tak by ho použil jako katanu a rozsekl mě vejpůl. Prostě buchar jako kráva. Ten byl jiný už od pohledu. Potkávali jsme se u 386-ky protože Pentium s internetem bylo určeno pro starší plnoleté osazenstvo ústavu či populárnější nebo prostě zasloužilejší ptáky. A taky z toho důvodu že oba jsme uměli s dosem (první věc co mně zaujala, protože ten počítač býval jinak z toho důvodu úplně prázdný a také první člověk z druhého stupně ZŠ co dovedl ovládat příkazovou řádku). Takže jsme se nějak skamarádili a ten my vykládal jak trávil léta na Delphi táboře, uměl snad s nějakým FoxPro nebo co, prostě něco jako synátor Billa Gatese. No já si připadal jak nějaký untermenš. Ať to vysvětlím. Ještě než se mi to stalo jsme se u nás se spolužákem dali na to že se naučíme programovat ať můžeme psát oblíbené počítačové hry, napsat něco třikrát lepšího než Q3A, pětkrát akčnějšího než Duke Nukem a naprosto trhnout tržní rekordy v prodejích a všem těm lamám ukázat Proto to VRML97. V té době kdy jsem byl v léčebně jsem se učil PHP (z CHIPu a programoval jsem si do sešitku protože jinak nebylo absolutně na čem, Pentium bylo těžce využíváno mazáky na Need for Speed, Xchaty, porno nebo něco takového), JavaScript, HTML, pomalu programoval pro NASA a teď přede mně nakráčí nějaký borec mladší než já a píše opravdové spustitelné aplikačky (tzv. eksáče) a tráví léta na programovacím táboře zatímco já saju bůhvíkde? Bože to byla závist.
Hned jak jsem se dostal domů, spolužák už samozřejmě pokročil, a taky skončil a dal se na trávu a tak mi prodal nějakou učebnici Céčka a já se mohl zadrhnout. Já to nedával. Jako představ si osmou třídu, z BASICu, PHP, Macromedia Flashe na Céčko a snažíš se to stůj co stůj naučit. To byla válka, to byl boj urputný. To jsem měl hodně co dělat abych pochopil vůbec nějaké základy, pointry a pokročilejší věci vůbec. Doslova peklo.
No v čem je pointa? S tím Céčkem jsem válčil snad až do výšky kdy jsem ho plně bez problémů pochopil, ale jen díky tomu že jsem se tam učil Assembler a vůbec nějaké základy o počítačích, kompiloval jsem si svoje vlastní progarmy v GNU a taky už jsem na to asi měl věk. A v tom je ta pointa. Pokud si „Ficovi z predkožky nevyskočil“ a fakt si nebyl nějak druh mladého génia, tak si se mohl snažit, pokoušet, ale o moc dál než si teď by ses stejně pravděpodobně nedostal a to konkrétně do doby než by si dospěl. A jestli si nakecáváš že jo (a nebo si někým druhým nakecávat necháš), tak děláš chybu. Prostě by si stejně jako většina z nás mastil Warcraft II, "programoval" v QBASICu, apod. Ostatně jak daleko zmiňovaný mladý nerdík se kterým jsem měl tu čest skončil by mě vážně zajímalo.
Ale pořád to bylo maximálně tak win98se (nebo dualboot do málo používanýho linuxu, první linux/live suse mě vybouchl v CDROMce, protože se teplem vyvlékl plastovej protikus co držel CDčko na motoruNo Linux byla další závist, tentokrát v tom zakomponovaný spolužák a to by bylo na další příběh. Očividně jsem to dal. Taky.
Odviruješ a máš echt komp k dispozici.Antivir jsem sehnal až za 2-3 roky na střední
S tím Céčkem jsem válčil snad až do výšky kdy jsem ho plně bez problémů pochopil...Tak já se Cčko začal učit až když jsem získal GCC, což bylo nejspíš až v roce 2006, to mě bylo 19 (na střední jsme měli blésdelphi, blésmrtvisualbasic nebo super assembler 8051). Právě proto píšu, že kdybych se ho učil ještě na zakladce, tak by to bylo efektivnější. Sice ano hrozilo by, že se vyhnu 8086 assembleru z DOSu, ale zase bych se k němu dostal stejně oklikou z céčka a embedded věcech, takže bych se k němu stejně dostal +- ve stejný čas. Koneckonců jsem na rané vejšce ručně s ndisasm rozebral asi třetinu BIOSu mýho notebooka, což nezáviselo na tom, jakej jsem se učil jazyk na střední.
Kdybych začal rovnou v céčku, tak bych si to osvojil mnohem líp, protože bych se to učil mladšíPascal je na prvni seznameni s programovanim nasobne lepsi nez C. Spousta veci se da vysvetlit (promenne, cykly, pole) bez toho, aniz by nekde vyhrezavaly pointery. Civilizovana prace se vstupy/vystupy a retezci, aniz by nekde vyhrezavaly pointery. Takze zacinajici programator se muze venovat reseni algoritmu misto toho, aby zapasil s jazykem a jeho implementaci. Kdyz dojde na slozitejsi struktury a ukazatele (seznamy, stromy, apod.), uz ma dobry zaklad, na kterem se da stavet. Pascal ma jeste jednu nedocenenou vlastnost a to moznost deklarovat procedury/funkce uvnitr procedur a funkci. Nauci to cloveka rozdelit rozsahly problem na problemy mensi. Obcas vidim kod lidi 40+ a z jeho struktury jde velice casto poznat, kdo si prosel v mladi Pascalem a kdo ne.
Ono je obecně problém, že lowlevel jazyky, jako třeba C, po tobě chtěj lowlevel znalosti počítače, specificky CPU a paměti. A ty začátečníkům většinou nikdo nesdělí, protože v podstatě vyžadují naučit je ještě k tomu assembler a povyprávět jim o architektuře.CPU ani moc ne. Spíš jde o tu paměť, datové typy atp. Se zbytkem komentáře souhlasím.
Tak třeba se hodí vědět, že CPU má nějaké registry, k čemu slouží, jak funguje přímá a nepřímá adresace paměti a tak.K čemu?
Pak nemáš problém pochopit pointery.Jak to souvisí?
No pokud člověk programuje (nejen v céčku) a tohle neví, tak pak z něj padaj dost šílený algoritmy, co sice matematicky fungujou, ale na reálném HW se chovají naprosto nemožně neefektivně.Jak ti znalost cílového procesoru, konkrétně registrů a adresace paměti, o kterých byla řeč, pomůže optimalizovat programy? Nota bene tak, aby to bylo víc než mikrooptimalizace.
Spíš to pomůže nepsat je zoufale neefektivní. Není samozřejmě potřeba (až na výjimky) znát detaily specialit konkrétní architektury, i když je žádoucí třeba povšechné povědomí, že existuje big endian a že ne všude jsou základní typy stejně dlouhé. Programátor bez základní představy, co se vlastně při zpracování děje, mívá tendenci považovat volání knihovních funkcí za atomické elementární operace a nemá cit pro to, co je triviální a co náročné.
Setkal jsem se třeba s tím, že zpracování čísla po (desítkových) číslicích se řešilo převedením čísla na string, rozsekáním na číslice a převáděním jednotlivých číslic (stringů) zase na číslo. Pokud člověk nechápe, že aritmetické operace přímo odpovídají instrukcím procesoru, zatímco převod čísla na string nebo naopak je mnohonásobně náročnější, tak mu prostě nedojde, co je na tom špatně.
Setkal jsem se třeba s tím, že zpracování čísla po (desítkových) číslicích se řešilo převedením čísla na string, rozsekáním na číslice a převáděním jednotlivých číslic (stringů) zase na číslo.To byl jardíkův blogpost ne? Pamatuju si to taky
No pokud člověk programuje (nejen v céčku) a tohle neví, tak pak z něj padaj dost šílený algoritmy, co sice matematicky fungujou, ale na reálném HW se chovají naprosto nemožně neefektivně.Tak jak to je? Znalost registrů a adresace paměti je zcela nezbytná pro to, aby dotyčný mohl navrhovat efektivní algoritmy, a nebo je užitečná ve speciálních případech, ale spíše až těch, kde je nezbytná spíše celková znalost assembleru?
Původní komentář
Pak jsem z netu získal Athelp, to byla výhoda, tam jsem udělal znalostní skok tak během 14 dníKdyž jsem psal o athelpu, tak se dá předpokládat, že se zabývám hlavně minoritními případy.
ale že se ty data například nasypou do registrů a pak zase někam jinam do pamětiTo podle mě potřeba není (a alespoň já tohle ve svém modelu nepotřebuju), stačí se zamyslet, že struktura je větší než třeba int a tak to asi bude trvat dýl.
USB host driver v kernelu. Je rychlejší udělat polling bufferu nebo inicializovat DMA?Chtěl bych připomenout, že vlákno začalo totálními začátečníky.
K čemu? Jak to souvisí?Vždyť to přímo jsou pointery :D
Ale když píšeš enkodéry dekodéry videa a zvuku, engine her, DSP nebo i blbé zpracovávání bitmap, tak se s inline assemblerem setkáš. A u vektorových operací si musíš pamatovat jak se ty vektorové registry skládaj do skalárů. A nebo embedded MCU, kritické průmyslové aplikace a možná okrajově i HW/SW codesign.Coz opravdu zacinajici programatori delaji kazdou chvili. Plus toto je tak specificka oblast, ze temer pro kazdy typ procesoru se to clovek musi naucit extra.
Na pochopení pointerů nepotřebuješ vědět nic o adresaci paměti v assembleru. Nebo jak ti pomůže vědět, co jsou třeba segmentové a bázové registry, jak funguje virtuální paměť apod.?Samozřejmě to můžeš chápat jako abstraktní koncept, ve skutečnosti ale pořád nechápeš celek, neboť ti chybí odpověď na otázku „a proč to tak je? proč zrovna takhle a ne jinak?“ Což nemusí vadit, ale těžko někdy překročíš svůj stín a navrhneš například lepší systém, nebo pochopíš, kdy je možné ho obejít, nebo řešit úplně jinak.
V tomhle mají výhodu highlevel jazyky (python / java), protože nejenom že přesné pochopení nevyžadují, ale taky navíc díky vyšší abstrakci nabízejí větší produktivitu. Což pro začátečníky znamená vyšší pocit že jim to k něčemu je.Teď jsme u toho, že společně s C je potřeba vyučovat i assembler, protože to sice k ničemu není, ale rozšiřuje to obzory a budoucí kernel hackeři, kterých se ze všech programátorů v C rekrutuje zlomek, se bez toho stejně neobejdou. To pak můžeme jít rovnou přes elektrotechniku a pak fyziku a zkoumat, z jakých atomů a jak je složen tranzistor a jak jsou z tranzistorů poskládána hradla a jak funguje atomová elektrárna, která počítačům dodává proud, protože to všechno taky rozšiřuje obzory, někomu by se to mohlo v budoucnu hodit a zanedbatelný zlomek lidí se bez toho v budoucnu neobejde, tak to raději budeme učit všechny.
To je ovšem mimořádně zajímavé, protože ještě před chvílí:Ano.V tomhle mají výhodu highlevel jazyky (python / java), protože nejenom že přesné pochopení nevyžadují, ale taky navíc díky vyšší abstrakci nabízejí větší produktivitu. Což pro začátečníky znamená vyšší pocit že jim to k něčemu je.
Teď jsme u toho, že společně s C je potřeba vyučovat i assembler, protože to sice k ničemu není, ale rozšiřuje to obzory a budoucí kernel hackeři, kterých se ze všech programátorů v C rekrutuje zlomek, se bez toho stejně neobejdou. To pak můžeme jít rovnou přes elektrotechniku a pak fyziku a zkoumat, z jakých atomů a jak je složen tranzistor a jak jsou z tranzistorů poskládána hradla a jak funguje atomová elektrárna, která počítačům dodává proud, protože to všechno taky rozšiřuje obzory, někomu by se to mohlo v budoucnu hodit a zanedbatelný zlomek lidí se bez toho v budoucnu neobejde, tak to raději budeme učit všechny.Tak ale samozřejmě. O tom jsem mluvil už od začátku! To je přece úplně normální obsah výuky elektro/IT průmky. Nebo vy jste neměli fyziku a číslicovou techniku? To píšeš, jak kdyby to bylo něco extra. Ten přístup kdy to začátečníky nenaučíš je jako učit matematiku jako vzorce. Pokud se naučíš používat vzorec pointerů, tak ti to sice může stačit, ale těžko můžeš dělat matematiku. Je to pro tebe jen fakt co si pamatuješ, ale ve skutečnosti mu nerozumíš, nechápeš konsekvence a myslíš si, že to tak je prostě protože ti to někdo řekl. Imho je lepší začít od axiomů a postupně si skládat obraz světa, kde jsi schopný si odvodit, protože pak můžeš skládat libovolné jiné korektní vzorce a například plynule přejít k programování FPGA, tvorbě vlastního kompilátoru, nebo na úplně jiné architektury. Dokud to nechápeš, tak jsi odsouzen bloudit v limitech toho, co ti určili jiní. Já jsem psal o problémech, které s tím mají začátečníci, kterým se další teorie nedostane. To jsem tak nějak viděl kolem sebe a vůbec nedivím, že jsou pro ně pointery opruz co pořád zapomínají a všechno ostatní je taky oser, protože C bez assembleru nejde skutečně pochopit, ve smyslu že nepochopíš designové rozhodnutí, které za ním stály a je z toho pro tebe jen kopa bullshitu, který si někdo náhodně vymyslel, když se nudil. Asi jako když tě někdo naučí
ax² + bx + c = 0
. Může to být pro tebe použitelný nástroj, kterému ale nerozumíš, dokud nechápeš i zbytek a ideálně i historii.
Imho je lepší začít od axiomů a postupně si skládat obraz světa, kde jsi schopný si odvodit, protože pak můžeš skládat libovolné jiné korektní vzorce a například plynule přejít k programování FPGA, tvorbě vlastního kompilátoru, nebo na úplně jiné architektury. Dokud to nechápeš, tak jsi odsouzen bloudit v limitech toho, co ti určili jiní.Myslíš, že dneska může existovat renesanční člověk, který bude rozumět všemu, obsáhne všechny ty vrstvy? Podle mého už dávno ne, protože lidské poznání je tak rozsáhlé, že to v silách jednoho člověka není.* Takže si musíš vybrat, kterou část toho vědění si načteš do paměti a u zbytku jsi odkázaný na spolupráci s jinými lidmi. Pokud začneš odspodu, tak sice můžeš psát efektivní algoritmy pro konkrétní procesor, ale chybí ti to nad tím – tam ti musí někdo jiný říct, co má ten program dělat, jak má komunikovat s člověkem, s jakými jinými systémy se má spojit… Naopak když se soustředíš na tu horní část, vrchní vrstvy abstrakce, tak občas můžeš potřebovat někoho, kdo ti pomůže s těmi nízkoúrovňovými optimalizacemi. Pokud zvládneš oboje, tak fajn, tím líp pro tebe, ale pokud bych si měl vybrat, tak bych se soustředil víc na ty vyšší vrstvy**, protože ty nižší vrstvy za tebe většinou vyřeší kompilátor a rychlý HW (stačí to nepsat vyloženě hloupě a nedělat zjevné chyby, na které člověk přijde i selským rozumem bez znalosti registrů procesoru) a kdyby bylo nejhůř tak si najdeš někoho, kdo ti s tím pomůže. *) spíš mi přijde, že lidstvo jako celek dokonce ztrácí některé znalosti/dovednosti, které dřív mělo – něco je zapsané v knihách, takže se to dá načíst zpět, ale není tam všechno a některé postupy je potřeba složitě reprodukovat, v podstatě je objevit znovu **) pokud není podstatou mojí práce to Jádro nebo optimalizace algoritmů, jak už jsem tu psal
Myslíš, že dneska může existovat renesanční člověk, který bude rozumět všemu, obsáhne všechny ty vrstvy? Podle mého už dávno ne, protože lidské poznání je tak rozsáhlé, že to v silách jednoho člověka není.* Takže si musíš vybrat, kterou část toho vědění si načteš do paměti a u zbytku jsi odkázaný na spolupráci s jinými lidmi. Pokud začneš odspodu, tak sice můžeš psát efektivní algoritmy pro konkrétní procesor, ale chybí ti to nad tím – tam ti musí někdo jiný říct, co má ten program dělat, jak má komunikovat s člověkem, s jakými jinými systémy se má spojit… Naopak když se soustředíš na tu horní část, vrchní vrstvy abstrakce, tak občas můžeš potřebovat někoho, kdo ti pomůže s těmi nízkoúrovňovými optimalizacemi.Záleží na úrovni. Vědění je do jisté míry fraktální a záleží, jak moc hluboko do toho fraktálu jdeš. Ale všechno to o čem jsem psal byly běžné věci, které se učili na střední ještě před 10 lety. My jsme třeba probírali modely atomu, jak fungují vodiče, nevodiče a polovodiče na úrovni valenčních sfér, jak jsou z toho pak postaveny diody a tranzistory a jak jsou z nich tvořeny logická hradla a z nich (to už ale až na VŠ) počítače, jak se řeší časování, jak je udělaný procesor a jak pro něj vypadá assembler (na to jsme měli emulátor toho CPU). A pak ti na to krásně naváže C a vyšší jazyky pak na C. A stejně si nepřipadám, že by mě to nějak omezovalo v pochopení třeba Lispu, nebo Smalltalku, nebo lambda calculu. Co jsem chtěl původně říct je, že pokud si v hlavě nestavíš axiomatický model reality, tak to prostě nemůžeš pořádně pochopit. Je to jako se učit matematiku tím že se budeš učit vzorce nazpaměť a nechápat přitom vztah třeba s geometrií, nebo ekvivalentní úpravy a transformace. Je to možné tak provozovat, ale je to nesrovnatelně těžší a nepraktické oproti tomu chápat jak spolu vše souvisí, protože to prostě dává v tvém interním modelu světa smysl.
Takže pro výuku C je potřeba jít do těch low level záležitostíJestli mi ještě někdo vloží do úst slovo potřeba, tak se vystavuje nebezpečí vypíchnutí oka propiskou.
Pythonu to potřeba není? Protože o tom se bavíme celou dobu. Ne o vzdělávání obecně a o tom, že je skoro vždycky výhodné rozumět věcem do co největší hloubky, ale o tom, že podle tebe je nezbytné pro výuku C zabřednout do assembleru (a jako příklad jsi uváděl registry a adresaci paměti na úrovni CPU).Python (ale i taková Java) je od toho hodně odstíněná, doslova oba jazyky se tě snaží odstínit od hardware kde to jen jde. Takže si troufám tvrdit, že by to byl sice bonus, ale důležité to není. Oproti tomu C je přímo svázané s hardwarem počítače, je to v podstatě jen takový makroassembler, který sice odstiňuje konkrétní instrukční sadu, ale například už ne detaily paměti.
Reálně potřebuješ lidem vysvětlit Von Neumannovu architekturu, na jakém principu fungují datové typy (ve smyslu, že z libovolného místa v paměti můžeš přečíst pár bajtů a interpretovat je jako libovolný typ, ale nemusí to pak dávat smysl) a pro jistotu se zmínit o tom, že adresní prostor jednotlivých programů je oddělený. Ani není potřeba vysvětlovat virtuální paměť a jak funguje překlad virtuálních adres na fyzické apod., protože kdyby existovaly jen fyzické adresy a operační systém si nějak „pohlídal“, aby se bloky paměti přidělené jednotlivým procesům nikdy nepřekrývaly a „nějak“ (emulací) si pohlídal přístupy adresy z jiných rozsahů, tak to pro tebe v drtivé většině případů nebude hrát vůbec žádný rozdíl.Tak samozřejmě. Taky nemusíš vysvětlit nic, prostě před ně dát kompilátor a nechat je programovat. Dokonce i děti jsou schopné se to prostě jen tak naučit používat a budou schopny to používat. Jenže se podívej na to kolik lidí je takhle naučeno C třeba ve škole a kolik lidí to skutečně pochopí a má snahu v tom dál pokračovat. Z mých zkušeností plyne, že asi tak něco kolem 20 až 30%.
v podstatě vyžadují naučit je ještě k tomu assembler?
v podstatě vyžadují naučit je ještě k tomu assembler
Na druhou stranu: pokud se budeš hrabat v implementačních detailech procesorů a assemblerech, tak ti nezbude mentální kapacita na to, abys vymyslel něco nového na vyšších úrovních abstrakce. Jde o to, jak hluboko se chceš ponořit a co ti to přinese. Nakonec k vytvoření lepšího softwaru nebo k nějakému revolučnímu objevu ti může pomoci víc třeba studium ekonomie, psychologie nebo náhodné jiné vědy nebo oboru, než studium vnitřností x86. Jde o to, co je efektivněji investovaný čas do studia. Pokud chce někdo přispívat do Jádra nebo psát nějaké extrémně optimalizované algoritmy, tak jistě zvolí to první. Pokud ale někdo chce tvořit aplikace a pohybovat se spíš na vyšších úrovních abstrakce, dál od procesoru a blíž k uživateli, tak bych doporučoval studovat raději jiné věci.
No ono se ještě v době DOSu přímo přistupovalo k HW, takže jedno nevylučovalo druhé.Abstrakce, ktere se v te dobe pouzivaly, byly z duvodu omezeni hardwaru hodne primitivni. Proto se taky software pri prechodu na windows prepisoval od nuly, misto toho, aby se jen vymenila vrstva UI.
Žádný optimalizátor to za tebe neudělal.Ano, tehdy byli ruzni guru, kteri vedeli, ze ++i je v tom a tom pripade rychlejsi nez i++. Nebo, ze volani funkci a procedur je drahe, proto vsechno naprali do jedne velke funkce. Kde je jim konec?
Na druhou stranu: pokud se budeš hrabat v implementačních detailech procesorů a assemblerech, tak ti nezbude mentální kapacita na to, abys vymyslel něco nového na vyšších úrovních abstrakce.To mi přijde jako velmi, velmi, velmi hrubé podcenění kapacity lidského mozku. Asi jako říct, že pokud si přečteš Euklidovy základy, tak už ti nezbyde kapacita na to pochopit abstraktní matematiku.
Takže aspoň za mě ANO, mít nějaké základní ponětí co je pod povrchem velice pomáhá v pochopení a přijmutí vyšších abstrakcí.O to se určitě nepřu. Myslel jsem to tak, že při současném řešení abstrakce i technických detailů výsledek nebude tak dobrý, jako kdyby se člověk jen jedné z těch dvou věcí. To je rozdíl, který pociťuji, když dnes zkouším něco psát v C (které jsem víceméně opustil ve prospěch vyšších jazyků). Ale po opětovném přečtení #304 musím říct, že to není to, co měl Franta na mysli. Ono je to dost individuální. Obecně je dobré toho umět co nejvíc, ale naučit se všechno nelze, takže je to vždy něco na úkor něčeho. Pak je to o nějakém kompromisu. Já jsem v tomhle anarchista a prostě ať se každý učí, co uzná za vhodné.
Já furt nějak nechápu proč je pro použití pointerů potřeba „vědět, že CPU má nějaké registry, k čemu slouží, jak funguje přímá a nepřímá adresace paměti“. Respektive proč je to potřeba vědět více, než když chci na podobné úrovni chápat nějaký high-level jazyk - tam se k tomu navíc přidává bytecode, JIT a další věci.Já jsem ale nepsal, že je to potřeba, jen že se to hodí. Jinak viz #311. Tldr: pokud začneš od axiomů, tak ti věci dávají větší smysl, protože budovaný mentální model je vnitřně konzistentní a obsahuje minimum informací typu "tady je fakt X, který prostě uznávám že tak je, protože proto". Pokud víš jak funguje assembler (a adresování a způsoby přístupu k paměti), pointery jsou pro tebe naprosto přirozená věc, která dává logický smysl.
^ Prostě ne. Že se někdy nějak hodí umět asm, elektrotechniku, fyziku, matematiku a whatnot? Jasně. Ale určitě to není pro učení úplných začátečníků C potřeba o mnoho víc než u high level jazyku.Tak třeba se hodí vědět, že CPU má nějaké registry, k čemu slouží, jak funguje přímá a nepřímá adresace paměti a tak. Pak nemáš problém pochopit pointery.Ono je obecně problém, že lowlevel jazyky, jako třeba C, po tobě chtěj lowlevel znalosti počítače, specificky CPU a paměti. A ty začátečníkům většinou nikdo nesdělí, protože v podstatě vyžadují naučit je ještě k tomu assembler a povyprávět jim o architektuře.CPU ani moc ne. Spíš jde o tu paměť, datové typy atp. Se zbytkem komentáře souhlasím.
To jsi to otočil fakt ale hodně jinam.Jak, prostě ne? To se tu hádáš, že když rozumíš assembleru, tak že budeš mít problém pochopit pointery?^ Prostě ne.Tak třeba se hodí vědět, že CPU má nějaké registry, k čemu slouží, jak funguje přímá a nepřímá adresace paměti a tak. Pak nemáš problém pochopit pointery.Ono je obecně problém, že lowlevel jazyky, jako třeba C, po tobě chtěj lowlevel znalosti počítače, specificky CPU a paměti. A ty začátečníkům většinou nikdo nesdělí, protože v podstatě vyžadují naučit je ještě k tomu assembler a povyprávět jim o architektuře.CPU ani moc ne. Spíš jde o tu paměť, datové typy atp. Se zbytkem komentáře souhlasím.
Že se někdy nějak hodí umět asm, elektrotechniku, fyziku, matematiku a whatnot? Jasně. Ale určitě to není pro učení úplných začátečníků C potřeba o mnoho víc než u high level jazyku.Ok, tak to máme nějaké tvrzení. Teď ho podlož argumenty. Já už jsem argumentoval dost.
To se tu hádáš, že když rozumíš assembleru, tak že budeš mít problém pochopit pointery?Hádám se, že porozumění assembleru není prerekvizitou pro pochopení pointerů.
Ok, tak to máme nějaké tvrzení. Teď ho podlož argumenty.To je na úrovni axiomu. Nevím, jak mám podložit argumenty, že paměť jako indexovatelné pole bajtů je koncept pochopitelný sám o sobě a např. znalost toho, jak dementně se na 80286 adresuje paměť pomocí dvojice registrů, nebo toho, jak se inicializuje long mode, je vůči tomu zcela irelevantní. To je jako bys v diskuzi o učení prvňáčků řekl, že pochopení čísel v podstatě vyžaduje pochopit číselné soustavy a obory čísel a argumentoval, že člověk, který umí z hlavy převádět mezi dvojkovou a sedmičkovou soustavou asi nebude mít problém s počty. Asi nebude. Ale je to rozšiřující, prohlubující znalost, nikoliv znalost, kterou je potřeba si osvojit pro naučení se základního používání desítkové soustavy (na úrovni té první třídy). Taky existují věci jako LLVM IR, které od těch technických detailů odstiňují a vytváří abstrakci, která je blíže tomu, o čem jsem mluvil já v #316. To by nebylo možné, kdyby v C prostě nešlo psát bez pochopení těch registrů a adresace.
To je jako bys v diskuzi o učení prvňáčků řekl, že pochopení čísel v podstatě vyžaduje pochopit číselné soustavy a obory čísel a argumentoval, že člověk, který umí z hlavy převádět mezi dvojkovou a sedmičkovou soustavou asi nebude mít problém s počty. Asi nebude. Ale je to rozšiřující, prohlubující znalost, nikoliv znalost, kterou je potřeba si osvojit pro naučení se základního používání desítkové soustavy (na úrovni té první třídy).Ok, tenhle argument uznávám. Jenže to není všechno, protože po těch prvňácích hned chvíli potom při v podstatě úplně libovolném programu ty znalosti vyžaduješ. V C ti nestačí pochopit jen tu základní úroveň, protože hned jakmile se dostaneš z úrovně triviálních příkladů, tak potřebuješ chápat všechno možné, kde dokonce i po letech sám s překvapením shledávám, že se mám pořád hodně co učit.
Já jsem ale nepsal, že je to potřeba, jen že se to hodí.
Ono je obecně problém, že lowlevel jazyky, jako třeba C, po tobě chtěj lowlevel znalosti počítače, specificky CPU a paměti. V tomhle mají výhodu highlevel jazyky (python / java), protože přesné pochopení nevyžadují
Tldr: pokud začneš od axiomů, tak ti věci dávají větší smysl, protože budovaný mentální model je vnitřně konzistentní a obsahuje minimum informací typu "tady je fakt X, který prostě uznávám že tak je, protože proto".
protože C bez assembleru nejde skutečně pochopit, ve smyslu že nepochopíš designové rozhodnutí, které za ním stály a je z toho pro tebe jen kopa bullshitu, který si někdo náhodně vymyslel, když se nudilA taková cesta bude mnohem delší k Pythonu než k C.
(a adresování a způsoby přístupu k paměti)Asi nevím co máš na mysli adresováním a způsoby přístupu k paměti, protože to, co si pod tím představím já, je před programem v C skryto…
Oproti tomu C je přímo svázané s hardwarem počítače, je to v podstatě jen takový makroassembler, který sice odstiňuje konkrétní instrukční sadu, ale například už ne detaily paměti.Můžeš uvést příklad takových detailů?
A taková cesta bude mnohem delší k Pythonu než k C.Jo, to určitě bude. Rozdíl je v tom, že v pythonu jsi z 99% schopný bez toho žít. V C na to narazíš hned jak chceš třeba otevřít socket a poslat něco do internetu (to tě najednou endianita zajímá).
Asi nevím co máš na mysli adresováním a způsoby přístupu k paměti, protože to, co si pod tím představím já, je před programem v C skryto…Pokud znáš a chápeš assembler (a nemusí to být zrovna x86 assembler), C je pro tebe otázkou syntaxe. Jestliže pochopíš princip fungování skoků a porovnání hodnoty v assembleru, for smyčka je naprosto přirozený pattern, který jsi v assembleru používal a který je v C vyjádřený zkrácenou syntaxí. Funkce to samé. Když umíš adresovat paměť přes registr, což je v assembleru naprosto nativní záležitost na dvě instrukce, tak chápeš pointery. A to ne nějak abstraktně, jako "když se před tím udělá hvězdička, tak dostaneš hodnotu", ale skoro na hardwarové úrovni. Ano, konkrétní implementace je ti v C skryta, ale bavím se tu o opačném procesu - pokud to pochopíš odzdola, tak je pro tebe to co se děje v C naprosto logický důsledek. Přitom naučit se jednoduchý assembler je otázkou pár hodin. Není to složitější, ale naopak jednodušší! A získáš tím axiomy, ze kterých jsou složeny vyšší jazyky. Ve chvíli, kdy s tím začínáš naopak (odshora), tak to pak končí tak jak popisoval pc2005, tedy že lidi mají problém s pointery. Což je mimochodem úplně běžná záležitost. Například u nás ve třídě o 20 lidech to chápala možná tak 1/4, možná míň. A na VŠ, kam nás na hodiny C chodily stovky lidí udělalo napoprvé zkoušky asi tak těch zmiňovaných 20-30%. Osobně jsem tenkrát nechápal, proč když chápou Javu je C tak strašně sere. Teď si zpětně říkám, že to pro ně možná prostě byla kolekce věcí, co jim nedávají žádný smysl a jednoduše si je musí pamatovat. Asi jako když se učíš dějiny jako data (kdy kdo co), versus když se udíš dějiny jako navazující příběhy v kontextu doby. Tím nechci tvrdit, že se to nikdo nenaučí, ale že naopak je to jednodušší, dává to větší smysl a má to lepší úspěšnost, i přestože to vyžaduje větší časovou investici.
Můžeš uvést příklad takových detailů?Tak konkrétně třeba ta endianita. Šířka slova. Segmenty paměti a její ochrana. Pokud se bavíme i mimo pamět, tak například podmínky, smyčky a funkce mají přímý protikus v assembleru, kde když v něm chvíli děláš (stačí i docela triviální programy na pár odpolední nepřesahující tisíc instrukcí), tak si prostě musíš všimnout, že některé patterny instrukcí se neustále opakují. Přestává to pro tebe být otázkou pochopení úplně neznámých konceptů, ale je to jen otázkou syntaxe těch konceptů. A navíc máš porozumění nejenom jak ty koncepty vypadají a jak spolu fungují, ale taky proč existují, co k tomu vedlo proč to nevypadá jinak.
to tě najednou endianita zajímáNezajímá, getaddrinfo se dává description jako string a pak udělám connect rovnou na to co to vrátilo
for smyčka je naprosto přirozený pattern, který jsi v assembleru používal a který je v C vyjádřený zkrácenou syntaxí. Funkce to samé. Když umíš adresovat paměť přes registr, což je v assembleru naprosto nativní záležitost na dvě instrukce, tak chápeš pointery.No dobře, a proč je pochopení for cyklu, funkcí a pointrů v C něco jiného než pochopení for cyklu, funkcí a pass-by-reference v high-level jazycích?
lidi mají problém s pointery [...] i když chápou JavuDal bych jim nějaký test na věci jako
a = [3, 1, 2] def f(x): x.sort() f(a)(a podobné ekvivalenty s poli a objekty v Javě), podle mě bys pak to „chápou Javu“ přehodnotil.
Šířka slova.IMHO ekvivalentní s datovými typy třeba v Javě.
Segmenty paměti a její ochrana.S tímhle se v C nesetkáš dokud nezačneš dělat nějakou pokročilou magii (a pak budeš podobné znalosti potřebovat i v jiných jazycích).
pass-by-reference v high-level jazycích*pass-by-value
No dobře, a proč je pochopení for cyklu, funkcí a pointrů v C něco jiného než pochopení for cyklu, funkcí a pass-by-reference v high-level jazycích?Protože je to přímo spjaté s assemblerem. Funkce v C se přímo mapuje na sekvenci instrukcí. Oproti tomu funkce v pythonu je naprosto abstraktní koncept, který je ve skutečnosti objekt, mimo jiné například podporujicí closures. For smyčka je rozbalovač iterátorů, který se vůbec nemapuje na sekvence instrukcí „porovnej a skoč“ atd..
IMHO ekvivalentní s datovými typy třeba v Javě.Až na to že je to na každé architektuře rozdílné.
S tímhle se v C nesetkáš dokud nezačneš dělat nějakou pokročilou magii (a pak budeš podobné znalosti potřebovat i v jiných jazycích).S tím se setkáš hned jak ti to padne na sigsegv.
V C na to narazíš hned jak chceš třeba otevřít socket a poslat něco do internetu (to tě najednou endianita zajímá).Tak zrovna ta tě zajímá vždycky i v jakkoli vyšším jazyce. Vždy musíš řešit, jak se číslo jakožto abstraktní koncept serializuje do proudu bajtů na výstupu. Nebo naopak, jak z posloupnosti bajtů naplnit nějakou číselnou proměnnou v tvém jazyce.
Když umíš adresovat paměť přes registr, což je v assembleru naprosto nativní záležitost na dvě instrukce, tak chápeš pointery.Proč nestačí si představit paměť jako dlouhé pole bajtů a ukazatel jako číslo pozice v tomto poli? Proč je potřeba do toho tahat nějaké registry? Nebo to potřeba není, ale když to člověk pochopí, tak bude s ukazateli pracovat nějak líp a bude dělat méně chyb? Možná mi něco zásadního uchází, ale já vidím úskalí a možné chyby hlavně v tom, že zapomeneš ukazatel nastavit a on bude ukazovat na nějaké nesmyslné místo v paměti, NPE, že paměť/data, kam ukazuje smažeš a pak použiješ ukazatel nebo naopak smazat zapomeneš a máš únik paměti. A aby ses s tímhle vypořádal, tak stačí ten abstraktní koncept (pole bajtů + číslo pozice), ne?
Možná mi něco zásadního uchází, ale já vidím úskalí a možné chyby hlavně v tom, že zapomeneš ukazatel nastavit a on bude ukazovat na nějaké nesmyslné místo v paměti, NPE, že paměť/data, kam ukazuje smažeš a pak použiješ ukazatel nebo naopak smazat zapomeneš a máš únik paměti. A aby ses s tímhle vypořádal, tak stačí ten abstraktní koncept (pole bajtů + číslo pozice), ne?Samozřejmě že stačí. Jak jsem už v téhle diskuzi psal několikrát, tak určitě se dá všechno naučit jako abstraktní koncept. Osobně tady ale argumentuji ve stylu, že to má nižší úspěšnost, než když se věci učíš na základě axiomatických principů, tedy když jdeš odzdola, což navíc ještě jako bonus zajišťuje lepší porozumění. Napsal jsem to sem už asi potřetí, naposledy dokonce v příspěvku, na který reaguješ a už to nebudu opakovat. Přijde mi blbé to psát pořád dokola, když na to nikdo nereaguje.
C, po tobě chtěj lowlevel znalosti počítače, specificky CPU a paměti. A ty začátečníkům většinou nikdo nesdělí, protože v podstatě vyžadují naučit je ještě k tomu assembler a povyprávět jim o architektuře.Jo tak proto mě céčko nikdy nějak nevadilo, já byl vždycky spíš lowlevel guy. [funny story]Ještě před tím než jsem dostal počítač si ho snažil na základce postavit ho sám, aniž bych ještě věděl základy číslicovky. Někde mám snad dokonce i schéma, že jsem se snažil udělat něco jako registr pomocí pole tyristorů
[funny story]Ještě před tím než jsem dostal počítač si ho snažil na základce postavit ho sám, aniž bych ještě věděl základy číslicovky. Někde mám snad dokonce i schéma, že jsem se snažil udělat něco jako registr pomocí pole tyristorůJo, já si kdysi přečetl Astronauty od Lema a pak se to snažil vymyslet pomocí relátek implementovaných jako výhybky v kolejnici modelové železnice, kterou jsme měli na půdě. Nutno říct, že s naprostým neúspěchem.(protože to byla tehdy jediná součáska, kterou jsem znal, co měla paměťové vlastnosti). Pak jsem dostal pravej počítač (myslím konec 2000?), takže pokusy odvodit sčítačku z NANDu (bez znalosti demorgana) skončily. Ale zase už na konci střední se znalostmi 8051, a číslicovky jsem si sepisoval instrukční sadu vlastní procesorový architektury (před Cčkem). [/funny story]
aniz by nekde vyhrezavaly pointery.Já jsem nikdy nepochopil, proč lidi tolik řeší vyhřezávající pointery v Céčku, já si je normálně pamatuju o_O. Ale uznávám, že píšu krátký prográmky a GUI nemám rád.
Takze zacinajici programator se muze venovat reseni algoritmu misto toho, aby zapasil s jazykem a jeho implementaci.To souhlas, ale zase v mladém věku je člověk víc flexibilnější a pokud se naučí v mechanismu Cčka myslet, tak tím zase kompenzuje tu strmou učící křivku.
Obcas vidim kod lidi 40+ a z jeho struktury jde velice casto poznat, kdo si prosel v mladi Pascalem a kdo ne.Hmm podle mého kódu bys mě tipnul na malbolge :-P. No při přechodu mezi pascalem a céčkem se ten pascal občas doslova plete do cesty.
Já jsem nikdy nepochopil, proč lidi tolik řeší vyhřezávající pointery v Céčku, já si je normálně pamatuju o_O.Protoze nejsi schopen se vzit do role cloveka, ktery zacina s programovanim uplne od zacatku. Pro blbou praci s textem nebo vstupem od uzivatele (coz je snad ten nejvetsi zaklad) potrebujes mit predstavu o tom, jak pocitac funguje ve vnitr, coz je pro cloveka, ktery ma problem udelat for-loop to posledni, co ho zajima.
v mladém věku je člověk víc flexibilnější a pokud se naučí v mechanismu Cčka mysletTak programy od nej ve vyssich programovacich jazycich jsou docela peklo. Ceckar programujici v Jave to je kapitola sama pro sebe.
No při přechodu mezi pascalem a céčkem se ten pascal občas doslova plete do cesty.Protoze kazdy ten jazyk ma jiny cil. V Pascalu mas duraz na srozumitelnost kodu, v C na jeho efektivitu. Coz jsou veci, ktere jdou evidentne proti sobe. Ale bavime se tu o zacinajicich programatorech, ... kde si myslim, ze by prioritou melo byt to prvni.
Pointery opravdu problém nejsou. Je potřeba pochopit, jak počítač funguje, jak vypadají data v paměti, a pak je to v pohodě.Myslím, že nejde jen o to, to pochopit, ale hlavně to pak vždy a za všech okolností uhlídat, nedělat chyby, mít disciplínu… dát si s tím prostě tu práci. Pak třeba zjistíš, že hlídání nějakých pointerů, úniků paměti a ošetřování chybových kódů věnuješ víc úsilí než vlastní logice aplikace. Což je podle mého špatně a používáš nevhodný jazyk.
Aby se člověk mohl považovat za programátora, je nutné pak udělat krok stranou a očuchat si několik vysokoúrovňových jazyků – něco objektového, funkcionálnícho, a pak i něco obskuronějšího.Souhlasím, že je dobré poznat víc jazyků a rozšiřovat si obzory. Ale otázka je, s čím začít a co přidat až později, čemu se věnovat primárně a co mít jen jako doplněk pro představu, jak to funguje jinde. Ono to jsou dost odlišné světy a každý má svoje vlastní pravidla. V dnešní praxi to sice funguje tak, že ty vyšší jazyky se interpretují pomocí těch nižších nebo se do nich překládají a pod tím je vždycky nějaký procesor s nějakou architekturou a instrukční sadou. Ale smyslem té abstrakce je právě to, abych nemusel řešit, co je pod ní – pokud to řešit musím, tak je to špatná abstrakce. Je skutečně nutné ovládat principy těch nižších vrstev, když se pohybuješ v těch vyšších? A budou ty nižší vždy stejné, jako jsou teď? Představ si třeba nějaký datový formát – má vlastní pravidla, vlastní gramatiku a pomocí něj tvoříš data, ze kterých se nakonec vyrobí třeba PDF. První implementaci daného formátu napsal někdo tak, že vzal třeba Perl, v něm přechroustal data, vygeneroval z nich zdroják v LaTeXu a to předal programu
pdflatex
. Možná to není optimální a nejčistší řešení, ale byl to způsob jak dosáhnout cíle a dát světu nějaký použitelný nástroj. Až v praxi se ukáže, zda má takový formát smysl, a časem třeba někdo napíše efektivnější, čistější nebo elegantnější implementaci. Tebe jako autora dokumentů v tom formátu by ale neměl zajímat Perl ani LaTeX – tyto implementační detaily bys neměl vůbec řešit a měl by ses soustředit na to, abys dodržoval pravidla daného formátu a pohyboval se v jeho paradigmatu, myslel na té úrovni abstrakce. Později se objeví jiný interpret/kompilátor toho formátu, který bude napsaný třeba v Javě a místo (La)TeXu bude používat FOP, nebo bude napsaný v Rustu či C++ a pro generování PDF bude používat jinou knihovnu. Kdybys psal svoje dokumenty s ohledem na Perl a LaTeX, tak by najednou nefungovaly, výstup by ti nevyhovoval. Musíš je psát pouze s ohledem na pravidla toho formátu. A stejně tak by se těmi pravidly měl řídit autor interpretu/kompilátoru. Pokud to nejde, tak je něco špatně s tím formátem. Dobrý formát by měl sloužit jako rozhraní, které tě odstíní od toho, co je na druhé straně a umožní bezproblémovou spolupráci různých implementací téhož standardu.
A budou ty nižší vždy stejné, jako jsou teď?Pořád to budou tranzistory
Ale smyslem té abstrakce je právě to, abych nemusel řešit, co je pod ní – pokud to řešit musím, tak je to špatná abstrakce.Tohle IMHO není úplně význam abstrakce. Myslimže jsem ještě za celý život neviděl abstrakci, která by byla skutečně nezávislá na implementačních detailech. To IMHO není možné. IMHO smyslem abstrakce není ani tak to, abys nemusel vůbec řešit, co je pod ní, ale abys to nemusel řešit příliš často, příliš do hloubky a aby ses nemusel opakovat (princip DRY). Čiliže u abstrakce je IMHO stále potřeba chápat alespoň do nějaké míry ty detaily, ten benefit je v tom, že jakmile tu abstrakci vstřebáš, máš to už 'načtené' a nemusíš to řešit pokaždé, spíš než v tom, že to nemusíš řešit vůbec...
Výhodou C je, že je rozlezlé úplně všude.To bych mohl rict o Jave taky, pricemz vim, ze na vyuku programovani je Java opravdu spatny jazyk.
Pointery opravdu problém nejsou. Je potřeba pochopit, jak počítač funguje, jak vypadají data v paměti, a pak je to v pohodě. C je v podstatě jen o pointerech a funkcích.Z vlastni zkusenosti muzu potvrdit, ze toto problem je.
Pascal je jazyk na nic. Vysokoúrovňový není, aby se v tom dalo něco smysluplného dělat, a nízkoúrovňový, aby se věci daly pochopit, taky ne.Bavime se tu celou dobu o vyuce programovani. Pokud programovani zredukujes na zvladnuti programovaciho jazyka a schopnost vytvaret programy, je tvuj soud zrejme v poradku. Ale programovani je i o dalsich vecech. Zrejme o schopnosti vzit problem a najit jeho reseni. Vzit ulohu, rozdelit ji na mensi pod ukoly, vytvorit kod, ktery bude srozumitelny, ... To C nenabizi, nebo obtezuje podruznymi detaily. Mam nekolik programu, u nichz mam implementaci v nejakem vyssim jazyce (Java, Python, Scheme) a implementaci C (kvuli maximalni efektivite). Ty v C jsou typicky priblizne 10x vetsi co do poctu LoC. Kdybych to vztahl na toho zacatecnika, tak s C musi obrazne udelat 10x vic prace, pricemz ma 10x vic prilezitosti udelat chybu. Pricemz, to co se po nem chce, je jen implementovat algoritmus, ktery muze jinde udelat se zlomkem namahy. Z dnesniho pohledu je Pascal uz za zenitem, ale nevidim prilis duvod, proc C jako prvni jazyk, kdyz je tu treba Python, ve kterem se da naucit programovat radove jednoduseji.
Ne. C je to, z čeho hromady technologií vzešly. Koncepty a designová rozhodnutí v C se pak promítly do takřka všeho, co se dnes používá. Vliv Javy je v tomto ohledu docela malý.Výhodou C je, že je rozlezlé úplně všude.To bych mohl rict o Jave taky,
Mam nekolik programu, u nichz mam implementaci v nejakem vyssim jazyce (Java, Python, Scheme) a implementaci C (kvuli maximalni efektivite). Ty v C jsou typicky priblizne 10x vetsi co do poctu LoC. Kdybych to vztahl na toho zacatecnika, tak s C musi obrazne udelat 10x vic prace, [...]Úlohy musí být tvořeny s ohledem na použitý jazyk a volba jazyka se odvíjí od řešeného problému. Začátečník nebude dělat 10× více práce, neboť bude řesit jinou úlohu.
Mam nekolik programu, u nichz mam implementaci v nejakem vyssim jazyce (Java, Python, Scheme) a implementaci C (kvuli maximalni efektivite). Ty v C jsou typicky priblizne 10x vetsi co do poctu LoC. Kdybych to vztahl na toho zacatecnika, tak s C musi obrazne udelat 10x vic prace, pricemz ma 10x vic prilezitosti udelat chybu. Pricemz, to co se po nem chce, je jen implementovat algoritmus, ktery muze jinde udelat se zlomkem namahy.+1, mám podobnou zkušenost. To, že v C je vopruz dělat cokoli výše-úrovňového je dané jednak tím jazykem, ale z velké části také tím, že standardní knihovna toho moc nenabízí. Nemáš stringy, nemáš dynamické pole / vektory, stack, queue - zapomeň. Nemáš ani pitomou min/max funkci.
Z dnesniho pohledu je Pascal uz za zenitem, ale nevidim prilis duvod, proc C jako prvni jazyk, kdyz je tu treba Python, ve kterem se da naucit programovat radove jednoduseji.+1, C mi taky nepřijde jako vhodný první jazyk... Případně když už, tak by asi bylo lepší spíš použít "Céčkové C++", tzn. psát v C++ jako v C, ale s tím, že můžeš alespoň použít
std::string
a std::vector
, případně třeba streamy...
Protoze nejsi schopen se vzit do role cloveka, ktery zacina s programovanim uplne od zacatku.Tak já začal programovat tak, že jsem si z časopisu ABC přepisoval kousky kódů do qbasicu. V pascalu vlastně taky, z těch jejich příkladů v nápovědě (měl jsem nějakou přeloženou verzi). Kdybych měl stejnou českou napovědu i pro céčko, tak by to bylo +- stejné. Ono i ty pascalovský "ukazatele" jsem zpočátku taky nechápal (a ty v céčku mě přijdou víc intiutivnější).
Tak programy od nej ve vyssich programovacich jazycich jsou docela peklo. Ceckar programujici v Jave to je kapitola sama pro sebe.100% guilty
V Pascalu mas duraz na srozumitelnost kodu, v C na jeho efektivitu.Zase když louskáš jak funguje v kernelu implementace container_of(), která je napsaná v makru, tak se člověk naučí mnohem víc, než když mu to dodá nápověda na podnose.
Obavam se, ze toto nema prilis vypovidaci hodnotu. Za poslednich N let jsem si vyzkousel ucit zacatecniky C, Scheme, assembler (x86) a Javu, a rekl bych, ze mam trochu realistictejsi predstavu, co dela problemy. Ze zacatku je to vubec schopnost problem popsat algoritmicky (a presne). V C je typicky narocny prechod ke strukturovanym datovym typum a k dynamicke alokaci pameti. V momente, kdy se toto zacne kombinovat, jsou schopni se v tom zamotat naprosto a dokonole. Zajimavy je i ten assembler. Lidi, kteri vetsinou programuji ve vyssich programovacich jazycich (hint: vetsina), k tomu prilis vztah nenajdou, nauci se par patternu, jak se co pouziva a obavam se, ze driv nepozdeji vsechno zapomenou. S Javou byva nejcasteji problem v tom, ze se studenti spokoji s tim, jak nakupi jednotlive objekty a volani a ve vyslednem kodu, aby se prase vyznalo...Protoze nejsi schopen se vzit do role cloveka, ktery zacina s programovanim uplne od zacatku.Tak já začal programovat tak, že jsem si z časopisu ABC přepisoval kousky kódů do qbasicu. V pascalu vlastně taky, z těch jejich příkladů v nápovědě (měl jsem nějakou přeloženou verzi).
Vnimas mne vubec? Co pak je srozumitelnost kodu neco, co se da vycist z napovedy nebo precizne zpracovaneho makra?V Pascalu mas duraz na srozumitelnost kodu,Zase když louskáš jak funguje v kernelu implementace container_of(), která je napsaná v makru, tak se člověk naučí mnohem víc, než když mu to dodá nápověda na podnose.
V C je typicky narocny prechod ke strukturovanym datovym typum a k dynamicke alokaci pameti. V momente, kdy se toto zacne kombinovat, jsou schopni se v tom zamotat naprosto a dokonole.Proč to najednou kombinovat. Vždyť to spolu ani nijak zvlášť nesouvisí. Strukturované datové typy se dají naučit na globálním poli paměti a o nějakým malloc/free se můžou dozvědět až za libovolně dlouhou dobu. Pak jím stačí říct, že malloc() vezme kus RAM stejně jako to globální pole (resp to za tebe udělá OS pro .data nebo .rodata sekci).
Zajimavy je i ten assembler. Lidi, kteri vetsinou programuji ve vyssich programovacich jazycich (hint: vetsina), k tomu prilis vztah nenajdou, nauci se par patternu, jak se co pouziva a obavam se, ze driv nepozdeji vsechno zapomenou.Takže vlastně by bylo dobré rozdělit programování na lowlevel a highlevel. Podle tohoto rozdělení spadám spíš do lowlevel a v takovém případě pro mě bylo nevýhodné začít vyšším jazykem (interpretovaný Qbasic, výukový pascal, objektové delphi) a kdybych začal v céčku, tak bych měl náskok. Opačně, pokud se někdo řadí do highlevel sféry, tak pro naučení lowlevel jazyku musí to highlevel myšlení v dědění, třídách apod. zahodit a začít myslet v sekvenčním automatu, protože lowlevel jazyky jsou velmi blízko HW.
Vnimas mne vubec? Co pak je srozumitelnost kodu neco, co se da vycist z napovedy nebo precizne zpracovaneho makra?No přiznám se, že pokud se táhne diskuze přes několik dní, tak jsem už dávno zapomněl co jsem psal na začátku. Ale tady jsem to myslel takhle: Je sice hezký, když tě jazyk učí přehlednosti, ale když pak čteš po někom něco velmi nepřehledného, tak nemáš žádné zkušenosti jak to číst. Naopak pokud začneš na něčem, co je na úrovni tvého aktuálního maxima přehlednosti co zvládneš zpracovat (třeba výukový C kód
V Pascalu mas duraz na srozumitelnost kodu, v C na jeho efektivitu. Coz jsou veci, ktere jdou evidentne proti sobe.), tak pak jednak zvládneš i přehledný kód a i mírně nepřehledný kód (samozřejmě by byla blbost začít s výukou v brainfucku). (nápovědou jsem nemyslel .hlp, ale komentovaný, strukturovaný, apod. kód)
Strukturované datové typy se dají naučit na globálním poli paměti a o nějakým malloc/free se můžou dozvědět až za libovolně dlouhou dobuJen to ma trochu problem, ze vyuka programovani (dle meho) nespociva v ovladnuti nejakeho programovaciho jazyka, ale v pochopeni datovych struktur a algoritmu. Pokud chces nekoho ucit treba binarni vyhledavaci strom na globalnim poli, uzij si to. Jeste jedna vec, pokud nekoho budes ucit, ze se neco dela pomoci globalniho pole, cekej, ze ti to bude pak nekolik dalsich let cpat vsude, protoze on se to tak prece ucil.
Pak jím stačí říct, že malloc() vezme kus RAM stejně jako to globální pole (resp to za tebe udělá OS pro .data nebo .rodata sekci).Pokud budes zacatecnikovi vysvetlovat treba ten binarni strom, .data nebo .rodata jsou to posledni, co ho bude zajimat, protoze vetsinu casu bude zapasit s tim, ,,kde pouzit hvezdicku'' (receno jejich terminologii).
Podle tohoto rozdělení spadám spíš do lowlevel a v takovém případě pro mě bylo nevýhodné začít vyšším jazykem (interpretovaný Qbasic, výukový pascal, objektové delphi) a kdybych začal v céčku, tak bych měl náskok.Otazka jaka by to byla vyhoda. Lidi, kteri zacinali s programovanim MCU (tedy meli by mit tu nejlepsi vyhodu, protoze hardware znaji do detailu) jsou typicky priserni programatori, protoze nejsou schopni se povznest na nejakou vyssi uroven abstrakce vytvaret obecne struktury, resi kazdy byte, kazdy cyklus, i kdyz to treba (vetsinou) nehraje roli.
Je sice hezký, když tě jazyk učí přehlednosti, ale když pak čteš po někom něco velmi nepřehledného, tak nemáš žádné zkušenosti jak to číst.Ale tady se bavime o tom, jak se vubec ucit programovat. Cteni ciziho (z praseneho) kodu je az dalsi level.
Pokud chces nekoho ucit treba binarni vyhledavaci strom na globalnim poli, uzij si to. Jeste jedna vec, pokud nekoho budes ucit, ze se neco dela pomoci globalniho pole, cekej, ze ti to bude pak nekolik dalsich let cpat vsude, protoze on se to tak prece ucil.Fajn tak ty dvě věci prohoď, mě nešlo o pořadí, ale o časový odstup. Má vůbec pascal dynamicky alokované pole? Uz si to nepamatuju, mě přišlo, že jsem všechno dělal v ekvivalentu globálního pole. Když takovej člověk pak přijde k céčku tak to udělá nejbližším způsobem, co už zná nejspíš skončí u globálního pole stejně. Navíc bys měl učit i ten jazyk, kde v případě céčka zazní, že to není dobrý nápad dávat všechno do globálního pole.
Pokud budes zacatecnikovi vysvetlovat treba ten binarni strom, .data nebo .rodata jsou to posledni, co ho bude zajimat, protoze vetsinu casu bude zapasit s tim, ,,kde pouzit hvezdicku'' (receno jejich terminologii).Opět, nejdřív naučit pointery a pak až konstrukce s pointerama. Učit pointery na binárním stromu by byl overkill.
Lidi, kteri zacinali s programovanim MCU (tedy meli by mit tu nejlepsi vyhodu, protoze hardware znaji do detailu) jsou typicky priserni programatori, protoze nejsou schopni se povznest na nejakou vyssi uroven abstrakce vytvaret obecne struktury, resi kazdy byte, kazdy cyklus, i kdyz to treba (vetsinou) nehraje roli.No a lidi co začínali na javě pak píšou matrixy a ani pár let starý počítač to nestíhá (kuk do ps aux, editor Kate 188 MB v RSS .. proč?). Jinak na MCU to ještě pořád roli hraje. Jak jsem psal proč je nerozdělit, vyšší struktury jsou problém vyšších programátorů. To bych se mohl rozčilovat nad tím, že javistům nejdou navrhovat hradla. Je to prostě (už téměř) jinej obor.
Ale tady se bavime o tom, jak se vubec ucit programovat. Cteni ciziho (z praseneho) kodu je az dalsi level.Ale je potřeba nehledě na to v jakém jazyku začneš. V tomhle vidím přehlednost pascalu (nehledě na to, že základní výuka může být i v přehledném céčku) jako zbytečnou komplikaci. Mě přijde (co se teďka koukám na pár ukázek v pascalu), že všechny ty konstrukce se dají lehko překonvertovat do céčka, ale narozdíl o něj pascal skoro nikdo nepoužívá, takže není tolik projektů na samostudium.
Jen to ma trochu problem, ze vyuka programovani (dle meho) nespociva v ovladnuti nejakeho programovaciho jazyka, ale v pochopeni datovych struktur a algoritmu.Pochopení datových struktur je ale taky jazyk: model v mozku. Základní tvar toho modelu nejspíš vznikne podle prvního jazyka, který se člověk naučí a pak všechno další vztahuje ke své interní reprezentaci. Takže ideální stav je, když je ten interní model co nejblíž realitě (tedy pro lowlevel programátory HW, pro highlevel programátory interpreter nebo VM). Z toho pohledu je pak na obtíž tvořit ten model na jazyku, který nemá vysoké reálné nasazení nebo je oproti realitě zjednodušený. P.S. motám(e) dohromady 3 věci: pascal vs céčko, vysokoúrovňový vs nízkoúrovňový jazyk a computer science vs programming. Na computer science nepotřebuješ pascal, céčko ani javu, na naučení třídících algoritmů ti stačí slovní popis, nějaký metajazyk nebo lidové tance, reálná implementace pak může být v libovolném jiném jazyku. Jeho výuka je pak ortogonální ke computer science a CS pak tedy nezávisí na obtížnosti gramatiky (teda pokud vyučující není limitovaný přidělenými hodinami a nacpe se CS do stejného předmětu k programování, kdybych neměl samostudium, tak bych se o třídících algoritmech uceleně dozvěděl až v matematice na VŠ).
Když takovej člověk pak přijde k céčku tak to udělá nejbližším způsobem, co už zná nejspíš skončí u globálního pole stejněKdyz takovy clovek prijde k C a je nucen ty dve veci kombinovat, zacne se v tom ztracet a motat. Overeno.
Učit pointery na binárním stromu by byl overkill.Pricemz binarni stromy lze hezky vysvetlit treba na teckovych parech jako ma Lisp, bez bolesti explicitni manipulace s pointery a alokace pameti. Prechod k pointeru ve smyslu C je v opacnem smeru mnohem pohodlnejsi.
Ale je potřeba nehledě na to v jakém jazyku začneš.A matematika by se mela ucit tak, ze deti nechame zirat na definici riemanova integralu. A v citance pro prvni tridu si deti prectou Nesnesitelnou lehkost byti. Taky je to posune dal, .... ale jenom ty, co to pochopi.
ale narozdíl o něj pascal skoro nikdo nepoužívá, takže není tolik projektů na samostudium.Boze, vsak jsem tu psal, ze Pascal uz je za zenitem a dnes by byl lepsi Python.
pascal vs céčko, vysokoúrovňový vs nízkoúrovňový jazyk a computer science vs programming.To jsou veci, ktere si ty rozdelujes, ale pritom spolu souvisi. Bavime se tu o vyuce programovani a oddelovat computer science a (nejaky) programming je vyslovene pitomost, protoze jedno bez druheho je k nicemu (bavime-li se stale o vyuce programovani).
zacne se v tom ztracet a motat.Ale jenom když začal ve vysokoúrovňovém jazyku ne?
binarni stromy lze hezky vysvetlit treba na teckovych parech jako ma LispJaká je úspěšnot člověka, co se naučí binární strom v lispu a pak se z toho binárního stromu má učit pointery v céčku? Jinak i v céčku jde binární strom učit bez explicitních pointerů.
A matematika by se mela ucit tak, ze deti nechame zirat na definici riemanova integraluVšak přesně tak, matematika se učí od úplných mechanických lowlevel základů třeba i na kuličkovým počítadle a ne na vysokoúrovňové abstraktní grupové teorii.
dnes by byl lepsi PythonPythonem neuděláš druhý linux kernel.
protoze jedno bez druheho je k nicemu (bavime-li se stale o vyuce programovani).V té matematice na VŠ jsme nic neprogramovali a kombinatorické úlohy jsme počítali bez optřeby jakéhokoliv jazyka. Jinak:
Computer science is no more about computers than astronomy is about telescopes. --Edsger Dijkstra
Pythonem neuděláš druhý linux kernel.To je sice pravda, ale zas tím uděláš všechno ostatní, kromě embeded (ehm, ehm, micropython, ehm). A hlavně bez velkého sraní. Přepisuji teď některé performance-critical věci do Rustu a přestože je Rust docela vysokoúrovňový jazyk a přestože používám knihovnu, co mi hodně šetří práci, tak prostě všechno je 5x tak těžší a trávím spoustu času věcma, které vůbec nijak nepřispívají k řešení problému.
micropython
Yet it is compact enough to fit and run within just 256k of code space and 16k of RAM.Ale tam končí ty největší MCU do DILu, vlastně ani žádnej takovej nemám (mám jenom 128k/8k).
Ale jenom když začal ve vysokoúrovňovém jazyku ne?Ne, uplni zacatecnici s tim maji +/- stejne problemy.
Jaká je úspěšnot člověka, co se naučí binární strom v lispu a pak se z toho binárního stromu má učit pointery v céčku?Takhle otazka nestoji. Ukolem je naucit, co je to binarni strom, a ne pomoci nej ucit pointery.
Pythonem neuděláš druhý linux kernel.A? Bavime se tu porad o vyuce programovani uplnych zacatecniku... Programovani kernelu je obyvkle hned druha kapitola, hned po pointerech.
Však přesně tak, matematika se učí od úplných mechanických lowlevel základů třeba i na kuličkovým počítadle a ne na vysokoúrovňové abstraktní grupové teorii.Jsem rad, ze potvrzujes me argumenty. V tomto kontextu je Pascal bliz tomu kulickovemu pocitadlu (proto tu nekteri vcetne tebe tvrdi, ze je k nicemu). Pointery jsou ta tezka abstraktni vec. Pro tebe mozne ne, pro zacatecniky ano.
V té matematice na VŠ jsme nic neprogramovaliAno, je dobre, ze v matematice jste nic neprogramovali. Ale my se tu bavime o vyuce programovani!
Computer science is no more about computers than astronomy is about telescopes. --Edsger DijkstraCekal jsem, ze presne tento citat vytahnes. Jen akorat sem vubec nezapada. Pokud pristoupim na tve deleni a bude ucit oddelene "computer science" a "programming". Kdo bude lepsi programator? (1) Ten, co zvlada jazyk, ale struktury a algoritmy jsou mu cizi. (2) Ten, co zvlada algoritmy a struktury, ale nezvlada jazyk.
Pointery jsou ta tezka abstraktni vec. Pro tebe mozne ne, pro zacatecniky ano.Co na nich má být vlastně tak těžkého?
Mapují astraktní n-rozměrné / abstraktní věci na do jednorozměrného prostoru. Zároveň ale nevíš pořádně, jak je tam mapují - jsou často randomizované.Já si pořád nějak nedokážu představit, co bych měl s pointery dělat, abych tohle potřeboval vědět/vadilo mi to.
Navíc ten jednorozměrný prostor je sice jednorozměrný, ale (typicky) velký a plný nebezpečných děr. Když v něm šlápneš do díry, sletí ti program nebo způsobíš nějaké podivné nechtěné chování.Takže ti vadí spíš absence bounds checkingu?
což je sice z programátorského hlediska hrozně špatně a zbytečné, ale bylo super mít stálou možnost to "pole" vidět před sebou jako na dlaniTo by chtělo IDE, kde klikneš na pole a vybereš „add watch“.
Já si pořád nějak nedokážu představit, co bych měl s pointery dělat, abych tohle potřeboval vědět/vadilo mi to.
Třeba práce s vícerozměrným polem v C není úplně přímočará a často je jediný způsob, jak se v tom neztratit, představit si, jak vypadá layout v paměti.
Nebo si vezměme struktury, teoreticky lze napsat container_of()
(a to patří k těm jednodušším) i bez představy, jak to prakticky funguje, ale snad se shodneme, že to není úplně optimální. Ono už jen vysvětlit, proč je vlastně potřeba alignment a proč jsou ve struktuře díry (a proč není dobrý nápad to "řešit" tím, že se všechno udělá packed), jde na nějakém abstraktním modelu dost těžko. Možná tak dogmatikům, kteří jsou spokojení, když se jim řekne "takhle to prostě je" a nemají ve zvyku se ptát "proč".
Osobně mi ovšem na práci s pointery v C nejvíc vadí nešťastně (a nekonzistentně) navržená syntaxe.
Třeba práce s vícerozměrným polem v C není úplně přímočará a často je jediný způsob, jak se v tom neztratit, představit si, jak vypadá layout v paměti.Z éry pascalu už si všechno nepamatuju, ale na to, že jsem ten layout řešil i tam při zápisu do videoRAM si vzpomínám. Začátečnící nejspíš s tím 2D polem nebudou dělat věci jako: jde udělat lineární memcopy pro sloupec nebo řádek? Spíš budou projíždět přes klasické i,j indexy a u nich budou vědět limity.
Já si pořád nějak nedokážu představit, co bych měl s pointery dělat, abych tohle potřeboval vědět/vadilo mi to.No tak dejme tomu třeba tak základní věc jako procházení pole. K tomu potřebuješ vědět počet prvků v poli. Pokud je to statické pole, potřebuješ vědět, že
sizeof(pole)
nevrací počet prvků, pokud jsou prvky větší než bajt. Pokud sis ho alokoval dynamicky, musíš vědět, že sizeof
ti je nanic, při alokaci si máš říct o počet prvků * velikost a musíš si tu velikost někde držet / předávat.
Takže ti vadí spíš absence bounds checkingu?No, mně na pointerech nevadí nic. Ale začátečníkům (IMO) tyhle věci dělají problémy. Bounds-checking je jedna věc - problematický na tom je hlavně to, že když ti někde přelezou bounds, nedovíš se o tom nic moc pořádného - program prostě nefunuje a nevíš proč. Další nepříjemnost je nemožnost posoudit, jestli pointer ukazuje na něco nebo už ne. A do třetice další nepříjemnost je "neprůhlednost" pointerů - když chceš vytáhnout nějaký informace, musíš na to mít vlastní kód nebo umět používat debugger (což začátečníci typicky neumí / nejsou z toho moudrý). Porovnej to například s tím Pythonem. Velikost pole zjistíš jednoduše pomocí
len()
, reference je vždy platná a můžeš si obsah toho, na co ukazuje, prostě vypsat na výstup, interpreter ti vypíše co to je za objekt a jeho obsah.
To by chtělo IDE, kde klikneš na pole a vybereš „add watch“.Si myslíš, že jsem tehdy věděl, co je debugger?
Ne, uplni zacatecnici s tim maji +/- stejne problemy.Takže je jedno zda začneš v nízkoúrovňovém (cécko, pascal) jazyku nebo vysokoúrovňovém (python, java, delphi) s pointerama budeš mít stejné problémy. Na druhou stranu, pokud si zvykneš na neefektivní kód, tak IMO půjdeš nerad proti proudu času zpět k céčku.
Ukolem je naucit, co je to binarni strom, a ne pomoci nej ucit pointery.Tak znova, pro naučení binárního stromu žádný jazyk nepotřebuješ. Maximálně jen model problému v mozku. Každopádně třídící stromy vznikly kvůli potřebě optimalizaci a efektivitě, takže učit to na jazycích, kde se to mikrooptimalizace nemusíš starat (java), je IMO vyloženě kontraproduktivní (proč bych měl řešit třídění prvků, když to za mě udělá orákulum virtuálního stroje).
Bavime se tu porad o vyuce programovani uplnych zacatecnikuÚplný začátečník by měl vědět, jak šla posloupnost počítačů od mechanických strojů, po stroje s adresovatelnou pamětí, assembleru, portovatelného programovacího jazyka, objektového jazyka apod. Ne že se skočí hnedka do abstrakce a pak případně jde proti proudu času.
V tomto kontextu je Pascal bliz tomu kulickovemu pocitadlu (proto tu nekteri vcetne tebe tvrdi, ze je k nicemu)Já jsem navrhl to rozdělení, ty to mícháš dohromady s výukou. Proti výuce v pascalu jsem, protože nemá reálné využití a moderní cécko (ne K&R co vznikl až dva? roky po pascalu) umí ty algoritmy zapisovat stejně přehledně jako pascal. Navíc céčko je tomu počítadlu blíž než Pascal. U výuky v pascalu vs v javě, jsem spíš pro pascal než pro javu (ale jen pro výuku lowlevel programátora, pro highlevel by to bylo naopak, proč ne, nikdy se s kernelem nesetká). Pro výuku stromů nepotřebuješ žádný jazyk.
Ano, je dobre, ze v matematice jste nic neprogramovali.To bylo myslím mé první oficiální setkání s třídícími algoritmy. Ale zase já začínal na elektroprůmce (programování jsme tam ale měli). Za to "pointery" jsme měli při výuce 8051 na střední (v céčku jsou ty registry s ukazatelema víceméně jako symbolická proměnná).
Kdo bude lepsi programator? (1) Ten, co zvlada jazyk, ale struktury a algoritmy jsou mu cizi. (2) Ten, co zvlada algoritmy a struktury, ale nezvlada jazyk.Jasně jsem psal, že to je ortogonální a ne vzájemně výlučné. Pokud student dokončí úspěšně studium, tak bude umět obojí. Nejdřív se musíš naučit samotné jazyky (pointery například) a teprve pak v nich můžeš psát díla (stromy). Z hlediska computer science žádný jazyk nepotřebuješ, z hlediska programování bych začal chronologicky a vyhodil bych jazyky, co se už nepoužívají (například bych vyučoval jen jeden z každého paradigmatu).
Na druhou stranu, pokud si zvykneš na neefektivní kód, tak IMO půjdeš nerad proti proudu času zpět k céčku.Na základě čeho si tohle myslíš? Já třeba postupoval v zásadě takhle. Začal jsem někde v prostřed spektra a vzdělával jsem se časem na obě strany (s tím, že raději jdu dolů). To už bys, dotaženo ad absrudum, rovnou mohl tvrdit, že je blbost začínat v C, že by měl člověk nejdřív napsat něco v asembleru. A pak bys došel k tomu, že i to je moc vysoko a skončíš se zmagnetizovanou jehlou a pevnou rukou... Nebo výrobou analytical engine z Merkuru.
Každopádně třídící stromy vznikly kvůli potřebě optimalizaci a efektivitě, takže učit to na jazycích, kde se to mikrooptimalizace nemusíš starat (java), je IMO vyloženě kontraproduktivníNení, protože při výuce programování je IMHO ze všeho naprosto nejdůležitější, aby si to člověk mohl osahat. A ve vyšším jazyce si to prostě osaháš snáz, snáz získáš základní intuice o proměnných, funkcích, flow control atd. atd. který ty asi považuješ za samozřejmé, ale začátečník to tak nemá.
Na základě čeho si tohle myslíš?Mě přijde, že možnost se přestat starat o lowlevel věci při postupu nahoru je tak nějak jednodušší než neustále analyzovat nižší a nižší vrstvy při obráceném směru. Ale možná to je bias z toho že mě vždycky přišlo, že spolužáci, co znali třeba python ty nižší jazyky moc rádi neměli.
To už bys, dotaženo ad absrudum, rovnou mohl tvrdit, že je blbost začínat v C, že by měl člověk nejdřív napsat něco v asembleruVšak jsem psal, že s počítačema (pokud nepočítám pařby "cihly" na školních consulech) jsem se setkal tak, že jsem si ho chtěl naivně postavit z tyristorů
A ve vyšším jazyce si to prostě osaháš snáz, snáz získáš základní intuice o proměnných, funkcích, flow controlAž na to, že intuice založená na abstraktním modelu bude mimo realitu toho jak funguje procesor. A to nemůže dělat dobrotu. Moje nejpoužívanější funkce v céčku je hexdump paměti tam si můžeš přímo osahat to jak jsou ty data přímo uložená v RAM, jak si tohle chceš osahat třeba v javaskriptu?
Mě přijde, že možnost se přestat starat o lowlevel věci při postupu nahoru je tak nějak jednodušší než neustále analyzovat nižší a nižší vrstvy při obráceném směru.Když postupuješ odshora dolů, tak si nabiješ hubu, třeba ti program SEGFAULTuje, Valgrind a ASan hlásí hromadu chyb, program nefunguje, tvoje naučené postupy nejdou použít… což tě donutí to buď vzdát nebo si dostudovat, jak se to píše správně v tom nízkoúrovňovějším jazyce. Zatímco při postupu opačným směrem ti v zásadě nic nebrání tomu, abys psal Céčko v Javě nebo Pythonu – sice to bude špatně, ale nějak ti to fungovat bude, takže tě přímo nic nenutí se naučit, jak se píše v tom vyšším jazyce.
třeba ti program SEGFAULTujeNebo nesegfaultuje, ale má v sobě bezpečnostní chyby.
Mě přijde, že možnost se přestat starat o lowlevel věci při postupu nahoru je tak nějak jednodušší než neustále analyzovat nižší a nižší vrstvy při obráceném směru. Ale možná to je bias z toho že mě vždycky přišlo, že spolužáci, co znali třeba python ty nižší jazyky moc rádi neměli.To zálaží na osobních preferencích. Vím o nemálo lidech, kteří měli první jazyk vyšší a šli směrem dolů.
Až na to, že intuice založená na abstraktním modelu bude mimo realitu toho jak funguje procesor. A to nemůže dělat dobrotu. Moje nejpoužívanější funkce v céčku je hexdump paměti tam si můžeš přímo osahat to jak jsou ty data přímo uložená v RAM, jak si tohle chceš osahat třeba v javaskriptu?Jenže to ti na začátku k ničemu není. Proč bys řešil, jak je třeba proměnná uložena v RAM, když ani nevíš, co je proměnná nebo nemáš pořádně intuici, k čemu je taková proménná dobrá? Na začátku ani nevíš pořádně, co jsou datové typy. Ditto třeba funkce. Tyhle věci si prostě zjistíš ve chvíli, kdy se k tomu dostaneš. A pokud nemáš chuť se k tomu dostat, neměl bys k tomu chuť ani na začátku. Třeba to, že (nativní) funkce mají nějaký prolog a epilog a jak vlastně předávají argumenty na různých architekturách jsem zjistil až po letech jejich spokojeného používání... Netvrď mi, že ses tohle naučil všechno najednou. (A jestli jo, tak jsi výjimka.)
Proč bys řešil, jak je třeba proměnná uložena v RAM, když ani nevíš, co je proměnnáTak zrovna tohle jsem věděl ještě před tím, než jsem měl první počítač. Ono když člověk sbírá eletroodpad, tak se dostane k věcem jako EPROM, hradla, čítače apod.
Ditto třeba funkce.No to jsem nevěděl ani po absolvování qbasicu, ještě v prvních programech v pascalu jsem psal vlastní implementaci hledače min jako obrovský strom plný goto.
že (nativní) funkce mají nějaký prolog a epilog a jak vlastně předávají argumenty na různých architekturáchNo technicky to bylo zmíněno už v AThelpu, což se dá brát jako počátek mého reálného programování, ale setkal jsem se s tím teprve až ve chvíli, kdy jsem začal psát assembler v kernelu nebo ho debugovat. Do té doby jsem je taky prostě nepotřeboval. A kdybych nepotřeboval debugovat linux na FPGA, tak je nepotřebuju až do teď (já vlastně normální programy ani moc nedebuguju, nepotřebuju). Já jsem prostě začal odspodu a funguje to (ovšem co je metrika, že to funguje). Souhlasím s tím, že bych měl problém asi něco napsat třeba v prologu nebo haskellu a v javě bych psal céčkařsky. Ale úlohy co řeším tu vysokoúrovňovou abstrakci prostě nepotřebujou, nebo je dokonce škodlivá (většina mých věcí by byla s overheadem interpreteru/VM moc pomalá, moc velká).
Tak znova, pro naučení binárního stromu žádný jazyk nepotřebuješ. Maximálně jen model problému v mozkuAby ses naucil plavat, bazen taky nepotrebujes, staci ti jeho mentalni model.
Nejdřív se musíš naučit samotné jazyky (pointery například) a teprve pak v nich můžeš psát díla (stromy). Z hlediska computer science žádný jazyk nepotřebuješ, zAneb jak zabit vnitrni motivaci snadno a rychle.
Úplný začátečník by měl vědět, jak šla posloupnost počítačů od mechanických strojů, po stroje s adresovatelnou pamětí, assembleru, portovatelného programovacího jazyka, objektového jazyka apod. Ne že se skočí hnedka do abstrakce a pak případně jde proti proudu času.Tato debata zacina byt znacne nesmyslna, koncim. Jde videt, ze ses opravdu nestkal s vyukou zacatecniku, proto nemam sanci argumentovat proti tve znacne idealizovane predstave vyuky.
Aby ses naucil plavat, bazen taky nepotrebujes, staci ti jeho mentalni model.Tak předpokládám, že před vhozením do vody řekne instruktor plavání jak hejbat rukama apod.
Aneb jak zabit vnitrni motivaci snadno a rychle.Mě například motivaci zabíjela syntaxe pythonu, nebo syntaxe a gramatika VHDL.
Vždyť tak začíná i wikipedie.Úplný začátečník by měl vědět, jak šla posloupnost počítačů od mechanických strojů, po stroje s adresovatelnou pamětí, assembleru, portovatelného programovacího jazyka, objektového jazyka apodJde videt, ze ses opravdu nestkal s vyukou zacatecniku
Mě například motivaci zabíjela syntaxe pythonuMyslíš to jak nemusíš psát spoustu zbytečných závorek a středníků a jediné co to po tobě chce je odsazení, které bys psal tak jako tak?
\t
, v Pythonu si odsazování zvolíš a interpreter po tobě následně vyžaduje jen konzistenci.
Ve výsledku není moc rozdíl oproti C-like jazyku, kde chceš odsazování taky držet konzistentně a kontrolovat to lintem. Rozdíl je jen v tom průběhu, kdy Python prostě odmítne vyhodnotit kód se špatným formátováním a nelze to tedy ani vyzkoušet (umím si představit, že to někomu pije krev při kopírování ze StackOverflow apod.). Mně osobně občas vadí zalamování řádků, ale jinak je to docela OK.
Spekuloval bych, že pro výuku programování je to lepší než C-like syntaxe právě z toho důvodu, že to odsazování musí být v pořádku. Ze zkušenosti vím, že pro začátečníky to odsazování není intuitivní a v C-like jazycích ho vždycky udělají blbě. Tím jim to ale nic neusnadní, naopak; při dohledávání chyby se jim kód ještě hůře čte.
Tím jim to ale nic neusnadní, naopak; při dohledávání chyby se jim kód ještě hůře čte.O tom jsme se už bavili před pár dny, mě to nepřijde jako nevýhoda. Špatně odsazený kód Cčka není tak nečitelný, aby to znemožnilo výuku.
v Pythonu si odsazování zvolíšTakže ve třídě bude mít každej jiný odsazování a když si budou muset poradit, tak budou zmatený, že se jim ty kousky kódu nechtějí zkompilovat. To pak ale padá argument, že python je přehlednější.
Takže ve třídě bude mít každej jiný odsazování a když si budou muset poradit, tak budou zmatený, že se jim ty kousky kódu nechtějí zkompilovat. To pak ale padá argument, že python je přehlednější.Python hned při startu vypíše IndentationError, ukáže ti přesně řádek kde je problém a napíše co tam je za problém. Jinak docela standard bývá si zapnout zobrazování bílých znaků a pak to prostě vidíš na první pohled.
Jinak docela standard bývá si zapnout zobrazování bílých znaků a pak to prostě vidíš na první pohled.To už bych se spíš porozhlédl po editoru s dobrou kontrolou syntaxe. PyDev to myslím uměl.
bývá si zapnout zobrazování bílých znakůNemám, resp v MC jsem si to vypnul, protože to je fujtajbl implementace. V Kate je identifikátor tabu, ale mezery bych v tom nerozpoznal, navíc i ten tab není pořádně vidět. Céčko v takovém nastavení funguje, tak proč se v tom hrabat (bych si musel nastavit 100% intenzitu obarvení, abych to na tonhle LCD viděl), když všechny moje projekty jsou víceméně v céčku. V něčem jako terminálu nic takovýho neexistuje (třeba pro skripty v bashi).
Nemám, resp v MC jsem si to vypnul, protože to je fujtajbl implementace.Já používám editor, který má problém se zobrazováním složených závorek, a protože ho už 31 let nikdo nevyvíjí, opravy se asi nedočkám. Považuji to za solidní argument, proč nevyučovat C.
v čem přes ssh spravuješ vzdáleně soubory?
Emacs
mcedit
u je tohle hezky hned vidět a to i ve výchozím nastavení (tzn. na jakémkoli stroji s MC, ne jen tam, kde mám svoje osobní vyladěné nastavení).
Často právě musím otevřít soubor v MC, abych se podíval, kde jsou tabulátory a kde mezerySnad všechny grafické editory umí místo tabu zobrazovat
»
a místo mezery na začátku a na konci řádku ·
.
Jako že je MC starej? v čem přes ssh spravuješ vzdáleně soubory? Někdy je nejrychlejší prostě dát shift+f4 a napsat testovací minikód.Vim, emacs. Když nic jiného, tak nano, nebo cat >, nebo mountnutí přes sshfs, ale mc by mě fakt ani nenapadlo.
V MC to je fujtajbl implementace, protože to nahrazuje tab copypastovatelným (z terminálu) stringem "<---->"A jde to vůbec u terminálové aplikace jinak? Maximálně měnit barvu pozadí, ale znaky nechat
" "
(mezera).
Tohle je jeden z příkladů, který ukazuje omezenost editorů a obecně aplikací pro terminál / textový režim. Tenhle druh aplikací má sice jiné výhody a často to tak nevadí, takže stále dává perfektní smysl je používat, alespoň na některé úlohy. Ale oproti GUI aplikacím budou vždy v něčem omezené.
Špatně odsazený kód Cčka není tak nečitelný, aby to znemožnilo výuku.Mám opačnou zkušenost. Když jsem pak v takovém kódu dohledával chybu, špatné odsazování to komplikovalo velmi výrazně. Byla to Java, ne C, ale to zde nehraje roli.
Takže ve třídě bude mít každej jiný odsazování a když si budou muset poradit, tak budou zmatený, že se jim ty kousky kódu nechtějí zkompilovat.Jako kdyby byl problém nakonfigurovat všem stejné odsazení, nebo jim prostě vysvětlit, jak to funguje. Nevidím moc velký rozdíl někoho učit psát složené závorky, nebo mu vysvětlit, k čemu je ta klávesa nad Caps Lockem. Problém může nastat, pokud někdo bude používat jiný nebo jinak nastavený editor doma než ve škole a v jednom zdrojovém souboru se mu smíchají mezery a tabulátory. Právě proto by bylo dobré to předem vysvětlit. Velmi mírně to zvedá vstupní bariéru (zadávat chlupaté závorky naučíš člověka, který z počítačů nemá panickou hrůzu a čudlíky nemačká s hrůzou v očích, docela rychle), ale je to investice, která dává velmi dobrý smysl. V C to můžeš ignorovat, ale pak jejich zdrojáky budou vypadat jako rozsypaný čaj.
Když jsem pak v takovém kódu dohledával chybu, špatné odsazování to komplikovalo velmi výrazněHmm zajímavé, nestačí si na to jen zapamatovat v céčkoidní syntaxi v jak moc vnořeném bloku zrovna jsem? Což je divný, protože já bych se třeba v závorkách lispu lehko ztratil, ale intuitivně vědět, kde jsem v bloku v céčku mě moc velký problém nedělá. Samozřejmě občas omylem vymažu ukončovací "}" na konci funkce a pak to musím hledat, ale taková nehoda by byla méně častější než chyba indentace u pythonu.
Problém může nastat, pokud někdo bude používat jiný nebo jinak nastavený editor doma než ve škole a v jednom zdrojovém souboru se mu smíchají mezery a tabulátory.No právě, zdrojáky se můžou obecně kopírovat z celého světa.
Právě proto by bylo dobré to předem vysvětlit.Stejně tak to jde vysvětlit i pro céčko. Vyučující dokonce může zavést checkpatch pravidla. Nevidím důvod, proč by to mělo být ale fundamentální vlastností jazyka.
Hmm zajímavé, nestačí si na to jen zapamatovat v céčkoidní syntaxi v jak moc vnořeném bloku zrovna jsem?Musíš číst celý kód od začátku. Nemůžeš to jen rychle projet očima.
Nevidím důvod, proč by to mělo být ale fundamentální vlastností jazyka.Protože ti to šetří jeden zbytečný řádek kódu využitím informace, která by v tom kódu jinak stejně byla?
informace, která by v tom kódu jinak stejně byla
Což je jeden z prvních výsledků hledání: Why Python’s whitespace rule is right
When you really analyse it, Python’s whitespace sensitivity is actually the only logical choice for a programming language, because you only communicate your intent one way, and that intent is read the same way by humans and computers.
only logical choiceVětšina ostatních jazyků to tak nemá a jsou taky populární. Nemyslím si, že to je jen historická setrvačnost.
same way by humans and computersOk chci počítačem vygenerovat kus skriptu. Bude to jednodušší nebo zložitější s povinných odsazováním nebo bez něj?
Chybějící jedné závorky na konci bloku si všimnu, jednoho chybného odsazení na konci bloku si nevšimnu.
Dělám na asi větším projektu (a se špagetovým kódem), kde bych to musel přepočítávat, potažmo někdo za závorku píše v komentáři, co za blok se tím končí (např. úvodní podmínka), což se blbě udržuje.
Naštěstí to řeší editor.
Ok chci počítačem vygenerovat kus skriptu. Bude to jednodušší nebo zložitější s povinných odsazováním nebo bez něj?
RTFA
Generátor kódu si musí vždy vést informaci o stavu odsazení, což je technické zesložitění – to je fakt, ale ne argument, když jde o člověkem užívaný formát (jazyk).
RTFAPrávě že jsem četl, argumentoval tam tím, že je to odsazení výhodné i pro stroj, což oproti {} není.
Protože ti to šetří jeden zbytečný řádek kódu využitím informace, která by v tom kódu jinak stejně byla?Pro jeden příkaz nepotřebuješ v céčku {}, pro dvou a více příkazový blok, potřebuješ v céčku {}, ale v pythonu máš na obou (a více) řádcích indentaci. V nekonečně příkazovém bloku, budeš mít nekonečně indentací, ale v C stále dvě závorky. Ale to už se fakt bavíme o extrémech.
if True: print 1
je zcela validní). Jinak jsem tu myšlenku asi úplně nepochopil.
Když jsem pak v takovém kódu dohledával chybu, špatné odsazování to komplikovalo velmi výrazně. Byla to JavaPokud je odsazení natolik špatné, že brání tomu, aby ses v kódu vyznal, tak to prostě celé v IDE nebo jiném nástroji přeformátuj. Jinak takový brutální zásah není moc dobrý kvůli verzování a dohledatelnosti, ze které verze který řádek pochází… takže běžně přeformátovávám spíš jen řádky, které jsem měnil. Ale pokud je kód v takovém bordelu, tak bych ho přeformátoval jednorázově celý. Případně to po nalezení chyby můžeš vrátit do původního stavu.
Závorky a středníky udělám jednou dvakrát za funkciA taky u každého ifu, a na každém řádku za každým výrazem a ..
Prohánění bloků copypaste kódu dělám pořád. Občas kód dočasně vyřadím zakomentováním, ladící asserty a pracovní komentáře dělám zásadně bez odsazení i v bloku, kde je odsazení několik tabů. Tyhle věci musí být viditelné jako pěst na oko, protože to jsou obvykle místa, kde dochází k problémům. Před commitem to samozřejmě vyčistím a zformátuju, check-patchi ani maintainerům to nevadí (protože se to k nim nedostane).Já tohle taky dělám pořád, kde v tom má python problém?
Já tohle taky dělám pořád, kde v tom má python problém?Reformátovací IDE? Já píšu některé C programy v MC editoru.
Reformátovací IDE? Já píšu některé C programy v MC editoru.Cože? Prostě posun bloku doleva / doprava. To má i Vim a úplně každý programátorský editor, co jsem kdy viděl. Ostatně to potřebuješ i v tom C, pokud se z toho nechceš zeblejt. Pokud píšeš programy v MC editoru, tak prostě budeš muset posouvat bloky doleva / doprava nějak jinak, například manuálním přidáváním/mazáním mezer, nebo si na to napiš script nebo co já vím. Jako, tohle mě na lidech pomlouvajících python vždycky úplně nejvíc zarazí. Vždyť je to proboha naprosto nejvíc triviální blbost. Doslova to není vůbec problém, ani hypoteticky. A tvrdit, že se ti kvůli tomu python nelíbí je jako odmítnout si vzít zadarmo auto, protože se ti nelíbí odstín žárovky, jakou svítí zadní světla. Asi jako říct, že v C nebudeš programovat, protože tam ty středníky musíš psát a úplně ignorovat všechny ostatní očividné výhody.
(i když to, že když chci, tak si musím na začátku definovat tabsize je o_O)Nic takového dělat nemusíš.
celý ten jazyk mě přijde gramaticky zbytečně komplikovanýGramatika je naopak dost jednoduchá, jednodušší než většina jazyků. Plné BNF má o 100 řádků míň než C a to jsou v tom komentáře a prázdné řádky pro přehlednost.
Gramatika je naopak dost jednoducháBash bude mít nejspíš jednodušší gramatiku, ale window manager v něm asi programovat nebudeš. Brainfunk má jednodušší gramatiku zcela určitě a taktéž. Měřítko není velikost BNF, ale přívětivost pro člověka, když mě parser může zprudit za odsazení každé řádky vs za jedno chybějící "}", tak je to první prostě nepřívětivý. Jako můžu použít editor, aby to odsazení řešil, ale to je rovnák na vohebják.
Já mluvil o použití nedefaultní hodnoty, ale hlavně o tom, že taková volba vůbec existuje.Co to vůbec znamená? Nic jako defaultní hodnota tam není. Můžeš odsazovat libovolným počtem tabulátorů, mezer, či jejich kombinacemi. Jediné pravidlo je, že když chceš odsadit blok, tak musí být odsazený víc, než ten předchozí.
Bash bude mít nejspíš jednodušší gramatiku, ale window manager v něm asi programovat nebudeš.Ve skutečnosti jí má složitější (o pár desítek řádek), to ovšem neřeší věci jako že každý druhý program má rozdílné argumenty a samotný bash má asi sto různých nastavení, jak se může chovat. Což z něj činí jazyk složitější o mnoho víc, když vynechám že podpora čísel saje prdel, je stringově orientovanej a složitější datovej typ ani nevím, jestli se vůbec dá udělat.
Měřítko není velikost BNF, ale přívětivost pro člověka, když mě parser může zprudit za odsazení každé řádky vs za jedno chybějící "}", tak je to první prostě nepřívětivý. Jako můžu použít editor, aby to odsazení řešil, ale to je rovnák na vohebják.Díky, vysmál jsem se dobře. Prosímtě, dělal jsi v tom vůbec někdy? Protože já s tím mám desítiletou zkušenost, s C mám historicky ještě delší a o přívětivosti u něj nemůže být ani řeč, ať už se bavíme o syntaxi, hlášek kompilátoru, nebo o jazyce jako takovém, který je přívětivý a pohodlný asi jak dřevěná postel v Osvětimi. BTW: Kolikrát v životě se ti stalo, že jsi napsal if () bez {}, pak jsi tam přidal řádek a program byl funkčně blbě, i když se syntakticky tvářil funkční? Protože v Rustu je to například zakázané, jelikož šlo o častou chybu.
Co to vůbec znamená? Nic jako defaultní hodnota tam není. Můžeš odsazovat libovolným počtem tabulátorů, mezer, či jejich kombinacemi.Aha tak to pardon, moje chyba, špatně jsem usoudil, že se to musí předdefinovat. Já v pythonu neprogramuju.
složitější datovej typ ani nevím, jestli se vůbec dá udělat.Tak "dá" ...
přívětivosti u něj nemůže být ani řeč, ať už se bavíme o syntaxiTak je to subjektivní, ale mě prostě možnost napsat několik příkazů na jeden řádek společně s podmínkou, přijde přívětivá.
Kolikrát v životě se ti stalo, že jsi napsal if () bez {}, pak jsi tam přidal řádek a program byl funkčně blbě, i když se syntakticky tvářil funkční?Možná tak jednou dvakrát, mě naopak NAKujou patche, protože píšu {} všude. Dopředu nevím zda tam nebudu muset házet assert, takže pro jistotu.
Tak je to subjektivní, ale mě prostě možnost napsat několik příkazů na jeden řádek společně s podmínkou, přijde přívětivá.
To v Pythonu jde – oddělovat příkazy středníkem na řádku.
Tato debata zacina byt znacne nesmyslna, koncim.To škoda, mě ta diskuze bavila
Každopádně třídící stromy vznikly kvůli potřebě optimalizaci a efektivitě, takže učit to na jazycích, kde se to mikrooptimalizace nemusíš starat (java), je IMO vyloženě kontraproduktivní (proč bych měl řešit třídění prvků, když to za mě udělá orákulum virtuálního stroje).Pleteš si mikrooptimalizaci a optimalizaci. Není rozdíl, jestli jeden krok trvá milisekundu nebo dvě, ale je rozdíl, jestli se dělá tisíc kroků nebo milion kroků.
Vyzdvihovat zoufale omezenou standardní knihovnu jako výhodu je totiž ekvivalentně hloupé.Na Hw obvykle moc jiných možností nemáš. Dokonce byla standardní knihovna tak přeplněná funkcema, že i nějaký zrušili (uclibc, musl, eglibc, newlib).
Proto dobrá výuka začíná vždy shoraJak moc shora, pro jak moc nízkou aplikaci?
učily programovat v manuálně kompilovaném assembleruNo vidíš, my se učili v 2005 assembler na 8051 i když se v té době už dalo očekávat, že kapacity čipů půjdou prudce nahoru a nejspíš se vyplatí používat i C.
Vlákno je – zhruba od #263 – o učení se začátečníka programování.
Nerozporuji, že „ajťák“ by třeba měl mít představu o relevantních implementačních detailech, což práce s pamětí [v Céčku] bezpochyby je.
Reagoval jsem v návaznosti na pasáž
Tak znova, pro naučení binárního stromu žádný jazyk nepotřebuješ. Maximálně jen model problému v mozku. Každopádně třídící stromy vznikly kvůli potřebě optimalizaci a efektivitě, takže učit to na jazycích, kde se to mikrooptimalizace nemusíš starat (java), je IMO vyloženě kontraproduktivní (proč bych měl řešit třídění prvků, když to za mě udělá orákulum virtuálního stroje).Ukolem je naucit, co je to binarni strom, a ne pomoci nej ucit pointery.binarni stromy lze hezky vysvetlit treba na teckovych parech jako ma LispJaká je úspěšnot člověka, co se naučí binární strom v lispu a pak se z toho binárního stromu má učit pointery v céčku? Jinak i v céčku jde binární strom učit bez explicitních pointerů.
Takže: [binární] strom je struktura, která se používá všude možně mimo třídění: namátkou v algoritmech „umělé inteligence“ / „strojového učení“ nebo napříč obory od biologie po lingvistiku.
Ostatně, tihle lidé, kteří se soustřeďují na jinou doménu, se typicky učí Python (dřív Perl) – proč asi? Jednak jsou v tom ty knihovny k lepení, jednak se v tom snadno abstrahuje (odtud se také berou ty knihovny).
Také jsou to často zajímavé (a tedy motivující) implementační úlohy i pro „ajťáka“. Přitom není žádoucí řešit technické detaily nebo syntaktické orgie [C] na úkor problému samotného.
Ostatně, tihle lidé, kteří se soustřeďují na jinou doménu..nespadají do nízkoúrovňového programování, není problém, aby se to neučili v pythonu.
Také jsou to často zajímavé (a tedy motivující) implementační úlohy i pro „ajťáka“. Přitom není žádoucí řešit technické detaily nebo syntaktické orgie [C] na úkor problému samotného.Pokud je jeho hlavní jazyk python, tak proč ne. Pokud začal (nebo výhradně používá) céčko, tak se asi nebude učit jazyk, který nezná, od nuly jen aby vyřešil úlohu obsahující strom.
V Céčku je mimo nízkoúrovňové úlohy více boilerplate kóduVšak už od půlky diskuze rozděluju jazyky na nízkoúrovňové a vysokoúrovňové.
A? Bavime se tu porad o vyuce programovani uplnych zacatecniku... Programovani kernelu je obyvkle hned druha kapitola, hned po pointerech.
Tady je prostě řeč o ortogonálních případech užití.
Jestli je někdo začátečník třeba v rozblikávání diod (třída problémů), je (zatím) volba něčeho jako Céčko vcelku nasnadě. Ale k tomu AFAIK nepotřebuje binární strom ani většinu konceptů souvisejících se „softwarovým inženýrstvím“.
Naopak pokud jde o úlohy mimo hardware, nedává užití nízkoúrovňových nástrojů smysl – ve výuce, dokud nejde o vyšší dívčí v oblasti optimalizací, systémového programování apod.
Tahle větev už je strašně úzká
To záleží na obrazovce a stylopisu. S tím Jendovým patchem to není takový problém.
Trochu mi v téhle diskusi chybí člověk, který by řekl: „ale s knihovnou/frameworkem XYZ se dá i v Céčku psát celkem vysokoúrovňově a pohodlně.“Protože pro C prostě neuděláš knihovnu/framework tak, aby se v tom psalo vysokoúrovňově a pohodlně...
v mladém věku je člověk víc flexibilnější a pokud se naučí v mechanismu Cčka mysletOtázka je, jestli je to k dobru věci. Pokud bude jeho prací převážně tvorba aplikací a bude se většinu profesního života pohybovat na vyšší úrovni abstrakce, tak si myslím, že je to spíš na škodu a že „myslet v Céčku“ (nebo nedejbože v instrukcích procesoru) ho zkazí, bude psát horší kód a spolupráce s ním bude obtížnější. Jde o to, že zdrojový kód – kromě toho, že se nakonec přeloží na instrukce procesoru – slouží jako komunikační prostředek mezi lidmi. A ignorovat tuto funkci kódu je fatální chyba. Neříkám, že se má psát záměrně neefektivně, ale pokud se rozhoduji, jestli napsat něco a) výkonově optimálněji nebo b) čitelněji pro člověka, tak se dobře zamyslím, jestli ten výkonnostní rozdíl je vůbec relevantní. Je měřitelný, všimne si někdo, že to je rychlejší? Není náhodou ta optimalizace o řád nebo dokonce několik řádů pod tím, co v programu/algoritmu žere nejvíc času? Stručně řečeno: optimalizovat je potřeba úzké hrdlo a ne nějaké náhodné pasáže, které ve mně vyvolávají nějaké pocity nebo které bych dokázal napsat úsporněji (ovšem za cenu horší čitelnosti). Ty hodiny, které jiný programátor nebo tvoje budoucí já, stráví zkoumáním programu a hledáním toho místa, kde je potřeba něco upravit nebo kam a jak dopsat novou funkčnost, jsou mnohem dražší než nějaké cykly CPU. Tím nechci říct, že se má plýtvat výkonem – spousta aplikací se píše dnes velmi neefektivně a to jak z hlediska výkonu, tak z hlediska srozumitelnosti a rychlosti vývoje. Naskládá se na sebe hromada vrstev abstrakce, což snižuje výkon, ale teoreticky by to mělo zvyšovat efektivitu programátorů, ale ono to selhává i v tomto směru – další a další vrstvy nepřinášejí očekávaný vývoj, ale spíše nové problémy a znepřehledňují situaci. Třeba takový webový prohlížeč – to je neskutečně komplexní záležitost a má klidně i 50 milionů řádků kódu. A na tom velká část dnešních aplikací závisí. Oproti tomu takové OpenJDK má „jen“ 13 milionů. Rust nebo Python „jen“ milion. Perl 2. GCC 9,5. GTK 1,1. Qt 12. … Podle mého má smysl se vrátit trochu zpátky a začít znovu, odhodit některé vrstvy, které nepřináší slibovaný užitek, a dělat software trochu jednodušeji. Ale rozhodně nevidím smysl v mikrooptimalizacích a v těsné vazbě na hardware (kromě výjimečných případů). Smysluplné vrstvy abstrakce je naopak potřeba zachovat. Např. je užitečné, když operační systém odstíní aplikaci od toho, na jakém CPU běží, nebo z jakého souborového systému načítá data. Taky je dobré umět pracovat s daty nezávisle na tom, jestli se nacházejí na lokálním disku nebo na síti, zda jsou v souboru, nebo zda je generuje jiná aplikace atd. Ale k tomu stačí nějaký vyšší (než C) programovací jazyk a poměrně jednoduché knihovny a nebo návrhové vzory.
Otázka je, jestli je to k dobru věci. Pokud bude jeho prací převážně tvorba aplikací a bude se většinu profesního života pohybovat na vyšší úrovni abstrakce, tak si myslím, že je to spíš na škodu a že „myslet v Céčku“ (nebo nedejbože v instrukcích procesoru) ho zkazí, bude psát horší kód a spolupráce s ním bude obtížnější.Jo to souhlas, ale tím pádem by člověk nesměl k céčku ani páchnout (pokud chce dělat dobře v javě). Protože ono to funguje i naopak. Člověk co umí myslet ve vyšších jazycích, pak píše v céčku kód, že se céčkař chytá za hlavu.
Je měřitelný, všimne si někdo, že to je rychlejší?Njn rozdíl mezi lidma, co začínali na táhnoucí se 386 a ještě v 16 si nemohli naráz pouštět písničky (wavy :-P) a kopírovat na disketu a lidma, co předpokládají, že všichni mají minimálně tak rychlý počítač jako oni sami
Třeba takový webový prohlížeč – to je neskutečně komplexní záležitost a má klidně i 50 milionů řádků kódu. A na tom velká část dnešních aplikací závisí.Dillo je poměrně malé, funguje mi i na stroji s 64MB RAM (~30MB sežerou xka)
Myslíš že by tě to někam posunulo? Navíc jak říká Liška, nezapomeň že v té době si se mohl učit tak maximálně číst a psát, ne dělat něco vážného. Ten BASIC byla v mém případě spíš náhoda a úplně první vážnější "jazyk", tedy VRML97 přišlo právě až po přelomu milénia.
Toto je s prominutím pěkná blbost. Basic byl a je zcela regulérně jazyk bez uvozovek. Je to historie, ale hledat někde čáru a říkat "doteď to bylo takové plácání, odteď už je to seriózní věda" - to bych určitě nedělal. Stejně jako tabulátory IBM posloužily za války jako efektivní nástroj pro logistiku, má i basic za sebou spoustu aplikací a programů, které ve své době přinesly absolutně nové věci a možnosti.
Tehdy bylo trochu jiné paradigma, než dnes. Jednak byly počítače podstatně méně časté, druhak jsme k problémům přistupovali jinak. Dnes, když chceme něco řešit, tak hledáme program, který daný problém řeší, nebo možná už jsme trochu dál a často hledáme spíš nějakou online službu. V době basicu nás takové věci nenapadly, měli jsme problém, tak jsme si program pro jeho řešení prostě _napsali_. Pro toto použití byl ten jazyk designovaný.
I dnes při těch gigahertzích a gigabytech řešíme často stejné problémy, jako v dobách basicu a s ohrnutým nosem klidně napíšu, že programování samotné i běh těch systémů jsou s těmi historickými bohužel plně srovnatelné.
Pro mě osobně byl přechod na PC (tehdy 8088, resp. NEC V20) poměrně šokující. Říkal jsem si - to jako z tak nabouchaného hardwaru, tak rychlého CPU, tolika kilobytů RAM a harddisku (!) dokázali ti žabaři dostat jenom toto?
To jsem ale fosílie...
Bože, chytám se za hlavu. Co ste sakra v pětadevadesátém a šestadevadesátém jako dělali?Já jsem se zrovna učil psát.
Jetpac, pssst atd. bylo tak 89-90Vydáno. Jenže než se to dostalo do Skalice (dodám že výrobní družstvo stojí dodnes tam kde stávalo, akorát se už nezabývá výrobou počítačů), než můj tata koupil první porevoluční počítač (to muselo být na 100% po revoluci), než jsem se vůbec naučil ovládat joystick, to by tak odpovídalo. Teď v retrospektivě si vzpomínám že první číslo Počítače pro každého vyšlo v roce 1998 (poctivě jsem zakládal do šanonu) a tak v druhém čísle bylo něco o tom že nejlevnější počítač (myšleno asi nějaké Pentium) stálo něco kolem 19 000Kč a nad tím sem slintal jak děcko nad lízátkem. Někdo holt měl prachů dost a nebo spíš bohaté rodiče
Je otázka, kolikrát by to byl MS ochotný absolvovat, když by mu uživatelé vždycky utekli. Při každé iteraci navíc odtečou peníze z Microsoftu k někomu jinému.Se podívej kolik mají akvizicí. To je co rok několik majoritních (v řádu mld. dolarů) To je takový moloch že tam snad na ty akvizice musí vést nějaký pořadník. Něco ve smyslu „V klidu, v pohodě, na každého se dostane, ale hybaj do fronty, šup, šup…“.
The king is dead, long Live the GitLab.
The king is dead, long Live the GitLab.
Na takové výkřiky je IMHO ještě příliš brzy. Spíš se obávám, aby těch pár hektických dnů Gitlabu nakonec neuškodilo, když potenciální uživatelé a zákazníci uvidí, jaké problémy má zvládnout těch pár tisíc přemigrovaných (většinou asi spíš zkopírovaných) projektů.
Oproti tomu ty projekty na githubu měly návštěvnost a pull requesty občas prostě jen proto, že na to někdo narazil a líbilo se mu to.Jak se stane, že na GitHubu na to náhodným browsením narazí, ale na obecném webu ne?
Ja často potrebujem vyhľadať určitý kus kódu v určitom jazyku. Vtedy si otvorím github, dám do vyhľadávania fragment, ktorý ma zaujíma a jazyk v ktorom ho potrebujem. Nedávny príklad: importujem dáta z nemenovaného PHP-čkoveho CMS do djanga a potreboval som zmigrovať hashované heslá. Viem, že hash má určitý prefix, tak ho dám do vyhľadávania, obmedzím jazyk na Python a ako prvý výsledok mám rovno auth backend do djanga. Keď to isté dám do googlu s textom python / django nenájde nič.
Osobně vidím výhodu Githubu právě v té sociální části.V první řadě je chyba, že jsi to nechal zajít tak daleko a stal jsi se závislý na proprietární službě (resp. bude ti nějak výrazněji chybět). Že to dneska koupil Microsoft je už jen taková třešnička na dortu – ale špatný byl ten stav už dávno před tím. Ostatně: There is no cloud …just other people's computers.
protože se dají jednoduše najít a nebýt githubu, tak bych se o nich ani nedozvědělJá to mám jinak – přestože jsem z GitHubu postahoval spousty softwaru, nikdy jsem ho tam nehledal. Odkazy na ty projekty jsem vždy nacházel normálně na webu, v diskusích, přes obecný vyhledávač, v e-mailových konferencích atd.
Taky se mi líbí ta filosofie „code first“ a že člověk u menších projektů nemusí vymýšlet žádnou prezentaci - samotný kód je tou prezentací. Vzpomínám si ještě na doby, kdy si člověk musel dělat pro svoje projekty vlastní stránky, což i když už náhodou udělal, tak zabilo objevitelnost (než to zaindexuje google a na jakou pozici to asi tak dá) a u ostatních lidí ochotu zapojit se (nebudou vymýšlet jak kód stáhnout, provést patche a dát mi o nich vědět).Na tohle mám trochu jiný názor. Chápu, že ušetřený čas, který nestrávíš vytvářením webu, můžeš věnovat psaní kódu, což by teoreticky mělo být přínosnější. Ale v praxi má tahle myšlenka docela trhliny. Např. schopnost srozumitelně popsat vlastní projekt, považuji za stejně tak důležité jako psát kvalitní kód. Bohužel spousta „projektů“ na GitHubu je tak, jak to autorovi odpadlo od ruky, bez pořádného popisu, bez dokumentace, v neznámém stavu. Ono napsat řádky kódu vlastně moc neznamená a někdy mají dokonce zápornou hodnotu, spousta projektů se topí ve statisících nebo milionech řádků kódu a brzdí to další rozvoj i úplně obyčejnou údržbu. Software je pak mnohem víc než jen ty řádky kódu. I když jsem GitHub reálně ani nepoužíval, účet jsem aspoň symbolicky zrušil. Dnešní událost bych nevnímal nijak tragicky – špatné to bylo už dávno před tím – teď si akorát pár lidí přišlo k pěkným penězům a pro ostatní to snad bude impulzem k hledání lepší cesty. Ostatně to přelití části peněz z rukou MS do rukou někoho jiného je v zásadě pozitivní věc – snad s nimi naloží líp než MS.
Ostatně to přelití části peněz z rukou MS do rukou někoho jiného je v zásadě pozitivní věc – snad s nimi naloží líp než MS.Třeba si za ně koupí něco pěkného. Je ti doufám jasné že pro takové korporace jsou peníze něco jako chcánky v moři, denní chleba který se přelévá odněkud někam, čísla na kterými ani moc nikdo nepřemýšlí. Ostatně celou akci až a pár nastrčených koňů zaštiťuje ta nejdůležitější osoba a tou je ta CFO. Já bych tyhlety akvizice zakázala.
V první řadě je chyba, že jsi to nechal zajít tak daleko a stal jsi se závislý na proprietární službě (resp. bude ti nějak výrazněji chybět). Že to dneska koupil Microsoft je už jen taková třešnička na dortu – ale špatný byl ten stav už dávno před tím.Závislý jsem taky na jídlu a na pití a na internetu (elektřině, teplu, sociálním kontaktu, ..). Samozřejmě, že kdybych nebyl, tak bych na tom byl líp v případě, že nebudu mít jídlo, pití, nebo internet (nebo ..), ale to tak nějak ztrácí pointu. Bez Githubu bych se těžko vůbec někdy takhle zapojil.
Na tohle mám trochu jiný názor. Chápu, že ušetřený čas, který nestrávíš vytvářením webu, můžeš věnovat psaní kódu, což by teoreticky mělo být přínosnější. Ale v praxi má tahle myšlenka docela trhliny. Např. schopnost srozumitelně popsat vlastní projekt, považuji za stejně tak důležité jako psát kvalitní kód.Na to ti právě často stačilo jedno readme.
Přijde mi, jako by spousta lidí zapomněla, že Git je v první řadě svobodný software, že si ho můžou spustit na celkem libovolném serveru resp. ani ne serveru, ale počítači a že k němu můžou přistupovat přes SSH nebo jiným protokolem. Pokud se nad úložištěm zdrojáků mají budovat nějaké (sociální) vztahy, tak stačí nějaký formát na popis souvisejících metadat + nástroj, který tato (meta)data bude indexovat. Ostatně to je princip webu – hostovat ho můžeš kdekoli a lidé si ho čtou jedním z mnoha prohlížečů a najdou jedním z mnoha vyhledávačů nebo katalogů nebo si předají odkaz jinou cestou. Bylo by absurdní, kdyby všichni museli hostovat svoje weby u jednoho centrálního poskytovatele (byť Facebook se o to vlastně snaží resp. pokouší se nahradit web jako takový svojí proprietární službou).Já s tím souhlasím. Jen to prostě nikdo zatím neudělal. Tohle tomu naopak může pomoct.
Závislý jsem taky na jídlu a na pitíNevím proč jsem si vzpomněl na Aquacolu (Hint:Mad Max).
Závislý jsem taky na jídlu a na pití a na internetu (elektřině, teplu, sociálním kontaktu, ..).Na jídlu, nikoli na produktu jedné konkrétní firmy vyrábějící jídlo. Na teplu, nikoli na jedné konkrétní teplárně. Atd.
Na jídlu, nikoli na produktu jedné konkrétní firmy vyrábějící jídlo.
Rád bych tomu věřil, ale…
We are confident about our prospects for obtaining regulatory approval by end of this calendar year.Takže moc nadějí že zrovna ti něco zatrhnou bych neviděl. Asi prachy.
+100500 Schválně kolik lidí tady má gmailovou adresu.Tipuji, že naprostá většina těch, co mají Android. To ale neznamená, že to je jejich jediná adresa.
To že produkt vymře je pouze důsledek toho že Microsoft nebyl nikdy zrovna průkopníkem v oboru inovací. No hřbitov vypadá nějak takto. Obávám se že asi přibude o jeden hrobeček navíc.
Asi CVcka maju vacsiu hodnotuSpíš je to ukázka toho jakou reálnou hodnotu mají prachy.
preto že všetci sme bratiaTo je fakt. Vy na tom Slovensku jste všichni nějak jedna rodina…
Asi budu extra asociál, ale na abclinuxu mě vždycky zajímal text, ne lidi. A vážně nechápu, o jakých sociálních funkcích abclinuxu tu neustále mluvíš. Když to tady čtu, nechápu, jak jsme mohli ty roky před abclinuxu vůbec fungovat. Psát si, komentovat, posílat odkazy na zajímavosti, ...Samozřejmě, že je možné se obejít bez Githubu a sociálních aspektů. Tak jsi ty sociální části nepoužíval. Ok. Dobré pro tebe (nebo ne? vždyť ani nevíš o co jsi přišel). Netřeba je ovšem zpochybňovat, spoustě ostatních lidí vyhovovaly. Github je přímo zodpovědný za uvedení spousty lidí do světa opensource. Lidí, kteří by se k tomu třeba ani nedostali. Nejde o to, že by udělal něco vysloveně revolučního, ale snížil hranici znalostí a hlavně množství naprosto zbytečného opruzu, který musíš podstoupit pokud chceš někam přispívat. Vyřešil (a dobře!) lidský, sociální aspekt problému; jak přivést víc lidí k tomu aby se zapojili do projektů.
Každopádně jsem velmi zvědav, zda lidi opravdu zahlasují nohama.
Ja se chystal prez leto tam nasypat vetsinu projektu, ktere aspon nejak by mohly lidi zajimat.Taky! :-/ Holt kouknu se po jiném mirroru. Nechtěli by majitelé abíčka nainstalovat gitlab?
nějakou komisařkuVypadá jako by předsedala sdružení bojujícímu za práva hermafroditů, nebo tak něco.
Dá se nějak k tomuto kroku přispět? Líbí se mi, jak Bystroushaak bulí, protože mu možná zatrhnou obdobu proprietárního facebookuMůžeš si koupit Windows.![]()
GitHub almost certainly needed buying As a private company, we don't know exactly what GitHub's bank account looks like, but we can make some reasonable inferences. The company has had two rounds of venture capital funding, one for $100 million, a second for $250 million. Leaked financials from 2016 painted a picture of a company burning cash at a prodigious rate, with salary and benefits alone rivalling revenue. Even a more positive analysis of the numbers suggests that GitHub was on track to have burned through that $250 million by around the middle of this year.
Microsoft has officially refused to change the name, despite a large public backlash on GitHub and social mediaKonspirativnímu teoretikovi hnedka nahazuje fantazie :-P [/joke]