There was a stereotype that a programmer is a weirdo that is sitting all day in the basement with his computer.
It was true a long time ago. Programmers are not like that nowadays. At least not all.
If you are a programmer
There is a lack of good quality programmers. If you are a good programmer, you can choose who you want to work for. For example Google, Facebook or Apple. If you are good enough, you will probably get a job. And if not, you can try to get a job in any other IT company because almost every IT company is continuously looking for programmers.
If you are a skilled programmer and you have online portfolio, you will get new well paid job offer each week. You can choose where you want to work. You can get any programming job you want if you are good enough.
The advantages of programming
There are many benefits for programmers.
Many programmers do not have to go to work. They can work from home or from any place in the world. This is quite a big advantage for many people.
Programming jobs belong to the best paid jobs in the world. As a programmer you can earn per hour more than regular people earn in regular jobs in factories per day. That’s crazy.
Being a programmer sounds like a dream job, but it’s not that bright.
The dark side of programming
Programming can be fun and it can also be a pain in the ass. It depends…
Learn to code is not a problem at all. Everyone can learn to code. As Martin Fowler says:
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand”
So programming is an art. Programmers are artists who write nice readable code. The problem is that any fool can write code that a computer can understand and call himself a “programmer”. There is a lot of unexperienced programmers that write ugly code. It takes a few years to learn to write nicer code that is readable also for humans. The main challenge of programming is not to write functional code, but to write code that other programmers can read and understand quickly. The minor challenge is to write functional code, to make a computer do what a programmer wants to do.
It’s not a problem to write code. The main challenge is to maintain code. There are many challenges for programmers.
Features like registration, login, uploading files, processing forms and others need to be programmed. There are usually hundreds or even thousands of ways how to program a feature. The more complex feature the more ways exists. Each programmer would program the same feature in a different way. The same functionality, but the different code. It’s like you would tell people to draw a person. 10 persons would draw 10 different persons.
It gets complicated if the feature is complicated. There are many ways how to approach a single algorithm. One application usually contains thousands of lines of code. If you are a programmer and you start working for a company, you will usually work on a project that has thousands lines of code. You will probably be confused how the code works. Especially if the feature is complicated. You will have to study that code for a few days to understand it so you can make changes to it and extend the feature.
Complicated features contain many algorithms that needs to be written properly. If there is just one mistake, the program might not work.
With programmed features there comes bugs. If a feature does not work as expected it is called a bug. The more features, the more bugs exist. The more complicated features, the more complicated code and the more tricky bugs.
Fortunately, a programmer can write tests for his code to test it and see if it works as expected. Unfortunately, approximately 80% of programmers do not write tests. Some of them would like to write tests but they don’t know how to do it or they are busy with programming features so there is no time for writing tests. Many of them think that writing tests is a waste of time. In fact, waste of time is to write code that is not covered by tests. There is a much higher chance to cause a bug in code without tests than in code with tests. There is a much higher chance to find a bug in code with tests more quickly than in code without tests.
If you do a change in code without tests, there is quite a high chance that you will break something and you never know whether you break something unless you see something wrong in you application. There might be hidden bugs that you might not see. For example you don’t immediately see a bug in a form unless you send the form and see that something is wrong. If you don’t have tests in your code, you have to test everything manually. Once you program a feature, you test it if it works as expected and if yes, you mark the feature as done. Sooner or later there will be a need to change that feature and you will have to test it again. If it’s a big feature, it will take a lot of time to test everything. If you don’t test it properly, there is a high chance that you caused a bug and you don’t know about it. It might be a critical bug. For example some data are not processed correctly or not at all. Your users will not be happy.
So the moral of the story is to write tests to avoid unexpected problems. Tests can save your ass. If you cause a bug in your code and you have it covered by tests, you can see the problem immediately and you can fix it.
The problem with tests is that you have to learn how to write them and how to write testable code. It takes some time, but if you learn it, you will become a better programmer. If you are able to write tests for your code, you can save a lot of trouble in the future. Writing tests can take some time from the start, but it will definitely save time later. I know it’s a big temptation to write code without tests, it might seem that you are saving time when you don’t write tests, but it’s a devilish practice. You will pay a high price for not writing tests. If there are no tests in your code, your code will become a big mess that no one wants to touch.
If you have a big project and you hire a new programmer, he does not know all the dark sides of the code. If you don’t have tests and he touches something, he can break a lot of things without knowing it. He will cause a lot of bugs. Features that worked before suddenly do not work now. What happened? He changed just a small thing in the code. That’s the dark side of the code that is not covered by tests. If you don’t know the code, you can break something very easily without knowing it. It happened to me many times. I was desperate. Then I learned to test my code and I was desperate when I got a project without tests. It was a pain in the ass.
So if you want to have happy programming career, write tests and avoid projects without tests.