17 comments

[ 3.3 ms ] story [ 55.3 ms ] thread
Got to be the best way books can only teach you so much!
It is sad that after 20 years of MVC and the 10 years of it on the Web, we are still telling people that to start coding they need to start with HTML, CSS and JavaScript. And I agree with you, this is the place to start today. Yet it is pathetic, that is unless we want to keep the coding just to ourselves, like the doctors do with their field. I recently listened to a presentation on Grails. Honestly wanted to grok it fast. Mind you, I have been a Java developer since it first came out around 1996. No disrespect to the framework itself, but all those extra concepts you need to shove into your head before you even begin to code, this is atrocious.

Out of this resentment I and a couple friends set out to build an MVC system where newbies start with the models (backbone.js) by creating them on a smartphone using only their browser. And once you are done, the app goes live. See it at http://urbien.com and its open sourced client at http://github.com/urbien/urbini

Laying out the main concepts of your future app, and connecting them is not easy for noobs. Hack, even for developers sometimes it is a bit of a puzzle. You need to scratch your head a couple of times when you make the domain model for a new app. But at least this is all you need to do to get the app running with our system.

Afterwards you can start tinkering and tweaking, by changing themes, images, modifying the underlying templates (HTML) in-place, and connecting apps IFTTT-style, with a tiny plug script.

Would you like to review and may be even help us make the design friendly to geeks-who-can't-code?

I don't get it. What do people mean nowdays when they talk about being a "coder"?

It seems everybody want's to build stuff before understanding the fundamentals of computing. I don't see how jumping right away to trying to build stuff for the web can make it easier for someone to learn to program. No talk about algorithms, datastructures, and so on.

I'm not dimissing this approach, I just feel like it is not the most productive in the long run. It may lead to the development of bad habits, cargo cult, and stuff like that, derived from misunderstandings of how computing works.

EDIT: as an example.. i had a friend that learned to program the way you suggested, though he lacked knowledge of basic stuff like recursion, ordering and search algorithms, and so on. He sure could get things done, but not rarely the approach used had extremely bad performance or did things like modifying data shared between threads in an unsafe maner.

Totally agree with you that the skills learned from messing around won't turn you into a fully skilled programmer. My argument is that if he'd learned algoritms, recursion, data structures, etc. he probably would have hated and dropped it, while instead he at least knows something, has the ability to teach himself more, and hopefully has fond memories. It's much better to foster a true interest in programming - even if they're not very good - if it will then lead them to improve themselves and enjoy doing it.
Yeah. And as a newbie, which sounds like the more plausible path to successfully becoming a real programmer?

1. Can't do anything -> Learn to build stuff -> Learn to write good code

2. Can't do anything -> Learn to write good code -> Learn to build stuff

Plenty of folks need the motivation of seeing what cool stuff they can build to make it through the dry parts.

My (heavily biased) recommendation - start with c++ or some other annoying, slow language. I know other people say learn python or ruby, but I think that makes for sloppy programmers and bad habits.

First, read Introduction and Basics of C++ in the link below. Then make a text based rpg with 1-2 rooms. I would have a character and two bosses each with with power, toughness, and 1-2 attacks. Then read Compound Data Types and Object Oriented Programming from the link below. Finally, revise the code of the game to use objects (don't worry, that will make sense once you finish reading). Also, to emphasize your bossness, say that are "refactoring" your code.

As a gamer, I thought it was cool that I could make a simple game like this. Maybe you won't. In which case, my suggestion probably is worthless. But, I think that learning a more systems level language will force you to think more about your code and make you write better code in the long run.

Links: tutorial - http://www.cplusplus.com/doc/tutorial/ compiler - http://www.microsoft.com/visualstudio/eng/products/visual-st... - if you are on windows. If you're on linux, install g++ (sudo apt-get install g++ for ubuntu/debian and sudo yum install gcc-c++ for Fedora). If you're on a mac, no idea, I don't use macs.

I actually agree with making game-y stuff just for fun, because it allows you to think up and build rather intricate architectures real quick. It's hard to make a game as a newbie and not have it turn into spaghetti as you keep making it more complex, but it's also no biggie, and you get to learn how to recognize those things, what to improve etc. Practice with games, when you become more confident make applications; to me that makes sense? Playing games may be a shallow pastime, but making one can become more hardcore than one imagined real quickly. Just about anything in programming you could mention, certainly all the "pedestrian" things, could theoretically be put in a game - but a game can also be just two rectangles and one circle, and in that spectrum, and the absence of even the pretense of being useful, lies a great opportunity for experimentation and learning.

Make a simple clone of a game or application or graphical effect you adore, and go from there. There's still plenty of opportunity to suck the fun out of it later :P

As always, it depends on the person and their specific goals, but I think diving in before learning the fundamentals is a better strategy for the reasons he's getting at in the blog. The biggest decider in whether you will be successful at a new skill is if you put in the hours, and you are more likely to put in the hours if you are having fun and engaged. If putting together a crappy web app makes you stick with it better than learning data structures, then it's better. Plus, for the majority of us, the end product is the real goal, and we only care about algorithms as far as it helps us achieve those goals. Lessons on code maintainability and algorithms will seem much more relevant and engaging once you tried to add features to your spaghetti code base or figure out why your application was so slow. Also, for some people who have a specific end goal in mind, maintainability or algorithms really don't actually matter because they have smaller goals.

To me it's similar to learning an instrument. Learning scales and doing finger exercises may be more useful practice than just playing songs you like all the time, but again, what's more important is that you consistently practice. As you learn more songs, you might struggle on parts or want to improvise and then you will be more engaged to learn technique or scales, and some people will be happy they can strum a few chords and never worry about more. In short, 1000 hours of mediocre practice will usually beat 10 hours of perfect practice, especially because the mediocre practice provides the motivation for the perfect practice.

Don't bite off more than you can chew. Goes for a lot of things. I used to write lots of short stories, then I started working on a longer, novella length piece. After ten chapters or so I got sick of it, but didn't want to start anything else with that unfinished. Pretty much stopped writing after that.
I like the comparison to sports. And, CSS/HTML and then Javascript etc, learning the fundamentals of those - is what EVERY Developer should have (or currently do). So, I'm with you on that one.
Totally agree with your point. I tell almost everyone trying to learn programming to start off with Udacity CS101 with Python. I myself started with HTML/CSS a long time ago. It is not programming per say but the satisfaction of having created a simple web page is satisfying. Learning Ruby on Rails from the beginning will be too much to handle at one go without even knowing the basics of HTML/CSS/JS and not even to mention the basics of database design. It will take a long time, but it will be worth it as knowledge and experience is accumulated. Start Small, Have Fun - good advice.
I find all of these learn to code posts very interesting. I would consider myself to be a beginner coder even though over the years I have spent time learning or trying to learn C++, HTML, CSS, Javascript, Node.js, jQuery, Objective-C, Python, Ruby and others. For each language I had a different reason for wanting to learn, generally it amounted to wanting to build something and trying my best to learn the pieces necessary to start.

The key thing that ties all of my different attempts to learn together, and why I still consider myself to be a beginner is that I always stopped short of achieving my goal. Generally this was due to hitting some sort of blockage that I couldn't figure out how to get past, or generally getting bored with the slow learning process.

Both of these recent articles have really resonated with me, as I have personally struggled with Codecademy (currently 66% done code year), and I regularly bite off more than I can chew. I like the suggestion of finding a mentor and putting my head down, as well as focusing on small projects that build off of each other.

In the end, I really want to learn how to code, but so far I haven't found a method that sticks. Maybe that says I don't really want it, but to me it says there isn't a great learning method out there for me yet. So while Codecademy is great and all, I really think there is still a hole in the market. Figuring out how to fill it is the key.

I think you're right that the "finding a mentor" part could help you out. Everyone who programs hits ceilings at various stages through their careers, and you sound like you're interested enough to want to break through. I find that these breakthroughs usually come to me from either a) getting someone else to show me a way it could be done, or b) learning something from the code of someone a little beyond my skill level. If you've stuck around for that many technologies under your own motivation, perhaps you just need to talk it out with someone just on the other side of your struggles.

