Hacker News new | past | comments | ask | show | jobs | submit login
What to tell noobs who want to "learn coding"?
28 points by rf1331 on Dec 30, 2013 | hide | past | favorite | 51 comments
I get a lot of people genuinely interested in learning. In my opinion code academy sucks cause of the false sense of accomplishment it gives. Thoughts? Strategies?



Tell them to get a good book. The value of having a single source from complete beginner to intermediate programmer written in the same voice with full knowledge of what you have completed so far at each point should not be undervalued just because web resources are free.


I agree with this completely, and I'll make a specific claim: eloquentjavascript.net is the best book to use.

---it's an online book that lets you run code right in the book

---it's the language of the REPL that everyone has access to (in the browser)

---js is dynamically typed, which I think is easier for people to grok (I learned Java first, and for months I was puzzled by this "public static void main (String args[])" that I had to start everything with. Public? static? main? void? JS has none of these, and while it's debatable whether that's a good thing or a bad thing, it's an unqualified good thing when first learning to code.)


I don't know that book, but I just want to be clear that I did not mean to imply that free == bad. On the contrary, there are superb freely available books like Structure and Interpreation of Computer Programs. However, there are also superb books that cost significant amounts of money ($40+). Learning to program is worth a $50, or even $100 investment in a great book if the free books don't match what you're attempting to learn. They're able to sell for that price because they provide value that free alternative resources do not.

My main point is that in my opinion books, interactive or not, are still the best source for learning to program for many, if not most new programmers.


"public static void main (String args[])" - that would put anyone off, and for good reason, it's total bollocks. Either "main" is special or it's not, if it is why tell java stuff it already knows. If the jvm wants to run something that's public and called main and has a method signature of string array then why not dispense with all the nonsense - the answer's simple - it's java - the most verbose boiler-plate laden language out there designed for groups of mediocre developers. Despite needing dozens of lines to even basic stuff, it forces people into some form of homogeneity to keep teams of "java certified" developers in jobs.

if you want to learn to program, open Terminal, type ipython and go from there. When lost google stackoverflow, repeat. Forget books, there are way better, more up to date online resources.


What does Java's supposed verbosity have to do with the comment you replied to about learning JavaScript?

On an unrelated note, main in python is not a whole lot better. By the time you get through __name__ == "__main__", import sys and use sys.argv you're not really winning much over public static void main. The nice thing about python is that you don't have to start worryin about main since you can just run it as a script to start, which is definitely great for beginners, but that doesn't exactly justify the argument you were trying to make about the verbosity of Java.


:0 I mostly agree with this. Java is full of convoluted convention. Today, I would probably start with javascript or Ruby. However, I love that I really got started with ObjC.

BTW: Don't all C based apps begin with a call to main (all Mac / iOS apps):

int main(int argc, const char * argv[])


I disagree. I learn better from short exercises and crash courses. From my experience, short exercises are can be usually found in web resources rather than a book.


What I have been telling my friends recently is to check out an online course. This one course named CS50x has been amazing in teaching people about CS and programming. So, tell them to see https://www.edx.org/course/harvardx/harvardx-cs50x-introduct... it starts in a few days and can be taken throughout 2014.



I totally agree with wturner on the learning curve, as I'm also a 'noob'. I've taken up learning to code in the past year and it is very energy and time-consuming! I started with sites like CodeAcademy, but I've since turned to MIT OCW to give me a more thoughtful and full background in computing. And I want to know about a lot more than creating pages and formatting for the web.


Tell them to build things from the get go. Give them some ideas on what to build. Tell them it's ok to suck.


Tell em to Build something. Best form of learning. Practice makes perfect. Theory will be used along the way.


I always tell people to find a problem to solve and learn coding on the way, rather than thinking of learning to code as an end goal, to more so think of it as another tool to problem solve, which you can learn how to use on your journey to build something to solve the initial problem.


If they are still in school, tell them to take a class. I really got started (other than some BASIC in elementary school) with Java classes in high school. The structure of the class, regular assignments, and the fact that I would get a meaningful grade made me work a lot harder at it than I otherwise would have. Not that I wouldn't have worked hard, but as with any pursuit raw passion only gets you so far and a good instructor will help you apply yourself in the right areas and progress that much faster.

If getting a class isn't an option, there's always something like Learn Python the Hard Way, or if they have issues following just text, Land of Lisp is pretty gentle and friendly, if not as immediately applicable to say, mobile development.


Clean Code by Robert C. Martin. It's not a book to learn how to code but a book that gives good habits on how to write clean code which I think is very useful regardless of languages.


Code or code not. There is no learn.


I was trying to figure out how to explain the attitude shift that got me over the "want to learn" hump into actually learning, but I think you just nailed it. Once I started coding, I learned to code. Perhaps the advice is "pick a project (of your own design or someone else's, it doesn't matter) and start working on it."


Ask them why they want to learn it and insist they find something they are passionate about building as an end result. As far as really learning, tell them it will take 3-5 years of studying every day, building projects and adopting the process as a lifestyle. Most of the marketing shit around learning programming is fluff. BTW This is coming from one of the people you are speaking of who was (and still kind of is) a 'noob'. I just happen to have a technical background outside of code to help ramp me up. Other than that tell them to try it out and see if they like it. The learning curve will inevitably make you cry. But after you reach a certain point you can begin getting really creative which is very very empowering! This takes muscle memory and imbuing yourself in the culture, concepts and tools.


They have to commit. They have to apply themselves every day. It's not just that programming is a complex topic, but because so much at being good at it is being mechanically efficient at it. I've worked with learning coders who had a bare familiarity with their operating system, nevermind the command prompt.

Not being able to use Ctrl/Cmd-F to quickly locate code snippets in your text editor. Not using keyboard shortcuts...the seconds it takes to move from task to task quickly build up, and so does the frustration and urge to quit.

Everyone wants coding to be about amazing creations and The Future...but a lot of proper coding is just hard work and good habits. When that routine is in place, learning AND producing code is significantly easier.


First, don't refer to them as noobs unless you are trying to degrade them. Second, I recommend Introduction to Systematic Program Design on Coursera. It matches the same intro course for which CompSci students pay Universities thousands of dollars across North America.


I wouldn't neglect the theory. Bad habits picked up can take years to break.

Find the best book ever written for your language of choice, its Crockford's book for js I imagine - don't know about other languages.

I would NOT learn to write code from random web resources. A good portion of the code on sites is horrible. There's alot of horrific PHP code floating around out there.

Except, find someone on Github who is blowing your mind with their stuff and read through their gists and projects. Succinct and easy to understand code is best. I did this for two hours last night and got more out of it than a month reading weak stuff and the more mediocre books..


I learned to do some MySQL from a random website. Code wasn't great. I didn't learn in detail, either. And it used mysql_query(). Ideally, a book from the last year or so would have been better!


I tell them to apply to a developer bootcamp. Schools like this are popping up everywhere because there really are people who are willing (and eager) to hire the students once they graduate. I'm currently attending (and about to graduate from) a developer bootcamp in Austin TX, and I can absolutely recommend this route. Yes, it's impossible to learn everything in such a short amount of time, and attending a bootcamp may not be for everyone, but if one is serious about learning to code, it's a pretty efficient way to learn a new skill.


Many of those bootcamps cost an arm and a leg and are selective in that they target well-off kids that get good grades and basically fit in. They do this intentionally so they can sell their prospects to potential employees and keep their numbers and reputation up which is just common sense on their part. I think the better route for someone that is a little rough around the edges is to do it on their own for a few years and then try to apply to a bootcamp. I did it on my own and then did a 3 month program called thinkful.com. Thinkful served as a refinement mechanism that introduced me to better practices and a bunch of nuances I didn't know about etc.


It's true that they cost a great deal. I've had pretty long conversations with the founders about the fact that there is very little likelyhood that someone without significant means could and come up with the tuition. That being said, I was making $35K at my job before I left, and that was the best job I had ever had because I wasn't working outside or serving food. I was accepted on a Thursday, and I quit my job with DeVry University (I was a teacher's assistant) the next day. I financed the tuition on a credit card and essentially moved all my chips to the middle of the table. Yes, it's risky, but if my risk tolerance goes down over time, the riskiest time of my life should be now.

