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 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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>
  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>Marxian Alienation And Web Development (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="#f0f0ea">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f0f0ea">
  26. <!-- Documented, feel free to shoot an email. -->
  27. <link rel="stylesheet" href="/static/david/css/style_2020-06-19.css">
  28. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  29. <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>
  30. <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>
  31. <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>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <script type="text/javascript">
  36. function toggleTheme(themeName) {
  37. document.documentElement.classList.toggle(
  38. 'forced-dark',
  39. themeName === 'dark'
  40. )
  41. document.documentElement.classList.toggle(
  42. 'forced-light',
  43. themeName === 'light'
  44. )
  45. }
  46. const selectedTheme = localStorage.getItem('theme')
  47. if (selectedTheme !== 'undefined') {
  48. toggleTheme(selectedTheme)
  49. }
  50. </script>
  51. <meta name="robots" content="noindex, nofollow">
  52. <meta content="origin-when-cross-origin" name="referrer">
  53. <!-- Canonical URL for SEO purposes -->
  54. <link rel="canonical" href="https://heydonworks.com/article/marxian-alienation-and-web-development/">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Marxian Alienation And Web Development</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://heydonworks.com/article/marxian-alienation-and-web-development/" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <main>
  68. <p>We who work in web development are getting more comfortable with talking about burnout. This is a good thing, or it would be if we were prepared to acknowledge what burnout <em>really</em> represents.</p>
  69. <p>Burnout is not just overwork, or the ensuing exhaustion. Some of you will already know this. It is also not failing, or not getting anywhere. Because some things are worth trying—and are fulfilling to try—even if they don't succeed.</p>
  70. <p>Burnout is where your work isn't yours. It's when you give yourself, but what you give is not allowed to be you. Your energy, your passion, your <em>value</em> co-opted, corrupted, and erased.</p>
  71. <p>If you work in a capitalist organization, you will experience burnout. You may be well-paid, work with a diverse and friendly team, and feel secure. But so long as what you are doing is, ultimately, being ground down into mere profit? The burnout is coming.</p>
  72. <p>Burnout is what Marx called alienation. It's when a worker becomes estranged from their work. It sounds like a big, grand thing, but it happens every day, in small ways. As a web designer or developer burnout comes calling when you try to do <em>good</em> work, but you're not allowed.</p>
  73. <ul><li>You want to make the app more performant; your boss wants to fill it full of third party trackers</li><li>You want to make the app more accessible; your boss wants you to focus on the ‘able market’ instead</li><li>You want to word the app more clearly; your boss wants to <em>trick</em> users with misleading language</li></ul>
  74. <p>If you are a good developer, and a good person, asked to do shit work, you will burn out. You will feel yourself turning into burning shit.</p>
  75. <p>It's not a nice experience, but it's not an uncommon one. In fact, it's one of the more persistent and prevalent features of capitalism. It's simply not possible to reconcile your desire to do good, for your users, with the organization's monomaniacal desire to siphon money to shareholders, no matter the costs or consequences.</p>
  76. <p>And 100,000 ping pong tables, awards, charitable donations, and free lunches won't make up for one jot of it. If you are working for a capitalist organization, you are working for a bad one. It doesn't make <em>you</em> a capitalist, or a bad person. But it will make you vulnerable to burnout.</p>
  77. <p>If you struggle with burnout, you are not alone. It's the ones who don't struggle with it, who need no more than a big paycheck and a pat on the back, who bother me.</p>
  78. <p>But there's enough of us that we can ignore them. In threads, forums, meetups, and conferences around the world you'll find developers, people, who've had these same experiences, and felt this way. By finding each other, and working together, we can not only make a better web, but a better world. One we can be proud to have worked on.</p>
  79. <p>For now, let's just keep on talking. We have a really good, public, unproprietary, and free means of doing that.</p>
  80. <p><hr/><p>Side note: I have been compiling my grievances (which are many) about capitalism, and its current state, into an accessible illustrated guide, called <em><strong><a href="https://www.indiegogo.com/projects/bye-bye-billionaires/x/23096336#/">Bye Bye, Billionaires</a></strong></em>. It's up on <a href="https://www.indiegogo.com/projects/bye-bye-billionaires/x/23096336#/">Indiegogo</a>.</p></p>
  81. </main>
  82. </article>
  83. <hr>
  84. <footer>
  85. <p>
  86. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  87. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  88. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  89. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  90. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  91. </p>
  92. <template id="theme-selector">
  93. <form>
  94. <fieldset>
  95. <legend>Thème</legend>
  96. <label>
  97. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  98. </label>
  99. <label>
  100. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  101. </label>
  102. <label>
  103. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  104. </label>
  105. </fieldset>
  106. </form>
  107. </template>
  108. </footer>
  109. <script type="text/javascript">
  110. function loadThemeForm(templateName) {
  111. const themeSelectorTemplate = document.querySelector(templateName)
  112. const form = themeSelectorTemplate.content.firstElementChild
  113. themeSelectorTemplate.replaceWith(form)
  114. form.addEventListener('change', (e) => {
  115. const chosenColorScheme = e.target.value
  116. localStorage.setItem('theme', chosenColorScheme)
  117. toggleTheme(chosenColorScheme)
  118. })
  119. const selectedTheme = localStorage.getItem('theme')
  120. if (selectedTheme && selectedTheme !== 'undefined') {
  121. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  122. }
  123. }
  124. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  125. window.addEventListener('load', () => {
  126. let hasDarkRules = false
  127. for (const styleSheet of Array.from(document.styleSheets)) {
  128. let mediaRules = []
  129. for (const cssRule of styleSheet.cssRules) {
  130. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  131. continue
  132. }
  133. // WARNING: Safari does not have/supports `conditionText`.
  134. if (cssRule.conditionText) {
  135. if (cssRule.conditionText !== prefersColorSchemeDark) {
  136. continue
  137. }
  138. } else {
  139. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  140. continue
  141. }
  142. }
  143. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  144. }
  145. // WARNING: do not try to insert a Rule to a styleSheet you are
  146. // currently iterating on, otherwise the browser will be stuck
  147. // in a infinite loop…
  148. for (const mediaRule of mediaRules) {
  149. styleSheet.insertRule(mediaRule.cssText)
  150. hasDarkRules = true
  151. }
  152. }
  153. if (hasDarkRules) {
  154. loadThemeForm('#theme-selector')
  155. }
  156. })
  157. </script>
  158. </body>
  159. </html>