Assembly: An Outdated Course in CS

Recently, I had the chance to peek at a university computer science program (at my local university), and I was a bit surprised — not much has changed since my time, which made me feel a bit sad and wonder. You see, I work with young graduates, and essentially, they need to be taught everything. They don’t even know half of the stuff a developer needs to know in order to get or do the job. Mind you, I work for a company that is pretty far from the technological bleeding edge. And even then, most students entering the workforce don’t have enough skills and knowledge for the job, so they have to learn on the job.

There is nothing wrong with learning on the job, however, I do wonder: why do young people pay tens of thousands of dollars only to be taught outdated subjects, skills, and practices? The traditional answer from any CS university department would be, “We are teaching science here…,” but that’s not entirely true. Many of the courses are not focused on science; they are focused on software development. Those courses will teach you how to sort an array in five different languages — that doesn’t seem very scientific to me. Ironically, these are the courses that will get you a job or at least give you the chance to learn on the job, because without that knowledge, no one would even take a chance on you.

Let me pick one course that really grinds my gears: assembly. This particular course is horrifically outdated. Twenty years ago, when I was studying at university, the assembly course was already old and riddled with generations of mistakes that the professor refused to correct. Now, 20 years later, the same nonsense has only gotten worse.

First, the course is taught only in Microsoft Macro Assembly (MASM). So you must get Windows and install gigabytes of software, libraries, and other stuff just to run a simple, one-page assembly code that wouldn’t even add up to a kilobyte once compiled. If you are running Mac or Linux, well, you’re out of luck. The course guide recommends you use virtualization to run Windows and install all the necessary software. The course suggests a couple of alternatives, such as using NASM, which will not be supported or explained by the teacher, or using a Docker container, which is created by students, untested, and once again not supported by the teacher. Remember, you’re paying for this! Isn’t it marvelous?

Why can’t the software be organized in a simple VirtualBox image or, better yet, a Docker container that contains all the instructions, examples, and runs on any OS? Is a student taking this course supposed to learn how to install Windows and set up Visual Studio with all the dependencies? It took me nearly five hours to get everything installed and configured, and I’m no stranger to this. Let me say, teaching students how to install and use virtualization is far more useful and important than teaching them how to install Windows and Visual Studio.

Second, why do computer science students need assembly? Let me be blunt: I learned it, passed the course, and forgot it, never to remember it again. I don’t think an assembly course is needed for a general-purpose computer science degree. There’s no use case. The industry is working towards replacing the C language, and no one even considers assembly for any meaningful work. Yes, there are cases where people are still using assembly, such as Steve Gibson. Perhaps CS students with a cybersecurity focus must know/understand assembly, or perhaps video game developers might find assembly knowledge useful, but for most, learning assembly is a waste of time.

Instead of an assembly course, perhaps students should be taught to use VCS like Git. Git is useful, and its design is fascinating from a CS point of view (graph theory and such). Another useful topic would be build systems, such as Maven. It’s hard to imagine a company that doesn’t use a build system for continuous integration and delivery. Unit testing is another good subject that is both useful and applicable to any language. Process automation is yet another important subject. From a programming perspective, software design, functional programming, and refactoring are much more valuable knowledge than assembly language. In fact, all of these topics could be combined into a highly useful course instead of learning a useless assembly language.

Ironically, computer science programs keep teaching the same old and sometimes flawed material without any regard for the current state of the computer industry. It’s quite interesting to observe that only the professors who have worked in the industry understand this and organize their courses differently — I’ve seen it! But they’re 1 in 10. The rest teach outdated material from papers written 30+ years ago…

The Last Journey

Immortality is not an option, so we must face the music sooner or later. On a grand scale, the life of a person is not very noticeable; thousands of people embark on their last journey every day. Yet, those closest to us feel particularly special. I’ve been told that everyone processes such an event in their own way, and I’m no different.

For some, the journey starts abruptly, while for others, the beginning stretches out, like trailers in a movie theater before the main show. The prolonged ones seem to be the most difficult. Horrible pain and suffering, without even a glimpse of hope. Can you imagine being sick—having an endless flu, a fever that never breaks, constant headaches, muscle pain, coughing, and a runny nose? And along with all of this, you know, you understand, there is no getting better. There is no recovery. This will end in only one way. Now, multiply that pain several times over.

Departures are always sad. We miss loved ones, even when they embark on a great journey, yet these departures aren’t typically accompanied by excruciating pain that lasts for months on end. After all the pain, suffering, and goodbyes, the journey begins. So shouldn’t we rejoice that our loved one has finally embarked? Shouldn’t we feel some happiness, at least for their sake? Not for our own selfish feeling of being left behind, but joy for their journey—for their release, for the end of their suffering, when nothing more could be done. I don’t know the right answer. I just feel serene, with a trickle of sadness and joy. In my mind, it is not about me; it is about them, wherever they are now.

