Software Engineers – Do they still exist?


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:

  1. Engineers by education – those with a 4 years regular degree in computer science and engineering.
  2. 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:

  1. 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).
  2. 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:

  1. 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.
  2. 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.
  3. 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.

Until then…

Pradeep

Other posts

  • Building Your First Neural Network with TensorFlow – Deep Learning 2

    Building Your First Neural Network with TensorFlow – Deep Learning 2

    Neural networks are a fundamental concept in deep learning and are used for a wide range of applications such as image and speech recognition, natural language processing, and much more. In this article, we will walk you through the process of building your first neural network using TensorFlow, a popular open-source machine learning library. We'll…

  • Introduction to Deep Learning with TensorFlow – Deep Learning 1

    Introduction to Deep Learning with TensorFlow – Deep Learning 1

    In this article, we provide an introduction to deep learning with TensorFlow. We cover what deep learning is, what it can do, why TensorFlow is a great choice for deep learning, and an overview of TensorFlow itself. We also explore the different types of neural networks used in deep learning, and demonstrate how to build…

  • How To: Set Up PyTorch with GPU Support on Windows 11 – A Comprehensive Guide

    How To: Set Up PyTorch with GPU Support on Windows 11 – A Comprehensive Guide

    Introduction Hello tech enthusiasts! Pradeep here, your trusted source for all things related to machine learning, deep learning, and Python. As you know, I’ve previously covered setting up TensorFlow on Windows. Today, I’m excited to bring you a detailed guide on setting up another popular deep learning framework, PyTorch, with GPU support on Windows 11.…

  • Solving a Complex Logistics Optimization Problem using the Pulp Library in Python – Part 4

    Solving a Complex Logistics Optimization Problem using the Pulp Library in Python – Part 4

    In this article, we demonstrate how to solve a logistics optimization problem using the Pulp library in Python. By defining the variables, objective function, and constraints, and using the solve method to find the optimal solution, we are able to minimize the total cost of transportation while satisfying the constraints. This article concludes the multi-part…

  • Linear Programming in Python using PuLP – Part 3: Optimizing Investment Portfolios with Multi-Objective Optimization

    Linear Programming in Python using PuLP – Part 3: Optimizing Investment Portfolios with Multi-Objective Optimization

    In this article, we used the Pulp library in Python to solve a linear programming problem to find the optimal investment portfolio. We defined variables, added constraints, defined objectives, and solved the problem to find the optimal solution that balances the trade-off between maximizing returns and minimizing risk. The code was concise and easy to…

  • Linear Programming in Python using Pulp – Part 2

    Linear Programming in Python using Pulp – Part 2

    In this article, we delve deeper into linear programming and explore how to solve a multi-objective optimization problem using the Pulp library in Python. We present a problem in which a nutritionist must find the optimal meal plan for a patient suffering from anemia, balancing the intake of Vitamin B12 and fat. We demonstrate how…

  • Linear Programming in Python using PuLP – Part 1

    Linear Programming in Python using PuLP – Part 1

    Linear programming is an optimization technique used to find the best outcomes for a given problem. This technique relies on a set of constructs which are all expressed using a system of linear equations. It is important to understand that you should be able to express your objective as a linear equation dependent on an…

  • How To: Setup Tensorflow With GPU Support using Docker

    How To: Setup Tensorflow With GPU Support using Docker

    Previously I published a guide for setting up tensorflow in an anconda environment with GPU support. A lot of people liked it and I have been working with this environment myself for more than a year now. I am happy with the results however the process is a bit involved and requires quite a bit…

  • How To: Setup Tensorflow With GPU Support in Windows 11

    How To: Setup Tensorflow With GPU Support in Windows 11

    It's been just 2 days since Windows 11 came out and I am already setting up my system for the ultimate machine learning environment. Today we are going to setup a new anaconda environment with tensorflow 2.5 with GPU support using NVIDIA CUDA 11.4 and CUDNN 8.2.4 along with Python 3.8. This is going to…

  • Tools of The Trade – II

    Tools of The Trade – II

    In continuation of my previous post today I will talk about the website tanooja.com. I did this project on request of my wife because she wanted to pursue blogging and didn't want to go through the ordeal needed to write, publish and manage SEO using most of the prominent blogging platforms like WordPress, Joomla, Drupal…

  • Tools of The Trade – I

    Tools of The Trade – I

    In this post I will share a few tools and technologies that I am using to run a couple of blazing fast websites using latest modern tools and technologies. The caveat here is that I don't pay any infrastructure/hosting costs for any of these websites and they can scale infinitely in terms of supported users…

  • Building Lizzie – IV

    Building Lizzie – IV

    Another post about Lizzie. I started off with a Raspberry Pi 3 to build a personal assistant for my car and I have come a long way both in terms of the concept and the functionality. Most importantly I have formalized the application flow and also extended the scope from one device to almost all…

  • OBD-II with Raspberry Pi3

    OBD-II with Raspberry Pi3

    I am writing this article in response to a question posted on my YouTube channel. Here I would be talking about communicating to an OBD-II device (ELM327 chip with Bluetooth) hooked into your car’s OBD-II port. The OS I am using is Windows 10 IoT core. This information is important because it makes a difference…

  • Building Lizzie – III

    Building Lizzie – III

    As mentioned in previous article today I would be talking about OBD-II integration in Lizzie using a Bluetooth serial communication with an ELM327 adapter that fits on a OBD-II port in your car. OBD stands for On Board Diagnostics which is connected to the ECU (Engine Control Unit) and provides a ton of information (both…

  • Building Lizzie – II

    Building Lizzie – II

    In the previous post I described my experiments around building an intelligent artificial personal assistant – Lizzie. The pseudo intelligent agents available today around us (Siri, Cortana or Google Next) are all great feats of engineering given the fact that they reside on small devices like mobile phones and are able to do powerful things…

  • Building Lizzie – I

    Building Lizzie – I

    Recently I have been busy building a personal assistant that I would be fitting in my car. Currently I am in experimentation mode and I am experimenting with speech capabilities. I would start with a description of my journey so far. First let me show off a little bit with these videos that I created…

%d bloggers like this: