The Mysteries of Computer Science and Software Engineering – As Retold as a 1980s Kung-fu Classic

The Mysteries of Computer Science and Software Engineering – As Retold as a 1980s Kung-fu Classic

As somebody who spent nearly two decades learning martial arts, and as a general fan of nutty 1980s Kung-Fu flicks, I thought I’d draw up an amusing parallel between the martial arts and computing. As with any analogy, the more I bend it though faulty reasoning, the better it seems to fit.

This is a light-hearted piece, but please note the serious message at the end, and as usual, this is my opinion only and not that of my employer!

So, I'm going to retell some of my core learnings through the 1980 film "The Buddhist Fist". It's a great film, if you like that kind of thing.

In this tale, Ah-Shang and Si-Ming, a layman and a monk respectively both learn an elaborate kung-fu style in two halves and the wacky hijincks that issues forth from misunderstandings around linked lists and Huffman algorithms.

Si-Ming, why is it you became a monk?
I don't really know. My Sifu made me one when I was very young.

People misunderstand Computer Science, let’s be clear, it is a branch of discrete mathematics, this is not in question. This means it has deep fundamentals that aren’t just choosing which IDE to develop your PHP in.

However, some people gravitate to academia, they enjoy the research, the endless incense and iron-head technique. They will often never become laymen, and if they do, they’re never unchanged, like David Carradine.

I'm so tired and much too lazy to chase you so come on down here. Or else, I'll pull you down.

Once you've learned the fundamentals and how to apply them, life gets so much easier. Once you've a decade plus applying these secret styles, you'll have an economy of movement that may look like laziness. The best code is the code you don't write! Write little, but with meaning.

What's the matter?
This beastly bull hasn’t got any milk!
You fool! How can a bull have milk?! Only cows produce milk, stupid.
Oh, yeah! You're right.

It's clear from the above, that this poor sap doesn't know up from down! If you don’t teach the fundamentals, expect poor problem solving to creep into your code. Let’s just say I’m happy he didn’t actually attempt to “milk” the bull.

 Si-Ming is clever, Ah-Shang is diligent.
Ah-Shang. I wish you had an interest in Buddha.

But like Ah-Shang, not everybody stays in the research world, but it’s ok, the secular Engineering world welcomes an expert in Buddhist fist!

But what of those warrior monks who do an Artificial Intelligence degree (which are still founded in Computer Science) or another branch off from the fundamentals, is that better or worse? Does that mean that Si-Ming gets the better deal by learning more of the science?

Actually, the Buddha Palm and the Buddhist Fist have the same origin.
Left Hand Buddha Palm, Right Hand Buddha Fist!

All branches of Computer Science share a common root, martial arts aren’t too different (especially Chinese, Japanese and Korean, they claim their own provenance but really there’s a lot of commonality).

Since both your characters differ, I decided to teach each a separate style.
Sifu. Does that mean that it's not complete?

No, there are core fundamentals, that you must learn, then you may branch off, no one is better than the other. Do not try to be an expert in all styles, but don’t stop learning either, you must keep changing, flowing like water, or beer, or gin. Be of the gin, but not in the gin!

Ah-Shang. Your Kung Fu has improved a lot.
Thank you Sifu, you taught me. I'll practice harder!

On the day you leave your University graduation ceremony, passing through the Dragon-Tiger gate, having burned the Nando’s Logo into your forearms (product placement is key!), you think you’re an expert… But you must keep learning, through study and practice.

You think I'll lose to you?!
It's not strange, one can defeat one self.

You need to keep current, don’t be over-confident, because there’s an upstart around the corner who thinks he has the Eagle’s Claw all figured out. If you keep current and keep using your brain, you’ll be able to take on all comers!

 My friend. Do you want your fortune told? It won't cost you a single tael! -- Just ignore him.
My friend. I'll tell you your fortune. -- No thank you.

Many “tastemakers” in the industry will try to sell you the future (either through pushing adoption or actually trying to sell you licenses for the next big thing). They have their own vested interests.

 Now you're check-mated!

This fine purveyor of Blockchain Cloud-First Machine Learning Hyper Architectures will be singing an octave higher tonight.

Sometimes, you'll have to deal with oily ticks like the fellow above. Do not give them the time of day. He's probably after selling you a huge wodge of IBM shovelware.

Conclusion

The monastic practice of Computer Science and the secular application of Software Engineering have common roots. You must learn the basics and that is not a fast process. It’s easy to be seduced by changing paths, but your core understanding is the most important part.

The path to senior Software Engineer appears to be strewn with temptation, confusion, poisonous hunchbacks and various other things too subtle to explain to you sorry lot. But you must stay true!

By only learning the thinnest veneer of engineering before throwing youself out there to the wolves, you’re putting yourself in a weak position, because you don’t have the correct stance *ahem* fundamentals to be able to adapt. Also, this guy will attack you, I do not know why.

This is a C++ developer. Notice the murderous intent, hunched back and flagrant over-acting. Dealing with C++ is another style all of its own, it's not for your eyes.

The Serious Message

Software Engineering and especially Computer Science are going through a real crisis, just like the martial arts are. I’ve been to some modern martial arts clubs and they’re frankly, a disgrace… They rush to get people to pay top dollar for contracts promising a black belt in 18 months or so. This is not only insulting to those who spent decades getting to this level, but it’s also faulty. The (genuine) martial arts have a lot of body mechanics to them, Newtonian physics, as well as other qualities. This cannot be learned in a matter of months under a contract.

This is what is happening with software engineering, exactly what is happening. If you learn the engineering part quickly, without the science, you are left with a hollow replica… and here’s the kicker, people say to me, expecting me to agree “I bet you don’t use your degree!”, and I reply “yes, I do, every day in fact”. The heart of the matter is, Computer Science has extended slightly, but the fundamentals have not changed. However, Software Engineering, the application of this science (engineering is by definition an application of science) has changed several times over and will continue to do so.

So, do not underplay the importance this part of your education would have on you and your team.

Addendum to Address a Pertinent Comment

A very shrewd cookie called me out on a very important ambiguity in my writing, which I will attempt to address below...

You add to your Computer Science fundamentals by learning Software Engineering principles, the Computer Science is the yolk, the Software Engineering the white of the egg. The Software Engineering isn't a subset of the yolk and the Computer Science isn't a subset of the white, they coexist.

Then you have to learn learn to fry the egg; that is practical application and if you keep frying those eggs, you may make the perfect omlette. If you just have the white, the egg is bland, so you need the yolk! Unless you're making meringues, but I'm not Mary Berry.

This is important, as without Software Engineering principles, you stay in the real of the academic. Enterprise scale Version Control (i.e. being able to use Git branching), Continuous Integration/Delivery etc. these are all the additions to your Computer Science fundamentals.

Then you must put it all into practice. A famous Filipino martial artist once approached Loren Christensen (martial arts author) and told him the secrets of the martial arts, he was so eager to hear this deep secret, but was disarmed by how simple it is, and it truly is the primary key:

If you practice very hard, you will become very good.

But, there's another quote in martial arts that says:

Practice doesn't make perfect. Perfect practice makes perfect.

Practicing something with poor fundamentals can actually result in you becoming worse. This is how we end up with cowboy coders who think they're Linus Torvalds.

And there it is, the secret to martial arts and also becoming a master of software development: internal skills (Computer Science), external skills (Software Engineering) and finally, lots of practice (Engineering put into practice, i.e. cracking open an IDE and actually doing with a particular technology). I have no further insight to give.

要查看或添加评论,请登录

Jeff Watkins的更多文章

社区洞察

其他会员也浏览了