Rest now, Aunt Zoya.

Cycles, Life & Death

Everyone is different; all of us mutate slightly in different ways, and we don’t all come out identical—well, at least most humans don’t. This bundle of differences is called humanity. I guess that’s what makes it fun—a randomness factor. For some reason, I’ve never liked cycles. In a way, cycles annoy me. The irony is that over time I started to embrace routine, but not for the sake of it, but rather due to an aging body.

20 years ago, I got a gig at a car parts factory, working the night shift, packing plastic parts and cleaning floors when it was slow. The job sucked; I didn’t like working nights and going to sleep when everyone was out and about. But what bothered me the most was the job itself—the endless repetition of the same steps, over and over again, all night long and the next night and the next. It seemed like an endless cycle of doing exactly the same things over and over again.

Although I enjoy video games, the reason I don’t tend to play a lot (besides not having enough free time) is the repetitive cycle. Yes, different cycles and repetitions with a different combination of red, green, and blue on the screen, yet with sufficiently different cycles to get me bored or annoyed. There are only so many times I can go on a quest to kill 10 boars or whichever virtual animal is demanded by a virtual quest giver. Now I’m not complaining about games; I do enjoy them—I played Diablo repeatedly—I just want to point out my own personal mutation for lack of a better word.

Life itself seems annoying; it is repetitive cycles with a different given at each new start. You are 10, so you need to do this and that. You made it to 20 – education time, 30 – family time, 40 – wealth gathering time, 50 – health…, 60 – retirement… and so on. The illustration is crude but has some merit to it. Does it have to go that way? Well… no. There are different ways life can be played or be played out. Hey, remember: “live fast, die young”? – it is a viable option too. If I had a choice, I would probably go to the other extreme; let’s do the whole life thing for a few hundred years and then decide.

Human time constraints seem to put us into well-defined, optimized, and seemingly inescapable cycles. Each cycle presents its challenges, and there’s never enough time. Ricardo Semler had an interesting idea about working less and spending more time on ourselves early on and not waiting for retirement when the body is broken and tired. His arguments and ideas were very convincing! As much as I would love to implement that, I do not live in theory; bills are due, time is running, and food should be on the table. So cycles continue… meanwhile, we miss moments, and before you know it, people near and dear start to die off.

Those endless cycles of being busy, accomplishing things that seem meaningless now. If only we had more time, more time to make educated choices, more time to figure out priorities, more experience to understand what’s important to ourselves. Perhaps one day we may get more time, but for now, the only thing is to dispense it conservatively.

2 Years Since the Full-Scale Invasion of Ukraine

It’s hard to believe it’s been 2 years since the full-scale invasion of Ukraine. I figured that after the initial shock, the West would ramp up military support and quickly deal with the occupiers. However, that didn’t happen. Moreover, Ukraine is once again at a crossroads, with Iran, North Korea, and China providing support/weapons to the occupiers, while Europe continues to drag its feet, and the USA has fallen into inaction. I think the world is learning from this, and the unfortunate lesson is: the West is perceived as weak and easily disrupted. As long as a dictator can hold out, lobby, and flood the media with disinformation at comparatively low costs, any kind of crime will go unpunished.

Last year, Ukraine performed a counter-offensive. While expectations were sky-high, the results were underwhelming. I can’t help but wonder: how exactly was Ukraine supposed to perform an overwhelming counter-offensive in the first place? Let me break down my confusion: first, the counter-offensive was heavily advertised as if it were some kind of Super Bowl commercial at the end of times. I really didn’t understand the purpose of that. Then, Western weapons were delayed but finally arrived:

  • About 14 British Challenger 2 tanks
  • About 31 American Abrams tanks (but downgraded in capability)
  • About 80 tanks provided by various countries were Leopard 2s
  • About 88 tanks provided by various countries were Leopard 1s

In total, slightly over 200 tanks, considering I didn’t mention other variations of the Leopard 2, and I don’t consider the French AMX-10 RC as a battle tank. There was no aviation, no ATACMS, and a limited supply of long-range missiles such as Storm Shadow (Germany is still withholding Taurus missiles). Now, the list of shortcomings can be continued, but the picture is quite clear: 200 tanks versus fortified defenses and a few thousand Soviet tanks. Does that make any sense? But what makes me laugh (sadly) is the fact that Ukraine seems to receive, in bulk, only old tanks — for example, the Leopard 1. Really? Yes, it was modified in the ’80s, but… 88 tanks that were designed in the late ’50s.

So, to sum up my confusion: we give Ukraine old equipment and/or modern equipment in limited quantities and expect overwhelming results? I don’t know how this computes in anyone’s head. I really hope there is a winning strategy and that the West will eventually start acting as if it means it.

