Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: So I do want to be a programmer, where do I start?
17 points by whatistheanswer on May 26, 2012 | hide | past | favorite | 16 comments
I was dumb and didn't study CS in school, even though now I realize that I really like programming and everything that comes along with it. What's the best way to correct my mistake and get to a point where I can start coding for a living?

Is it books? MIT and Stanford online classes? Code School and Codecademy? Some combination of all of those?



Repeat after me: programming is not computer science.

Got it? Good. Now, for actual advice.

Contrary to the prevailing sentiment, there actually is a career path in engineering that starts at the bottom and takes you to the top, all classical-like.

It goes something like this: Customer Support/QA -> QA Engineer -> Support Engineer -> Junior Developer

QA is very easy to get into. If you play your cards right, you can get into QA at a place that encourages automation and whitebox testing, which will expose you to a lot of the fundamental skills.

From there, it's a short hop to QA Engineer, which is exactly the same as what I just said, except they expect you to be more than a warm body clicking on things till they break. You'll be required to write code here.

A support engineer is someone who's midway between dev, QA, and customer support. Here, your customers are developers, so the discourse is a little bit more elevated than a normal customer support role. Support engineers are often asked to produce sample code for customers learning to use the product. Take this opportunity to write it yourself rather than sending canned samples.

(Optional) Dev Evangelist: This is much like the previous role, except you spend all your time at hackathons being cool and showing off how cool your API is.

Do well at these, and it'll be a little more straightforward landing that junior dev job. Congratulations, you're a programmer.


Allow me to offer an opposing position.

If you want to program, start doing that and don't accept a job doing anything else. Doctors don't accept nursing jobs and civil engineers don't dig holes. I have never employed people who have been 'happy' to start in QA or whatever other role. Why would you accept anything else other than what you really want to do, and are capable of? If you can't land a job as a junior developer, then perhaps you are not cut out to be a programmer?

Also, being a good QA person or customer support person is valuable in itself, and isn't just a 'starting point' for a programming career. I have several friends who have been dedicated QA people for their entire careers, and definitely do not see their role as being 'less' than being a developer.


I'd start with a website. Important is that you give yourself small tasks, just learning from books and doing exercises is boring and you learn often too much which isn't relevant. I wouldn't do mobile development either: the learning curve is too steep and you face a fragmented landscape.

An example path:

1. Build a plain web page without anything (and learn HTML, CSS)

2. Build more: a web site with multiple pages and little dynamics (and learn a backend language/system like Python or Node.js with Javascript)

3. Build a blog with more dynamic content (and learn a web framework like Django for Python or Express for Node.js and how to use them with a database like MongoDB or MySQL)

I would start with plain HTML, CSS and later learn Javscript, then a little Node.js and then Express and MongoDB as database => that's the quickest way how to get things quickly done and to learn why and how things work. And you have basically to just learn three languages: HTML, CSS, JS and if you like some simple dialects (like Stylus instead of CSS and Jade instead of HTML). Or if you have some basic dev skills already just jump into Node and Express, you will have very soon first results.

I wouldn't start with something too much 'magic' involved. Magic = abstraction that you do not understand anymore. Ruby on Rails is an example: you learn tons of conventions, see magic everywhere but won't have a clue for a very long time why and how things work and thus, you just learn conventions and won't learn really to code. Ruby on Rails can be very frustrating: you do Rails for three months and are still not quick or productive and then you think it's your fault or you can't code (but it's Rails with its magic, conventions and increased complexity where actual coding is a very small part). Don't get me wrong: setting up a site with Rails can be done in few minutes but customizing it without knowing how Rails works (and even if you know how Rails work) can be a real pain. With Rails you learn how to effectively glue things together, Rails ecosystems provides thousands of great and mature gems waiting to be glued together.


Your bias against ruby is astounding. You recommend node and Django but recommend against rails? Rails isn't magic. The Michael Hartl book is a great place to start after Chris Pine's 'Learn to Program.' Of course the Pine and Hartl books might be a little too magical for an avowed Pythonista.

As far as MySQL, you've lost your damned mind. For relational databases, why not build a heroku site and use PG? Who the hell still uses MySQL?

My suggested 'Learn to Program' path would start with Kids Ruby, then followed by the Chris Pine 'Learn to Program' book followed by the Michael Hartl tutorial followed by the Big Nerd Ranch Objective C book. The Nerd Ranch book starts with an intro to C before getting into OOP concepts.


