A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Software development pushes us to get better as people (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <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>
  31. <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>
  32. <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>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://jessitron.com/2021/11/28/software-development-pushes-us-to-get-better-as-people/">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>Software development pushes us to get better as people</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://jessitron.com/2021/11/28/software-development-pushes-us-to-get-better-as-people/" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <p>Have you ever been on a really good software team? There’s this feeling of connectedness, of shared purpose. We know what we’re building, and we are skilled at building it together. This kind of team can grow some amazing software. </p>
  71. <p>When we work at making our team great like this, we look for new ways of working together. The original agile movement scratched out imposed structure and asked the team to make their own. At our conferences, we talk about inclusion, empathy, emphasis on relationships. We talk about endless learning, freedom to fail, curiosity and compassion.</p>
  72. <h3 id="there-is-an-alignment-between-writing-really-good-software-and-being-good-people-together">There is an alignment between writing really good software and being good people together.</h3>
  73. <p>This alignment has roots in the core activity of software and of humanity: participatory sense-making.</p>
  74. <p>What on earth is that?</p>
  75. <p>In software, participatory sense-making means developing a shared mental model of what the software is, what it’s going to be, and how it works. We need to understand what we’re building deeply, with a clear language to talk about it. It needs to make sense to each of us, and to all of us. We construct this model together: that means there’s more of us to work at making it real in the world. It also means the model is richer, fits with more of the real world, and more rigorous. This comes from our many perspectives participating.</p>
  76. <p>In humanity, participatory sense-making is how we find shared reality in the different pieces of the world that each of us see. We build new concepts that exist only among our minds: money, economy, justice, law, music, conservation, fashion. These are <a href="https://jessitron.com/2020/07/10/poppers-three-worlds/">real things</a> that have causal effects on the physical world <em>because</em> we collectively create them.</p>
  77. <p>When we’re good at participatory sense-making, we can become societies that support each member, where we can each bring as much of ourselves as we like. We can build conscientiously, instead of reducing everything to numbers, people to resources, so that some people can feel a sense of control.</p>
  78. <p>On our software teams, we <em>have</em> to get good at participatory sense-making to make strong, consistent software. To do this, we are conscious of each other, we coregulate, we develop norms that serve us and change them when they don’t. We get better at <a href="https://aeon.co/ideas/descartes-was-wrong-a-person-is-a-person-through-other-persons">personing</a>.</p>
  79. <p>The software benefits, even though sometimes it feels harder and less efficient to work together than alone. We get farther together; that frustration has value.</p>
  80. <p>I hope that these skills we learn on great software teams will someday help us build kinder societies in the larger world. We are already <a href="https://jessitron.com/2021/06/12/the-enterprise-eats-software/">pressured</a> to build better companies. Meanwhile, choose to work on a great team when you can (like <a href="http://honeycomb.io/careers">mine</a>). Choose to care about the team you’re on, and recognize that you’re making better software, a better world, and a better next version of you.</p>
  81. <hr class="wp-block-separator">
  82. <h6 id="inspirations">Inspirations:</h6>
  83. <p>“People must adopt a different attitude towards conditions of life and identity from the one prevalent so far — based as it is on the dogma of the mechanistic world-view and the inordinate desire for command over behavior.” – Walter Volpert, <em>Work Design for Human Development</em>. <a href="https://smile.amazon.com/Software-Development-Reality-Construction-Christiane/dp/3642768199">Software Development and Reality Construction</a> (amazon), 1992</p>
  84. <p><a href="https://tannerlectures.utah.edu/_resources/documents/a-to-z/p/popper80.pdf">Three Worlds</a> (pdf), KARL POPPER, THE TANNER LECTURE ON HUMAN VALUES, University of Michigan, 2978</p>
  85. <p>“Many participants report experience more difficulty in the interactive situation, even if the goal is reached faster.” <a href="https://smile.amazon.com/Linguistic-Bodies-Continuity-between-Language/dp/0262038161/ref=sr_1_2?keywords=linguistic+bodies&amp;qid=1638114086&amp;sr=8-2">Linguistic Bodies</a> (amazon), by Ezequiel A. Di Paolo, Elena Clair Cuffari, Hanne De Jaegher, 2018</p>
  86. <p>“It is not so much that we are persons, as that we are constantly personing.” Avdi Grimm, <a href="https://www.youtube.com/watch?v=k-Q_dXVQM1c">No Return: Moving Beyond Transactions</a> (video), Nordic.js 2019</p>
  87. </article>
  88. <hr>
  89. <footer>
  90. <p>
  91. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  92. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  93. </svg> Accueil</a> •
  94. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  95. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  96. </svg> Suivre</a> •
  97. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  98. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  99. </svg> Pro</a> •
  100. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  101. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  102. </svg> Email</a> •
  103. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  104. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  105. </svg> Légal</abbr>
  106. </p>
  107. <template id="theme-selector">
  108. <form>
  109. <fieldset>
  110. <legend><svg class="icon icon-brightness-contrast">
  111. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  112. </svg> Thème</legend>
  113. <label>
  114. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  115. </label>
  116. <label>
  117. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  118. </label>
  119. <label>
  120. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  121. </label>
  122. </fieldset>
  123. </form>
  124. </template>
  125. </footer>
  126. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  127. <script>
  128. function loadThemeForm(templateName) {
  129. const themeSelectorTemplate = document.querySelector(templateName)
  130. const form = themeSelectorTemplate.content.firstElementChild
  131. themeSelectorTemplate.replaceWith(form)
  132. form.addEventListener('change', (e) => {
  133. const chosenColorScheme = e.target.value
  134. localStorage.setItem('theme', chosenColorScheme)
  135. toggleTheme(chosenColorScheme)
  136. })
  137. const selectedTheme = localStorage.getItem('theme')
  138. if (selectedTheme && selectedTheme !== 'undefined') {
  139. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  140. }
  141. }
  142. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  143. window.addEventListener('load', () => {
  144. let hasDarkRules = false
  145. for (const styleSheet of Array.from(document.styleSheets)) {
  146. let mediaRules = []
  147. for (const cssRule of styleSheet.cssRules) {
  148. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  149. continue
  150. }
  151. // WARNING: Safari does not have/supports `conditionText`.
  152. if (cssRule.conditionText) {
  153. if (cssRule.conditionText !== prefersColorSchemeDark) {
  154. continue
  155. }
  156. } else {
  157. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  158. continue
  159. }
  160. }
  161. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  162. }
  163. // WARNING: do not try to insert a Rule to a styleSheet you are
  164. // currently iterating on, otherwise the browser will be stuck
  165. // in a infinite loop…
  166. for (const mediaRule of mediaRules) {
  167. styleSheet.insertRule(mediaRule.cssText)
  168. hasDarkRules = true
  169. }
  170. }
  171. if (hasDarkRules) {
  172. loadThemeForm('#theme-selector')
  173. }
  174. })
  175. </script>
  176. </body>
  177. </html>