<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alexandre Beaugrand</title>
    <description>The latest articles on DEV Community by Alexandre Beaugrand (@wanegain3).</description>
    <link>https://dev.to/wanegain3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F503615%2F99d26f0f-bd67-44f2-ae54-f13452aa95d0.jpg</url>
      <title>DEV Community: Alexandre Beaugrand</title>
      <link>https://dev.to/wanegain3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wanegain3"/>
    <language>en</language>
    <item>
      <title>Code Ergonomics : 5 tendances qui simplifieront le dev.</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Wed, 25 Nov 2020 10:54:58 +0000</pubDate>
      <link>https://dev.to/wanegain3/code-ergonomics-5-tendances-qui-simplifieront-le-dev-3ggi</link>
      <guid>https://dev.to/wanegain3/code-ergonomics-5-tendances-qui-simplifieront-le-dev-3ggi</guid>
      <description>&lt;p&gt;&lt;em&gt;Version Française / &lt;a href="https://dev.to/wanegain3/code-ergonomics-5-trends-that-will-simplify-dev-4b0f"&gt;English version here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prévisions sur l’évolution du développement , basées sur TRIZ
&lt;/h2&gt;

&lt;p&gt;Les &lt;a href="https://fr.wikipedia.org/wiki/TRIZ#Lois_d'%C3%A9volution_des_syst%C3%A8mes_techniques"&gt;Lois d’évolutions de TRIZ&lt;/a&gt; expliquent que &lt;a href="https://techmeup.org/le-developpement-va-se-simplifier/"&gt;le développement va se simplifier&lt;/a&gt; et tendre vers un idéal. En m’inspirant de cette méthode d’innovation, je pense que cette simplification se fera par 2 moyens principaux, déclinés en 5 tendances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplification par réduction des erreurs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;visualisation ergonomique&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;abstraction&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Simplification par réduction des tâches à accomplir&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;unification&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;automatisation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;délégation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je vous propose de détailler ces 5 tendances et de voir en quoi elles nous permettent d’imaginer l’évolution du développement. A titre d’exemple, je vous proposerais d’imaginer l’évolution des tests unitaires.&lt;/p&gt;

&lt;h2&gt;
  
  
  Visualisation ergonomique
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Visualisation ergonomique = user-friendly
&lt;/h3&gt;

&lt;p&gt;Linux est gratuit, open-source, rapide, et secure comparé à  Windows ou OSX qui pourtant  sont bien plus populaires pour les utilisateurs lambda.&lt;/p&gt;

&lt;p&gt;Ce n’est pas un hasard. &lt;strong&gt;Une interface graphique bien pensée est plus compréhensible, plus mémorisable, plus intuitive et donne une bonne vue d’ensemble des opérations possibles.&lt;/strong&gt; Windows et OSX sont bien plus &lt;em&gt;visuellement ergonomiques&lt;/em&gt;, plus &lt;em&gt;user-friendly&lt;/em&gt;, et plus &lt;em&gt;compatibles *que Linux, qu’il soit utilisé en ligne de commande ou en GUI. **Leur interface graphique bien pensée les rend tout simplement *plus simples *à utiliser&lt;/em&gt;*, ce qui est le nerf de la guerre dans l’adoption d’un techno, surtout par des non-techs.&lt;/p&gt;

&lt;p&gt;A l’inverse, la CLI nécessite la plupart du temps un apprentissage, et/ou une doc de référence, et n’est pas intuitive. &lt;em&gt;Oui&lt;/em&gt;, elle est utile dans certains cas, voire incontournable pour certaines opérations qui sont bien plus rapides à faire avec une bonne ligne de commande plutôt que par une interface. Mais je suis convaincu que &lt;strong&gt;trop souvent, la CLI n’est pas le bon choix, et relève d’une implémentation de fonctionnalité qui n’a pas été jusqu’au bout : il manque un layer graphique.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Visualisation ergonomique = moins d’erreurs
&lt;/h3&gt;

&lt;p&gt;**Par ailleurs, une interface graphique permet d’éviter les erreurs qui pourraient être commises via du code ou via une ligne de commande. **Cela est dû au fait qu’elles peuvent facilement contraindre les actions ou les options possibles. On le voit par exemple au travers des applications No ou LowCode. Dans &lt;a href="https://bubble.io/welcome"&gt;bubble.io&lt;/a&gt;, si nous assignons une action à un bouton, ça ressemble à ça :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--766rfRQH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502b69792." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--766rfRQH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502b69792." alt="Bubble.io"&gt;&lt;/a&gt;&lt;/p&gt;
bubble.io



&lt;p&gt;Il y a une liste déroulante qui permet de choisir le type d’évènement à détecter (clic). Plusieurs autres qui permettent de choisir les actions à réaliser (identifier, envoyer un e-mail, rediriger vers l’accueil). *&lt;em&gt;Non seulement c’est intuitif, mais ces listes déroulantes, contrairement au code, empêchent les erreurs de syntaxes, l’appel de fonctions inadéquates, ou le passages de paramètres incohérents. *&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Visualisation ergonomique = gain de temps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Les interfaces user-friendly font également gagner du temps.&lt;/strong&gt; Elles pourront même en faire gagner aux devs, et ce  &lt;em&gt;même s’ils pourraient s’en passer car ils ont la capacité d’apprendre la CLI ou les langages&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Car là n’est pas la question : nous cherchons à savoir ce qui est le plus efficace pour maitriser une API en partant de 0. Si vous êtes un virtuose du shell ou de la CLI d’un framework, je ne doute pas dans ce cas que vous pouvez faire les choses rapidement.&lt;/p&gt;

&lt;p&gt;Mais &lt;em&gt;vous avez dû apprendre ces commandes&lt;/em&gt;, ce qui représente un coût non-négligeable en termes de temps. &lt;strong&gt;Et lorsque nous parlons de Code Ergonomy, nous cherchons à réduire ce coût. Hors une API inconnue est bien plus rapide à maitriser lorsqu’elle est visuelle que lorsque elle est utilisable par du code ou par une CLI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Prenons l’exemple de la mise en place d’un environnement de développement. A l’heure actuelle, on peut utiliser une première ligne de commande pour cloner un projet git, ou pour lancer la création d’un projet type. Il faut ensuite lancer une nouvelle commande pour lancer l’importation des modules. Puis en lancer une autre pour servir le projet, avec entre temps une possible modification de webpack ou autre bundler afin de coller à nos exigences en termes de transpilation, de linting, de hot-reloading, etc. Dans &lt;a href="https://codesandbox.io"&gt;codesandbox.io&lt;/a&gt;, tout cela est visuel, et nécessite 3 clics. Bref, on gagne du temps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ih4cYtmB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502baa06b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ih4cYtmB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502baa06b.png" alt="configuration de l’environnement avec codesandbox.io"&gt;&lt;/a&gt;&lt;/p&gt;
configuration de l’environnement avec codesandbox.io



&lt;h3&gt;
  
  
  Est-ce aux devs de réaliser des UI efficaces ?
&lt;/h3&gt;

&lt;p&gt;Ce n’est pas l’idéal, mais lorsque l’on travaille sur un projet solo ou dans une petite équipe qui n’a pas de graphiste ou d’expert UX, les devs sont amenés à concevoir des interfaces bien pensées.&lt;/p&gt;

&lt;p&gt;Trop souvent pourtant, ils ont tendance à négliger l’ergonomie visuelle, considérant que ce n’est pas de leur ressort et que leur valeur-ajoutée réside dans la mise en place de fonctionnalités. Il y a un &lt;em&gt;cloisonnement inopportun&lt;/em&gt; entre ce qui relève de ingénierie et ce qui relève du graphisme. &lt;/p&gt;

&lt;p&gt;Pourtant, **à la Renaissance, il n’y avait pas de cloisonnement entre ce qui relevait de la Science ou de l’Art. On cherchait à être complet. **Je pense donc que les devs gagneraient à se confronter à l’exercice de création d’une UI efficace et bien pensée.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IRrdqU32--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502bdd110." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IRrdqU32--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502bdd110." alt="Léonard De Vinci : scientifique, ingénieur, inventeur, anatomiste, peintre, sculpteur, architecte, urbaniste, botaniste, musicien, poète, philosophe et écrivain"&gt;&lt;/a&gt;&lt;/p&gt;
Léonard De Vinci : scientifique, ingénieur, inventeur, anatomiste, peintre, sculpteur, architecte, urbaniste, botaniste, musicien, poète, philosophe et écrivain



&lt;h2&gt;
  
  
  Abstraction
&lt;/h2&gt;

&lt;p&gt;Utiliser un langage de haut-niveau, et séparer la description d’une application métier, de son moteur, permet de bénéficier des évolutions permanentes des patterns et syntaxes sans avoir à se former continuellement : &lt;strong&gt;car l’application reste optimisée sans avoir à être réécrite par leurs devs&lt;/strong&gt;. Cela nécessite un article à part entière &lt;a href="https://techmeup.org/les-developpeurs-nauront-plus-a-optimiser-leurs-applications/"&gt;que vous trouverez ici&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unification
&lt;/h2&gt;

&lt;p&gt;Dans les lois d’évolution de TRIZ, on observe de multiples tendances. L’une d’elle concerne la fusion des composants d’un système. Voyez plutôt les tendances “Using dissimilar Elements” ou “Using Similar Elements” dans ce graphique.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tG1xtl0q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502c94cf2." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tG1xtl0q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502c94cf2." alt="Tiré de l’excellent livre Triz for Engineers de Karen Gadd, page 444."&gt;&lt;/a&gt;&lt;/p&gt;
Tiré de l’excellent livre Triz for Engineers de Karen Gadd, page 444.



&lt;p&gt;Les multiples composants du développement vont s’unifier pour devenir un environnement de programmation tout-en-un, un peu comme Flash il y a des années (bien qu’il manquait le côté serveur), &lt;a href="https://www.meteor.com/"&gt;Meteor&lt;/a&gt;, &lt;a href="https://www.unrealengine.com"&gt;Unreal Engine&lt;/a&gt;, ou &lt;a href="https://unity.com"&gt;Unity&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xQHsu6uR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502ce2a7c." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xQHsu6uR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502ce2a7c." alt="Unreal engine"&gt;&lt;/a&gt;&lt;/p&gt;
Unreal engine



&lt;p&gt;*&lt;em&gt;Il y aura ainsi une fusion des multiples outils utilisés aujourd’hui séparément : bundler, gestionnaire de modules, versioning, transpiler, CLI, etc. Tout sera intégré dans l’éditeur de code, le plus souvent sous forme d’options, de paramètres, et de menus. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Là encore, on le voit bien dans &lt;a href="https://codesandbox.io/"&gt;codesandbox.io&lt;/a&gt; ainsi que dans visual studio code qui intègre un terminal, une console de debug, et toutes sortes de modules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7bSd841C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d320b8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7bSd841C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d320b8.png" alt="Visual Studio Code"&gt;&lt;/a&gt;&lt;/p&gt;
Visual Studio Code



&lt;p&gt;&lt;em&gt;La loi d’évolution n°6 de TRIZ — Transition vers le super système&lt;/em&gt;, spécifie également qu’un système devient une partie de son super-système, c’est à dire de son environnement. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ainsi l’environnement de programmation (système) sera intégré au cloud (super-système).&lt;/strong&gt; &lt;strong&gt;Il n’y aura donc plus non-plus de séparation local / distant. Tout sera en ligne.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;On le voit déjà avec &lt;a href="https://github.com/features/codespaces"&gt;CodeSpaces de GitHub&lt;/a&gt; (encore en version beta) qui est un environnement de développement intégré au cloud :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6zAr2Vva--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d7563d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6zAr2Vva--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d7563d.png" alt="Codespaces"&gt;&lt;/a&gt;&lt;/p&gt;
Codespaces



&lt;h2&gt;
  
  
  Automatisation
