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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="en">
  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>We Need to Talk About the Front Web (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. <!-- Is that even respected? Retrospectively? What a shAItshow…
  28. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  29. <meta name="robots" content="noai, noimageai">
  30. <!-- Documented, feel free to shoot an email. -->
  31. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  32. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  33. <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>
  34. <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>
  35. <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>
  36. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  37. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  38. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  39. <script>
  40. function toggleTheme(themeName) {
  41. document.documentElement.classList.toggle(
  42. 'forced-dark',
  43. themeName === 'dark'
  44. )
  45. document.documentElement.classList.toggle(
  46. 'forced-light',
  47. themeName === 'light'
  48. )
  49. }
  50. const selectedTheme = localStorage.getItem('theme')
  51. if (selectedTheme !== 'undefined') {
  52. toggleTheme(selectedTheme)
  53. }
  54. </script>
  55. <meta name="robots" content="noindex, nofollow">
  56. <meta content="origin-when-cross-origin" name="referrer">
  57. <!-- Canonical URL for SEO purposes -->
  58. <link rel="canonical" href="https://gericci.me/we-need-to-talk-about-the-front-web-5.html">
  59. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  60. <article>
  61. <header>
  62. <h1>We Need to Talk About the Front Web</h1>
  63. </header>
  64. <nav>
  65. <p class="center">
  66. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  67. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  68. </svg> Accueil</a> •
  69. <a href="https://gericci.me/we-need-to-talk-about-the-front-web-5.html" title="Lien vers le contenu original">Source originale</a>
  70. <br>
  71. Mis en cache le 2024-01-09
  72. </p>
  73. </nav>
  74. <hr>
  75. <p>In the previous articles of this series, we have seen
  76. <a href="we-need-to-talk-about-the-front-web-2.html">
  77. how and why the web is great</a>,
  78. <a href="we-need-to-talk-about-the-front-web-3.html">
  79. what keeps getting wrong with the front web</a>, and
  80. after <a href="we-need-to-talk-about-the-front-web-4.html">
  81. exploring the reasons</a> why we keep tempering with the front web,
  82. let's study some clues to help fixing it.
  83. </p>
  84. <h3>Promote a proper front web development training</h3>
  85. <p>I can't stress it enough! I strongly believe that the main
  86. source of all the problems we have with the front web come from
  87. a <strong>non-adapted curriculum and the way the web is taught</strong>.
  88. </p>
  89. <p>I don't believe that those who want to work with web development
  90. start their education course — or start studying by their own —
  91. already despising HTML and CSS. This negative bias must come later
  92. on.
  93. </p>
  94. <p>I'm mentoring today 2 trainees, and when I've checked their
  95. curriculum, HTML and CSS is a very small part of it, quickly covered.
  96. Web accessibility is never mentioned, but React, Docker, Node.js...
  97. And I swear,
  98. they're always surprised when they realise they are going to learn
  99. HTML and CSS with me!
  100. </p>
  101. <p>All gets worse once we realize that those who are
  102. teaching the future front web developers are also developers
  103. that have come from the same flawed curriculum, with
  104. the same prejudices against the front, and the same lack
  105. of proper knowledge of the nature of the web.</p>
  106. <p>In their education, the <strong>advantages and singularities
  107. of the front web disappear</strong> in favour of tools and
  108. “higher” goals as back development.
  109. </p>
  110. <p>A big effort must be done to reverse this long, old trend.</p>
  111. <h3>End the Fullstack</h3>
  112. <p>Maybe one single person can do front <strong>and</strong> back
  113. development very well, but the fullstack development was created exactly because
  114. the front web is despised. But if we are serious about what we do,
  115. we must face the fact that <strong>both developments are very demanding</strong>,
  116. — no, HTML and CSS can not be quickly and easily learned —
  117. and one of them will surely suffer in a tight-schedule project,
  118. and we all know that it is almost always the front that does, and
  119. we finish with a bad HTML and third-party tools to deal with CSS.
  120. </p>
  121. <h3>Promote exchanges and collaborative work between designers and developers</h3>
  122. <p>The front web impacts directly the user experience. If front developers
  123. are not involved in the design process, they will simply focus on
  124. their tasks and forget about the final user. That's why it is important to
  125. make the development team work closer with designers.
  126. </p>
  127. <blockquote>
  128. <p>Front-end development is not about solving back-end
  129. technology problems. It should be about making sure a product’s
  130. user experience differentiates the product in its marketplace.</p>
  131. <p>– <a href="https://www.uxmatters.com/authors/archives/2007/07/jim_nieters.php">
  132. Jim Nieters</a>, Chief User Experience Strategist at Experience Outcomes</p>
  133. </blockquote>
  134. <p>If front web developers work closer to the users' needs and problems,
  135. if they feel more implicated in the user experience, they will
  136. understand the impact of what they are building and will
  137. naturally adopt the strenghts of the front web.
  138. </p>
  139. <h3>Conclusion</h3>
  140. <p>The death of the web has been announced more times that I can count,
  141. but the web is open, standard, universal, hard to kill. So, we'd better
  142. take care of it.
  143. </p>
  144. <p>Maybe, in order to fix the front web, we have to fix human nature:
  145. make things less about money and self-satisfaction, and more about
  146. improving people's lives and understanding the impact of what we are creating.
  147. </p>
  148. </article>
  149. <hr>
  150. <footer>
  151. <p>
  152. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  153. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  154. </svg> Accueil</a> •
  155. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  156. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  157. </svg> Suivre</a> •
  158. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  159. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  160. </svg> Pro</a> •
  161. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  162. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  163. </svg> Email</a> •
  164. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  165. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  166. </svg> Légal</abbr>
  167. </p>
  168. <template id="theme-selector">
  169. <form>
  170. <fieldset>
  171. <legend><svg class="icon icon-brightness-contrast">
  172. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  173. </svg> Thème</legend>
  174. <label>
  175. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  176. </label>
  177. <label>
  178. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  179. </label>
  180. <label>
  181. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  182. </label>
  183. </fieldset>
  184. </form>
  185. </template>
  186. </footer>
  187. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  188. <script>
  189. function loadThemeForm(templateName) {
  190. const themeSelectorTemplate = document.querySelector(templateName)
  191. const form = themeSelectorTemplate.content.firstElementChild
  192. themeSelectorTemplate.replaceWith(form)
  193. form.addEventListener('change', (e) => {
  194. const chosenColorScheme = e.target.value
  195. localStorage.setItem('theme', chosenColorScheme)
  196. toggleTheme(chosenColorScheme)
  197. })
  198. const selectedTheme = localStorage.getItem('theme')
  199. if (selectedTheme && selectedTheme !== 'undefined') {
  200. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  201. }
  202. }
  203. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  204. window.addEventListener('load', () => {
  205. let hasDarkRules = false
  206. for (const styleSheet of Array.from(document.styleSheets)) {
  207. let mediaRules = []
  208. for (const cssRule of styleSheet.cssRules) {
  209. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  210. continue
  211. }
  212. // WARNING: Safari does not have/supports `conditionText`.
  213. if (cssRule.conditionText) {
  214. if (cssRule.conditionText !== prefersColorSchemeDark) {
  215. continue
  216. }
  217. } else {
  218. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  219. continue
  220. }
  221. }
  222. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  223. }
  224. // WARNING: do not try to insert a Rule to a styleSheet you are
  225. // currently iterating on, otherwise the browser will be stuck
  226. // in a infinite loop…
  227. for (const mediaRule of mediaRules) {
  228. styleSheet.insertRule(mediaRule.cssText)
  229. hasDarkRules = true
  230. }
  231. }
  232. if (hasDarkRules) {
  233. loadThemeForm('#theme-selector')
  234. }
  235. })
  236. </script>
  237. </body>
  238. </html>