How I would "learn to code"
Tags: productivity, javascript, beginners
Published: 2020-12-04 03:12:18

It's been a while since writing my last post. Thanks for baring with me :)

Let's talk about software development bootcamps shall we? I've been really interested in the act of learning lately. How to learn different types of things, optimizing for efficiency, mastery, and enjoyment. Something really close to my heart is learning how to program, because I ***too*** went to college not knowing what to do, and then I found software a little too late (for traditional educations sake), so I had to improvise and find a non traditional path.

Everyone and their mom (yes their mom's too) has signed up for a software bootcamp. We all know, traditional education is fucked. The bootcamp model has been a refreshing change of pace, where they've "adopted" the older trade school mentality of preparing people for a trade or specific skillset (go figure). Except, we're banging on keys instead of laying bricks. But, are we optimizing for education, learning, and productivity?

I honestly don't think so.

You show up, spend 100 hours a week, pay a bunch of money, and then they promise that you WILL get a job. How do they know you'll get a job? Well, they run a statistical analysis based on past grads and their employment. Though, it can be a bit unclear how they define "job". Hopefully, you now feel comfortable enough to hand them thousands of dollars. 

You spend all this time learning everything from basic command line commands, git, some trendy javascript framework, and maybe a backend technology. They put you through the machine and spit you out going from nothing to a software engineer in 8-12 weeks. Okkkkkk?

Though, bootcamps aren't all negative. There's always something to be taken away from any experience. Bootcamps are excellent for allocating dedicated and uninterrupted time to spend with like minded people, projecting you into an unstoppable momentum after the program is over. As long as you're not burnt out.

In addition, the people you meet will likely change your life. Meeting people from all walks of life, people who said, "Fuck it, I'm going to do this". Which is an amazing and powerful ecosystem to be apart of, and you will likely come away with some really close and long term friends.

Ya ya we get it Scott, how would you run a bootcamp?

I would start by making a basic course for yourself based on advice people you respect and whom are competent engineers recommend. While we're here, I'd say "specializing" at this stage is better than generalizing to increase your chances of landing your first gig. For example, lets say we're just going to focus on frontend development. It's ok to thrash around, your course should be your map, it's ok to get lost. A mentor of mine once told me, "it's ok to pick up a book thats way over your head. When you find something you don't know in that book, go find a resource to learn that thing, come back to the original book when you're ready". This has worked exceptionally well for me and my learning endeavors. 

Next, find a mentor. Not sure how to find one, [read here](https://scottistern.com/networking/). I think having a GREAT mentor is exponentially more valuable than going through a program. That being said, the mentor should have some impressive shit on their resume and be a good teacher. You'd be surprised, there are a lot of great athletes, engineers, writers, who suck at teaching. Make sure your mentor isn't one of them.

I think to get started some basic Javascript course and CS course will do. Like the free one on edx from Harvard? IMHO learning React is too complicated and shouldn't be the emphasis. Learning what React is built on top of, will get you much further long term. You should wield JSX like a sword, not use it because `create-react-app` came with it and you can't tell me what a package.json is.

Too harsh, but someone needs to say it.

Another great learning tool is reading the MDN docs. The best and most frustrating advice I constantly receive is to read the docs :) Go find a sandbox and play with what you learn! Sandboxing new concepts is a great way to make sure you grasp that concept and you can use it in a vacuum. My personal favorite tools are [CodePen](https://codepen.io/), [CoderPad](https://coderpad.io/), and [Repl.it](https://repl.it/) to name a few.

Next step, CONTRIBUTE TO OPEN SOURCE.

It's literally the closest thing to working on a team you can possibly get to. Thus, getting you closer to your goal. If you want to learn how to "speak" a language you wouldn't learn using Duolingo, would you? No you wouldn't. Well, maybe you're a masochist and love doing things that don't directly influence your success and progress towards a specific goal. I'm kind of kidding, I love Duolingo and think it has a place in the learning ecosystem. If you ask yourself, what am I optimizing for in this case? I am optimizing to "speak" to people using a different language. Talking into an app and clicking on pictures is pretty far away from that. So a better language learning solution would be to hire a tutor, and talk to them in that language. Go fucking figure.

This software education learning experience is not a 12 week stint, this is a lifestyle. It's always going to be challenging, your challenges are just going to change, and your challenges will get more complicated. Get used to it.

Here are some things to consider when contributing to open source:

- Look for the "Good First Issue" label
- Find a well supported and active open source project
- Pick an open source project that people interviewing you have heard of. For example, Eslint, Gitlab, Nodejs, Babel etc.
- [Find a mentor] (https://scottistern.com/networking/)
- [Read my contributing to open source blog post](https://scottistern.com/how-to-make-your-First-contribution-to-open-source/) :)

Get to work! Get going!

If you have any question, comments, or things you want me to expand on in future posts please let me know

Thanks for reading, it's good to be back! :)

Scott