Now that I've attended this school, I can pick up books about code and not feel completely overwhelmed. For this reason, I believe that if it's an option, a bootcamp is the way to go.

I also believe that the only requirement for 'fitting in' to one of these schools is to be easy to get along with, and be able to take the stress without becoming a jerk. This is more difficult than it would seem, as the course is pretty intense.


To each their own. I just have a contrarian nature and always feel obligated to express it.


I've been interested in the idea of developer bootcamps recently, because it might make a good trade school for developers looking to retool into a new language/stack. But, I have yet to meet anyone, in my circle of friends, who has acquired their coding skills from them. What is the business model around them like?


The schools usually charge somewhere between $6,000-$20,000, with most falling somewhere around $8K-$12K. The Maker Square has cohorts of around 40 students, split between two buildings, with multiple instructors in each room who help students as needed. We start at 9:00am and leave the space around 5-7pm every evening. We don't have class on the weekends, so those usually end up being study days.


Is it a school lesson like structure, similar to what you would get with a CS degree track, or a more a focused project-oriented structure, with increasing difficulty?


The structure is highly focused and project-oriented. There isn't really an occasion where one would be likely to ask "Ok, so how am I going to use this in the real world?"

In the beginning, the day is usually split into two parts: frontend and backend. Each day there is a 'microproject' that covers what you learned that day, and each Friday there is a project that covers what you have learned up to that point. There is very little theory, though the instructors are constantly recommending books and other reading material for things they gloss over. Towards the end of the course, the frontend and backend lessons are integrated into projects that students complete while pair-programming.


