Reg Braithwaite wants to read three blog posts, including one about how learning a programming language helped you program better in another programming language. I like learning new programming languages. One, because I like that, and two because it makes me a better programmer. Unfortunately it is difficult for me to map what in programming language X helped me to do in programming language Y.
What made the biggest difference ever to my programming thinking was interface. I encountered the keyword first in Java, after working in C++ for about a couple of years. I know Java carries a lot of baggage, but I cannot deny that it gave me a chance to improve my designing ability. It is not the keyword, but the concept of an interface that helped me. To an extent that it has been my channel of thinking for understanding newer concepts, and hence the name of this blog – iface thoughts. I unwittingly wanted to use iface as a shortform for interface. Believe me, it was not just an experience, it was an adventure for me as a programmer then.
It took me quite a while to understand, I kept asking the instructors why an interface helped. Most of the answers were for why to use one, but not for why to design one. Now I think in terms of interface for everything – thinking of different users, designing components, functions, APIs, data formats and not to forget, the GUIs. Interface is what helps me when I think about abstraction and transparency. Interface can be called the ultimate artefact of abstraction. In reality, interface is what we use when we communicate, when we expect and when we deliver.
Of course, like other elements, interface has been abused many times. So many times that Java has held the blame for it. But I am writing better C++ code after I have understood the purpose of interface. I understand C++ itself, and many of its libraries much better, which I still like. And I will not hesitate to say that it has had an impact on me enough to do better not only in C++ but others as well.