<?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>Forem: Alexandre Valsamou-Stanislawski</title>
    <description>The latest articles on Forem by Alexandre Valsamou-Stanislawski (@bobylito).</description>
    <link>https://forem.com/bobylito</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%2F289479%2F268cec8f-4dec-4fea-aa1b-09d99c41b05e.jpeg</url>
      <title>Forem: Alexandre Valsamou-Stanislawski</title>
      <link>https://forem.com/bobylito</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bobylito"/>
    <language>en</language>
    <item>
      <title>Gatsby: how is it different from other site generators</title>
      <dc:creator>Alexandre Valsamou-Stanislawski</dc:creator>
      <pubDate>Mon, 27 Jan 2020 14:28:48 +0000</pubDate>
      <link>https://forem.com/bobylito/gatsby-how-is-it-different-from-other-site-generators-3gfb</link>
      <guid>https://forem.com/bobylito/gatsby-how-is-it-different-from-other-site-generators-3gfb</guid>
      <description>&lt;p&gt;Static website generators (SSG) are top-rated technologies to build websites. And the reasons are obvious: they offer flexible content edition, and the deployed sites have the best performance.&lt;/p&gt;

&lt;p&gt;Now I'm using Gatsby, and things are different from other SSG. Beyond the buzzwords that are React and GraphQL, Gatsby switches the way I think about the website I build: from a content-oriented one to a programmatic one.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I initially wrote this content for the talk I gave at Paris.js #90, the &lt;a href="https://www.youtube.com/watch?v=SWGoSumkjmw&amp;amp;list=PLWhFHBFsRtqsMGx3N0bLqKiTQ-0J5UqTd&amp;amp;index=2&amp;amp;t=1s"&gt;video is here&lt;/a&gt; and the &lt;a href="https://speakerdeck.com/bobylito/gatsby-dot-js-how-is-it-different-from-other-static-site-generators"&gt;slides are there&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a static website generator?
&lt;/h2&gt;

&lt;p&gt;At its core, an SSG is a tool that transforms simplified markup into HTML: for each of the original files, you get a new HTML file. However, the simplified markup is only here to help you edit the content, and you write the shell hosting the content with a complete template language.&lt;/p&gt;

&lt;p&gt;With Jekyll, you cannot configure the type of markup or the templating engine. With others, you can pick plugins depending on your preferences. With both approaches, you get the same kind of tool: a pipeline in which each step pushes transformed content to the next.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WDvf8guo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/Screenshot%25202020-01-27%2520at%252015.54.40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WDvf8guo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/Screenshot%25202020-01-27%2520at%252015.54.40.png" alt="Static site generators are pipelines" width="800" height="290"&gt;&lt;/a&gt;&lt;em&gt;Static site generators are pipelines&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So traditionally, SSGs use a push model. This model limits the possibilities of sources to the one foreseen by the SSG creators. And in practice, those sources are the markup files or, in the best case, any file.&lt;/p&gt;

&lt;h2&gt;
  
  
  The case of the documentation generation
&lt;/h2&gt;

&lt;p&gt;When I was in charge of some JS open-source projects at Algolia, proper documentation was vital. When you make documentation for such projects, you realize it's hard to be exhaustive without JSDoc (or documentation.js), and it's hard to make a beautiful website without the tooling offered by SSGs. So the obvious is to try mixing both.&lt;/p&gt;

&lt;p&gt;Because of the push model, you have to work around the way the SSG work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in the case of Jekyll, you can generate markup files and then integrate them&lt;/li&gt;
&lt;li&gt;in the case of an SSG built around plugins, like Metalsmith, you can write a plugin with the limitation of only working with virtual files (which is the fundamental brick for content in Metalsmith)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both methods feel very hacky, and because of that, they are tough to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gatsby does it differently.
&lt;/h2&gt;

&lt;p&gt;You have guessed it already: Gatsby uses a pull model for the content. It is not the content that creates the pages; it's the code that pulls the content and creates the pages.&lt;/p&gt;

