My Eureka Moment in Software Engineering
An account of how learning theory in college helped connect the dots that practical experience at work had created.
Originally posted on the Graduate Developer Community Blog.
My name is Vithun Kumar Gajendra. I am originally from India, and completed a Master’s course in UK under a student visa. Before coming to UK, I worked as a Software Engineer for about 15 months, and I was very much in the thick of action. This work experience would also go on to help me to understand the stuff I studied in the Master’s course even better. My experience here was like a typical recent graduate who enjoyed doing quick programming tasks at college level. I used to solve problems very quickly (I used to be the quickest in my batch at office!), and would go on accomplishing a lot of things within these 15 months. I worked on problems and mini-projects in fields ranging across Shell scripts, CSS, JSP, Servlets, Oracle PL-SQL, SOAP Web Services, a bit of Spring etc. I had a good time working as part of a team making use of tools like CVS, Bugzilla etc. I also got introduced to how tools like Eclipse, Maven, Ant, Hudson etc. were being used in a development environment (I had no idea about the existence of some of these tools before!). In short, this was a period where I was a really good jack of all trades, but unfortunately the master of none. I now look back at that time, and feel that my speed was actually a curse. I did not have the patience to stop and look in detail at some of the things I had done and understand them in depth. I just thought I could do anything and did not worry about how I did it.
I then came over to the UK to do my Master’s course. I did an MSc in Advanced Web Engineering in the University of Essex. It was here that I had my first “eureka” moment. I had this module called “Software Design and Architecture”. In this module, I was formally introduced to the concept of “coupling” in software engineering. And I suddenly realised that I had never thought about writing code in a clean way before. All that I focussed on before was to write code that would get the job done. Now I suddenly realised that there was a good (“artistic” if you might) way to write code. I suddenly realised what a fool I had been! And all of a sudden, I began realising the role of concepts like refactoring and design patterns. (I had been part of a “refactoring” team in my previous work experience without having this knowledge). And now, I turned wise. I realised there is always much more to learn (and apply).
Once I completed my Master’s, I had to wait a few months. I could not find a job as I was still under student visa. And I wouldn’t get my work visa until I got my degree results. So it was in this period that I decided to have a look at Spring. You might ask: Why Spring? I had been introduced to Spring at Mformation. I was required to rewrite existing DAOs using Spring templates and thereby eliminate boilerplate code. I just followed the instructions of my team lead: “Rewrite the code using Spring methods. Declare something in some XMLs and it would work.” It did work, and I did not care at that time how it worked. For some reason, after my Master’s, I thought I’ll have a look at how this worked. And then another eureka moment struck me. Spring was not something that just helped in simplifying DAOs. It was LOTS more than that. I began studying it in detail from the basics(Dependency Injection, Aspect Oriented Programming). The more I read about it, the more I started getting excited.
By this time, I got an internship offer. They required someone with HTML and MySQL skills, and although I wanted to work with Java, I tried to keep myself occupied until I got my work visa. But my interview here went rather well, which in turn made them think about my position as being somewhat permanent and not just an intern. However I joined on a temporary contract (as I still had just a student visa). I was given an in-house problem (of reasonable complexity) to solve. I came up with a concept, which I thought would work. I wrote a proposal, and my manager suggested me to implement it using PHP. I requested him if I could do it in Java, and after a bit of reluctance (because PHP was used mainly for development within the company) he agreed. I now got the platform to use my Spring knowledge (gained mainly by reading and doing small examples). I developed a proof-of-concept within 7 days. Through this course, I made use of Spring, Hibernate, Maven and Eclipse. I created a well-structured and organized code-base. My manager was impressed with the solution and the speed at which I implemented it. He considered it an “elegant” solution to the problem. And this time I was satisfied that my speed had not come at the cost of learning. I understood more about Spring and my interest in Spring has increased even more. I informed the management that I did not intend to take up a permanent position (because they were looking for someone who would do more with PHP, and I did not want to give up Java and Spring, and I also wanted to relocate to London). So towards the end of my tenure, I had to explain the application I had created to a colleague who had a good understanding of Java, but no knowledge of Spring/Hibernate. Within the next couple of days, I managed to impress her with what all Spring had to offer. She was also able to easily pick up the code I had written (and the best practices I had followed). She also decided to use my proof-of-concept as the base and extend it to completely satisfy the requirements. I left the place with a very good feeling and a sense of accomplishment, and with good relationships forged.
From Vithun’s deskhttps://www.vithun.com/posts/my-eureka-moment-in-software-engineering/