Programování

O nás, o lidech, o okolním světě. Všechna témata, která se netýkají her, patří do této sekce. Zapomeňme chvíli na RPG a pojďme předstírat, že jsme normální lidé.

Moderátor: Faskal

Uživatelský avatar
York
Příspěvky: 9655
Registrován: 24. 2. 2012, 17:31

Programování

Příspěvek od York » 28. 11. 2017, 15:13

Začnu asi úplně nejdůležitější a hodně kontraintuitivní věcí, na kterou narazíte, až když se pustíte do většího projektu:

:arrow? Čím rychleji píšete, tím dýl vám to ve výsledku zabere.

Důvod je, že se dá psát buď rychle, nebo udržitelně. Ani sebegeniálnější programátor z principu nemůže zvládnout obojí, prostě proto, že v průběhu života projektu se vždycky mění zadání. A praxe ukazuje, že je marné snažit se hned ze začátku navrhnout aplikaci tak, aby rovnou počítala se všemi možnými požadavky na rozvoj, protože stejně nakonec někdo přijde s něčím, s čím jste nepočítali, a budete to muset celé předělávat.

Další věc je, že nikdo nepíše tak dobrý kód, aby ho s odstupem času nedokázal vylepšit. To zase vyplývá z toho, že čím dýl se lidský mozek zabývá nějakým problémem, tím víc dokáže pracovat v podvědomém módu a tím jednodušší a efektivnější je jakékoliv přemýšlení nad problémem.

První háček je, že tohle typicky vědí programátoři a s trochou štěstí jejich team leadeři, ale málokdy si to uvědomují manageři. Vysvětlovat jim, že potřebujete na projektu pracovat o dva měsíce dýl, abyste si za nějaký čas ušetřili dva roky práce, je dost obtížné.

Druhý háček je, že velké projekty píše víc lidí a ti třeba mohou mít problém s tím, že jim budete refactorovat kód (zvlášť když jsou to senior progamátoři a vy junior, že). I tak je ale dobré naučit se průběžně refactorovat alespoň svůj kód.


Refactoring

Refactoring je úprava kódu, která nezmění jeho funkčnost. Obvykle se dělá kvůli tomu, aby byl kód přehlednější, čitelnější, snáze rozšiřitelný.

Může to být drobná změna, jako třeba přejmenování třídy nebo proměnné, nebo i zásadní změna, jako třeba změna architektury celé aplikace. Refactoring vždycky stojí nějaký čas navíc a v drtivé většině případů ušetří mnohem víc času někdy později (ať už vám nebo někomu jinému).

edit: Tohle vypadá jako dobrá stránka k tématu. Ještě si ji časem projdu a možná sem pár příkladů vytáhnu.
Naposledy upravil(a) York dne 30. 11. 2017, 12:21, celkem upraveno 1 x.

Uživatelský avatar
ShadoWWW
Příspěvky: 2782
Registrován: 21. 8. 2007, 10:16
Bydliště: Kostka
Kontaktovat uživatele:

Re: Programování

Příspěvek od ShadoWWW » 28. 11. 2017, 16:26

Velkou otázkou je programovací jazyk a účel projektu. Vím, o čem mluvím. Nejdůležitější styčné body nedefinuje programátor, ale projekťák (ve spolupráci s programátory).
:think:

Uživatelský avatar
Vallun
Příspěvky: 24480
Registrován: 14. 5. 2008, 09:40
Bydliště: Velká Praha
Kontaktovat uživatele:

Re: Programování

Příspěvek od Vallun » 28. 11. 2017, 20:25

:arrow? Čím rychleji píšete, tím dýl vám to ve výsledku zabere.
Nechci plevelit, ale tohle dost přesně odpovídá jedné hlášce/poučce z mého oboru: "jsou dobří elgislativci a jsou rychlí legislativci, průniku mezi nimi není".
Pokud chce někdo slyšet jen "ano" nebo "ne", tak jej nezajímá odpověď.
Eru je jediný Bůh a Tolkien je jeho prorok.
Non sub hominem,sed sub ius.
Pravda a láska zvítězí nad lží a nenávistí.
Nejsem odborník ve smyslu § 5 odst. 1 O.Z.

