Tahle soutěž je o tom vyřešit několik úloh v naprosto nedostatečném čase. Musí prostě co nejrychleji nabouchat nejlepší řešení co za pár minut vymyslí. Úkoly nejsou až tak složité, ale soutěžící nemají k dispozici google a průměrní studenti stejného věku odevzdávají třeba jenom jednu takovou úlohu jako semestrálku. Řekl bych, že velkou roli hraje i taktika, takže třeba první úloha mohla zabírat hodně času, takže si jí týmy nechali na později.
To zadani v clanku je mirne zjednodusene, rychle najit minimalni kostru v jednom danem okamziku neni nic az tak sloziteho, ale zadani vyzadovalo, aby v kazdem okamziku byla pouzita minimalni kostra a vystupem mel byt pocet zmen, ktere bude nutne provest. Navic, Ant Colony Optimization mi zni jako heuristicke reseni, zatimco v soutezi se vyzadovala optimalni reseni. Presne zadani, tak jak bylo na soutezi, je na http://icpc.baylor.edu/digital/data/icpc2012.pdf
Jojo, jinak myslím, že jsem před pár lety zaslechl o podobném úspěchu i něco ve zprávách, takže úplně mediálně nezajímavé to zase není, když se zadaří.
Příprava je i u nás (nebo aspoň byla za našich časů), cvičení ACM jsme na MFF UK měli každý týden (nebo každý druhý?), předpokládám, že se v tom pokračuje. Princip na cvičení je podobný jako ve finále, až na ty kontroly samozřejmě :-)
Jinak je to práce spíš individuální než týmová. Zatímco jeden implementuje, ostatní dva připravují řešení tak, aby jej mohli co nejrychleji naklepat, až na ně přijde řada. Až u těch složitějších, když nelze jinak, se pak provádí brainstorming.
Klukům v každém případě gratulace, 45. místo celosvětově je super!
Ja si myslim, ze to nie je take zle. V cine maju ozaj triedy specializovane na tieto sutaze, to si autor nevymyslel.
Sice takto vycviceni cinania vyhraju sutaz, ale v realnom zivote z toho maju prd, lebo vedia len vyhravat sutaz, na ktoru boli cviceni.(To nemam z vlastnej hlavy, to mi hovoril jeden cinan.)
Zajímavý článek o zajímavé události. Akorát kluci ještě netuší, že v komerční praxi 90% z nich bude řešit z 99% algoritmicky nezajímavé (a přesto často velmi netriviální) úlohy typu jak se neztratit ve velkém projektu, jak zvládnout nějakou novou a nedokumentovanou knihovnu, jak pracovat s kolegou, co programuje jiným stylem, jak opravit rozbitý build s chybou v kolegově kódu po commitu jiného kolegy, když oba jsou na dovolené, jak zvládnout dobře práci s gitem nebo svn, jak najít padačku, když z nějakého důvodu nejde program krokovat, jak řídit tým neschopných programátorů...
Myslím, že to ve skutečnosti není zas až takový rozdíl - kromě posledního bodu budou ve všech jmenovaných případech ve výhodě díky svým hard skills oproti těm, kteří "hrubou silou" tolik neoplývají. Matematická inteligence a intuice, schopnost rychle se zorientovat v hromadě bordelu, dostat pěkný nápad tehdy, když ostatním už nápady došly, to je přesně to, co z nich v praxi udělá elitu ve srovnání se všemi těmi "highly motivated team player".
Tak, tak, v mládí jsme se tahali po matematických a programovacích soutěžích a v praxi děláme něco naprosto něco jiného, většinou zázraky zadarmo na počkání. 90 % kódu je dneska naprasena stylem hlavně že to funguje, doslova se to plácá z ho***, nejpoužívanější výpočetní metoda je hrubá síla, optimalizace se dělá zakoupením nabušenějšího hardware. Prakticky už všude se používají skriptovací zmetky PHP, Java, Perl, Python ale to není zdaleka všechno, vynořují se nová pekla jako ORM. Za této situace je soutěž naprosto odtržená od reality, troufám si tvrdit, že 5 a méně osob ze soutěže bude dělat něco jiného než jsem popsal.
Já osobně za největší rozdíl považuji kvalitu zadání. To ostatní je důsledek pragmatismu a neshledávám v tom žádný větší problém. Ale ta zadání. Na těhle soutěžích jsou zadání velmi kvalitní a jeden by nabyl dojmu, že to tak bude i v praxi. A pak na vás mžourá pán s brejličkama a vlastně ani neví, jestli chce aby každá paleta měla vlastní záznam, nebo ne. On potřebuje, aby záznam měla, protože chce vidět její číslo. Ale zároveň se mu nechce vyplňovat 33 záznamů kdykoliv přijede kontejner. Po týdnech se doberete k tomu, že bude jeden záznam pro kontejner a budou tam dvě políčka - id palety od a id palety do. Takže zadá, že přijely palety 12345 až 12362. No a po pár dnech je tu pán zase, že mu nesedí report, protože zjistil, že ačkoliv si byl skálopevně jist, že čísla palet jsou rostoucí sekvence, tak ono občas nějaká zůstane v Amsterdamu, takže to vlastně číselná řada není. Tak mu doděláte detail, kam může palety vypsat, aniž by každá dělala skladovou transakci. A on za pár týdnů přijde s tím, že je to moc pracné a že to vlastně nepotřebujete. Tak to přepnete na nepovinné. A on je za pár týdnů zpátky, že to sice u nich nikdo nepotřebuje, ale customer services dělají nějaký report pro zákazníka, který to vidět občas chce (jen když je nějaký problém, který potřebují dohledat). A já tu pak stojím a pláču, že chci zákazníka, který ví co chce!
Souhlas. Často ani kvalitní objektový návrh/přístup nepomůže. Pak máte 2 možnosti (nepočítám odstoupení od zakázky). Refaktorovat a "při/přebastlit". Často se volí ono bastení (málo času, otrávenost z recidivy změn, nařízení z vrchu, není to tak hrozné, atd...) s tím, že doufáte, že je to konečná. Jak to dopadá, nemusím rozepisovat... :-)
Myslím si, že problém je v tvém očekávání. Zkus se vžít do role toho klienta. On nedokáže na začátku naspecifikovat do detailu všechny požadavky, málokdo umí do detailu promýšlet zatím neexistující věci. Neumí odhadnout, jak se mu s tím bude dělat, když si to jenom představuje. Pro něj je daleko snazší doupřesňovat nějaký prototyp, ladit si to pro své potřeby postupně. Že je to nepřijatelné pro externího smluvního vývojáře? Tomu samozřejmě rozumím, ale pak by měli jít spíš na řadu malých kontraktů, postupně. A nebo na hodinovku, pokud ti bude věřit.
Není to jednoduchý :-)
Přesně tak - řešitelné to je, opravdu to není jednoduché a škola vás na to nepřipraví. A jako vývojáři by mi to vlastně mělo vyhovovat, protože dostávám zaplaceno znovu a znovu. Jenže zaprvé je mi to líto, a zadruhé to časem omrzí.
Ale zatím jsme to vždy vyřešili, a to i ke spokojenosti zákazníka. Jen jak říkám - 80% času trávíme činnostmi, o jejichž existenci nám ve škole ani neřekli, natož aby nás na ně teoreticky připravili. UML, BPML apod. je sice fajn, ale tomu zákazníci nerozumí. To jsou nákupčí, prodejci a výrobní manažeři.
Ano, a co takhle mezičlánek.
Opravdu si neumím představit zákazníka co bude rozumět UML diagramu. Stejně si neumím představit laika jak se rozhodujete o konstrukci automobilu na základě jednotlivých jeho částí v nějakém autocadu... to jako by jste přišel s nákresem nebo s reálně vyrobenou převodovkou ukázal zákazníkovi jednotlivá kolečka a čekal jestli potvrdí, že to splňuje jeho zadání?
Následně přijdete s problémem, že ta převodovka co odsouhlasil ale nejde vrazit do rámu, který odsouhlasil... případně zákazník po předání zjistí, že řadící páku má umístěnou v kufru a to mu nevyhovuje :D :D
Není práce komunikace se zákazníkem spíše úloha analytika? Neopoužívá analytik UML ke komunikaci s programátory?
Business Analytik do každé firmy! :-) Na tom se shodneme. Ale která škola je má produkovat? ČVUT? MZLU? Kupodivu nejlépe jsou na tuto pozici připraveni lidé z jakéhosi oboru na VŠE, protože tam se provozní a výrobní management učí. Jenže ti viděli UML jen z rychlíku a "ajťáci" se přeci s ekonomy nebaví :-) Zkrátka najít schopného business analytika je u nás v ČR problém, prostě jich je málo. A navíc tu stále je mnoho firem, kde ten mezičlánek z různých příčin chybí a chybět bude.
myslim, ze to je problem i u nas, ze zakaznik sepise co chce a az nakonci
si to prekontroluje a takhle to jde cyklicky donekonecna.
lepsi by bylo, kdyby nekdo od zakaznika vstoupil do celeho vyvojoveho
procesu a upravy/zmeny by se daly delat rychleji/operativneji bez nasledneho
prekopavani.
Naše strategie je dělat systémy modulární a konfigurovatelné. Takže obvykle nepřeprogramováváme, jen schováváme sloupečky a volby v menu. Někdy je ale potřeba učinit zásadní rozhodnutí, která mají vliv buď na výkon systému, nebo na dostupná data. A to je kámen úrazu a já neznám žádnou účinnou metodu komunikace. Ono obecně zákazníci chtějí mít maximum dostupných dat, ale bez nutnosti data pořizovat. A nemají odvahu ke kompromisu a musí se jim pomáhat. Jenže to aby měl člověk vystudovanou psychologii a rétoriku, nikoliv IT.
Aktuální perlička je sledování zásobníků drobného materiálu pro výrobu. Prostě se tam položí paleta a lidé z výroby si berou materiál jak potřebují. Zákazník chce vidět v systému kolik materiálu na paletě zbývá. Jenže z té palety si bere každý tolik co potřebuje, syslí si to na linkách a samozřejmě se materiál průběžně spotřebovává. Jenže jak zjistit, kolik tam na té paletě zbývá, když nikdo nikdy nikam nehlásí, kolik si bere? A sjet to podle plánované spotřeby říká, že je na paletě tolik, že se to tam ani nevejde (protože ono to ve skutečnosti je na linkách a ve skříních mistrů z výroby). Takže přesvědčit zákazníka, že buď někdo musí hlásit, kolik materiálu se odebralo, nebo prostě akceptovat, že to systém neví. S tímhle mi refactoring ani demo verze nepomůžou. Teď se na ně chystá kolega, co má zkušenosti s kanbanovými systémy a plánujeme jim navrhnout zásadní změnu procesu (proč je na linkách neřízené množství a proč si mistři musí zamykat "pojistnou zásobu" do skříněk?) Zákazník nakonec bude spokojen, já se jen snažím říci, že tohle mě ve škole neučili. A to jsem studoval softwareové inženýrství :-)
Zadávání je zoufalství skoro vždy. Před několika lety potřebovala firma, ve které jsem pracoval, informační systém. Společně ještě s jedním kolegou jsme měli být "styčnými důstojníky" s vybranou firmou, která systém vytvoří. Oba jsme měli základní představu, kterou jsme chtěli upřesnit na základě detailní analýzy aktuálního stavu a potřeb ze strany dané firmy. Dalo by se říct, že to byla oboustranně ideální dohoda - pár lidí od nich bylo tři dny v týdnu u nás ve firmě, sledovali kompletní provoz firmy, vyptávali se lidí (všichni byli instruováni a kupodivu spolupracovali). Kolega a já jsme průběžně kontrolovali zjištěné, dovysvětlovali, upřesňovali a po dvou měsících vznikla velmi dobrá analýza toho, co skutečně potřebujeme.
Ve chvíli, kdy to dostal na stůl šéf, tak se strhl neuvěřitelný a nepochopitelný brajgl. Šéf se vytočil, za dva měsíce se akorát dozvěděl, co ve firmě děláme, a že to už dávno ví. Nenechal si nikým vysvětlit, že tohle bylo cílem první analýzy, abychom nedostali nepoužitelný systém. Nakonec tu firmu doslova vyrazil, zaplatil odstupné a projekt zadal někomu úplně jinému, který slíbil dodat první verzi systému do měsíce.
A dopadlo to pochopitelně tak, jak se dalo čekat - přestože dostali navíc celou analýzu, dodali nepopsatelnou hrůzu, která nefungovala a ignorovala téměř vše, co bylo v analýze (ergo neřešila naše potřeby). Více než rok se ji snažili spatlat do provozuschopného stavu a nakonec se projekt ukončil. Pochopitelně to vyšlo mnohem dráž, než kdyby to dodělala první firma. No, a nemluvě o tom, že kolega a já jsme byli označeni za ty, kteří za to mohou.
Vas problem dobre znam a myslim si ze prvni a nejvetsi chyba je, ze od zakaznika vubec neco ocekavate, krome uhrady dohodnute maximalni ceny... K nasledujicimu jsem dosel po letech dodavek IT/Automatizace do prumyslu:
1. Pokud jsem placen za navrh a dodavku nejakeho systemu jako celku, reseni vzdy navrhuji "pro sebe", tak jak by melo logicky a racionalne prakticky vypadat, aby se mi s danym systemem dobre pracovalo.
2. Nejake zadani od zakaznika je mi ukradene, vzdy musim JA SAM pochopit, co vsechno to ma delat, co se tim resi, k cemu to slouzi, jak to pracovnici v praxi pouzivaji, jake vystupy chteji atd. Podle toho si navrhnu sve reseni a pri znalosti problemu extrapoluji budouci mozny rozvoj a budouci pozadavky.
3. Datovy i aplikacni model od pocatku predpoklada maximalni vetveni a variabilitu, tak aby do nej s minimem prace a zmen v budoucnu zapadl i pozadavek na to, ze kazdy sroubek muze mit sadu individualnich parametru.
To ze vystupem vyse uvedenho je implementace cca 20% rozsahu navrzene funkcionality, jen te ktera je prakticky, aktualne potrebna a zaplacena, nic nemeni na nutnosti takto uvazovat, protoze jinak bych se z naslednych pozadavku na zmeny, upravy a rozsireni zblaznil. Takto jen pred uzivatelem schovavam nebo zpristupnuji datove polozky v GUI, pripadne dodelavam drobnou funkcionalitu a pokud me opravdu svymi pozadavky na zmeny uz nasere, tak mu sdelim ze toto je uz mimo ramec puvodniho objednaneho navrhu, je nutny zasadni redesign, nauctuji 50% ceny systemu... a pak pridam tech par polozek do sveho megalomansky a paranoidne navrzeneho modelu...
Je možné, že to je odtržené od reality, ale škola nemá učit studenty co mají dělat v praxi (na to stačí školení). Škola má učit lidi myslet a dát jim teoretické základy. Podobné soutěže mají smysl v tom, že to lidi baví. Asi těžko se někdo přihlásí do soutěže refaktorizace starého kódu nebo oprav testů a dokumentace kódu (proč by to dělali na soutěži, když to můžou dělat za peníze v nějaké firmě). Bohužel je dneska trend dělat z VŠ školící střediska, protože "do školy chodíme, abychom měli vyšší plat" a ne abychom se něco naučili.
Reseni uloh se mohla odevzdavat v C, C++ nebo Jave, dostupne editory zminil Petr, navic byla k dispozici offline kopie dokumentace STL a Java API. Jinak, krome prohlizece slouziciho k zobrazeni dokumentace a pouziti odevzdavaciho systemu, na pocitacich nic moc nebylo. Vice informaci: http://icpc.baylor.edu/ICPCWiki/Wiki.jsp?page=Programming%20Environment
Tak to je pokrok. (Bez ironie.)
Kdysi (cca rok 2000) jsem se ucastnil lokalniho kola v Praze a bylo to jedno z mych prvnich setkani s Linuxem. Editovat zdrojaky jsem dokazal pouze v Midnight Commanderu, kde me hrozne iritoval dvojity Escape. Programovaci jazyky byly C a Pascal.