&lt;p&gt;The content is available through GraphQL. Each content plugin provides an API that allows the code to query the content. The content can be plain files or markdown files. The more specific is the plugin, the more specialized is the API: when using the markdown plugin, the GraphQL API provides the content in rendered HTML and can generate the excerpts.&lt;/p&gt;

&lt;p&gt;There is no limitation on the source either, so working with comments in the source file is not an issue. So much so, that there is a plugin for &lt;a href="https://www.gatsbyjs.org/packages/gatsby-transformer-documentationjs/"&gt;documentation.js&lt;/a&gt;(a JSDoc alternative).&lt;/p&gt;

&lt;p&gt;The documentation example is unusual; other use cases leverage this API, and the headless CMSs are the perfect candidate. The GraphQL API is just a layer on top of the HTTP API those service offer. The use of such services decouples the architecture. It reduces the need for servers even more while providing superior user experience.&lt;/p&gt;

&lt;p&gt;Last but not least, media assets benefit from the pull approach too. With the GraphQL API, you can query the images you need and retrieve a structure that contains all the URLs of the optimized alternatives of the source file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Dnt1qST6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/Screenshot%25202020-01-27%2520at%252015.57.50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dnt1qST6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/Screenshot%25202020-01-27%2520at%252015.57.50.png" alt="One source, multiple images" width="800" height="363"&gt;&lt;/a&gt;&lt;em&gt;One source, multiple images&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Unified static and live templates
&lt;/h2&gt;

&lt;p&gt;With SSGs before Gatsby, you would not write the HTML with the same templating engine when you move to the front-end. Juggling with templating systems is particularly tricky when writing a single page app (SPA) because writing two implementations lead to discrepancies. To the point that you would not traditionally use an SSG when writing an SPA.&lt;/p&gt;

&lt;p&gt;React is the templating engine, and Gatsby acts as a server-side rendering framework: only one template per piece of HTML. It's the same code that runs at runtime and during the static generation. The reuse of templates eliminates the possibilities of bugs due to discrepancies completely.&lt;/p&gt;

&lt;p&gt;Because of the component approach and the fixed data structures of GraphQL fragments, the plugins can provide a unified and user-friendly API to the developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6j0XJm9X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/snippet-react-graphql.png%3Ftest" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6j0XJm9X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/snippet-react-graphql.png%3Ftest" alt="The GraphQL and component APIs merge seamlessly" width="800" height="338"&gt;&lt;/a&gt;&lt;em&gt;React and GraphQL APIs merge together, and this limits the mental load&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The combination of the two technologies hides the complexity, and it provides a seamless developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  A change of perspective
&lt;/h2&gt;

&lt;p&gt;The Gatsby team could have continued the work laid out by previous tools. At some point, they flipped the content access model. They might not have done that intentionally, but what stays is a different approach.&lt;/p&gt;

&lt;p&gt;As a library writer and DX practitioner, the lesson to me is clear: sometimes, you need to change what is familiar to something else. If you change this at a fundamental level, like querying the content instead of pushing the content down the pipeline, you get ripples everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks for the insights 😅, but is Gatsby right for me?
&lt;/h2&gt;

&lt;p&gt;Changing the content paradigm from push to pull is a trade-off towards more flexibility, more power, and also more work for the developer. How much more work is hard to evaluate, here are some pointers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Gatsby architecture is intricate; this can be daunting even if you don't have to master it entirely.&lt;/li&gt;
&lt;li&gt;With Gatsby, you use React and GraphQL, which you need to learn the fundamentals to get started.&lt;/li&gt;
&lt;li&gt;If you need to make a single page app or a PWA, Gatsby is helpful. If you know Vue, you should consider the Vue flavor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After considering the previous points, here are for me the selling points of Gatsby:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best performance built-in (gatsby-image is just amazing)&lt;/li&gt;
&lt;li&gt;Unified DX for the static generation and the live website&lt;/li&gt;
&lt;li&gt;Super active community&lt;/li&gt;
&lt;li&gt;Great documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading this post, it means a lot if you could share it. I'm wondering, have you tried Gatsby yet? Do you want to try? Why not?&lt;/p&gt;

