This is not a topic that most people are thinking about very often. The main understanding is that if somebody is working as a software developer and is earning a living on that, he or she can be called a professional. But, as can be seen in many cases, it is required more than just that to be able to be called a real professional.
In my pretty long journey as a software developer, I've worked with many people, but not for many of them, I can say, the "professional" tag was possible to be applied.
But why is it so difficult to be a real professional?
First of all, there are market conditions, to call it like this. The big players on the market are selling "technologies" that are "easier" to be used and "save" a lot of time, at least from the management perspective. The "developer" concept is built and promoted, as a user of a big bunch of libraries, APIs, and frameworks. And it's a real avalanche of them on the market. There is a lot of news, trends, conferences, blogs and so on that are promoting the "technologies" already done by the big players, that are claiming that they know what they are doing and that they are doing it better than anyone else. It's difficult for anyone to cope with this enormous informational wave.
Also, it's a big temptation to change the current job and go to software development, because these guys are earning a lot of money, right? Just peek-up a few online courses, and you'll be able to deal with the greatest technologies that will do everything for you. What can be wrong?
The problems don't start to appear immediately. It can take a while, depending on the complexity of the project that you're working on. For tutorials' like cases, everything will be fine, but as long as you'll have to implement something more difficult or more complex, you'll start hitting the "walls" and fight against the framework, API, you'll name it. Why is this happening? It wasn't supposed to be like that, right? It should go smooth and easy. The tasks supposed to take hours are taking days and even nights. The answers from StackOverflow are not useful, and there is no code to copy-paste that will solve the problem.
Maybe, for a while, everything will be fine. The customer is happy, but the business conditions are changing and it's required to modify also the application. You'll start to do the changes, but you'll find that you'll have to do it in a lot of places. How can you be sure that you haven't damaged something that was working previously? For sure you'll damage something and the customer will start to complain.
And the samples can continue. Under these stress conditions, you'll start to find an escape and to put the blame on someone else. The technology that is not working as expected and nobody knows why, the unsupportive colleagues, the customer that is asking crazy things and doesn't know what he or she wants, the Moon phases, everything is to blame on. Except for the only one person that is indeed to blame on: you.
There are many other cases when things can go wrong. However, what can be done? How can you overcome these difficulties and succeed in what you're doing?
The answer is not simple, but there is a way to get out of the brambles. It is called the Professionalism, of whom principles can be followed with success in other domains, also.
What does that mean? Going back to the samples mentioned above, you have to understand that it is never enough to know just something on the surface, some technology-specific details and blindly following some hints from articles, books or online courses. It is required to understand how some specific technology, API, library, etc is working, what the provider has tried to achieve and why. You have to be passionate, to continuously study and think about these things. More important, if you don't have a background in Computer Science or Informatics, you have to build it first. You have to build the foundation before building the house, right?!
Software Engineering Principles and Practices are the foundation's building blocks. I have another blog post regarding them and I'm planning also a course to present more details about.
Another important topic besides the Foundation is to take responsibility and consider yourself responsible for the success or failures in your activity. And when something is going wrong, don't put the blame on anything or anyone, just recognize the situation and, very important, come with viable solutions and make a strong commitment to solving the problems. And, to get credibility, you'll have to stick with the commitment and deliver what you have promised to. There is a tool that can be used in these cases and not only: it is called Estimation and is important to try to get as accurate as possible. I'll address this topic in another blog post and a future course.
Also, it's important to learn to say No. That means that you'll have to analyze what was requested from you and, if there is anything that can prevent the delivery of what was requested, you'll have to make clear the risks or to refuse to commit that you'll do it. Be very careful with what you're committing to because the lack of accomplishment will heavily damage your credibility as a professional.
The last but not least, be a good teammate. Support others, take responsibility for the activity of the whole team.
I hope that this advice will be helpful for you on the hard path to become a professional programmer. I have created this blog with the sole scope to help others to improve themselves and improve myself also. I look forward to your questions, comments and or opinions about this and other topics that you'll want to talk about with me.
Also, I'll try to provide, aside from each post, some relevant references for the subject.