&lt;/h2&gt;

&lt;p&gt;C’est surement le point le plus important. Grâce à l’automatisation, moins, voir plus du tout de configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plus de configuration d’environnement
&lt;/h3&gt;

&lt;p&gt;A la manière de &lt;a href="https://codesandbox.io/"&gt;codesandbox&lt;/a&gt; ou grâce au tree-shaking de &lt;a href="https://parceljs.org/"&gt;parceljs,&lt;/a&gt; capable de s’autoconfigurer en analysant lui même le code source et les dépendances d’un projet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plus de configuration du versioning
&lt;/h3&gt;

&lt;p&gt;Utiliser la ligne de commande peut être amélioré. &lt;strong&gt;Les sauvegardes peuvent être partiellement automatisées&lt;/strong&gt;, un peu comme les sauvegardes incrémentielles de Synology Cloud Backup ou dans la TimeMachine d’Apple :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cXadZAiM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502dab7d4." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cXadZAiM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502dab7d4." alt="Apple Time Machine permet de parcourir la frise du temps à droite et de retrouver l’état d’un projet passé par de multiples fenêtres superposées"&gt;&lt;/a&gt;&lt;/p&gt;
Apple Time Machine permet de parcourir la frise du temps à droite et de retrouver l’état d’un projet passé par de multiples fenêtres superposées



&lt;p&gt;J’ouvre une parenthèse pour préciser que visuellement, le versioning pourrait s’inspirer  du gestionnaire d’historique de Wordpress ou de la suite Adobe, mais avec les capacités de forks, de merge et autres subtilités de git. Il y a beaucoup de possibilité d’évolutions, mais en attendant, des outils comme &lt;a href="https://www.gitkraken.com/"&gt;Git Kraken&lt;/a&gt; ou &lt;a href="https://www.git-tower.com/windows"&gt;Git Tower&lt;/a&gt; proposent un UI améliorée.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gCuxGpGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e1e0db.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gCuxGpGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e1e0db.png" alt="Git Kraken"&gt;&lt;/a&gt;&lt;/p&gt;
Git Kraken



&lt;h3&gt;
  
  
  Plus de configuration du cloud ni de déploiements fastidieux
&lt;/h3&gt;

&lt;p&gt;A la manière de &lt;a href="https://softaculous.com/"&gt;softaculous,&lt;/a&gt; qui permet de mettre en place ou de cloner un Wordpress ou autre système en un clic, &lt;strong&gt;les clouds pourraient être automatisés&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Uhz-sAnZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e63cda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Uhz-sAnZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e63cda.png" alt="Softaculous"&gt;&lt;/a&gt;&lt;/p&gt;
Softaculous



&lt;p&gt;**Les hébergeur pourraient techniquement détecter le boilerplate et les fichiers de configuration de nos projets, en déduire toutes les dépendances, les mettre en place et les configurer. **Après tout nous disions que &lt;a href="https://parceljs.org/"&gt;Parcel&lt;/a&gt; est capable de le faire pour les environnements de dev.&lt;/p&gt;

&lt;p&gt;Par ailleurs, le déploiement pourraient se faire via un bouton [Déployer] dans l’IDE. Voir &lt;a href="https://github.com/features/codespaces"&gt;Codespaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Les services de Cloud ont encore de larges possibilités d’évolutions, car ils ne se sont pas assez adaptés aux nouvelles pratiques du développement front. Ils devraient s’automatiser car cela rendrait &lt;strong&gt;un vrai service&lt;/strong&gt; aux développeurs, qui sont leurs utilisateurs et clients typiques. Ils amélioreraient ainsi considérablement leurs parts de marché.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Plus de programmation des tests unitaires&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Au-delà du débat sur l’utilité des tests unitaires, dont nous nous sommes passés pendant des dizaines d’années alors que beaucoup d’applications restaient de bonne qualité (de part les tests utilisateurs), nous sommes encore trop bas niveau quand nous les écrivons.&lt;/p&gt;

&lt;p&gt;**Ces tests pourraient être partiellement automatisés. **J’aborderais ce cas plus en détail dans la dernière partie de cet article.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Mais surtout : moins, voir pas du tout, de code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;*&lt;em&gt;L’app pourrait être décrite soit par un langage de haut-niveau, soit visuellement, et traduite par un moteur d’interprétation. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On peut encore citer ici les plateformes No ou Low code. L’exemple le plus parlant à mon sens est encore &lt;a href="https://bubble.io/welcome"&gt;bubble.io&lt;/a&gt; qui reste très flexible et n’est pas cantonné à la création de sites web vitrines comme beaucoup pourraient le penser. Testez donc le tutoriels de 5min pour en avoir une idée. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cette séparation Description / Moteur est la condition pour une automatisation efficace.&lt;/strong&gt; On la trouve dans les SGBD, avec le SQL qui peut être combiné aux moteurs MyISAM ou InnoDB par exemple. &lt;/p&gt;

&lt;p&gt;Il y a beaucoup de chose à dire à ce sujet, que je traite avec l’Abstraction, &lt;a href="https://techmeup.org/les-developpeurs-nauront-plus-a-optimiser-leurs-applications/"&gt;dans cet article&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Délégation
&lt;/h2&gt;

&lt;p&gt;Actuellement les devs s’occupent a peu de tout : de  l’architecture, de la configuration de l’environnement, du développement, des tests, du débogage, du versioning, de la configuration serveur, et des mises en ligne. Comment tout maitriser ? Peut-on être spécialiste en tout ? Acceptons-nous d’être spécialisé en rien ? Ou peut faire plus optimisé ?&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Les tâches qui incombent aux développeurs vont se réduire : ce qui ne pourra être automatisé sera simplifié. Ce qui ne pourra pas non plus être simplifié sera confié à des spécialistes. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Je pense particulièrement à ce qui relève de la gestion du cloud, dont j’ai parlé plus haut : si un hébergeur offre un déploiement *réellement *en un clic, adapté aux architectures les plus courantes, il remportera de nombreuses parts de marché.&lt;/p&gt;

&lt;p&gt;Par ailleurs, au sein même de la communauté dev., je pense qu’&lt;strong&gt;une distinction entre les dev. créateurs d’application et les dev. créateurs d’outils sera nécessaire, afin de se spécialiser dans l’apprentissage de ce qui nous est réellement utile&lt;/strong&gt;. Pour ne pas me répéter, je vous invite de nouveau à lire &lt;a href="https://techmeup.org/les-developpeurs-nauront-plus-a-optimiser-leurs-applications/"&gt;cet article&lt;/a&gt; pour plus de détails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemple : évolution des tests unitaires
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Essayons de voir à travers cet exemple comment ces 5 tendances nous permettent d’imaginer l’évolution des tests unitaires.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Le problème
&lt;/h3&gt;

&lt;p&gt;Le problème, c’est qu’en plus d’être rébarbative, l’écriture des tests unitaires double grosso-modo le temps et donc le coût de développement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Axe d’évolution, à partir des 5 principes
&lt;/h3&gt;

&lt;p&gt;Les tests seraient intégrés à l’IDE qui pourrait auto-tester un projet (&lt;em&gt;unification *des composants et *délégation *des tests à l’IDE) en appuyant sur un bouton plutôt que par une CLI (*abstraction&lt;/em&gt;, &lt;em&gt;visualisation&lt;/em&gt;). &lt;/p&gt;

&lt;p&gt;L’IDE testerait automatiquement (&lt;em&gt;automatisation&lt;/em&gt;), pour chaque composant d’un interface, toutes les évènements possibles (un bouton serait cliqué, double-cliqué, survolé, tandis ce qu’un formulaire serait envoyé, remis à zéro, etc.). Les réactions aux évènements seraient analysées et cela permettrait de mettre en valeur les incohérences ou conflits de l’application.&lt;/p&gt;

&lt;p&gt;Par exemple, l’IDE pourrait se rendre compte qu’une même fonction serait invoquée plusieurs fois mais avec des arguments de types différents, ou bien qu’elle retournerait des valeurs de types différents. &lt;/p&gt;

&lt;p&gt;Il en résulterait alors une liste de ces incohérences trouvées dans une interface (&lt;em&gt;visualisation&lt;/em&gt;), qui nous proposerait de trancher sur l’input ou l’output réellement attendu. Cela se rapprocherait de GitKraken lorsqu’il nous demande de trancher lors d’un merge conflict, mais ici, le choix se ferait le plus souvent au moyen de listes déroulantes. &lt;/p&gt;

&lt;p&gt;Les résolutions de conflits permettraient ainsi de faire évoluer le fichier de configuration qu’à ce jour nous créons à la main.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Merci de m’avoir lu jusqu’ici.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>programming</category>
      <category>tooling</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Code Ergonomics : 5 trends that will simplify dev.</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Wed, 25 Nov 2020 10:52:00 +0000</pubDate>
      <link>https://dev.to/wanegain3/code-ergonomics-5-trends-that-will-simplify-dev-4b0f</link>
      <guid>https://dev.to/wanegain3/code-ergonomics-5-trends-that-will-simplify-dev-4b0f</guid>
      <description>&lt;p&gt;&lt;em&gt;English version / &lt;a href="https://dev.to/wanegain3/code-ergonomics-5-tendances-qui-simplifieront-le-dev-3ggi"&gt;Version Française ici&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Forecasts on dev evolution, based on TRIZ
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/Laws_of_technical_systems_evolution"&gt;TRIZ laws of technical systems evolution&lt;/a&gt; show that &lt;a href="https://techmeup.org/en/development-will-become-simpler/"&gt;development will become simpler&lt;/a&gt; and tend towards an ideal. Inspired by this method of innovation, I believe that this simplification will be done in 2 main ways, declined in 5 trends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplification by reducing errors&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ergonomic visualization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;abstraction&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Simplification by reducing tasks&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;unification&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;automation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;delegation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I propose to detail these 5 trends and see how they allow us to foresee dev evolution. As an example, I will then forecast the evolution of unit tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ergonomic visualization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ergonomic visualization = user-friendlyness
&lt;/h3&gt;

&lt;p&gt;Linux is free, open-source, fast, and secure compared to Windows or OSX which yet are much more popular for regular users.&lt;/p&gt;

&lt;p&gt;This is no coincidence. &lt;strong&gt;Windows and OSX are much more visually ergonomic, more user-friendly, and more compatible than Linux, whether used as a command line or as a GUI.&lt;/strong&gt; Their well-thought-out graphical user interface simply makes them simpler to use, which is a real asset for a tech to be adopted, especially for regular users.&lt;/p&gt;

&lt;p&gt;On the other hand, CLI requires most of the time a learning process, and/or a reference document, and is not intuitive. &lt;em&gt;Yes&lt;/em&gt;, it is useful in some cases, even unavoidable for some operations that are much faster to do with a good command line than with UI. But I'm convinced that &lt;strong&gt;too often, CLI is not the right choice, and is a feature implementation that didn't go all the way: it lacks a graphical layer.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ergonomic visualization = less errors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Furthermore, a graphical user interface avoids errors that could be made via code or via a command line.&lt;/strong&gt; This is due to the fact UI can easily constrain the possible actions or options. This is seen, for example, in No or LowCode apps. In &lt;a href="https://bubble.io/welcome"&gt;bubble.io&lt;/a&gt;, if we assign an action to a button, it looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--766rfRQH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502b69792." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--766rfRQH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502b69792." alt="Bubble.io"&gt;&lt;/a&gt;&lt;/p&gt;
Bubble.io



&lt;p&gt;There is a drop-down list that allows you to choose the type of event to detect (click), and several others that allow you to choose the actions to be performed (identify, send an e-mail, redirect to reception). &lt;strong&gt;Not only is it intuitive, but these drop-down lists, unlike code or commands, prevent syntax errors, as well as calling inappropriate functions, or passing inconsistent params.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ergonomic visualization = time saving
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;User-friendly interfaces also save time.&lt;/strong&gt; They can even save time for devs, &lt;em&gt;even though they could do without UI because they have the ability to learn CLI or languages&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Because that's not the point: we are here trying to find out what is the most efficient way to master an API starting from 0. If you are a shell master frameork CLI master, then I have no doubt you can do things quickly.&lt;/p&gt;