> bias against ruby is astounding.

There was no bias. Ruby on Rails is a mature production-level framework which gets things done. I've just said that it may not be the right tool for getting into programming. With Ruby on Rails too much is automated providing a DSL with a high abstraction layer and finally as one big monolithic piece.

This setup might be good for an experienced programmer but I doubt it's perfect for an beginner. That's all I said and it's not bias, rather your post feels biased and very emotional-calm down.

> Rails isn't magic

You are the first who's saying this. I repeat myself but here again: magic is when the user doesn't understand the abstraction level anymore, when it's too far away from the implementation pattern, when the original desgin pattern isn't clear anymore and Rails definitely is.

> You recommend node and Django but recommend against rails?

Did you ever try Node, Sinatra or Django? Maybe you should before giving such strong opinions. All of them, espeically first two are more expressive and force you to think yourself. With Rails you have to learn the convetions, use them and still are clueluss what to do in exceptional situations because the RoR setup won't strengthen your real coding skills (I am just talking about newcomers!). With Node.js and Express, you have to think because there are much less conventions, it;s more modular and thus, you'll be forced to code more and decide which path to go, with Rails everything is given and often the choices are opinionated (SCSS, Coffeescript). Or you wonder which directory to use for which file in Rails all the time according to the convetions, that no coding! For the classic CRUD app Rails might be good. With Python/Django you have more abstraction but those are more related to the actual design pattern and thus more expressive than Rails—but do not startt a flamewar here, Django and Rails are very similar at the end of the day.

> s far as MySQL, you've lost your damned mind.

This is a really bad style and intolerant—this is not HN style. Instead of coming with arguments you get abusive without knowing the big picture. RDBMS are very mature systems, I wouldn't go with MySQL, rather with Postgres and for lots of systems they are the way to go. NoSQLs are young and there's some reasons they should be used by newcomers, especially Mongo:

- No need for an ORM/ODM (for Mongo because of the good native JS interface, you can still use one and it makes sense but you do not need reallly) - No migrations, no scheme

You still can do both with NoSQL/Mongo but to get started to get out of the door, just to understand what a datastore does the complexity level is just right. An SQL with all its migrations, schemes, ORMs, join tables is too much for a beginner. We know this stuff for years but a beginner?? A beginner has to get quickly some positive experiences which he understands and then Node with Mongo is perfect. Of course Rails + ActiveRecord is great to get started quickly but it's abstract and the beginner would not dare to leave the given path because he doesn't know how to directly access the DB. Later he can always switch to a SQL and a ORM (also in Node and with NoSQL) if he likes.

BTW, this is not just for beginners, for many projects this setup makes sense, it's just a new way. Rails is now 7 years old and lot of people like to stick to old paradigms. And ORMs in particular ActiveRecord are debatable, ActiveRecord is slow and clumsy and often not the right choice for scalable high traffic use cases.

Finally, your recommended way is a muddled and confusing way with too much theory. First he should start with some high level Ruby, then some theory, finally some Objective C and then C?? Which logic does this follow?

Most important when learning something is to have steadily successes in order to stay motivated. Small tasks are important to stay interactive to get self-confidence, just learning theory for days doesn't work without having any good use case at all and following some dull examples from Hartls tutorial won't help either. I know that a proper way would include C, OOP and so on but the way would be too long for startes.


I'm in your shoes - I majored in Business, and I'm trying to break into software development after getting bored of IT at 30. Luckily my business degree had a couple VB classes, so I'm not starting with zero.

What I'm doing:

1. Codecademy will teach you the basic concepts of programming. Codecademy expands into HTML, Javascript, CSS, and other technologies that can be used to make websites and mobile apps. (You can stick a website inside a wrapper and call it an app.)