&lt;p&gt;If you've liked this post, maybe you'd like my other post about "&lt;a href="https://dev.to/bobylito/starting-react-today-1egl"&gt;Getting started with React today&lt;/a&gt;" or "&lt;a href="https://www.noima.xyz/blog/project-swamp"&gt;How not to get swamped in your projects.&lt;/a&gt;"&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post was first published on &lt;a href="https://www.noima.xyz/blog/gatsby-content-dx"&gt;Noima.xyz blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dx</category>
      <category>gatsby</category>
      <category>ssg</category>
    </item>
    <item>
      <title>Projects: how to avoid getting swamped</title>
      <dc:creator>Alexandre Valsamou-Stanislawski</dc:creator>
      <pubDate>Tue, 14 Jan 2020 12:22:35 +0000</pubDate>
      <link>https://forem.com/bobylito/projects-how-to-avoid-getting-swamped-2lk7</link>
      <guid>https://forem.com/bobylito/projects-how-to-avoid-getting-swamped-2lk7</guid>
      <description>&lt;p&gt;The other day I posted about &lt;a href="https://dev.to/bobylito/starting-react-today-1egl"&gt;getting started with React&lt;/a&gt;. I received a lot of positivity and good vibes from the DEV community (Thanks 🙇‍♂️). In the process, I also received some great suggestions, and one of them was to propose some starter project ideas. This suggestion threw me on the memory lane of projects I made to learn new technologies.&lt;/p&gt;

&lt;p&gt;I did a review of some of the projects I made. Amongst the projects, some were complete failures; some I continue to use today. Along the way, I found some things that I might be of interest.&lt;/p&gt;

&lt;p&gt;This article is a summary, with the goal of each project, how it went and, what we can learn from them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer&lt;/em&gt; Not every advice is for everyone: I’m a product-oriented person, and I can’t do tech for the sake of it; if it’s not your case, I’d love to hear about your point of view when you learn.&lt;/p&gt;

&lt;p&gt;Before you go any further, here are the key learnings (TL;DR):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be super clear about what you want to achieve: learning or making something&lt;/li&gt;
&lt;li&gt;Set yourself a “done” goal&lt;/li&gt;
&lt;li&gt;If you deeply understand what you’re building, it helps with the other parts of the project&lt;/li&gt;
&lt;li&gt;If you have mastered the tech, it helps you focus on what you’re building&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Blog engine
&lt;/h3&gt;

&lt;p&gt;The first project is one of my earliest, and a pretty failed one too. Back in the early 2000s, blogging was a thing, and being online was very attractive and yet not very accessible. Blogger launched in 99, and the initial release year of WordPress is 2003. So making a blog engine did not seem that bad of an idea.&lt;/p&gt;

&lt;p&gt;When I started the project, I had a very vague idea of what I should do. To prevent you from going on the same path, here is what I expect of a minimal blog engine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You must be able to write content&lt;/li&gt;
&lt;li&gt;You must be able to publish content&lt;/li&gt;
&lt;li&gt;The content must be visible on the website in a structured form, once published&lt;/li&gt;
&lt;li&gt;You may have multiple writers&lt;/li&gt;
&lt;li&gt;Only the writer(s) can write and publish content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This kind of project is a perfect fit when you want to learn a new backend technology. Here are some of the things you learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database access&lt;/li&gt;
&lt;li&gt;CRUD interfaces&lt;/li&gt;
&lt;li&gt;Backend MVC&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Making UI’s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s no surprise that with such a list of things to learn that this project is the goto example for back-end frameworks, such as Rails or Django.&lt;/p&gt;

&lt;p&gt;In my case, I ended up writing no content or so and with an unfinished product. I couldn't decide between the technical aspects of the project and my will to write content. Also, I didn’t know what it means to write anything; I didn’t have any idea of what an editorial line could be.&lt;/p&gt;

&lt;p&gt;I did not learn explicitly from this experience then. But it gave me some hints for building my next projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Video games
&lt;/h3&gt;

&lt;p&gt;It is tough to make a single list of requirements for a game. So here are some general objectives that could apply to any game:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You must have an understandable goal (survive)&lt;/li&gt;
&lt;li&gt;You must be able to evaluate yourself (with points for example)&lt;/li&gt;
&lt;li&gt;It must be fun (visual effects and sound are essential)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This kind of project is perfect for trying out UI libraries (React) or API (Canvas). Libraries do not have video games as their primary target, which makes this type of project exciting for potential performance issues. On the other hand, raw API’s tend to be very low-level, and there are no game primitives to help you, which is also very good for practicing abstraction.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CKBonPvz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/littleshooter1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CKBonPvz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/littleshooter1.png" alt="Little shooter 1 in action" width="800" height="426"&gt;&lt;/a&gt; &lt;em&gt;Little shooter uses Canvas 2D API. I feel the game is a bit too hard, &lt;a href="http://bobylito.me/little-shooter/"&gt;try it here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I picked a kind of video game I love (2D vertical shooters), and it helped me focus on learning the skills I wanted (&lt;a href="https://github.com/bobylito/little-shooter"&gt;Canvas 2D&lt;/a&gt;). The second time, it was even more manageable, and I could deepen the story I wanted to express even though I used other technologies (&lt;a href="https://github.com/bobylito/littleshooter2"&gt;React and DOM&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FuXH54_T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/littleshooter2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FuXH54_T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/littleshooter2.png" alt="Little shooter 2 intro screen" width="800" height="426"&gt;&lt;/a&gt; &lt;em&gt;Little shooter 2 is an improvement on the game side and also a complete rewrite, &lt;a href="http://bobylito.me/littleshooter2/"&gt;try it for yourself&lt;/a&gt; and tell me what you think in the comments.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Making a &lt;a href="https://github.com/bobylito/loop"&gt;video game framework&lt;/a&gt; is an interesting exercise as well, even though you have to spend time on things that are not the game itself. The framework is a means to an end when making a video game, be careful. And also, I haven't finished any games with the framework I made; I guess that counts against the idea of making a framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  A graphing tool
&lt;/h3&gt;

&lt;p&gt;This one is very niche and yet one of my favorite personal projects. I was deep into making animations with Loop, and because I was on this purely functional trend, I was making super complex functions. To understand what I was doing, I decided to graph them.&lt;/p&gt;

&lt;p&gt;In a few words, here is what you need for the simplest graphing tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You must be able to manage a set of functions&lt;/li&gt;
&lt;li&gt;You must be able to check the functions visually&lt;/li&gt;
&lt;li&gt;You should be able to use the mouse to navigate (drag, zoom in / out)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing so, I ended up writing &lt;a href="https://github.com/bobylito/jsPlot"&gt;a library&lt;/a&gt; and &lt;a href="https://github.com/bobylito/functionXplorer"&gt;then a UI&lt;/a&gt;. I needed this tool to understand what I was doing; therefore, it was crystal clear to me what I wanted to implement. And because of that, the UI was evident, and picking up a new front-end framework was not an issue (BackboneJS).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y779Xvxw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/functionxplorer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y779Xvxw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.noima.xyz/assets/functionxplorer.png" title="FunctionXplorer UI" alt="FunctionXplorer UI" width="800" height="426"&gt;&lt;/a&gt; &lt;em&gt;The FunctionXplorer UI is pretty usable, in spite of its old age. &lt;a href="https://github.com/bobylito/functionXplorer"&gt;Try it for yourself&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning from the past projects
&lt;/h3&gt;

