Ask Leo! by Leo A. Notenboom

How hard is it to learn programming?

Search First! Then browse: Categories | Full Archive | By Date | Newsletter

Home » General Computing » Computer Programming

Summary: Programming relies on both skills and talents you have and information and techniques you can learn. If you have one, then the rest often comes naturally.

Although I have been in the IT industry for 6 years, I have never touched programming in my life. The reason is that I always thought I'd end up in the network administration, in fact, the AS degree I was pursuing had an emphasis of network administration. I've started my major preparation and I am currently taking my math requirements, which I enjoy but leads me to my first question.

How much math is used in programming and how? So far, I've managed A's in my mid level classes and have managed a 3.88 GPA so far in 60+ units of college, but it only gets harder from here. I will be taking Calculus, Physics and three entry level computer science classes in the next semesters before I can transfer to a 4 year University.

My other question is, how hard is it to learn programming? Is is something where either you get it or you don't? Can someone with my lack of experience in programming just learn it in school?

Lastly, when you get hired as an entry level programmer/software engineer, what is your job like? Any suggestions are welcomed.

OK, one more :-) should I learn a language before transferring and which one?

Lots of questions, but lots of good questions that I do get asked fairly regularly. In fact I'm guessing software engineers at successful companies like Microsoft and Google probably get asked something of this flavor quite often.

It's a difficult question to answer because there are several components to being a successful programmer. One is "what you know" - that's the stuff you can learn.

The other is "how you think". That's more difficult.

Regardless of the language used, computer programs are written in a fairly strict, methodical, logical way. Computers do exactly what programmers tell them to; nothing more, nothing less. Even unexpected behaviors or bugs are simply a manifestation of the computer doing what it was told to do rather than what the programmer intended for it to do - meaning the programmer's instructions to the computer did not match his or her true intent, often in some obscure detail.

If there were an innate personality trait I would want any aspiring programmer to have it's simply the ability to think logically. By logically I mean the ability to combine various related pieces of information and deduce what must result. If A is true, and B is true, then we know that C must be false... that kind of thinking, though not necessarily expressed exactly that way. The ability to think and express a series of steps that produce a desired result.

"If there were an innate personality trait I would want any aspiring programmer to have it's simply the ability to think logically."

I personally don't think that the ability to truly think in a logical way can be taught, at least not completely or not at the level that really makes a successful programmer. Yes, there are classes and you'll want to take them to further hone your abilities, but if those classes are a real struggle then I'd start to get concerned.

"How hard is it to learn programming?" is really an unanswerable question. Beyond your innate ability to think, it varies dramatically from person to person based on the skills and talents they bring to the table and based on their own tastes and desires.

It was easy for me. I was fortunate and "got it" in my very first programming class (ENGR 141, Introduction to Fortran Programming at the University of Washington in my freshman year). Even though I'd never touched a computer before, I found myself assisting others in the class as we went along.

Obviously that's a great sign, but is that kind of affinity to programming required? I don't think so.

What's perhaps just as important as you ability is your enjoyment. As you learn how to do more and more, do you find yourself enjoying yourself when you write software? Do you like solving hard problems? Do you like beating your head against the wall when the computer does exactly what you tell it to do, but that wasn't what you intended at all? Smile OK, that last one it a little facetious, but a frequent reality even for the best of programmers.

My light bulb moment was the realization that there were people who would pay me to do this programming thing - something that I really, really enjoyed.

"Can someone with my lack of experience in programming just learn it in school?"

Yes and no.

It's my strong belief that you cannot learn programming just in school. School's great, it's often a requirement, and obviously some schools are better than others.

But there really is no substitute for experience.

Which begs the old "chicken and egg" question: how does one get experience if one needs experience to get a job?

"... you simply need to get experience as you learn."

I have two answers for you:

  • Utilize what your school does provide. The two most valuable classes I ever took were not programming classes, per se. They were "special projects" types of classes. You pick a programming project and you do it, typically in teams. This was as close to real-world programming as you could get in the school environment, and it was incredibly valuable. Internship programs through your school with "real" companies are also an opportunity that you should take if it's in any way possible.

  • Make your own experience. Program anyway. Make up projects for fun. Program in your spare time. Use any excuse. Help out a local non-profit, a friend, or make up something useful for yourself. Just do it. You'll learn more by doing real projects, even on your own, than you ever will from a book.

