Learning Paths
Don’t search for all the answers at once. A path is formed by laying one stone at a time.
-The big creepy giant from Twin Peaks season 2 episode 1
Man, that creepy giant is smart. Truthfully, it’s a piece of advice I have to remind myself of constantly. My natural inclination is to dive in head first and consume every bit of information I can when learning a new subject. And it’s taken consistent reminding to enforce the idea of writing small bits of code to produce larger solutions, rather than trying to write the whole thing at once and then spending hours debugging when it inevitably doesn’t work.
So how to approach going from a coding novice to a coding pro? Of course the answer is to follow a logical, stepwise study plan that progressively builds on a strong set of fundamentals, but finding that program is quite a challenge for a beginner with internet access. There are a ton of resources available, both free and paid, and to make matters worse, it’s not entirely clear what order things should be learned in. Oh, you want to get involved with web development? Well just read this characterization of how it feels to learn JavaScript. What newcomer wouldn’t be intimidated by this?
The Plan
Well, after much research, reading, and general internet browsing, I think I’ve come up with a pretty solid plan for learning software development. It’s designed to not just teach me how to write code, but how to think and solve problems like a programmer. I’ve tried to balance courses that will focus on writing code with courses that will teach theory and reinforce problem-solving mindsets. At a high-level, my learning plan is as follows:
- Attend the Georgia Tech Coding Camp starting in April and concluding in October
- Complete some self-study courses through EdX and Coursera
- Build a kickass portfolio
- Connect with the community through meetups, conferences, and any other opportunities available
The Bootcamp
Attending a bootcamp isn’t all that crazy now. This learning model has been around for a few years, and has produced many developers who are enjoying successful careers. That’s not to say that bootcamps don’t get their fair share of flack, though. I read a lot of posts and opinions about how bootcamps don’t do an adequate job preparing students, and how their self-reported employment numbers are largely a scam. Just recently, I came across a good post about one graduate’s thoughts on 5 lessons her bootcamp hadn’t taught her. I think they’re fair points, and ones that I’ve read repeatedly from others, and they’re part of the reason I chose the bootcamp I did.
Rather than attending one of the common bootcamp courses such as General Assembly, I’ve chosen to attend the Georgia Tech Coding Camp instead. The key difference is that this course takes place over six months instead of three, and it is designed to be a part-time program. The reason this is significant is because this means I’ll have twice the time to study the material, and I’ll have additional free hours to supplement what the camp teaches. Because the bootcamps can only teach so much, many of the graduates come out with only a basic understanding of some topics. By giving myself time, and completing additional study work (see point 2 of my study plan), I intend to be more qualified and better studied than the majority of other graduates coming from this, or any other camp. Of course there is a time trade-off, and I’ll be delaying starting my job search by at least three months longer than a GA grad, but considering most GA grads report needing another 3 months to find jobs anyways, this seems worthwhile.
Supplemental Self-Study
I’m a big believer in continuous learning. I can’t imagine a life where I’m not constantly learning things. Of course, I’ve ramped things up a bit for this and am pushing myself harder than normal. When I decided I wanted to make this change, I immediately started self-studying beyond the hobby programming I was already doing. Currently, I’m working through Eloquent JavaScript and have also been reading You Don’t Know JavaScript some. These will give me a head start on JavaScript before the bootcamp starts, but I’ve got more in mind for even after I’ve started attending classes there.
One of the more common criticisms I read about bootcamp grads is a weak grasp on some fundamental CS concepts. Namely, algorithms and data structures. So to combat this, I will be completing some of the free courses available through EdX and Coursera to increase my knowledge in these areas. I’ve already started some study of algorithms, my github profile shows some implementations I’ve written of some classic search and sort algorithms in Python and Java, and I’m planning to write these in JavaScript as well. I definitely want to go deeper, though. I have a rudimentary understanding of Big O currently, but I’d like to expand on that. To do that, I think I may need some additional math training, so I’m also planning to complete some mathematical courses. There’s of course a close tie between computer science and math, so I can only imagine that brushing up on my math will be beneficial. Currently, I’m planning to start with a mathematical course, and then move into an algorithms course afterwards.
For data structures, I’ve also already started some introductory studying. I’m not really sure how deep to go here. I haven’t decided if I’ll aim to complete a course on data structures in Java, the lowest-level language I know, or maybe just forego that and focus more on how people use data structures in JavaScript and Python, the two languages I’m most interested in working with.
Kickass Portfolio and Community Connections
The last two points of my plan are less operational and more aspirational. If I want to get hired, I’m going to need a great portfolio, and not just one full of to-do lists and calculator apps (though I’ll probably have those things as well). The portfolio will be a result of the bootcamp, the self-learning, and projects I undertake on my own, plus all my knowledge from prior experiences. After all, isn’t that what really makes me compelling as a person and programmer, the past experiences and background I can offer versus others? I’m passionate about security, and I’m hopeful to have at least a couple of security projects included. I think these could be a good way to show passions, and help me stand out. One thing is for sure, I plan to work my butt off to have a good looking portfolio.
Then, to make the transition easier, I want to have a high level of community involvement as soon as possible. This isn’t purely for the purposes of scoring an ‘in’ with anyone. One of the things I disliked most about my previous position was the limits it put on my ability to be a part of a community. The consultant lifestyle of being on the road constantly and working long hours does not leave much time for socializing with others outside of your immediate vicinity. I am incredibly excited to start integrating myself with the local software community, and I’ve already got a growing list of meetups that I hope to frequent. I am also looking at possibilities for hosting and assisting with some local events as well. I really want to help build a thriving community here in Atlanta, because I do think it’s a great place to be.
My Expectations
Out of all of this I have a few expectations for the bootcamp, and myself.
- Enough knowledge and experience to pursue a junior developer position
- A skillset that I’ll be able to use for a variety of things
- A lot of hard work that will ultimately be very rewarding
- Hopefully some new friendships and other connections
Time will tell how reasonable these are.