&lt;p&gt;But &lt;em&gt;you had to learn these commands&lt;/em&gt;, which represents a significant cost in terms of time. &lt;strong&gt;And when we talk about Code Ergonomics, we are trying to reduce this cost. It turns out an unknown API is much faster to master when it is visual than when it is operable by code or by a CLI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's take the example of setting up a dev environment. Currently, you can use a first command line to clone a git project, or to start creating a starter project. Then you need to run another command to start importing modules. Then another one to serve the project, with in the meantime a possible modification of webpack or other bundler config to fit our requirements in terms of transpilation, linting, hot-reloading, etc... In &lt;a href="https://codesandbox.io"&gt;codesandbox.io&lt;/a&gt;, all this is visual, and requires 3 clicks. Simply put, we save time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ih4cYtmB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502baa06b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ih4cYtmB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502baa06b.png" alt="Env. setup with codesandbox.io"&gt;&lt;/a&gt;&lt;/p&gt;
Env. setup with codesandbox.io



&lt;h3&gt;
  
  
  Is it devs job to make efficient UIs?
&lt;/h3&gt;

&lt;p&gt;It's not ideal, but when working on a solo project or in a small team that doesn't have a graphic designer or UX expert, devs have to design well thought-out interfaces.&lt;/p&gt;

&lt;p&gt;All too often, however, they tend to neglect UI ergonomics, considering that it is not their responsibility and that their added value lies in the implementation of functionalities. There is an "inappropriate partition" between engineering and graphic design. &lt;/p&gt;

&lt;p&gt;However, &lt;strong&gt;in the Renaissance, there was no partition between Science or Art. People tried to be complete, to master both.&lt;/strong&gt; So I think devs would benefit from trying to create efficient and well thought Uis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IRrdqU32--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502bdd110." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IRrdqU32--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502bdd110." alt="Leonardo Da Vinci : scientist, engineer, inventor, anatomist, painter, sculptor, architect, urban planner, botanist, musician, poet, philosopher and writer"&gt;&lt;/a&gt;&lt;/p&gt;
Leonardo Da Vinci : scientist, engineer, inventor, anatomist, painter, sculptor, architect, urban planner, botanist, musician, poet, philosopher and writer



&lt;h2&gt;
  
  
  Abstraction
&lt;/h2&gt;

&lt;p&gt;Using a high-level language, and separating app description from its engine, allows us to benefit from the permanent evolution of patterns and syntaxes without having to train continuously: &lt;strong&gt;because apps remain optimized without having to be rewritten&lt;/strong&gt;. This matter needs its own article &lt;a href="https://techmeup.org/en/devs-wont-need-to-optimize-their-apps/"&gt;which you can find here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unification
&lt;/h2&gt;

&lt;p&gt;In TRIZ's laws of technical systems evolution, there are multiple trends. One of them concerns the merging of system components. Please refer to the "Using dissimilar Elements" or "Using Similar Elements" trends in this graph.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tG1xtl0q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502c94cf2." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tG1xtl0q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502c94cf2." alt="From Karen Gadd's excellent book Triz for Engineers on page 444."&gt;&lt;/a&gt;&lt;/p&gt;
From Karen Gadd's excellent book Triz for Engineers on page 444.



&lt;p&gt;The many dev tools will unify to become an all-in-one programming environment, kind of like Flash years ago (although server-side was missing), &lt;a href="https://www.meteor.com/"&gt;Meteor&lt;/a&gt;, &lt;a href="https://www.unrealengine.com"&gt;Unreal Engine&lt;/a&gt;, or &lt;a href="https://unity.com"&gt;Unity&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xQHsu6uR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502ce2a7c." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xQHsu6uR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502ce2a7c." alt="Unreal engine"&gt;&lt;/a&gt;&lt;/p&gt;
Unreal engine



&lt;p&gt;&lt;strong&gt;This will merge the multiple tools that are currently used separately: bundler, module manager, versioning, transpiler, CLI, etc. Everything will be integrated into the code editor, most often in the form of options, parameters and menus.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Again, we can already see it in &lt;a href="https://codesandbox.io/"&gt;codesandbox.io&lt;/a&gt; as well as in visual studio code which integrates a terminal, a debug console, and all kinds of modules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7bSd841C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d320b8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7bSd841C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d320b8.png" alt="Visual Studio Code"&gt;&lt;/a&gt;&lt;/p&gt;
Visual Studio Code



&lt;p&gt;&lt;em&gt;The 6th TRIZ law of evolution - Transition to the supersystem&lt;/em&gt;, also specifies that a system will become part of its supersystem, i.e. its environment. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So the programming environment (system) will be integrated into the cloud (super-system). There will no longer be any local / remote separation. Everything will be online.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We already can see it with &lt;a href="https://github.com/features/codespaces"&gt;CodeSpaces from GitHub&lt;/a&gt; (still in beta version) which is a cloud IDE:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6zAr2Vva--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d7563d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6zAr2Vva--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502d7563d.png" alt="Codespaces"&gt;&lt;/a&gt;&lt;/p&gt;
Codespaces



&lt;h2&gt;
  
  
  Automation
&lt;/h2&gt;

&lt;p&gt;This is probably the most important point. Thanks to automation, most configs can be avoided.&lt;/p&gt;

&lt;h3&gt;
  
  
  No more env. config
&lt;/h3&gt;

&lt;p&gt;Like &lt;a href="https://codesandbox.io/"&gt;codesandbox&lt;/a&gt; or thanks to the tree-shaking of &lt;a href="https://parceljs.org/"&gt;parceljs&lt;/a&gt;, dev environments will be able to self-configure by analyzing projects source code and the dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  No more versioning commands
&lt;/h3&gt;

&lt;p&gt;Using the command line can be improved. &lt;strong&gt;Backups can be partially automated&lt;/strong&gt;, similar to the incremental backups in Synology Cloud Backup or Apple's TimeMachine :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cXadZAiM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502dab7d4." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cXadZAiM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502dab7d4." alt="Apple Time Machine allows to browse the timeline on the right and find the past state of a project displayed through multiple overlay windows"&gt;&lt;/a&gt;&lt;/p&gt;
Apple Time Machine allows to browse the timeline on the right and find the past state of a project displayed through multiple overlay windows



&lt;p&gt;On a side note, I'd like to specify that visually, versioning could be inspired by Wordpress or Adobe Suite's history managers, but with the added capabilities of forking, merging and other subtleties of git. There is a lot of room for improvement, but in the meantime, tools such as &lt;a href="https://www.gitkraken.com/"&gt;Git Kraken&lt;/a&gt; or &lt;a href="https://www.git-tower.com/windows"&gt;Git Tower&lt;/a&gt; offer somewhat improved UIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gCuxGpGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e1e0db.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gCuxGpGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e1e0db.png" alt="Git Kraken"&gt;&lt;/a&gt;&lt;/p&gt;
Git Kraken



&lt;h3&gt;
  
  
  No more cloud configuration or tedious deployments
&lt;/h3&gt;

&lt;p&gt;Like &lt;a href="https://softaculous.com/"&gt;softaculous&lt;/a&gt;, which allows to set up or clone a Wordpress or other system project in one click, &lt;strong&gt;clouds could be automated&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Uhz-sAnZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e63cda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Uhz-sAnZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2385-5fbd502e63cda.png" alt="Softaculous"&gt;&lt;/a&gt;&lt;/p&gt;
Softaculous



&lt;p&gt;**WebHosts could technically detect app boilerplates and config files, deduce all dependencies, auto-load them and set them up. **After all, we mentioned &lt;a href="https://parceljs.org/"&gt;Parcel&lt;/a&gt; is already able to do this for dev environments.&lt;/p&gt;

&lt;p&gt;In addition, easy deployment could be done via a single Deploy button in the IDE. Like in &lt;a href="https://github.com/features/codespaces"&gt;Codespaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cloud services still have a lot of room for evolution, as they didn't adapt well to the new practices of front-end development. They should be automated, as this would provide &lt;strong&gt;a real service&lt;/strong&gt; to developers, who are their typical users and customers. They would thus considerably improve their market share.&lt;/p&gt;

&lt;h3&gt;
  
  
  No more unit tests programming
&lt;/h3&gt;

&lt;p&gt;Beyond the debate on the usefulness of unit testing, which we didn't have to deal with for decades while many applications were still of high-quality (thanks to user testing), we are still too low-level when we code them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;These tests could be partially automated as well.&lt;/strong&gt; I will discuss this case in more detail in the last part of this article.&lt;/p&gt;

&lt;h3&gt;
  
  
  But above all: less, or not at all, code.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Apps could be described either through a high-level language or visually. Then this description could be translated by an interpretation engine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here we can also refer to No or Low-code platforms. The best example in my opinion is still &lt;a href="https://bubble.io/welcome"&gt;bubble.io&lt;/a&gt; which is very flexible and not only limited to the creation of showcase websites as many might think. I invite you to try their 5min tutorials to get an idea of its flexibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This Description / Engine separation is the prerequisite for efficient automation.&lt;/strong&gt; It can be found, for example, in DBMS, with SQL that can be combined with the MyISAM or InnoDB engines.&lt;/p&gt;

&lt;p&gt;There is much to be said on this matter, which I approach along with Abstraction, &lt;a href="https://techmeup.org/en/devs-wont-need-to-optimize-their-apps/"&gt;in this article&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delegation
&lt;/h2&gt;

&lt;p&gt;Currently devs are taking care of almost everything: architecture, environment configuration, development, testing, debugging, versioning, server configuration, and online releases. How can they master everything? Is it possible to become a specialist in all those matters? Do we accept not to be specialized in anything? Or can we make changes to optimize this situation?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Devs tasks will be reduced: what can't be automated will be simplified. What can't be simplified will be left to specialists.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm particularly thinking about cloud management, which I mentioned earlier: if a webhost offers a &lt;em&gt;real&lt;/em&gt; one-click deployment, adapted to the most common project architectures and framework, he will win a lot of market share.&lt;/p&gt;

&lt;p&gt;Last but not least, within the dev. community itself, I think that &lt;strong&gt;a distinction between devs who make apps vs devs who make devtools will be necessary, in order  for them to specialize and learn what is actually useful regarding their needs&lt;/strong&gt;. I'd like to avoid repeating myself, so I invite you to read &lt;a href="https://techmeup.org/les-developpeurs-nauront-plus-a-optimiser-leurs-applications/"&gt;this article&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: unit testing evolution
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Let's try to see through this example how these 5 trends allow us to imagine the evolution of unit testing.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;In addition to being boring, writing unit tests roughly doubles the time and therefore the cost of development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Possibilities of evolution, based on the 5 principles
&lt;/h3&gt;

