I first became interested in computers when my Dad took home one of the first “portable” computer from work. It was the size of a suitcase, weighed about 30 pounds, had a fold-down keyboard, and a small green screen. We got to play Flight Simulator on it when Dad was done with work. After a while we bought an early 286 computer. It could actually have more than one color on the screen, and it had a hard drive with enough memory to hold about 3 pictures from a modern digital camera. We played games on this computer as well, but after a while I decided to try to make my own game. I got a book from the library and started learning how to program in the “Basic” language. At this time I really only considered computers a toy.
When I first went to college I was interested in biology and was thinking that would be my major. I enjoyed computers but never really considered making that my job. That changed when I took a programming general education course in college. That is when I realized that I could get paid for playing with computers.
I have worked in two different types of programming jobs. For my first job out of college I went to work for a large manufacturing company. There we would work on programs that the company used internally to process orders, manage inventory, and get orders out to the factory floor. My next job was with a small company where we sell the software we make to external customers. There are some differences between the two environments, but some similarities as well.
As a programmer you are creating code to solve a problem. As support staff in a large company, the problem is usually handed to you. “We need to be able to have our customers enter orders from the Internet;” “We need to be able to get these orders out to the shop floor.” When you are selling your software to someone else, you have to work harder to understand what the users want. You will also have many different types of users to try to please. In other situations it may be a problem of your own that you face. Maybe you come across a group of people who are struggling with an issue; maybe you have a great idea for a game.
Once you have a problem to solve, the first step is to understand it and break it down into manageable chunks. A key part of this is to understand what can go wrong and what should happen if and when things do go wrong. Most users will focus on what they want when things work well, but a programmer needs to write code that will handle things falling apart.
Once the problem is understood you then start designing. This can be a fun and creative process. There are usually many ways to solve a problem, and there are always tradeoffs between making something simple or with more features, between quick to write and quick to run, between easy to make and easy to use. Usually this involves working with other systems as well. You may also be interacting with hardware, a printer, perhaps a robot on the factory floor, or the sensors in a smartphone.
Once you have a design the actual coding starts. This is where you actually see something come together, and it can be very rewarding to see the program come to life before your eyes. It is very rare that you will write code completely from scratch; often you will use other peoples’ code so you don’t have to reinvent the wheel. Some examples are code that displays pictures on the screen or that can sort data quickly. The coding stage is where you start to run into many of the tradeoffs mentioned earlier.
Once the code gets to a functional point, testing starts. All software has bugs; it is impossible to write any program of significant size without bugs, so testing may take longer than you would first expect. Ideally the end users of the program will help with the testing and be able to give you feedback on if it does what they want it to do.
To help explain these steps I have broken them out. In reality, you rarely will only do one at a time. They usually merge into each other. In order to design you often have to try out some code to see if your idea will work. Often testing will bring out new requirements from the users.
Different vocations will fulfill the cultural mandate differently. One way in which programmers fulfill the cultural mandate is by writing programs that make the wisdom of experts available to everyone. For example, a programmer can work with a financial expert to understand the complexities of a mortgage calculation. The programmer can then create a simple program that allows everyone to figure out their mortgage payment without needing to know all the math behind it.
The digital revolution, the rise of computers and electronic devices, was driven by many factors, but all of these digital devices run programs. People need to program these devices for them to function. These days, almost everything that uses electricity will have some code in it someplace.
Programmers can also make systems that are able to process a large amount of data quickly. Once example of this is Google, but the Beacon Lights website is another example. You can go to the Beacon Lights website and search through every single article in less than a second. Quick access to knowledge is enabling our society to progress faster than ever, for the better and for the worse.
Another way in which programmers subdue the creation is by working with computers and sensors to make systems that can act faster than we ever could. An example is an anti-lock brake system. The programmer writes a program that watches the sensors in the wheels and can detect when a wheel is skidding. The program will then reduce the pressure to the brake of the skidding wheel. This all happens before we even realize the wheel is skidding.
Usually programming is a typical office job, and you likely will not have issues with unions. In my experience working at a large company there was some pressure to work on Sundays. You usually need to wait until people are done using the software before you can make a change, and in a worldwide company with multiple shifts that ends up being on the weekends.
I would encourage most people to take at least one programming course. The ability to write basic computer programs can be useful in many different fields. The office worker will find it useful to be able to create a simple database and reports, or to automate simple tasks. A scientist will find it useful to help analyze data and to automate sensor readings. It is also helpful to have an idea how computers work in this digital age.
It is possible to learn programming without taking college classes, but for someone considering a full-time career in programming I would recommend college. The college classes will give you a good foundation in the basics and in the theories that are not covered in the “For Dummies” types of books. Also, most companies will expect a college degree. If this is something you are interested in, it would not hurt to grab a book and start now. I would recommend something from the “Head First” series.
Once you have a degree, however, you will never quit learning. Programming is a profession in which you will always have to be learning. New languages, new techniques, and new computer systems are always coming out. In the near future, as smartphones become cheaper and more powerful, there are going to be a lot of new exciting opportunities. Computers and computer programs are going to be used in ways never dreamed of before. The world is changing very fast, and programmers are at the center of the change.