&lt;p&gt;To get the best of a personal project, I find best to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set a clear objective for focus and self-evaluation&lt;/li&gt;
&lt;li&gt;Restrict the scope (business knowledge, requirements or technology) to focus even more on your objective&lt;/li&gt;
&lt;li&gt;Do something that you like to keep the motivation going&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The good thing is that those hints apply very well on the business side too. As a professional, if you are aware of those elements, they make you more efficient and driven.&lt;/p&gt;

&lt;p&gt;So what do you think? Do you have any meaningful personal project ideas? What did you learn when you built them?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post was first published on &lt;a href="https://www.noima.xyz/blog/project-swamp"&gt;Noima blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>projects</category>
      <category>nostalgia</category>
    </item>
    <item>
      <title>Starting React today?</title>
      <dc:creator>Alexandre Valsamou-Stanislawski</dc:creator>
      <pubDate>Tue, 10 Dec 2019 15:28:46 +0000</pubDate>
      <link>https://forem.com/bobylito/starting-react-today-1egl</link>
      <guid>https://forem.com/bobylito/starting-react-today-1egl</guid>
      <description>&lt;p&gt;React is intimidating, daunting even. And yet it is very simple. That's a paradox, right? And it is pretty annoying for beginners, and for me as everyone takes me for a fool. So let's talk about why it feels so damn hard to learn, and how I would start again today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: react is not hard, the ecosystem is. And the ecosystem is like that because it has to answer the many questions React left unanswered. If you're starting today, start a small project with just React, feel the pain, restart the project, add a library, feel other problems, repeat :D&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does React feel so hard to learn?
&lt;/h2&gt;

&lt;p&gt;But first, what is React anyway? React is a JavaScript library for building user interfaces, UI for short. If you've tried to learn React, you might know that already 😃 What this library does is build HTML and allow you to "react" to user interactions. And that's it, it doesn't even come with a way to deal with data from any source.&lt;/p&gt;

&lt;p&gt;Even though, it does "little" it does it very clearly. The library enforces the concept of &lt;em&gt;component&lt;/em&gt;. The components can either "draw" HTML tags or other components. Of course, the sub components can do the same. Therefore we end up with a tree structure that builds our UI.&lt;/p&gt;

&lt;p&gt;React does contain other concepts, but really that's the gist. And that's the issue. Because it only does the UI, it does not answer the needs for a fully fledged Single Page Application. And thus, the community began to address them which led to the creation of the React Ecosystem. Each piece of the ecosystem comes with its own limitations which led to other patterns and libraries, and so on and so forth...&lt;/p&gt;

&lt;p&gt;With this plethora of libraries, best practices and patterns, how does one create solid basis for learning React?&lt;/p&gt;

&lt;h2&gt;
  
  
  Start like it's 2013 🤘
&lt;/h2&gt;

&lt;p&gt;There is no better way to start learning a new tool than when it is rudimentary. Unfortunately for you, it's not the case anymore with React. But you can still emulate that with create-react-app 👍&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# make sure you have node installed&lt;/span&gt;
npx create-react-app learning-iteration-1
&lt;span class="nb"&gt;cd &lt;/span&gt;learning-iteration-1
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The recipe is quite straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;pick a small project idea&lt;/li&gt;
&lt;li&gt;use only react to build it&lt;/li&gt;
&lt;li&gt;feel the pain, if there is no pain then switch project 🎉&lt;/li&gt;
&lt;li&gt;start again and introduce a single library / pattern that will solve a pain point&lt;/li&gt;
&lt;li&gt;repeat from 3.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here are some challenges that you want to solve in your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;synchronize two components that are not parent / children&lt;/li&gt;
&lt;li&gt;load data from the web&lt;/li&gt;
&lt;li&gt;make a big tree and have only few components update&lt;/li&gt;
&lt;li&gt;leave your best idea in comments 😍&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this method, you will build up your knowledge rather than being overflowed by contradictory information. You will be able to forge your own mind on which solutions to adopt.&lt;/p&gt;

&lt;p&gt;Hope you will find those suggestions useful 🙇‍♂️&lt;br&gt;
And follow me if you want to read more react things 😃&lt;/p&gt;

</description>
      <category>react</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
