Programmers - what on earth do they actually do!?
I am a programmer. Professionally, I've been doing it for somewhere between eight and nine years, but I started coding as a hobby long before that. Today, I find myself in an industry with a massive skills shortage (Most in-demand IT skills in South Africa). Despite this, I haven't personally encountered many people who aspire to go into a career in IT. One has to wonder why that is the case - there's no shortage of jobs (an important factor in a country with a high unemployment rate) and IT jobs often pay quite well (2016 IT salaries in South Africa – how much people really earn). This begs the question - do people (especially youngsters) have any idea what programmers actually do? This post is my attempt at explaining the life of a programmer, based on my own experiences (disclaimer: YMMV*).
Is it anything like the Matrix?
Fortunately (or perhaps unfortunately), it's nothing like the Matrix. Most programmers don't spend their days staring at ones and zeroes flashing by on a screen.
So what do they actually do?
Well, essentially, programmers use logical thinking to solve problems. Sometimes that involves writing code. Other times it may not involve writing code. Perhaps a business process need to be revisited and changed in order to make it work better.
What's this code thing that you're talking about?
In simple terms, code is instructions to a computer. Computers are dumb - they can only do exactly what you tell them to do (in other words, what you program them to do). Code can be written in variety of different programming languages - Java, C#, C++, and Scala are some of the well known ones, but there are loads of other languages out there. Many languages serve a specific purpose - SQL queries databases, HTML and CSS makes websites looks pretty, JavaScript makes websites do cool things, Java EE provides a platform for building enterprises applications, and Perl makes programmers cry (if it's badly-written, that is).
Depending on the programming language that you use, your code may have to be compiled before it can be executed - in other words, it has to translated from a programming language that a programmer can understand to machine code that a computer can understand. Programmers often use an IDE (Integrated Development Environment) to write code. IDE's are specialized programs with features that are designed to help programmers to increase productivity and simplify the development process.
Okay, that makes sense. What does code look like?
The syntax of a particular programming language defines what code written in that language looks like (like English grammar - sense not this makes). If the code doesn't follow the proper syntax (or the "rules" of the language) it won't work. For illustrative purposes, I'll include a program in pseudocode - not an actual programming language, but a language that can be used to explain the logic of a program. Actual code in a real program may look similar, depending on the language. This program will show how to calculate the price of the items in a shopping basket. While there are items left in the basket, the program will get the next item from the basket and add its price to the total prices of the items in the basket.
total price = zero
while cart has items
begin
remove next item from cart
add item price to total
end
display total price on till
I see. This is actually pretty straightforward! What else do programmers do?
Apart from writing code, programmers often spend their time in discussions about how to design the code that they write - this is where design patterns and data structures come into play, among others. Patterns allow programmers to "speak the same language" when designing software – almost like a recipe. If a chef says that they want to make a hamburger, everyone knows what recipe to use to make it, and what the parts (the ingredients) are. If the same chef had to ask for "that dish with meat in the round white thing", there would potentially be a lot of confusion in the kitchen. In this example, the hamburger recipe is a pattern. In other words, if a customer walks in and says "I am starving!" the chef can say "great, this is the kind of problem that we can solve with a hamburger".
Oftentimes, programmers also get to work with databases - systems that contain information in formats that applications can deal with. Your details on social networks, for example, are stored in a database somewhere. Programmers can write software that can use that data - perhaps for something like targeted marketing. If your data on a social network shows that you like computer gaming, you might see adverts for games popping up. Those adverts are the result of a program analyzing data about you that has been stored in a database.
Teams of programmers (those in agile environments at least) also spend time discussing requirements and making sure that they understand what they need to do (a process called grooming). In addition to writing software, agile teams will also have sessions (called retrospectives) where they review the processes that they follow and decide on how they can improve their teams.
Lastly, programmers also spend time understanding the business behind the software that they produce. A programmer working for an insurance company needs to have at least some understanding of how insurance works, just like a programmer working for a bank needs to have at least some understanding of how banking works.
Image courtesy of: https://pixabay.com/en/coding-computer-computer-user-pc-1294361/
Business is boring. What about games and apps?
Games are also written by programmers, as are the apps on your phone, the websites that you visit, and programs like Microsoft Word and Excel that you use on your computer. Programmers can specialize in many different areas, from games to mobile apps to websites to the large complex systems that the biggest companies in the world use to run their business on.
Interesting. Let's say that I want to be a programmer - will I be stuck doing that forever?
You can, if you want to. I've already mentioned that programmers can specialize in numerous areas; if you've been writing enterprise applications and you decide that you'd rather build mobile apps, nothing should prevent you from doing that. If you work your way up the ladder, you could also become a software architect (someone who designs software and decides how all the pieces can fit together), a development manager (someone who manages teams of programmers), and from there, perhaps even a CIO (a Chief Information Officer, the executive in charge of IT within an organisation).
I hope that I've shed some light on the weird, wonderful, and perhaps obscure world of programming. If you're interested in learning how to program, check out learncoding.co.za (shameless self-promotion right here). Alternatively, there are a multitude of resources available online. Feel free to leave a comment if you have anything to add, to ask, or to correct me on.
*YMMV: Your mileage may vary; not all programmers will necessary share my experiences and journey, just like I won't share their experiences or their journeys. This post is based on my own journey through my career in IT.
Well thought out and said