&lt;p&gt;Tests would be integrated into the IDE, which would be able to self-test a project (&lt;em&gt;unification&lt;/em&gt; of components and &lt;em&gt;delegation&lt;/em&gt; of tests to the IDE) by pressing a button rather than by a CLI (&lt;em&gt;abstraction&lt;/em&gt;, &lt;em&gt;visualization&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;The IDE would automatically test (&lt;em&gt;automation&lt;/em&gt;), for each UI component, all possible events (a button would be clicked, double-clicked, hovered, while a form would be sent, reset, etc.). The reactions to those events would be analyzed and this would highlight any inconsistencies or conflicts in the application.&lt;/p&gt;

&lt;p&gt;For example, the IDE might show that the same function is invoked several times but with arguments of different types, or that its return values are of different types.&lt;/p&gt;

&lt;p&gt;The result would then be a list of these inconsistencies, display in an interface (&lt;em&gt;visualization&lt;/em&gt;), which would ask us to decide on the input/output really expected. This would be similar to GitKraken when it asks us to decide on a merge conflict, but here, the choice would most often be made though simple drop-down lists.&lt;/p&gt;

&lt;p&gt;Conflict resolution would thus automatically apply changes to the tests description files we currently create by hand.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thank you for reading me this far.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>architecture</category>
      <category>tooling</category>
      <category>programming</category>
    </item>
    <item>
      <title>Les développeurs n’auront plus à optimiser leurs applications</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Mon, 23 Nov 2020 15:58:04 +0000</pubDate>
      <link>https://dev.to/wanegain3/les-developpeurs-n-auront-plus-a-optimiser-leurs-applications-3dp5</link>
      <guid>https://dev.to/wanegain3/les-developpeurs-n-auront-plus-a-optimiser-leurs-applications-3dp5</guid>
      <description>&lt;p&gt;&lt;em&gt;Version Française / &lt;a href="https://dev.to/wanegain3/devs-won-t-need-to-optimize-their-apps-37d5"&gt;English version here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Les bénéfices de l’Abstraction
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Dans cet article, j’expliquerai pourquoi les développeurs n’ont pas besoin d’optimiser leurs applications. Cela est lié au fait que le développement Web va évoluer pour devenir plus simple, par l’Abstraction.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Je commencerais par comparer les évolutions des voitures et des outils de développement, avant d’expliquer pourquoi je pense que nous nous faisons fausse route.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Je proposerais ensuite un moyen de résoudre les problèmes lié au développement web moderne, en reconsidérant les rôles des développeurs et la structure du code source.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Je conclurais enfin en abordant une nouvelle façon d’utiliser les frameworks modernes. J’espère que mon idée vous paraitra pertinente.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Comparons l’évolution des voitures et des outils de développement
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zP_VguCt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A7JtQSH9zwxpgPU4U6pjvkQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zP_VguCt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A7JtQSH9zwxpgPU4U6pjvkQ.jpeg" alt=""&gt;&lt;/a&gt;Établissons un parallèle entre l’évolution de la voiture et l’évolution du développement.&lt;/p&gt;

&lt;h3&gt;
  
  
  L’évolution de la voiture
&lt;/h3&gt;

&lt;p&gt;Les voitures ont évolué. Elles sont devenues plus rapides, plus sûres, moins consommatrices, moins polluantes. On peut dire qu’elles ont été optimisées. Est-ce que l’utilisation de ces voitures à évolué ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non, ou très peu.&lt;/strong&gt; Un conducteur de voiture en 2020 conduit grosso modo comme un conducteur en 1940.&lt;/p&gt;

&lt;p&gt;Il n’a pas besoin de savoir comment gagner en vitesse, sécurité, consommation, ou écologie. C’est la voiture qu’il utilise qui s’en occupe. Des spécialistes ont travaillé sur le sujet et l’on optimisée. Il n’y a pas besoin de savoir comment ça marche pour profiter de ses performances.&lt;/p&gt;

&lt;h3&gt;
  
  
  L’évolution des langages et des outils de développement
&lt;/h3&gt;

&lt;p&gt;Les langages et outils de développement ont, eux aussi, évolués. Ils permettent de créer des apps plus rapides, plus sûres, moins lourdes, plus fiables, responsives, etc. On peut dire qu’ils ont été optimisés. Est-ce que l’UTILISATION de ces outils et langages à évolué ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drastiquement.&lt;/strong&gt; Un développeur front-end des années 2000 avait simplement besoin de connaitre le HTML et le CSS. Il n’avait aucunement besoin de maitriser un framework JS, de paramétrer un environnement Node, de configurer Webpack, de savoir ce que sont les promises, les immutables, les observables, les design patterns, les appels API, la délégation d’évènements, le hoisting, ou de réaliser des tests unitaires ou fonctionnels.&lt;/p&gt;

&lt;p&gt;En 2020, il faut maitriser ces concepts, sous peine de ne pas développer avec les dernières techs tendances et risquer d’être considéré comme quelqu’un créant des applications sous-optimisées.&lt;/p&gt;

&lt;h1&gt;
  
  
  Nous faisons fausse route
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JAjl_lE6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/640/1%2A8V2b79amJtaoEeu2V413Cg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JAjl_lE6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/640/1%2A8V2b79amJtaoEeu2V413Cg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pourquoi note t’on une telle différence entre l’évolution de la voiture et celle des outils de développement ?&lt;/p&gt;

&lt;h3&gt;
  
  
  Utilisateurs de voitures
&lt;/h3&gt;

&lt;p&gt;Dans le cas de la voiture, &lt;em&gt;l’utilisateur&lt;/em&gt; de la voiture est clairement identifié (M. Tout le monde) et séparé des différent des &lt;em&gt;concepteurs&lt;/em&gt; de la voiture (ingénieurs, mécaniciens, designers, etc.).&lt;/p&gt;

&lt;p&gt;Il est clair qu’il n’est pas concevable d’attendre de l’utilisateur qu’il connaisse &lt;em&gt;comment&lt;/em&gt; ça marche pour pouvoir bénéficier de l’optimisation de la voiture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Utilisateurs des outils de développement
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dans le cas des outils de création d’applications, les &lt;em&gt;utilisateurs&lt;/em&gt; et les &lt;em&gt;concepteurs&lt;/em&gt; de ces outils sont tous des développeurs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ainsi, il semble naturellement beaucoup plus concevable d’attendre des &lt;em&gt;utilisateurs&lt;/em&gt; de ces outils qu’ils comprennent leur fonctionnement, et qu’ils adoptent les bonnes pratiques de codage permettant de favoriser travail d’équipe, maintenabilité, et optimisation.&lt;/p&gt;

&lt;p&gt;C’est pourquoi actuellement, la maitrise d’un framework nécessite un long apprentissage : sa mise en place et son boilerplate doivent être démystifiés, les opérations possibles via sa CLI comprises, son organisation et ses design patterns clarifiés. Il faut aussi comprendre quelles sont les principales classes / fonctions utilisées, et quels concepts clés il est nécessaire d’adopter (l’état doit être immuable, le fonctions doivent être pures, etc.).&lt;/p&gt;

&lt;h1&gt;
  
  
  Ce qui cloche dans le développement moderne
&lt;/h1&gt;

&lt;p&gt;Demander aux &lt;em&gt;utilisateurs&lt;/em&gt; d’outils de développement de comprendre des concepts en constante évolution, c’est comme attendre d’un &lt;em&gt;utilisateur&lt;/em&gt; de voiture qu’il comprenne de quel type de caoutchouc ses pneus sont faits pour être plus sûrs, quelles fréquences ses radars de stationnement utilisent, ou comment fonctionne l’injection de carburant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cela doit rester sous le capot, même si l’utilisateur de la voiture s’avère être un ingénieur et serait capable de comprendre.&lt;/strong&gt; Car prendre le temps nécessaire pour comprendre a un coût en termes d’efforts, de temps de formation, de temps de pratique, de temps de débogage, et donc de &lt;strong&gt;coût de développement&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Il est donc sous-optimal d’attendre des utilisateurs d’outils de développement qu’ils acquièrent toutes ces connaissances afin de favoriser le travail d’équipe, la maintenabilité, et l’optimisation de leurs applications.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comme pour les &lt;em&gt;concepteurs&lt;/em&gt; automobiles, la maîtrise de ces concepts devrait rester l’affaire d’un type particulier de développeurs spécialisés dans la &lt;em&gt;conception&lt;/em&gt; d’outils de développement.&lt;/p&gt;

&lt;h1&gt;
  
  
  2 nouveaux types de développeurs
&lt;/h1&gt;

&lt;p&gt;Au lieu d’un distingo dev. front / dev. back (qui a de moins en moins de sens), je vous propose d’imaginer un distingo dev. &lt;em&gt;utilisateur&lt;/em&gt; d’outils / dev. &lt;em&gt;concepteur&lt;/em&gt; d’outils.&lt;/p&gt;

&lt;h3&gt;
  
  
  Développeur utilisateur d’outils
&lt;/h3&gt;

&lt;p&gt;Le développeur utilisateur d’outils à pour mission de créer des sites et applications en suivant un cahier des charges. Il sait réaliser une interface et décrit les composants, les fonctionnalités, et les interactions de l’application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Développeur concepteur d’outils
&lt;/h3&gt;

&lt;p&gt;Le développeur concepteur d’outils est un spécialiste maitrisant les structures de code les plus optimisées, les designs patterns les plus pertinents pour résoudre un problème donné. Il est en charge de créer et de faire évoluer des outils de développement permettant de réaliser les même fonctions (détections d’évènements, modification de l’interface, sauvegarde, authentification, etc.), mais de manière toujours plus performante.&lt;/p&gt;

&lt;h1&gt;
  
  
  Application vs moteur
&lt;/h1&gt;

&lt;p&gt;Il est possible de créer des applications qui facilitent le travail d’équipe, sont optimisées et maintenables, sans avoir à maîtriser les meilleurs pratiques et les concepts de programmation toujours plus nombreux. &lt;strong&gt;Nous pouvons y parvenir en séparant l’application du moteur.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Application
&lt;/h3&gt;

&lt;p&gt;Les &lt;em&gt;développeurs utilisateurs&lt;/em&gt; d’outils de développement ne doivent s’occuper que de la description de leurs applications (fonctionnalités, interactions, composants, interface utilisateur).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Une façon&lt;/em&gt; de le faire serait de décrire les applications visuellement. Les applications &lt;a href="https://www.nocode.tech/category/app-builders"&gt;NoCode&lt;/a&gt; telles que &lt;a href="https://bubble.io/welcome"&gt;bubble.io&lt;/a&gt; proposent de le faire, puis de traduire la description visuelle de chaque application en une véritable application. De nombreux développeurs pensent que ces outils offrent des possibilités limitées, mais je vous suggère d’essayer leurs tutoriels de 5 minutes pour voir quelle flexibilité vous pouvez obtenir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YhuXrDQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/1%2AnqyipEhSjbznq66XmVqMDQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YhuXrDQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/1%2AnqyipEhSjbznq66XmVqMDQ.jpeg" alt=""&gt;&lt;/a&gt;Exemple d’application descriptive : &lt;a href="https://bubble.io/welcome"&gt;bubble.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Une autre façon&lt;/em&gt; de procéder serait d’utiliser un langage haut-niveau qui ressemblerait à des spécifications fonctionnelles, mais qui décrirait l’application d’une manière beaucoup plus programmatique (donc structurée).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Par exemple : Il existe la possibilité d’ &lt;strong&gt;identifier l’utilisateur&lt;/strong&gt; via [e-mail/ mot de passe / empreinte digitale / rétine / etc.] matérialisé par [une boîte de connexion avec 2 champs / un appareil / etc.] Cette boîte utilisera [des enregistrements en base / des enregistrements en fichiers / etc.] En cas de succès, nous [accéderons à une page / ajouterons une entrée en base de données / enverrons un e-mail / etc.]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ce langage serait écrit dans un seul outil de développement, qui serait configuré pour utiliser un moteur d’optimisation parmi d’autres. Pour la fonctionnalité d’ &lt;strong&gt;identification de l’utilisateur&lt;/strong&gt; , chaque moteur offrirait de nombreuses options concernant, par exemple, les entrées &lt;em&gt;[e-mail / mot de passe / emprunte digitale / rétine / etc.]&lt;/em&gt;, l’affichage &lt;em&gt;[une boîte de connexion de 2 champs / un appareil / etc.]&lt;/em&gt;, les relations &lt;em&gt;[enregistrements dans la base de données / enregistrements dans le fichier /&lt;/em&gt; etc.], ou les actions de sortie &lt;em&gt;[accès à une page / ajout d’une base de données de connexion / envoi d’un e-mail / etc.]&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Moteur
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fZyfT5HY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/640/1%2ApU4U3nxlo2kxQ2QvcmDXUg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fZyfT5HY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/640/1%2ApU4U3nxlo2kxQ2QvcmDXUg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Les développeurs &lt;em&gt;concepteurs&lt;/em&gt; d’outils travailleraient en fait sur les moteurs. &lt;strong&gt;Ils seraient chargés de traduire les descriptions des applications en un code optimisé, bien structuré, bien testé et sans bogue.&lt;/strong&gt; De temps en temps, il y aurait une mise à jour d’un moteur, pour des performances toujours meilleures. Chaque mise à jour ne casserait rien car les moteurs seraient totalement indépendants des descriptions d’applications.&lt;/p&gt;

&lt;p&gt;Pour avoir une idée de la façon dont cela fonctionnerait, vous pouvez penser à ce qui s’est passé avec PHP, puisque son noyau a été remanié à plusieurs reprises. PHP7 est par exemple &lt;a href="https://www.coresumo.com/php-7-4-vs-7-3-what-is-the-benchmark/"&gt;beaucoup plus rapide&lt;/a&gt; que ses prédécesseurs, mais en tant que développeur PHP, vous n’avez pas besoin de comprendre ou de vous soucier de ce qui a changé en interne. La nouvelle version permet de meilleures performances, même si vous conservez le même code d’application. C’est tout ce que vous avez besoin de savoir.&lt;/p&gt;

&lt;p&gt;Vous pouvez également penser aux bases de données relationnelles, où la séparation entre l’application et le moteur existe déjà. Les moteurs MyISAM, ou InnoDB, &lt;a href="https://www.liquidweb.com/kb/mysql-performance-myisam-vs-innodb/"&gt;offrent des différences&lt;/a&gt; tout en étant liés au même langage SQL.&lt;/p&gt;

&lt;h1&gt;
  
  
  Les frameworks pourraient devenir des moteurs
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;La plupart des frameworks sont le résultat d’un travail de qualité, compte-tenu des nombreux spécialistes qui ont participé à leur élaboration. Par conséquent, ne pas utiliser ces outils serait un gaspillage. Cependant je pense qu’attendre des développeurs &lt;em&gt;utilisateurs&lt;/em&gt; d’outils de maîtriser autant de concepts afin de faire fonctionner ces frameworks est sous-optimisé.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lorsque vous vous documentez sur un nouveau framework, vous tombez rapidement sur la section “Pourquoi ce framework ?”. La plupart de ces outils mettent l’accent sur leur faible poids, leur réactivité, etc. &lt;strong&gt;Si ces caractéristiques sont certainement pertinentes pour les &lt;em&gt;moteurs&lt;/em&gt; d’applications, les frameworks manquent cruellement, en revanche, de facilité d’utilisation (même si certains prétendent être simples). Ils sont trop bas niveau, ce qui, à mon avis, n’en fait pas de bons candidats comme outils de &lt;em&gt;description&lt;/em&gt; d’applications.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comme nous devrions séparer les outils de &lt;em&gt;description&lt;/em&gt; des applications, et les &lt;em&gt;moteurs&lt;/em&gt;, nous pouvons imaginer que le même code source de &lt;em&gt;description&lt;/em&gt; des applications permettrait de &lt;em&gt;générer&lt;/em&gt; des applications de divers types (ou frameworks).&lt;/p&gt;

&lt;p&gt;Par exemple, il permettrait de générer des applications en React, Angular, ou Vue. Ou bien encore des applications en Laravel ou Ruby. Tous les frameworks deviendraient des moteurs interchangeables car leur code serait généré en fonction du choix du développeur &lt;em&gt;utilisateur&lt;/em&gt; d’outils.&lt;/p&gt;

&lt;p&gt;Ce concept est proche des apps hybrides. Par exemple, &lt;a href="https://phonegap.com/"&gt;PhoneGap&lt;/a&gt; ou &lt;a href="https://ionicframework.com/"&gt;Ionic&lt;/a&gt; sont capables, avec presque le même code de base, de générer des applications Android ou iOs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zvXotUPr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/654/1%2AgRxg9UsXxCbvwmUEmGYefA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zvXotUPr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/654/1%2AgRxg9UsXxCbvwmUEmGYefA.png" alt=""&gt;&lt;/a&gt;&lt;a href="https://phonegap.com/"&gt;PhoneGap &lt;/a&gt;utilise Cordova pour générer des apps Android, iOs, etc. en utilisant HTML/CSS/JS&lt;/p&gt;

&lt;h1&gt;
  
  
  Pour conclure
&lt;/h1&gt;

&lt;p&gt;Les &lt;a href="https://triz-journal.com/innovation-methods/innovation-triz-theory-inventive-problem-solving/use-eight-patterns-evolution-innovate/"&gt;lois de l’évolution TRIZ&lt;/a&gt; expliquent que tout système tend vers un idéal, ce qui signifie moins de coûts. &lt;strong&gt;La cinquième loi d’évolution indique également que les systèmes augmentent d’abord en complexité avant de se simplifier.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Le développement d’applications a déjà augmenté en complexité. Il est maintenant temps de le simplifier. Ce que je propose dans cet article est une réponse à ce besoin de simplicité.&lt;/p&gt;

&lt;p&gt;Si les rôles des développeurs sont redéfinis, si les applications sont séparées de leurs moteurs, et si nous utilisons un langage très haut-niveau pour décrire les applications, nous obtiendrons une plus grande efficacité.&lt;/p&gt;

&lt;p&gt;Et pour chaque nouvelle mise à jour d’un outil ou d’un framework, il n’y aurait plus de coûts d’apprentissage. Juste un pop-up dans l’outil de développement.&lt;/p&gt;

&lt;p&gt;Avec un bouton : [mettre à jour le moteur].&lt;/p&gt;

</description>
      <category>avascript</category>
      <category>simplification</category>
      <category>french</category>
      <category>development</category>
    </item>
    <item>
      <title>La curieux lien entre Simplicité et Performance</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Mon, 23 Nov 2020 15:55:28 +0000</pubDate>
      <link>https://dev.to/wanegain3/la-curieux-lien-entre-simplicite-et-performance-54if</link>
      <guid>https://dev.to/wanegain3/la-curieux-lien-entre-simplicite-et-performance-54if</guid>
      <description>&lt;p&gt;&lt;em&gt;Version Française / &lt;a href="https://dev.to/wanegain3/the-curious-relationship-between-simplicity-and-top-performance-4joe"&gt;English version here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Ce que les développeurs peuvent apprendre des géants
&lt;/h1&gt;

&lt;p&gt;2009, Berlin : Usain Bolt bat le record du monde du 100m hommes en 9,58 secondes. Voyez comme cela parait simple, pour lui :&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/420192533" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;2012, Pékin : Lang Lang joue &lt;em&gt;La Campanella&lt;/em&gt;. Cela a l'air si simple pour lui qu'on dirait qu'il s'amuse :&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/cIxGUAnj46U"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Malgré la &lt;em&gt;complexité sous-jacente&lt;/em&gt; de ces métiers, malgré tout le temps et les efforts qui ont été nécessaires pour atteindre le niveau maximal, lorsque l'on regarde &lt;em&gt;leur manière d'être et de faire&lt;/em&gt;, &lt;strong&gt;cela parait simple&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Trop souvent, on pense que ce qui semble simple n'est pas optimisé
&lt;/h1&gt;

&lt;p&gt;Bien avant mes premiers articles sur &lt;a href="https://techmeup.org/le-developpement-va-se-simplifier/"&gt;la simplication du développement&lt;/a&gt;, j'ai eu de nombreuses discussions avec des développeurs maîtrisant les complexes frameworks actuels que sont Angular ou React, ainsi que leurs outils d'environnement associés.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Souvent, mes interlocuteurs n'étaient pas d'accord sur le fait que le *développement devrait devenir et deviendra simple&lt;/em&gt;. **Pour eux, la maîtrise de la technologie est naturellement complexe et le restera.&lt;/p&gt;

&lt;p&gt;Ils disaient que cela faisait partie de notre travail, en tant que devs, d'apprendre continuellement afin de rester à jour sur les dernières évolutions techniques. C'est ainsi que les applications peuvent évoluer et continuer à être optimisées.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La plupart d'entre eux n'ont pas ressenti le besoin d'avoir des outils ou des frameworks  simples&lt;/strong&gt;. Car c'est à nous de nous adapter. Nous devons nous former continuellement. Parce qu'en tant que développeurs ou ingénieurs, nous &lt;em&gt;en sommes capables&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Le code le plus optimisé est un code simple
&lt;/h1&gt;

&lt;p&gt;Usain Bolt et Lang Lang ont atteint le sommet de leurs domaines respectifs.&lt;/p&gt;

&lt;p&gt;Quand Usain Bolt court, &lt;em&gt;ça semble simple, mais ça ne l'est pas&lt;/em&gt;. Quand Lang Lang joue, &lt;em&gt;ça semble simple, mais ça ne l'est pas&lt;/em&gt;. &lt;em&gt;Sous le capot&lt;/em&gt;, il y a des milliers d'heures d'apprentissage et d'entrainement complexe.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Il est possible d'imaginer des outils de développement simples et de haut niveau, qui nous permettraient d'atteindre des performances optimales en générant les applications les plus performantes. &lt;strong&gt;Des outils de premier ordre qui semblent simples, mais qui ne le sont pas. Des outils que nous pouvons utiliser de façon simple, mais qui sont performants en raison de leur complexité sous-jacente.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;C'est possible, par exemple, &lt;a href="https://techmeup.org/le-developpement-va-se-simplifier/"&gt;si nous utilisons l'abstraction et si nous séparons la description d'une application, de son moteur&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vous n'êtes pas un mauvais développeur si vous préférez les syntaxes et patterns &lt;em&gt;simples&lt;/em&gt;, &lt;em&gt;lisibles&lt;/em&gt;, et de &lt;em&gt;haut-niveau&lt;/em&gt;, au lieu de syntaxes et patterns &lt;em&gt;certes à la mode&lt;/em&gt; mais &lt;em&gt;confus&lt;/em&gt; ou &lt;em&gt;complexes&lt;/em&gt;. &lt;strong&gt;Parce que si les outils étaient bien pensés, ils pourraient offrir à la fois simplicité et performance. C'est techniquement possible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outre l'optimisation, &lt;strong&gt;simplicité signifie meilleure lisibilité, meilleure maintenance, meilleure évolutivité, meilleur travail d'équipe, moins de temps de formation et donc moins de coût global de développement.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Et la Simplicité apporte quelque chose de plus.&lt;br&gt;
Quelque chose que vous trouverez dans la façon d'être des gens simples.&lt;br&gt;
Quelque chose que vous trouverez dans de rares démonstrations mathématiques.&lt;br&gt;
Quelque chose que vous trouverez dans la programmation, la science, la mode ou le design.&lt;br&gt;
Elle apporte l'Élégance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gzjxXelu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://techmeup.org/wp-content/uploads/2020/11/post-2363-5fb8e4dfe8a55." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gzjxXelu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://techmeup.org/wp-content/uploads/2020/11/post-2363-5fb8e4dfe8a55." alt="Le sourrire d'Usain Bolt" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frameworks</category>
      <category>architecture</category>
      <category>javascript</category>
      <category>angular</category>
    </item>
    <item>
      <title>The curious relationship between simplicity and top-performance</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Sat, 21 Nov 2020 10:39:51 +0000</pubDate>
      <link>https://dev.to/wanegain3/the-curious-relationship-between-simplicity-and-top-performance-4joe</link>
      <guid>https://dev.to/wanegain3/the-curious-relationship-between-simplicity-and-top-performance-4joe</guid>
      <description>&lt;p&gt;&lt;em&gt;English version / &lt;a href="https://dev.to/wanegain3/la-curieux-lien-entre-simplicite-et-performance-54if"&gt;Version Française ici&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What devs can learn from Giants.
&lt;/h1&gt;

&lt;p&gt;2009, Berlin: Usain Bolt beat the &lt;em&gt;100m Mens World Record&lt;/em&gt; in 9.58 seconds. Please take a look at how simple it seemed for him:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/420192533" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;2012, Beijing: Lang Lang plays &lt;em&gt;La Campanella&lt;/em&gt;. It looks so simple for him it actually looks like he is playing around:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/cIxGUAnj46U"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Despite the &lt;em&gt;underlying complexity&lt;/em&gt; of these crafts, despite all the time and efforts that have been required to reach their top level, when you take a look at &lt;em&gt;the way they do stuff&lt;/em&gt;, &lt;strong&gt;it actually looks simple&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Too often, we think that what looks simple isn't optimized
&lt;/h1&gt;

&lt;p&gt;Long before my first articles on &lt;a href="https://dev.to/wanegain3/development-will-become-simpler-o83"&gt;Dev. Simplicity&lt;/a&gt;, I had many talks with devs who master current complex modern frameworks such as Angular or React, as well as their related environment tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most of the time, they didn’t agree that development will and should become simple&lt;/strong&gt;. To them, mastering tech is naturally complex and it should stay this way.&lt;/p&gt;

&lt;p&gt;They were saying it is part of our job to keep learning stuff in order to keep up with modern tech evolutions. Because this is how apps can evolve and can keep being optimized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most of them didn’t feel the need for tools or frameworks to become simple&lt;/strong&gt;. We should adapt. We should learn. Because as devs or as engineers we &lt;em&gt;can&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Top-level code is simple code
&lt;/h1&gt;

&lt;p&gt;Usain Bolt and Lang Lang reached the top-level of their fields.&lt;/p&gt;

&lt;p&gt;When Usain Bolt runs, &lt;em&gt;it looks simple, but it’s not&lt;/em&gt;. When Lang Lang plays, &lt;em&gt;it looks simple, but it’s not&lt;/em&gt;. &lt;em&gt;Under the hood&lt;/em&gt;, it has been very complex for them as they’ve been learning and training for thousands of hours.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is possible to imagine &lt;em&gt;simple&lt;/em&gt;, top-level dev tools, that would allow us to reach top-performance as well, by generating the most optimized apps. First-class tools that &lt;em&gt;look simple, but which are not&lt;/em&gt;. Tools that we can operate &lt;em&gt;in a simple way&lt;/em&gt;, but which are performant because of their underlying complexity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Their complexity should stay &lt;em&gt;under the hood&lt;/em&gt;, and most devs should not have to deal with it.&lt;/strong&gt; It is possible, for example, &lt;a href="https://dev.to/wanegain3/devs-won-t-need-to-optimize-their-apps-37d5"&gt;if we use abstraction and if we separate app description from app engine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You are not a bad developper for prefering &lt;em&gt;simple&lt;/em&gt;, &lt;em&gt;highly-abstracted&lt;/em&gt; and &lt;em&gt;readable&lt;/em&gt; syntaxes and patterns, over &lt;em&gt;overly-complex&lt;/em&gt; and &lt;em&gt;mystified trendy&lt;/em&gt; syntaxes and patterns. &lt;strong&gt;Because if tools were well-thought, they could offer both simplicity and performance. It is technically possible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And besides optimization, &lt;strong&gt;Simplicity means better readability, better maintainance, better evolutivity, better teamwork, less training time, and less overall development cost.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But it also leads to something more.&lt;br&gt;
Something you’ll find in simple people’s way-of-being.&lt;br&gt;
Something you’ll find in rare mathematical demonstrations.&lt;br&gt;
Something you’ll find in programming, in science, in fashion, or in design.&lt;br&gt;
It leads to &lt;em&gt;Elegance&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gzjxXelu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://techmeup.org/wp-content/uploads/2020/11/post-2363-5fb8e4dfe8a55." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gzjxXelu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://techmeup.org/wp-content/uploads/2020/11/post-2363-5fb8e4dfe8a55." alt="Usain Bolt’s smile" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>architecture</category>
      <category>programming</category>
      <category>angular</category>
    </item>
    <item>
      <title>Le développement va se simplifier</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Sat, 14 Nov 2020 08:49:11 +0000</pubDate>
      <link>https://dev.to/wanegain3/le-developpement-va-se-simplifier-4nf6</link>
      <guid>https://dev.to/wanegain3/le-developpement-va-se-simplifier-4nf6</guid>
      <description>&lt;p&gt;&lt;em&gt;Version Française / &lt;a href="https://dev.to/wanegain3/development-will-become-simpler-o83"&gt;English version here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Développeur et formateur web depuis une quinzaine d’années, je n’ai pas été épargné par la “Javascript Fatigue”. Ma recherche d’une “cure” à cette fatigue, m’a amené à réfléchir aux absurdités de la programmation, et à l’environnement de programmation idéal.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;J’aimerais, dans cet article introductif, vous exposer ce dont je suis persuadé : le développement va se simplifier. Par la suite, je préparerais une série d’articles décrivant en détail les raisons de mon opinion. Cela vous permettra je l’espère, d’entrevoir à quoi ressembleront les prochains environnements de développement, ainsi que la programmation web.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mes propos s’inspirent de TRIZ
&lt;/h2&gt;

&lt;p&gt;Imaginer l’avenir, c’est plus facile en se basant sur une méthode. A plusieurs reprise, je ferai référence à &lt;strong&gt;&lt;a href="https://fr.wikipedia.org/wiki/TRIZ"&gt;TRIZ&lt;/a&gt;&lt;/strong&gt;, une méthode soviétique dont je me suis inspiré, permettant à la fois de résoudre des problèmes d’innovation, et d’innover en prévoyant l’évolution des technologies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---53yRA9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e431ddcd." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---53yRA9w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e431ddcd." alt="[Genrikh Saulovich Altshuller](https://matriz.org/about-matriz/about-founder/), inventeur de TRIZ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TRIZ à fait ses preuves : à titre d’exemple, &lt;a href="https://www.tdg.ch/economie/entreprises/samsung-veut-exporter-recette-creativite/story/27091885"&gt;Samsung l’utilise depuis des années&lt;/a&gt; et elle lui a permit de déposer bon nombre de brevets. Par ailleurs, cette méthode est enseignée dès l’école en Corée du Sud, pays on ne peut plus innovant.&lt;/p&gt;

&lt;p&gt;TRIZ comprend de multiples concepts et outils auxquels je ferai référence dans mes articles. Je me réfèrerai principalement aux  &lt;a href="https://fr.wikipedia.org/wiki/TRIZ#Lois_d'%C3%A9volution_des_syst%C3%A8mes_techniques"&gt;Lois d’évolutions des systèmes techniques&lt;/a&gt;, et au &lt;a href="https://fr.wikipedia.org/wiki/TRIZ#9_%C3%A9crans"&gt;Diagramme 9 écrans&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le développement va tendre vers un idéal
&lt;/h2&gt;

&lt;p&gt;La première chose à savoir, d’après la &lt;em&gt;Loi d’évolution N°4 — Accroissement de l’idéalité&lt;/em&gt;, c’est que les outils de programmation, comme tout système, vont tendre vers un idéal. L’idéal, au sens de TRIZ, est définit ainsi :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BfwzemkC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e434d06b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BfwzemkC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e434d06b.png" alt="Source : [TRIZ for Engineers: Enabling Inventive Problem Solving](https://www.triz.co.uk/structured-innovation), par Karen Gaad"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Un système est idéal s’il offre un maximum de bénéfices, sans coût, et sans effets néfastes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cette équation simple remet donc en question une croyance répandue auprès de nombreux développeurs, selon laquelle si les outils actuels permettent de créer des applications plus sûres, plus fiables, plus orientées travail en équipe, plus évolutives, et plus réactives, il &lt;em&gt;faudrait&lt;/em&gt; absolument les utiliser.&lt;/p&gt;

&lt;p&gt;Ce sont en effet de nombreux &lt;em&gt;bénéfices&lt;/em&gt; qu’apportent les outils et frameworks modernes. Sauf que l’idéal n’est pas atteint pour une raison simple :&lt;/p&gt;

&lt;h2&gt;
  
  
  Les outils et frameworks actuels ont un coût et des effets néfastes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mI2N32f2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e43b7416." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mI2N32f2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e43b7416." alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ne le pensez-vous pas ? En voici une liste non-exhaustive :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;confusion dans les choix techniques&lt;/strong&gt; due à la multiplication d’outils concurrents (frameworks, librairies, et outils/modules des environnements)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;manque de pérennité&lt;/strong&gt; des applications, due à ces choix techniques incertains, ainsi qu’aux changements fréquents des syntaxes, et des bonnes pratiques&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;nécessité de posséder de nombreuses connaissances&lt;/strong&gt; &lt;strong&gt;et de se former continuellement&lt;/strong&gt; afin de maitriser les bonnes pratiques nécessaires à la production d’une application ad-hoc structurée, sécurisée, testée, et optimisée&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;difficulté pour recruter&lt;/strong&gt; des profils de développeurs à la fois experts et polyvalents, et &lt;strong&gt;difficulté pour trouver des missions&lt;/strong&gt; pour les développeurs non-aguerris aux technos tendances&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;augmentation du temps de production&lt;/strong&gt; dus à l’augmentation générale du temps de formation, de paramétrage de l’environnement, du développement, de l’optimisation, des débogages, des tests, des mises en production, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;augmentation des coûts de production&lt;/strong&gt; dû à cette augmentation du temps de production, ainsi qu’à à la rémunération des (rares) développeurs stars maitrisant toutes les techs requises&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;perte d’argent lorsqu’il faut reprendre des applications&lt;/strong&gt; à cause des changements fréquents des techs, pratiques, et outils tendances&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cette liste pourrait être allongée et détaillée. Mais il faut simplement retenir que d’après les lois d’évolutions de TRIZ, ces problèmes actuels trouveront une solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ne faudrait-il pas juste s’(auto-)former ?
&lt;/h2&gt;

&lt;p&gt;Certains d’entre vous pensent peut-être que la solution, c’est de s’y mettre. D’apprendre les dernières syntaxes, patterns, outils, et frameworks actuels. D’autres diront qu’il faut se spécialiser dans l’un de ces outils et d’y passer le temps qu’il faut. Qu’après tout ça fait partie de notre métier, qu’il faut toujours ce mettre à jour, parce que c’est comme ça.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mais demander aux développeurs de se former ou de s’auto-former continuellement est sous-optimisé.&lt;/strong&gt; Justement parce que la formation représente un &lt;em&gt;coût&lt;/em&gt; en termes de temps et/ou d’argent. &lt;/p&gt;

&lt;p&gt;Et ce &lt;em&gt;coût&lt;/em&gt; est non-négligeable, même pour les développeurs confirmés. J’aurai ici voulu pointer sur un article parlant de la &lt;strong&gt;javascript fatigue&lt;/strong&gt; mais il y en a trop et je ne peux choisir. Il y a quelque chose dans cette situation qui ne tourne pas rond…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ainsi, le &lt;em&gt;coût&lt;/em&gt; d’attendre des devs qu’ils se forment continuellement réduit l’&lt;em&gt;idéalité&lt;/em&gt;. Ce n’est pas assez efficace.&lt;/strong&gt; En revanche, il y a une autre solution que j’aimerais proposer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplifions le dev.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fY4dDHU8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e4461791." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fY4dDHU8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2356-5faf8e4461791." alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Il est intéressant de remarquer que &lt;strong&gt;la seule SIMPLIFICATION du développement permet de répondre à chacun des problèmes cités&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En effet, si les nombreux outils concurrents actuels (frameworks, librairies, bundlers, langages, etc.) ont des niveaux de flexibilité et d’efficacité proches, &lt;strong&gt;le plus simple deviendra le plus populaire, simplement car il est par définition moins &lt;em&gt;coûteux&lt;/em&gt; en efforts, en temps de formation, en temps de développement et donc en &lt;em&gt;coût&lt;/em&gt; de production&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Pendant un temps cette règle n’était pas totalement vraie car les entreprises et développeurs orientaient leur choix vers des outils promus par des références comme Google (Angular) ou Facebook (React). En effet, la popularité des créateurs de ces outils rassurait les entreprises, qui y voyaient en fait les &lt;em&gt;bénéfices&lt;/em&gt; de la pérennité, de la fiabilité, et de l’optimisation. &lt;strong&gt;Leur complexité représentait certes un investissement (en terme de formation notamment), mais un investissement sûr et conférant de nombreux &lt;em&gt;bénéfices&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Or le scandale du passage d’AngularJS à Angular, ou encore la nouvelle popularité des frameworks “challengers” comme VueJS ou Svelte, montre que &lt;strong&gt;ce critère de popularité est de moins en moins déterminant dans le choix d’une technologie&lt;/strong&gt;. Parce qu’on s’est rendus compte qu’&lt;strong&gt;on peut faire aussi bien, en (un peu) plus simple&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Ainsi la Simplicité devient petit à petit un critère déterminant car elle augmente l’&lt;em&gt;idéalité&lt;/em&gt; : &lt;strong&gt;on atteint les même &lt;em&gt;bénéfices&lt;/em&gt; pour moins de &lt;em&gt;coûts&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Simplification &lt;br&gt;
= moins de temps de formation et moins d’outils concurrents &lt;br&gt;
= moins de temps de développement et moins de pb dans les choix techs&lt;br&gt;
= moins de coûts de développement, moins de difficultés de recrutement et une meilleure pérennité des applications&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ainsi, il y a tout à parier qu’&lt;strong&gt;à performances similaires, les solutions plus simples remplaceront petit à petit les solutions plus compliquées&lt;/strong&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Plutôt que de se former continuellement, il nous faut &lt;strong&gt;changer de paradigme en simplifiant le développement.&lt;/strong&gt; Simplifier résout de nombreux problèmes engendrés par les pratiques et habitudes actuelles. &lt;/p&gt;

&lt;p&gt;Toutefois, cette simplification ne sera efficace et utile qu’à condition de conserver flexibilité et performance offertes par les outils actuels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Par où commence t’on pour simplifier le dev ?
&lt;/h3&gt;

&lt;p&gt;Dans &lt;a href="https://dev.to/wanegain3/les-developpeurs-n-auront-plus-a-optimiser-leurs-applications-56on"&gt;Les développeurs n’auront plus à optimiser leurs applications&lt;/a&gt; je parle de l’Abstraction, qui constitue &lt;em&gt;un premier moyen&lt;/em&gt; pour simplifier le développement.&lt;/p&gt;

&lt;p&gt;Mais cette question mérite d’être abordée plus en détails dans mes prochains articles. Celui-ci se voulait introductif : comme le préconise TRIZ, je souhaitais ici préciser l’objectif à atteindre, en gardant en tête l’idéal.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Merci de m’avoir lu jusqu’ici.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>developpement</category>
      <category>simplification</category>
      <category>french</category>
      <category>frameworks</category>
    </item>
    <item>
      <title>Development will become simpler</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Sat, 14 Nov 2020 08:38:15 +0000</pubDate>
      <link>https://dev.to/wanegain3/development-will-become-simpler-o83</link>
      <guid>https://dev.to/wanegain3/development-will-become-simpler-o83</guid>
      <description>&lt;p&gt;&lt;em&gt;English version / &lt;a href="https://dev.to/wanegain3/le-developpement-va-se-simplifier-4nf6"&gt;Version Française ici&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;As a web developer and trainer for the past 15 years, I have not been spared by the “Javascript Fatigue”. My search for a “cure” to this fatigue, drove me to think about programming absurdities, and what could be the ideal programming environment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In this introductory article, I would like to talk about my conviction: development will become simpler. Thereafter, I will prepare a series of articles describing in detail the reasons for my opinion. This will hopefully give you a glimpse of what the next development environments, as well as web programming, will look like.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My opinion is inspired by TRIZ
&lt;/h2&gt;

&lt;p&gt;Imagining the future is easier if you use a method. On several occasions, I will refer to TRIZ, a Soviet method that I have been inspired by, which allows us to solve innovation problems as well as to innovate by anticipating the evolution of technologies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gJwI5AwD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5b78fa8." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gJwI5AwD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5b78fa8." alt="[Genrikh Saulovich Altshuller](https://matriz.org/about-matriz/about-founder/), inventeur de TRIZ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TRIZ has proven its worth: for example, &lt;a href="https://www.forbes.com/sites/haydnshaughnessy/2013/03/07/why-is-samsung-such-an-innovative-company/?sh=5baaa692ad7e"&gt;Samsung has been using it for years&lt;/a&gt; and it allowed the company to register numerous patents. In addition, this method is taught in schools in South Korea, a country that is highly innovative.&lt;/p&gt;

&lt;p&gt;TRIZ includes multiple concepts and tools that I will refer to in my articles. I will mainly refer to the &lt;a href="https://en.wikipedia.org/wiki/Laws_of_technical_systems_evolution"&gt;Laws of Technical Systems Evolution&lt;/a&gt;, and to the &lt;a href="https://asq.org/quality-resources/nine-windows"&gt;9 Windows&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development will tend towards an ideal
&lt;/h2&gt;

&lt;p&gt;The first thing to know, according to the &lt;em&gt;Law of Evolution N°4 — Growth of Ideality&lt;/em&gt;, is that programming tools, like any system, will tend towards an ideal. The ideal, in the sense of TRIZ, is defined as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3PSv9F8s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5ba9ee3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3PSv9F8s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5ba9ee3.png" alt="Source : [TRIZ for Engineers: Enabling Inventive Problem Solving](https://www.triz.co.uk/structured-innovation), par Karen Gaad"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A system is ideal if it offers maximum benefits, without cost, and without harms.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This simple equation therefore challenges a widely held belief among many developers that if today’s tools make it possible to create applications that are more secure, more reliable, more team-oriented, more scalable, and more responsive, they &lt;em&gt;should&lt;/em&gt; definitely be used.&lt;/p&gt;

&lt;p&gt;These are indeed many &lt;em&gt;benefits&lt;/em&gt; brought by modern tools and frameworks. Except that the ideal is not reached for a simple reason:&lt;/p&gt;

&lt;h2&gt;
  
  
  Current tools and frameworks have a cost and cause some harms
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--As_Z5e6---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5c1bbb1." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--As_Z5e6---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5c1bbb1." alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don’t you think so? Here is a non-exhaustive list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;confusion in the technical choices&lt;/strong&gt; due to the multiplication of competing tools (frameworks, libraries, and tools/modules of the environments)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;lack of apps durabilities&lt;/strong&gt;, due to these uncertain technical choices, as well as the frequent changes in syntaxes, patterns, and best practices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;need to have extensive knowledge and constant (self-)training&lt;/strong&gt; to master all the best practices required to produce structured, secure, tested and optimized apps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;difficulty in recruiting expert and versatile developer profiles&lt;/strong&gt;, as well as &lt;strong&gt;difficulty in finding jobs&lt;/strong&gt; for developers who are not familiar with the latest tech trends&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;increase in the overall production time&lt;/strong&gt; due to the increased needed time for training, environment setup, development, optimization, debugging, testing, building, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;increase in the overall production cost&lt;/strong&gt; due to this increase in the overall production time, and because of the high salaries of the few star developers mastering all of the required techs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;loss of money when obsolete apps need to be refactored&lt;/strong&gt; because of hype techs, hype tools, and good practices frequent shifts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This list could be extended and detailed. But we shoud simply understand that according to the TRIZ laws of evolution, these current problems will find a solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shouldn’t we just learn stuff?
&lt;/h2&gt;

&lt;p&gt;Some of you may think the solution is just to go ahead, and learn the latest syntaxs, patterns, tools, and frameworks. Others may say we should specialize in using one tech, taking the time it takes. Because after all, it’s part of our job. Devs need to keep up to date. Because that’s the way it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But asking developers to continually be trained or self-train is under-optimized.&lt;/strong&gt; Precisely because training represents a &lt;em&gt;cost&lt;/em&gt; in terms of time and/or money.&lt;/p&gt;

&lt;p&gt;And it is a significant &lt;em&gt;cost&lt;/em&gt;, even for experienced developers. Here, I wanted to refer to an article about &lt;strong&gt;javascript fatigue&lt;/strong&gt; but there are too many I can’t choose. Something just doesn’t feel right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thus, the &lt;em&gt;cost&lt;/em&gt; of expecting devs to continually be trained or self-train reduces ideality. It is not efficient enough.&lt;/strong&gt; On the other hand, there is another solution that I would like to propose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s simplify dev.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tIZO5ldx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5ca458e." class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tIZO5ldx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techmeup.org/wp-content/uploads/2020/11/post-2353-5faf8d5ca458e." alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is interesting to note that &lt;strong&gt;the SIMPLIFICATION of development alone makes it possible to solve each of the problems above mentioned.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the many current competing tools (frameworks, libraries, bundlers, languages, etc.) offer similar levels of flexibility and efficiency, &lt;strong&gt;the simplest will become the most popular, simply because it is by definition less &lt;em&gt;costly&lt;/em&gt; in terms of efforts, training time, development time and therefore production &lt;em&gt;cost&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a while this rule was not totally true because companies and developers were orienting their choice towards tools promoted by references such as Google (Angular) or Facebook (React). Indeed, the popularity of the creators of these tools reassured companies, who saw in them the &lt;em&gt;benefits&lt;/em&gt; of durability, reliability, and optimization. &lt;strong&gt;Their complexity certainly represented an investment (in terms of training in particular), but a safe investment with many &lt;em&gt;benefits&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, the AngularJS to Angular switch scandal, and the new popularity of “challengers” frameworks such as VueJS or Svelte, shows that this criterion of &lt;strong&gt;popularity tends not the be the most determining factor on tech choice anymore&lt;/strong&gt;. Because we came to realize that &lt;strong&gt;we actually can make things just as well, but in a (little) more simple way&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Thus Simplicity little by little becomes a determining criterion because it increases &lt;em&gt;ideality&lt;/em&gt;: &lt;strong&gt;allowing us to reach the same &lt;em&gt;benefits&lt;/em&gt;, with less &lt;em&gt;costs&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Simplification &lt;br&gt;
= less training time and fewer competing tools &lt;br&gt;
= less development time and less headaches on tech choices&lt;br&gt;
= less development cost, less recruitment difficulties and increased app durability&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thus, there are many reasons to believe  that &lt;strong&gt;with similar performances, simpler solutions will gradually replace more complicated ones.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping-up
&lt;/h2&gt;

&lt;p&gt;Rather than continually learning, we should &lt;strong&gt;change paradigm by simplifying dev&lt;/strong&gt;. Simplifiying solves many problems caused by current practices and habits. &lt;/p&gt;

&lt;p&gt;However, this simplification will only be effective and useful if we maintain the same flexibility and performance offered by current tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where do we start to simplify dev ?
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://dev.to/wanegain3/devs-won-t-need-to-optimize-their-apps-37d5"&gt;Devs won’t need to optimize their apps&lt;/a&gt; I talk about Abstraction, which is &lt;em&gt;one way&lt;/em&gt; to simplify development.&lt;/p&gt;

&lt;p&gt;But this question deserves to be discussed in more detail in my next articles. This one was meant to be introductory: as recommended by TRIZ, I here wanted to specify our &lt;em&gt;goal&lt;/em&gt;, keeping in mind the &lt;em&gt;ideal&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thank you for reading me so far.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>paradigm</category>
      <category>frameworks</category>
      <category>simplification</category>
    </item>
    <item>
      <title>Devs won't need to optimize their apps</title>
      <dc:creator>Alexandre Beaugrand</dc:creator>
      <pubDate>Sun, 01 Nov 2020 10:45:33 +0000</pubDate>
      <link>https://dev.to/wanegain3/devs-won-t-need-to-optimize-their-apps-37d5</link>
      <guid>https://dev.to/wanegain3/devs-won-t-need-to-optimize-their-apps-37d5</guid>
      <description>&lt;p&gt;&lt;em&gt;English version / &lt;a href="https://dev.to/wanegain3/les-developpeurs-n-auront-plus-a-optimiser-leurs-applications-3dp5"&gt;Version Française ici&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Les bénéfices de l’Abstraction
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;In this article, I'll explain why devs won't need to optimize their apps. It is related to the fact web development will evolve to become simpler, using Abstraction. I'll first compare cars and dev tools evolutions, explain why I think we went the wrong way, and propose a way to solve modern development problems reconsidering devs' roles and source code structure. I'll then talk about a new way to use modern frameworks. I hope you'll get my point.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's compare cars and dev tools evolutions
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9310iqhnkwmmk43kbvzv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9310iqhnkwmmk43kbvzv.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cars Evolution
&lt;/h3&gt;

&lt;p&gt;Cars have evolved. They became faster, more secure, more efficient, more ecologic. We can say they've been optimized. Yet, has their USE changed ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No, or not much.&lt;/strong&gt; A 2020 driver more or less drives like a 1940 driver.&lt;/p&gt;

&lt;p&gt;The driver doesn't need to know HOW it is possible to get more speed, more security, more efficiency, or to be more ecologic. Its car deals with it, because a team of specialists worked on these matters and optimized it. There is no need for the driver to understand how it works to gain those benefits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dev tools Evolution
&lt;/h3&gt;

&lt;p&gt;Dev tools too have evolved. They craft apps that are faster, more secure, less heavy, more reliable, responsive, etc. We can say they've been optimized as well. Yet has the USE of dev tools and languages changed ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drastically.&lt;/strong&gt; A front-end dev in 2000 just needed to master HTML and CSS. He/she didn't need to operate any framework, to set-up a NodeJS environment, to configure webpack, to understand what are promises, immutables, observables, design patterns, API calls, event delegation, hoisting, or to make TDD.&lt;/p&gt;

&lt;p&gt;In 2020, a front-end dev has to master these tools and concepts, otherwise he/she won't develop with the latest trendy techs and will be considered as someone who creates sub-optimized applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  We went the wrong way
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp57ce9zr6u38xwthfkua.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp57ce9zr6u38xwthfkua.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why is there such a difference between cars evolution vs dev tools evolution ?&lt;/p&gt;

&lt;h3&gt;
  
  
  Car Users
&lt;/h3&gt;

&lt;p&gt;For what concerns cars, the &lt;em&gt;user&lt;/em&gt; of the car is clearly identified (Mr. Everyone) and separated from the &lt;em&gt;makers&lt;/em&gt; of the car (engineers, mechanics, designers, etc.).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is not conceivable&lt;/strong&gt; to expect the &lt;em&gt;user&lt;/em&gt; to know &lt;em&gt;how&lt;/em&gt; its car works in order to operate it and to take advantage of its latests features and optimizations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dev Tools Users
&lt;/h3&gt;

&lt;p&gt;For what concerns dev tools, both the &lt;em&gt;users&lt;/em&gt; and the &lt;em&gt;makers&lt;/em&gt; of those tools are developers.&lt;br&gt;
&lt;strong&gt;Thus, it naturally feels much more conceivable&lt;/strong&gt; to expect the &lt;em&gt;users&lt;/em&gt; of these tools to understand dev tools magic, and to adopt the best coding practices that produce teamwork, maintainability, and optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is why currently, mastering a framework for example requires a long learning process&lt;/strong&gt;: its implementation and its boilerplate must be demystified, the major CLI commands must be known, its organization and its design patterns must be clarified. It is also necessary to understand what are the main classes / functions used, and what key concepts it is necessary to adopt (the state must be immutable, the functions must be pure, etc.).&lt;/p&gt;
&lt;h3&gt;
  
  
  What's wrong with modern dev
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Asking dev tools &lt;em&gt;users&lt;/em&gt; to understand ever-evolving concepts is just like expecting a car user to understand what kind of rubber its tire are made of to be safer, what frequencies its parking radars use, or how fuel injection works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;This should stay under the hood, even if the car user turns out to be an engineer and would be able to understand.&lt;/strong&gt; Because taking the time needed to understand this incurs a cost in terms of efforts, training time, practice time, debugging time, and therefore in &lt;strong&gt;development cost&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thus, it is underoptimized to expect the users of dev tools to acquire all this knowledge in order to benefit of better teamwork, maintainability and optimization.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Like the car &lt;em&gt;makers&lt;/em&gt;, mastering those concepts should remain the job of a particular type of developer who specializes in &lt;em&gt;making&lt;/em&gt; dev tools.&lt;/p&gt;
&lt;h1&gt;
  
  
  2 new types of devs
&lt;/h1&gt;

&lt;p&gt;Instead of a distinction between front-end devs and back-end devs (which makes less sense anymore), I suggest you imagine a disctinction between dev. tools users and dev. tool designers.&lt;/p&gt;
&lt;h3&gt;
  
  
  Dev tools users
&lt;/h3&gt;

&lt;p&gt;The dev. tools users are in charge of making the best websites and apps according to the specs/client needs. They know how to create relevant UI, describe their components, their features, and the interactions involved.&lt;/p&gt;
&lt;h3&gt;
  
  
  Dev tools designers
&lt;/h3&gt;

&lt;p&gt;The dev. tool designers are specialists mastering the most optimized code structures, and the most relevant design patterns to solve a given problem. They are in charge of creating and upgrading dev tools to perform the same functions (event detection, interface modification, backup, authentication, etc.), but in an ever more efficient manner.&lt;/p&gt;
&lt;h1&gt;
  
  
  App vs Engine
&lt;/h1&gt;

&lt;p&gt;It is possible to build apps that facilitate teamwork, are optimized and maintainable, without the requirement of mastering ever-increasing programming concepts and best practices. &lt;strong&gt;We can achieve this by separating app vs engine.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  App
&lt;/h3&gt;

&lt;p&gt;Dev. tool users should only take care of describing their apps (features, interactions, components, UI).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One way&lt;/em&gt; would be to &lt;strong&gt;describe apps visually&lt;/strong&gt;. &lt;a href="https://www.nocode.tech/category/app-builders" rel="noopener noreferrer"&gt;NoCode apps&lt;/a&gt; such as &lt;a href="https://bubble.io/welcome" rel="noopener noreferrer"&gt;bubble.io&lt;/a&gt; propose to do so, and then translate each app visual description into a real app. Many devs think these are limited, but I suggest you try their 5min tutorials to see how much flexibility you can get.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7hlq2pxhan4xilbbdxci.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7hlq2pxhan4xilbbdxci.jpg" alt="Example of describtion app, such as bubble.io"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Another way&lt;/em&gt; of doing this would be to use a single &lt;strong&gt;highly abstracted language&lt;/strong&gt; that looks like writing specs, but in a much more programmatic (thus structured) way. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;There is the possibility of identifying the user 
via [email / pass / fingerprint / eye / etc.] 
materialized by [a login box with 2 fields / a device / etc.].
This box will use [db records / file records / etc.]. 
If successful, we will 
[access a page / add a database log / send an e-mail / etc.].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This language would be written in a single development tool, which would be configured to use an optimization engine among others. For the functionality of &lt;strong&gt;identifiying the user&lt;/strong&gt;, each engine would offer many options for what concerns, for example, inputs &lt;em&gt;[email / pass / borrows / retina / etc.]&lt;/em&gt;, display &lt;em&gt;[a login box of 2 fields / a device / etc.]&lt;/em&gt;, relations &lt;em&gt;[records in database / records in file / etc.]&lt;/em&gt;, or output actions &lt;em&gt;[access a page / add a log in database / send an e-mail / etc.]&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engine
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fibx3cbq1s48iskf8zfw7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fibx3cbq1s48iskf8zfw7.jpg" alt="engines"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dev. Tool designers would actually work on the engines. &lt;strong&gt;They would be in charge of translating app descriptions into optimized, well structured, well tested, bug-free code.&lt;/strong&gt; Once on a while there would be an update of an engine, for ever-better performances. Each update would not break anything because engines would be totally independant from app descriptions.&lt;/p&gt;

&lt;p&gt;To get an idea of how it would work, you may think about what happened with PHP, since its core has been refactored many times. PHP7 is for example &lt;a href="https://www.coresumo.com/php-7-4-vs-7-3-what-is-the-benchmark/" rel="noopener noreferrer"&gt;way faster&lt;/a&gt; than its predecessors, but as a PHP dev you don't need to understand or care about what have changed internally. The new version allows for better perfs, even if you stick to the same app code. That's all you need to know.&lt;/p&gt;

&lt;p&gt;You may also think about relational databases, where the app / engine separation already exists as well. MyISAM, or InnoDB engines &lt;a href="https://www.liquidweb.com/kb/mysql-performance-myisam-vs-innodb/" rel="noopener noreferrer"&gt;offer differences&lt;/a&gt; while being linked to the same SQL language.&lt;/p&gt;

&lt;h1&gt;
  
  
  Frameworks could become engines
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Most framework are a result of quality work, given the numerous specialists involved in making them. Therefore, not using those tools would be a waste, and yet I believe relying on dev tool users to master so many concepts in order to operate those frameworks is underoptimized.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you first read about a new framework on its official website, you soon come accross the Why this framework section. Most frameworks emphasize their low weight, reactivity, etc. &lt;strong&gt;While these features are certainly relevant for app engines, frameworks lack ease of use (even if some claim to be simple) because they are too low-level, which I believe don't make them good candidates as app description tools.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since we should separate app description tools from engines, we can imagine &lt;strong&gt;app description code could scaffold apps in different flavors (or frameworks)&lt;/strong&gt;. The same source code could create a React, Angular, Ember, or Vue app. Or it could generate a Laravel or Ruby app. All frameworks would become interchangeable engines as their code would be generated based on the dev choice.&lt;/p&gt;

&lt;p&gt;This concept is close to hybrid phone apps. For example, &lt;a href="https://phonegap.com/" rel="noopener noreferrer"&gt;PhoneGap&lt;/a&gt; or &lt;a href="https://ionicframework.com/" rel="noopener noreferrer"&gt;Ionic&lt;/a&gt; are capable, with almost the same base code, to generate Android or iOs apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fathgrh405nnhtb5dj1tr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fathgrh405nnhtb5dj1tr.png" alt="PhoneGap uses Cordova to scaffold different flavors apps based on HTML/CSS/JS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Wrapping up
&lt;/h1&gt;

&lt;p&gt;TRIZ &lt;a href="https://triz-journal.com/innovation-methods/innovation-triz-theory-inventive-problem-solving/use-eight-patterns-evolution-innovate/" rel="noopener noreferrer"&gt;laws of Evolution&lt;/a&gt; explain that every systems tends to an ideal, which means less costs. &lt;strong&gt;Pattern number five also states that systems increase in complexity and then get simplified.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;App developement has already increased in complexity. Now it is time to simplify. What I suggest in this article is a response to this need of simplicity.&lt;/p&gt;

&lt;p&gt;If developer roles get to be redefined, if apps get separated from their engines, and if we use a highly abstracted language describing apps, we obtain more efficiency.&lt;/p&gt;

&lt;p&gt;And for every new tool / framework update, there would be no more learning costs. Just a pop-up in the dev tool.&lt;/p&gt;

&lt;p&gt;With a button : [update engine].&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>framework</category>
      <category>tooling</category>
      <category>angular</category>
    </item>
  </channel>
</rss>