I'm interested in this as I have never heard of developer bootcamps. What was your experience like? How does it differ from a CS curriculum?


I cannot speak to how it differs from a CS curriculum, as I do not have a CS degree, but I vouch for the fact that a bootcamp can teach you way more than you would imagine you could learn in such a short amount of time (usually 10-12 weeks). I am currently enrolled at TheMakerSquare in Austin TX, and knew virtually no programming when I applied. I didn't even know HTML or CSS and now, just a month and a half later, I'm spending my evenings generating rails apps and fiddling with code. It's a pretty impressive change that I most likely wouldn't have been able to do alone, or even with a good mentor.


Get them to make something on http://neocities.org because it's not hard, it has visual results they can show to anyone, and once they're comfortable with the basics of the site have them read a javascript book.

Moving quickly and freely (in any direction) at the beginning helps keep interest levels up, where an 800 page book on Java might squash their energy. Plus, if you only have the basic-basics of web stuff you start to chafe pretty quickly, and that's great motivation.


It depends on what they mean. If it's a physics grad student who wants to learn coding, I assume they need to do high performance work and point them straight to C so they can learn the fundamentals first on memory management, the stack, and so on.

Usually, I ask them what they want to do with code and go from there. Sometimes, I realize that all they really want to learn is HTML and CSS. Other times, I really do feel like the "hardcore" approach would be more fulfilling, albeit slower.


There are many things you could tell someone to get them started in programming. Here's one:

http://docs.python.org/2/tutorial/

Offer to answer questions when they have them.

If they get through that, talk about what kind of programming they'd like to do, and point them toward their first resource. Offer to help. If they actually still want to code, they'll go from there.


Personally, I learn better by doing. There are some great free courses available over at https://tutsplus.com that are quite good. I also found the http://onemonthrails.com pretty good for beginners. However, that one is a paid course, but it's pretty cheap


A few good books. I like Python as a first language, but to each their own.

https://github.com/karan/Projects has a good set of first projects, ranging from straight algorithm practice to actual app and full project work. My younger brother is following something very similar, and it's working quite well so far.


I think this sums it up succinctly: http://norvig.com/21-days.html


There are a bunch of better online resources than Codecademy. Grok Learning (https://groklearning.com) has a good introduction to programming course using Python.


If you want to make a chart, by all means use Excel.

But what if you want to make a chart maker?



I'm very skeptical of any "learn to program" list that begins with "Buy a MacBook Air". You can learn to program just as well on that cheap PC laptop you already own, and a MacBook Air is a very expensive investment for someone who may or may not become a professional programmer.

Also, learning git isn't something that a novice programmer should need to struggle with. It's hard enough figuring out the concepts of programming without having to add on all sorts of other stuff. You don't need git to write a 100-line program.

Finally, the whole list is very skewed toward web development, which not everyone is interested in. People who work in science or business might be more interested in learning how to write programs that manipulate data (e.g., using Python to automate what they would otherwise do with Excel). Others might want to learn how to write games for PCs or iPads. Web apps written in Rails might appeal to the startup crowd, but they're hardly fundamental steps toward learning programming.


I think it was supposed to be a joke...but it didn't work because it wasn't funny.


It was part joke, part reality. :)


There any many paths. This is just one of them. :)


Also, Check out http://schools.techendo.co/ for reliable schools. We're also going to start offering a graduate and leadership school for dev school graduates called campendo: http://campendo.co/

If you're a dev school graduate I'd love to meet up with you over coffee and understand how we can improve the experience with Campendo.


It used to be so easy:

a) Buy a C-64, TI-99/4A, TRS-80, etc.

b) Turn it on

c) start programming.


Now it's:

a) Buy a Raspberry Pi ($25 vs $hundreds (converted to today) when those were released)

b) Turn it on

c) Start programming (since it starts up into a programming environment of some kind, IIRC)

If anything it's easier now, and much much much more available to people who don't have $1400 to drop on the new C64 hotness: http://en.wikipedia.org/wiki/Commodore_64


i always recommend books on specific field they want to learn, if they do it then they really want it, if not.. well..


Ask them what they want to build. Learning code for the sake of it will always be disappointing. You learn better coding towards a project then just aimlessly learning concepts.


A Jedi’s strength flows from the Code. But beware of the dark side. Messy coding, poor indentation, bad structure; the dark side of the Code are they. Easily they flow, quick to join you in a fight. If once you start down the dark path, forever will it dominate your destiny, consume you it will, as it did Obi-Wan’s apprentice.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: