I tried to develop a system. I was tired of doing small tasks.
As soon as I know the difference between a task and a project -I started dreaming about completing a project. A project is a collection of tasks resulting in a complete product.
I know that if I own a product in my company I will be able to gain benefits throughout my career. That will be my product. This will be a product attributed to me. And one day I will patent it.
Do you have such dreams?
I started imagining that people are using my product and praising me. What a dream that was!
I had experience of 1.5 years and I was thinking about, for example, building a new commercial airplane.
Naive! Hah.
I just forgot one thing. I was a damned junior with only college level knowledge. I was new. Like a toddler in the professional programming world.
I studied most of my programming knowledge in the classroom and that was of little help. I did not have any practical experience.
Moreover, our professors don’t have much practical experience. This is truer if you are in programming. Here, you will have to implement and go through the pain of being a failure. In programming, you cannot gain excellence by making programs on white board.
The real world is not like writing a 200 lines program. When the size of the software grows the complexity grows exponentially.
I believe experience triumph anything else.
In addition, most of the stuff available for programming and design is written by academics and written for academics only. Not for the people who are working in the professional life. Especially most of the academic stuff available for object oriented design is boring and complex.
Characteristics of a Real Programmer
When I started my programming career. I was impressed by senior programmers. A problem that would take months to solved, a senior can solve that within weeks.
Another thing that I observed, they write code in a way that it is easier to change later. They also employ object-oriented design principles and patterns to cope future changes They even have written their own software design patterns.
So, having characteristics of a real programmer worth it?
Once you go through the heat of being a junior – you will gain respect. You will not only speak about OOD for the sake of impressing others. But you know what you are talking about.
Once you internalize OOD principles through experience, you can apply this knowledge in any battlefield and come out as a winner.
Writing code and then managing code will not be a nightmare. You will not stretch your hairs when you change or update code.
You can easily apply patterns like MVC, decorator, and factory. You can even show your code to juniors and impress them.
Now, you can wait 5 years before writing a code like that. Or you can shortcut your success by learning fast.
It is not necessary to burn your days, weeks and years to become great. With a good strategy from the start, you can become great in 2 years.
For beginners, I asked you to focus on the following three strategies.
1) Understand the Software Development Process(Your process)
There are two situations. First, you are a part of the team. You have been assigned a task. You complete that task and submit it.
Secondly, you have been assigned a project. You have to interact with customers. Or you have to develop a sub-system of a large software product. You are a one man army.
In both cases, you have to understand the software development process.
Understanding software development process does not mean that you have to achieve CMMI level 5. Or learned a sophisticated development process like cleanroom software engineering.
A development process may be like — you just listen to the requirements and start coding. Your only documentation is your code and comments –if there are any. You report to your boss when you have completed a task or a project.
Or your development process can be like extreme programming or SCRUM.
Whatever the process you have. Just follow that. When you understand your process model then try to find out where you are weak.
If you are weak in testing your code. Focus on that. If you are weak in design then focus on that. If you are weak in eliciting requirements then focus on that. Similarly for deployment and delivery.
In this way, you will gain expertise in all areas of software engineering and you will put yourself on a ladder to greatness.
2) Small challenges
Continuously challenge yourself. Stretch yourself in the areas where you think you are weak. Or areas which are interesting to you.
For example, I was weak in socket programming. Therefore, I design a small challenge. That is sending custom data between two PCs using sockets. I complete that and write notes about that in my journal.
Then after a year, an opportunity arrived where I have to work on sockets. I accepted it and completed the task very quickly.
Hene design small challenges and complete them in your free time. You will gain a ton of new knowledge and experience.
3) Performance Review
The act of reflecting and reviewing will improve your learning. Personnel performance reviews are important.
Here I am not discussing team reviews or reviews that are asked by your boss before appraisal.
I am talking about your personal reviews. For example, I review your personal performance quarterly.In these reviews, you should reflect upon the things that you have learned during these three months.
You should be targeting at least one challenging area to be covered during that quarter of the year.During quarter reviews you can reflect upon the challenges and problems that you faced.
Based upon these reflections you can improve your productivity. You can estimate better. You can identify the critical areas in your project and streamline them early in the development.
What do you want to become in next 2 years?
The understanding of software development process, challenging yourself and reviews can help you gain valuable experience quickly.
What do you think is important to be successful as a software engineer? Let’s discuss them in comments or you can contact me.