Thursday, June 5, 2014

The Beginning: Different Perspective about Programming

It has been over one year as a software developer and I have been asking myself a million questions about seeing myself being a "Software Architect"  in future and how I can develop my skills and add to my knowledge base on the same. Well, I have also been reading and researching about it by trying to identify the most respected architects and the best software architecture educators and I have reason to believe that the little that I have learned over this period is good enough to be put into a blog.

At the onset of starting to write software, you are constantly challenged by the need to make programming much fun and more simpler, though not everyone. Some struggle and fall from programming because of a sheer amount of ignorance and disinterest that leads them to think that programming is very difficult that leads to "I was not cut out for it" mentality. I really can't blame them considering that probably they have not found time to get the knowledge to learn to write code better. Maybe, they didn't start in the right environment or simply they just don't fit. I for one belonged to the "I was not cut out for it" group until I started really taking my research seriously about software design. I first stumbled into a book called Design Patterns: Elements of Reusable Object-Oriented Software by the renown Gang of Four.
I was used to reading technical blogs and I often stumbled on words like Factory Pattern, Template Pattern, Facade Pattern and I often wondered why other software developers in the internet used such terms when describing code. I later came to realize that my undergraduate courses for programming must have been inefficient to fail to even have a mention of "design", the corner stone of professional software development. After four years of studies and I never had a single class mention about design patterns? Considering that this is the bread and butter of the most sought after programmers in the world?  Anyways, that was that. Moving on, I came to find a whole new dimension of stuff in the software domain that has never occurred  to me as a developer. This includes knowledge about Design Patterns, Programming Paradigms, Domain Driven Design, Test Driven Development, Service Oriented Architectures, Pattern Oriented Software Architectures, Cloud Computing stuff like Software as Service, Infrastructure as Service and Platform as Service and the many "as Services" out there which opened a different world about "Programming in the Small" and "Programming in the large". Point to note is that at least my undergrad courses had taught me some stuff like Data Structures and Algorithms (Programming in the small), SDLC, starting to write code from the basics. As it seems, I had a huge gap to cover in terms of research immediately after my undergrad, one year ago, and I have been striving to make steps to becoming the best at it. Design always seemed to be floating all over the place as I read books such as Passionate Programmer, The Pragmatic Programmer, From Journeyman to Master and other inspiring books for programmers. It is a thing that you cannot fail to come to terms with as professional software developer.

 "Each pattern describes a problem which occurs over
and over again in our environment, and then describes the core of the solution
to that problem, in such a way that you can use this solution a million times
over, without ever doing it the same way twice"

Famous quote by Christoper Alexander

Not many that I had recently graduated with understood this whole mambo jambo of Domain Driven Design, Object Oriented Design Principles, Design Patterns, Test Driven Development and the like.  I found myself in a totally different world when I started talking about these things whenever I met my peers. Even those that were regarded as the best and had stuff going on well with there development experience and had done a couple of projects had no clue. So that means there is a whole world of developers out there waiting get this information to motivate them to become better. I had to get inspiration from somewhere and I didn't have anyone to discuss this whole programming domain stuff so I just started listening to a lot of seminars on youtube, also doing a couple of MOOC's (Massive Open Online Courses) and reading stuff from the greatest software educators in the world.  But recently, I thought that a good idea to express my thoughts about software was by writing a blog and I also found a friend who apparently is more passionate than I am in the same light and a very passionate C# .Net framework Engineer. I hope he will be able to write on this blog sometimes soon. Let's do this!