What gives me hope is the Ukrainian people who continue fighting despite the overwhelming odds. While some are at the front, others bring supplies, build drones, design new equipment, and more. This makes me believe that, at the end of the day, the forces of light will prevail. Ukraine will defeat this horrible evil.

Israel

I’ve been to Israel a couple of times, each time enjoying the country in different ways. In the last 75 years of Israel’s history, it has managed to build itself literally from the ground up – from a desert into a modern country. This achievement is quite commendable and hard to imagine, especially when some countries with much longer histories and larger resources haven’t managed as well.

On the other hand, over the last 75 years, its neighbors have prioritized violence, murder, and terror. Can you imagine living your entire life thinking only of killing your neighbor? They say “freedom fighters,” but the last election in Gaza was 18 years ago – is that freedom? 75 years of the same – hatred, violence, terror. Kids are taught to hate, teens to kill, and adults to support a system that leads nowhere. Yet, judging by the news, some people around the world think it’s a good idea.

I guess people on the streets want to see what they want to see, so let me tell you what I saw. The last time in Jerusalem, I was carelessly walking through the old market. There were a bunch of shops where Arabs were hustling. I was standing outside one shop, looking down the street. My eyes met the eyes of a kid who was standing outside yet another shop. He looked at me directly and made a throat-cutting gesture with his finger.

Ukraine is fighting for 7 months now

Couple of days ago, putler announced “partial mobilization” of 300 thousand men. In reality it is a full mobilization and numbers looking towards a million. It is not a good news for Ukraine, but let’s not forget, at the beginning of the war, situation was much worse.

As I was thinking about the mobilization, I decided to find a trailer for a documentary and it brought back memories of how fearlessly and courageously Ukrainians fought and continuing to fight. Mobilization will not help putler, it will not save anyone or anything, just one more stop on the way to hell.

Premature optimization, value and waste

Ah, premature optimization, every developer sooner or later hits that. You optimize code, iron it out so there are no extra cycles, no extra memory or what not and not terribly long after you have to take that carefully tailored code apart, just because a new requirement came in. Worse yet, the realization that the optimization was useless in the grand scheme of the app, yes the app works more efficiently but it does not affect anything at all. Some might be proud of the craftsmanship, others might be disappointed with the waste, in any case I’m not here to judge.

I am here to share a story about premature optimization but at a much higher level – a feature level. A few years back when I started writing my app I wanted it to have a feature, let’s call it “frequency determinator”- feed data to the app and it can determine how often an event occurs. In my mind, it was very cool to feed the app data and automagically determine a pattern. Well, I started with the determinator code, it was simple but working. I said “great, it is time to apply it to real data that I have”. But there was a problem, I didn’t have an app, it was just code for frequency generation, I would like to be able to upload data from my phone and see the magic. Ok, no problem, I thought to myself, I just need an UI. I wrote first version of UI, which looked very basic and was incredibly confusing to use at times even to myself. So I rewrote it, added few features, just so the app can be a bit more useful to me. I thought to myself: “well, now that I have UI would it nice to have this and that, I’ll hook up frequency determinator in next little while”. I showed my app to a friend but UI was still confusing. Ok, no problem, I rewrote it again and added more features. Since I already had some data in the app, it was becoming more and more useful. Along the way I did some more refactoring, added just few more features, changed the UI a couple more times and the app was shaping up more and more. I was happy, the app alleviate big chunk of my anxiety and with each new feature, it was becoming more valuable and refined.

Is it there yet? Nope, I still need to rewrite the UI, since there is lot of room for improvement in usability. I can definitely use couple more features and some additional features that I believe can reduce some of my anxiety. So when is “frequency determinator” coming in? I don’t know! As I was using the app, refactoring and adding features, I gradually realized that time for “frequency determinator” hasn’t come yet. There is no need and from the feedback I got, it might not be ever needed. Something that looked like great feature, a centre piece of the jewel, turns out otherwise. Once you use the app, you realize where the value is for you. Once others use the app, you see move value around. The value doesn’t exist in vacuum of your own ideas, value only exists when someone points to it.

So, what now, stop wasting time and start looking for value? I wish I can say that but in reality my ideas of “frequency determinator” kicked started initial development. I might not have started writing the app without believe that “frequency determinator” will be the key to solving my problems. So is there a value in a waste? I believe there is, we “waste time” but because of it, we come up with ideas. I think wasting time looking at the sky or laying around on the coach is actually a good thing. But nothing will come out of waste alone, entertain ideas enough, build something, use it and see if the value is there for you.

Moving forward, Jobs and Morning routine

I figured to share few thoughts that been circulating in my brain for a while…

