Programátor a další programující druhy

Nedávno jsem se dostal do debaty o rozdílech mezi počítačníky motajícími se kolem vývoje programů. Protože se mi téma líbilo, dovolím si sepsat můj pohled na dělení, jak jej vidím já.

S oblibou tvrdím, že programování je, od určité úrovně, jen aplikovaná matematika. Svou teorii opírám o vědomosti, které jsem získal při (neukončeném) studiu učitelství matematiky a fyziky na PF UJEP v Ústí nad Labem.

Reklama

Matematika pro programátora

Oborů matematiky potřebných programátorů je hodně malá podmnožina ze všech existujících oborů matematiky. Momentálně mě napadají pouze:

  • Relační algebra se týká především těch programátorů, kteří pracují s databázemi (!Pojem relační databáze nemá nic společného s relační algebrou!) a využívají se primitivní operace kartézský součin, množinové spojení, množinový rozdíl, selekce, projekce a přejmenování.
  • (Matematická) logika která se využívá při definici řídících struktur programů (cykly, podmínky, větvení). Pokud ji programátor dostatečně nechápe, snadno udělá chybu třeba při negaci podmínky.
  • Numerická matematika která pomáhá při řešení úloh, jež nelze exaktně zapsat do programovacího jazyka. Numerické metody a algoritmy se používají při zpracování matematických modelů popsaných algebraickými a diferenciálními rovnicemi.
  • Teorie grafů která pomáhá modelovat struktury. Typickým místem pro aplikaci teorie grafů je hledání nejkratší/nejrychlejší cesty v mapách (ano říká se tomu navigace).

Potřebných oborů samozřejmě umím najít víc. Studium, jímž jsem prošel mělo jiné základní obory a třeba v numerické matematice jsem částečný samouk, ale protože nosnou částí mé práce jsou databáze, rozumím podstatně více relační algebře a logice.

Odrůdy programátorů (dle mě)

Osobně rozlišuji 3 skupiny lidí, kteří se živí programováním. Hobíky a čistokrevné webové programátory nepočítám, ti jsou spokojeni s výsledkem, který nějak funguje, ale problematice často moc nerozumí.

Kóder

Jinými slovy „cvičená opice“. Zná dokonale své IDE, zná velmi dobře schopnosti jazyka a platformy, jež používá, umí používat logiku, ale problém s náročnější algoritmizací nevymyslí. Často není dost fundovaný na vymyšlení třeba efektivního návrhu databáze, protože plně nechápe relační algebru. Pokud ale dostane dobré podklady s dobře definovanými algoritmy, tak napíše velmi efektivní kód.

Nezavrhovat, při trochu větším počtu vývojářů je velmi potřebný na „hrubou práci“.

Analytik

Trochu protějšek ke kóderovi, nemusí umět detaily programovacího jazyka, ani platformy, ale když zná možnosti, dovede analýzu a rozpracování problému dotáhnout na mnohem vyšší úroveň. Nedělá mu problém relační algebra, numerické metody a výborně rozumí logice. Ve firmě je podstatně hůře nahraditelný, než kóder, protože pro kódery připravuje co budou psát. Postupy/algoritmy a datové struktury navržené matematiku znajícím analytikem fungují téměř na první pokus a velmi efektivně.

Komplexní programátor

Kombinace obojího, rozumí modelování/analýze, umí dobře algoritmizaci, není mu cizí optimalizace datového modelu, ale dobře zná i jazyk a platformu, které používá.

V menší firmě, nebo jako „vývojář freelancer“ má šanci jen zástupce této skupiny.

Konec

Dál to pitvat nebudu, přestože by se dalo.

Koncem 80. let 20. století jsem viděl třídění na měkké (snaží se programy přizpůsobit uživateli/životu) a tvrdé (snaží se život naohýbat podle svých programů) programátory, což bylo vtipné, nicméně hloupé dělení.

Podle toho co jsem napsal bych se zařadil na úroveň komplexního programátor (light edition) :-). [sebechvála smrdí]