Ethics in tech

Published:

by

When I hear ethics in tech, I'm reminded of movies where the stakes are high. If the protagonist makes the wrong move, the whole planet will pay the price. The right move means being selfless and sacrificing all the riches in the world for the sake of humanity.

Reality is more subtle. Violating all the moral ethics in the world means adding two pesky lines of javascript in the code. It means creating a field in your database called “delete”, but never deleting the user data. It's not as dramatic, yet just as unethical.

Ethics is a few lines of JavaScript, a database query, a third-party SDK. And it boils down to one thing: Revenue.

Disappointed

Published:

by

There is magic in not understanding software. How does it understand what we say? How does it answer our questions, how does it know who my friends are? Whether it is AI or a simple program, it can leave most of the world fascinated. Diving deep into computer programming and AI can only leave you disappointed.

Disappointed because the computer doesn't really understand you. It turns your voice command into text and passes it to a classifier where the intent is extracted. Then a predefined action runs with the argument you provided.

The computer doesn't actually see you. It takes a sample of the image data coming from the camera then runs it in a convolution network. Then it compares the result to the data it has in its database.

The computer doesn't know who your friends are. It calculates the likelihood of you being friends with someone by comparing both your GPS locations and your respective friends list.

It's like watching a magician reveal his trick. Before he reveals it, you are fascinated. Once you know the trick, you lose a little bit of yourself. But you still can't do the trick yourself. One of the biggest open secrets in the magician community is that no one thinks a magician will work this hard to fool you.

In software, knowing the trick does not equate to being able to replicate it. Most of the work done in software engineering goes unnoticed to the end-users. Scaling to make an application available in milliseconds is never celebrated. Making sure emails are delivered is boring. Fixing a small bug that only affects a subset of users is unnoticed. Knowing how software works is kinda boring. But building software is certainly fascinating.

The last person to learn

Published:

by

When I was learning JavaScript in class, I felt like I was already behind. It was 2008 and everyone and their grandmother knew how to use document.all. There were new frameworks coming out everyday and every job was requiring years of experience with each one. I had to learn them all if I wanted to make a living writing code.

What I didn't know at the time was that the software world has always been like that. In fact there was an advantage to being the last person to pick up the book. You couldn't possibly learn everything, and most things become irrelevant quick enough. Remember Silverlight?

By the time I started learning about AI, all the resources were already available. Any time something was obscure to me, someone had already gone through the same issue. They had the time to write a detailed blog post with interactive figures that helped me better understand. When I followed videos on YouTube, the entire class that had been uploaded over the course of two years was available to me. I could watch it everyday rather than wait for a week or two for the next installment.

I went on to complete programs from Deeplearning.ai in a month instead of the 3 to 4 month recommended. The last person to start gets to learn from the pitfalls of those who paved the way. They don't have to spend the time working on tech that was only a fad. I'm the last person to learn, but I won't be too far behind in knowledge.

It hardly looks intelligent.

Published:

by

I often set out to learn about Artificial Intelligence. I must have been 12 or 13 when I decided I wanted to build a humanoid I can talk to. It might have something to do with the fact that I was fighting with my brothers everyday. It could also have been intellectual curiosity.

In my mind, this machine would start as software. I'd program it to listen, then to talk. Then I'd add a webcam and teach it vision. I'd slowly teach it to do things until it becomes better than me. While it was practicing intelligence, I'd learn robotics and build a humanoid body to encase it. Then I'd have to decide if it was a male or female. While my brothers were playing their video games, these were the thoughts that kept me up at night.

But when I sat at the computer, I had no idea how to get started. In the early 2000s, there wasn't a lot of material to go from on the web. Plus the little that was there was in English. One article I remember translating through yahoo's babelfish had one idea that stuck with me. It said something like "It's hard to say a person is intelligent if you look at them through a microscope." The building blocks of a living being are simple. They perform small simple tasks that can be programmed in a computer. But zoom out and these small components add up to become intelligent beings.

