Engineering Expertise What Does a Computer Programmer Do By James Cortes | September 29, 2019 With tech-centric jobs in high demand, it's not uncommon for people to look toward an occupation that puts them at the center of the action. Few people are as central to the tech industry as computer programmers. The way the job is depicted in movies and on TV, you might think a computer programmer is a mad genius who just dashes things into a keyboard to produce brilliance. Not only is the lone-hacker image of the computer programmer far from the everyday reality, but there's a lot more to it than just jamming away at keys. If you're curious about becoming a computer programmer, it's a good idea to learn a bit more about the field. The Core Duties of a Computer Programmer While the production of code is a big part of programming, it's not what distinguishes the profession from others in the tech world. In fact, you can be a very good coder and not have any of the qualifications necessary to become a programmer. To understand what qualifies someone as a computer programmer, you should look at the duties they're assigned. These include applying a practical understanding of: How hardware interacts with software What methods does a project use, and why one set of solutions might be better than another How software development processes are used to bring projects to fruition Long-term development, maintenance and update issues with software Know Thy Hardware As previously mentioned, a computer programmer tends to know things a coder doesn't. If you're working on a project to create an augmented reality (AR) app that works on the newest smartphone, for example, there may be more to the job than just giving the phone a set of instructions to follow. Not only do you have to understand what the hardware is going to do when code is sent to it, but you may also have to design workarounds. In an emerging field like AR, the software libraries on the phone may not be robust enough to support a desired function out of the box. For a coder, that's the end of the road. They can't move on because there isn't a library or an API, such as ARKit for Apple's phones and ARCore for Android phones, that allows them to overcome the problem. This is where a computer programmer shines. Faced with the same problem, a computer programmer will try to figure out what information and commands transmit back and forth between the app and the phone's hardware. If at all possible, they'll attempt to deduce how a desired interaction can be achieved. Let's say the desired functionality has to do with adapting to the user and their phone moving while also in a moving vehicle. In the real world, users are going to take the AR app with them in their cars, on trains, on planes and virtually anywhere else they might go. Phones are ubiquitous, after all. Without an existing code library to lean on, a computer programmer might elect to assemble the necessary data from a combination of the phone's GPS, its accelerometer and even information about the setting that can be derived from the camera. Studying and Recommending Solutions Notably, computer programmers often have to be quick studies. They may use a wide range of tools to learn how to get software talking with hardware, such as: Available printed documentation Patent filings Component polling Dumping logs from the phone to a laptop for further study In the end, the goal is to gather all of the necessary information to figure out how a non-existent function might be created to achieve the project's goals. There are often cases where more than one solution can solve a problem. Continuing with the mobile AR app example, there might be both hardware- and software-based solutions. There may also be compelling reasons why a particular solution is preferable. A smartphone's operating system may have undocumented subsystems that allow a computer programmer to develop a software solution. It might not be the best way to go because: Running code closer to the hardware is almost always faster There may be intellectual property rights issues with accessing an undocumented API The subsystems may only be functional in specific use cases Conversely, a software solution that doesn't need to be lightning-fast might be preferable because it speeds up development and debugging time significantly. These sorts of recommendations are often presented to project managers before making major decisions. Development Processes Lone hacker isn't really a career option of any kind, and that means you will most likely be working within a team to bring a project to fruition. In the modern world, assignments aren't handed out in the hope that computer programmers will do amazing work. To keep things on schedule, companies use one of a handful of common development processes, such as Agile or Scrum. A project manager will be assigned to ensure the process is followed, and they will designate jobs. In the early stages of a process, there may be questions about how a computer programmer is going to make something work. This includes baseline questions about: What programming language should be used? Are there any known APIs or libraries that can be used to accomplish the project's goals faster? What supporting components, such as servers, databases and client-side hardware, will be required? How quickly can the code be created? What issues will likely have to be debugged? While coming up with final answers to these questions generally falls to the project manager, the computer programmers will frequently be asked for their input. A Word on Programming Languages As a computer programmer, you'll need to know which tools best fit which jobs. For example, virtually no one would build the server-side solution for a smartphone app using a difficult programming language like C++ because it would be overkill. Conversely, C++ might be the first thing a computer programmer reaches for if they're writing code for a control system for an industrial plant, because it provides significant speed and reliability improvements. Similarly, optimizing something like a graphics card may require digging into machine assembly language. There are tons of computer programming languages in use today. You're never going to know all of them, but it's good to be familiar with the big ones. Let's take a look at some of them. C, C++, C# and other C-family languages - widely used for major programming projects. The vast majoring of components in the Windows, Mac OS and Linux operating systems were programmed using some language with a C-like syntax. Java - has earned a reputation for scientific precision and cross-platform compatibility. Especially if you want to deploy software across many platforms, using Java can keep production costs and time down. HTML - the language that web pages are almost always expressed in. While it can seem like a beginning coder's language, it can be very powerful when you get under the hood. Python - a language that balances ease of learning with raw computational power. Most professional programmers can pick up Python in a weekend of hard study. It is powerful enough, however, that it has become the preferred language for many in the AI and machine learning fields. There are plenty of other languages out there. PHP is heavily used by web programmers to develop dynamic sites. COBOL is an old hold-over from the mid-20th century that still runs a lot of banking and financial systems. Many languages are industry-specific, and it's not uncommon for the nature of a project to dictate which language to use. For example, people building a web API that sends sports scores to remote users might use Node.JS because the code can function as a very lightweight server alongside other, heavier server sessions on the same machine. Development, Maintenance and Update You've been assigned a task by your project manager, and you've chosen a language. The manager will sit down with you to discuss the requirements for your software module. Working from these specifications, you'll keep iterating through the code until you have something that meets the specs. The job is far from done, however. Before any software is ever rolled out, it will have to be tested. You'll need to see how well your module plays with the core software for the project, and it's also important to assess how it might interfere with other modules. For example, a particular module might start hogging resources. In isolation, this is no big deal. If 20 other modules are begging the system for resources, it becomes a problem. A quality assurance (QA) engineer will be assigned to work with you in debugging your module. In fact, this process of QA engineers working with computer programmers will iterate from the testing process into the maintenance and update processes. As feedback comes in from real-world users, computer programmers and QA engineers will have to go back into the code and identify where problems are happening. Eventually, these concerns will update with ongoing updates. Who Succeeds as a Computer Programmer? To become a successful computer programmer, you need to be a curious person who is persistent in the face of extreme adversity. Computer programmers are people who love doing deep dives into difficult subjects. Someone developing an app for an iPhone, for example, may have to dig through hundreds of pages of documentation from Apple regarding a little-known subsystem. Generally, people who succeed as computer programmers come from backgrounds where a lot of value is placed on details, self-guided learning and problem solving. It doesn't hurt to have a love of tech, too. Many computer programmers also have strong interests in things like: Video games Board Games like Chess or Go Small engine repair Building and fixing computers Role-playing games, especially ones like Dungeons and Dragons Statistics-heavy sports, particularly baseball A lot of computer programmers even start out making code as a hobby and after comprehensive training, end up becoming professionals. A computer programmer is someone who can spend days, weeks or even months tackling a situation that requires a solution. For a computer programmer, there is deep enjoyment to be had in working through the many steps of solving a difficult problem or in creating a vast new world from scratch. If that sounds like the kind of thing you already enjoy, there's a good chance you will succeed as a computer programmer. Did learning about what a computer programmer does interest you? Cogswell College offers comprehensive Computer Science & Engineering degree programs taught by entrepreneurs who are in the thick of the industry. In this project-intensive Software Engineering concentration, you’ll not only cover the fundamental concepts of the software development process, but you’ll explore the different ways that complex software systems are changing the world. Cogswell College is uniquely poised to offer a meaningful and valuable education for 21st century students. We believe in an education that directly correlates with the work you’ll be doing after you graduate. Interested in learning more? Contact Us today.