When you are looking for a job, don’t spam your resume to every possible site unless you are starting at ground zero. It is counter productive and might make things worse. You should be sending/applying to jobs/companies where you want to take your career or expand your knowledge. If you don’t have a list of companies, find a career marketplace with narrow focus, for example dice.com – marketplace for IT jobs (there are more out there). It is imperative to operate in simple yet effective cycles: understand if there is demand for your skills, find what you are lacking, learn it (at a basic level first) and apply, if nothing comes your way, repeat the cycle again. Some companies are looking for specialists, others willing to take a chance. Important note here is: if you are not investing into yourself, why would anyone else? Take special care for people and companies that are willing to give you feedback. Lack of feedback is the worst thing that can happen to you, yes worse than rejection! Without feedback you don’t now where to go and what to improve. Lack of feedback is very taxing mentally, you might feel worthless and that might lead into the more dangerous state of physically stopping to “moving forward”.

Learn to have a morning routine, when you take 20 minutes to learn. Why 20 minutes? Because it is more than 15 but less than 30 – it is a brain hack. The idea that “I’ll study on a weekend for a few hours” is a false one – it will not happen, trust me, it is proven empirically. If you are not use to studying for 20 minutes, you will NOT be studying once per week for a few hours – your brain is more inventive than you might suspect when it comes to “how to get out of this?”. Yes 20 minutes isn’t much but that’s starting point and you will be surprise how much stuff can be done in just 20 minutes of focused work. More over, 20 minutes every single day stacks up! You will be pleasantly surprised by the progress. Next, expand 20 minutes to whatever you can afford (25,30,40+). It is worth remembering that only you, yourself can increase your own value. Don’t expect companies to invest into you unless you are working at a good company. Even then the company will train you in whatever the company needs, which might not align with your own plans. Remember: if you don’t want to invest into yourself, why should anyone else invest into you?

Nazi Russia

Finally after several days of shock and dismay, I can write, just not sure what exactly to say. If you asked me a week ago: “would Russia attack Ukraine?” – I would have answered: “no way, never gonna happen!” – Obviously I was wrong. I’m not a history buff (also I’m not a professional writer so excuse my poor writing), but Russia’s action sure shit looks like Nazi Germany at the beginning of WW2 – same pretexts for invasion, same strategy.

I’m honestly lost for words… my grandfather fought Nazis (Russian side) and “lived to tell about it”. He was in Airborne and went all the way from Leningrad to Europe. He didn’t talk about the war, it seems that people who do the fighting never talk much about it afterwards.

My mom is a wise person, almost 20 years ago, when she saw Putin rising, she made correct decision, she said: “you are not staying in this country”. She prepared everything and we left. As I was growing up, I somewhat poorly followed events in Russia but each passing year, it was becoming more and more clear – Russia is going backwards in time and off the rails. Business were taken away by Putin and his gang, news become more patriotic and idiotic, freedoms taken away, journalists who asked one too many questions killed or jailed, people intimidated by “internal security forces” and/or jailed/killed and on and on.

So is it surprising to see Nazi Russia? I guess not. I guess this is how it works, this is the finale – mad king with a gang of yes men and oppressed population.

Fake TIME's cover photo of Putin with Hitler's moustache ...

Goodbye TDK SoundCube

It is funny how things workout and sometimes don’t workout in life. A few years ago, I participated in a hackathon, it was a very interesting experience amplified by the front-center seat that I have taken. The experience primarily taught me one thing: no plan survives contact with a customer ( my version of the famous ). The same idea is applicable to many situations, mainly because planning and reality tend to diverge at least at one point.

So here, I’m 8 years after purchasing my “ultimate” speaker and the speaker is no longer with me, I sold it a few days back. Why am I thinking about it? For one, I have been a bit philosophical lately – life does not stand still, everything changes, customer’s mind moves on and ultimately nothing remains the same. Another reason is sunk cost bias – I spent time and money looking for the “ultimate” speaker and it didn’t make it past 8 years with me… I feel like there should be some kind of thought consolidation, lesson learned, so here I am.

Why did I part ways? Simply because I didn’t use it. In the last 4 years, I turned on the speaker probably less than a dozen times. My life has changed, I have a child, I live in a house and music time switched from late evenings to early mornings when I sit quietly and work on things. Playing music loud is out of the question and over the last few years I stopped enjoying loud music – aging is no fun. Since priorities have changed and the speaker was collecting dust, it was an appropriate time to make a decision: to cling to the past or to let go and move forward, I chose the latter.

Leaving things behind is not an easy thing (at least for me). I get attached to certain things, I let them define me in part. However, leaving things behind is a part of life – which needs to be examined, learned and practiced. Like any exercise it has its benefits – clearing mind, space and allowing for new things/experiences to flow in.

Well, it is time to say thank you for the experience and bring joy to the new owners, bye SoundCube.