Je pěkné, že je tu článek o vývoji aplikací.
Přiznám se, že jsem článek prošel dost rychle (protože sám používám fpc/Lazarus), ale chtěl bych se zmínit o délce kódu.
Ono je hezké, že se dá napsat aplikace s mnoha funkcemi pomocí několika málo řádků kódu, ale v praxi to znamená, že to vlastně někdo jiný napsal za nás. Moderní IDE/RAD nabízejí silné komponenty (vizuální, databázové apod.) a pak opravdu stačí jen naklikat to na Form a pomocí pár řádků to provázat.
Koneckonců, nedávno tu byla zprávička (odkaz na YouTube) kde někdo vytvořil video přehrávač za půl minuty (myslím, že v Qt creatoru). Do Lazara zase minulý týden nějaký polský vývojář přidal vizuální komponentu, která zobrazuje Google mapy (v podstatě i bez kódu).
Chci tím jen říct, že to, co se cení, je přidaná hodnota (textový editor s funkcí, která tu dosud nebyla, videopřehrávač s podporou nového kodeku atp.) A vymyslet něco nového, to většinou tak snadné není a ani to obvykle není moc rychle hotovo.
PS: Tento příspěvek není v žádném případě kritika článku, je to spíš zamyšlení.
To že je taková komponenta v příkladu použitá jako texťák, přehrávač, ... je docela logické. To je to co umí a příklad má pár řádek.
Jako hlavní účel bych viděl v tom, že se kdokoliv nemusí zdržovat psaním tohohle pro svůj program, když se jinak jedná o spíše okrajovou komponentou. Když budu např. chtít napsat program pro katalogizaci hudby, tak jednoduchý přehrávač přijde vhod. Hlavním posláním nebude přehrávat a není tedy podstatné tam mít dokonalou implementaci nějakého kodeku. Naopak se to ten program snadno doučí, jak ji někdo jiný dopíše.
První editory titulků taky neměly integrované náhledové přehrávače a právě díky takovým komponentám je dnes umí a hned s nimi typicky lépe pracuje.
Zdravím,
podle mě každý (minimálně začínající) programátor dělá program jak by jemu samémo vyhovoval nejvíc. A to je pro mě na tom to dobré. Pokud děláš nový videopřehrávač a uděláš ho tak, aby tobě vyhovoval a někam ho dáš k dispozici tak je to pro mě přísos, protože někomu jinému možná také bude vyhovovat více než ostatní. Například: Rád mám v přehrávači možnost stahování textu písničky, nicméně také rád přehrávač pouze minimalisitcký... Babo raď nic takového nevedeme :D Přesně případ, že pokud bych si opravdu rychle (např. pomocí gtkmm) napsal vlastní a dal ho někam, tak bude přínosný lidem jako já :)
Suma sumárum mi přijde, že pro začínajícího programátora je právě možnost udělat něco takovéhleho přínosná - na ošahání toho nástroje (např. gtkmm) je to ideální :) Proč asi každý začíná kalkulačkou že? :)
Jsou zákazníci, kteří nemají problém zaplatit 20 lidí na 5 let (tedy několik milionů) kvůli vývoji jednoduchého informačního systému v assembleru a jsou zákazníci, kteří chtějí mít fungující informační systém za pár set tisíc, první verzi po 3 měsících a finální po 6. A nevadí jim, že to udělá banda 4 vývojářů v Javě, hlavně, že to stojí zlomek času a peněz.
Myslím, že tou přidanou hodnotou je to, že někdo ty komponenty vzal a zrealizoval z nich nějakou aplikaci, nebo novou komponentu.
Sranda ovšem může nastat (alespoň u komponent, které jsou tvořeny v C++) když potřebujete k dané komponentě dotvořit nějakou funkčnost. Tohle samo o sobě problém není až do chvíle, kdy zjistíte, že prvky, které pro implementaci dané funkčnosti potřebujete použít komponenta před vámi skrývá, nebo je naprogramována tak, že nová vlastnost bude fungovat jen někdy, nebo jen někde....
Tak na příklad programoval jsem vlastní widget (ve Fox Toolkitu), který byl založen na ComboBoxu a jeho úkolem bylo nabízet dostupné diskové jednotky a zařízeni; a pomocí menu přes pravé tlačítko myši je ovládat (připojit, odpojit, přidat mount point a zařízení, připojit obraz, vlastnosti, atd...). Problém je však v tom jak je ComboBox řešen. jedná se textové pole a tlačítko na malém panelu, který též provádí tzv delagci zpráv (tzn, přepošle událost jinému předem určenému prvku, např oknu aplikace). Takže ve výsledku to fungovalo tak, že pokud jsem chtěl zobrazit nabídku prvku, musel jsem se trefit do jeho uzoučkého okraje (do podkladového panelu) jinak se neukázala.
A co teď? Upravit to nelze, protože komponenty ComboBoxu jsou private, upravováním samotné třídy ComboBoxu by mohlo znamenat nekompatibilitu s originální knihovnou toolkitu (musel bych poskytovat vlastní verzi) a programovat znovu co už mám hotové? to se mi taky nezdálo jako košer řešení. Nakonec jsem to vyřešil tak, že jsem vytvořil speciální oddíl v menu aplikace a bylo.
No a to je ten nejjednodušší případ co mě potkal....
neviem totálne nič o programovaní, no zaujímalo by ma - dá sa tam nejako pridať možnosť spočítať znaky? výsledkom by bola tabuľka (napríklad ako nové okno), ktorá by sa vyvolala napríklad stlačením niektorého tlačidla alebo cez klávesovou skratkou.
Výsledok by mohol byť nejaký takýto:
18 000 znakov vrátane medzier
14 300 znakov bez medzier
10,0 normostrán
"neviem totálne nič o programovaní" ... to je docela škoda, ne? :-) Ale C++ jako první jazyk je nevhodný. Spíš se podívej po jazycích jako je Scala (http://www.scala-lang.org/) nebo Python (http://www.python.org/) - Python je skriptovací jazyk, ve kterém lze napsat opravdu vše (i když u větších aplikací už kód ztratí na přehlednosti a výkonnost půjde také do kýblu ... ale na malé věci (vč. grafických rozhraní) je dostatečně dobrý) ... a asi Ti ho tady doporučí nejvíce lidí, přestože já jejich nadšení nesdílím (ps: studuji informatiku a informatika mne také živí ... a rozhodně tím nemyslím v PHPčku nabastlené "webovky").
"dá sa tam nejako pridať možnosť spočítať znaky" ... samozřejmě. Znaky si musíš spočítat sám. Pochybuji, že C++kový std::string bude mít něco jako .countAllNonspaceChars . Jak výsledek zobrazíš, se dočteš tady v tom tutoriálu (nebo v kterémkoliv jiném). Ale napsat ten program tak, aby se Ti znaky spočetly "na pozadí" a uživatel byl informován o tom, v jaké fázi výpočtu právě je a aby ho mohl kdykoliv ukončit, to už v C++ bude netriviální challenge. (V pythonu jsem to nezkoušel (id est: teoreticky vím, že to jde a vím jak, ale nikdy jsem v něm nepsal nic, v čem bych to potřeboval), ve Scale nebo F# je to easy, C# nebo Java taky v pohodě).
Pokud se chceš učit programovat, směle do toho :) . Dnes může (doma) programovat každý, není na to potřeba drahé vybavení ani 15let vysoké školy ani tuna předražené literatury v knihovně. Ale mají-li Tvé programy za něco stát, čeká Tě dlouhá a namáhavá cesta, než pochopíš alespoň základní koncepty - podobně jako s hrou na hudební nástroj. A tvorba GUI je také záležitost, o které musíš vědět hodně, abys jej navrhl tak, aby se uživatelům dobře používalo (přečtení 10 stránkového tutoríálu o Gtk-- nestačí (!!!) ). A také - ruce pryč od C++. Ve srovnání s ručními zbraněmi je to Desert Eagle ráže .50AE. Půlpalcové dělo, se kterým budeš absolutní král pistolových střelnic, ale jakmile neumíš střílet, zlomí Ti ruku a praští do hlavy (http://www.youtube.com/watch?v=dFJjaj7pXsA). Začínající střelec si vezme do ruky malorážku (Python) a dosáhne s ní lepších výsledků. Nebo, chce-li střílet z obou ruk najednou, proč nezvolit policejní čezetu, do každé ruky jednu? (Scala nebo F#).
PS: jo a ... kromě počítačového jazyka je v programování důležitý i jeden člověkoidní - angličtina. Většinu věcí máš anglicky a komentáře do kódu, názvy proměnných a funkcí atp se také většinou píší anglicky (a to nejen v komerční sféře, ale také v opensource světě). Stejně tak je nejlepším zvykem vytvořit program v angličtině a těsně před vydáním finální verze ji přeložit do slovenštiny (postupně můžeš přidat polštinu, němčinu, ruštinu, čínštinu ... ;-) ). Angličtina na takové úrovni, abys byl schopen přečíst manuál, se dá zvládnout během pár měsíců.
áno, samozrejme je to zaujímavé. O programovaní neviem nič a rád sa k nemu niekedy dostanem a niečo si do hlavy natlačím. Článok o vytvorení textového editoru je fajn, pretože sám by som vlastný privítal. No a funkcia spočítať strany by sa hodila, aj keď to urobí akákoľvek webová služba.
Zaujímalo ma, či je nejaká možnosť (viem, teraz to bude znieť veľmi hlúpo) pridať 30 riadkov kódu, ktorá by vniesla túto funkciu do toho jednoduchého textového editoru :)
Můj názor je ten, že 30 řádků kódu by Ti na to v C++ nestačilo. Tento článek je spíš ukázkou práce s grafickou knihovnou a onen textový editor je takový "vedlejší produkt".
Chceš-li textový editor, který umí počítat slova ... používáš-li linux, tak zkus gedit nebo kate. Také to umí JEdit, který je multiplatformní a poběží i pod Windows. Co se týče normostran ... počet znaků vyděl číslovkou 1800. (Nomostrana = 30 řádků * 60 znaků vč. mezer). Je blbost psát vlastní textový editor jenom kvůli tomu - textových editorů je na světě hodně moc a určitě nějaký najdeš.
Máš-li několik textových dokumentů (hladký text, tedy *.txt; ne doc, docx, odt ...) a cheš-li spočítat slova, řeší se to tak, že si na to napíšeš krátký skript v pythonu nebo perlu (můžu Ti jeden napsat, jestli chceš - je to záležitost na půl hodiny i s googlením co že to má být ta normostrana).
Pokud opravdu chceš _vlastní_ textový editor s touto funkčností, tak by se dal udělat v Javě / C# poměrně rychle, ale připrav se na to, že kvůli němu budeš muset instalovat Java runtime environment (20MB instalační balík, 150MB na disku) nebo .Net framework (50MB instalační balík, 850MB-2GB na disku).
Psát to v C++ se Ti časově nevyplatí.
C++ sa na zaciatok nehodi nie pre to, ze je zlozite, ale preto, ze je az moc jednoduche a povoluje hnusne prasaciny (co uz asi dneska vacsina jazykov a kompilatorov). Ja som oldschool zastanca asm/C na zaciatok, prave aby sa clovek naucil vyvarovat sa chybam. Je az nehorazne kolko smetia sa nazbiera (najma vo velkych aplikaciach ktore vyraba viac ludi, hoci obcas clovek ma chut zvracat aj pri pohlade na oss).
Ona je otázka, co si představuješ pod pojmem "programování" a k čemu to hodláš využívat.
Pokud chceš skutečně zahájit kariéru někoho, kdo se programováním více-méně živí, tak postupuj podle rady od eMko. Pokud máš představu tu a tam nějakého skriptu, který ti ušetří práci ve zcela jiném oboru, třeba spočítá různé typy znaků v textu a napočítá z toho normostrany, nějak přeupraví data v databázi (něco jako "v souboru .csv dej kolem písmenkových znaků uvozovky, smaž je kolem číselných znaků a vymaž středníky na konci řádků") a podobně, tak bych doporučoval Perl. Oni sice teoretikové programování tvrdí (a nejsem s nimi v tom ve sporu), že nepodporuje dobré programátorské návyky, nicméně na příležitostný bastl tohle stejně nepotřebuješ.
Moje osobní "programovací anamnéza": různé verze BASICu, potom přechod na Perl (který je tomu BASICu asi pojetím nejbližší), něco málo Pythonu (v podstatě jen GUI pro vkládání dat) a Javy (vykašlal jsem se na ni v době, kdy se nedala rozumně, tj. z balíčků a aby to správně nastavilo všechny potřebné systémové proměnné, nainstalovat do linuxu), makrojazyk (La)TeXu (na dokumenty) a Metapostu (na grafiku). Ve svých 50+ jsem rezignoval na představu, že bych třeba programoval jádro OS.
OT: Já se vývojem (tedy nejen programováním) živím a to, co dělám jak v práci tak na diplomku, má hodně blízko k simulacím. Můj věk je téměř přesná polovina mezi 20-30, tedy "zlatý věk" informatika. A taky jsem již dávno rezignoval na to, že bych programoval jádro operačního systému. Bylo tomu již v prváku na vysoké, kdy nám přednášející popisoval princip funkce operačního systému na zdrojových kódech linuxu a BSDčka. Řekl jsem si, že tohle raději nechám jiným :-D .
Tady bych si dovolil nesouhlasit. Angličtina asi má smysl v situaci, kdy se ten program píše pro nějaké mezinárodní publikum. Je to ovšem naprosto hovadská hatmatilka (což je dáno podstatou toho jazyka, kde většina frekventovaných slov se skloňuje a časuje nepravidelně a v němž je ubohá slovní zásoba kompenzována "ustálenými frázemi"), v níž komentáře nemusejí vůbec dávat smysl. Stačí, když je tam použita nějaká "ustálená fráze", obvyklá třeba ve střední Austrálii mezi léty 1998 a 2000 a nemáte šanci zjistit význam textu (slovníky na slova v tomto nepomohou a použitelné slovníky na fráze neexistují). Pokud to není souvislý text, kde se dá domyslet kontext z okolí, tak se nechytáte a nechytne se zpravidla ani překladač od Googla.
Faktem je, že čeština má asi trojnásobnou slovní zásobu (na úrovni thesauru jazyka) a průměrný rodilý uživatel češtiny má proti průměrnému rodilému uživateli angličtiny (o nerodilých ani nemluvě) slovní zásobu pěti až desetinásobnou. Takže komentáře v češtině mohou být daleko jednoznačnější a srozumitelnější (nejsou.li, je to opravdu zaviněno komentujícím).
Ono je něco podobného i u chemického názvosloví: Z českého názvu anorganické sloučeniny podle relativně jednoduchého algoritmu, bez jakýchkoli dalších informací, dostanete vzoreček, u anglického názvu to není možné (musíte nezávisle na znalosti názvosloví např. vědět, které mocenství u kterého prvku je "hlavní", resp. bylo za ně považováno v době, kdy se to názvosloví dělalo, a bez této informace navíc ten vzoreček dohromady nejde dát).
"takže komentáře v češtině mohou být daleko jednoznačnější a srozumitelnější (nejsou.li, je to opravdu zaviněno komentujícím)."
-iste ano, ale v okamihu ak potrebujes s niecim poradit a hodis kus kodu do nejakeho fora, tak si odkazany na pomoc len cesky/slovensky hovoriacich ludi
Kolikrát se to člověku stane, že potřebuje poradit s kusem kódu v nějakém foru? Pravda, dnes se to děje v míře bohaté, ale to jsou obvykle trotlové, jejichž schopnost používat vlastní hlavu je silně limitovaná a kteří se programováním zabývají spíš nějakým omylem. Já si marně pokouším vybavit, kdy se něco podobného za uplynulých 20 let přihodilo mně, že bych spamoval nějaké forum kusem svého kódu, s kterým nedokážu pohnout. (WTF?) Když si pročítám na forech 99% příspěvků těch, co potřebují poradit s kusem programu, vždycky si pomyslím "ty běž, hochu, radši házet lopatou - programování je evidentně nad tvoje schopnosti."
Moje doporučení - vždycky, když má někdo nutkání zase někde spamovat se svým kusem programu, měl by se nad tím ještě několikrát zamyslet. Když zjistí, že je to marné a že se mu to děje nějak podezřele často, měl by se vykašlat na programování, protože je na to zkrátka moc hloupý.
Až budete programovat multiplatformně pro několik různých odlišných frameworků, budete velmi rád, že můžete z někým konzultovat svůj problém (nejlépe třeba s vývojáři toho IDE/RAD). Ne vždy je vše dokonale zdokumentováno. A pokud má daný jazyk dobrou syntaxi a smysluplně (anglicky) nazvete proměnné, tak ani není mnoho komentářů potřeba.
OK. Jistěže se na fórech vyskytují hlouposti, jen se mi nezdá ten poměr tak vysoký (ale možná máme odlišná kritéria :-) ). Každopádně se čas od času stane, že člověk narazí na věc, která je na hraně bug/feature a fórum je ideální místo, kde to probrat (a ne rovnou psát bugreport).
(^ Měl jsem především na mysli prostředí, kde z jednoho zdrojáku kompilujete pro více frameworků.)
Ja bych rekl, ze dulezite je, aby byl kod prehledny a jasny. Myslim, ze jazykový paskvil jaký se často používá neni moc dobry pro komercni pouziti(díval se někdo do těch skriptů ve formulářích na sčítání lidu? to je zážitek) ale pro domaci pouziti je idealni. Ne kazdy potrebuje diskutovat svoje programatorske dotazy s cinany a indy, takze vetsinou se zacinajici programatori bavi se svymi kamarady, kteri vetsinou byvaji ze stejne zeme.
Ja bych rekl, ze dulezite je, aby byl kod prehledny a jasny. Myslim, ze jazykový paskvil jaký se často používá neni moc dobry pro komercni pouziti(díval se někdo do těch skriptů ve formulářích na sčítání lidu? to je zážitek) ale pro domaci pouziti je idealni. Ne kazdy potrebuje diskutovat svoje programatorske dotazy s cinany a indy, takze vetsinou se zacinajici programatori bavi se svymi kamarady, kteri vetsinou byvaji ze stejne zeme.