That's just what you see when you explore neural networks, the idea behind the state of the art AI today. They are small simple components that hardly look intelligent. In fact, they are simple math equations. Yet, put them all together and you have face recognition, machine translation, and self-driving cars.

I didn't build my humanoid, turns out I don't need to talk to computers that badly. But that experience has sparked an interest in computer intelligence that I continue to practice to this very day.

The best way to...

Published:

by

What is your best way to write? What is your best trick to take note? What is your best productivity advice?

You might have answers to these questions. If those tricks actually work for you, it's because you have something that is usually missing from the equations. You had material to work on.

Unless you have material to work on, there is no reason to read about the best trick to anything.

One day, a friend convinced me that we should both write. This was after we completed our English 1A class, we both got As. I was so excited that I could hear generic ideas bubbling in my head. But before I put the first word on paper, I went online to read about writing advice.

The first thing I found was people recommending Strunk and White, the Element of Style. That's the book we used in class. I didn't understand why people were swearing by that book. It wasn't helping me get started at all.

I spent some time reading about the Oxford comma, then about a space or two after a punctuation, and finally passive and active verbs. It still didn't help me get started. Everyday I would spend an hour reading about writing, preparing for that thing I was going to write one day. It's only today, more than a decade later that I remember this story. We forgot all about it. I had read so much about writing but it didn't materialize into anything at the time.

I was doing what schools usually teach students. Learning about a subject in a vacuum. I learned all about writing, yet I never practiced it. What I should have done instead was write. Write anything whether it was good or bad. Once I had material, I could look for advice to help turn it into something readable and understandable.

I can say this with confidence because this is how this blog came to be. It was two years after I had dropped out of college that I decided to start this blog. I didn't read anything about writing, blogging, or programming before I started. I wrote a few articles, and eventually I built a framework to display it on the web.

There is no best way to start anything. You do it, and eventually you improve it.

You are not getting the better one

Published:

by

Every time Apple releases a new iPhone I can't help but feel bad for all the competition. The specs alone show that when it comes to performance Apple is miles away from the 2nd place. The physical design gets copied by everyone else. I can clearly see that that hardware is superior, the software is coordinated, the experience is pleasant. Yet, I don't think I will ever buy an iPhone.

I can say so because after using the iPhone for work for the past decade, I prefer Android. No, it's not because android is better either, I just like my current phone.

I often watch the hundreds of YouTube reviewers reviewing new devices and I find it useful to know what new phones are capable of. But so far, they haven't lead me to buy a new phone. In fact my phone is 4 years old now.

I don't use this Windows machine because it's superior to the Mac. I like typing my blog posts on this minimal text editor.

I don't use my Linux machine for development because it's superior to my Windows machine. In fact, my Windows machine is way more powerful. But I like developing under Linux.

I don't use PHP for my personal projects because it's the most amazing programming language. In fact, it has a lot of quirks compared to other languages. But I like using it for my personal projects.

Mac users don't stick to Apple because it is the better product. They just like it. Macs are probably good machines, but that's not the deciding factor.

We don't get the better product. We get the one we like.

Missing the point

Published:

by

When my niece was two years old, there were some defining moments where her brain graduated from infant to toddler. Suddenly she was able to observe the world and make deductive reasoning. On one of those days, she was going around the house observing each of us, then there was a spark!

She ran to my room with all her strength, pushed the door out of her way, and knocked the laptop out of my lap. I didn't get the chance to protest, the look in her eyes told me this was an emergency. She held me by the arms and yelled "Tonton!" I am tonton.

— Tonton! shajo baba mamy yaki deeda [long redacted list] daddy ihi white!

Now, I could have done two things. One I could have taken the time to understand what she was trying to say. Some of those words above were her way of calling each of us. Shajo is Sadio, Mamy is her mom, deeda is Kadija etc. Clearly, all these people had something to do with "white". She had a poor vocabulary at age two, but that's not uncommon. It's unrealistic to expect a 2 year old to speak with perfect clarity. So I could have asked follow-up questions to clarify.

