I recently received an email from someone who was getting into programming, and was asking for advice on how to proceed. He had a project in mind, and had started on it, but had run into areas where his current knowledge was insufficient to puzzle out the solution.
First of all, I was very impressed that he had actually started work. Ideas are a dime-a-dozen, and one of my least favorite things are “idea people” who feel like their work is done when they come up with an idea, and all that’s left is to find a programmer who is willing to fill in the blanks. That this person came to me after first trying to solve it himself was a huge mark in his favor.
Sadly, I wasn’t able to help him take his project further, but it gave me a chance to think back on the times that I’ve been a beginner (whether it was web programming, or iOS programming, or even something unrelated to software entirely), and to contemplate how I approached those beginnings.
I identified four things that I’ve found were fundamental to my particular learning style. Obviously, there are as many learning styles as their are learners, but these are what work for me.
1. Pick a Project
First, I start with a project in mind. When I was first learning Ruby, my “learner” project was a miniature HTTP server. For iOS, it was a string figure catalog. For CoffeeScript, I wanted to write some interactive demonstrations of maze generation algorithms. The actual choice of project is unimportant; all that matters is that it be something that I find interesting, and which I don’t immediately know how to do.
It may often be the case that the choice of project is what initially spurred the desire to learn. Maybe you have a web app you want and so you figure you might use it as a chance to learn Rails. Or you wish you had an app on your iPhone, which spurs you to learn iOS development.
But whatever is spurring your desire to learn to program, don’t try to learn it academically. The project is what takes the musty, dusty facts and makes them real. Without the project, you aren’t learning, you’re simply giving yourself a passing acquaintance with some information.
2. Do What you Can
Second, I write as much of it as I can, using the resources available to me. If I’m learning a new programming language, the resources probably include an online syntax reference. If it’s a new framework (like Cocoa, or Rails), I’ll be looking at references for the framework. (Personally, I prefer online references, since they are easily searchable and bookmarkable, but if books are your thing, use what works.) The going is usually very slow at this phase, with lots of false starts and backtracking as I learn what works and what doesn’t. You’d think this would be a discouraging phase, but I actually find this to be the most exhilarating of the steps. It’s all about discovery and exploration.
During this second phase, I also make heavy use of resources like Stack Overflow. I don’t think I’ve ever asked a question on that site, but when I was learning iOS programming, I learned a bunch from the questions other people had asked there, and the answers they got. Similarly, looking at other (open-source) projects on GitHub and elsewhere can help me see how more experienced programmers solved similar problems. The key, though, is to make sure I understand those solutions before I adopt them myself; if I just blindly apply their code, I’m not learning, I’m copying. I’ll never do myself any favors by taking shortcuts I don’t understand.
Note what I intentionally did not mention: posting to mailing lists or forums or IRC and asking for help. I’ve found that these are not so useful to me. For one, unless my question is very specific, the forum or list will rarely have useful responses. For another, if I do have a specific question, I may still have to wait a day or two for a relevant response, and in my experience I’ve often solved the problem already by that time. Which again casts doubt on the usefulness of those forums. Remember that you are almost certainly not the first person in the world to have the particular problem you are encountering: the list or forum has almost certainly seen the question before. Instead of asking, take the time to look for the answer. Only when all else fails should you consider actively asking for help.
3. Divide and Conquer
Third, if the problem I’m tackling is large, I try to break it into small bits first. When I was writing the first version of Net::SSH for Ruby, I was overwhelmed by the complexity of the SSH specification. Instead of trying to write an entire client ex nihilo, I started with a bunch of much simpler scripts that helped me explore the domain and learn it in chunks. For instance, I had a script that just tested connecting to an SSH server, another that went further and negotiated the encryption algorithms to use, and another that went further yet and opened an SSH channel on the connection.
As others will no doubt mention, this is where TDD really shines. It forces you to take the problem apart and think of it in the most atomic pieces. When I was learning how to tessellate a plane using Wythoff constructions, I found TDD invaluable. I wrote Kaleidoscope almost entirely test-first, and came out the other side with a good idea of how Wythoff constructions work.
When the problem you’re facing has you stumped, see if you can break it into smaller problems that can be solved separately. You may find that the larger problem solves itself in the process.
4. Ask for Feedback
Fourth, I try to post what I’ve learned somewhere, on a blog, a mailing list, IRC, a static web-page, somewhere visible, and ask for feedback. I’ve not done this as consistently as I should have, but when I have, I’ve learned a lot. Several months ago I was learning CoffeeScript and I asked Sam Stephenson to review my code (an implementation of a maze generator). He pointed out a lot of places where my code could be more idiomatic. That was invaluable.
The most important thing to keep in mind is that learning how to program (or how to do anything at all, really) is not going to be an overnight task. Do not be tricked into thinking it will be easy. But just because it isn’t easy doesn’t mean it can’t be enjoyable! Decide it’s worth it, and it will be. In the end, the more you learn, the more you are empowered to accomplish.
Justin Jackson
on 20 Sep 11Thanks Jamis. I think the hardest part about getting started in programming (for me) is that programming is mysterious. I’m used to designing mockups, sending it to developers… and then they disappear with these specs and magically produce working software.
Learning HTML was fun and easy, because you could fire up a text editor, put in some text, and load it in your browser and see it instantly.
Learning to program is mysterious all the way through: getting started you need to install a local server, find the right development tools, understand a compiler, etc…
Thinking of David’s post on this; maybe I’m just not angry enough. ;)
Jamis
on 20 Sep 11@Justin, it makes me sad to hear you say that programming is mysterious. It doesn’t have to be. For a particular project, there may be complicated prerequisites (setting up a web server, database, etc.), but those aren’t programming, that’s setting up an environment. It’s possible to choose a project that doesn’t rely on any of those things, if you want to minimize the complication.
NL
on 20 Sep 11@Justin, I think one of the things that makes programming so mysterious is that a lot of people think you need all of the things you describe – a server, tools, a compiler, etc.
None of those things are really needed if you pick a programming language or environment that lets you skip all of those—I’ve always thought that one of the best ways to learn to program was with a language where you program a line at a time, rather than writing in a file, compiling it, running it, and seeing the results. http://tryruby.org/ does this for ruby, or the web inspector works for learning Javascript. There are also any number of the other languages where line-by-line writing is a natural thing that’s done (I like R for this myself).
You can get started programming without any mystery. Eventually, you’ll need to add some of it in, but no need to start with anything more complicated than what it takes to learn HTML/CSS.
Justin Jackson
on 20 Sep 11@Jamis and @NL: A female friend of mine is trying to learn to program. The biggest “mystery” for her is that text and syntax on a page in a text editor magically becomes working software.
I can remember asking for a copy of Turbo Pascal when I was 12 or 13. After a few starter projects, I started on what I really wanted to do: build a program where a user could control the movement of a sprite on a background. I got close, but eventually gave up because defining the size of the sprite, and then defining parameters for movement on an x,y axis was too much. It was too much to “imagine the result” while staring at text.
One thing that “re-piqued” my interest in programming was Why the Lucky Stiff’s Hackety Hack.
Do you think the “classic way to program” lends itself to a certain personality or mindset? Should learning to program appeal to different learning styles (like Hackety Hack), or it just a matter of learning the traditional way?
Graham Peel
on 20 Sep 11As a former designer turned developer, I clearly recall how “mysterious” programming felt to me as well. It was all like magic. How in the world did the HTML get changed on the server?? What the heck is inside a database? What’s an “object”?
The scope of “programming” is exponentially higher than that of designing. Designers are akin to cooks and chefs. Anyone can learn the basics and fry an egg, but it takes years of practice to become a master chef. And the difference between a beginner and an expert is often times hard to quantify, albeit easy to taste/see.
Programming really is much more of a hard science, like algebra or geology. The avenues to learn and discover are so vast as to be very intimidating at first. Often times, designers look at code (especially esoteric code like C/C++ or anything functional) and see a bunch of gibberish that they think they couldn’t possibly understand.
@Justin, just give it time, and bite off small pieces. You’ll be amazed at how things start falling together. If you liked learning HTML because of being able to do it in the browser, then learn JavaScript first, because you can do the exact same thing. No compiler or server needed, just a browser.
To someone with a design background, setting up a server or database sounds very intimidating. Furthermore, since those tasks having nothing to do directly with “programming,” as far as the designer can tell, then that’s really 2 different things they have to learn: server architecture AND programming.
I failed in my first attempt to learn Ruby on Rails when it first came out mainly because I couldn’t (as a noob) get the environment running on my Windows machine. And that was with a bundled package that was supposed to get the components (Apache, Rails, MySQL) working for me without having to install them separately.
Brandon
on 20 Sep 11@Justin – I would like to suggest two books that will help demystify programming for you. Please check out Learn to Program by Chris Pine (http://pragprog.com/book/ltp2/learn-to-program) and Everyday Scripting with Ruby: for Teams, Testers, and You by Brian Marick (http://pragprog.com/book/bmsft/everyday-scripting-with-ruby) both of these books will help you pull back the programming veil.
Jamis
on 20 Sep 11I’ll have one more try at this: programming is not mysterious, it is simply different. I’m laughing inside as you designers talk about how design is all straightforward and programming isn’t. As a programmer trying to learn design, I have to (strenuously) disagree. Design is about as opaque as anything I’ve tried in my life! The fact is this: if you are familiar with something, it’s an open book to you and hides none of its secrets. If you are unfamiliar with it, it may very well seem mysterious, because there are corners you don’t even know exist that may contain information you need to proceed on your quest for knowledge.
But calling it mysterious is setting roadblocks for yourself! “This is hard”, “this doesn’t make any sense”, and even “this is mysterious” all tend to suggest to yourself that “I can’t do this”, and the longer you say it the more you’ll convince yourself.
It may seem mysterious, but it isn’t. Lots of people have learned it. For many of these things, the source code is wide open. Books and websites are devoted to learning and building these things. If anything, it’s not mysterious, it’s overwhelming! This is why it is so important to break it into small pieces and work up. Don’t try to set up a database and a webserver and TextMate &c, &c, &c. Focus on one small part of the problem and learn that, and you’ll find you’re that much more enabled to climb another rung on the ladder.
Eugene Girard
on 20 Sep 11After reading these comments, I think the “mystery” tag is being applied to anything that you’ve chosen not to understand. Like the dishwasher was a mystery to my son before I sat down with him to take it apart. Then it became something he could touch and manipulate and, eventually, understand.
Programming is the same thing. You need to dive in with the assumption that anything that can be built can be understood, and that you are going to understand it. If you have some basic faith in yourself, the rest will eventually come to you.
For those who are interested, the dishwasher didn’t survive the educational experience;)
Terry Sutton
on 20 Sep 11After trying several good, solid times to learn PHP and Ruby, I’m really starting to think I’ll never get it. You guys make it sound and look easy, but I’m really no longer sure that programming is something anyone can do.
I’ve gone through MANY tutorials, books, videos, tried building specific projects, etc, but I’m still not much better at it than I was when I started.
The missing element? I think it was mentorship. I never had anyone to ask and I really think that made all the difference. So my advice, as a multi-time/multi-language failed programmer, is to find someone who can answer questions and mentor you.
Jamis
on 20 Sep 11@Terry, your first paragraph exposes an assumption that may be leading you astray: “You guys make it sound and look easy”. Programming (and learning to program) is definitely NOT easy. But nothing is, really. What are you good at? I’m sure you make that look easy, too, but I’d have to spend a lot of time and effort to become as good at it as you are.
As for mentorship, certainly. That’s not a learning style that works for me, but it definitely works for a lot of people. Don’t beat yourself up because a technique that works well for a lot of people doesn’t work for you. Instead, look for techniques that do work for you. They’re out there. You can learn this. You just need to find your own path.
queisser
on 20 Sep 11I may be dating myself but I think it’s a good idea to start with a very simple programming language that doesn’t require setting up a lot of environment. My first experience was BASIC on an Apple ][. The satiscaction of writing that first program the prints out a different message based on what was typed in was immense and it didn’t take any kind of environment setup.
After years of programming C, C++ and a little Ruby I recently decided to learn at least some basics of web development. I did a little PHP and am now looking at node.js. I find it very difficult to get a sense of what’s actually going on behind the scenes and I suspect that learning to program on those platforms is not as easy as learning BASIC on a home computer.
My recommendation would be to learn the basics of a programming language in a command line or some kind of eval loop vs. trying to develop a web application with all those frameworks involved. I think it’s still important to learn your standard control structures, etc. before diving into the more functional, high-level programming style of many of the modern web frameworks.
Dave
on 20 Sep 11When I was in school taking CS classes, I also worked as an assistant in the lab. I would set up specific appointments with students and help them work through their assignments.
For most students, once you walked through the steps with them initially, they could understand and then extrapolate forward. However, not all students could make that leap.
One student in particular – a single mom who I wanted very much to succeed – was never quite able to grasp the concepts. It wasn’t a question of intelligence. Instead, I think it was more about aptitude. She ended up quitting the program. I ran into her at the store a few years later and she was very happy – having found a different career that suiter her better.
I guess that can be distilled down to know thyself. Progamming is not mysterious. But that doesn’t mean you’ll love the act of programming. You’ll hit many speed bumps along the way. For those of us that love programming, those obstacles just make us want to work harder to figure it out. On the other hand, if those speed bumps make you want to find the person that invented computers and smack him, then maybe you’d be happier in a different line of work.
That’s not failure. It’s just life.
TimP
on 20 Sep 11Great article, and really interesting comments.
I’m primarily a business analyst, so part of my job is to explain complex things to people – and complex is subjective.
I moved away from being a professional developer a long time ago as technology was passing my by (I was doing ASP when the world was moving to J2EE and .NET). So I suppose I have a good understand of the principles of programming. But I still write websites and I learn new techniques all the time. I do exactly what it says in the article – I have a real project and I set out to do something, through research, trial and error, etc. – and I always play around with code I’ve pulled off the web so I understand how it works (and that way I can keep what I need and throw out what I don’t).
I fully agree with the “pick a project” approach. But not just a “hello world” project – do something real (or fake real).
I think there may be a step missing in the learning process though, and I think experienced developers may do this anyway without realizing – planning. Maybe it’s just the BA in me!!
If you’re doing any project you should do some planning. Even if it’s just a rough sketch of a website, a “back of a napkin” process model, anything. Write a little task list, or at least have one in your head. This will help you keep track of what you’re trying to do. And as you cross off things off you’ll really feel like you’re progressing.
Hope this helps.
p.s. If you’ve learned HTML then try plugging some PHP into or something. Take what you’ve got and mutate it – evolution follows…
JZ
on 20 Sep 11I’d like to reiterate the recommendation of “Learn to Program” by Chris Pine (http://pragprog.com/book/ltp2/learn-to-program)
After a few of the programmers here mentioned it earlier this year, I picked up a copy for myself.
You see, I’m a designer and programming for me was often a matter of trial and error. Grab some code from here, try to wedge it in there, look for help online, etc. Even as I got more practice and started to better understand what I was doing I still felt like I was missing some of the fundamentals.
“Learn to Program” was great for filling those gaps. It starts at a very basic level (including setting up your environment) and I was pleased to fly through the early chapters. It got much harder later on and I’ll admit I didn’t finish the “homework” in the later chapters. Instead I’m back to real work applying things I’ve learned and better understanding what I was already doing. After marinating in that for awhile, I plan to go through the book again and pick up a little more.
No book is going to replace getting your hands dirty and just figuring things out, but this one might set you on a smarter path than I took in my quest to learn programming.
Terry Sutton
on 20 Sep 11@JZ How far would you say you’ve come?
I’d be firmly in your camp. A designer, with mixture of skills, and certainly the ability to cobble code together to make a product. \
Would you consider yourself to be much better at programming now than when you started? Does it make way more sense to you now, or does it still feel a bit foreign?
Alex Humphrey
on 20 Sep 11I think these tips could be used to learn a lot of things. Thanks for them! It encourages me to “divide and conquer” my own projects. lol
Ulf Klose
on 20 Sep 11As Dave already mentioned: programming doesn’t suite everybody. I’ve got a CS degree and of course I did some programming during my academic training. But I still wouldn’t say that I can program. Of course, somehow I know how to program. I touched several languages (Java, Delphi, C++, Assembler, JavaScript, PHP) and were able to write small programs. But I never really got into it. For me it was really hard to do the programming necessary to get my degree. I am and always was fascinated by programming. I tried to learn Ruby on Rails several times. Small programs haven’t been a problem, but as soon as the problems I tried to solve got more complicated I quit. I really wasn’t able to dig myself through those. I really love the Rails microcosm but that doesn’t change the fact that I’m simply not a programmer. Unfortunately. Because I would really love to help hacking on some Open Source projects. Maybe one day …
JZ
on 20 Sep 11@Terry,
I would say that 3 years ago my self-assessment as a programmer would have been something like this:
• I know enough to wrap my HTML in whatever template language I’m using (PHP, RoR, ASP). I can do simple logic and I can usually modify existing examples even if I don’t fully understand them. I can Google enough JS to cobble together simple interactions but I’m not always sure how they work.
Today it’s more like this:
• I generally understand or can figure out how things work in an app. I can setup simple models, controllers, and views in order to build some full-stack features. I good at using helpers and view code and can usually figure out how to display whatever I need to. I write more code than I reuse and I understand what I’m doing, though I know it could often be more elegant or efficient. I’m becoming more comfortable with the more back-end parts of an app like models and controllers.
So yeah, I feel like I’ve learned a ton. The book was a huge help on the side of understanding the fundamentals behind a lot of what I already knew through trial-and-error. But of course the biggest difference was in pushing myself.
When I’ve had the opportunity to choose what to work on I tend to look for things that are just a little over my head. Stuff that I’m not quite sure how to do but I think I might be able to figure out. Similarly when I’m working on a team, if I have the time I often try to see how much of the feature I can implement before I pass it to a programmer. It usually makes their job a little easier and helps me learn. I’m fortunate that 37signals lets me indulge myself this way :)
Brian Hogan
on 20 Sep 11@Terry
You mention mentoring, and I coordinate the RailsMentors project, a completely volunteer effort that tries to connect people looking to learn with people willing to mentor. Maybe you can find someone to give you a nudge. And one of the benefits of a mentoring relationship is that it can, and should, work both ways – you would certainly bring your own skills to the table.
pwb
on 20 Sep 11@justin, if you have a Mac (Python is included), go run through Learn Python The Hard Way.
John F. Mercer
on 20 Sep 11@Brian Great article. Direct & to the point. Many thanks.
MJ
on 20 Sep 11One of my favourite learning tools at the moment is actually writing questions for Stack Overflow, however I never actually end up posting them. I find that the process of writing them makes me cover my bases (I don’t want to look like a fool) and I, in turn, realise something I’ve missed, or something I haven’t tried. I expect this is a similar mental process to writing blog posts.
I struggled for many years trying to program, I wanted to do it very much and read books on Basic, C, C++, Java, but I could never get anywhere. The problem I had is tip 1, I never had a project. I’d read the books, and do all the exercises, but half way through the book I’d forget what I’d done in the early chapters and so by the end I’d have a lot of information but no clue how to stick it together into something useful.
The breakthrough actually came with Rails. I had a website idea I wanted to make and after reading Agile Web Development with Rails v2, and failing like always, I decided I’d follow the book through again, but this time replace the book’s project with my own. It worked! It took a lot of the pressure off, there were a lot of small parts that the book didn’t cover, so I could focus on those. The main structure I followed the book, but even then I was questioning everything, trying to decide if I need it or not, which gave me a better understanding. In the end I had a working blog, I learned a ton, and I now program in Ruby, Python and PHP.
I just wish I’d read a list of tips like this when I was 15 ;)
Tim
on 20 Sep 11+1 the “code is mysterious” comment.
As someone who constantly has ideas, I’d love to be able to whip together a working prototype with Bootstrap, php/mysql or using Ruby and go to my dev for fleshing out.
For me, I’ve NEVER been able to write code – starting from my uni days (C++).
I bought Learn to Program and Programming Ruby (from Pragmatic) and got as far as arrays (and even wrote code myself – which worked – I was stoked).
I’ve also got Sam’s Teach Yourself PHP/mysql…
The problem I have is that I find I can understand (and code) to a point, then it all just goes pear shaped (though I’ve gotten further in Ruby than I ever did in anything else).
I get super frustrated with the learning curve, and figure I’m better off paying someone to actually implement my ideas that I need now.
But I wish I could get past this roadblock I have. It would make my life much much easier as I could prototype my ideas with code, not just mockups.
(Note, I am a telco engineer, but have just released my first web+iphone app and have more on the way so my design and coding chops SUCK). Tim
@noel_g
on 21 Sep 11I find design “mysterious” I can copy / mod what I find, but don’t get PS, Illustrator, etc. I can’t pick a color scheme to save my life and I can’t look at a Font and tell Helvetica from Times.
Maybe there is an opportunity for developers to mentor designers and vice versa…
James
on 21 Sep 11@Terry: I’d like to offer you some advice based on the difficulties you describe. Firstly, I’d pick one language and stick with it until I was reasonably fluid in it. I say go with Ruby, Python, or Clojure and forget PHP.
Secondly, try to define very specifically what your sticking points are. Sticking points are natural and they occur even with the most experienced programmers. For example, I had a lot of sticking points with Ruby when I first came to it 3 years ago as a Java programmer. The way to work through them is to be able to define what it is that you don’t understand. For example: “I don’t understand how an object can execute code that is inside another object”. Or: “I don’t understand how Array#reduce works”. You write: “I’m still not much better at it than I was when I started” – and that’s just not specific, rigorous, or meaningful enough to be able to make any progress. Half of finding an answer is formulating the question precisely. Try articulating what you don’t understand and the answers will start offering themselves.
Thirdly, try to pair with a more experienced programmer and watch them work. When I first started programming this was a huge catalyst to my growth. Watch what the experienced guy focuses on during coding; when does he / she pause; and how does he / she navigate files, both within a file and between files. This alone will release an avalanche of understanding on your part.
It’s easier to do today with the brilliant screencasts from Peepcode:
http://peepcode.com/screencasts (I’d check the Play by Play series first).
I also recommend Zed Shaws Learn Code The Hard Way series: http://ruby.learncodethehardway.org/book/
As he points out (and Jamis alluded to) the Hard Way is Easier. You can do the hard way wrong, or you can do it right. If you do the hard way right, you will learn how to program. But you must do EXACTLY what he says in that book.
Cheers, James
Runar
on 21 Sep 11Great post, but it sound more like a strategy for advanced beginners. I’m on the mystery train. The first obstacle is understanding the syntax. And that i s be no means easy. (Struggling with aplescript and just needed to rave)
Brandon
on 21 Sep 11In defense of forum posting…
A lot of the help out there when you search for a particular problem are actually forum responses. I think forums are a great resource. Yeah, responses may not be speedy, but if you figure it out before they answer, someone else can still benefit.
If you come up with a solution first, just answer your own question and share your knowledge with the rest of the world. Pay it forward!
Dan
on 21 Sep 11I agree with “playing” with little useful programs to learn. For example I’m currently learning C# and python side-by-side just for fun. My first task was to figure out how to write to a text file. Why? Because I know I can use it for error logging and other things in futue applications. These snippets of mine go into a library of useful tidbits that I never have to write again. But I also agree, that setting up the environment, not having a mentor, etc have slowed me down. Finding code on the web helps, but often times leaves out some “assumed” details and only leaving a snippet as your clue. But it is still fun, and that is what drives me entirely, though that probably dates me as youths today seem less awed by this technology.
Edgar
on 21 Sep 11this is just from my personal experience, when I start learning webdesign and web development I start with php and mysql which is okay, but make my design sort of okay (1 man army here I was doing the programming and design…I still doing both).
then last year I start learning Rails and although it’s a little hard to understand OOP at the beginning once I got used to that I also notice my design skills got better too it was able to understand css way better, because rails did a lot of the heavy lifting I was able to focus and learn a littler more about simple and efficient design.
ror – will also make you a better designer.
Lee
on 22 Sep 11It is really hard to give advice when you are so immersed in a field like programming. I sometimes find it hard to put myself in the shoes of someone just beginning. However, I do think learning to program is really just a matter of time and will. If you really want to build something, and you are willing to put the time in to learn it, it will get built. And you will learn a thing or two about programming along the way. Build enough things and the next thing you know you’ll a half decent programmer.
Mark Lakewood
on 22 Sep 11The biggest breakthrough for me when learning to program as finding out at its most basic level there are only three things you can do in programming.
1. Statement foo = 1 + 2 so in this case foo is a variable that contains 2
2. Decision if statement is true: do this else: do this this allows you to do statements based on some kind of logic
3. Loops for 10 times: do statement
There is a whole lot of stuff on top of this, but these are the basics. Start breaking down you tasks in terms of this and it will get you into thinking about how to program.
Hope this helps
Mark
shan
on 22 Sep 11Really nice post.But can you tell me some tips,how to develop logic for a beginners who have started learning programming.
Luke G.
on 22 Sep 11I’ve also noticed that some people seem to have an aptitude for programming and some don’t. At some places I’ve worked, non-programmers often showed more of an aptitude for development than the people who were in the ‘official’ development department!
I’ve found that this applies to spoken languages too, incidentally.
I love the suggestions here, and I’m going to be putting them to use as I start to delve into the world of Java and Android soon. Thanks for a great post, and for sharing the fruits of your own experience!
Luke G.
on 22 Sep 11I’ve also noticed that some people seem to have an aptitude for programming and some don’t. At some places I’ve worked, non-programmers often showed more of an aptitude for development than the people who were in the ‘official’ development department!
I’ve found that this applies to spoken languages too, incidentally.
I love the suggestions here, and I’m going to be putting them to use as I start to delve into the world of Java and Android soon. Thanks for a great post, and for sharing the fruits of your own experience!
Scott K.
on 22 Sep 11On the “mysterious” thing, I agree with Luke G’s observation about aptitude. I think that’s a fact which is overlooked more and more all the time. Yes, programming comes easy for people who get it, but not everybody does, nor are they ever going to, and that’s OK. Just because I want to be a brain surgeon doesn’t mean I have, or can even acquire the skills necessary if I don’t have an aptitude for it. We need to know our own boundaries, operate within them, and appreciate others who have those lines drawn in different places.
Tom
on 23 Sep 11Two thoughts:
1. Like anything, the more you do, the better you get. I was a better programmer five years ago than I was 10 years ago; I’m a better programmer now than I was last year. There’s some code I wrote nine years ago that’s still in production that I refer to as “bad high school poetry”. As Merlin Mann would say, you’ve got to embrace the suck. You will get better at it.
2. My experience in working with students learning beginning programming is that one can quickly devolve into the “all possible combinations” method of programming. Doesn’t compile? Maybe you just need a few more semicolons. Doesn’t loop right? Try some sort of different comparison operator.
If you find yourself just banging away, stop! Step away from the keyboard! Maybe I’m showing my age, but I sometimes find that printing out the code that isn’t working right and tracing through by hand is helpful. (Knowing how to use a decent debugger is helpful, too).
Vishnu
on 23 Sep 11@Jamis I think u have summarized the steps in a very gud way. But as u said a good project should be selected and after basic syntex understanding a practical approach to learn programming is the best…. I think it will help me a lot.. Thanx for such a nice article….
Scott Newcomb
on 24 Sep 11“But whatever is spurring your desire to learn to program, don’t try to learn it academically. The project is what takes the musty, dusty facts and makes them real. Without the project, you aren’t learning, you’re simply giving yourself a passing acquaintance with some information.”
That’s the part that does it for me. I have struggled with programming when trying to learn the syntax and only the syntax, but when I am actually trying to accomplish a project it brings the code to life and allows me to understand it better. Most tutorials I have ever seen don’t give you good real world examples or it is something that doesn’t really apply to what you are trying to do.
Kris Zani
on 25 Sep 11Just wanted to put my thoughts into this (I am an IT trainer and developer by trade).
first, most people who want to learn to program should avoid starting with web based stuff. Historically this was one of the easiest areas to get into – you learned HTML, then some javascript, then a bit of php and you were off. Now people try and learn php without knowing html or css or javascript and get in a right knot because you tend to need to know all 4 (5 if you count SQL) quite well before you can do anything useful.
If you want to learn to program – as in the theory and mindset. Then i would recommend you start with Excel VBA. It’s quick and immediate, relatively simple (from a syntax perspective). Has a GUI builder (which is always fun) and it’s easy to come up with tasks to build. And you can record macros to start your code off if you get stuck. Plus there are some great books out there. I would seriously avoid starting with any language that is fully object orientated (e.g. Java, .Net) or unusual (e.g. Lisp)
If you definitely want to learn web programming, then unfortunately you have to stop yourself from running before you can walk. Learn html first and well – when you code a standards compliant page in notepad, move onto css. when you can make your pages look the same in most modern browsers and have mastered floats and standard layouts move on to some basic javascript. nothing too advanced at first. but write some validation scripts for forms and some image rollovers etc. now you are probably in a position to learn php without becoming disheartened.
For people who are learning to program and get stuck. Google for a local IT training provider that teach the subject you are learning. Email them the question and start with “I was on a course of yours a while back….”. If they are anything like me, I have no patience or inclination to search for a trainees details to check so I just answer the question as best I can – if they’re not an old client of mine then maybe they’re a potential new one – everyone’s a winner. :-)
This discussion is closed.