How to Drift a Bus

This is another satire...

I traveled to Japan last year and got a chance to meet the Drift King himself. I was doing a track day and drifting culture is hot in Tokyo. I got a chance to speak to Mr. Tsuchiya and he told me a funny story about drifting something you wouldn't expect:

Hi, my name is Keiichi Tsuchiya, and I am the Drift King. I call this maneuver the "Omenibussu Duriftu" and it cost me my job and sent me into abject poverty.

I started doing this on rainy days tired from my 8 hour shift of hauling passengers around, I needed to relax and have a bit of fun. I would move the bus side to side and then turn hard and the bus would drift. Passengers screamed and complained as I counter-steered the slide. The complaints lead to me being fired ending my career as a bus driver.

If you want to try this yourself and risk your losing your wage, just do the following mods and follow these instructions.

Make sure you inflate the rear tires of the bus as much as you can and deflate the front ones. This will make the bus prone to oversteer. I convinced the maintenance workers to install nitrous on the bus telling them that the bosses ordered us to test out this new ethanol reduction system. I even convinced them to weld the rear differential as it would help getting out of sticky situations in snow.

I recommend you do this with 40 footer bus as an accordion bus may lead to fish-tailing. Use a track with plenty of run of area to prevent accidents or the rapid-transit road if you're brave enough. You'll need a rear-engined, rear-wheel drive bus for this technique (a bit like the Porsche 911).

First, accelerate to 60 kph, and then swing the bus left and right until you reach the corner. While you swing, keep accelerating until 100 kph. Then once it reaches the turn, accelerate hard and let the bus slide without adding steering input. Half-way through the slide, counter steer and reduce throttle. It will work every time, at least for someone skilled like me.

The simulation was possible thanks to BeamNG.drive

Clever Code

I recently worked on a proof of concept mobile application for an insurance company. It was simply designed as a tool for sales to demonstrate how a potential concept could work.

The statement of work seemed to be reasonable, a week to improve some functionality and change some branding. It also included updating the dependencies of the project and upgrading it to work with latest tool set.

It really seemed like a reasonable project until I was given the source code. I realized that what I had in hand was production quality code with hundreds of libraries included. I could barely understand the workflow of how the code lead to functionality, it seemed like sorcery was being used to generate it. I've worked on a dozen of mobile applications and it was generally easy to understand how they worked.

Obviously, this 3 year old project wouldn't compile with the latest tool set. I thought it would be an easy task to simply bring up the libraries to their latest version, but a ton of compiler errors were thrown. Why? The code heavily relied on paradigms from the older libraries and the newer ones have changed workflows completely.

I realized that updating the application would require major refactoring which wouldn't fit within the tight deadline. I won't give too many details as work is supposed to be confidential, but it was a very simple app with a few screens and extremely basic functionality.

At that point, I decided that I would rewrite the application from scratch. What took a team several months to do I was confident that I could do it in one day. However, I wrote very simple and easy to understand code. It's a proof of concept, a prototype. The source code is supposed to be disposable once the company decides to turn the PoC into a production quality application.

In one day, I had the prototype working with the same functionality, actually more, than the original version. My goal was very different, it was a PoC, not production software, it's supposed to be a prototype. One day's worth of work is not costly to throw out, but spending on several employees to do the same thing, but with way more complicated code is way more costly and even more when it comes time to maintain it.

Even production applications can be overengineered. Code can be very clever but an impossible mess to actually understand. Most developers don't realize that code is easier to write than to read. In several years, a simple bug fix will break the application because you can't remember how the asynchronous event system worked when it could have been a simple method call in a seperate thread.

Code is supposed to be of the same scope of the application, not more. Annotations, lambda expressions and so on are tools to help you write more readable code but only when it stays reasonable. A super clever implementation of lambda expression that spans the entire screen is much worse than a simple for loop which is what you really needed.

New developers want to show how clever they are with complicated code, however it doesn't impress anyone because no one understands it. As I progressed throughout my career, I realized that very simple code is way more elegant than clever black magic. As a result, I ended up with more maintainable code that I could come back to years later when it needed a simple bug fix and I was confident that it wouldn't break anything else.

