"Going into this I already knew HTML and CSS. I had also already taken AP CS in high school, and CS101 in college. I did well in both. But despite this I basically wasn't able to code my way out of a paper bag.
Why?
Firstly, C++ and Java aren't commonly used in (successful) web startups."
Are you saying you knew C++ and Java prior to this? I would have thought this would be a great jumping off point into other languages - I found the switch from C++ to Python to be surprisingly easy.
Also while start-ups may tend to stick to Ruby or Python, many web companies use Java or Scala (Twitter is probably the highest profile company I can think of). They tend to be higher scale though and it is probably harder to get started with them than with Python or Ruby.
Thanks Alex, this is great. I think a lot of people have the inspiration and understand the "why" behind learning to code, but the issue most of the time is where to start and having a roadmap for getting there. This is a great resource for that. How many hours per week were you spending on this material, how did you keep yourself motivated, and did you have any people you could go to for resources when you got stuck?
I probably spent 3 - 5 hours per day, 6 days per week. I kept myself motivated mostly by choosing the easiest resources to learn from I could find, which made it much easier to make measurable progress. I didn't have anyone else helping me in real life, so I just relied on the Udacity forums, Stack Overflow, and IRC. But again, because I was using really easy materials to learn from, fortunately I never got stuck that badly. Usually it was just a matter of putting down the book and doing a couple YouTube/Google searches.
I was working on a startup. But then one day I saw a post on HN about Udacity, and that it was starting in a couple days, so I signed up. I never thought I'd get anywhere near as far as I did, and certainly I didn't even intend to, but I just kind of got into a groove and kept going. Eventually I had to do the startup as a side project and get a job, so I was applying for mostly marketing jobs. But then I also applied for a couple coding jobs on a whim, and discovered it was actually much easier for me to get interviews for coding jobs even though I'm much more talented as a marketer. Go figure. So that's partly why I decided to go that direction as well.
This is a really good outline of the steps it takes to bootstrap a software development career. Succinct and useful.
"My initial plan wasn't to work as a developer indefinitely, but rather to stay on the tech side for at least two years and treat it as my own personal TFA-style program."
I had a similar plan when I first started but quickly realized that coding was exactly what I wanted to do - that I never wanted to go back to the marketing side.
That was a great read, the clear thinking about needing to know "why" before "how" is very insightful.
I would be curious to hear any views on taking a purely javascript approach to this same process.
I ask because I love python but often think it may be silly to take the time to get really good at it.
Ever since node.js became a real option it has been possible to do full stack development using javascript. Why not take that approach, thereby only learning one language, reducing the number of new things you have to assimilate all at once?
My thinking was that the documentation isn't nearly as strong for Node as it is for Django. And also JavaScript doesn't have all the same libraries for the backend. But certainly being good at JavaScript is very highly valued in the marketplace right now, so if you have other technical friends who can help you then this might make sense. But they might literally need to be willing to spend a couple dozen hours sitting next to you while you're learning Node, which isn't always trivial to set up. But in general I'd still recommend just learning Python, because I think the advantages of knowing you'll be successful outweigh whatever extra work there might be.
Woah, I followed pretty much the same roadmap as you, except I took the (Python-based) CS600 class at OpenMIT instead of Udacity's CS101. And my year was 2013. I really enjoyed Udacity's CS253 on web development, even if the particular technologies introduced in the course aren't very popular.
Since then, I've been switching gears from Python to JavaScript by learning Node and Angular. I don't view Python as a waste of time, because I think it is a great first language to learn particularly for CS fundamentals. Starting out, I may have been discouraged learning JavaScript as a first language. OOP isn't so straight-forward in JS, and there aren't as many learning resources for algorithms/CS-theory stuff in JS as there are in other languages. Also, learning server-side web development fundamentals with Node.js may have been a struggle, perhaps because there aren't as many resources devoted to beginners and docs as there are with Python/Django. Plus the asynchronous stuff. I'm struggling to learn AngularJS, although it's just straight up difficult I think.
I still need to figure out how to interview well. I have a decent GitHub/portfolio, so I'm generating a good number of interviews despite having 0 professional experience in the field and no CS degree (I have a math degree though). I've had about 20 technical phone screens/interviews not including take-home assignments, and I'm getting better at them. But I'm clearly not there yet, since nobody has offered me a job.
"But in general I'd still recommend just learning Python, because I think the advantages of knowing you'll be successful outweigh whatever extra work there might be."
This 100000x over. I commented on your blog so I wont put all that here. But I have tired to learn to code without any assistance from others for years. I have failed over and over, tried every language, I always get stuck, and while I can find help on google/stack etc it just eventually overwhelms me. I am going to try again using your guide and hope that I can be successful.
An interesting retrospective. What would be interesting would be to know the challenges you've encountered once you started working as a developer.
I have two questions though: I'm curious to know why you state that
"Ruby is probably the best platform to learn if you're a designer and you want to learn how to code to add value for your clients."
and also I'd love some more details on why "Python is fairly mediocre in a lot of ways"
(not starting a language war here, I'm genuinely curious)
In terms of Ruby, I'm saying that partly because of the omekase-nature of Rails, and also partly because Ruby doesn't have the same level of libraries for some of the tasks I mentioned. It seems like for all intents and purposes, the possibility space in terms of what you would want to use Ruby for is smaller, with the sweet spot being CRUD sites.
In terms of the downsides of Python: speed, lack of tail recursion and real threading, many libraries outdated, lack of some features of other modern languages, etc.
In terms of threading, Ruby and Python are in the same, sad, GIL boat. The speed issue is the same, but the C libraries alleviate this somewhat (Numpy, scikit-learn and lxml come to mind).
Tail recursion is really needed when you have a functional language, and since Guido van Rossum, and therefore Python, has a bias against FP, the lack of TCO is not that glaring when you write pythonic code (which is kind of a circular argument, I know).
When it comes to libraries, the old "batteries included" argument gets old, and the standard library shows its age, but it's usually addressed in external libraries...
...which brings me to my real gripe about Python, the ever changing way you're supposed to manage packages (use easy_install, wait, no use pip and virtualenv, wait you should take a look at wheels too, and so on).
Thanks for posting this Alex. I really love hearing the others' tales of code enlightenment, and with yours being very similar to my own story, it's especially nice.
I noticed at the bottom of the article it mentions that "Amazon affiliate links benefit Erowid". I think Erowid is a magnificent resource and I'm a big fan. What motivated your decision to support that site?
The fact that drug use and misuse kills at least 1 in 4 Americans, if you count legal, illegal, and prescription drugs. Supposedly eating healthy and exercising are the most important things for health, but these are difficult because you need to do them every day. Whereas with drugs, if you just sit down and read 10 books on drugs, or at least 10 books worth of information, then you're pretty much set for life. So I generally think the ROI from investing in teaching people about drugs is probably easily higher than the ROI of any other health-related programs.
Also, they're the only non-profit I know of with an affiliate link generator. And it seems like a waste of an opportunity not to use affiliate links, but at the same time the trust of my readers is obviously worth hundreds of times more than the 12 bucks or whatever I'd earn from redirecting them to myself.
Thanks for your response. Your 1 in 4 figure seems plausible, but I'd be curious to see a source (perhaps it's in your mind map? I read that article of yours and immediately downloaded FreeMind; I'm looking forward to trying it out!). I agree that basic knowledge about drugs can go a long way in terms of harms reduction, like knowing why it's bad to take excessive prescription opioids that contain APAP.
There are about 443,000 annual deaths from smoking.[1] This is about 1 in 5.
Plus another 35,700 deaths from alcohol and alcohol-related automobile accidents.[2] Plus another 7,600 from NSAIDS.[3] Plus another 27,500 from accidental overdose of prescription opioids or illicit drugs.[4] Plus another 8,400 overdoses ruled suicides or where intent was unknown. Plus another 106,000 from fatal adverse reactions to drugs given in hospitals.[5] That's roughly 26% of the 2.4 million annual U.S. deaths right there. (These numbers are from about ten years ago, so I'm using the death rate from about 10 years ago.)
These numbers don't count: deaths from the longterm consequences of prescription drug use, e.g. someone who takes Accutane and dies of liver failure 20 years later. Nor do they count someone who gets AIDS or hepatitis from drug use, someone who develops a mental illness from stimulant abuse, alcohol-related homicide, etc. Sources:
[4] Leonard J. Paulozzi, Richard H. Weisler, Ashwin A. Patkar. A National Epidemic of Unintentional Prescription Opioid Overdose Deaths. The Journal of Clinical Psychiatry, 2011.
[5] Lazarou J, Pomeranz B, Corey P. Incidence of adverse drug reactions in hospitalized patients. JAMA. 1998;279:1200-1205.
"Going into this I already knew HTML and CSS. I had also already taken AP CS in high school, and CS101 in college. I did well in both. But despite this I basically wasn't able to code my way out of a paper bag.
Why?
Firstly, C++ and Java aren't commonly used in (successful) web startups."
Are you saying you knew C++ and Java prior to this? I would have thought this would be a great jumping off point into other languages - I found the switch from C++ to Python to be surprisingly easy.
Also while start-ups may tend to stick to Ruby or Python, many web companies use Java or Scala (Twitter is probably the highest profile company I can think of). They tend to be higher scale though and it is probably harder to get started with them than with Python or Ruby.