Start telling computers what to do, instead of the other way around.
Although I have been in the IT industry for six 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 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 it 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 — good questions that I get asked fairly regularly. I’m guessing software engineers at companies like Microsoft and Google get similar inquiries often.
They’re difficult questions to answer, though, 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, and that’s more difficult.
Become a Patron of Ask Leo! and go ad-free!
Becoming a programmer
Programing computers is all about logic. The ability to think logically, methodically, and sequentially is perhaps the most important skill. The best way to get experience, figure out if you like it, and get a feel for how hard it is for you is to start doing it: for yourself, in classes, as volunteer work — any excuse. What language you learn first is mostly irrelevant — the thinking process you develop will transfer to whatever language you learn thereafter. If you must prioritize, pick the language used by the people or companies you imagine working with and for.
Computing starts with logic
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 and 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 it to do — meaning the programmer’s instructions to the computer did not match their intent, often in some obscure detail.
If there were an innate personality trait I’d want any aspiring programmer to have, it would be the ability to think logically. By that, I mean the ability to think through and express a series of steps to produce a desired result.
I’m not sure the ability to think in a logical way can be taught — at least not completely, or to the level a successful programmer needs. Yes, there are classes, and you’ll want to take them to hone your abilities, but if those classes are a real struggle, I’d start to get concerned.
But do you enjoy it?
“How hard is it to learn programming?” is unanswerable. It varies dramatically from person to person based on the skills, talents, tastes, and desires they bring to the table.
It was easy for me. I was fortunate and “got it” in my very first programming class. Even though I’d never touched a computer before, towards the end of the class I found myself assisting others.
That was obviously a good sign, but I don’t think that kind of “lightbulb moment” is required.
Perhaps as important as your ability is your enjoyment. As you learn more and more, do you find yourself enjoying yourself? 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 — which wasn’t what you intended at all?
OK, that last one it a little facetious — but a frequent reality even for the best programmers.
My lightbulb moment was the realization that there were people who would pay me to do this programming thing — something 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 you cannot learn programming just in school. School’s great, and often a requirement, and obviously some schools are better than others.
But there 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?
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 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 — the more the better.
There’s math, and then there’s math
“How much math is used in programming and how?” is a little easier.
Remember all that logic I mentioned? That’s really just math. In fact, it’s what I’d call pure math. From the computer’s perspective, all it does is manipulate numbers. Computers are really good at manipulating numbers.
But I wouldn’t call it advanced math. Computers are stupid: all they know is zero and one, and everything else builds on that. Programming relies fundamentally 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, you’ll 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. To write software to support the movements of an avatar in a virtual gaming world, you probably need to understand the mathematics behind physics.
Programming requires a high degree of comfort with fundamental math like logic and algebra, but specific projects might also require advanced math specific to that job.
A day in the life
“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 at which you could get a job. It also depends on what the company sees in you and what they think you bring to the table.
When I started at Microsoft, it was a case of “Here are some bugs needing to be fixed. Go!” 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.)
It’s not uncommon for individuals to start in customer support or testing roles before moving on to product development. In a way, that’s unfortunate, because it gives those roles an unwarranted “second tier” status — and the skillsets are 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 in customer support is very different than designing a complex procedure to be acted on by a computer.
Personally, I think “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. I have three answers.
The one the school uses. Check the prerequisites of the classes you expect to take. Most schools and courses tend to favor one language, and you should start with it. 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 that changes over time.
The one your potential employer(s) use. This is tougher to get right, but find out what language your ideal employer is using and consider adding it to your repertoire. For example, if you’re targeting Microsoft, learn C++.
It doesn’t matter. My honest opinion on programming languages is it doesn’t matter, as long as you can program well in the language(s) you know. For example, when I was interviewing people at Microsoft, many candidates came in knowing Java, but we didn’t program in Java. No problem. If you’re good, then C++ or whatever else is just another language. The syntax of that language is just another set of details and knowledge you can pick up.
It’s all about how you think
Which brings me full circle. If a specific programming language is just a “detail” I’d expect any 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 teach you a programming language, but what’s really taught, along with the syntax and detail, is discovering, exploring, and exercising your ability to take abstract concepts and procedures and translate them methodical, logical steps for a computer to act on.
And, fundamentally, that’s all programming is.
Subscribe to Confident Computing! Less frustration and more confidence, solutions, answers, and tips in your inbox every week.
I'll see you there!
Download (right-click, Save-As) (Duration: 10:27 — 11.5MB)
31 comments on “How Hard Is It to Learn Programming?”
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.)
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!
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.
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.
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.
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.
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 :)
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!
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.
Your quote “is it something you really love to do?” is the a great advice.
Its very easy to learn Programming. I have found an excellent blog which teaches you C Programming start from the basics.
This is my first time that I came to your site and I must say that I am pleasant surprised. Great, I mean really great article Leo. I am in programming for almost 11 years and everything what you have said here is absolutely true. And Yes, logic is the most important thing here. Even if you have problems with logical thinking in beginning of programming it can be developed through bloody practice. To conclude, no broken mouses and keyboards, lack of hitting your head into the wall, throwing chairs and that kind of stuff, no real programmer. “If you can take the pain, don’t play the game.”
C# is the future honestly!
I’m one of those people who embraces MS and change, I can’t stand imperfection.
Most complaints regarding language hurdles revolve around the languages themselves. Either we ourselves are so technically inapt or there is a slight possibility that something so highly regarded and written by man is in fact not as perfect as it should be. There is some logic to that logic wouldn’t you agree?
Finally what are computers? Just ones and zeros, we seem to play favoritism on languages and their structures yet forget the most basic fundamental thing of all. All languages are imperfect until we see the next evolution in computer technology. There won’t be much in the way of difference from one language to the next, its more a question of perception and skill. Assembly is the real deal if you have the drive and the next 60 years to shave off.
For a first language I would strongly recommend Python. The language allows you to try as you go (interactive shell). There are many tutorials available online and there is a large user community available to answer questions. I have over 30 years experience with FORTRAN, C, C++, APL, PL/1, Visual Basic and Java as well as many flavours of assembler. If asked to teach a beginner’s programming class I would definitely choose Python. It is also free and supported on the three big platforms.
Thanks to Leo and to all those who commended on this topic. I’m not a programmer, I am an engineer from the hardware development side, retired now for 15 years. We developed those systems which needed to be programmed bit-wise, entering zero’s and one’s via switches, pushing buttons either to enter a command word or a data word. That way we, on one side had the means of testing our constructs, otherwise providing programming structures/ideas for programmers.
I was one of the lucky who started almost from the very beginning, learning by doing, getting the logic behind it.
As the computer performance increased a need for a new programming style became neccessary, the Assembler language was invented with which feeding the machine with progamming code became easier and with it a new kind of logic thinking.
Still the language was too machine oriented. Programmer were looking for an even easier way to built a progam. A human like language, Basic, was the next step and afterwards so many other different solutions.
Problem now-a-days is that eveybody who intends to be a programmer is sitting on top of a huge amount of knowledge accumulated in the years and actually don’t know from where to start off. We are condemmed to inherit a lot of knowledge via our school and studying years yet, we hardly being forced to learn and exercise how to think in a logical manner. Most of our logic thinking is derived from trial and error.
And so is programming.
Problem is, these new languages are still often far from being understandable, the Syntax is for a newcomer like a language from an other world. Now put that all into a logial concept and make it work. Trial and (a lot of) error.
I have an example here at home, the student comes from a rural school, studying at the University of Cape Town, only with accumulated knowledge in his brain, is forced to learn the “Python” programming language, a concept which is supposed to be an easy one to learn. Result – almost impossible – neither the lecturer nor me were even close to plant an understanding of the logical concept.
As some of you are proposing: put the guy into cold water and let him swim. He probably will loose all of its fun and throw the towel.
Since I’m from the hardware side and know the interaction of the main parts of a computer I’m of the opinion: everybody who likes to start off with programming should learn – either by himself or at a school – the basic understanding of the way a computer works, how the components are being utilized and a proper, easy to understand language, which would be “Basic”. This would be a straight forward apporach how to logically think for the purpose of programming. Once one understand how that “new world” works can dive into the realm of programming in higher languages and be probably happy for the rest of his life.
My first experience was as an amateur on a Commodore PET. I began by studying machine language. Pretty soon I had print-dumped the whole OS in assembler, and worked my way through it, and although I got stuck at a few points hardware-related, I KNEW that machine and how BASIC worked! I then did the same on a Z80 m/c, sat back and glowed with self-satisfaction. When I worked with COBOL, I felt “it’s just the same, only more lines of code”.
Then along came Windows.
Still, I feel that if you can get down to seeing the one-bit difference between JMPleft and JMPright (joking!) in terms of a bagatelle board (does anyone else remember those from the carnival?), then the magic is reduced to simple complexity – if you see what I mean!
There’s some very good advice posted. I am a maths graduate who started as a programmer, and am now a project manager. All of this has been in business (application systems), and I can say that I haven’t used any of my maths for any of it. (This may not be true for other areas of programming, like writing operating systems.)
there are some generic skills required
– logical thinking
– being able to get along with other people
– being able to organise your work.
On a technical front, I would advise covering an Object Oriented language (/ approach) at college – there are some doubts whether non OO based programmers can easily pick up OO concepts.
Knowledge / experience of an ‘agile’ approach (/ SCRUM / other buzzwords) will also help, certainly in the UK.
Having said all that, it is very true that much business programming work is now being sent to India and other lower cost countries, so programming careers in the West may not last long unless you will move into systems / business analysis, or project management.
I am one of the “dinosaurs” of computer programming (my first college level programming language was FORTRAN in 1965). During the first part of the class I was totally lost, but managed to get it right by the end of the semester. My eyes really opened wide when I took an assembly language programming course – with some machine language instructions sprinkled in – and I really began to understand programming. By learning how the computer works I began to understand the logic on which higher level programming languages were built. I would say if you don’t get it after 2-3 college level programming courses then you need to make a course correction and change majors.
Hey, I still program in BASIC on my Commodore 128! :)
School shouldn’t teach you a programming language. They should teach you concepts. In such detail that you really really get it – it’s like the concepts become part of your genes. To do that you need to practise, a lot. So, you need a programming language so they/you have to pick one (and later more as generally there is not one language that has all concepts you might encounter later). It is best to start practising using a language that helps you as much as possible to do the right thing and prevents you from doing the wrong thing as much as possible.
Something else you need to do is to read and analyse as much source code as you can get your hands on. Yes, there will be going “bad” code through your hands but that’s ok. You’ll learn to recognize it and how to do it better.
well i think programming is a course in which majority of the skills you learn are from outside the module being it in a college or a university.
It is very easy to learn the basics but very hard to learn the complexities and become productive. Just because you know computers you do not know programming.
How to learn it…jump in there is no other way!
You need to like math and have learned it as a child well as programming is based on math. Really if your math is poor choose another career your not cut out for programming! Most programmers enjoy math and physics a great deal. If your one of them you will like it as you can take your math/physics and animate it into life in a way a polynomial never can.
You can get away with dodgy scripting (ahhum PHP script kids) and it works but to do it right you need to know math as that is where data structures and algorithms originated. Those are difficult to learn without math if not impossiable. You need the math background or the books after chapter ten are unredable.
There is also MANY specialities in programming and it is NOT one subject or ONE LANGUAGE this makes it even harder. Some people may work on web pages and others desktops and others again server admin to name only a few…so many areas!!!
It is a licence to print money (either by selling or making your work more productive) even if it takes 5 years to code it.
The trick BTW is to learn the basics then become familiar with libraries and a framework for your language (you will NEVER learn all languages) then start looking at real world examples in open source software. Don’t be scared just do it.
The biggest problem with teaching programming to people is they fear it like many fear math. I suggest those people choose another path in life.
Programming may sound cool but it is very slow and takes a lot of design before you even work on code…it is not cool it is a grind at best and at worst stops moving for weeks while problems are solved. It is not like matrix it is sitting in debuggers for weeks on end lol.
When I went on an interview for my first programming job right out of school, the interviewer asked me what I could program. In my cocky overconfidence, I answered. Anything, as long as I get the specs. The interviewer told me, that anybody out of school should be able to do that but what you need to learn is how to give the users what they need even if they don’t know exactly what they want.
That stuck with me for years, and through experience, I learned that when it comes to programming, at least creating programs with a user interface, knowing the needs of the business you are working with or knowing how the user will interact with your programs can be just as, or possibly even more important than knowing how to code.
I found this article to be especially interesting. My background is in electrical engineering and was in using computers – not programming them. That started with the Apple II+, which I still have as a keepsake. It worked when I packed it away. Over the years, I was exposed to programming, but only enough to be familiar with what others were doing. I think I would have really enjoyed – as you have – actually doing programming. I certainly enjoyed learning of your experience.
What can you expect as an entry-level project? Probably, just about anything. My first programming project was to program an end of year physical inventory count in two days. That was all in the Basic language. I hit the ground with my feet running.
My next project was to extract specific data from the tape used to print a report by counting the spaces to figure out which data the numbers represented. After that, it all settled down to system maintenance, fixing bugs, pulling reports, automating processes, etc. There’s so much variety in programming work, there’s no way of knowing what you’ll be doing.
The math I needed was financial math and statistics and binary, octal (base 8), and mostly hexadecimal (base 16) arithmetic.
As for languages, I found that if you know one language, using a manual, you can learn another language on the fly. On one freelance job, they wanted a system in the Clipper language. I stayed up all night reading the manual and started in programming the same day.
Now retired, I was a programmer for 25 years as my second career, having been in a Medical field back in UK for 19 years. I started programming with a 1 year class learning Assembler, then Cobol & then took an entry-level job in an Insurance company. It was a totally new career field & at the time the only programming being used on PC’s was Basic with Dos & Lotus 123 being just about all that was loaded….they were used mainly just for accounting input. My starter job was coding in Cobol & Assembler to create & maintain multitudes of code on the mainframe. Some years later as things changed I took up VB & java on the PC & wrote several comprehensive systems….all the greatest fun. My point is that once introduced to this medium my interest spiked & I could not be held back….and as I see it you need a particular type of brain to actually produce good code – that of a brain that LOVES to be totally immersed in something without interruption, meals or family, and can work on something UNTIL it works the way it is intended, occasionally conquering deep humiliation when you got it wrong !!! While deep math expertise might help in some situations, I do not think it is necessary – DEVOTION is what you need & a SINGLE-MINDED focus – if you have those you will succeed – you cannot code in a half-hearted fashion & those who cheat get quickly outed & thrown out !
Can I add my ten cents?
I worked on mainframe computers for a large university for 29 years.
Patience, attention to detail, working mostly alone, can you add
and subtract ? not averse to documentation, look at your app from the user’s point of view, patience, accept that your job will Not run successfully the first time and maybe not the 30th, never give up but be open to other approaches if your head banging dents the wall, maintain at least civil relations with your fellow programmers- you will need their help, be more than generous in assisting others,
did I mention patience?? You may be called at 2am in assist if your, and maybe not your own programs aborts. Pay endless attention to field editing: a+5 = abort!
An excellent article (still!). Leo has hit the nail on the head. Most people can program so-so. The great programmers are the logical ones (and the ones I want writing the code for airplanes / nuclear facilities / space ships / etc).
The other overlooked skill is producing good documentation (or even code commenting!), and I have to say that some (but not all) of the best programmers I have worked with hate this activity. But it’s a vital part of what can make the code easily maintainable.
There is more to being a programmer than just learning a language or two and being logical. Leo touched on this by asking if you enjoy it. What does that entail? A certain type of a personality: ability to pay close attention to detail, not getting frustrated when things go wrong, extreme perseverance and tenancy to keep on doing something over and over again, ability to change context and direction often, and a fairly good memory.
Beyond the requisite personality, there have been a few trends in recent years (as compared to many years ago) that can influence a career decision. Many years ago most “programmers” were engineers by schooling. They had most of the personal characteristics mentioned above and they programmed within the field of their engineering practice. Today programmers are commodity workers and companies treat them as such. That is, replaceable widgets that can be swapped in and out as needed. There are now 2-year schools that specialize in churning out such programmers. Some programming jobs, such as in the game industry, are equivalent to working in coal mines in the 1800s, stressful and with a lot of turnover. An unfortunate by-product of this (relatively) new programming environment is cut-throat competition and bad working attitudes. I’ve mostly observed this in young people coming into the field, displaying a disturbing level of arrogance.
Once more thing about a programming job that is important to know: there is a world of difference between working in the web development arena as compared to working with high-level languages (C++, C#, etc.). You need to experience both to know which you’ll like. In the world of high-level languages there is another impediment beyond being logical and comfortable with math: learning the atrocious intricacies of proprietary integrated design environments and customized code constructs.
Leo had another good article on programming a few years ago.
I also had some lengthy comments in that article.
You put a huge smile on my face Leo. My first programming course was Fortran back around 1977. My final grade was an A+. The next language I took was BASIC (I took them in reverse order but what did I know). The Instructor in the BASIC course told the class, “If you ace the BASIC course, you’ll probably earn a ‘B’ in FORTRAN”. After class I told the Instructor I already took FORTRAN and earned an A+. She said “Why are you taking BASIC now?” I don’t know. Our first BASIC assignment was to figure Celcius from a Fahrenheit value. I did more than that; I had the program draw Celcius and Fahrenheit thermometers with tick marks to show the equivalent C and F values. I later went on to program IBM-026 and 029 punch cards, RPGII and COBOL (The paper mills in my area all used RPGII). I even did graphics with the TRS-80 when it could not do graphics. Now I’m a Computer System Analyst for a State Government.
Why do I love Computer programming? It is because I do NOT want a computer to take over what I tell it to do. I want to BEAT the Computer and have IT do exactly what I WANT it to do. Make sure there is a lot of error checking, such as checking values entered for the weight of something. Something should not weigh minus 3 lbs. If there are further calculations, you might not know there was an initial error.
I learned Fortran in college and then when I later studied computer science we started with BASIC, then not to Fortran, Assembler, and COBOL. I started programming on a Wang MVP in BASIC and then on to COBOL and then back to BASIC on a Wang MVP again. Then in the 80s, I was well versed in BASIC so it was easy to move all my programs to PCs. So, there was good reason to learn BASIC even if it didn’t seem like a real language at the time.