I applied to ThoughtWorks through their website for the post of Application Developer at Pune. Requirements mentioned that candidate should have very thorough knowledge of Object Oriented Programming.
After a week I got a call from representative, we had a quite long discussion about projects executed, my educational background etc. Then I was asked to solve one of the two problems that were emailed to me just after the call. Although, I am C++ programmer I was asked to code in Java since ThoughtWorks doesn't works in C++. I was given 2 weeks since I was new to Java. I accepted it as a challenge to showcase my quick learning abilities.
I solved first problem, "Merchant's guide to galaxy". This test is to analyse your OOP knowledge and how you apply various OO Design patterns effectively. Also, in the code pairing round you are asked to add an extension to the code, so you must design it carefully so that it can be easily extended without making much changes to existing code. You are also supposed to write unit tests. I uploaded the code on their portal.
After a week I got call from same person that my OOP skills were good and I was invited to their Pune office for next rounds of interview. They had some critical remarks on my coding style like starting every class with 'C' and every interface with 'I' which is the usual practice I follow in C++, or use of static functions. But, overall review was positive.
On the decided date, I dropped at their Pune office for next rounds. There were 2 tests one was aptitude test and other was personality test. I was given 10 minutes to solve around 50 problems. After that there was pair programming round. The guy who had reviewed my code, came with the code set on his laptop. I was asked to add couple of more inputs to my program. I had already considered such extension so no code change was required. I simply added a couple of test cases to verify it and it was done. The guy appreciated that although I was a C++ developer, I wrote a decent code in Java.
After that, I was asked to solve around 50 flowchart problems which require extreme concentration. I was given 75 minutes to solve all problems.
After lunch, there was technical round 1. There were two thoughworkers. There were questions regarding the project on which I worked. Some questions regarding software design. I answered them all. To my astonishment these so called OO Masters were not aware of uncle bob's Dependency Inversion principle in OO Software design. We discussed dependency injection, inversion of control methods etc. Interview lasted for around an hour.
After first round we took a coffee break, then there was a technical round 2. I was told by HR that during technical round most of the discussion will be on OOP, but in round two I was given logical puzzles to solve. I answered them, then there a question on software modeling.
Finally, we had discussion on design patterns, inversion of control using template method pattern. Second round also lasted for around 1 hour.
Now, the most disappointing part of the day, after spending around 45 minutes, HR person came to me and said that, my experience is not relevant. They want an application developer in web domain. The most stupid explanation, which was not at all satisfactory to me. These idiots had my resume which clearly mentioned that I was not a web developer. Secondly, I had proved myself by successfully solving the programming question in Java, that I am very fast learner. Moreover, in my first round I had raised the same concern about platform shift, then one the guy had shared his story of how he shifted from java to scala. This all was really disappointing to me.
Since, they had already made their decision, I didn't bothered to discuss this again. Idiots wasted my whole day just to conclude that I am not a web developer.