Developing software is a pretty good job. You typically get to work in an air conditioned office, sometimes even with unlimited free coffee. The pay is usually pretty good, too. And on top of that, you get to work with technology – sometimes the bleeding edge.
But how do you get a decent programming job? How can you turn this interest and close relationship you have with your computer into a income-generating venture?
I’m about to introduce you to programming.
This guide is not for experienced developers looking to learn how to integrate PHP and Oracle. It’s not for the fresh computer science graduate looking to pad their resume with skills. This is for people who don’t yet know why a variable might be important to a computer program.
It’s for people who don’t know much of anything about writing software, but want to learn.
But I Can’t Math…
If you can’t perform advanced mathematical computations, don’t worry about it. Neither can I, and I’ve been writing software since the mid 1990s. What I’ve learned is that reasoning and logic are far more important than numbers.
Over the years I’ve discovered that I just don’t think in numbers. I can memorize numbers, like my wife’s phone number, but I don’t think in them. I think in words and pictures and information packets. And I can shuffle them around in my brain. That’s a handy skill to have for a programmer.
If you have trouble with math, don’t get scared off. Answer these questions honestly to determine if you have the basic capacity to think analytically.
- How are your general problem solving abilities?
- Have you ever figured anything out on your own?
- Can you substitute things temporarily in your brain? Ex. The lamp represents a dog for 1 minute, or X is your checking account balance.
- Can you play a musical instrument?
- Do you understand that what you’re seeing on your computer screen isn’t magic?
See? If algebra doesn’t work too well in your brain, you can probably still learn how to program. Even if you don’t become some software development rock star, you can definitely learn the basics.
What the Crap is an Algorithm?
Algo-what? I remember when I first heard that word. Believe it or not, I had never been exposed to that word all through high school. When I was in my intro to computer science class, the professor asked (paraphrasing), “What’s an algorithm?”
I thought to myself, “Huh?”
Simply put, an algorithm is set of steps to do something. But don’t just take my word for it. Here are some official definitions:
Wikipedia: “In mathematics and computer science, an algorithm is a step-by-step procedure for calculations.”
Dictionary.com: “A set of rules for solving a problem in a finite amount of steps, as for finding the greatest common divisor.”
Odd that they put an example directly into the definition, but whatever. The key point is that an algorithm is a set of steps. Why is that important? Because every bit of software you write will contain steps to accomplish some kind objective.
I know what you’re thinking (well, maybe)… “I don’t see the context here.”
You use algorithms all the time, even if you don’t know it. Here’s a little mental exercise for you. Write down, in as much detail as you can, your responses to the following on a piece of paper.
- Steps to brush your teeth
- How to put on a pair of jeans
- How to put laces in a pair of shoes
- How to have sex
The last one should be the most fun. What’s important is that you note every single step, no matter how insignificant it seems. For example, you can’t just say “put toothbrush in mouth and brush.” Would you actually do that? Would that do your teeth any good?
Here’s a hint. You can start with: Step up to the bathroom sink. Then go step by step until you leave the bathroom with sparkly teeth and, hopefully, fresh breath.
When you start to write software, you’ll figure out that while computers can do cool things, they’re actually pretty dumb. You have to tell them how to do everything, step by step, leaving no details out.
If you tell your computer to “Make a sweet game,” it will do nothing. It won’t even laugh at you for making such a silly request. At the most, Google Now or Siri will do a web search for you and point you to the Internet.
Think step-by-step, and detailed specificity. I know that sounds redundant, but I want to push into your head the importance of not leaving steps out because of course you would do them. Computers aren’t people…yet. They won’t perform a step you leave out of your isntructions.
Algorithms help you get around this current limitation.
Variables Aren’t Just for Algebra
Variables are an important part of any software solution, so you need to have a basic understanding of what they are and how you can use them.
According to dictionary.com, a variable is “a quantity or function that may assume any given value or set of values.”
In programming, a variable is a construct used to hold a value. A string variable holds text (a string of characters), an integer variable holds a whole number, an array variable holds a group of data, and so on…you get the idea. Some programming languages make you define the variable type – integer, character, array, floating point number, etc. – while others let you put just about anything in a catch-all type of variable. But that’s all beyond the scope of this guide.
What you need to know is that a variable stores data that your software will use as it runs. Remember algebra class? 12 + y = 17, solve for y. That y represents a number, and you have to use math to determine what that number is. Well, you probably don’t have to use any actual math to solve that one, but you get the idea.
You’ve filled out a form online, right? You’ve put your name somewhere, logged in to a social network or web mail system, or something. Your name is assigned to a variable once you click the submit or login button (or whatever). If I enter my name into a form and click a button, the system isn’t going to just fling “Caleb” around in the ether. The data I entered into the text box is assigned to a variable so the software knows what to do with it. For example, think of it like this:
UserFirstName = [text box input]
…and that becomes…
UserFirstName = “Caleb”
Then the software uses the variable UserFirstName whenever it needs to reference the input data. When another user comes along, or if I suddenly decide I want my name to be Thor, the system won’t get confused. The variable UserFirstName will contain the new data…so “Thor” instead of “Caleb”.
The key thing to remember is that a variable references and represents a piece of data.
What’s a Compiler??
A compiler is a computer program that translates your programming code into a program your computer can execute (run). Here’s the definition from Wikipedia: “A compiler is a computer program (or set of programs) that transforms source code written in a programming language (the source language) into another computer language.” This other computer language is what your system can execute.
For example, an executable program is something you run, like Google Chrome, iTunes, Microsoft Word, etc.
So what’s source code? That’s the language you use to encode your algorithm. Remember algorithms (scroll up)? When you’ve got your idea and a way to program it, you will write code in a specific programming language. Don’t worry about languages right now. Just know that they’re there, and that’s what you use for writing software.
Once you have your source code written and without errors, you can compile it into something you can run and use.
Typically, a compiler is integrated into your development environment software. If you write C# (pronounced C Sharp) code, you’re probably going to be using Microsoft Visual Studio or one of the Visual Studio family of products. You’ll write your code in a window and then essentially click the compile button to create the program based on your code.
Here’s the kicker… Not every programming language uses a compiler. Many use an interpreter. These languages are basically run and compiled on the fly. But you don’t need to worry about those details right now.
What I wanted to communicate to you in this section is the concept of a compiler. Think of it like a translator. You write one thing, and the compiler translates it to another language that your computer can understand and use.
Sequence, Choice, and Repetition
All programming can be broken down to these basic components – sequence, choice, and repetition. I always like to throw another in the mix, objects, but that’s beyond the scope of this guide. I’ll talk about objects later, because they’re advanced, and aren’t used everywhere in software development.
Anyway, I digress. Sequence, choice, and repetition are the three basic concepts that make up software processing. You may use all three in your code, or you might only use one or two. But these three are the base elements.
Sequence is when you do something step by step in order. If you print out a line to the screen, and then print out another line, and then a third, and then exit, you’ve written a pure sequence program. But that’s a pretty boring piece of software, in my opinion.
What would make it more interesting is if you throw some choice into the mix. Start the program off with two numbers and multiply them together. That’s a sequence operation, because your assigning two numbers to two variables (remember variables, right?), and then you are performing a basic arithmetic operation on the variables.
Then you can throw a choice into it. We won’t get into the details right now, but what you can do is check the result of your multiplication and see if it’s an odd or even number. Then you’ll print out to the screen either “Odd” or “Even.”
You could take this program a little further by adding a loop to it. This is where repetition comes into play. Sometimes, you need to do the same basic operation more than once. It’s possible to write 10 sequence-style blocks of code to accomplish a task 10 times, but that’s way too much work.
Programming is about easing the workload, not adding to it.
So what we’re going to do is write the code we need to run once, but put it in a looping structure so it runs as many times as we want or need it to. For this simple example, we will want it to run 10 times.
A loop is a programmatic structure that allows you to repeat a block of code.
Say you set another variable to count the number of times you’ve run through the loop. Start with 0, run the loop code, then increase your counter variable by 1 from within the loop structure. Once your loop counter hits 10, you exit the loop and continue on with the next bit of code in the sequence.
For this example, what you do in the loop isn’t really important. The key is that you wrote one bit of code and ran it 10 times. You could do anything you want in this loop – print out the counter variable contents, or multiply the original multiplication result by 52, or anything else you can imagine.
Sequence, choice, and repetition are the key elements of software. You do things in a step by step fashion (sequence), you make a decision and run one bit of code instead of another (choice), and you can do things multiple times with one block of programming code (repetition).
Get these core concepts down, and you’ll be able to write software in any number of languages.
Mac, PC, or Linux?
Do you need a particular type of computer to write software? Not really. Software runs all these different types of computers that exist in the world today, and each system needs software written for it.
Should you work on a Mac, a Windows PC, or a Linux machine? It only matters if you want to write software for one of those platforms specifically. If you want to write Windows software with C# and the Visual Studio development environment, you’ll need a Windows PC. If you want to write Linux software for the Ubuntu Software Center, you should install the Ubuntu operating system on a computer. If you want to write apps for iOS or the Mac App Store, use a Mac system.
But you don’t need to worry about any of that to get started. Regardless of what your software development end-goal is, you can learn to program anywhere. Basic programming principles are the same across platforms, and you can learn them on any platform.
There are also languages which are platform-independent. Java is available on all the major computing platforms. PHP is a web-centric programming language that you can use on any modern computing system.
If you want to learn to how to program iOS apps, you don’t have to drop $2300 on a new Macbook Pro today. If you’ve got a cheap Windows laptop, you can start learning on that machine and invest in a Mac when you have some basic skills down and the cash to spend. And you should realize that you’ll have an easier time learning how to program iOS software if you already know how to write software in general. Once you get the basics down, learning a new language and system is easier.
The simple answer to platform is this: What kind of software do you want to develop? If you are a pure beginner (and I suspect you are if you’ve read this far), it doesn’t matter where you start. It only matters that you start learning now, with the tools you’ve got.
Web, Mobile, and Big Business
Where do you want your skills to take you? Are you looking to work in web technologies, the ever-advancing realm of mobile computing, or do you want to get an 8 – 5 job in the big business world?
There is no right answer to this, and you might want to try all of them. I have. What’s important is what makes you happy, and that you find your work interesting. We’ll talk about this in more detail later.
Right now, just think about these three areas – web, mobile, corporate – and how you might fit into them. Where do you want your developing programming skills to take you? What do you hope to accomplish in life, and how can writing software help you get there?
Learn it All, or Specialize?
It’s easy to get lost in the world of software development. If you take a look at the various job boards online, you’ll see a wide variety of needs. There may be skills and programming language specialties you’ve never heard of before. Some jobs might have an exhaustive list of programming languages you’ll need to master before you can even think about applying.
How do you navigate all these needs with what you should learn? Should you spend time learning all the programming languages and environments you can, or should you focus your energies and specialize in one area?
I don’t think there’s a right answer for this. You’ll need to take it on a case by case basis.
But what I recommend is a mix of both. Have a wide understanding of all the modern technologies, but then specialize in something specific.
Become an expert in Objective-C and the iOS SDK if you want to write iOS software. Learn everything you can about C# and Windows programming if you want to write software for the Windows Store. Know PHP like the back of your hand if you want to work in open source web technologies.
Based on my own experience (creeping up on 20 years at the time of this writing), I say it pays to specialize. The key, I think, is to specialize while knowing it all. I know it sounds complex and like a lot of work, but it’s not so bad. Once you get a solid foundation, it’s really easy to grasp new tech and languages.
You should be able to keep your head locked into new technologies while continuing to specialize and make yourself into a sought-after expert. Think of it like being an Oncologist (a doctor who specializes in cancer research and treatment). You would have all your basic medical training and knowledge, and be a doctor. You would be able to answer all sorts of doctory questions. But where your skills would really shine is within your specialty – Oncology.
Developing software works the same way. Have a solid understanding of everything, and then strive to know everything about your specialty.
This will make you invaluable to an employer or your own business. What’s that old saying… an expert will never go hungry? It’s true. I can’t find the quote, so let’s treat that as an unsourced anonymous paraphrase. Become an expert, and you’ll be able to find work.
Ask Yourself if You’ll Enjoy it
This one is the most important part of pursuing programming professionally. This is what you’ll face…what you have to decide. “Do I enjoy doing this for eight hours a day, five days per week?”
Before you go on this adventure, before you become a programmer, there’s something you should know. This work is hard. It’s frustrating. And it’s a long path.
You have to ask yourself if you actually enjoy it.
If you’re seeing dollar signs in your head, you should know there are easier jobs out there. You can make the same kind of money in sales, for example. It might take you a few years to get there, but you can do it. For some, talking to people and getting them to part with cash is easier than creating computer systems that function according to a defined set of business requirements.
Be prepared to be confused in the weeks ahead. Be prepared for broken programs that you don’t know how to fix. Be prepared to spend hours, days, and weeks investigating a problem.
Be prepared to sit in front of a computer and type letters, numbers, symbols, tabs, and so on all day every day.
Ask yourself if you enjoy the act of engineering software, or if you just like the idea of computers. Using computers and building computers are two different things.
The last thing you want to do is create a career for yourself that you just don’t like. It’s normal to feel burnout – I’ve felt it in a very pronounced manner twice before. The solution for me was to change jobs. I got a new physical environment, new tasks, new people, and in both cases a new development environment. The change was refreshing enough to fight back the frustrations that come with writing software.
Only you can decide if this is for you, but I wanted to make you aware of one simple reality. It’s not for everyone. Is it for you?
Over the years, I’ve worked for companies big and small, I’ve worked on my own projects for fun, and worked as an entrepreneur in both the web development and mobile application spaces.
There’s a lot of variety out there, and a lot you can do with a well-honed set of software development skills.
I know that the previous section might scare you. Don’t let it. If you’re really interested in pursuing these skills, do it. You can have a bright future in a technology-centric career.
[Note: This was originally published a few years ago, but I changed web platforms and this didn’t get imported. So I’ve republished it here for you now.]