In the past there had been a lot of ranting about the quality of code that Indian software engineers write and there were some claims that 95% of them are unfit for engineering roles. After that I have read a lot on the subject and seen a lot of videos about it, people expressing their views both in support and against the argument. I am an Indian and initially I wasn’t very sure whether I should say something or not, eventually I decided to get on the keyboard. Before I say anything further I would like to make it very clear that I would not be talking about Indian Vs Non-Indian software engineers, rather I would be writing about Software Engineers Vs Others and having worked with engineers all across the globe (directly as a team or in an offshore team) I think I have seen some amazing and not so amazing software developers. I have been part of hiring campaigns and interviewed a lot of people aspiring to become or change companies as software engineers/developers, I have seen a lot of great talent and also a lot of bullshitters who want to join the race because it’s the next thing to do (I would be sharing my experiences below). Let’s start.
I would start with a story to set some context – one fine morning I reached office and was about to start my day with a lot of energy and before I could login to my workstation – the HR executive approached me with a resume and said “we have a candidate for the role of a software developer and he is waiting in the meeting room”, well there I go to see this gentleman and after a brief round of introduction and breaking the ice kind of discussion I asked him my favorite question: “Do you like solving problems?”, he at first gave me the tailored response I have heard more than a 1000 times and the next thing that I did was to push a paper in front of him and ask him to write a function to swap the values of two variables – his initial response was a smirk on his face (as if he was saying that he had more than 5 years of experience and was working with a reputable software firm) and then he said that he learnt that in college and afterwards he focused on developing practical software so he would like me to ask him practical question related to web development or .Net (which is what he has been working on). Well I said fine “let’s do a machine test” and I asked him to create a simple student registration system with a couple of screens and database tables to capture and show the registration data. He looked at me furiously as if I had offended him and said “you are being disrespectful” (those were his exact words) – I was at a loss failing to understand what it meant – I asked this gentlemen how and he said: “I am here for the position of a senior developer, I expected that you would have asked me questions about entity framework or MVC – this stuff is for junior developers.”, my response was “well you can use that knowledge to solve this assignment – you can build this solution in any language – using any framework and technology”. My friend was still not convinced and said that he would like to pass and my response was “I would also like to pass” and he was respectfully escorted out. Well how would you test a software developer if not by asking him to write a simple software to solve some real problem (the complexity of the problem here is kept to the lowest possible levels). As you would see after reading through the entire post why this gentleman was so offended.
First there are 2 kinds of software engineers based on education:
- Engineers by education – those with a 4 years regular degree in computer science and engineering.
- Engineers by profession – those with or without a formal education and degree in computer science and engineering.
Second there are 2 kinds of engineers/developers based on capability to understand computation and logic:
- Software engineers/developers: Those who can engineer stuff and creation solution that use new/existing ways to solve problems facing them(see my emphasis on problems).
- Clerks: Those who can memorize syntax and also use it to deliver a crappy solution to almost any kind of problem, their code works sometimes while majority of the times it’s a disaster because they can’t get out of the things they already know and if you give them a very basic problem – as simple as something like reversing a sequence/array they are seen struggling – however if you ask them questions about let’s say object oriented programming they know it all (or so it seems) – but if you give them a problem that requires them to use those concepts they start staring at you as if you have offended them.
Now let’s put some facts behind what I said, I have interviewed around 1500-2000 developers (or may be more) in last 2 years and here are my observations:
- More than 98% of them were unable to write a program that can reverse a string or any other sequence (like an array of integers) without using the functions available as a part of framework/language class libraries.
- Out of those remaining 2 percent nearly 99.9% couldn’t write a simple object oriented solution to solve a very basic problem like downloading a file from a remote/local source.
- Of all candidates I have interviewed, 99% can’t even create a basic registration page and save the data to database and show it back – despite having internet access and no restrictions on taking help from online sources.
All these were people having experience between 0-10 years (80% between 2-7 years) of software development and they still weren’t able to do these basic assignments.
Now you might ask it doesn’t make sense – they already are working somewhere and if they are so incompetent how come they don’t get sacked up – well some of them do but the answer to the question lies in the nature of work that’s happening right now and I would try to explain a bit. Most of the software that is running today was written in last 10 years and the majority of work today is change management in business software rather than creating something new from scratch and when something new is created today that also is affected by people whom I called clerks who give you a piece of crap collectively and then you maintain a horde of clerks to patch it up as an when things go south, second 90% of the existing software supports the business of majority of organizations and on this these clerks just make changes mostly cosmetic and sometimes functional but whenever there is a logical change it is either assigned to super star in the team (by the manager obviously – who knows the dynamics of his team). The dynamics of the teams are also pretty much same as are my statistics for the recruitment process so I would say – the 10% of new and genuine stuff is coming from 1% of developers/engineers who know what they need to do. Now this holds true for the entire race of software guys you see around – Indian or Non-Indian – I admit that the number is slightly higher when it comes to Indians and that because the universe is bigger here (i.e. the number of engineers/developers).
My experience tells me that 95-98% of developers/engineers don’t know what the f**k they are doing and most importantly they don’t even want to know – it’s like a one way ticket that they have received and they don’t believe they need to evolve so I might as well shut up and get along with the fact. Being a manager my job is very tough and challenging – more challenging than it was when I was just a developer and I am very unhappy about it and I want to go back and create some beautiful software. Of all system problems/optimization problems – you are literally handicapped when you deal with optimizing a system with human factor involved – the most crappy part is this – the most incompetent people will have the biggest loads of ego – why? – because they are scared (as was my friend from the story).
I will leave you pondering about what I wrote today and would definitely like to have your inputs – in support or against doesn’t matter.