Browse Source

Links

master
David Larlet 3 months ago
parent
commit
f12b19c0be
Signed by: David Larlet <david@larlet.fr> GPG Key ID: 3E2953A359E7E7BD

+ 209
- 0
cache/2024/112d32ccefb9aec48180de42e1fe1534/index.html View File

@@ -0,0 +1,209 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Quand je serai bien vieux (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Is that even respected? Retrospectively? What a shAItshow…
https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
<meta name="robots" content="noai, noimageai">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://n.survol.fr/n/quand-je-serai-bien-vieux">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Quand je serai bien vieux</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://n.survol.fr/n/quand-je-serai-bien-vieux" title="Lien vers le contenu original">Source originale</a>
<br>
Mis en cache le 2024-01-16
</p>
</nav>
<hr>
<blockquote class="wp-block-quote"><p>Quand vous serez bien vieille, au soir, à la chan­delle,<br>Assise auprès du feu, dévi­dant et filant,</p><cite>Pierre de Ronsard</cite></blockquote>

<p>Je travaille dans des équipes tech­niques infor­ma­tiques, le web, les nouvelles tech­no­lo­gies, les star­tups. Autour de moi je ne vois que des jeunes, avec quelques rares personnes de ma géné­ra­tion.</p>

<p>Il n’y a quasi­ment aucune personne de 50 ans ou plus dans les équipes tech­niques. Les exemples que j’ai en tête sont quelques poin­tures natio­nales ou inter­na­tio­nales, pas du tout repré­sen­ta­tives du métier.</p>

<p>Je n’ai que 43 ans mais ça fait déjà 10 ans que je suis dans les plus âgés des dépar­te­ments tech­niques. C’est hallu­ci­nant quand j’y pense. Le temps ne se dérou­lant que dans un sens, ça ne risque pas de s’ar­ran­ger.</p>

<hr class="wp-block-separator has-alpha-channel-opacity">

<p>J’ai un peu ri (jaune) quand un coach m’a dit à 36 ans « tu entames ta seconde moitié de carrière, il va falloir te fixer quelque part ». Désor­mais je ne ris plus.</p>

<p>Ayant bifurqué vers les postes de direc­tion, j’ai proba­ble­ment un peu plus de temps que d’autres devant moi mais la ques­tion finira par arri­ver, surtout dans mon domaine profes­sion­nel :</p>

<p>Qui donc m’em­bau­chera quand j’au­rai 55, 60 ou 65 ans ? Ne risque-je pas de me retrou­ver sur le carreau ?</p>

<hr class="wp-block-separator has-alpha-channel-opacity">

<p>Fut un temps je pensais juste à trou­ver une place où je puisse rester 10 ans. En réalité il faudrait plutôt parler de 15 ans ou plus.</p>

<p>Et là je regarde autour de moi, dans le milieu des star­tups et boites tech. Il est très diffi­cile de se proje­ter à 10 ou 15 ans. Il peut se passer mille choses.</p>

<p>Entre un échec, des plans de licen­cie­ment, un rachat, ou juste un licen­cie­ment indi­vi­duel pour faire place à quelqu’un de plus jeune ou qui aura vécu l’étape d’après de l’évo­lu­tion de l’en­tre­pri­se… je ne me sens pas du tout <em>en sécu­rité</em> pour me dire que j’y serais encore à l’âge de ma retraite.</p>

<p>Si quoi que ce soit se passe, je risque de repar­tir à cher­cher un poste au mauvais moment, à un âge où ce sera diffi­cile.</p>

<p>L’autre option c’est quit­ter le monde des nouvelles entre­prises, star­tups et boites hyper tech pour entrer dans un grand groupe. Ces grands groupes sont plus stables, et plus habi­tués à garder des sala­riés jusqu’à la retraite.</p>

<p>Ce n’est pas magique non plus et ça peut être diffi­cile de taper à la porte à 60 ou 65 ans. Et donc, à partir de quel âge faut-il que je m’ima­gine devoir cher­cher une place dans un grand groupe pour ma fin de carrière si jamais l’en­tre­prise où je suis n’est pas devenu un grand groupe entre temps ?</p>

<hr class="wp-block-separator has-alpha-channel-opacity">

<p>Je ne sais pas et ça m’oc­cupe l’es­prit. J’ai l’im­pres­sion d’avoir une horloge biolo­gique que je ne dois plus igno­rer. Le gouver­ne­ment qui pense à chaque fois rallon­ger l’âge de départ à la retraite sans réel­le­ment chan­ger l’em­ploi des seniors n’aide pas beau­coup à ma séré­nité. </p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 70
- 0
cache/2024/112d32ccefb9aec48180de42e1fe1534/index.md View File

@@ -0,0 +1,70 @@
title: Quand je serai bien vieux
url: https://n.survol.fr/n/quand-je-serai-bien-vieux
hash_url: 112d32ccefb9aec48180de42e1fe1534
archive_date: 2024-01-16

<blockquote class="wp-block-quote"><p>Quand vous serez bien vieille, au soir, à la chan­delle,<br>Assise auprès du feu, dévi­dant et filant,</p><cite>Pierre de Ronsard</cite></blockquote>



<p>Je travaille dans des équipes tech­niques infor­ma­tiques, le web, les nouvelles tech­no­lo­gies, les star­tups. Autour de moi je ne vois que des jeunes, avec quelques rares personnes de ma géné­ra­tion.</p>



<p>Il n’y a quasi­ment aucune personne de 50 ans ou plus dans les équipes tech­niques. Les exemples que j’ai en tête sont quelques poin­tures natio­nales ou inter­na­tio­nales, pas du tout repré­sen­ta­tives du métier.</p>



<p>Je n’ai que 43 ans mais ça fait déjà 10 ans que je suis dans les plus âgés des dépar­te­ments tech­niques. C’est hallu­ci­nant quand j’y pense. Le temps ne se dérou­lant que dans un sens, ça ne risque pas de s’ar­ran­ger.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p>J’ai un peu ri (jaune) quand un coach m’a dit à 36 ans « tu entames ta seconde moitié de carrière, il va falloir te fixer quelque part ». Désor­mais je ne ris plus.</p>



<p>Ayant bifurqué vers les postes de direc­tion, j’ai proba­ble­ment un peu plus de temps que d’autres devant moi mais la ques­tion finira par arri­ver, surtout dans mon domaine profes­sion­nel :</p>



<p>Qui donc m’em­bau­chera quand j’au­rai 55, 60 ou 65 ans ? Ne risque-je pas de me retrou­ver sur le carreau ?</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p>Fut un temps je pensais juste à trou­ver une place où je puisse rester 10 ans. En réalité il faudrait plutôt parler de 15 ans ou plus.</p>



<p>Et là je regarde autour de moi, dans le milieu des star­tups et boites tech. Il est très diffi­cile de se proje­ter à 10 ou 15 ans. Il peut se passer mille choses.</p>



<p>Entre un échec, des plans de licen­cie­ment, un rachat, ou juste un licen­cie­ment indi­vi­duel pour faire place à quelqu’un de plus jeune ou qui aura vécu l’étape d’après de l’évo­lu­tion de l’en­tre­pri­se… je ne me sens pas du tout <em>en sécu­rité</em> pour me dire que j’y serais encore à l’âge de ma retraite.</p>



<p>Si quoi que ce soit se passe, je risque de repar­tir à cher­cher un poste au mauvais moment, à un âge où ce sera diffi­cile.</p>



<p>L’autre option c’est quit­ter le monde des nouvelles entre­prises, star­tups et boites hyper tech pour entrer dans un grand groupe. Ces grands groupes sont plus stables, et plus habi­tués à garder des sala­riés jusqu’à la retraite.</p>



<p>Ce n’est pas magique non plus et ça peut être diffi­cile de taper à la porte à 60 ou 65 ans. Et donc, à partir de quel âge faut-il que je m’ima­gine devoir cher­cher une place dans un grand groupe pour ma fin de carrière si jamais l’en­tre­prise où je suis n’est pas devenu un grand groupe entre temps ?</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p>Je ne sais pas et ça m’oc­cupe l’es­prit. J’ai l’im­pres­sion d’avoir une horloge biolo­gique que je ne dois plus igno­rer. Le gouver­ne­ment qui pense à chaque fois rallon­ger l’âge de départ à la retraite sans réel­le­ment chan­ger l’em­ploi des seniors n’aide pas beau­coup à ma séré­nité. </p>

+ 227
- 0
cache/2024/7d2d2bce96cbc020423299e7de03d2cf/index.html View File

@@ -0,0 +1,227 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Disillusioned with Deno (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Is that even respected? Retrospectively? What a shAItshow…
https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
<meta name="robots" content="noai, noimageai">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://www.baldurbjarnason.com/2024/disillusioned-with-deno/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Disillusioned with Deno</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://www.baldurbjarnason.com/2024/disillusioned-with-deno/" title="Lien vers le contenu original">Source originale</a>
<br>
Mis en cache le 2024-01-16
</p>
</nav>
<hr>
<p>It’s inevitable that once you decide to review your own business and media strategy, you start to rethink and review other decisions you’ve made in the past.</p>
<p>One of those decisions is <a href="https://deno.com/">Deno</a>, which I’ve used to most of my personal projects and experiments over the past couple of years. Most of these projects have been on the simpler side – command-line scripts or small websites. I made the <a href="https://softwarecrisis.dev/">softwarecrisis.dev</a> newsletter landing page using <a href="https://lume.land/">Lume and Deno</a>, for example. I used Deno to make most of the prototypes for the research project that followed <a href="https://www.colophon.cards/">Colophon Cards</a>. It’s very useful.</p>
<p>There’s a lot to like.</p>
<p>Deno has:</p>
<ul>
<li>Overall much better support for standard browser APIs than node.</li>
<li>APIs that aren’t based on standards hew a lot closer to browser conventions, making switching between the front and back end a lot less jarring.</li>
<li>An excellent standard library.</li>
<li>Much simpler installation. It comes in a single binary, making installation and deployment much simpler.</li>
<li>Most of the tooling you need: linter, test runner, benchmarking, code formatting, type checker, and documentation generation.</li>
<li>A sensible security model for running code.</li>
</ul>
<p>If you have a task that only requires the standard library or the standard tooling, using Deno is a dream – simplicity itself.</p>
<p>If that task requires something <em>more</em> than that, you quickly find yourself in trouble.</p>
<p>The company behind Deno has tried to conquer this problem with a two-pronged attack:</p>
<ol>
<li>Build Deno-specific versions of most of the common tools and projects that web projects might need.</li>
<li>Hastily roll out node and npm compatibility for their runtime.</li>
</ol>
<p>This has meant that a single startup has taken on the responsibility of building their own <a href="https://deno.com/deploy">scalable hosting</a>, <a href="https://deno.com/kv">persistent storage product</a>, <a href="https://docs.deno.com/kv/manual/queue_overview">persistent execution queue</a>, <a href="https://docs.deno.com/kv/manual/#watching-for-updates-in-deno-kv">realtime notification</a>, <a href="https://docs.deno.com/kv/manual/cron">scheduled execution</a>, <a href="https://fresh.deno.dev/">front-end React framework</a>, and no doubt a few more by the time you read this post.</p>
<p>They’re even planning to build their own full-featured package registry for <a href="https://www.reddit.com/r/Deno/comments/15nv8yv/deno_20_previewed_at_seattlejs_conf/">Deno 2.0.</a> (Also, it’s quite annoying how much information out there on the future of Deno is only available in video.)</p>
<p>Add to that the attempt to implement full node and npm compatibility for their runtime.</p>
<p>Basically:</p>
<ol>
<li>Your business model is hosting.</li>
<li>But none of the tools and projects people commonly use are available for your new runtime and hosting environment, so you need to implement your own to fill in the gaps.</li>
<li>Then you discover that the biggest demand for hosting is from clients with legacy code and legacy dependencies, so you kind of have to give them a way to bring them over. Compatibility it is.</li>
<li>Turns out many of the annoying features of the “legacy” system existed for a reason, so you have to implement them yourself, but you obviously do so in newer, modern, more sensible (and less backwards-compatible) ways.</li>
<li>This would be fine – great even – if it weren’t for the fact that you now have to maintain <strong><em>two</em></strong> versions of large parts of your runtime, either as a translation layer from the “legacy” system to your new one, or as two completely independent features that require maintenance.</li>
</ol>
<p>We’ve seen this strategy before. It’s basically <a href="https://www.cloudflare.com/">Cloudflare’s</a>, give or take a few details. Most of the differences in execution are because Cloudflare started on the opposite end of this particular chain of sausages: cloud hosting first, then <a href="https://blog.cloudflare.com/workers-open-source-announcement/">the open source runtime</a>, not the other way around as Deno did.</p>
<p>I find Deno’s tooling to be better, and their runtime much, much easier to use, but the overall strategy for the two companies is the same.</p>
<p><a href="https://bun.sh/">Bun</a> has the same playbook, with their only innovation being that, since they began later, they understood the need for node and npm compatibility from the very beginning.</p>
<p>I don’t think this approach is going to work out that well for any of them.</p>
<p>The “legacy” compatibility effectively removes any incentive to make packages for Deno (or Cloudflare, or Bun). Why use <a href="https://github.com/denoland/dnt"><code>dnt</code></a> to create packages that are compatible with both Deno and Node when you can just make a Node package? <strong><em>It’s still going to be compatible with both Deno and Node.</em></strong> Deno themselves have seen to that. You’re going to get cross-runtime compatibility either way.</p>
<p>The risk is that Deno will effectively become a platform for running code and projects from the npm ecosystem. Except it will never be as good at “node” as node itself.</p>
<p>There are always going to be gaps in the node and npm compatibility layer because <em>node is a moving target</em>. It’s a living project that’s still changing.</p>
<hr>
<p>If Deno were maintained by a foundation or open source community, I’d be less worried. It’d inevitably be smaller in scope, but that would be fine. You don’t need world domination to be a successful community-driven software project. It could find its niche, with time.</p>
<p>But you do need to conquer a big chunk of the world to be a successful VC-funded startup.</p>
<p>There is already a disconnect in the Deno ecosystem. Many of the third party modules seem to be stagnant and haven’t been updated in a while. The projects that do seem vibrant tend to be the ones that target browser-compatible platforms in general and so get Deno, Cloudflare, and Bun support almost for free through little specific effort of their own.</p>
<p>Node hasn’t been standing still either. They’re adding support for many of the features that made Deno special, such as built-in tooling, a <a href="https://nodejs.org/docs/latest/api/test.html">test runner with coverage</a>, and <a href="https://nodejs.org/docs/latest/api/esm.html#https-and-http-imports">HTTP imports</a>. Even <a href="https://github.com/nodejs/loaders#milestone-3-usability-improvements">import maps</a> are on their roadmap.</p>
<p>The fate of Node also doesn’t depend on the fate of a single startup or tech company.</p>
<p>The npm ecosystem remains a strategic liability, but adding support for import maps and HTTP imports will go some way to mitigate that and in the meantime you can install node packages <a href="https://medium.com/pravin-lolage/how-to-use-your-own-package-from-git-repository-as-a-node-module-8b543c13957e">directly from git</a> or use an npm-compatible third party repository. <a href="https://docs.npmjs.com/cli/v10/commands/npm-install#:~:text=npm%20install%20%3Cgit%20remote%20url%3E">Any git remote URL should work with <code>npm install</code></a> – no GitHub required.</p>
<p>Seeing money and talent drain out of the software ecosystem, companies switch en masse to inherently conservative LLMs for development, and a growing frustration among software developers in general, it’s hard to envision a future where Deno or Bun win out in a direct competition with Node.</p>
<p>I’m not convinced I want to be using either of them once their VC-backed startups become desperate.</p>
<p>For those of us who <em>do</em> like to work in JavaScript, this means that Node is our best bet for the back end in the long term.</p>
<p>It’s probably time to try to recreate in node what has made Deno such a joy to work with.</p>
<p>But Node’s improvements aren’t the only issue facing Deno.</p>
<p>The big one is that the logical alternatives to Node – the “no Node” work environments developers are likely to reach for <em>aren’t going to be based on JavaScript</em>. Import maps mean that browsers effectively have an API surface that non-JS projects can use to build a dependency management system. Much of the tooling surrounding JavaScript is now implemented in <em>Rust</em>, not JS – much of it driven by Deno itself – and that makes it more easily accessible outside both the Node and Deno ecosystems. <a href="https://component-model.bytecodealliance.org/">The WASM component model</a> additionally promises to make many dependencies runtime-independent, with the Rust-based tooling around JS being logical initial targets.</p>
<p>The “no Node” alternative for many won’t be another JavaScript runtime, but instead <em>something completely different.</em></p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 56
- 0
cache/2024/7d2d2bce96cbc020423299e7de03d2cf/index.md View File

@@ -0,0 +1,56 @@
title: Disillusioned with Deno
url: https://www.baldurbjarnason.com/2024/disillusioned-with-deno/
hash_url: 7d2d2bce96cbc020423299e7de03d2cf
archive_date: 2024-01-16

<p>It’s inevitable that once you decide to review your own business and media strategy, you start to rethink and review other decisions you’ve made in the past.</p>
<p>One of those decisions is <a href="https://deno.com/">Deno</a>, which I’ve used to most of my personal projects and experiments over the past couple of years. Most of these projects have been on the simpler side – command-line scripts or small websites. I made the <a href="https://softwarecrisis.dev/">softwarecrisis.dev</a> newsletter landing page using <a href="https://lume.land/">Lume and Deno</a>, for example. I used Deno to make most of the prototypes for the research project that followed <a href="https://www.colophon.cards/">Colophon Cards</a>. It’s very useful.</p>
<p>There’s a lot to like.</p>
<p>Deno has:</p>
<ul>
<li>Overall much better support for standard browser APIs than node.</li>
<li>APIs that aren’t based on standards hew a lot closer to browser conventions, making switching between the front and back end a lot less jarring.</li>
<li>An excellent standard library.</li>
<li>Much simpler installation. It comes in a single binary, making installation and deployment much simpler.</li>
<li>Most of the tooling you need: linter, test runner, benchmarking, code formatting, type checker, and documentation generation.</li>
<li>A sensible security model for running code.</li>
</ul>
<p>If you have a task that only requires the standard library or the standard tooling, using Deno is a dream – simplicity itself.</p>
<p>If that task requires something <em>more</em> than that, you quickly find yourself in trouble.</p>
<p>The company behind Deno has tried to conquer this problem with a two-pronged attack:</p>
<ol>
<li>Build Deno-specific versions of most of the common tools and projects that web projects might need.</li>
<li>Hastily roll out node and npm compatibility for their runtime.</li>
</ol>
<p>This has meant that a single startup has taken on the responsibility of building their own <a href="https://deno.com/deploy">scalable hosting</a>, <a href="https://deno.com/kv">persistent storage product</a>, <a href="https://docs.deno.com/kv/manual/queue_overview">persistent execution queue</a>, <a href="https://docs.deno.com/kv/manual/#watching-for-updates-in-deno-kv">realtime notification</a>, <a href="https://docs.deno.com/kv/manual/cron">scheduled execution</a>, <a href="https://fresh.deno.dev/">front-end React framework</a>, and no doubt a few more by the time you read this post.</p>
<p>They’re even planning to build their own full-featured package registry for <a href="https://www.reddit.com/r/Deno/comments/15nv8yv/deno_20_previewed_at_seattlejs_conf/">Deno 2.0.</a> (Also, it’s quite annoying how much information out there on the future of Deno is only available in video.)</p>
<p>Add to that the attempt to implement full node and npm compatibility for their runtime.</p>
<p>Basically:</p>
<ol>
<li>Your business model is hosting.</li>
<li>But none of the tools and projects people commonly use are available for your new runtime and hosting environment, so you need to implement your own to fill in the gaps.</li>
<li>Then you discover that the biggest demand for hosting is from clients with legacy code and legacy dependencies, so you kind of have to give them a way to bring them over. Compatibility it is.</li>
<li>Turns out many of the annoying features of the “legacy” system existed for a reason, so you have to implement them yourself, but you obviously do so in newer, modern, more sensible (and less backwards-compatible) ways.</li>
<li>This would be fine – great even – if it weren’t for the fact that you now have to maintain <strong><em>two</em></strong> versions of large parts of your runtime, either as a translation layer from the “legacy” system to your new one, or as two completely independent features that require maintenance.</li>
</ol>
<p>We’ve seen this strategy before. It’s basically <a href="https://www.cloudflare.com/">Cloudflare’s</a>, give or take a few details. Most of the differences in execution are because Cloudflare started on the opposite end of this particular chain of sausages: cloud hosting first, then <a href="https://blog.cloudflare.com/workers-open-source-announcement/">the open source runtime</a>, not the other way around as Deno did.</p>
<p>I find Deno’s tooling to be better, and their runtime much, much easier to use, but the overall strategy for the two companies is the same.</p>
<p><a href="https://bun.sh/">Bun</a> has the same playbook, with their only innovation being that, since they began later, they understood the need for node and npm compatibility from the very beginning.</p>
<p>I don’t think this approach is going to work out that well for any of them.</p>
<p>The “legacy” compatibility effectively removes any incentive to make packages for Deno (or Cloudflare, or Bun). Why use <a href="https://github.com/denoland/dnt"><code>dnt</code></a> to create packages that are compatible with both Deno and Node when you can just make a Node package? <strong><em>It’s still going to be compatible with both Deno and Node.</em></strong> Deno themselves have seen to that. You’re going to get cross-runtime compatibility either way.</p>
<p>The risk is that Deno will effectively become a platform for running code and projects from the npm ecosystem. Except it will never be as good at “node” as node itself.</p>
<p>There are always going to be gaps in the node and npm compatibility layer because <em>node is a moving target</em>. It’s a living project that’s still changing.</p>
<hr>
<p>If Deno were maintained by a foundation or open source community, I’d be less worried. It’d inevitably be smaller in scope, but that would be fine. You don’t need world domination to be a successful community-driven software project. It could find its niche, with time.</p>
<p>But you do need to conquer a big chunk of the world to be a successful VC-funded startup.</p>
<p>There is already a disconnect in the Deno ecosystem. Many of the third party modules seem to be stagnant and haven’t been updated in a while. The projects that do seem vibrant tend to be the ones that target browser-compatible platforms in general and so get Deno, Cloudflare, and Bun support almost for free through little specific effort of their own.</p>
<p>Node hasn’t been standing still either. They’re adding support for many of the features that made Deno special, such as built-in tooling, a <a href="https://nodejs.org/docs/latest/api/test.html">test runner with coverage</a>, and <a href="https://nodejs.org/docs/latest/api/esm.html#https-and-http-imports">HTTP imports</a>. Even <a href="https://github.com/nodejs/loaders#milestone-3-usability-improvements">import maps</a> are on their roadmap.</p>
<p>The fate of Node also doesn’t depend on the fate of a single startup or tech company.</p>
<p>The npm ecosystem remains a strategic liability, but adding support for import maps and HTTP imports will go some way to mitigate that and in the meantime you can install node packages <a href="https://medium.com/pravin-lolage/how-to-use-your-own-package-from-git-repository-as-a-node-module-8b543c13957e">directly from git</a> or use an npm-compatible third party repository. <a href="https://docs.npmjs.com/cli/v10/commands/npm-install#:~:text=npm%20install%20%3Cgit%20remote%20url%3E">Any git remote URL should work with <code>npm install</code></a> – no GitHub required.</p>
<p>Seeing money and talent drain out of the software ecosystem, companies switch en masse to inherently conservative LLMs for development, and a growing frustration among software developers in general, it’s hard to envision a future where Deno or Bun win out in a direct competition with Node.</p>
<p>I’m not convinced I want to be using either of them once their VC-backed startups become desperate.</p>
<p>For those of us who <em>do</em> like to work in JavaScript, this means that Node is our best bet for the back end in the long term.</p>
<p>It’s probably time to try to recreate in node what has made Deno such a joy to work with.</p>
<p>But Node’s improvements aren’t the only issue facing Deno.</p>
<p>The big one is that the logical alternatives to Node – the “no Node” work environments developers are likely to reach for <em>aren’t going to be based on JavaScript</em>. Import maps mean that browsers effectively have an API surface that non-JS projects can use to build a dependency management system. Much of the tooling surrounding JavaScript is now implemented in <em>Rust</em>, not JS – much of it driven by Deno itself – and that makes it more easily accessible outside both the Node and Deno ecosystems. <a href="https://component-model.bytecodealliance.org/">The WASM component model</a> additionally promises to make many dependencies runtime-independent, with the Rust-based tooling around JS being logical initial targets.</p>
<p>The “no Node” alternative for many won’t be another JavaScript runtime, but instead <em>something completely different.</em></p>

+ 187
- 0
cache/2024/ba977526c7a8cab6935708b2cdba5c0c/index.html View File

@@ -0,0 +1,187 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Aging programmer (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Is that even respected? Retrospectively? What a shAItshow…
https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
<meta name="robots" content="noai, noimageai">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://world.hey.com/jorge/aging-programmer-d448bdec">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Aging programmer</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://world.hey.com/jorge/aging-programmer-d448bdec" title="Lien vers le contenu original">Source originale</a>
<br>
Mis en cache le 2024-01-16
</p>
</nav>
<hr>
<div>
<figure class="attachment attachment--preview attachment--lightboxable attachment--jpg">
<a download="oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" title="Download oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" data-click-proxy-target="lightbox_link_blob_952594452" href="https://world.hey.com/jorge/d448bdec/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg?disposition=attachment">
<img src="https://world.hey.com/jorge/d448bdec/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFLQUIya0NBQVU2REhGMVlXeHBkSGxwU3pvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--0b5e092e6240e14fab357b4c1013c9a0c881ff87/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" alt="oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" srcset="https://world.hey.com/jorge/d448bdec/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFJQUQya0NBQW82REhGMVlXeHBkSGxwUVRvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--a8a2bb6a9884c661ef30854054544882621a1752/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg 2x, https://world.hey.com/jorge/d448bdec/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFLQUZta0NBQTg2REhGMVlXeHBkSGxwUERvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--9b7ba00c32731d121dd7ff5706d31cc3652788dd/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg 3x" decoding="async" loading="lazy">
</a>
</figure><p>Back in college, they told me that I would start my career writing code, but eventually, I would move to a position where I would ask others to code my designs. To celebrate that this turned out to be completely false, here are some assorted reflections as a 40-year-old programmer that looks back:</p></div>
<p><br></p>
<ul><li>Compared to my younger versions, I feel at my best. Of course, acquired technical knowledge helps, but experience and knowing how to approach work make a more significant difference. I think I'm much better than 15 years ago, and I hope I am much worse than 15 years from now. That feeling of continuous learning means the world to me.</li><li>Related: working with people you can learn from is a wonderful source of motivation.</li><li>I carry many of the defects I had, but now I know myself and their impact much better, so at least I can try to counter them.</li><li>My desire to manage people is at all-time lows.</li><li>My desire to discuss technical stuff with people, both to help and be helped, is at all-time highs.</li><li>I am way more predictable with my throughput.</li><li>I used to be very sensitive to tone and manners in the working place. I still am. </li><li>I've learned to offer myself a chance to reconsider technical battles. Before, I fought them all until the end; now, I happily change course early when the smell isn't right or when I run out of appetite.</li><li>When I started, I didn't spend a second thinking about time, scope, and appetite. Now, I rarely do anything where those aren't the decision-making force.</li><li>I don't enjoy switching contexts. My perfect agenda is composed of a single meaty task I can focus on for days.</li><li>Communicating effectively is a complex skill that takes years to develop, and an essential one if you want to program professionally.</li><li>I am way more cautious when deploying things.</li><li>I have no idea about how effective pair programming is. My desire to discover it is zero.</li><li>Similarly, I don't discuss the benefits of getting people in the same room to solve a problem, but I am not super interested either. </li><li>I enjoy being challenged and the feeling of not knowing how to solve a problem at first.</li><li>I am a generalist at heart. Too much infrastructure work and I miss product development. Too much backend, and I miss frontend. This comes with positives and negatives, but I accept it's just how I am wired. I never understood why some people despise the term full-stack.</li><li>After almost 10 years of remote work, it would be close to impossible for me to go back to an office.</li><li>I have come to consider accountability an essential perk. I started my career in a place where, in general, nobody cared about anything. I need exactly the opposite environment for my own sanity. </li><li>I am skeptical by default about any hot new things in the programming space. I think this can be a double-edged sword. Younger me was the opposite.</li><li>"No matter how it looks at first, it's always a people problem", by Gerald Weinberg, is essentially true and something to have very present by technically-minded people.</li></ul>
<blockquote>Do people lose interest in programming as they age? Is it accurate to expect that older programmers are slower, make more mistakes, and would rather be doing something else such as managing programmers?</blockquote>

<p>No, no and no.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 15
- 0
cache/2024/ba977526c7a8cab6935708b2cdba5c0c/index.md View File

@@ -0,0 +1,15 @@
title: Aging programmer
url: https://world.hey.com/jorge/aging-programmer-d448bdec
hash_url: ba977526c7a8cab6935708b2cdba5c0c
archive_date: 2024-01-16

<div>
<figure class="attachment attachment--preview attachment--lightboxable attachment--jpg">
<a download="oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" title="Download oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" data-click-proxy-target="lightbox_link_blob_952594452" href="https://world.hey.com/jorge/d448bdec/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg?disposition=attachment">
<img src="https://world.hey.com/jorge/d448bdec/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFLQUIya0NBQVU2REhGMVlXeHBkSGxwU3pvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--0b5e092e6240e14fab357b4c1013c9a0c881ff87/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" alt="oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg" srcset="https://world.hey.com/jorge/d448bdec/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFJQUQya0NBQW82REhGMVlXeHBkSGxwUVRvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--a8a2bb6a9884c661ef30854054544882621a1752/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg 2x, https://world.hey.com/jorge/d448bdec/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCQlJ3eHpnPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--f579b9de96167f6689c8040e1984a393e4a86b84/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFLQUZta0NBQTg2REhGMVlXeHBkSGxwUERvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--9b7ba00c32731d121dd7ff5706d31cc3652788dd/oziel-gomez-x7gz40Z9ObM-unsplash-2.jpg 3x" decoding="async" loading="lazy">
</a>
</figure><p>Back in college, they told me that I would start my career writing code, but eventually, I would move to a position where I would ask others to code my designs. To celebrate that this turned out to be completely false, here are some assorted reflections as a 40-year-old programmer that looks back:</p></div><p><br></p><ul><li>Compared to my younger versions, I feel at my best. Of course, acquired technical knowledge helps, but experience and knowing how to approach work make a more significant difference. I think I'm much better than 15 years ago, and I hope I am much worse than 15 years from now. That feeling of continuous learning means the world to me.</li><li>Related: working with people you can learn from is a wonderful source of motivation.</li><li>I carry many of the defects I had, but now I know myself and their impact much better, so at least I can try to counter them.</li><li>My desire to manage people is at all-time lows.</li><li>My desire to discuss technical stuff with people, both to help and be helped, is at all-time highs.</li><li>I am way more predictable with my throughput.</li><li>I used to be very sensitive to tone and manners in the working place. I still am. </li><li>I've learned to offer myself a chance to reconsider technical battles. Before, I fought them all until the end; now, I happily change course early when the smell isn't right or when I run out of appetite.</li><li>When I started, I didn't spend a second thinking about time, scope, and appetite. Now, I rarely do anything where those aren't the decision-making force.</li><li>I don't enjoy switching contexts. My perfect agenda is composed of a single meaty task I can focus on for days.</li><li>Communicating effectively is a complex skill that takes years to develop, and an essential one if you want to program professionally.</li><li>I am way more cautious when deploying things.</li><li>I have no idea about how effective pair programming is. My desire to discover it is zero.</li><li>Similarly, I don't discuss the benefits of getting people in the same room to solve a problem, but I am not super interested either. </li><li>I enjoy being challenged and the feeling of not knowing how to solve a problem at first.</li><li>I am a generalist at heart. Too much infrastructure work and I miss product development. Too much backend, and I miss frontend. This comes with positives and negatives, but I accept it's just how I am wired. I never understood why some people despise the term full-stack.</li><li>After almost 10 years of remote work, it would be close to impossible for me to go back to an office.</li><li>I have come to consider accountability an essential perk. I started my career in a place where, in general, nobody cared about anything. I need exactly the opposite environment for my own sanity. </li><li>I am skeptical by default about any hot new things in the programming space. I think this can be a double-edged sword. Younger me was the opposite.</li><li>"No matter how it looks at first, it's always a people problem", by Gerald Weinberg, is essentially true and something to have very present by technically-minded people.</li></ul>
<blockquote>Do people lose interest in programming as they age? Is it accurate to expect that older programmers are slower, make more mistakes, and would rather be doing something else such as managing programmers?</blockquote>

<p>No, no and no.</p>


+ 6
- 0
cache/2024/index.html View File

@@ -76,10 +76,16 @@
<li><a href="/david/cache/2024/9bc04d41d25fc73391116d99b7259a3d/" title="Accès à l’article dans le cache local : notes">notes</a> (<a href="https://www.la-grange.net/2023/07/10/notes-train" title="Accès à l’article original distant : notes">original</a>)</li>
<li><a href="/david/cache/2024/112d32ccefb9aec48180de42e1fe1534/" title="Accès à l’article dans le cache local : Quand je serai bien vieux">Quand je serai bien vieux</a> (<a href="https://n.survol.fr/n/quand-je-serai-bien-vieux" title="Accès à l’article original distant : Quand je serai bien vieux">original</a>)</li>
<li><a href="/david/cache/2024/877b1e29328f6ad1b6fef26d7407ec5f/" title="Accès à l’article dans le cache local : Your tech stack is not the product">Your tech stack is not the product</a> (<a href="https://hoho.com/posts/your-stack-is-not-the-product/" title="Accès à l’article original distant : Your tech stack is not the product">original</a>)</li>
<li><a href="/david/cache/2024/ba977526c7a8cab6935708b2cdba5c0c/" title="Accès à l’article dans le cache local : Aging programmer">Aging programmer</a> (<a href="https://world.hey.com/jorge/aging-programmer-d448bdec" title="Accès à l’article original distant : Aging programmer">original</a>)</li>
<li><a href="/david/cache/2024/5030196507bcf3e06162e9eaed40abbe/" title="Accès à l’article dans le cache local : Blogging and Composting">Blogging and Composting</a> (<a href="https://blog.jim-nielsen.com/2023/blogging-and-compositing/" title="Accès à l’article original distant : Blogging and Composting">original</a>)</li>
<li><a href="/david/cache/2024/7d2d2bce96cbc020423299e7de03d2cf/" title="Accès à l’article dans le cache local : Disillusioned with Deno">Disillusioned with Deno</a> (<a href="https://www.baldurbjarnason.com/2024/disillusioned-with-deno/" title="Accès à l’article original distant : Disillusioned with Deno">original</a>)</li>
<li><a href="/david/cache/2024/40aada3cc8d6897fda5a277c4299c1fd/" title="Accès à l’article dans le cache local : We Need to Talk About the Front Web">We Need to Talk About the Front Web</a> (<a href="https://gericci.me/we-need-to-talk-about-the-front-web-5.html" title="Accès à l’article original distant : We Need to Talk About the Front Web">original</a>)</li>
<li><a href="/david/cache/2024/7a223e552e8a8e3e11c759cbc5bc3ffa/" title="Accès à l’article dans le cache local : Opening Mail / frantic.im">Opening Mail / frantic.im</a> (<a href="https://frantic.im/opening-mail/" title="Accès à l’article original distant : Opening Mail / frantic.im">original</a>)</li>

Loading…
Cancel
Save