How Long Will It Take To Learn A Language
Tags: beginners, career, codenewbie
Published: 2022-10-17 12:43:53

_A better question is "How long until I'm productive". Here's a short checklist that'll tell you if you're ready. This advice generalizes to any language._

#### Productivity vs Mastery
<!-- wp:paragraph -->
<p>A really common question I stumble across on the Internet is "How long will it take me to learn X" where "X" is Javascript, Python, Vue.js, Angular.js, etc. A hidden assumption in this question is that at some point "you get it". That there's some magical 10,000 hour number where you hit it and now you can challenge Brendan Eich to Javascript duels at dawn. But that's not really how it works. Let me explain...</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>If you're read my prior post on <a href="https://onrampdev.com/?p=43">choosing a programming language</a>, then you know that programming languages can be similar to human languages. And like human languages, programming languages are never really <em>mastered</em>. It's much more common to learn a little bit, get your task done, learn a little bit more, get the next task done, etc. Instead of asking "when will I know X", a better question is "when can I be productive in X". And the answer to that is usually "a couple of hours".</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>Getting Productive</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Here's a simple checklist of questions you can ask yourself to figure out if you can actually get stuff done in a language:</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol><li>I can use conditionals. <ul><li>"If &lt;some condition&gt; then &lt;something&gt; else &lt;something else&gt;"</li></ul></li><li>I can write loops.<ul><li>Display every number from 1-10</li></ul></li><li>A combination of the prior 2, the fizzbuzz test.<ul><li>Up to 100, for every number divisible by 3 print "fizz", for every number divisible by 5 print "buzz" but for numbers divisible by both print "fizzbuzz"</li></ul></li><li>I can define variables.</li><li>I can define functions or methods.</li><li>I can use basic data structures effectively.<ul><li>Arrays, dictionaries</li></ul></li><li>I can define and use basic "compositions" in the language.<ul><li>For an object-oriented programming languages this means being able to define and use classes and objects.</li><li>In a functional language, this might mean being able to define/use first-order functions and/or composite data structures.</li></ul></li></ol>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>With the knowledge from this list in hand you'll have enough to write small to medium sized programs. Anything you find yourself needing after this can be Googled or discovered on an as-needed basis. Project-based learning is the best way to push your knowledge forward. <strong>My go-to project for really testing the limits of my knowledge and forcing me to learn a language is Tic Tac Toe.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>If this post was helpful, you should <a href="https://artisanal-knitter-4166.ck.page/7a08f37f37">join the mailing list</a>.</p>
<!-- /wp:paragraph -->