Uživatelský avatar
Vallun
Příspěvky: 24480
Registrován: 14. 5. 2008, 09:40
Bydliště: Velká Praha
Kontaktovat uživatele:

Re: Programování

Příspěvek od Vallun » 30. 11. 2017, 11:14

Vypadá to, že MZe bude poptávat IT odborníka na provoz systému spisove služby...podminky jsou zajímavé...podrobnosti zájemcům zjistím:)
Pokud chce někdo slyšet jen "ano" nebo "ne", tak jej nezajímá odpověď.
Eru je jediný Bůh a Tolkien je jeho prorok.
Non sub hominem,sed sub ius.
Pravda a láska zvítězí nad lží a nenávistí.
Nejsem odborník ve smyslu § 5 odst. 1 O.Z.

Uživatelský avatar
York
Příspěvky: 9655
Registrován: 24. 2. 2012, 17:31

Re: Programování

Příspěvek od York » 30. 11. 2017, 12:07

Vallune, tohle téma není myšleno jako inzerce na IT pozice, ale jako praktické rady začínajícím programátorům. Je moje chyba, že jsem to sem nenapsal, ale rád bych se toho držel.

Časem tady rozvedu pár příkladů refactoringu a možná něco napíšu i k optimalizacím kódu, error reportingu, error handlingu, odolnosti proti hacknutí a tak. Určitě se sem taky hodí praktické problémy ve stylu "Mám tohle zadání, řeším tenhle problém. Jak na to?"

Uživatelský avatar
Invictus
Nerozhodný volič
Příspěvky: 6736
Registrován: 21. 11. 2005, 02:33
Bydliště: Brno
Kontaktovat uživatele:

Re: Programování

Příspěvek od Invictus » 30. 11. 2017, 12:10

Doporučil bych to téma mírně přejmenovat a dopsat nějaký statement na začátek, plus poprosit moderátory, aby smazali poslední příspěvky.
Iron Within
Iron Without

Uživatelský avatar
York
Příspěvky: 9655
Registrován: 24. 2. 2012, 17:31

Re: Programování

Příspěvek od York » 30. 11. 2017, 12:25

Invictus: Zas to nemusíme hrotit. Je to diskuse, ne webovej tutoriál (těch se dá vygooglit spousta).

Uživatelský avatar
York
Příspěvky: 9655
Registrován: 24. 2. 2012, 17:31

Re: Programování

Příspěvek od York » 30. 11. 2017, 12:53

Refactoring - funkce a cykly

Následující příklad je hrubej a neúplnej pokus o algoritmizaci běžného pracovního dne. Asi si všimnete, že třeba u snídaně jsem šel do detailů a u večeře ne - což je ale věc, která se v průběhu programování snadno může stát. Buď jsem ještě nezačal na detailech večeře pracovat, nebo jsem třeba ještě nedostal podrobné zadání.

Kód: Vybrat vše

function workingDay()
{
  wakeUp();
  cleanTeeth();
  makeBreakfast();
  eatBread();
  drinkTea();
  goToWork();
  singIn();
  while (!endOfWork)
  {
    doSomeWork();
    while(!endOfMeeting)
    {
       answerBoss();
       dozeOff();
    }
  }
  signOut();
  travelHome();
  haveDinner();
  sleep();
}
Refactoring funkcí je v zásadě o dvou věcech: Spojit to, co k sobě logicky patří a nějak to rozumně pojmenovat. Cílem není jenom zkrátit funkci, ale hlavně zpřehlednit logiku. Celou funkci workingDay() můžu například refactorovat takhle:

Kód: Vybrat vše

function workingDay()
{
  wakeUp();
  surviveDay();
  sleep();
}
Tahle funkce je nejen kratší, ale zároveň je jednodušší na pochopení a na ověření, že je fakt dobře (pokud jsou správně ty funkce, ze kterých se skládá).

Praktické cvičení: Co byste udělali s funkcí surviveDay()?

Uživatelský avatar
Eleshar_Vermillion
černá eminence
Příspěvky: 13703
Registrován: 18. 6. 2003, 20:31
Bydliště: Praha

Re: Programování

Příspěvek od Eleshar_Vermillion » 30. 11. 2017, 13:11