2. If you like Windows, get the Visual Studio 11 beta while it's free and start making a windows form in VB or C#. If you don't, either install Cygwin or a distro and learn about the tools for Linux. (sorry I'm not more help here)

3. Find projects to do - find a small problem at work that you can solve. I made a program that makes an email template , so filling out an internal form is just a couple clicks. Also check out coding challenges.

4. Look for software internships, open source projects, and other places where you can build your burgeoning skills while gaining experience in working with large projects.

I don't know if I'm going about this the right way either, and I've been thinking about making this same Ask HN post too.


It's fine if you didn't study CS in school, so don't be bummed about it. If you're really passionate you can get really far on your own, so don't fret over the "dumb" decision, it'll do more harm than good.

Now, first things you have to learn are fundamental programming theories and methodologies. You'll also need to learn these in tandem with a language. There are a ton of programming languages out there - so many, in fact, that picking the one might seem like a daunting task.

I'm a Rubyist - it's pretty, it's fun, it's awesome on the web, and I think great for beginners. However, I think it might be best you learn programming with something like C/C++. Python is great for beginners too. If it were me, I'd learn with one of those languages. Which ever you pick, I'd recommend either Learn Ruby the Hard Way (http://ruby.learncodethehardway.org/) or Learn Python the Hard Way (http://learnpythonthehardway.org/), both by Zed Shaw. They're also extremely cheap at $2.99 for the PDF, or free if you want to read it online, and the Python version has a video course for $29.

After you're done with that, you can start making stuff. At this point, what you learn next depends on what kind of software you want to make. Research and figure out what you want. Remember you never stop learning programming, so I'd advise you to gradually pick more advanced books, preferably covering more theory than practice. Maybe branch off to different languages and paradigms.

If I had to give one key piece of advice, it's that you learn by doing. It will be daunting, and it will take time, but I promise you - you'll get better. Here's a good piece that will inspire you: http://37signals.com/svn/posts/3179-you-only-get-one-chance-...


What is it that you want to do exactly? It seems like a lot of people lump "coding" and "programming" into being a Software Engineer or a Software Developer. I am a Front End Web Dev and I can guarantee having a CS degree would be beyond overkill.


...until your javascript needs an anonymous closure using first class functions as an argument, or some other lispy-schemey scheme


You don't need a CS degree to understand closures or functional programming for that matter. Heck, you don't need a CS degree to understand all of CS theory.


My degree is in accounting. But now I'm a developer. I made a career switch 5 year ago and never looked back. Here's the key - build something A to Z.



You mention several online options for learning basic coding, but I'd point out that depending on your style of learning, you may benefit from a classroom setting, which is easily found at a local community college


Start with these simple lessons that many don't get:

1. Programming is essentially about you (!) problem solving.

2. Programming requires initiative and independence.

3. Programming requires self motivation and self learning.

1. is really the only lesson needed here. 2. and 3. are important implications. I'm not saying, programming classes don't help, but if you call yourself a programmer and you need to learn a new API you must have the initiative to try to figure it out for yourself. It's OK to ask questions. It's OK to expect to be briefed or even taught some complicated concepts. It's NOT OK to expect to go back to school to learn every single new thing you come across.

-----------------------------------------------------------------------------

Programming is a vast field. What do you want to learn programming for? Nowadays you will find an introduction to programming for every major sub-field of programming. You'll find programming introductions for game development, front-end programming, back-end programming, statistical computation, mobile apps and everything else in between. Personally I find that this is the quickest and easiest way to introduce yourself. I don't like the approach that some take i.e. first learning a really general programming language and programming concepts and only afterwards learning what they actually need.

So do some research and come up with a list of resources.

-----------------------------------------------------------------------------

It takes time. How much time varies depending on you personally and the field of programming you want to work in.

-----------------------------------------------------------------------------

Landing a programming job may or may not be straightforward. In some cases it's damn right impossible. It depends a lot on you, your location and what standards companies expect out of their developers. I've met good developers who were stranded and bad developers who got into a junior developer position after a year of training at a technical school. Why am I say all this? Prepare yourself and research so that you can find a way to make it. Most if not all job applications you meet will have a requirement for an CS/AI/SE degree. Ignore that but be prepared to show off your skills.

-----------------------------------------------------------------------------

Finally, you probably want a to-learn list but again, you must first provide a programming field. I'll be glad to help if you reply with a specific programming field.


All that you need is right here..

http://programming-motherfucker.com/


Option A: Purchase a domain name, get a hosting plan, build a website.

Option B: Fire up a command shell, write some scripts.

Option C: Download a tool set, start making a program.

Option D: Get a book, download a tool set, start working through exercises.

Option E: Start with an online course - requires Option D.

In any event, you cannot become a programmer until you start to program.

Pick an interesting problem, and plug away at it.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: