WRITING

Selected writing.

ENGINEERING · BUSINESS·Jun 2026·7 min read

The Age of Cheap Knowledge

Why software engineering is reorganizing around a different kind of scarcity.

Read article
ENGINEERING · BUSINESS
May 2026 · 5 min read

When “Faster” Doesn't Mean Sooner

A useful question: when we say “AI makes us faster,” do we mean typing or do we mean shipping?

ARCHIVE

From the archive.

Posts from an earlier chapter of this blog, kept here for the record. They are written in Czech, and much of the content is quite outdated by now.

Sep 2018 · 16 min read

Drop Detector v .NETu

Aplikace pro tribologickou laboratoř postavená v .NETu: automatická analýza smáčivosti povrchu — detekce kapek a počítání úhlů z fotek a videí.

May 2018 · 6 min read

VSTS a desktopové aplikace

„Vždyť VSTS je jen pro weby a musí se nasazovat do Azure!“ Nemusí — jak jde přes VSTS rozjet build a distribuce klasické desktopové aplikace.

Apr 2017 · 9 min read

Potřebujeme projektový management?

Kdo převezme zodpovědnost, když to či ono nikdo nezařídil, nedomluvil, nepohlídal? Zamyšlení nad tím, k čemu je (a není) projekťák.

Feb 2017 · 13 min read

Ajťák před projektem X

Člověk od počítačů typicky sedne a začne bouchat kód — a nezřídka vyrobí něco, co nikdo nechce. Jak přemýšlet o novém projektu dřív, než padne první řádek kódu.

Feb 2017 · 4 min read

Funguje nám SCRUM?

TOP 10 poznámek z našeho prostředí poté, co jsme se dostali do rozumně fungujícího nového procesu vývoje — a leckde si přitom nabili hubu.

Feb 2017 · 5 min read

Ovladač zasedačky

Třetí a poslední díl o chytré zasedačce: jak spolu mluví webová stránka a zasedačka — a jak mezi nimi tečou data oběma směry.

Feb 2017 · 5 min read

Mozek zasedačky

Druhý díl o chytré zasedačce: jak funguje a jak přemýšlet o softwaru, který řídí počítač se všemi součástkami — rádiem, infradiodou a čidly.

Jan 2017 · 4 min read

Zahodíme ovladače?

První díl o chytré zasedačce: věnováno všem, kteří se ptají, co vyvádím se všemi těmi destičkami a proč naše zasedačka potřebuje být chytřejší.

Jan 2017 · 7 min read

Programátorem chvíli po třicítce?

Přidávám svůj příběh — (nejen) programátorem chvíli po třicítce. Od Didaktiku M přes průmyslovku, FIT a doktorát až k vedení týmů a projektů.

Jiří Koutný {{ navTagline }}
{{ t.hero.kicker }}

{{ t.hero.titleA }} {{ t.hero.titleB }}

{{ t.hero.lead }}

{{ labels.posts }}

{{ t.posts.title }}

{{ t.posts.all }} →
{{ post.category }}
{{ post.date }} · {{ post.readLabel }}

{{ post.title }}

{{ post.excerpt }}

{{ labels.contact }}

{{ t.contact.title }}

{{ t.contact.lead }}

{{ d.label }}
{{ d.value }}
{{ t.about.label }}

{{ t.about.title }}

{{ t.about.lead }}

{{ t.about.achievementsLabel }}

{{ ac.stat }}
{{ ac.label }}
{{ ac.text }}
{{ aboutBaseLabel }}
{{ aboutBaseValue }}

{{ para }}

{{ t.about.expLabel }}

{{ job.tenure }}
{{ job.place }}

{{ job.org }}

{{ r.title }} {{ r.period }}

{{ pt }}

{{ t.about.teachingLabel }}

{{ job.tenure }}
{{ job.place }}

{{ job.org }}

{{ r.title }} {{ r.period }}

{{ pt }}

{{ t.about.earlierLabel }}

{{ t.about.earlierText }}

{{ t.about.eduLabel }}

{{ ed.period }}
{{ ed.school }}
{{ ed.degree }}

{{ ed.note }}

{{ t.about.staysLabel }}

{{ t.about.staysIntro }}

{{ grp.year }}
{{ s.period }}
{{ s.inst }} · {{ s.place }}
{{ s.what }}
{{ t.aviation.label }}

{{ t.aviation.title }}

{{ t.aviation.lead }}

{{ s.label }}
{{ s.value }}
{{ a.title }}
{{ a.body }}
{{ t.aviation.project.tag }}

{{ t.aviation.project.name }}

{{ t.aviation.project.tagline }}

{{ t.aviation.project.body }}

{{ t.aviation.project.cta }} ↗
{{ p }}
{{ t.aviation.flyWithMe.kicker }}

{{ t.aviation.flyWithMe.title }}

{{ t.aviation.flyWithMe.body }}

{{ t.aviation.flyWithMe.cta }} →
{{ t.grammars.kicker }}

{{ t.grammars.title }}

{{ t.grammars.lead }}

{{ t.grammars.thesisLinkLabel }} ↗
B a b d e S A D c
A derivation tree. Its leaves, left to right, spell the generated word. Reading the highlighted root-to-leaf path top-down gives word(p) = S·A·D·c. These grammars require such a path — or a cut (a frontier of nodes, below) — to belong to a separate control language, while every production stays context-free.
{{ t.grammars.problemLabel }}

{{ para }}

{{ t.grammars.bgLabel }}

{{ t.grammars.bgIntro }}

{{ m.name }}

{{ m.text }}

{{ t.grammars.limitsLabel }}

{{ lim }}

{{ t.grammars.contribLabel }}

{{ t.grammars.contribIntro }}

Cuts
A frontier of nodes; their labels spell word(c).
Paths
One root-to-leaf path; its labels spell word(p).
Multiple paths
Several paths, each spelling a controlled word.
{{ c.n }}

{{ c.name }}

{{ c.what }}

{{ t.grammars.resultWord }}

{{ c.result }}

{{ t.grammars.acrossLabel }}

{{ a }}

{{ t.grammars.receptionLabel }}

“{{ r.quote }}”

{{ r.who }} · {{ r.role }}
{{ t.grammars.defenseLabel }}

{{ t.grammars.defenseText }}

{{ t.grammars.defenseResult }}

{{ t.grammars.pubsLabel }}
  1. {{ p.title }} {{ p.venue }}
{{ t.grammars.recognitionLabel }}

{{ r }}

{{ t.grammars.futureLabel }}

{{ f }}

{{ t.grammars.citationLabel }}

{{ t.grammars.citation }}

{{ t.grammars.bibtex }}
{{ t.grammars.thesisLinkLabel }} ↗

{{ t.grammars.oneLine }}

{{ labels.posts }}

{{ t.posts.title }}

{{ leadPost.category }}·{{ leadPost.date }}·{{ leadPost.readLabel }}

{{ leadPost.title }}

{{ leadPost.excerpt }}

{{ t.posts.readMore }} →
{{ post.category }}
{{ post.date }} · {{ post.readLabel }}

{{ post.title }}

{{ post.excerpt }}

{{ t.posts.archiveLabel }}

{{ t.posts.archiveTitle }}

{{ t.posts.archiveDisclaimer }}

← {{ t.posts.all }}
{{ t.posts.archiveNote }}
{{ currentPost.category }}·{{ currentPost.date }}·{{ currentPost.readLabel }}

{{ currentPost.title }}

404

{{ notFound.title }}

{{ notFound.body }}