It makes sense because computer scientists invented computers, so anyone
who wants to program one needs to have the same knowledge. Right?
I mean, look at software you’re using right now. Mac OS was invented by
a computer scientist named Steve Wozniak, Windows by one called Bill
Gates, and GNU/Linux by Richard Stallman and Linus Torvalds respectively.
As a Python programmer, I’m aware that Guido is a computer scientist who
invented the language and I’m glad that he was able to come up with such
a language thanks to his computer science education.
Computers as we know them today would not exist without CS education but
should everyone who wants to tinker with computers be forced to go through it?
The true purpose of Computer Science
Do you notice anything particular about the software products above?
If you don’t, then let me tell you.
Building an operating system requires vast knowledge. You need to
understand computer organization, data structures, algorithms,
probably some electronics, assembly language, and I don’t know
what else because I don’t know how to build an OS.
A programming language like Python requires knowledge about
compilers, language design, parsing, finite state automata,
and I don’t know what else because I can’t build a language myself.
So, am I a dumb person pretending to be a programmer because I
can’t code my own OS or design my own language?
Maybe, but check this out. Why did these people create OSes and
languages anyway? Why did Guido decide to create Python in C instead of
allowing us to write code in C itself?
The goal of computer science is to teach someone how to build stuff so
that other people don’t have to.
Forcing Computer Science onto people
Let’s take Calendly for example. It’s a web app that allows people to
schedule appointments easily. How much computer science is needed to
build such an app?
You might argue that Calendly uses arrays and hash tables behind the
scenes, so, obviously any programmer who works on the backend must
have gone through 4 years to get his CS degree or his code would be
considered heresy.
But did the programmer create their own arrays and hash tables from scratch
or did they use what the language designer provided?
Take a look at Python for example. To use an array, I do this:
my_stuff = ['something', 'another thing']
To use a hash table:
appointments = {
"2022-09-02": ["meet bob", "install openbsd"],
"2022-10-12": ["meet alice", "install systemd/linux"]
}
Maybe I want a simple queue that users can easily pop
appointments from:
from collections import deque
next_appointments = deque()
next_appointments.append('something')
next_appointments.popleft()
How much computer science is needed to use these data structures?
Do you really think that the Python language designers would go through
the trouble of implementing efficient data structures if in practice
everyone would be required to implement their own?
Why is it then that anyone who wants to get into programming is forced
into computer science?
Personally, I love programming but I don’t care about computer
organization, electronics, language design, or any of the other low
level stuff. Some people love them and I respect that.
But why should I be forced to like the same things that computer
scientists like? Linus Torvalds for example, doesn’t know how to install
Debian or how to code a website but he believes that anyone who codes in
anything other than assembly or C is a brainlet who shouldn’t be called
a programmer.
Why can’t we all get along? The majority of Linux users use it to host
web servers. Meaning that Linux would never have gotten this popular
if web developers didn’t exist. And yet, a web developer is considered
inferior to a kernel developer for some reason.
If I have a brain tumor, I won’t know about it unless a general
practitioner is able to detect it. After that, he will refer me to a
specialist who know how to perform brain surgery. At this point, I doubt
that the brain surgeon would tell me that the general practitioner is
a dumbass who shouldn’t call himself a doctor. This kind of behavior is
only acceptable in the tech industry.
I suspect that if programmers had to use C or assembly to build web
apps then tools like Calendly would never exist and computers
would never have improved to the extent they have so far.
There’s a reason why Rasmus Lerdof used C to create PHP.
The goal was to write C so that other people don’t have to.
Great software written by non computer scientists
It’s a given that CS is needed to write a compiler or other tools
that allow people to code at higher levels of abstraction.
But what about software that don’t operate at such a low level?
Pretty much any web app you see doesn’t require any CS. The exception
is when the app starts receiving 1 billion requests per second, in
which case a computer scientist needs to step in to design a language
optimized for this type of workload. Much like how Go was written to solve
scaling problems at Google.
Does this mean that non-computer scientists can only build trivial
software that shouldn’t be take seriously?
Look at the figures. Web apps make many more millions in revenue than
kernels and programming languages. It’s clear that such software should
be taken very seriously.
Now let’s look at two pieces of software that could be considered
complex enough:
- Django. Written by a musician and a student.
- Ruby on Rails. Written by a freelancer with no CS education.
I consider both of them to be of top quality on par with many
other complicated projects like the Linux Kernel because they’re
both used to solve problems worth millions of dollars. Shopify
for example, would most likely not exist without RoR.
The creators of Django lacked so much CS knowledge that they
were unable to write an optimized parser for the Django
Template Language. However, that didn’t stop thousands of
companies from adopting the framework because the rendering is
fast enough for the majority of workloads.
Stop the elitism
Programming is easy, especially web development. It’s so easy
that people (I suspect computer scientists) try hard to make it
look hard. For example, instead of adding text in the <title>
tag of
an HTML document, in some setups, you first have to install a
package called react-helmet that will allow you to edit the
<head>
part of your javascript rendered HTML document using
some kind of Domain Specific Language.
That’s why there’s nothing to be elitist about. If any community
should be elitist it should be the brain surgery community but
judging by the content on online forums, they seem to not be.
Most computer scientists sit on their asses doing code review
instead of coding and yet they act like gods.
We need to understand that different programmers are good at
different things and show respect to everyone. If someone
doesn’t want to learn how to build a compiler and has no
interest in learning such stuff, then there’s no need to
berate that person.
Leave the computer science to people who need the knowledge
in their day-to-day work. There’s nothing worse than having to study CS
and then get a job writing HTML, CSS, and Javascript to build
web forms that steal people’s information.