How to Program – An Absolute Beginner’s Guide to the Software Development Trade

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.]

Hiking Pinnacle Mountain at Sunset – Little Rock, AR – Jan 30 2016

It was a nice day, so the family decided to go on a hike. This is after I got up, went to the gym, and did deadlifts and stairmaster, of course…

Oh man, it was rough. For those of you unfamiliar, there are two trails — an easy winding step-like trail, and a harder bent-over more-of-a-climb-sort-of trail. We went up the hard side.

CalebFit – Getting back my fitness and health

I have come to the point in my life where I ask myself where I want to go from here. Do I want to maintain the status quo and let life and work take me where it wants, do I slide backwards into steady march toward the end, or do I put my hands back on the steering wheel and drive my life straight into awesome?

Hmmm…tough question, right? Life is hard, busy, frustrating, and typically unhealthy. And that’s what has led me to this question, which I guess is turning into a quest. I want to drive my life where I want it to go, and reclaim the health of my youth.

I don’t mean that in a mid-life crisis way yet — I’m not even 40 — but more keeping with the idea of self-improvement and leading an awesome life. So with a mid-life crisis at least a few years away, what’s the problem?

My job is a bit…off. It’s a near endless source of stress and frustration. As a result, old mental and emotional habits have come back to the forefront of my mind — anxiety, depression, and a constant level of stress flowing through my body at all times. My blood pressure has been floating right up to Stage II Hypertension for the last few months. And due to the stress of work and life, anxiety issues are creeping back into my life. My days involve a floating mass of dread in my head and chest, worrying about dying, feeling anxiety about every little thing, and tell-tale signs of depression infiltrating my psyche.

It’s really quite wonderful. (that was sarcasm)

Have I mentioned yet that I also got fat over the last 15 years? I’m not morbidly obese or even large enough to be called a fat guy, but I’m fat for me. I’m fat for my frame and how I carry my weight. Looking at me, you can see where the lean should be, under all that excess stored energy.

Here I am, over-fat, in terrible cardiovascular shape with consistently high blood pressure, excessive stress, and so much anxiety I have to be medicated. As a side note, when I went to the doctor, he suggested that the high blood pressure could be contributing to the anxiety. But I wonder if it’s the other way around.

The doctor put me on blood pressure and anxiety medication, and wanted me to track my blood pressure for two weeks and report my numbers. I had already been tracking it for a few weeks because data is power. Now I’m just tracking it on a consistent schedule. I’ve noticed that while the blood pressure medicine lowers my numbers, it looks like the anxiety meds do, too.

And that brings us back to the post title – CalebFit. I’ve started this project to document either my success or failure. Blogging here will also serve as another avenue of publicly failing or succeeding. I recorded and posted this first episode before going to the doctor, so after reading this, you’ve got more information than what is presented in the video.

If you find this sort of thing interesting, subscribe to the channel. I don’t have a posting schedule yet, but I’m shooting for one video a week. I might increase the production schedule once I get into a rhythm, but I’m not quite there yet.

My end goal with this project is to both feel healthy and be healthy according to medical data (blood pressure, resting heart rate, cholesterol, blood sugar, all that important stuff). Looking good on the beach will also be a nice side effect, but isn’t the main goal. I want to be and feel awesome.

Netgear A6210 AC1200 Wifi USB3 Adapter Unboxing

So I needed to do something about the cord running across my floor from the one dsl port in my house (where the router is located) to my bedroom and computer. I was a little nervous about going wireless, because of gaming, youtube uploads, lag, etc.

As it turns out, it’s totally fine. I can upload videos, and my super busy Team Fortress 2 combat tests went just fine. No lag whatsoever. You can watch the super amazing unboxing right here! (so amazing)

Corsair K70 RGB Unboxing and Plugging in to the Inferior USB 2 Ports on my Computer!

The feel on my fingers…so amazing.

I’ve wanted a mechanical keyboard for a while. Well, another one. Had I known how awesome they would be 25-30 years later, I would have kept the IBM Model M clone keyboard we had as a kid. Oh well.

So now I am the proud owner of a magnificent Corsair K70 RGB keyboard with Cherry MX Brown switches. I wanted the tactile feedback on my fingertips, but without the clicky sound of the blues. I typically slam keys down as I type (and always have), so there’s plenty of sound from each key bottoming out at 4mm as I strike.

The end result is that now I want to type more. It just feels and sounds so great.

Initially, and in this video, I plugged the two cords into USB 2 ports, because my few USB 3.0 ports are taken up by external drives. It’s an older motherboard, and only came with two 3.0 ports. Today, I swapped an external drive for this keyboard so I could experience it to the full extent of its awesomeness. The control software immediately recognized it and informed me of a firmware update while swirling a rainbow of RGB goodness.

Wonderful.

Grab one if you’re in the market. It’s nice.

I Started Bodybuilding Again

I first published this in early September, 2014.  But then I changed web platforms, didn’t import it, changed back, and am just now getting around to putting it back up. So with that context, here you go:

Twenty years is a lot of lost time. It’s a lot of time to make mistakes, cultivate bad habits, and grow soft in both mind and body. When I was 17, I competed as a teen bodybuilder in Southern California. Then I stopped.

I went to college, got a degree in an area I thought would be lucrative (it kind of is), and stopped lifting seriously. Actually, I stopped before that. I didn’t place high enough in my second competition to earn any kind of trophy, so I think that was the point I let my whiny brat come out and quit the sport. From that point on, I only lifted recreationally.

bb_com_before_pic_20140708The last ten years, however, I’ve barely lifted at all. Just take a look at the pic my wife took on July 8 2014. I got sloppy, fat, and developed health problems. My blood pressure went up, my triglycerides were so high that my health care provider wanted to test me for diabetes at one point, and I grew more depressed as my body fell deeper out of balance.

Once I saw the pictures of me from our latest Florida beach vacation (I really love the Gulf coast), I decided it was time to get back into the gym. My mind was filled with ideas of what could have been, but I wasn’t really in the mood to ruminate. I went to my budget.

With enough money for a family membership to one of the local gyms and the will to grow giant, rock-hard muscles, I was ready to go. And go I did. My body remembered what it knew years ago. It remembered what it loved. After just a couple of weeks, I was hooked again.

While I wouldn’t be going blindly by any stretch — due to working as a professional fitness trainer before and during college — I didn’t want to just let the iron take me where it wanted. I would be directing this dance with iron and fire (the lactic acid burn), and I would determine how far I would go. I joined BodySpace on bodybuilding.com and started filling my mind with fitness. I caught up on trends in nutrition, supplements, and exercise, and I looked for the latest science.

At 37 years old, with a slightly weathered face and gray hairs abound, I picked a program and dedicated myself to the schedule and the work. I don’t yet know how far I’ll be able to go with my fitness, but I do know one thing. I’m going to be the best version of me I can create. I’m going to push myself hard in the gym, and I’m going to take my resting times seriously.

So how fast can I pack on twenty years of muscle? I guess I’ll have to find out.

In Which I Eat a Can of Sardines on Camera

Sardines are like one of the healthiest foods ever. Don’t believe me? Check this out as just one of many examples. Now, I know what you’re thinking. “WTF kind of website is that, and who the hell is that guy?”

You’re right to be skeptical. That was merely one of the first links on the Google search. Here is more data from the USDA. Still skeptical? Good, you should always question your sources. Google it yourself.

Now watch me eat some!

Oh, man…so good. If you don’t currently eat Sardines, eat some on a regular basis.