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.