I was a fresh graduate. Looking for a job. Then one day when I was on a street and waiting to cross a road.
My phone started ringing. I received the call. It was from a software company where I have applied 3 months ago.
They were calling for a recruitment test. I replied positively and confirmed my availability on the test day.
So, I went for the test. A huge crowd was there. My university seniors, developers from other organisations and developers with years of working experience have appeared for the test.
I said, “Oh shit”. How will I ever be selected in this crowd? The competition was going to be fierce because that was the best company in the area and remuneration package was higher than any other company in the market.
At the start, they gave us a 1-hour aptitude test– that contains small maths problem, word problems and etc.
I was not prepared for such a test so I just solved the problems as soon as possible. I tried not to work hard and keep my brain resources for the programming test session.
In the programming session, there were MCQS. Unfortunately, the questions were related to deep technology.
Deep technology questions are like: “how do you set x parameter in a machine.config file (ASP.net)”. Or “What is the syntax of doing XYZ in Java”.
These type of questions are for those who have invested years in that technology (e.g programming language, frameworks and etc). I was good at concepts but not fluent in the technology.
Also, I have never worked professionally on any technology which was used in that company. So I utilized my guessing power. At that moment, I knew I will be mediocre in the crowd.
Then arrive the last and the hardest session. Each candidate has to read a description from a document and develop a working product. The time limit was 3 hours.
Again, a lot of deep technology experience was required. My hopes for getting hired were doomed.
So, out of desperation, I did two things. First I assumed a lot of things which were ambiguous in the test (Or I did not know about them).
Secondly, I tried not to solve the complete problem but tried to convey my attitude towards programming.
Hence, I tried to make the architecture of the software as good as possible. I applied some of the concepts of object-oriented analysis and design(OOAD) that I knew.
For example, I used the MVC. Although there was no built-in MVC in Asp.net at that time. I write separate classes for models, controllers, and views and created a looooooose implementation of MVC.
In this way, I develop some of the required functionality and submitted the code. Test completed and everybody went home.
A few days later I was called for an interview. I was good enough to be called for an interview. I did not believe that. I thought my guessing power in the test was awesome.
The Interview consists of a panel of 7 people. 5 were from the technical background. And two people were from human resource.
Everybody was asking me only about the final session of the test.
“Why you did not complete the code?”
I told them I was constrained by the time limit.
Then they ask why I designed the code using object oriented methodology and why I used MVC. That was the longest discussion during the whole interview.
So, I told them about how object oriented analysis design(OOAD) is good for testing, managing code and easy to read.
And so on.
But there were some sceptics in the panel and they did ask some deep technology question but I dodge them by saying “You can find that from the reference documentation/book”.
Later, I received the acceptance letter. They showed me that the accepted ratio was less than 1 percent. Hmmmmmmmm.
I performed poorly in aptitude test and even in programming test but the knowledge of object-oriented design has saved me.
There are skills which are independent of any technology and they are called transferable skills. If you are good at them you can apply them to any technology or programming language. OOAD is one such transferable skill and having that skill got me the highest paying job.
So, If you have transferable skills then you don’t have to memorize the documentation or syntax of some dying technology.
Some programmers are stuck in a job. They think they cannot switch because they don’t have suitable technology experience.
With transferable skills, you don’t have to worry about the experience in specific technology. You can fire your boss at any time if you want to change your job- because you have transferable skills that you can apply in any other technology.
People in interview will love you once they know that you can learn fast and you have transferable skills. Hiring you will make your interviewer proud.
Now it’s time to reveal a SECRET.
A Secret for Getting Successful in Your Programming Interviews!
OOAD skills can save you during interviews. Most of the programming interviews are taken by technical people.
Therefore, they will ask you question in which they themselves want to improve. Something they perceived as of higher value.
Although they don’t have the time to be good at OOAD. They only have a vague idea about how OOAD skills can be applied to gain modularity, reusability, and readability.
Therefore if you are good in OOAD then you have the advantage to shine in an interview.
Also, every good book on programming interviews has a separate section for object oriented design questions.
What are Transferable Skills?
Transferable skills are those skills which can be applied across different domains. There are specific transferable skills in the programming world.
For example, learning algorithms, estimation, problem-solving are transferable skills. These skills are not technology bound. If you are good at these skills, you can cash them out throughout your career.
OOAD is also a transferable skill and very few people focus on that. They have crafted some irrational excuses for not focusing on OOAD.
These are the people who are still using object oriented programming as a procedural/structured programming language.
Following are some excuses that people have about OOAD:
I work mostly with databases, how OOAD can help me out?
Famous databases are relational. Famous programming languages are object-oriented in nature. How can we combine these two?
You can write an additional layer to convert from relational models to object oriented model. This is called object-relational mapping(ORM).
Fortunately, there are many frameworks for all programming languages that can do ORM for you.
And if you are fluent in OOAD you will be able to learn these frameworks quickly. You can analyse the pros and cons of a framework.
You will not like a newbie who thought using frameworks is the default approach. Similar to internet newbie who believes that Facebook is ‘the internet’ 🙂
Moreover, programming languages are converging toward providing support for ORM. For example, Entity framework in .Net/C#.
But I am in Mobile App Development and/Or Web Development and I don’t need OOAD!
I work in mobile app development and I don’t need any object oriented design skills!
Or I work in web development and OOAD is not necessary or important!
Or I develop applications for SAP- so I don’t need OOAD!
MVC(model-view-controller) design pattern has brought an explosion in the world of programming and notably web programming. The World has gone crazy. Frameworks after frameworks are invented to support MVC.
Again, if you are in mobile app development – you will be writing mostly in objective C or Java. Both of them are object oriented languages. Hence, you can get an edge over others – if you believe in OOAD.
There are other excuses too. Object-orientation will make my program complex and large and I have to write more code.
One should not listen to them!
So, if you have any other concern or beliefs that OOAD is not helpful- you can share with me in comments and we can discuss that 🙂