This is a short (8m clip) where John talks about Python, C, and Go. He hits on a couple of key points:
Python is great for writing stuff quickly, but loops are really slow, so anything that is computationally intensive is relegated to C++ code behind the scenes.
easy to read and maintain is the important part
simple languages (like C and Go) are easier to read and maintain
One thing I don’t quite agree with is using the same language for everything – perhaps on larger teams this is more beneficial. I regularly move between C on MCUs, Go for edge/cloud, and Elm for frontend. Each of these languages excels in what it was designed for and complement the others well. Skills learned in one language complement skills other langues – programming in Elm will make you a better C programmer.
Here are some additional thoughts on programming languages in the beginning of this clip:
Quotes:
no one is good enough (with C/C++) to ever avoid shooting themselves in the foot – if you write enough C code, you’re going to shoot yourself in the foot.
Garbage collection is a very great thing for the vast majority of programs. It’s only when you get into the tightest of real-time things when you say that garbage collection has more cost than it has benefits. But that’s not 99.9+ % of all the software in the world.
So much of programming is not the language itself, but the infrastructure that surrounds it – all the libraries you can get, the ways you can deploy it, the portability it gives you.
50ms response time makes apps feel amazing
This again emphasizes that if you are trying to wring the last 5% of performance out of a program, then C++ or Rust probably makes sense. Otherwise, the average person will probably be more productive in a language like Go.
Another way to look at this is to ask the question – what is my primary constraint?
getting programs written and deployed?
or CPU performance?
If #1, then Go makes sense. If #2, then C/C++ or Rust may make sense.
With Linux edge systems, you typically have 1GHz processors, at least 128MB of RAM, and GBs of flash – this is plenty of resources for most edge applications. In the cloud you can run a lot on a $5/mo Linode shared server. With IoT systems, the performance constraint is typically the network bandwidth. Unless you are at Google scale or doing some computationally intensive application, then we are in an era of post-scarcity for computing resources. Our biggest constraint is often getting things done.
I listened to this one – I don’t use Python a lot but I am interested as Python is so popular. One thing Guido said was most Python libraries that do any heavy lifting are written in C. The Python interpreter itself is also written in C. Data scientists and AI engineers like using Python as a “UI” for these C libraries as it is much easier to write stuff up. But implementing new low-level algorithms requires you to drop back into C.