You're right; there's no sure solution, but having comrades and leaders in learning usually doesn't hurt. Best of luck!

Your reply remind me of the situation I was in little over a year ago. Based on my own experiences going through trying to learn to code, a few comments:

"In the end, I really want to learn how to code"

No, in the end you want to learn how to solve problems.

If you start with a problem and try to learn the minimal of whatever coding/ language/ package/ software is required to solve the problem, you will be much further ahead. At this stage, don't worry about being efficient or writing the best code. Now, I laugh at the SQL queries that I wrote a year ago but they did solve the problem. Over time, I learnt to write much better queries.

"I always stopped short of achieving my goal"

This is because it was your goal and on not achieving the goal you gave yourself a pass. You will be better off solving a problem for someone else for whom you care and you will be embarrassed if you didn't solve the problem, like for your spouse, kids, parents, siblings, friends, coworkers, boss, neighbor. Also, achieving small victories are important for continued interest.

Little over a year ago I was jumping around between Ruby, Java, Python, HTML, CSS, JS, SQL, R never finished learning or using any of them until my wife asked me to automate a manual process for her. I started out with solving her problem and learning enough of the languages that will quickly solve the parts of the problem.

In the end, I learnt enough of mySQL, PHP, and Bootstrap to deliver a complete solution to her problem. There was enough fear of failure and being embarrassed that I delivered a complete solution, however rough, to her. Since then I have modified and extended the solution and now it is being used by another 1,000 users, still it is an ugly piece of work. But I am much more satisfied and encouraged to continue learning and improving.

dont learn how to code , but learn how to build stuffs. Coding is just a mean to an end.You need to learn how to ship products ;)
Ah man... this is such a better title. What was i thinking???
I have been learning by myself for the past year, and if I may, let me share a few thoughts gathered along the way:

- This will never be “2 months, and I'll build next Facebook”. Consider that this is a field of knowledge that is exponentially evolving every year, and you will need years before you are comfortable with it. Learning code or computer science is a long term decision, and you should go for it if you really see yourself doing it as a hobby. If you are not up for it, better learn web design or something that relies less on programming;

- Following my previous point, start by learning the basics of computer science. You will not understand the abstract concepts, or know what you are doing before you have the theory basis behind it – You will get unmotivated faster. How fun is it to play a guitar without knowing music theory? There are dozens of ways to learn CS, and I personally find the CS50x class from EdX the best source to start;

- If you don't like math, well.. start liking it! Part of the enjoyment of programming is the satisfaction you get from solving problems. Read books about algorithms and/or take the online classes in Coursera or Udacity. Also make Project Euler as a daily visit, and try to solve several challenges per week;

- Again, start small, and go small every step. Make a structured plan of what you want to learn, such as "Monday I study Python, Tuesday for Algorithms, Wednesday for CS..". Take advantage of dozens of courses available in Coursera, Udacidy and EdX.

- Part of learning anything is making yourself motivated along the way. You should study at least 10h per week (I work full-time and I never study less than that) and make your successes visible, such as placing a post-it with every online course you completed in a wall;

Btw, I studied Economics for 5 years and I am 24. Even if you are older, never fall in the excuse that you are too old or it's too late. That's your "I am afraid to fail" thoughts. You don't have any pressure, no one is asking you to develop a whole new Microsoft.