Helping people with computers... one answer at a time.
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.
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?
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?
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. 
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.
•
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.
Article C3189 - October 22, 2007
Hey, I still program in BASIC on my Commodore 128! :)
Posted by: Glenn P. at November 2, 2010 2:32 AMSchool 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.
Posted by: Rudi at November 10, 2010 2:04 AMSomething 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.
Posted by: fred jones at October 20, 2011 4:47 AMIt 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.
Posted by: Michael at November 19, 2011 11:39 AMWhen 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 do that but what you need to learn is how to give the users what they need even if they doesn't know exactly what they want.
Posted by: Mark J at November 19, 2011 2:00 PMThat 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.