Nechtěl bys místo těchle věcí spíš sesumírovat, odkud má člověk z vnějšku vůbec začít?:) Míním v návaznosti na můj nenávistný příspěvek odvedle.
\\[T]// PRAISE THE SUN! \\[T]//

Uživatelský avatar
York
Příspěvky: 9655
Registrován: 24. 2. 2012, 17:31

Re: Programování

Příspěvek od York » 30. 11. 2017, 13:45

Eleshar_Vermillion píše:
30. 11. 2017, 13:11
Nechtěl bys místo těchle věcí spíš sesumírovat, odkud má člověk z vnějšku vůbec začít?:)
O přesně těhle věcech to celé je. Každý trochu větší program řeší problém, který žádný člověk nedokáže zpracovat najednou. Každý má trochu jinde limit, v čem se ještě vyzná a v čem už ne, ale všichni ho někde mají. Trik je v tom, že drtivou většinu programátorských problémů jde rozložit na tak malé celky, že se v tom pak vyzná prakticky každý.

Důvod, proč to sem píšu, není jen to, abyste uměli psát čitelnej a udržitelnej kód. Důvod je, že když se naučíte psát čitelnej a udržitelnej kód (respektive zpřehledňovat a zčitelňovat svůj kód), tak se tím zmohonásobí vaše schopnost řešit složité programátorské úlohy.

Vtip není v tom, vyznat se ve stořádkových funkcích, pětkrát vnořených cyklech a podmínkách na 20 řádků. Vtip je v tom, převést si tyhle věci na funkce o pár řádcích sestávající z dobře pojmenovaných příkazů, které čteš skoro jako živý jazyk: Vstaň, jdi do práce, jdi spát.

Úplně stejný trik funguje i na vytváření datových struktur a potažmo objektů, které spojují data a funkcionalitu, nebo na rozdělení aplikace do modulů.

Eleshar_Vermillion píše:
30. 11. 2017, 13:11
Míním v návaznosti na můj nenávistný příspěvek odvedle.
Jestli se ptáš na to, jak sehnat job s příjmem v top 2%, tak s tím ti fakt neporadím.

Uživatelský avatar
Eleshar_Vermillion
černá eminence
Příspěvky: 13703
Registrován: 18. 6. 2003, 20:31
Bydliště: Praha

Re: Programování

Příspěvek od Eleshar_Vermillion » 30. 11. 2017, 14:20

$D
Nenávistným příspěvkem od vedle jsem měl na mysli toto:
https://rpgforum.cz/forum/viewtopic.php ... 60#p518396
\\[T]// PRAISE THE SUN! \\[T]//

Uživatelský avatar
Fritzs
Příspěvky: 5147
Registrován: 9. 5. 2005, 20:47
Bydliště: Brno

Re: Programování

Příspěvek od Fritzs » 30. 11. 2017, 14:25

York píše:
30. 11. 2017, 13:45
Jestli se ptáš na to, jak sehnat job s příjmem v top 2%, tak s tím ti fakt neporadím.
Co třeba sprasit primitivní pornografickou* hru v gamemakeru či podobním hnoji a kasírovat peňa přes Patreon? $P

*čím méně to má společného s reálnou lidskou sexualitou tím víc peněz
-I don't suffer from insanity. I enjoy every minute of it.

-If violence isn't solving your problems then you aren't using it enough.

-Jestliže je hlad nejlepší kuchař, pak je smrt nejlepší lékař!

Uživatelský avatar
York
Příspěvky: 9655
Registrován: 24. 2. 2012, 17:31

Re: Programování

Příspěvek od York » 30. 11. 2017, 14:41

Ok, repostnu to sem:
Eleshar_Vermillion píše:
18. 11. 2017, 15:45
Co hledám, je nějaký rozumný návod typu:
Chcete psát skripty v [váš oblíbený jazyk] pro Windows? Nainstalujte si v tomto pořadí:
1) Prostředí A pro vývoj
2) Prostředí B pro package manager C
3) Package manager C
4) Prostředí D pro kompilátor E prostřednictvím manageru C
5) Package manager F
6) Kompilátor E přes package manager E
7) Plugin G do kompilátoru D, který vám z toho nakonec udělá .exe soubor.
Problém je, že na tohle jednoduchá odpověď neexistuje.

