Programming, like any other profession takes time to master, how would you react to "How to become a brain surgeon in less than 6 months"?
If you were to have a brain surgery would you choose the guy who was unemployed 6 months ago, or the other one who has been performing these surgeries for the last 20 years, every day?
My point, comparing the two, is to highlight that both of these professions affect us, one a bit more dramatically than the other.
If every medical student got to be a brain surgeon in less than 6 months we would have many more tragic accidents costing lives or making someone permanently disabled but there are many barriers in front of them that prevents this kind of thing and gives the patient some confidence.
I argue that there should be something similar in place in the field of development/programming.
In the same way that I would prefer the more experienced surgeon, I'd prefer the websites I use to be programmed by more experienced programmers, how about the cars we use? the airplanes?
Many of the articles submitted to HN that frame programming as a craft get a lot of support. And just as traditional crafts are taught through apprenticeships, I believe that the same holds true for programming. Software shops can easily find a place for enthusiastic candidates with aptitude and commitment (as demonstrated by the OP). There are plenty of tasks that the new apprentice could help with until fully trained. This is how bricklayers (a fairer comparison than brain surgeon, you'll agree) are trained, and you don't see many houses falling down.
Not to mention that the consequences of hiring a noob programmer vs. hiring a noob brain surgeon are on totally different levels ....
Jeff, congrats from another (ashamed for the moment) programmer.
"Seeing a self-taught guy with 6 months coding experience writing software at a medical lab testing facility makes me a bit nervous."
I am working mostly on internal systems and when I venture outside of that I have my own branch write thorough tests and have multiple people check my code.
"I shudder to think of the quality of his code and the projects he or people like him are let loose on."
My code is pretty shitty. But, I know how bad it is, I know my limitations. I work long days and more after work to improve. I am not pretending, I am learning.
"Very fancy, but I am a software engineer, or programmer, as you prefer it to be called. Engineer means that I studied 5 years at university (Bs + Ms), and I know what I have learnt there, and I wouldn’t want to work with someone that doesn’t know about algorithms, algebra (it helps you understand a lot of things and opens your minid), compilers, statistics, concurrent programming, software architecture (1 full year course), UI designing, networks, databases, etc, etc."
I disagree that amount of time in a University is what allows one to become a programmer, it is the skills and knowledge acquired at the school. I didn't have that option, I needed a job in under six months or I was going to have to get a job doing something I didn't love. I worked hard and got the job. Am I a master? Nope. But, I have put myself in a position to become one with continued hard work.
I think that is all of them. Many people glossed over this line, "When I started this search I thought I would be scrubbing toilets in exchange for nightly code reviews."
The fact that I am not doing that is a mixture of my willingness to clean toilets to learn the craft I love and a market desperation for developers.
To all the negative nancies, take it up with Dr. Norvig. http://news.ycombinator.com/item?id=3278080
You know you're still green, and I respect that. Everyone has to be at some point. I don't care if they went to school—I've seen people come out of respectable CS programs not knowing a damn thing about actually writing software.
I've also seen people with plenty of experience—people who should really know better by now—still code trivially avoidable vulnerabilities and make other silly mistakes. School and experience are both lost on someone not really willing to take learning seriously, who already believes he's an expert.
I find music and computers to be so parallel in so many ways. The whole "scrubbing toilets" thing is what they told all of us recording students we'd have to be doing to get an internship at a recording studio. As a side note, I always wanted to be playing more than either scrubbing toilets or making records, which turned out to have been a good thing in the long term here.
I was one of the jazzers in a classical music school. We were pretty much the 1% in that we had every paying gig for a 50 mile radius. I could never tell if the classical kids (and teachers) held their noses up because we were "untrained louts" or because we "untrained louts and working a lot more than they were". Take from that what you will...
Then I read the comments. Then went to work. Then read some more comments after I came back.
And what I want to write now would consist of profanities, wild swearing and all expressions of despise I could find. Not directed at you, obviously but at all the people who write complete and utter bullshit like the one who calls himself a programmer JUST BECAUSE of a few years in school or another one who thinks you'll be "a nightmare and time-suck for coworkers". I have no words for the ones like them, and it's not because English is my second language (it is ofc). And I'm scared shitless that, had I not take a couple of minutes to think, I could write something similar.
Well, obviously, you did... I'm not a cheerful, empathic person. You did ok, and you know it - you're employed and you do what you like. You don't need me to tell you that. Instead, I'll try to explain to you why those people wrote those poisonous comments, or, at least, what was it that almost made me write something similar.
1) I started programming at the age of 10 and got my first job in the field some twelve years later. Not because of lack of opportunity, there were chances. I was shy, I was uncertain of my skills (think 16+, obviously not earlier), I wasted time hesitating. From 10 to 16 years of age there were six summer holidays, which amounts to almost twelve months of programming (which is understatement - what with winter holidays and programming after school and all), so at least double the time you spent. And I wasted another six years before I finally gathered up the courage and actually applied somewhere (I got hired right off the bat). To put it simply: I'm jealous. You did what I could have done but didn't. I think there is still, almost ten years later, some regret in me that I didn't. Your post touched that regret and almost caused me to be mindlessly aggressive as some of the other commentator. I think this is a motivation for some of them.
2) The one who wrote that 'he studied 5 years at university' has similar reasons to the one stated above. It's just regret mixed with anger. The truth is he knows what these years gave him (at least if he's active as a professional developer now) and is bitter about this. This one is easy for me to spot, because I see it in people when they (sometimes after years of successful cooperation!) find out that I dropped out fairly quickly and never got my degree. It's funny, because I have never heard such complaints from people who had some social life during college. In short: they know they wasted they time, or alternatively, they know that they're not cut out to be programmers if they couldn't become one without collage. And for the record - don't be intimidated, please. "Compilers, networks, databases, concurrent programming" - you'll learn all of this if you want, it's not some arcane magic, really, you're perfectly able to learn most of those things on your own. Your post, your success in just six months shows this. They couldn't do this if their lives depended on it, and that's why they're angry. [It (the former case, of regretting time spent in college) applies equally to me, but in a weird way: maybe I could be an entirely self-taught programmer, but I'm not, and this angers me. If only I knew better than to go to college, waste time and money, and instead just programmed more! But no, I had to take those few years and now I hear sometimes that "well, imagine how much better you'd be if you graduated" or "anything you know is because of your education, it's a pity you dropped out"...]
3) In this profession, if you want to be serious about it, it's absolutely not about how much you know at any given point, it's about how quickly and efficiently you accumulate knowledge. Many people take for granted that after some time speed of knowledge acquisition drops, but they should know better. It's not a law, it's just their laziness. What you did in half a year is not impressive for the ones ahead of you - I mean what you can do now, what skills you have now. But if you keep it up... if you'll stay as passionate as you are for a few years more... Yeah, I can see that: hordes of programmers (consciously or not) afraid of you. Programmers who haven't learned anything new since last year. Programmers who learn, but slowly. Programmers who are not giving their best. That's why I wrote about insecurity at the beginning, that's what I briefly felt, until I realized I have better things to do than worry about this - writing this small Erlang pet project for example. Remember that if you keep at it you will upset many people, those who stopped learning, those who stagnated, but it's not your fault they're lazy!
Well, I just realized that I wrote an awful lot of text, most of which is my own introspection and, partially, projection. I did it probably because I'm not a cheerful person and this is the simplest way for me to tell you: "good job, keep at it". Ignore negative comments, in such cases as yours they tell much more about their authors than about what you did.
And you know what you did, you don't need me to tell you that, so I'll just end this here.
Remain passionate about what you are doing - that is what will make you a good programmer.
Virtually every hot new startup I see on blogs, it just takes a few minutes of basic penetration testing to find gaping security holes. Everything from simple XSS or CSRF to blatant leaking of sensitive user data. Obviously he was hired at a "junior" level but I've interviewed plenty of "senior" candidates who, 5 years ago, would have been "junior" with their skillset and this guy would probably be a coffee-fetching intern. We keep lowering the bar (due to the crazy imbalance of talent vs. jobs right now) in hiring practices and the long-term impact of this practice has me worried.
On the flip-side, seeing all of these amazing ideas being brought to life and fostering such a strong sense of innovation is amazing to see.
In most cases, I would prefer crappy, insecure software to nothing, so I'm all in favor of newbie programmers trying their hand at filling the holes in our world. (Also, newbie programmers working now increases the expected amount of skilled programmers fifteen or twenty years from now.)
Except for the abundance of "Share thoughts/messages/pictures/music with your significant other/close friends/social network/professional network/the world on our exclusive app!". We have enough of that software.
Before you can design a bridge, you have to graduate with a four year degree in Civil Engineering. Then you have to pass the Engineer In Training (EIT) exam, then work for four years in the industry (helping with, but never actually able to sign off on, designs), then pass the Professional Engineer (PE) exam specific to the discipline you now have 4 years experience with.
Then you get to design your first bridge and put your stamp and signature on the plans.
So, with that knowledge, how exactly does civil engineering have problems with untrained entry level people signing off on designs for bridges that readers here are likely to drive over?
However, I know nothing about the job market for civil engineers, so if you do, could you please horrify me and tell me that civil engineering standards have actually fallen in recent times?
On the other hand, the OP has a hunger: I suspect he'll continue to grow if he stays hungry. You don't magically write better code by sitting in a desk for 5 years: you write better code by seeking growth.
It's not an easy trip.. it's not just six months... it's a lifetime. Yes you might get a job in 6 months but then you will have to work even harder to keep that job and to be in the game. You will never stop learning... you will have to constantly adapt yourself to the new technologies otherwise you will end up being the guy hated by everyone for your crappy code that's a pain to be maintained.
Yes you might learn Ruby or any other programming language and you can solve problems and build stuff... so basically you can do your job.... but there's more to programming. You should not just read a ruby book and learn the syntax and hey presto you are a developer. You should put some time in learning how software works, learning some algorithms and so on. It's not about one programming language, it's about programming in general. Programming languages are just tools we use to achieve a goal. For example, you can't be a car mechanic by learning how to use a wrench.. you need to know how to use more tools and, the most important thing, learn how to fix an issue using the most appropriate tool.
If you want to stay on top, you have to continually improve your game.
Or you can be that guy in the corner who got left behind when the factory tanked and he suddenly found himself unemployable.
The progression rate is astonishing and we must not forget that we still have to learn the basics in order to be good at what we do...
That is exactly why I fell in love with programming. There will never be an end to the learning.
Apparently, OP took these statements to heart, put in the effort/time, and what does he get as a result? Derision. What is this community about if it isn't about personal and financial growth coupled with creation?
Perhaps in his post, OP makes some grandiose claim about being a master programmer, okay fine, cut him down. But I suspect it is far less egotistical and merely his way of celebrating a small victory brought about by what is so often advocated: That learning to code really is a way to improve your life.
The biggest similarity I noticed between myself and the OP is that you have to put yourself in the way of opportunity. For me it was building side projects and hosting Startup Frontier. For the OP it was ruby meetups and send out an email to the list.
It takes a lot of guts to cold-email people like that, I have a lot of respect for the OP. Good work!
TW is a great company to work for (if you are working on enterprise software, and you don't mind some agile/oo rah rah ism) but for someone with no experience, it is an absolute no brainer. Its training program is the most effective I've seen in my career.
A lot of it seems to be ego. People want the shortest path to claiming a title.
Ignore silly titles and categorizations. Just make good art.
</sarcasm>
One technique I'd add to your list is, "Find online programming communities and take part in them." I learned an incredible amount from development-oriented mailing lists over the years, and I still do.
I think the most important thing is working on visible projects and seeing them through to completion, as opposed to acquiring more depth through study.
Additionally, I would have went with Ruby instead of Python. Python jobs and internships seem to fall more within an area where people demand a CS degree background, at least in this region. With RoR the demand tilts heavily toward webdev, which doesn't require 4 years of CS to be productive.
I definitely still think it's possible for motivated and tech-savvy people to do what Jeff has done.
Are there non CS majors out there that picked up Python as a first language and had doors opened for them?
That being said, don't debate, just pick one and go with it. For every person who tells you that Ruby is better at X, or Python is better at Y, you'll find another person doing X in Python or Y in Ruby. The best advice I can give you is to find a book/tutorial that works with your learning style and go for it. Then grab a fun project as soon as possible and work on it.
We found that we could drop capable juniors in a project that has some senior leadership and they were able to pick it up quickly.
Edit: Dont forget about IRC!!!!
Git pushes really give an indication the progress, skills, "actual work" and ideas to re-prioritize or launch.
Sorry if it sounds obvious but I really feel in a resource crunched situation the best one can do is to push out as much as possible to git and take them further to push to the real world to get some real feedback!
Back to the topic .... if the start-up doesn't stick on ... surely it can get a great job with a great employee!
I'd say if you don't start talking OT in a IRC channel dedicated to a piece of software/tech, it has a direct positive influence on your skills, which in turn directly influences your job seeking chances. Also, you can meet prospective employers that way.
Join a program like Dev Bootcamp. You'll save an enormous amount of time by working alongside other people with similar goals, and the social pressure will keep you on your toes.
I ask because it has quite a large upfront cost... perfectly reasonable if it really is that great.
Here are three student reflections on Dev Bootcamp:
- http://douglascalhoun.tumblr.com/post/26059106238/beautiful-...
- http://newbietoruby.wordpress.com/2012/03/30/devbootcamp-ref...
- http://mehulkar.tumblr.com/post/18897643140/devbootcamp-test...
And here is a Quora thread with a lot of relevant responses: http://www.quora.com/Ruby-on-Rails/Should-I-quit-my-job-and-....
Please feel free to ask any other questions!
90% of Dev Bootcamp's previous class got offers of $80k/year, compared to a college education where 50% of graduates will be underemployed or jobless. The $12k tuition feels too low if it's certain that you'll get 6x the return in the first year.
I've mentored guys who were greener than grass who grasped things like input sanitation intuitively. I've also worked with guys with 5+ years experience who thought this:
$foo = $_GET['foo']
Was input sanitation.
I would posit that, because of the vastly different quality needs, understandings, and valuations inherent in the industries that our industry touches (namely, all of them), it's unlikely that you're going to see any strong correlation between age/experience and code quality.
Anyway good read but again it should be really emphasize that this is an ok road for a web developer.
There's more than enough work out there, why must a web dev know or care how to twiddle bits, or vice versa?
We don't code, we don't write code... we solve problems with code... there's why.
And if you're not eager to learn all of these... you should think about a change in careers
Honestly it's almost a requirement to be able to adapt to other languages or at least read and understand what it does.
Ruby opened me up to the world of programming and I look forward to exploring the rest!
PS: Got downvoted for making a usefull comment ? Seriously guys you can't give a different opinion than the crowd...
If you follow a couple of the OP's points (read a ton, write a ton, talk with people more experienced than you) you can write in basically any language for almost any application.
Read/Do/Talk, isn't that basically what school is, anyway?
I agree with you the Read/Do/Talk is the same for any language my point is it requires much more read (theory/understanding of computers internal) if you do something else than ruby.
Btw. I don't agree with the sentiment that it's somehow easier to learn web development than writing device drivers or other closer-to-the-metal stuff. On the contrary - web development is chaotic and complex. Low level stuff is much more straight forward. It might be less accessible, but I don't believe it to be fundamentally harder.
On the other hand the situation seems to be more difficult where I live (Geneva, Switzerland). I've always been so enthusiastic about programming that I want to encourage everyone to learn it, but today it sounds like bad career advice around here.
The key thing is to demonstrate aptitude. Period. You obviously have done this. Also, eagerness to learn is a huge huge selling point -- because apparently you do that throughout your programming career. But the biggest thing is to demonstrate an ability to code. You might not know everything a university graduate does, but then again, I hear a lot of the people coming out of university aren't very good programmers right now. =\ Not really sure.
University teaches you a lot of foundational stuff, but if you have someone willing to work with you a little, you'll learn the same stuff (and likely already have a little of it under your belt).
Anyway, kudos to you for sticking it out and being aggressive. Great example.
Work your ass off (...) So, in order to make the kind of
strides I made, expect to spend at least 10 hours a day,
six days a week dedicated to programming activities.
Important point is that you have to love those 10 hours. I'm pretty sure that if you do it just with the end goal in mind, it won't work. You mention this, but I think it could be emphasised.I find that the U.S. has so many cool ways to work your way into a programming gig, it makes anyone outside red with envy, but I struggle to find something similar in Europe - especially in smaller countries.
What would your advice be for us who can't get a U.S. visa?
EDIT: I'm thinking mainly of Python/Django jobs and communities here.
I believe another major reason is that software companies in the US are in average more profitable and more productive than in other countries.
To give you some perspective of the relativity of effort/motivation, I know people who have been "learning" for years who just don't sit down and push through. Sure, like others say, your code will have security holes the size of the titanic, but you are still learning. And learning is about finding out what doesnt work. Good luck, and keep hacking.
The text is too light at #666 on a white background, which is pretty light on windows (although chrome renders it a bit thicker, it's still pretty light). Also it would look much better if I didn't have Adobe Caslon Pro, as Cambria is pretty normal.
I loved the content.
In this city, at least, it's probably a better idea to spend more time on your own learning. Some of the resources on the OP's list are great. Learn to Program was something I went through before moving out at it was a good intro. Also, Code School is good if you can spare the cash. Coursera has been fantastic-- it's completely free and has full videos, graded tests and forums.
Once you do have somewhat more of a foundation, then the normal meetups start getting more useful-- hack nights, pair programming nights, lightning talks, etc. One thing I have to say though, is that I met some extremely friendly and welcoming people early on when I went to meetups and had no idea what the heck everyone else was talking about.
I noticed you're using onswipe though which helps, but if someone is using some third party Hacker News reader, onswipe won't load.
Having derailed this thread enough, I love everything about this. Ill never get enough of hearing people's success stories.
6 months ago, I never thought I would see myself working in a top HCII program as a research programmer. I'm sometimes in total disbelief of where I'm working at and also of the fact that I'm actually helping my professor.
"When I started this search I thought I would be scrubbing toilets in exchange for nightly code reviews." That was definitely my train of thought on my value as well, but I guess I underestimated myself as well.
However you can get around this by having the OP's attitude about being a life-long learner. It's important to get a lot of exposure to different people and styles to offset some of the lack of background you will start out with.
Basically, this is a hostile industry and being self-taught is blood in the water, a lot like being female (this needn't be explicit sexism, just a prevailing macho culture where if you seem weak in any way you don't belong).
Nothing I have said affects the ability of a life-long learner to have fun and do good work in any way. Getting respect and getting paid are another issue.
Interestingly enough, almost every "computer science engineer" with 11 page CV's I've interviewed have not been able to pass a basic test I get all possible recruits do. Be assured though, it's just a filter to get the people that just don't know enough, not an actual "test" per-se
Gavin actually talked about you in one of the past meetups, saying how he knows one smart-cookie from his Ruby group who taught himself coding over a few months and got a job through sheer persistence. He mentioned being impressed by the progress in your code at day 1 vs day 30 vs day 90. Great to see you're sharing your lessons here.
A side point of advice for anyone wanting to learn programming and still in college: DEFINITELY take an introductory programming class. There's endless amounts you can learn online, but learning the fundamentals through languages like C and Scheme gives you great perspective when you do pick up web code.
I come to this from the perspective that virtually nothing I do today existed when I was in college. This goes for programming languages and even hardware design areas such as FPGA's. I, as an engineer, have to learn constantly. That aspect of my profession never stopped and, in fact, intensified after leaving college as there's so much to learn.
How is a college grad going to react to a paradigm shift such as what happened as the internet started to take roots? It was the wild west for several years as new ideas popped-up and you had to either play or get off the train. I'll take someone really smart who has the tenacity, drive and interest to learn new things quickly over a degreed engineer who is slow to react.
I have known many engineers who have remained stagnant over the years because they simply didn't want to bother to learn new things or were far too comfortable doing what they were doing. Some of these guys are unemployed today. Their skill set simply doesn't match todays reality and a degree means exactly nothing.
Now, to be sure, the combination of good, solid schooling and drive, tenacity and a rabid interest to constantly learn can be a very powerful thing. In my experience that person is more the exception than the rule. A lot of college grads just want to find a train to ride as long as they can with the skill set they acquired. The self-driven individual who wants to own a topic today and then another topic tomorrow is very rare.
Oh, yes, and a lot of college grads write code that is as shitty as anyone else's. There is no monopoly on the ability to write horrible code due to the lack of experience.
Audax Health is hiring in SF & DC.
Work in a fun and entrepreneurial environment where dress is casual and flip-flops are encouraged. We provide the best tools such as brand new Apple computers for every employee. Collaborate daily with top talent from companies like Zynga, WebMD, Microsoft, Bloomberg, Booz Allen Hamilton, and XM. Your contributions will directly impact the way millions of people interact with healthcare.
What makes our office fun:
• Our super swanky waterfront office space in Washington D.C. • Top of the line Apple products • Couches, ping pong, foosball, air hockey, arcade basketball shooter, Xbox and TVs • A kitchen filled with scrumptious food, snacks and beverages
Contact nayan.jain [at] audaxhealth.com
But I cannot read it due to a big yellow square overlapping the content, so.. useless link for me.
I like this tagline on the blog. Congratulations Jeff. Yes there are naysayers and there is always an argument against something. But we applaud your efforts. For people who are criticizing this, just look at it this way. This guy pulled off something by working his ass of (in his own words). The creates hope and inspiration for others like him and I am sure there are plenty even among HN.
On the other hand their work tend to give all the rest of the us work when they just hit the wall with something hard.
I spoke on the same topic, but from a less generic standpoint (focus was on Rails): https://railsneedtoknow.heroku.com
It's not perfect, but it helped a lot of people :)
http://jeffreybaird.github.com/blog/2012/08/21/how-to-get-a-...
Good advice; the title lends itself to initially annoy skeptics (including me), but it does look like you put a lot of effort into this. With that kind of sustained and public effort it's definitely doable.
If you are not a new graduate, and especially if you don't look so young, you are definitely not going to have such an easy time, without good connections.
Take internships while you are in college, if you can
Applies to other professions too.
edit: Congrats to the author, and refreshing to see someone document, the effort involved as opposed to some "clever hack" of the system.
I came here wondering in what job market a developer has to wait six months to find a job. Oh, no experience. I see.
Sums it up for many industries. Just replace code with something valuable in your profession.
Best. Quote. Ever.
I am re-motivated to continue learning programming.
Nice work sir. Congrats.
We've been talking a lot lately about the decline of quality commentary on HN, and the increase of negativity and snarkiness. Parent is a great example.
OP, I enjoyed the post and forwarded it on to some friends. Nice work!
It's alot easier to call for Rails devs since it's so ubiquitous at this point; as opposed to, "We need a Python dev with Django/Flask/Webapp2/Pylons/Tornado experience", the Ruby on Rails echo chamber -- because of its "singularity" feeds itself...
Everyone wants Rails guys
Bravo, RoR, bravo.
Ironic? Yes. Damages credibility? Nope.
I shudder to think of the quality of his code and the projects he or people like him are let loose on.
Awesome that he's passionate and landed something, but underneath it just makes me cringe because I see the shithouse quality of work that comes out of people probably equally skilled, but not as passionate, everyday.
I should move to America..
Passion makes one want to learn more, and constantly improve. People who love what they do will listen to others advice and are able to be molded in to a great developer. Without that passion, you are just doing your job - and when it is "just" a job, then you aren't giving it your 100%.
Maybe blame the "shithouse" quality of work on the person, and not their background. Additionally - take the time to correct those people and guide them. If you are that experienced, become a mentor instead of a critic.
Hopefully the future will hold more career type developers in my sector, but we'll have to wait and see =)