It seems Stevey can read my mind
December 19th, 2007
I just read his latest rant Code's Worst Enemy. These two paragraphs from his latest rant are exactly my thoughts.
"...I think that his "something bad" may well have been the act of creating the book Refactoring, which showed Java programmers how to make their closets bigger and more organized, while showing Martin that he really wanted more stuff in a nice, comfortable, closet-sized closet......."
".....Tragically, the only GoF pattern that can help code get smaller (Interpreter) is utterly ignored by programmers who otherwise have the names of Design Patterns tattooed on their various body parts......"
I too believe that each and every line of code that we add to our project brings with it some kind of entropy (disorder). It adds to the clutter making it difficult for us to see what exactly is going on. And that's why I like attr_accessor in Ruby over "Alt+Insert" shortcut for Java in IntelliJ IDea, even though both will require the same effort.
It gives me an itch looking at the ROI (Return on Investment) in Java Projects. The ratio of the amount of code that we write to the functionality that we get out of it is really embarrassing.
I think the authors of the mentioned books should have put a Statutory Warning on the back of their books.
Using these patterns/refactorings just for the heck of it may be injurious to your project. Use at your own discretion.
What if...
July 28th, 2007
What if a column name in a core database table gets changed in the future? What if the name of our core business entity gets changed in the future? What if the labels in the jsps get changed in the future?
I keep hearing questions like these, mostly in design meetings. It seems people are more worried about an improbable effortless future change than current functionality. And I think this leads to over-designing of bad software.
Another example of this over-designing is multiple layers of unnecessary abstraction. People take the idea of least coupling to such an extreme that it seems like one component has to take a trip around the world to talk to another component in the same software! I think their formula for good software is “Limit n tends to infinity” where n is the number of layers in the architecture.
I am not advocating design for present without any concern for the future. I think there should be a balance between Convention and Configuration. Rails ideology of Convention over Configuration was one of the first things that got me interested in it.
And why be so scared of change? If we were capable of visualizing and handling all the future changes then Martin Fowler would have never written the Refactoring book and IntelliJ Idea would have never added Refactor menu item.
People try to do too much with their software. It seems they are trying to achieve “World Peace” and solve “Global Warming” through their software. Lets leave that to Miss Universe and Al Gore.
What if all the code that people add to their software to prepare it for the future makes it so complex that no body uses it in the present.
Software Developer or Software User
May 4th, 2007
Is using Microsoft Excel. same as developing Microsoft Excel? No!
Is using Websphere, Oracle, IntelliJ IDEA, Perforce same as developing them? No!
Is using Struts, Spring, Hibernate, EJB, Dojo, DWR same as developing them? No!
Guess what? These Products & Frameworks didn't fall from the sky one day! Some real people developed them. As a Programmer, would you rather be developing one of these or using them for some repetitive, monotonous project?
You might think that there are only so many Frameworks and not everybody can get a chance to work on them. Well, there are 37 Frameworks just for JavaScript! So, you can guess how many Frameworks will be there if we combine all the technologies.
In fact, these new Frameworks are coming at such a pace that by the time you know about them, they are already outdated!
Then there are millions of Plugins & Extensions for these. Everyday I hear about a new Plugin or Extension in the Blogs that I read.
But if everybody starts working on these cool stuff, who is going to create Enterprise Applications? That's what India is for! That's what companies like TCS, Infosys, Wipro and hundreds of other companies in India do. They have millions of employees who are more than happy to use Products and Frameworks developed in US to work on projects for Clients based in US! Its their bread & butter. Now, you wouldn't want to take food out of their mouth, would you? (chuckle)
US on the other hand is supposed to provide them all the tools. Have you ever heard of a universally accepted Product or Framework coming out of India! They are not going to develop them. Its none of their business.
So, lets not disrupt this perfectly balanced ecosystem. Lets just stick with developing Products, Frameworks, Plugins, Extensions, whatever we can do to make life of people in India easier.(smirk)
Outsourcing might have started as a means to save money. But, in fact, it was a very clever strategy to send all the dirty jobs to India so that US can concentrate on all the cool stuff.
To Geek Or Not To Geek
April 13th, 2007
Today, I had an interesting discussion with some of my collegues about the life of a software engineer. My two cents:
1) the amount of fun one can have doing X is inversely proportional to how many people can do X, where X can be anything from watching TV to writing prototype.js.
2) the amount of money that one can demand and, more importantly, get is inversely proportional to how many people can do his/her job.
Well, the point that I was trying to make is that unless you are "Master of Your Domain" you can't have real fun or make real good money in a job.
To me, the second point is pretty obvious and the first one is an interesting way to look at things. The first one is actually a rebuttal to all those guys who think that geeks are missing out on funs in life.
This must be an exaggeration but the kind of "high" that Sam Stephenson would have got from writing prototype.js would need a lifetime supply of crack otherwise.