file

Many friends have told me they feel anxious. Seeing that everyone is now competing in the AI space, they wonder: is it still meaningful to learn traditional software development methods? What should new students focus on?

Of course, I definitely recommend learning AI! Everyone knows that the next decade will be an era of AI-driven development. It’s similar to the year 2000, when everyone knew the future belonged to object-oriented programming. Sticking to procedural techniques back then wouldn’t have had much future potential.

I’ve also started my own AI enlightenment journey, desperately catching up on the basics. I feel like I’m being left behind by the times. After a week of intensive study, I realized I’m still a beginner, with only a tiny fraction of understanding regarding large-scale models. New AI software engineering and the classic software engineering I’ve mastered are practically from two different worlds.

When thinking about new AI software engineering, who still insists on writing code manually? The most popular development language of 2023 was English. I simply state my requirements in natural language, AI generates the code, and I just make minor tweaks and integrate it. It runs much better than code written by humans. This will undoubtedly disrupt many traditional software engineering approaches.

file

Many things will naturally be replaced quickly. For example: JetBrains’ ReSharper code analyzer. It used to be a miracle tool—you gave it C# code, and it would scan for practices that didn’t align with best practices and suggest corrections.

The people at JetBrains are probably the most anxious about this: ChatGPT can almost completely replace ReSharper. You can just paste your C# code into it, ask how to optimize it, or ask where it doesn’t follow best practices, and it will fix it perfectly. It can even help you refactor code and fix bugs. I feel ReSharper might be on its way out. I haven’t used it in a long time. With the development experience of Copilot + ChatGPT + VS2022, ReSharper is basically unnecessary. Unless… JetBrains has a wake-up call and starts using AI to rebuild their entire product suite.

This is the new paradigm of software engineering: an AI-driven approach to code analysis. It delivers a dimensional strike against traditional methods based on regular expressions, keyword analysis, and code scanning. Resharper represents the best practices distilled by a team of experts over more than a decade of research. In contrast, AI-based tools can understand virtually any new programming language, mimic its syntax, generate insights that align with those of human experts, and even fix bugs. Their autonomy is so strong that they no longer require humans to predefine rules; they inherently know what constitutes good code and what constitutes bad code.

The Meaning of Learning??

file

So... is there still a need to learn programming?

My answer is: The significance of traditional software engineering has become less prominent, but it will absolutely not disappear.

Drawing an analogy to 20 years ago, when Object-Oriented Programming (OOP) suddenly became widespread, we gained user-friendly languages like Java and C#. However, traditional programming languages did not vanish. In universities, learning C and Assembly remains critically important. Traditional procedural programming is still a mandatory course.

Today, students in university classes learning OOP often think: "What's the use of learning this? AI writes code faster and better."

Of course, AI does write code much faster than humans, but learning manual coding is absolutely meaningful.

Analogous to my experience learning Assembly in university, I also used to wonder: "What's the use of learning Assembly? Isn't it enough to learn a few high-level languages? Nobody uses Assembly to write code anymore, right?" However, precisely because I learned Assembly, I developed a deeper understanding of data segments, code segments, the heap, the stack, Master Boot Record, virtual machines, operating systems, and more. This has become an indispensable cornerstone of my knowledge base.

In 20 years, students may question: "What is the use of learning traditional OOP? It seems almost useless." However, it will become the cornerstone of the software engineering knowledge base of that time. Perhaps in 2040, no one will use C# or JavaScript for development, and everyone will use English to instruct AI for development. But if you understand traditional formal languages and are proficient in C# and JavaScript, your understanding will undoubtedly be more profound than others'.

What Should New Computer Science Students Learn?

What we need to do now is similar to adapting to object-oriented programming twenty years ago. We must adapt to the new paradigm of AI-assisted software engineering.

Twenty years ago, C++ and Java gradually matured, and we all knew that the future of software engineering would be object-oriented. A large number of classic books emerged, such as Agile Software Development and Clean Code. If you had started learning object-oriented programming in the year 2000, you would have been highly sought after.

It is now 2023. Everyone knows that the future of software engineering will definitely be AI-oriented, and a large number of AI-assisted development products have emerged. Therefore, starting to learn AI today will definitely be highly valuable in the future.

So, is it useful to learn old traditional technologies? Of course!

Here is the logic: Learning object-oriented programming does not mean you can skip learning assembly language or C. By the same logic, learning AI-oriented programming does not mean you can skip learning C++.

Are the future requirements for engineers higher or lower?

file

I can answer with certainty: it has become higher.

An excellent software engineer must not only be able to master procedural code, but also understand classes and objects, frontend-backend separation, APIs, dependencies, and packages. Furthermore, they must understand AI to thoroughly investigate complex systems from their root. This has definitely raised the bar. In the future, everyone's productivity will certainly increase, and work efficiency will also inevitably improve. High-end positions will emerge, demanding extremely high standards of human capability. These roles require decades of accumulated engineering knowledge and involve highly specialized and advanced research, necessitating a comprehensive understanding of hardware, circuits, operating systems, procedural programming, classes, dependency injection, components, packages, APIs, and AI.

Conversely, in the future, there will also be countless low-level programmers who do not understand classes, APIs, functions, variables, or objects. They will only use the simplest language to chat with AI and then naively check the AI's output. When it comes to issues involving the fundamental nature of problems, they will be unable to investigate or resolve them. These low-level positions have little requirement for human skill; one can be qualified after just two weeks of training, developing the least valuable things. What is the difference between these people and those who graduate from today's training courses and start writing object-oriented code without having learned assembly language, or future individuals who command AI to write code without understanding object-oriented programming? They are destined to be at the bottom of society.

How Should We Prioritize Learning Focus?

It’s just that the focus shouldn’t be placed on traditional software engineering, much like how my learning focus isn’t on assembly. However, this absolutely does not mean not learning them at all. Rather, while demanding a higher level of understanding of the broader macro-level knowledge, the emphasis should be placed on AI research directions.

For example, allocate 70% of your effort to AI-related fields, 20% to traditional software engineering (object-oriented programming, MVVM, dependency injection, data structures, algorithms, front-end/back-end separation, component-based development, dependency management, package management, operating systems, virtualization, cloud computing, distributed systems, databases, etc.), and 10% to legacy technologies (C, assembly, computer organization principles, digital circuits).