So the answer is really "Yes", you don't need experience to learn programming. You simply need to get experience as you learn.

"How much math is used in programming and how?" is a little easier.

Remember all that logic I mentioned at the beginning of this article? That's really just math. In fact, it's what I'd call pure math. From the computer's perspective all logic - everything it does, really - is simply the manipulation of numbers. Computers are really good at manipulating numbers.

Now, that having been said, I wouldn't call it advanced math. Computers are, after all, really, really stupid. All they really know is zero and one, and everything else builds on that. Programming fundamentally relies on basic algebra and logic more than any other form of mathematics.

Where things get dicey is what you end up doing with your programming. For example if you're writing advanced 3-D modeling software, then you're darned right you need advanced math skills, and lots of them. Writing software to analyze large sets of data? Statistical math is its own special area of discipline. Writing software to support the movements of an avatar in a virtual world? Then you probably need to understand the mathematics behind physics.

You get the idea. It's one thing to say that programming requires a high degree of comfort with fundamental math like logic and algebra, and another to say that your eventual programming job might also require advanced math specific to whatever that job is.

"When you get hired as an entry level programmer/software engineer, what is your job like?" There are as many answers to this as there are companies you could get a job at. And to be totally honest, it'll depend on what the company sees in you; what they think it is that you bring to the table.

When I started at Microsoft it was a case of "here are some bugs that need to get fixed to get you familiar with the code, jump in!" Welcome to the deep end of the pool. That's not an uncommon approach even today. (My first day there also included my first exposure to email, my first exposure to Unix and my first exposure to MS-DOS. My head was swimming at the end of the day.)

Again depending on what skills you bring to the table, it's also not uncommon for individuals to start in customer support or testing roles as well before moving on to product development. In a way that's unfortunate, because it gives those roles an unwarranted "2nd tier" status and the skill sets are often quite different. A good programmer doesn't always make a good product tester. Similarly the ability to explain a complex procedure to answer a real person's question is very different than designing a complex procedure to be acted on by a computer.

Personally, I think that "what's an entry level job like" is a great question to ask as you're interviewing with or talking to people who work at various companies.

"Should I learn a language before transferring and which one?" First, I'm going to assume you mean programming language. Smile

I can't answer the "before transferring" part because it really depends on the curriculum of your school. It should be clear, though, as you look at class pre-requisites what's expected and what will be expected of you in that program.

That actually leads me to the first of three answers on which programming language to choose:

The one the school uses. Like I said, check those pre-requisites for the classes you expect to take. Most schools and courses tend to favor one language, and that's the one you should probably start with. When I started it was Fortran for the engineering students and Pascal for the budding Computer Science department. Now it's often C++ or Java, but I'm sure even that's changing over time as more emphasis is being placed on web-based programming.

The one your potential employer uses. This is a little tougher to get right from day one, but find out what your ideal employer is using and consider adding that language to your repertoire. For example, if you're targeting Microsoft then learn C++. It's not critical, but it could help.

It doesn't matter, pick one. This is my true stance on programming languages: it doesn't matter which one you know, as long as you know how to program and program well in that language. My position when hiring at Microsoft was always exactly that. Many students came in knowing Java, and we didn't program in Java. No problem. If you're good, - really good - then C++ or whatever else might be out there is "just another language". The syntax of that language is just another set of details and knowledge that you can pick up.

"It's all about how you think."

Which really brings me full circle. If a specific programming language is just a "detail" that I'd expect a good programmer to be able to pick up as needed, what is it that makes them a programmer in the first place?

It's all about how you think. School might be teaching you a programming language, but what's really coming along with all that syntax and detail is discovering, exploring, and exercising your ability to take abstract concepts and procedures and translate that into methodical, logical steps for a computer to act on.

And, fundamentally, that's what programming really is.

Related:

Helpful? Get new articles weekly by email in my FREE newsletter!

Your Name:
Your Email:


Why Subscribe?

Article C3189 - October 22, 2007

Recent Comments
9 Comments

You waited until college to start programming? :-)

I think that one of the best ways to learn programming is "just do it". Pick up a book on the language (asking a Usenet group for the particular language, such as comp.lang.c, for a good "intro to programming" book for that language will help narrow the field), sit down at a keyboard, and follow along by doing the exercises.

I started that way with a book called "Basic BASIC" back around 1971 or '72 at the tender age of 10, and I never looked back. (The book is actually still available on places like Amazon. ASIN B000UG34YI.)

Posted by: Ken B at October 22, 2007 2:46 PM

Thanks Leo for answering my question! I will move forward with my current goal of earning a BS in Computer Science. After reading all you had to say, I think I'd enjoy programming. I think I am a very "logical" person, which is one of the reason I actuallly ENJOY math and have had success in it. Thanks for your time!

Posted by: Hector Torres at October 22, 2007 3:02 PM

I got a B. Sc. in math in the early '60s. The most useful course I took was a half-course on logic offered by the philosophy department! The course covered three words: "and," "or" and "not."

I learned programming on-the-job at IBM, and the logic was always the easiest part.

Posted by: Gord Campbell at October 26, 2007 6:38 PM

Experience - that's the BIG score for anyone moving into a computerized technology today because it changes daily! There's 1 year's experience 40 times and there's 40 years of constant learning experiences. Having been in Telecommunications for 40 years, through times spent at the 'cord-board' as an 'operator or central' before there was such a thing as 'direct dial' much less cell phones, up through being on the bleeding edge of 'broadband' to the masses wired and wireless has been a wild ride but experience I've always learned from and continue to learn on a daily basis. It's that constant questioning that keeps your mind and your job satisfaction sharp, fun, and rewarding. Am I a programmer? Not exactly, but I sure do know how to make advanced telecommunications devices perform at their peak. All those devices are just big, medium, small and micro-computers, and dumber than anyone can imagine.

Posted by: Patricia Van Dusseldorp at October 29, 2007 8:53 AM

Before you commit yourself to a programming career, research the market in your area and find out what skills are in demand and, more importantly, how much they pay. Programming has recently become a much more globalised industry, with lots of major western firms outsourcing their programming work to India, Singapore, Taiwan, Korea and China, all countries that are turning out large numbers of highly technically literate programmers who are prepared to work for significantly lower wages than Western graduates would find acceptable. As Ken B says, a class can teach you the basics but you will have to be prepared to spend many hundreds, even thousands, of hours sat at your computer with textbook and programming exercises before you achieve a marketable level of competance. If you are looking for any reward other than the satisfaction of the job itself, you might consider looking elsewhere.

Posted by: JohnE at October 29, 2007 8:53 AM

pls mr. leo i want to be a computer programming specifically on oracle and java, so how do i starte? i would be grateful if you assist me, thanks.

Posted by: sunday at January 28, 2008 10:32 AM

I dont really leave comments unless my heart's touched by the contents. Leo , you are one of the best advice giver there ever existed . Keep up the great work :)

Posted by: Mewtwo at May 31, 2008 10:41 AM

Im in High School now (sophmore) and i already took Visual Basic (its pretty simple) and i am currently in C++ (its not that hard) (as of math i have only taken algebra 1-2 and Geometry) People are telling me to learn Java and C++ so i will be trying to learn Java here soon!

Posted by: Cameron at March 2, 2009 4:12 PM

hey leo, this helped me alot! i was having a tough time between choosing to switch to programming or stick with my current course(computer engineering) but this showed me which path to take.

Posted by: Don at May 16, 2009 11:35 PM

Post a comment on "How hard is it to learn programming?":






(Email Address will not be published.)

Remember Me?

By popular demand...
my tip jar
Cuppa Joe
Buy Leo a Latte!

(you may use HTML tags for style)

RSS feed Subscribe to the RSS Feed specifically for comments on this article.

Before commenting, please...

  • Read the article at the top of this page. If your comment shows you didn't, it'll be deleted and ignored.

  • Comment only on this article. Use the Google search box at the top of the page if you have a question about something else.

  • Don't include personal information in the comment. No email addresses. No phone numbers. No physical addresses.

  • Don't spam. Excessive links to unrelated sites within a comment or across multiple comments will cause all such comments to be removed.

  • Don't ask me to recover lost passwords or hacked accounts. I can't, and those comments will be deleted.

  • I can't respond to every comment. And I can't vouch for the accuracy of others who do.

Please wait. Your comment is being processed ...


Question? Ask Leo!