How I Became a Programmer in ~12 Weeks
mattdeboard.net
mattdeboard.net
But do you really think Norvig would suggest that someone at his level is not a programmer? By my count, he's done about half the things on Norvig's list already and could be within a tenth of the fabled 10,000 hours (12 wks * 7 days * 8-16 hrs = just over 1000 hrs).
I agree that the title might have been misleading given how much prior experience he had, but seriously, this is one of those "if you don't have anything nice to say" moments. If he received that many emails from some random comment on HN that means there are a lot of people reading this thread right now who are in the same boat as he was and as the people asking for help are. What kind of community are we (I mean we as programmers and we as HN) if we denigrate Matt's efforts and these kinds of blogposts?
There are going to be more and more programmers in the world as the pace of computing accelerates and people are exposed to gadgets and technologies that excite them enough to peek under the hood. We should be encouraging them and welcoming them and telling them "yes, programming is awesome!"
Where is the substance? Were there any interesting ah-ha moments? What would he do differently? What guidelines would he give to someone else in a similar position? How did he find an appropriate mentor? What was he surprised to learn? What can he do now that he couldn't do when he started?
There's so many things he could have documented that would have been helpful. He didn't write any of them. Instead, he made the implementation details seem mystical and gives the opinion that "hard work" (whatever that is) is the only key.
We're knowledge workers. I gained enough programming knowledge to be a programmer. Where's the confusion?
Besides from the point about learning a language rather than a framework, your post mostly says "It took me 12 week to learn programming" and that the way to do it is the obvious: read stuff, try stuff etc.
There is nothing wrong with this of course, but given the headline, especially here on HN, I can see why some might feel that they didn't quite get their money's worth.
One thing you'll notice here is that the community is very blunt, and often comes across as rude, but as a new hacker myself I've grown to appreciate the honesty.
Yes, all of them. I have them every day. Today's was Solr's facet.limit/.prefix/.mincount methods as it relates to what I'm working on. Nothing stands out because it was a huge bolus of information.
>What would he do differently?
Nothing.
>What guidelines would he give to someone else in a similar position?
http://mattdeboard.net/2011/11/23/how-i-became-a-programmer/
>How did he find an appropriate mentor?
I was lucky. I answered this both in the comments and in this thread.
>What was he surprised to learn?
The level of apathy among a lot of programmers.
>What can he do now that he couldn't do when he started?
I can program now, so there's that.
You think it's hand-wavy because you think I'm holding something back. I busted my ass dude, I worked very hard. That's not hand-wavy, that's just really what happened. I taught myself a lot of shit by reading, asking questions and trying new stuff. There's no mystery or secret sauce.
Would you know a good mechanical engineer if you could only interview them for two hours and maybe see some of their past work? A good massage therapist? A good financial planner?
If you, after doing something for five+ years, isn't demonstrably a lot better at it than the guy who did it for 12 weeks, you have thoroughly squandered the opportunity given to you and, yes, you are extremely selfish for suggesting there should be external barriers raised to protect your advantage.
I, for one, am proud to work in an industry where the barriers to entry is only a cheap computer and an internet connection. Bring on the masses!
In every single one of the "how I learned to program in X days" stories, the author had some previous experience. I wouldn't count running a BBS and learning 3 programming languages as "no previous experience".
Learning any programming language, especially as a youth, puts you in a completely different class from someone who has no prior exposure to computer programming and its core concepts.
Knowing what a for loop is already puts you miles ahead of the pack. It implies knowledge of variables, counters, operators, etc. We take many concepts for granted that are not that obvious to most.
Learning django was, I assume from reading the article, a way to build fun projects with the knowledge of python he had acquired.
Learn a language then how to make web pages with it is a better way to go in my view.
I
may be the times have changed and thats not true any more ..
Then earlier this year I started doing Hartl's Ruby on Rails tutorial and things just started clicking. Now I am teaching myself Ruby on Rails and I am looking for explore other more difficult languages (just for fun, I don't want a career as a developer).
For whatever reason, Ruby just got me more interested in programming. Now I am dipping my toes into SICP, which I would have never have guessed I would be interested in.
I think once you get your hands dirty with something relatively easy like Ruby on Rails, you start seeing the need for all the other computer science concepts and languages and that piques your curiosity.
However, I can say that teaching myself a little coding has really helped out in my day job, I notice I think differently about problems. My thought process is much more structured.
I answered a questionnaire for Manning in exchange for a free book recently. I wanted to learn something new so that cut out a few topics. However, I still sat staring at their catalog for an eternity before deciding on one that was interesting/potentially useful (Lift in Action).
Call him a programmer or not, it seems he has learnt enough to program professionally and by most definitions, that makes him a programmer.
I'm self-learning web development right now. Between HTML Dog, W3 Schools and Google, I have more than enough information. I wanted to play around with WordPress-fired up a VirtualBox VM with Fedora, and an hour later had completed the 'famous 5-minute install.' When I begin to take on client work, most sites can be hosted on a cheap Linode or Bluehost.
Most of the information you need is free. Infrastructure (if you need it) costs peanuts. You have nothing to lose. Why not start now?
There's no magic right way to do it.
I felt this way in 2001 when I started to teach myself HTML. There were plenty of free resources available online to learn.
The free education available now is exponentially more abundant. I would expect a similar leap during the next 10 years.
Right now I'm trying to learn Python using Zed Shaw's Learn Python the Hard Way and The New Boston tutorials. I think once I'm comfortable with the language I'm going to try to build something. It seems like the best way to learn how things really work.
Either way - I cautiously approve this. This is similar to how modern warfare utilizes recruitment-training-deployment to weed out the unworthy from the able. Adapt or perish. Nothing wrong with that. The worst thing that can happen is that the developer in question may realize that he is just not that capable and venture into some other areas.
I realize I am reading HN but sometimes programming is treated as too much of a sacred cow.
I have been dabbling with Ruby and other languages for a year, but have never had this sort of discipline. For a couple years I have wanted a programming job but have always had serious doubts about whether I can really "hack it" as a professional. I don't know any programmers personally (well, one friend on the other side of the country in SF, heh), and I look at job openings and their requirements / desired experience all seem so intimidating. :-/
What made the difference in the end was good social skills. I met the CTO of the company I work for at a Ruby meetup, and had a good conversation with him. I ended up applying for a position he was trying to fill, and after an interview and a review of my projects on Github, I ended up with a development job without having any formal experience. I've been at it for over a year now.
So, this is definitely doable as long as you're committed to learning a lot, and are able to sell yourself well enough to convince someone to give you a chance.
A lot of good advice for people who would like to program rather than be programmed but aren't in a place to take a cs degree.
It would be amazing to get to the level of programming enlightenment to be able to create a compiler or kernel, though. That's a goal of mine with-in a decade.
And don't be too disappointed. I think the majority of the people here aren't nasty. They might have said some not so nice things in a moment of pique for the above reason, but the nice thing about HN is that most of us do try to be objective and helpful. Don't be surprised if in another thread, the very same people who dissed you here praise you, help you or openly agree with you. I usually don't even notice usernames when replying or voting on posts.
Lastly, congratulations on taking a very big step on the same path most of us here are on. The path is long and difficult at times, but infinitely rewarding. Welcome to the club.
But kudos on taking your first few steps. Its not a bad vocation.
"It's not important to get things right/perfect. It's important to get things going"
Congratulations and realize that the nth step in learning is realizing that you can always learn more.
Not realizing that fact held me back for years.
When I wanted to learn / do something, I would obsess over finding absolutely the best tutorial / process. Then I would obsess over the right learning environment. Always worrying about the incidentals, and ignoring the essentials.
HN has helped me a lot in this regard. Reading about big companies and how 'imperfectly' they started out, as well as the whole 'Lean Startup' concept has done much to change my mindset. What is important is starting.
Thanks for sharing.
The OP groks the basics and has learned how to use Django. This does not make him a programmer. It makes him a dude who can create code that resembles a program.
Similarly a songwriter is someone who creates songs, so you are a songwriter, you just might not be a good one.
So, I'm sure the work ethic that let him join and last 10 years in the USMC helped.
That said, I'm inclined to agree with your last statement...
What are you saying that we do poorly at?
Your comments are more "confounding" to me than any war situation I was ever in.
But if you have any citations to the contrary - that veterans do better than one would predict from their pre-military life - I'd be glad to hear them. Conscientiousness is as important as IQ, and any intervention which genuinely improves either is really valuable and ought to be well known.
You can't switch from studies and causation/correlation to just stating without citation that they suck at kicking ass.
http://lesswrong.com/lw/ih/absence_of_evidence_is_evidence_o...
There are so many people in this world who pretend that something is preventing them from learning or doing something and you went out just did it.
You may (or may not) be the best engineer in the world, but I'd hire you in a hot second just because you have the tenacity to make it your mission to figure something out. Sometimes, 90% of writing code is just sticking with a problem until you get it.
I've given 100's of interviews to people who are either fresh out of school or have been programming for a while now. The vast majority of these people have no gumption to actually create a github account or do any sort of experiments outside of what tasks they are given at work. It is very sad to me that most of these people just want to collect a paycheck.
The learning never stops, keep it up.
If you're trying to learn all the skills that a great developer needs in your free time, you'll realistically be able to spend no more than 4-5 hours a day at it over any sustained period. If your fulltime job is software development, even if it isn't hardcore by HN standards, then you will grow your skills so much faster.
I had been attempting to learn how to program (Ruby) for the past 6 months (from a ZERO programming background) and in the beginning I honestly could not do more than one week learning 'intensively' before I had to take a break to let all the new concepts and information settle in.
Perhaps it's just my style but I've found learning a little bit everyday is more effective in the long run than cramming it into a condensed period of time. It's surprising how you can take a break from a piece of code and have everything come together when you look at it again.
That said, learning how to program in 'X weeks' sounds great and I wish I could have done it!
Go to meetups and lurk IRL IMO. Just start small conversations. Say hi, ask what someone's working on, what the program is they have open, if they read HN or Reddit or whatever. Let them know you admire their work and ask for help.
Of course, there is no upper limit to how good a programmer you can become. We can only (maybe) set lower limits.
I'll point out that I optimized for getting a full-time job as fast as I could. I have college loans to pay off, so I couldn't afford to spend months learning CS thoroughly. I learned enough to get past interviews, and focused the rest of my time on other high ROI things like networking/coding projects. Critically, I now have the luxury of having an income, and have both my day job and side projects to fuel my learning of the finer details.
That's the great thing to do. Just shutdown the door to outside world and focus on things in hand.I have done that once.Would love to do it again.(Past experience http://giis.co.in/LFY.png )
Learning frameworks is harder than learning programming languages, IMO, especially after you lean one language. You should learn both.
So naturally when you're talking about dealing with an abstraction layer built on another abstraction layer it's going to be even hard to understand. That's why I say don't learn the framework. Learn the language, the concepts, the principles. It will make understanding the complexities easier to untangle.
Frankly he'd have bought me if he made his hands dirty with some obscure 8bit assembler. There he'd have to really THINK his way out.
At least some sweat during rolling his own data structures and algos around them would make him something in a shape of a programmer, but not this.
Of course what he's done is cool, learning anything new is worth some pat on the back. But this is a newsfeed on hacking, and Lords, it ain't hacking. Let's call things what they are, ok?
There's also the problem that some people like him start calling themselves programmers on the job market and when we're trying to hire them, they occur to be only Django programmers with very limited abilities. Practice makes perfect, but they didn't do it yet. Have some interviewing experiences like that. Not funny.
If he had started with some 8bit assembler I would simply think that he has a very poor approach towards learning.
Why is this on the front page btw? Aren't we all hackers here? What makes this news?
If all you have is a strong understanding of algorithms and computation... your just a computer geek. Doesn't make you a good 'programmer' (in the sense that you can produce something someone wants).
In fact, how did mathematics and physics even develop at all before then, without knowing what was hard, or how to solve problems.
Seriously, a lot of software doesn't require complex algorithms, sure there is a subset that does and that's cool. But saying someone isn't a programmer because they don't have a deep understanding of computation and algorithms is disregarding a large population of quality programmers.
I think y'all are all using different terms (and I notice the parts-of-HN undercurrent of "technical skills don't matter, you need to be social and build products, startup pivot founder startup" but I digress).
To me, someone who can use algorithms et al is a "programmer", which is largely orthogonal to being able to produce something someone wants, call them a developer or something. Not every programmer has to be social client facing; getting detailed functional specs and creating good code to fulfill those specs absolutely does make one a programmer.
You've established a beach head in the realm of coding; all the fancy understanding of eg recursive combinators, malloc() optimization, JOIN semantics, inheritance vs composition, etc, will come later.
Come on, we all started in PHP or QBasic. It took most of us years to become sweet ass code ninjas. What this guy has done is impressive.
You can also learn programming by reading 'Learn programming in 30 days'. But that is a very different kind of programming than what most people are expecting in this thread. You can learn enough programming to begin to understand how to work with software. It gives you a start. It also works if your job is extremely trivial. And I think the target audience for the book is those kind of people.
Coming to programming as a profession, in that case there are a lot of aspects that influence your full time profession, among that is giving your full learning every detail of programming and related ecosystem. Other aspects are productivity, management, analytical skills, UI design, requirements gathering, people skills. Also there are many other things required to win in practical software environments like working under tough deadlines, learning to deal with frequent stress and burnout. Keeping in touch with rapidly changing tech scenario, tools and languages. The list goes endless. I haven't covered even a percent of what I wanted to write.
Your regular data structure and algorithm sauce is probably 1% of what is required to win in practical software development today. There are 99% of other things which are not taught in books, colleges and universities. You have to learn them through experience, by working.
So just in case you think you have spent 10 years learning all the secret recipes in computer science books but are not good in other areas. You are no better than the 'Learn programming in 30 days guy'. Because if has problems in a set of areas, you have equal number of problem with another equivalent set.
This is something I have seen among so many bright, people with great academics, who don't make it big in the industry. They just don't understand so many practical aspects of the industry. Just like how 12 weeks programming guy doesn't understand all aspects of practical programming.
>>in case you think you have spent 10 years learning all the secret recipes in computer science books but are not good in other areas. You are no better than the 'Learn programming in 30 days guy'.
and
>>Your regular data structure and algorithm sauce is probably 1% of what is required
is just false. Sure, studying classical CS concepts is not all there is to software development and success in the software development industry, but your comment largely renders advanced degrees, like PhDs, about as useful as some poorly written Java book with regard to success as a software engineer.
I am not saying that at all. All I'm saying is, as programmers we tend to assume knowledge of text books and programming is all that is needed to win. And that if you have it, that is all there is that it takes to win.
This is largely untrue. I have seen that this is hardly what it takes.
It's important to learn the fundamental and concepts, but if you are bad at everything else. In the the practical scenario you and the 12 weeks programming guy will both sail in the same boat. You will be bad at one set of things, and he will be bad at the other.
I can't say much about 12-weeks-programmer guy, but if the only skill that 12-weeks-programmer guy has is the programming skills he's obtained in those 12 weeks and the only skills 10-years-of-pounding-CS-books guy has are the skills he's obtained from those books, I'm going to pick the guys that's been reading all about automata theory to be more successful.
Not that I'm saying that the author is destined to be unsuccessful. I'm just trying to point out that classical CS skills are more important than you're portraying.
But if I find 12 weeks guy to be more productive than the CS guy.
I will be hiring the 12 weeks guy not the CS guy. I'm hiring people for getting stuff done. Not just because they know something.
The guy sets a goal, works hard to achieve it, and succeeds. Win. More power to him. In fact I rather envy his ability to focus.
He's not even approaching a claim to understanding all the practical aspects of the industry or programming. He is humble and thirsty for more knowledge. He is a beginner, and if you look closely, I think you'll find that we've all been beginners.
This ought to be worth something too, though.
"... have just started back to school for computer science. I’ve been poking clumsily at programming for a few years, but only in the past few months have I actually started to take ideas of my own and successfully bring them to life.
... While I don’t think I can study an algorithm and announce its big Oh complexity, I’m getting there.
... going to school does take time away from my actually programming and self-learning about computer science in general."
Twelve weeks not exactly starting from scratch.
Data structures are not there either.
Sorry, you're a django coder, not a programmer.
Bottomon line: He wanted a job as a developer. He got that job. Success.
You're right though, people do have to learn these other concepts, but first they have to have some money to pay the bills, then they can just knock themselves out learning all about algorithms and data structures.
It's not a protected title. However I doubt the guy in the article could write his own OS. Which I can.
Also keep in mind the phases of learning and understanding:
1. I know nothing...this is so hard.
2. I know everything...this is so easy.
3. I know nothing (again), but this time for real since I realized there is so much more to learn.
4. I really, really, really know nothing.
5. Hmm...maybe I might be getting the hang of this.
And in phase 5 other people start calling you a guru. However you'll have no problem finding a job in phase 2.