Instead, I went with option two. That is, laugh at her incoherent rambling. It was cute and funny. I laughed on her face. I couldn't stop. And I kept repeating "something something white!" and laughed some more. She wasn't laughing.

When I wasn't stopping, she gripped my arms with the strength of a grown up and said: "Quiet!" I fell silent. There was a short pause before she pointed her finger at the corner wall of the room. And in the tone of a well read authoritative figure she added: "Tonton time-out."

I was ashamed. I missed the point. She was making an observation, possibly for the first time, and she wanted to share it with her Tonton. I made fun of her instead. It's like someone discovering a new moon on Uranus, and we laugh because she said your anus.

I will never know what she was trying to say. She is a big girl now and don't even remember that event. I missed the point. How many times have I laughed instead of listening? My own kids are about to turn two now. Before I laugh, I need to listen.

Coco

All the time I have wasted

Published:

by

Early in my career, I experienced the most impostor syndrome when I was left with nothing to do. I would come to work like a dock worker, waiting at my manager's desk, to see if she had any work for me. She would shuffle around her email to find something. Anything! Anything that she could give me to keep me busy. When the task was to adjust some CSS, or change the text on the website, I felt useless.

But it didn't take long until I figured out that down time was my most valuable time. First of all, it meant that we had achieved our goals. We had finished all our tasks on time. Something to celebrate. And it also meant, I had free time. Time I could use to experiment. Time I could use to explore.

This free time would prove valuable in learning new things. I was a front-end programmer, but in my down time, I familiarized myself with C. It allowed me to read the PHP source code and learn to better use the language.

In my down time, I read books like Game Programming Patterns by Bob Nystrom. It allowed me to explore new ideas rarely encountered in the Web programming world. It even helped me when I built applications for embedded devices later in my career. It allowed me to work on writing better documentation. Finding effective ways to describe a program that allow people to use it.

My down time became productive time. So much so that I would never complain when I finished all my other tasks. This time that my employer couldn't justify was when I learned new things that benefited myself and the company. At first, it felt like wasted time, but now I see that it is the experience that made me a competent programmer.

Interruption Driven Development

Published:

by

In theory, at a job, work is passed down to you. You don't have to figure out what to do next, your manager will line up your next task. In reality, we don't live in a vacuum. Developers are perfectly capable of identifying pain points in the application. They can make a case on why they should work on these issues.

I rarely find myself without anything to do at work. There is always a task in my mind that I know I can work on but don't have the time to. I currently work at a start up, and my queue is filled with things I should work on. Completing them would make our service more stable, improve team work, and most probably help us generate more money. But like most startups, my real work comes from the daily interruptions.

These are things that we have not anticipated. Customers reaching out and asking for a feature, misunderstanding in the way the product works, and unexpected bugs. We all want to create great product with amazing features, but as long as interruptions are still common, they are the priority.

Jobs teach you how to think

Published:

by

"School is where they teach you how to think."

I've tried to believe that statement, but I just can't. In college, every time the professor turned to us and said: "Any questions?" The question that followed was the same. A student will raise his hand and ask, "Is this going to be on the test?"

School is where you learn to get good grades. The moment I started to use real-world methods in class, I was accused of cheating. Since I haven't used any bubble sort and red and black trees in a real job, I spent my time learning about software.

The most underrated skill I learned on the job is installing software. In the beginning of my career, I would spend days if not weeks pestering the lead developer. We would spend time together trying to figure out how to get the project up and running. Installing tools and dependencies, setting up configurations and environment variables, and understanding the developer workflow. No class in school will prepare you for this.

Project tasks do not come as word problem format. Schools obsess over creating theoretical situations. "Jack and Jill each have a set of N numbers where 1 < n < 10^24. They are considering merging their two sets while ignoring all duplicates..." No task comes in this format. When they are coming from a manager, sometimes they just say "The top link on the homepage is broken"

You have to conduct your own investigation, replicate the problem and then solve it. To correct the maxim: Jobs teach you how to think.