2025-12-16 05:38:07
Suwako
rant

【Skills】Self-Taught vs University Degree

This article might touch on some delicate topics, so if you have a university degree and are easily offended, please leave this page right now.
Otherwise, your day might be ruined.

A common theme in my articles is that the fewer tools you have, the better programmer you become.
This applies not only to practice but also to theory.

Background

I myself do not have a university degree.
I dropped out of middle school and started working at age 15.
My first company promised to train me for three years, then send me to a vocational school to obtain a degree, and afterward hire me as a full-time employee.
Everything went according to the promise—except for one thing: the company never actually trained me.
They just handed me real projects and otherwise left me completely alone.
When I asked for help, they told me to read the manual, search online, or that I was bothering them.
Normally, you'd think someone would get angry and quit, right?
But that's not what happened.
Instead, I found the right tools myself, read the manuals to learn how to use them, and put them into practice.
As a result, they were training me after all: in how to think like a programmer.
They just weren't teaching it directly!

In 2007, I was assigned a web-based project to manage hospital patient records and report when emergency calls came in.
For emergencies, performance was critical; for patient data, security was essential.
After researching, I chose the most common web development stack at the time: Apache, PHP, MySQL, and Linux.
I thoroughly read the manuals for Apache, PHP, and MySQL.
I didn't need the Linux manual, as I'd already been using it for 10 years.
Then I started working on a PC with three monitors: one screen for code, one for the browser, and one for the manual.
Four months later, I delivered a fully completed system, including thorough testing.
The company was happy to deliver the product, and the hospital was happy to get something immediately usable.
I continued handling projects after that, and my skills in PHP and MySQL kept improving.

In 2012, I graduated from a two-year vocational school fully paid for by the company (no debt or loans), and was assigned to a new project unrelated to web development.
Specifically, it was a tool to monitor and manage surveillance cameras at a famous university.
This time, it involved a desktop application for the client and a server-side project.
So PHP couldn't be used.
The only other languages I knew at the time were C++, C#, and Java.
After researching each, I couldn't figure out how to run compiled .jar files in Java, and C# was Windows-only back then, so it was out from the start.
Both also required huge IDEs, and just looking at screenshots made me confused about what was what.
C++ had complex syntax, but compiled code could be run, it worked on Linux, and no IDE was needed, so I chose C++.
It was much harder than PHP, but with manuals and creative thinking, I got it done and learned a lot of low-level concepts.

C++ also became my gateway into game development.
Right after the above project ended, I started game development on the side.
Ironically, around that time I started using Windows more and began using Unity and its C# (which was Windows-only back then).
At the same time, I learned OpenGL with C++.
I made decent progress in Unity, but it wasn't as fun as C++.
A year later, I got involved in game development for the Wii U and Nintendo 3DS.

People Without Degrees vs People With Degrees

The point of the story so far is that because I didn't have a degree, no one could teach me everything.
That forced me to forge my own path, enabling creative problem-solving that degree holders would never think of.
This is the foundation of my current way of thinking: doing things myself without relying on centralized solutions.
That's why I've rejected AWS, Cloudflare, Ruby on Rails, JavaScript/Node.js, vibe coding, cloud storage, and every other trend.
I did adopt blockchain, but only for receiving donations or as a payment method for services—nothing more.

From what I've seen directly in the workplace, when talking to degree holders, there's almost no difference besides appearance.
Skill level, favorite languages, frameworks, understanding of performance or security (both basically zero), and even political views are all the same!

When I have them build software as a programming leader, they skip every process I went through.
Instead, they pick a framework taught in school, initialize it, import the necessary dependencies, and copy-paste code from the internet.
Then I ask questions like, "How does this login screen work on the server side?" or "How do you verify that the information entered in the form is truly valid?".
The answers are either "I don't know" or something extremely foolish.

In most cases, it's "I don't know.".
Even when they do know, it's completely wrong—some couldn't even distinguish between sessions and cookies.
There were people who didn't even know which one they were using and could only answer, "The user enters username and password, clicks login, and poof, they're logged in.".
The kind of answer I expect is something like: "User enters username and password and clicks login → Server checks DB to confirm user exists, fields aren't empty, and password matches → Generates a token, sets a cookie with expiration, etc. → Redirects to dashboard.".
But I never got such an answer.
The only times I heard real knowledge were from older people with many years of experience or those who learned everything self-taught.

Sure, they can make things that work, but they don't understand why it works, how it works, or what the server is doing.
Why is that dangerous?
A few months later, something they built stops working, and the customer gets furious over massive downtime.
I instruct the degree holders to fix it as quickly as possible.
Hours pass with no resolution, and when I ask why, they say "some other package can't be found.".
When I ask "What's a package?", they act shocked that I don't know.

In reality, a dependency in the NPM they were using—a further dependency of a dependency—had the 11-line left-pad package removed, causing the whole thing to collapse.
Even though I had almost no JavaScript experience, I fixed it in 10 minutes.

In conclusion, those of us without degrees think for ourselves and solve problems creatively.
Degree holders, on the other hand, just follow instructions given by teachers.
No creativity or critical thinking—just "use this tool and it's done.".
As a result, the current generation of programmers can't actually program; they can only glue parts together.

Differences in Mindset

The correct mindset is: "I have this programming language, this target platform, this graphics API. How can I use them to draw pixels on the screen?".
But now it's: "This game engine supports all platforms. How can I master the editor? Should I add more tools?".
For web developers: "I have this language, this database, this HTTP server. How can I display data on the page?" has become "I have this package manager and this framework. Should I add more dependencies?".
This is the big difference between people without formal education and those who completed a 4-year university program.

Experienced programmers, regardless of educational background, immediately recognize that the former is healthy and the latter is unhealthy.
The problem has shifted from "how to program" to "how to use this language/tool/framework/engine.".

Frameworks, engines, tools, IDEs, and many programming languages are designed assuming a specific workflow.
If you have a different workflow, you can't use them.

That's why I've become proficient in C, C++, PHP, Go, and assembly language.
C, C++, and assembly are the last general-purpose languages that don't try to become ecosystems (though starting with C++20, the C++ community seems to be heading slightly in that direction).
In PHP and Go, the ecosystem is optional.
However, many who started PHP after 2012 strongly push it, and those starting after 2017 don't even know you can write PHP without frameworks or Composer.

Go developers are relatively free from the ecosystem, but it's concerning that more Go job postings require Gin (a Go framework), Gorilla, or Fiber (router dependencies).
Ecosystem thinking is being forced onto Go—by companies, not individual developers.

Looking at job sites, PHP is synonymous with "Laravel," "CakePHP," or "Symfony"; C++ with "Unreal Engine" or "Qt"; Java with "Spring Framework"; JavaScript with countless frameworks like "Node.js" and "React"; Python is synonymous with "Django.".
C# has been synonymous with ".NET Framework" from the beginning, and you could say C# started this harmful trend.
Even beyond languages, there are almost no infrastructure jobs that don't require AWS, Cloudflare, or Docker/Kubernetes.
It's clear that bloat, not knowledge or skill, is being valued.

Only C and assembly have survived in the job market without ecosystems, but for some reason they're often lumped together with Python.
Rust or Zig jobs probably won't appear until large mainstream frameworks are created for them—even though the languages themselves already have ecosystem-like qualities.

This emphasis on bloat is why current programmers are dissatisfied.
They're spending time on unnecessary complexity and fighting tools instead of doing interesting things or solving real problems.

This website itself runs on a PHP framework called "Little Beast," but it's one I wrote myself specifically for this site.
That's why I fully understand what it does and how it works, and it never bloats.
That's why I call Little Beast an "anti-framework"!

Why Companies Do the Opposite

Even more surprising is that the job market encourages it.
Those of us with many years of experience get rejected en masse, while degree holders get hired by big companies without issue—and at high salaries.
It's ridiculous, but from the company's perspective, it's understandable.

HR personnel are often not programmers—just ordinary salarymen.
Managers prefer subordinates who are predictable and replaceable.
If hundreds of candidates have the same skills, they can easily replace someone with another person who has the same skills for half the salary.
Schools teach obedience.
Obedient employees do what they're told without question, stay in their comfort zone, and don't even try other areas or languages.
They don't even program with known tools on weekends!

Actually, the HR manager who hired me at my current company is also a programmer and tech lead.
Without him, I wouldn't have been hired!
Looking back, in every company I've worked for, the HR person was a programmer or system administrator.
When it was a regular salaryman, I was rejected immediately, either after one interview or without even being invited.

On the other hand, people with self-taught skills are the most valuable in the long term, but hiring costs are high, and once their code is in production, replacing them is difficult—sometimes impossible.
Executives hate that.
They have to keep paying high salaries, but those people also generate the most revenue.

It's different at 076 Studio.
With no sponsors or investors, and no income besides saving my own salary, I make the games alone.

That's all