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.
Comments on this entry are closed.
If you have a question, start by using the search box up at the top of the page - there's a very good chance that your question has already been answered on Ask Leo!.
If you don't find your answer, head out to http://askleo.com/ask to ask your question.