Have you ever feel the pain of being a beginner? Remember the time when you started your first job as a developer and people treated you like a noobie.
You know you are good but they don’t know. You have done some good project in your undergraduate studies or in your personal time. You know you have to sell yourself in that last interview.
You have earned your place. But nobody treats you like somebody. They even treat you in a way that you started to believe them and consider yourself a less of a developer–”DONT DO THIS”.
Let’s think about why a new developer faces these challenges. It could be that because they are junior and nobody has confidence in them until they prove themselves.
It’s possible that a junior developer does not know about the frameworks and technology they are using.
Every developer has faced these situations. I have faced them too. Once I was given a task to write a write a script for MS Excel.
I was a beginner. I have not done it before. So I was panicking. I thought what if I didn’t do it. I learn how to generate a script. Test it and give it to the seniors. It was an easy task but I was nervous.
So, I completed the task and when they start testing I said (in my heart) please say yes. Please say ‘okay’.
You know as a newbie we are totally on a different emotional level. As a beginner, we consider ourselves always under a test-even after the probation period.
But who wants to live as a junior developer. You want to grow up and get serious about java (or any other programming language that you are using)
But why you need to transition to a senior developer?
There can be many reasons. Simply most of us don’t want to call ourselves noobies. We want to get serious about programming skills.
Or you want to be a senior developer because you wanted a fast promotion. That can bring you all sorts of luxuries like money, free time and a boss of junior developers!
Or you want to learn the technology of your current organization fast and then move to another technology in another organization. In this way, you get an experience of both technologies. Why? Because you need more per hour earning or get more freelance projects.
Or you simply wanted to create an impact. You want your work to be appreciated and you want to serve a huge number of people.
For all of the above reasons, you wanted to transition from a beginner to serious programmer.
Next question: How do you wanna get there? First, we talk about frameworks.
Frameworks VS Principles
Frameworks make our lives easier(or make it a hell if you have used the wrong framework i.e. SubSonic). Hence learning a few framework is often the bare basic requirement in most of the work places.
Most of the time people exaggerate them. They too much focused on learning a new and sexy framework. Or learning frameworks for the sake of ‘learning frameworks’.
While we should be learning about the principles on which these frameworks are built. Well, I am not saying go and develop the next-gen object-relational mapper. But we must know about the underlying principles of any framework.
Let me share a personal story with you:
Discovery of MVC pattern
Once I was assigned a project different than my existing skill set. That’s the beauty of my job. I am not stuck on linear problems. I have to face new challenges very often.
Anyway, the critical problem was that there was a huge amount of images(small ones) that needs be loaded into the memory. Due to memory constraints, I cannot load all images into the memory at once.
Hence I have to load images into memory according to the user action. Consider this like an anticipated load. The application has to anticipate according to the user behavior.
This is because we don’t want the user to stare at the blank screen while a sand clock is appearing on the screen with the message “Loading Images”.This would be death to our project.
So, I thought about if there is any framework that can help me with that work. The application was based on XNA framework. That framework is absolute now. That was never a popular framework and therefore there was no large community hence there was no support available.
Therefore, I was alone. No built in framework to support the kind of functionality we needed. So, I tried on my own.
So, I created a class named ‘Manager’. This class accepts the user input. Update the model and load images for that model. It also loads the adjacent images for the case when user input changes rapidly. Now if the user changes the input then the user will be served with already loaded images hence no delay for the user.
Also, there was a separate class named ‘Renderer’. The responsibility of this class is to render the loaded images.
The distribution of logic made it easier for me to do the work. Then an idea strikes me that if I assign the responsibilities properly- I can implement and MVC(Model View Controller) pattern. Hence the universe witnessed the birth MVC pattern implemented in XNA/C#.
O.K. O.K. I know, it is not sophisticated like Asp.net MVC but it is good enough first version. I can improve my framework like asp.net MVC framework is improved. They have currently version 6 of MVC.
I was able to do this because I understand why MVC pattern is important and what are the internal mechanics to implement.
Can you guess from the above description that which class should be the controller?
The controller class in my little MVC framework was the ‘manager’ class. Hence assigning proper responsibilities to classes I was able to distribute responsibilities in model, view, and controller.
Life was easier after that. Any change in the view was independent of the controller code. The code was clear, readable, elegant, modular and easy to test.
And so on.
Principle first approach
I knew that there is no framework or technology out of the box available to help me out. By learning about MVC design pattern and underlying principles I implemented MVC pattern for my XNA project.
So, most of us wanted to learn frameworks and perfected them and master them. But I believe it is not about learning the framework but what happening behind the framework. On what principle this framework is working?
If you want, can you write a framework for yourself? That will not sophisticated as available in the market but it is yours and you can remake it, enhance it or publish it for other people to use.
You know what you are talking about
There is a lot of difference in talking about frameworks and speaking big words like readability, testability, modularity, and scalability than actually demonstrating these capabilities in your code by yourself.
Once you know the underlying principle and implemented them by yourself then you know what you are talking about. You know what does it mean by “easy to change” and modular. Otherwise, you will be reading the documentation of the framework that you have used blindly.
Hence, if you want to get serious about programming skill you need to focus more on design principle and best practices rather than learning an already available framework.
So, I rest my case and now it is your turn to tell me about what do you think? You can send reply me via email or write comments here.