AI Hype - Am I out of work in five years?

4/19/2024
7 minute read

AI is a hot topic - one would say hype topic, and there are bold claims like this:

There Will Be No (Human) Programmers in Five Years

Source: https://decrypt.co/147191/no-human-programmers-five-years-ai-stability-ceo

Now, how far is this from reality? Let's take a look at the current state of AI in the context of programming.

Of course this isn't the only of such claims, we also have the current CEO of NVIDIA (Jensen Huang) saying:

Don’t learn to code

But is it really the case? To answer the question we have to understand how such claims are made and what they are based on. Spoiler-Alert: You are less impressed at the end! To make a bit more sense, let's have a look at the website of "Claude 3" from Anthropic:

img

This image was taken on the 18th of April 2024

The compariosn gives you the feeling that, in this case Claude 3 Opus, is a very competent model surpassing GPT-4 in its programming capabilities. Or 84.9% in Coding "Human Eval". What is that in the first place? There are multiple source, so let's take some. Here the first one: https://arxiv.org/html/2402.14852v1

The task:

Given two positive integers a and b, return the even digits between a and b, in ascending order

So for generate_integers(2, 8) => [2, 4, 6, 8] or generate_integers(8, 2) => [2, 4, 6, 8] or generate_integers(10, 14) => []. That would be in the "easy" category of leetcode at best. And that is one of the standard benchmarks to evaluate the programming capabilities of a model. In Claude 3 opus (the best in this benchmark) has a confidence score of 85%. That means that 15% of the time it fails to solve this task. By the way, I gave that task to ChatGPT-4 to solve it and it gave me this code:

using System;
using System.Collections.Generic;

class Program
{
    static List<int> GenerateIntegers(int a, int b)
    {
        List<int> result = new List<int>();
        // Ensure a <= b
        int start = Math.Min(a, b);
        int end = Math.Max(a, b);

        // Iterate through the range from a to b
        for (int num = start; num <= end; num++)
        {
            // Convert the number to a string to iterate through its digits
            foreach (char digitChar in num.ToString())
            {
                // Parse the digit back to an integer
                int digit = int.Parse(digitChar.ToString());
                // Check if the digit is even
                if (digit % 2 == 0)
                {
                    result.Add(digit);
                }
            }
        }
        return result;
    }

    static void Main(string[] args)
    {
        // Test cases
        List<int> result1 = GenerateIntegers(2, 8);
        Console.WriteLine("Result for (2, 8): " + string.Join(", ", result1)); // Output: 2, 4, 6, 8

        List<int> result2 = GenerateIntegers(8, 2);
        Console.WriteLine("Result for (8, 2): " + string.Join(", ", result2)); // Output: 2, 4, 6, 8

        List<int> result3 = GenerateIntegers(10, 14);
        Console.WriteLine("Result for (10, 14): " + string.Join(", ", result3)); // Output: 
    }
}

Of course, it doesn't work. The implementation given is not correct. But sure, we are at the beginning of the journey. Models will get better for sure, but here are my two major problems.

1. Coding is a small part of your job

Actual coding does not fill all of your day! Not by a long shot. Code is basically the artifact/output of your thinking and conclusion process. So once you decided how to tackle the problem (going from problem space to solution space - so you did understand the problem and have a possible solution in mind), you can write the code. Of course it is not trivial to write code, but in many cases the "coding" part is easier than the thinking/drawing (not coding) part before.

For an AI to work, it has to understand the problem and the solution space. And that is the hard part. Often times you have to rely on context or domain knowledge to solve a problem. Concepts in one world/domain doesn't necessarily mean the same thing in another domain. For example given the word "table" in the context of a database, it doesn't mean the same as in the context of furniture. So context matters!

Will AI go there? Maybe!? Hard to tell - I am no AI expert.

2. Refactoring

Those models are great to spit out some code - but they lack the capability to refactor code. Given bigger chunks of code, it is in the majority of cases not able to do a proper refactoring. Well, you could argue you don't care because only the AI has to understand, but that is a bold claim to make. That would mean you give the AI the full responsibility to understand the code and the problem. And that is a big ask.

We all know that the more code you write the higher the chance of a bug (or multiple bugs). And that is true for AI models as well. The more complex an AI model is the more likely it becomes it has big flaws in its system. If you have a broken system to begin with, how likely will it be that it create something "not broken"?

Agents and other problems

The current pinicle of hype is or was "Devin". An agent that was able to write code, use the web, a shell and so on to reach its goal. There was even recently a video about (https://www.youtube.com/watch?v=UTS2Hz96HYQ) how it "can solve" a Upwork job. But without a big surprise, it seemed more staged than real. Here a nice video with more explanation

  1. https://www.youtube.com/watch?v=tNmgmwEtoWE
  2. The TL;DR Version: https://news.ycombinator.com/item?id=40008109

So - do I have a job in 5 years?

Yes. Software engineering isn't dead or in the hands of LLMs. The current state shows that there are still big gaps to overcome. Of course there will be layoffs because people believe the hype and think that they can substitute 3 developers with LLMs or agents. And that is my problem: The Hype

## The Hype If you read news on Social Media, people are directly hooked and hyped by such videos. Of course, the look cool and promising, but keep in mind such companies have to earn money! These are all promotinal! When was the last time you listed all your shortcomings in great detail on your CV? Oh you didn't? Hmm. That said - don't believe such hypes blindly.

Gartner Hype Cycle

I do feel we are somewhere at the peak of inflated expectations. Slowly but steadily, people realize that AI isn't the silver bullet. That doesn't mean AI can't do anything - of course, there are very valid use cases, for example, I myself use GitHub Copilot when coding. But it is a tool and not a replacement for me. It helps, for example, with simple mapping logic. It can create some scaffolding code quite easily!

So stay calm and don't believe the hype. People love to sell emotions - positive as well as negative ones.

Benchmarking - A matter of perspective

In recent months and years, there was a certain hype around benchmarking, also in the .NET community.

This blog post is meant to ground some of the benchmarking topics and put this into relation to other things so you get a better understanding if it's worth the effort.

No, No, No - Tasks are not threads and they are not for performance!

I often read that Task is used for multithreading in C# / .NET, but that is not the case. And it is crucial to understand why this isn't the case. We will also see which problem exactly Task is solving in the first place.

.NET Framework 4.8 to .NET 6 migration

I was recently tasked to migrate an application with around 150 projects from the "old"It is still supported .NET Framework 4.8 to a recent .NET 6. As the application is still under development and used, the migration should be done step by step over time in iterative steps rather than a big bang refactoring. This blog post will go a bit into more detail about how I approached the situation and what I learned.

This is a highly subjective post, and there are plenty of ways of approaching it - so take it with a grain of salt and mileage may vary.

An error has occurred. This application may no longer respond until reloaded. Reload x