My belief is that code should be as simple as reading an English article. Only a one pass reading should give you an idea on what's going on. If you need to reread the code several times to understand it, it's a bad sign.

When you do need to be clever because it's the only choice, it better be documented with plentiful of comments, that explain why and not how the code was designed that way. Whatever is needed whether it's diagrams, a separate document or even a video. The point is that the next developer understands it right away.

If you can recite the code and it sounds like English sentences, you're on the right track.

Burnout isn't about work...

A few weekends ago, I found myself doing absolutely nothing. I didn't watch movies or shows, read reddit, have any meaningful conversations or even eat. I took naps to escape reality and slept-in as much as I could, much to my detriment with even more fatigue and tiredness.

I thought I was having a routine depressive episode but I realized that my mood wasn't actually that bad. However, I really did want to do nothing other than sleep, complain and stare out the window. Nothing was interesting.

My creativity and brainpower was sucked out me until it was completely depleted. What really happen?

I often blamed work for this but I'm still functioning there and considered a high performing employee. I always have the energy to do something there, but come home all of it disappears.

While some say burnout is clinically similar to depression, I'm not that sure. Depression is quite a constant uniform feeling of hopelessness, dread, negative thought patterns and perhaps a physiological aspect. Burnout doesn't exhibit itself when have to work, it's when you don't.

For most of us, work is our liveliness, it's literally what keeps up alive, income and passion. We put all our effort into it because we have to otherwise we're not meeting deadlines or that next performance review won't be so good. You're forced to perform.

When the pressure is off, the mental energy spent to do work depletes any sense of motivation left for any hobbies, relationships and so on. At home, you don't have deadlines or clients to meet or sales pitches to satisfy. All those obligations are gone, you're free to decide for yourself save your errands like groceries and laundry, though even those can be neglected sometimes.

The end result is fatigue and self-neglect.

Unlike depression, burnout probably has no major physiological causes thought it's effects maybe. Neglecting your body with lack of food and exercise won't help the lack of motivation and low energy.

Few resources have presented reliable treatments for burnout. I don't think it exists because everyone experiences it in a different way. One solution may work for another but would make another's burnout even worse.

One constant factor between all these 'treatments' however I noticed is breaking the routine of life. Things won't improve if you do the same thing everyday. You to have things to look forward to whether it's exciting times or times for rest. I can be really anything.

For me, for example, I'm an introvert-extravert hybrid (leaning more on the introverted side). I like doing things alone but I need to go out and chat with people. I need to go out and enjoy the views, the restaurants, the malls, the parks and so on. Knowing these things are coming gets me excited, even a chat at a coffee shop. Being locked in drives me nuts but sometimes I want to be locked and left alone.

For others, vacation time might help 'recharging ones batteries' though one must be careful as vacation can be equally as tiring. Especially long trips and vacations relying on heaving planning full of activities.

I noticed that others simply like to retreat and escape. Binge on TV shows and movies, spend hours on Reddit and read fiction novels. That's also breaking the routine if all you do is work.

There really isn't a single solution for burnout and I really can't say I found the ideal one for me. I hate to say it, but the best solution is trial and error. My solutions ranged from changing the colour temperature of the lights at home to going on more meetups. Some did help and others didn't.

I don't believe that burnout is about self-worth or how one views one's self at an organization. That may be effect of burnout but not the cause. The reason for burnout is simply fatigue, lack of energy and motivation and one must find the way that works for them to help them restore that energy.

Please post in the comments in how you recover from low-energy energy and burnout? How did you keep the fire burning when you get home?  Do you hit up the gym, cook a fancy new meal, or take a day or two off and spend the day watching Netflix? These discussions are key to understanding this relatively new concept and how treat it.

How to Program and Make Software

Learning software development is one of the most frustrating endavours you can partake in. You see these sophisticated web apps and advanced operating systems and you want to do like them. You want to make a great triple-A game with your own amazing story. However, few realize the amount of effort into making these. These pieces of software are built by big teams with dozens of members who spent the past 5 years churning out code.

