Want to Learn to Code? Start Small and Have Fun
fredkschott.com
fredkschott.com
- 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.
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?
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.
You're right; there's no sure solution, but having comrades and leaders in learning usually doesn't hurt. Best of luck!
"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.
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.
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.
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.
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
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.