Dám příklad pro javascript: "Skripty pro Windows" mohou znamenat různé věci. Když si vystačíš s konzolí a prací se soubory, případně přes nějaký protokol (http, web sockety), tak ti na to stačí node.js. Když bys k tomu ale chtěl nějaké GUI, tak s nodem nevystačíš. Nějak to tuším řeší electron (v tom je udělané například celé VS code), případně to můžeš udělat jako webovou aplikaci.

Jestli budeš potřebovat package manager taky závisí na tom, co má být výstupem. A když ho potřebovat budeš, tak budeš mít několik možností na výběr. Dál se budeš muset rozhodnou mezi verzí javascriptu (ES5, ES6...), jestli budeš používat nějakej transpiler (třeba typescript) a hromadou dalších věcí.

S něčím z toho ti můžu poradit, ale z tisíců možných kombinací mám vyzkoušených jen pár, takže nakonec stejně budeš muset googlit a experimentovat. S pythonem ti nepodadím vůbec, v tom jsem nic nepsal. Každopádně je ale potřeba bavit se o konkrétním problému a konkrétních požadavcích, obecný návod na cokoliv ti nikdo nedá. Je to opruz, no.

Uživatelský avatar
Resurrection
Příspěvky: 4636
Registrován: 26. 9. 2006, 10:34

Re: Programování

Příspěvek od Resurrection » 1. 12. 2017, 08:40

Jak jsem zacinal ja je toto:

1) Narazil jsem na problem, ktery jsem mel velkou potrebu resit a nenasel jsem jine reseni. Nejdulezitejsi je ta velka potreba, protoze to generuje motivaci. Absence dostupnych reseni je to same - zvysuje motivaci.

2) Kdyz vim co chci vyresit a mam fakt zajem to vyresit, vyberu si nejaky programovaci jazyk. Je celkem jedno, jaky, pokud je high-level. Nejdulezitejsi faktor tady je jeho rozsirenost. Takze v podstate JavaScript, Python, Java, C++, C# (https://www.tiobe.com/tiobe-index/).

3) V danem jazyce si zacnu studovat veci a pouze veci, ktere smeruji k reseni meho problemu. Hledam odpovedi na otazky zacinajici "Jak udelam X?"

Behem relativne kratke doby (vysoce individualni) se stanou nalsedujici veci:

- Zacnete chapat, co obnasi resit problemy programaticky.

- Zacnete chapat vybrany jazyk.

- Pochopite do hloubky zvoleny problem.

- Zjistite, ze vsechny programovaci jazyky delaji +- to same a hlavni odlisnost je syntaxe => dokazete se pomerne snadno naucit jakykoliv dalsi programovaci jazyk.


Zadna univerzalni cesta neexistuje. Programovani je prace a nekdy dost tezka. Jde sice o automatizaci, ale jeji dosazeni automaticke ani snadne neni.

V kazdem pripade zdaleka nejdulezitejsi je mit dostatecne velkou motivaci vyresit problem. Chtit se naucit programovat nefunguje. Chtit vyresit trackovani prace nebo dochazky nebo financi ano.
Secrets are power.

Uživatelský avatar
Eleshar_Vermillion
černá eminence
Příspěvky: 13703
Registrován: 18. 6. 2003, 20:31
Bydliště: Praha

Re: Programování

Příspěvek od Eleshar_Vermillion » 1. 12. 2017, 11:19

Přesně takhle funguju taky, jen tam byla ještě občas motivace z hecu "budu umět převést svoje skripty z VBA do Pythonu/C#, aby nebyly vázané na těžkou prdel Excelu?" a zatím jsem vesměs shledal, že víceméně ano, ale vždycky pak ztroskotám na tom cyklu výše, tj. neudělám z toho stand-alone .exe, které by mohla použít kolegyně od vedle, co umí akorát klikat myší, ale furt to závisí na tom, že mám nainstalovaný nějaký vývojový bordel ve svém počítači.
\\[T]// PRAISE THE SUN! \\[T]//

Odpovědět

Zpět na „Rozličný pokec“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host