Het artikel benadrukt het belang van kleine, specifieke brokjes kennis die de workflow van een engineer aanzienlijk kunnen versnellen zonder dat daarvoor een complexe theoretische basis nodig is. De auteur deelt concrete tips verdeeld over vier domeinen:
- Terminal en Shell: Het gebruik van
fzf voor fuzzy search in de geschiedenis, ripgrep (rg) als alternatief voor grep, en het inschakelen van geavanceerde zsh-autocompletion.
- Databases: Het uitvoeren van
SELECT zonder FROM voor het testen van functies en het gebruik van explain analyze voor prestatie-optimalisatie in PostgreSQL en MySQL.
- Programmeren en Regex: Tips over de word boundary assertion (
\b), het gebruik van logaritmen voor metriek-distributies en het optimaliseren van Node.js latentie via https.Agent.
- Git: De 'git pickaxe' (
git log -S) om wijzigingen in specifieke strings te vinden en git checkout - om snel terug te keren naar de vorige HEAD.
De auteur concludeert dat het delen van dergelijke 'micro-kennis' binnen een team (bijvoorbeeld via dagelijkse Slack-berichten) zeer effectief is om de collectieve expertise van een engineeringteam te vergroten.
Kleine programmeertrucs
In zekere zin is dit vanzelfsprekend: alles wat je weet, is opgebouwd uit kleinere stukjes kennis. Natuurlijk zijn die kleine stukjes belangrijk.
Ik denk echter dat er sommige brokjes kennis zijn die bijzonder waardevol zijn en niet veel ondersteunende mentale infrastructuur vereisen. Je hoeft geen Python te kennen om python3 -m http.server te gebruiken om een eenvoudige server in een map te starten, maar het kan je werk toch marginaal makkelijker maken. Hier zijn enkele voorbeelden:
Terminal en Shell
- Command history: Waarschijnlijk weet je dat
ctrl + r het mogelijk maakt om in de geschiedenis van je terminal te zoeken, maar als je fzf installeert, kun je dit zo instellen dat ctrl + r een fuzzy search uitvoert. Voor nog meer kracht vervangt atuin je shell-geschiedenis door een doorzoekbare SQLite-database. per-directory-history stelt je in staat om te schakelen tussen het zoeken naar commando's die in een specifieke map zijn uitgevoerd of het zoeken in alle vorige commando's. Tot slot kun je configureren hoeveel geschiedenis er wordt opgeslagen.
- Zoeken in bestanden: Je hebt
find waarschijnlijk niet nodig. Veel find-commando's kunnen worden vervangen door globs zoals **/*.md. De meeste shells ondersteunen dit standaard, maar bij bash moet je dit inschakelen met shopt -s globstar.
- Ripgrep: In dezelfde lijn zullen de meeste mensen waarschijnlijk liever
rg (ripgrep) gebruiken dan grep, ack of ag.
- Zsh autocompletion: De geavanceerde autocompletion-functies van zsh staan niet standaard aan:
if type brew &>/dev/null; then
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
fi
autoload -Uz compinit
compinit
Databases
- SELECT zonder FROM: Je kunt een
SELECT uitvoeren zonder een FROM-clausule. Dit kan nuttig zijn om te testen hoe een functie in je database precies werkt of om jezelf te herinneren hoe SELECT TRUE <> NULL werkt.
- Query-optimalisatie: Zowel PostgreSQL als MySQL ondersteunen
explain analyze, waarmee de query die je probeert te optimaliseren daadwerkelijk wordt uitgevoerd. Dit geeft veel meer informatie over de prestaties.
Programmeren en Reguliere Expressies
- Reguliere expressies: In reguliere expressies maakt
\b (de word boundary assertion) het eenvoudig om het begin of einde van woorden te zoeken.
- Logaritmen in metrieken: Je kunt logaritmen gebruiken bij metrieken om een gevoel te krijgen van de distributie van waarden voor een veld waarin je geïnteresseerd bent:
const bucket = Math.floor(Math.log10(userInGroupCount))
metrics.increment("my_metric", { bucket });
- Modern JavaScript: Modern JS ondersteunt nu
Array.flatMap, Object.entries en Promise.withResolvers.
- NodeJS Latency: In NodeJS kun je een verbinding met een externe bron openhouden door een
https.Agent te maken en deze mee te geven aan je http-verzoeken: fetch(url, {method, agent}). Dit kan een enorme impact hebben op de latentie.
Git
- Git Pickaxe:
git log -S pattern (de "git pickaxe") kan je alle commits geven waarin een specifieke string in een codebase is toegevoegd of verwijderd. Dit is verbazingwekkend nuttig, vooral bij oudere codebases. (git log -G pattern is vergelijkbaar, maar laat ook zien wanneer een regel is verplaatst).
- Vorige HEAD: Net als bij
cd -, kun je git checkout - gebruiken om terug te keren naar je vorige HEAD.
***
Je kende deze dingen misschien allemaal al, of je werkt in een domein waardoor deze specifieke trucjes totaal nutteloos zijn. Maar zelfs als deze set niet handig voor je is, wed ik dat je je eigen verzameling trucjes hebt opgebouwd door de jaren heen die je werk makkelijker maken.
Binnen een bedrijf is ik denk dat nog meer kennis bestaat uit dit soort kleine, effectieve brokjes:
- Om
$PROBLEEM te debuggen, gebruik $DATA_BRON.
$PERSOON weet enorm veel over $ONDERWERP en helpt graag als je vastloopt.
- Er is goede documentatie over
$MOEILIJK_DING te vinden $HIER.
- Wanneer
$DING gebeurt, betekent dit dat we handmatig moeten schalen.
- Om een rolling restart van een service uit te voeren, gebruik
$DIT_COMMANDO.
- Deze
$TOOL maakt het eenvoudig om $DAT_PROBLEEM te scripten.
Bij een vorige werkgever deel ik elke dag een trucje op Slack met het engineeringteam, zowel technische als bedrijfsspecifieke tips, en mensen vonden dat erg nuttig. Zelfs als je 9 van de 10 trucjes al kende, kan dat tiende document of die techniek je tijd besparen. Eén trucje per dag was bovendien het juiste aantal om mensen niet te overweldigen met informatie, terwijl het af en toe nuttige discussies kon aanwakkeren. Als je een senior engineer bent in je bedrijf, zou je kunnen overwegen om iets soortgelijks te doen.
Ik denk dat ik deze techniek voor het eerst zag op de blog van Julia Evans, en haar teksten vatten vaak perfect het idee achter dit bericht samen: "kleine beetjes kennis zijn krachtig! en leuk! en toegankelijk!!"
Kleine programmeertrucs
In zekere zin is dit vanzelfsprekend: alles wat je weet, is opgebouwd uit kleinere stukjes kennis. Natuurlijk zijn die kleine stukjes belangrijk.
Ik denk echter dat er sommige brokjes kennis zijn die bijzonder waardevol zijn en niet veel ondersteunende mentale infrastructuur vereisen. Je hoeft geen Python te kennen om python3 -m http.server te gebruiken om een eenvoudige server in een map te starten, maar het kan je werk toch marginaal makkelijker maken. Hier zijn enkele voorbeelden:
Terminal en Shell
- Command history: Waarschijnlijk weet je dat
ctrl + r het mogelijk maakt om in de geschiedenis van je terminal te zoeken, maar als je fzf installeert, kun je dit zo instellen dat ctrl + r een fuzzy search uitvoert. Voor nog meer kracht vervangt atuin je shell-geschiedenis door een doorzoekbare SQLite-database. per-directory-history stelt je in staat om te schakelen tussen het zoeken naar commando's die in een specifieke map zijn uitgevoerd of het zoeken in alle vorige commando's. Tot slot kun je configureren hoeveel geschiedenis er wordt opgeslagen.
- Zoeken in bestanden: Je hebt
find waarschijnlijk niet nodig. Veel find-commando's kunnen worden vervangen door globs zoals **/*.md. De meeste shells ondersteunen dit standaard, maar bij bash moet je dit inschakelen met shopt -s globstar.
- Ripgrep: In dezelfde lijn zullen de meeste mensen waarschijnlijk liever
rg (ripgrep) gebruiken dan grep, ack of ag.
- Zsh autocompletion: De geavanceerde autocompletion-functies van zsh staan niet standaard aan:
if type brew &>/dev/null; then
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
fi
autoload -Uz compinit
compinit
Databases
- SELECT zonder FROM: Je kunt een
SELECT uitvoeren zonder een FROM-clausule. Dit kan nuttig zijn om te testen hoe een functie in je database precies werkt of om jezelf te herinneren hoe SELECT TRUE <> NULL werkt.
- Query-optimalisatie: Zowel PostgreSQL als MySQL ondersteunen
explain analyze, waarmee de query die je probeert te optimaliseren daadwerkelijk wordt uitgevoerd. Dit geeft veel meer informatie over de prestaties.
Programmeren en Reguliere Expressies
- Reguliere expressies: In reguliere expressies maakt
\b (de word boundary assertion) het eenvoudig om het begin of einde van woorden te zoeken.
- Logaritmen in metrieken: Je kunt logaritmen gebruiken bij metrieken om een gevoel te krijgen van de distributie van waarden voor een veld waarin je geïnteresseerd bent:
const bucket = Math.floor(Math.log10(userInGroupCount))
metrics.increment("my_metric", { bucket });
- Modern JavaScript: Modern JS ondersteunt nu
Array.flatMap, Object.entries en Promise.withResolvers.
- NodeJS Latency: In NodeJS kun je een verbinding met een externe bron openhouden door een
https.Agent te maken en deze mee te geven aan je http-verzoeken: fetch(url, {method, agent}). Dit kan een enorme impact hebben op de latentie.
Git
- Git Pickaxe:
git log -S pattern (de "git pickaxe") kan je alle commits geven waarin een specifieke string in een codebase is toegevoegd of verwijderd. Dit is verbazingwekkend nuttig, vooral bij oudere codebases. (git log -G pattern is vergelijkbaar, maar laat ook zien wanneer een regel is verplaatst).
- Vorige HEAD: Net als bij
cd -, kun je git checkout - gebruiken om terug te keren naar je vorige HEAD.
***
Je kende deze dingen misschien allemaal al, of je werkt in een domein waardoor deze specifieke trucjes totaal nutteloos zijn. Maar zelfs als deze set niet handig voor je is, wed ik dat je je eigen verzameling trucjes hebt opgebouwd door de jaren heen die je werk makkelijker maken.
Binnen een bedrijf is ik denk dat nog meer kennis bestaat uit dit soort kleine, effectieve brokjes:
- Om
$PROBLEEM te debuggen, gebruik $DATA_BRON.
$PERSOON weet enorm veel over $ONDERWERP en helpt graag als je vastloopt.
- Er is goede documentatie over
$MOEILIJK_DING te vinden $HIER.
- Wanneer
$DING gebeurt, betekent dit dat we handmatig moeten schalen.
- Om een rolling restart van een service uit te voeren, gebruik
$DIT_COMMANDO.
- Deze
$TOOL maakt het eenvoudig om $DAT_PROBLEEM te scripten.
Bij een vorige werkgever deel ik elke dag een trucje op Slack met het engineeringteam, zowel technische als bedrijfsspecifieke tips, en mensen vonden dat erg nuttig. Zelfs als je 9 van de 10 trucjes al kende, kan dat tiende document of die techniek je tijd besparen. Eén trucje per dag was bovendien het juiste aantal om mensen niet te overweldigen met informatie, terwijl het af en toe nuttige discussies kon aanwakkeren. Als je een senior engineer bent in je bedrijf, zou je kunnen overwegen om iets soortgelijks te doen.
Ik denk dat ik deze techniek voor het eerst zag op de blog van Julia Evans, en haar teksten vatten vaak perfect het idee achter dit bericht samen: "kleine beetjes kennis zijn krachtig! en leuk! en toegankelijk!!"