On top of that, it's not just about writing and understand code, but it's about writing it in a way that it can be re-used, easy to read and understand years down the line and easy to fix and maintain. Yes, you can make something work by copying code you don't understand and having a big giant mess of spaghetti, but it's not something that you call software engineering. At best, you're a script kiddie.

Like in any field, you need to start really small. Writing command line applications that add two numbers. Understanding the very fundamentals of how computing actually works, how code is converted into something the CPU understands.

Many want to become computer scientists and software engineers, but I honestly don't believe that academia is the best route for this. The knowledge they offer is often out-dated and doesn't really apply to the real world. In school, you get these lab exercises with perfectly commented code but when you start your job, things are really different and way more messy. Yes, you might need a degree for you next job, but an Arts or Math degree will get you far enough. To build software, you need to be passionate about it and teach yourself. You need to get deep into the books and learn by reading other people's cryptic code. Unlike other fields that have been the same for centuries, software changes every day. Just look how often your phone apps get updated and changed. It's not just about trends, it's about constant improvements.

Don't be discouraged when something doesn't work, keep trying until you get the results you want. Keep re-inventing the wheel until it is a well-oiled machine. You won't get there in a few days but trust me the ramp up will be quicker than you think.

You need to pick a path before you start on your adventure. Do you want to write games, cool web apps for budgeting or how about an advanced modeling and simulation library? Just like any other field, there are specializations and you can be good on as many as you want. The secret is time.

When someone asks me about where to start, I usually throw this list of resources with books and websites. Somewhere in there, you'll find something that tickles your fancy and will get you started on your programming adventure.

No Excuse List

http://noexcuselist.com/

There's a lot of free programming courses in there if you prefer lectures and interactive exercises instead of reading. Codeacademy and O’Reilly are really popular.

Freely available programming books

https://ebookfoundation.github.io/free-programming-books/books/free-programming-books.html

Basically anything related to computer science can be found here. There's even some IT related books in the list. Updated all the time.

Awesome Awesomeness

https://github.com/bayandin/awesome-awesomeness

A meta-list of useful libraries for different programming languages. Before trying to code something on your own, see if there's a library that does it already.

Pick your preferred method of learning and you'll on your way to make whatever you want. The sky is the limit, or perhaps your imagination.

The Million Dollar App Idea

If you're a mobile developer, this almost certainly happened to you. A friend or relative makes you swear to secrecy about what he's going to tell you next. His secret idea will change the world and make millions. He comes up with the idea (usually like Uber but for X) and you do all the development work, split share 50/50.

Most people think that coming with an idea is hard, but it isn't. Everyone has a ton of ideas all day long, many of them ridiculous and some few genius. However, execution is the difficult part: development, marketing, building a company and so on. That sucks in every available time slot in your day as you try to make your idea into reality.

What's worse however is most of these ideas fail. Startups get a ton of investment money that is sunk into nothing. People quit their jobs hoping their new business will let them retire early. None of this really happens.

People are mesmerized by what they see in the media. A teenager who made a soundboard app makes millions and buys a mansion at age 17. Another makes thousands of dollars in ads from his YouTube videos or Twitch streams. However, all of this is a form of survivorship bias.

How many Twitch streams are watched by virtually nobody compared to the few famous ones. Pennies are made from most YouTubers who put ads up. The reality is that these successful people are the exception not the norm, they can almost attribute their success to luck.

I've seen people with no fame make excellent content and vice-versa. Producing good work isn't guaranteeing success. Not the best product is always the one that makes it to market. If we can call it that, fate, results in success.

However, to succeed, one must play the lottery game and hope to make it there. You can't beat the odds if you don't try. But don't approach the idea with naivety, but actually study what people want. Notice how informercials sell mundane things you never thought of and they sometimes make great success even if their products are garbage.

Think of a problem that you actually experience day to day. Something that bothers you and perhaps others. Maybe finding a solution to that would increase your success. Don't just imitate another streamer or blogger, because they succeeded out luck mostly. You need to do something novel that no one has ever thought of yet, and maybe, just maybe, you'll be making a few bucks.

When working on a project, your goal shouldn't be fame or money, but rather passion and learning. That growth is so much more valuable as the new skills you learn can be put into use somewhere else, maybe in a job that actually makes money.