{"id":211,"date":"2020-10-09T11:00:48","date_gmt":"2020-10-09T11:00:48","guid":{"rendered":"https:\/\/thenextweb.com\/?p=1322355"},"modified":"2020-10-09T11:00:48","modified_gmt":"2020-10-09T11:00:48","slug":"3-concrete-steps-to-learning-a-programming-language","status":"publish","type":"post","link":"https:\/\/www.londonchiropracter.com\/?p=211","title":{"rendered":"3 concrete steps to learning a programming language"},"content":{"rendered":"\n<p>Learning a programming language is stretching your skills, as a developer. It\u2019s a new tool in your toolbox, too. With it, you can create something out of thin air. If you\u2019re lucky, others will find your creation useful, and you\u2019ll feel the warmth of<span>&nbsp;<\/span><em>being helpful<\/em>.<\/p>\n<p>Beyond that, I love programming by itself: it\u2019s a game to me. Logic is really fun to mess with.<\/p>\n<p>Learning is fun too: the excitement of discovery, the joy to finally understand a hard concept. It brings more colors to the world.<\/p>\n<p>In this article, I will describe the process I used to learn the programming languages I know. I\u2019ll answer these questions:<\/p>\n<ul>\n<li>How can you properly&nbsp;learn a new programming language?<\/li>\n<li>What are the best resources to use?<\/li>\n<li>What mindset should you have?<\/li>\n<li>What tools should you&nbsp;use?<\/li>\n<li>What are the other benefits of this learning methodology?<\/li>\n<\/ul>\n<p>It doesn\u2019t matter if you\u2019re a complete beginner or if you already know a programming language. The process remains roughly the same.<\/p>\n<p>Come with me, dear reader! Let\u2019s go to Programming Land where every variable, functions, and classes live in peace and harmony.<\/p>\n<h2 id=\"an-environment-where-you-can-focus\">An environment where you can focus<\/h2>\n<p>Let\u2019s be honest: learning a new programming language takes time and effort. Nothing&nbsp;is impossible, but don\u2019t expect programming to be<span>&nbsp;<\/span><em>easy<\/em>.<\/p>\n<p>In general, learning&nbsp;something new means you need to focus on the<span>&nbsp;<\/span><em>quality<\/em>&nbsp;of your learning. If you try to push yourself too much, you won\u2019t learn anything. If you watch some funny YouTube videos while learning, you won\u2019t learn much either.<\/p>\n<p>Here\u2019s what you\u2019ll need:<\/p>\n<ul>\n<li>A quiet place where you can focus only on what you want to learn.<\/li>\n<li>A place which is<span>&nbsp;<\/span><em>inspiring<\/em><span>&nbsp;<\/span>to you. The best environment would be somewhere where you won\u2019t be tempted to do something else.<\/li>\n<li>To choose your code editor \/ IDE quickly. We want to learn a programming language, not finding the perfect tool. Don\u2019t spend hours on it: just choose the most popular option. You can always change later, depending on your needs. I definitely advise an editor with some sort of auto completion, it will help you a lot.<\/li>\n<\/ul>\n<p>I have a whole article which is more focused on<span>&nbsp;<\/span><a href=\"https:\/\/thevaluable.dev\/learning-developer-efficiently-effectively\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">learning in general<\/a>, if you\u2019re interested.<\/p>\n<h2 id=\"the-first-step-learning-the-basics-of-your-programming-language\">The first step: Learning the basics of your programming language<\/h2>\n<p>The basics include:<\/p>\n<ol>\n<li>Code syntax<\/li>\n<li>The fundamentals of programming<\/li>\n<\/ol>\n<p>The first is unique per programming language, the second can be applied to many of them.<\/p>\n<p>Don\u2019t be afraid by the fundamentals if you\u2019re a beginner. You\u2019ll get them along the way.<\/p>\n<h2 id=\"finding-the-best-resources\">Finding the best resources<\/h2>\n<p>To learn the syntax of a new language, the best method is to take a book and copy the code given as examples. It sounds dumb but it\u2019s the most effective to me.<\/p>\n<p>Reading a book is not enough. If you want to learn something new, you need to learn&nbsp;<em>actively<\/em>. Reading is too passive.<\/p>\n<p>If your book is good enough, it\u2019ll explain the basics of the language&nbsp;<em>syntax<\/em>, some general<span>&nbsp;<\/span><em>fundamentals<\/em><span>&nbsp;<\/span>with code snippets as examples. Copy these examples in your code editor and execute them. Play with them.<\/p>\n<p>Don\u2019t try to understand everything in detail while reading the book, especially if you\u2019re a beginner. You can go back to it later. For now, the goal is to have a good&nbsp;idea about how the language works.<\/p>\n<p>There are a lot of books out there which provide&nbsp;code with explanation. I personally really like the whole<span>&nbsp;<\/span><a href=\"https:\/\/learncodethehardway.org\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">learn code the hard way<\/a><span>&nbsp;collection<\/span>. Don\u2019t be afraid by \u201chard\u201d in the title: it indicates that it\u2019ll teach you properly what you need to know, without shortcuts. This is what we want.<\/p>\n<p>For the folks who already have some experience, these books can be a bit boring . However, it can still teach you some fundamentals you didn\u2019t know beforehand, or refresh some forgotten memories.<\/p>\n<p>You might ask yourself: why a book? Why not follow some articles on internet? Or watch some Youtube video? The quality of the content on the internet can be very random. You don\u2019t want to learn bad habits; it\u2019s easy to learn inaccurate concepts, increasing your confusion.&nbsp;Learning is easier than unlearning.<\/p>\n<p>A book, on the other hand, can be advised by the community of the language you want to learn. You need to be sure you can trust its teaching: you should ask around in forums<span>&nbsp;and&nbsp;<\/span>discussion groups what would be the best book. Positive book reviews on a website like&nbsp;<a href=\"https:\/\/www.goodreads.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">goodreads<\/a><span>&nbsp;<\/span>can be a good indicator as well.<\/p>\n<p>You want to avoid misconceptions, \u201cknowing\u201d something which is only partially true or absolutely wrong.<\/p>\n<p>Now, I have a little quiz for you. What\u2019s the best way to learn from these very objective propositions?<\/p>\n<ol>\n<li>Focus on your book on a regular basis, from 30 minutes to 2 hours maximum per session.<\/li>\n<li>Cram&nbsp;8 hours of study every two months, your belly full of RedBull, at 2:00am, when your procrastination can\u2019t let you sleep anymore.<\/li>\n<\/ol>\n<p>I have no partnership with RedBull and human attention is very short. Learning two hours straight is already challenging. That\u2019s why the first path will make you wise, rich, and glorious. You\u2019ll learn tremendously faster that way.<\/p>\n<p>Take your time, be patient, and you\u2019ll get there. Don\u2019t forget: the most difficult part is the beginning. If you have some tendencies to procrastinate, like everybody, try to open your book only for 10 minutes. Close it if after these 10 minutes you still don\u2019t want to learn.<\/p>\n<p>You might be surprised how far this simple technique can lead you.<\/p>\n<h2 id=\"assessing-your-knowledge\">Assessing your knowledge<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/03.jpg\" alt=\"Questions are a good way to learn\" class=\" lazy\" data-lazy=\"true\"><\/p>\n<p>Come back to the code you wrote from time to time, without the book this time. Ask yourself:<\/p>\n<ul>\n<li>What did I learned the last time?<\/li>\n<li>What was the purpose of the examples and what the book tried to teach you?<\/li>\n<li>What does mean this specific syntax?<\/li>\n<li>What the purpose of this function?<\/li>\n<li>What is the output of this example?<\/li>\n<\/ul>\n<p>This is meant for you to<span>&nbsp;<\/span><em>remember<\/em><span>&nbsp;<\/span>the fundamentals and the syntax of your new programming language. Trying to remember what you learned the last time will reinforce your memory.<\/p>\n<p>If you\u2019re really motivated, you can even try to find other solutions to get the same output of your code snippets, for example.<\/p>\n<p>When you write your code, don\u2019t use too many comments! Try to understand the code as it is. It will, most of the time, give you enough information for you to find what was the purpose of it. On top, when you\u2019ll be a rich and famous developer working for the NASA, your colleagues won\u2019t comment every single line of code they will write (I hope). They will expect you to understand the code.<\/p>\n<p>If you have no idea what you\u2019ve written, that\u2019s perfectly fine. Even if Yoda himself said the contrary,&nbsp;trying is the most important.<\/p>\n<p>After your tries to remember what you learned the previous learning sessions, open your book and let these \u201caha! I remember now!\u201d thoughts of victory blossom in your wonderful soul.<\/p>\n<p>You can test yourself every week or every two days, it doesn\u2019t matter. Simply have a study plan:<\/p>\n<ol>\n<li>Read the book<\/li>\n<li>Copy the code<\/li>\n<li>Test yourself, without the book, from time to time<\/li>\n<li>Play with the code \u2013 modify it, add your own ideas to understand how it<span>&nbsp;<\/span><em>really<\/em><span>&nbsp;<\/span>works<\/li>\n<li>GOTO 1<\/li>\n<\/ol>\n<p>You need to find your own pace: not too slow or your motivation will suffer, not too fast or you\u2019ll feel exhausted. Find a balance to keep your interest in your new programming language. That\u2019s the most important!<\/p>\n<h2 id=\"the-second-step-beginning-a-side-project\">The second step: Beginning a side project<\/h2>\n<p>When you\u2019re half-way in your book, you can begin the second step of this plan to rule the universe: beginning a side project.<\/p>\n<p>Actually, you can begin it whenever you\u2019re able to use the syntax of your new programming language without too many difficulties. Just try and adjust: if it\u2019s too hard to build something, you might not be ready yet.<\/p>\n<p>If you\u2019re totally bored with your book, if only opening it feels like a torture, if you have the despite every page of it, it might be a subtle indicator that you need something a bit more concrete and creative. Hence the side project!<\/p>\n<p>What the benefit of a side project, you might ask? Learning the syntax and the fundamentals of a programming language is&nbsp;essential, but definitely not enough. Programming is about problem solving, and you need to be able to solve all kinds of problem with your new language.<\/p>\n<h2 id=\"what-side-project-can-you-build\">What side projects can you build?<\/h2>\n<p>I already wrote a series of articles about side projects:<\/p>\n<ul>\n<li>\n<a href=\"https:\/\/thevaluable.dev\/side-project-successful\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">The first article<\/a><span>&nbsp;<\/span>is about the mindset to have to carry your side project through its end. Believe it or not, the mindset is the most important!<\/li>\n<li>\n<a href=\"https:\/\/thevaluable.dev\/side-project-tools-practices\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">The second article<\/a><span>&nbsp;<\/span>focus on the tools I\u2019m using to follow this mindset.<\/li>\n<\/ul>\n<p>If you need to remember only one thing from these articles: build something<span>&nbsp;<\/span><em>small<\/em>! You don\u2019t want to build the best application of the year and become rich, famous and unhappy. You want to learn a new language.<\/p>\n<p>Your side project could be anything from a todo list app, a pomodoro app or a calculator. Even better: if you have some<span>&nbsp;<\/span><a href=\"https:\/\/thevaluable.dev\/programming-project-ideas-personal-generation\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">personal ideas<\/a><span>&nbsp;<\/span>which could be a fun small project, please proceed. It\u2019s even better than picking random ideas on The Internet.<\/p>\n<p>If you want to build something bigger afterward, feel free to do so. Go step by step, begin by something little, and build bigger and higher, if that\u2019s what you want.<\/p>\n<h2 id=\"the-best-way-to-work-on-a-side-project\">The best way to work on a side project<\/h2>\n<p>You need to know<span>&nbsp;<\/span><em>exactly<\/em><span>&nbsp;<\/span>what functionalities your side project will have. I will never say it enough: as few as possible, for the beginning, is the best. You can still add more on top later.<\/p>\n<p>Then, follow these steps:<\/p>\n<ol>\n<li>Open your code editor.<\/li>\n<li>Choose the functionality you want to code.<\/li>\n<li>Code.<\/li>\n<li>Google is your friend when you\u2019re stuck.<\/li>\n<li>Hooray! Your functionality works.<\/li>\n<li>Go back to 2.<\/li>\n<\/ol>\n<p>This is called an iterative process. Even if you\u2019re wrong at the beginning, you\u2019ll fix your mistakes and come closer to your goals after each iteration. Consider the first iteration as an imperfect draft.<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Analysis_paralysis\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Analysis paralysis<\/a><span>&nbsp;<\/span>can be your biggest enemy as a developer: don\u2019t over think. Code something. Don\u2019t try to find the perfection in these wonderful lines of code. Perfection don\u2019t exist, and it\u2019s ugly anyway.<\/p>\n<p>Don\u2019t spend an awful amount of time searching the best tools either. I would suggest not using any framework for your first side project. If you need some libraries, take the first one advised by the community (or first ranked by Google) and go for it. Even better: code it yourself if it\u2019s not too long (or too boring).<\/p>\n<p>If you feel comfortable, you should try to write some automated tests as well. It\u2019s important to know how the language handle testing. Consider it as a bonus.<\/p>\n<h2 id=\"the-third-step-show-the-world-your-new-talents\">The third step: Show the world your new talents<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/01.jpg\" alt=\"learning programming language and talents\" class=\" lazy\" data-lazy=\"true\"><\/p>\n<h2 id=\"share-your-code-and-grow-your-credibility\">Share your code and grow your credibility<\/h2>\n<p>If you\u2019re a beginner in the fantastic development world full of unicorns, rainbows and mortal tar pits, you need to get a bit familiar with<span>&nbsp;<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Git\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">git<\/a>. It\u2019s basically a system which allow you to version and push all your code on an external server.<\/p>\n<p>The how and the why of git are beyond the scope of this article. If you want me to speak about that, you can contact me. I would love to hear from you!<\/p>\n<p>Install git on your system and create an account on<span>&nbsp;<\/span><a href=\"https:\/\/github.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Github<\/a>. Then,<span>&nbsp;<\/span><a href=\"https:\/\/help.github.com\/en\/articles\/adding-an-existing-project-to-github-using-the-command-line\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">push your project<\/a>.<\/p>\n<p>When it\u2019s done, congratulation! You can now show your code to the whole world. This is especially useful if you\u2019re planning to find your first&nbsp;<a href=\"https:\/\/thevaluable.dev\/find-best-software-developer-job\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">job as a developer<\/a>. You can show your fantastic side project to anybody who wants to see your new skills.<\/p>\n<p>It\u2019s even better than building a portfolio filled with emptiness!<\/p>\n<p>That\u2019s why a side project is important: it will teach you your new shiny programming language&nbsp;and&nbsp;it will improve your credibility as a developer. More code you will have on Github, more chances you will have to skip the boring and usual interview coding tests. Yes,&nbsp;<a href=\"https:\/\/thevaluable.dev\/find-best-software-developer-job\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">I hate them<\/a>.<\/p>\n<p>How nice is that?<\/p>\n<h2 id=\"get-feedback-from-your-peers\">Get feedback from your peers<\/h2>\n<p>All of that is very nice but there\u2019s something important to keep in mind: working alone on a side project can teach you a lot of crap.<\/p>\n<p>Even if you follow a serious and praised book, you can still misunderstand some concepts. You can as well be victim of<span>&nbsp;<\/span><em>illusion of competence<\/em>, when you think you know something, but you\u2019re not able to use it, or even to explain it. Not really useful in my opinion.<\/p>\n<p>Writing the code from your book and building a side project can prevent you to fill your brain with nonsense, but there is still some risks.<\/p>\n<p>That\u2019s why I would advise you to show your code to a maximum of people. Go to Reddit, forums, Facebook groups, and ask for feedback. Negative ones are the best: they are never easy to handle, but they will teach you a lot, and that\u2019s what we want.<\/p>\n<p>If you know some experienced developers, ask them some feedback too. Heck, you can ask me some feedback!<\/p>\n<p>Having a mentor you know well and who can provide personalized advice would be the best of the best.<\/p>\n<p>Having feedback is great when it\u2019s constructive. Don\u2019t take into account pure criticism without any arguments or explanations. What you want is constructive feedback. They explain your mistakes and give you solutions to fix them.<\/p>\n<h2 id=\"does-your-method-really-work-to-learn-a-programming-language\">Does your method really work to learn a programming language?<\/h2>\n<p>This part is not only an ego-centered gabbling about me and how great I am (the<span>&nbsp;<\/span><a href=\"https:\/\/thevaluable.dev\/page\/about\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">about page of this blog<\/a><span>&nbsp;<\/span>is there for that), but more about giving you concrete examples.<\/p>\n<h2 id=\"how-did-i-learn-programming-20-years-ago\">How did I learn programming 20 years ago<\/h2>\n<p>When I was a young man, I wanted to code video games. I loved playing them, and I had already these weird desires to create stuff on a screen.<\/p>\n<p>My parents, tired to listen to me speaking about it, bought me a book to learn C, for my birthday. I spent months on this book. I was already applying the three steps technique I just explained you, instinctively. I didn\u2019t have Internet at that point, so I didn\u2019t have the choice, and I\u2019m very happy about that.<\/p>\n<p>I read everything and copied most of the code while reading. The book taught me as well all the fundamentals of programming I needed, at a low level. It\u2019s goddamn C.<\/p>\n<p>Halfway through the book, I began to code my first side project: a textual RPG where you could choose your race and your weapons to go on a text-based adventure, in the Windows terminal. Then, I went into a wall: be damned, you pointers!<\/p>\n<h2 id=\"how-did-i-learn-golang-in-2018\">How did I learn Goland in 2018<\/h2>\n<p>Let\u2019s go back to a fresher past. After 8 years as a PHP developer, I decided to learn a new programming language to extend my skills. I choose Golang for many reasons. Again, if you want to know them, \u201ccomment below\u201d and I will do as you say, master!<\/p>\n<ol>\n<li>First Step: One of my colleague advised me to read<span>&nbsp;<\/span><a href=\"https:\/\/www.manning.com\/books\/go-in-practice\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Go in Practice<\/a><span>&nbsp;<\/span>while<span>&nbsp;<\/span><a href=\"https:\/\/github.com\/Phantas0s\/playground\/tree\/master\/golang\/go-in-practice\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">copying all the code given as example<\/a>. It\u2019s what he did to learn the language.<\/li>\n<li>Second Step: Halfway trough the book, I began my first side project in Golang:<span>&nbsp;<\/span><a href=\"https:\/\/github.com\/Phantas0s\/testomatic\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">testomatic<\/a>.<\/li>\n<li>Third Step: I shared my code on the<span>&nbsp;<\/span><a href=\"https:\/\/groups.google.com\/forum\/#!forum\/golang-nuts\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Golang google group<\/a><span>&nbsp;<\/span>and on the<span>&nbsp;<\/span><a href=\"https:\/\/www.reddit.com\/r\/golang\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Golang subreddit<\/a>. The sweet Golang community gave me valuable feedback, helping me understand the general idioms.<\/li>\n<\/ol>\n<p>The result? I found a job in may 2018 as a full time Golang developer. My side project<span>&nbsp;<\/span><code>testomatic<\/code><span>&nbsp;<\/span>helped me a lot at the beginning, as a reference to look into, when I wasn\u2019t sure about the syntax. Very useful!<\/p>\n<ol start=\"4\">\n<li>Bonus step: after beginning my new job, I read<span>&nbsp;<\/span><a href=\"https:\/\/www.manning.com\/books\/go-in-action\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Go in Action<\/a><span>&nbsp;<\/span>to understand better the fundamentals and mechanics of the language.<\/li>\n<\/ol>\n<p>Here\u2019s some cool graphs on the time spent to learn Golang:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/first-step-graph.png\" alt=\"learning a new programming language first step: effective Go\" class=\" lazy\" data-lazy=\"true\"><em>First step: going through Effective Go<\/em><\/p>\n<ul>\n<li>On the y-axis are the Pomodoro I did each week.<\/li>\n<li>One Pomodoro is 25 minutes of focused learning.<\/li>\n<\/ul>\n<p>As you can see, I began to read the book in January 2018, slowly but consistently: this is the key to learn anything you want. The time I spent on it in March and April increased: this was the notice period from my position of PHP developer to Golang developer.<\/p>\n<p>I wanted to be ready for my new job, and I was enjoying myself.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/second-step-graph.png\" alt=\"learning a new programming language second step: testomatic\" class=\" lazy\" data-lazy=\"true\"><em>Second step: testomatic, my first side project in Golang<\/em><\/p>\n<ul>\n<li>The red line represent the amount of work I expected to do each week.<\/li>\n<li>The blue line is the amount of work I was really doing.<\/li>\n<\/ul>\n<p>Again, you can see the same pattern: I began slowly but consistently. Then, my motivation went through the roof in March and April.<\/p>\n<p>This is a good example to underline an healthy idea: you don\u2019t have to overwhelm yourself by planning 29 hours of learning a week to make through your side project. Only 25 minutes a day can bring you unexpected results, when it\u2019s done<span>&nbsp;<\/span><em>consistently<\/em>.<\/p>\n<p>You might notice that I never finished the book. When I began to work as a full time Golang developer, I judged that I didn\u2019t really need to. It\u2019s perfectly fine; don\u2019t put pressure on yourself to finish every single book, if you don\u2019t feel like it.<\/p>\n<p>You can always come back to unfinished books later.<\/p>\n<h2 id=\"how-did-i-learn-clojure-in-2020\">How did I learn Clojure in 2020<\/h2>\n<p>Ah! 2020! You were full or promises. Humanity as a whole saw your potential. We were full of projects, we ended up on our couches, seeing chaos and misery harnessing the world.<\/p>\n<p>Somehow, I still managed to do something I\u2019m pretty proud of: I learned<span>&nbsp;<\/span><a href=\"https:\/\/clojure.org\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Clojure<\/a>.<\/p>\n<ol>\n<li>First Step: I was again advised by a good soul to read the free book<span>&nbsp;<\/span><a href=\"https:\/\/www.braveclojure.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Clojure for the Brave and True<\/a>. This book is so good! The author needs million of dollars and a statue in my living room.<\/li>\n<li>Second Step: Halfway trough the book, I was still trying to understand the first chapters. It\u2019s a whole new paradigm, so don\u2019t judge me.<\/li>\n<li>Third Step: After finishing the book, I found a snake game written in Clojure, and I modified it for my needs. I wanted to teach some Vim concepts with it.<span>&nbsp;<\/span><a href=\"https:\/\/github.com\/Phantas0s\/snake.hjkl\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Here\u2019s the result<\/a>.<\/li>\n<li>Fourth Step: Feeling a bit more in control of my destiny, I went on my own project, using a library to build a<span>&nbsp;<\/span><a href=\"https:\/\/github.com\/Phantas0s\/sokoban\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Sokoban game<\/a>. I learned a great deal about WebGL at the same time. Why not? I had time.<\/li>\n<\/ol>\n<p>In this special context, I thought creating funny little games could be nice. Plus, video game development is crippled with states, and functional programming has some interesting ideas about that.<\/p>\n<p>Here are some data:<\/p>\n<picture><source srcset=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/clojure_graph.webp\" type=\"image\/webp\"><img decoding=\"async\" src=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/clojure_graph.png\" alt=\"Time spent on learning Clojure\" class=\" lazy\" data-lazy=\"true\"><\/picture>\n<p>This is the time I spent in 2020 on reading Learn Clojure for the Brave and True. I<span>&nbsp;<\/span><a href=\"https:\/\/github.com\/Phantas0s\/playground\/tree\/master\/clojure\/brave-clojure\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">copied all the code as well<\/a>. The red curve was my goal, the blue curve how much time I really spent on it.<\/p>\n<p>In total, 38.75 hours. I spent already 20 hours on it at the end of 2019, so the total is a glorious 58.75 hours.<\/p>\n<p>Again, the hardest is to begin. Then, time flies by!<\/p>\n<picture><source srcset=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/clojure_games.webp\" type=\"image\/webp\"><img decoding=\"async\" src=\"https:\/\/thevaluable.dev\/images\/2019\/learning_new_language\/clojure_games.png\" alt=\"Time spent on building Clojure games\" class=\" lazy\" data-lazy=\"true\"><\/picture>\n<p>This is the time I spent to build my two games. In total, 100 hours. Gosh, I didn\u2019t do game development since I was 18. It was good.<\/p>\n<p>The conclusion: if you want to learn a ton, just pick a language in a paradigm you don\u2019t know, with a weird syntax. Many new skills guaranteed.<\/p>\n<blockquote readability=\"7\">\n<p>A language that doesn\u2019t affect the way you think about programming, is not worth knowing. \u2014&nbsp;Alan Perlis<\/p>\n<\/blockquote>\n<p>There is nothing exceptional here. Just spend 10 minutes each day on the language of your dreams, and you\u2019ll end up spending hours without even noticing it.<\/p>\n<p>By the way: you\u2019re never really done learning a language, and that\u2019s great. Learning is fun!<\/p>\n<h2 id=\"coding-is-the-best-way-to-learn-a-programming-language\">Coding is the best way to learn a programming language<\/h2>\n<p>Here\u2019s a condensed version of the learning method described through this article:<\/p>\n<ul>\n<li>Step 1: find a well-known and rated book, follow it and write the code given as example.<\/li>\n<li>Step 2: half-way through the book (or when you feel ready), begin a&nbsp;small&nbsp;side project. If it\u2019s something personal, it\u2019s even better. Continue your book and you side project in parallel.<\/li>\n<li>Step 3: show your code to whoever can give you feedback. Having a mentor is the best!<\/li>\n<\/ul>\n<p>If you need to remember something from this article, remember that:<span>&nbsp;<\/span><em>active learning<\/em><span>&nbsp;<\/span>is always better than<span>&nbsp;<\/span><em>passive learning<\/em>.<\/p>\n<p>I agree that copying code examples from a book and coding your own side project are more efforts than passively watching coding videos on Youtube. However, since you\u2019re a (possible wannabe) developer, you should be able to enjoy it, at least most of the time.<\/p>\n<p>If you enjoy learning a new programming language, can we still speak about \u201ceffort\u201d and \u201cwork\u201d, or more about \u201cpleasure\u201d and \u201chobby\u201d?<\/p>\n<hr>\n<p><em>This article was written by&nbsp;<a href=\"https:\/\/thevaluable.dev\/page\/about\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Matthieu Cneude<\/a>&nbsp;and was originally published on&nbsp;<a href=\"https:\/\/thevaluable.dev\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">The Valuable Dev<\/a>, a blog focusing on the important and timeless concepts in software development. You can read the piece <a href=\"https:\/\/thevaluable.dev\/how-to-learn-programming-language\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here<\/a>.&nbsp;<\/em><\/p>\n<p> <a href=\"https:\/\/thenextweb.com\/syndication\/2020\/10\/09\/3-concrete-steps-to-learning-a-programming-language\/\">Source<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learning a programming language is stretching your skills, as a developer. It\u2019s a new tool in your toolbox, too. With it, you can create something out of thin air. If you\u2019re lucky,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":212,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=\/wp\/v2\/posts\/211"}],"collection":[{"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=211"}],"version-history":[{"count":0,"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=\/wp\/v2\/posts\/211\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=\/wp\/v2\/media\/212"}],"wp:attachment":[{"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.londonchiropracter.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}