I tried to learn good programming skills. I tried learning object oriented programming, design, and principles because I wanted to be a good software engineer.
For a small period of time, I was thinking that I know all about modularity, testability, readability, reliability and other ‘jibberish’ I used to talk about. Until I faced the real world challenges.
Recently, I was thinking about the reasons of my consistent failures. Maybe it is because I am the laziest person. Or maybe this is because I have not focused enough on this subject.
But you know, there were other things which I considered as main resources for learning but they were not good enough.
Here they are: (you may have others and I want you to share them with me:) )
Learning in a classroom
I asked from many of my friends from different institutes and universities and they said that classes are not very much fruitful. In a class, they will teach you stuff like UML, only definitions of design patterns and some other vague concepts.
In class, you will think a design activity is a one-time activity which is done by some high-level souls a.k.a software designers. We all know that never happened.
Another thing is people who are teaching you have not much experience of real-life software development. They studied in the same class and now they are just repeating whatever they listened when they were the student. Instead of experiencing the pain of applying the knowledge they focus on delivering the bookish knowledge to others.
And that became useless when you go in the field.
Learning via boring and complex book
Some books are great. While others are boring as hell. They will demonstrate (and always will) the Animal and dog examples.
There is nothing bad in simple examples when starting out. But these boring books will keep these type of simple example until the end. You know that real-life is very different than a dog and cat example.
Other books are complex. They will jumble upon dry examples and make the simpler concepts very difficult to understand.
Again, I believe these books are written by academics and for academics. This is because when you read any book by a professional(with years of experience) you will experience the ‘AHA’ and ‘right on’ moments on every page of the book.
Learning via diagrams– okay what is this
I was motivated to learn MVC pattern. Every article that I find on the internet was about displaying three large circles where one represents the model, one represents the view and remaining one represents the controller.
Here is an example:
Yikes.
Does that give you the big picture–naaaah. Believe me, you will not be able to implement MVC using this diagram.
You may be thinking that this diagram will help us to understand the concept of MVC. Yes a little bit– but mostly this type of diagrams will stray you away from the real concept of MVC(which is largely based on compound patterns- that is you will have to understand at least two patterns to understand MVC flawlessly and easily).
This diagram is just showing you– I don’t know– some sort of flow.
So, I believe the only authentic way to learn about programming is to find someone who has already done it. Someone who has the experience of field and real life. Learn from their books or their classes or courses or a one-to-one coaching.
Okay. So this ends my story. What are your experiences? What difficulties you have felt while learning about design principles and design patterns. Tell me your stories. Reply me or comment here.
-Umair