This post has been translated to Chinese by LaBaZhou. You may read it here.
A question I get asked a lot is, being completely blind, how do I program? I have provided an answer to this question in some places. For example, I have answered How does a visually impaired computer programmer program? on Quora. I have also talked about this in part one and part two of my interview on LiveCoding.tv. However, this is a more in-depth look at my life, and the events that have shaped my current career and choices. More of an autobiography, if you will. So, if you are curious, give me your hand, and allow the blind to guide the sighted.
How It Began
I was born on February seventh, 1990. I am the youngest of three, and I live in Tehran, Iran. I was completely blind from birth, and only have the ability to perceive light, and obviously, the absence of it.
My journey into the world of programming began when I was fourteen.
There was an effort about eleven years ago to record programming books for the blind. Since creating braille copies of books are more expensive and time-consuming, this experiment was done with audio, not braille.
I don’t remember the author of the book. However, I do remember that this book was called “Visual Basic 6.0”.
For those of you who don’t know, those days Visual Basic was one of the easiest languages to get started with, and one of its main selling points, apart from the fact that it was created by Microsoft and you could write applications for Windows with it, was the ease with which you could create a graphical user interface (GUI). So as you can imagine, the book was centered around creating a UI that reacted to user input, such as a couple of text boxes that had a plus sign between them. When you clicked the “Add!” button, it would display the result of adding the contents of the two text boxes together. Neat, huh?
Except, that didn’t really strike my fancy.
I wanted something more, and the book had failed to give it to me.
I wanted to create… a game. A game that blind people could play. A game that would give them an immersive audio experience. Something that was amazing, like all those awesome games my brothers could play on PlayStation.
This was by no means an original idea. In fact, I got the idea after enjoying some of Jim Kitchen’s audio games. The experience was truly unique, in that it was something built specifically for the blind, offering an unparalleled experience. Of course, I’m always against providing a more accessible solution instead of making mainstream products accessible (AKA creating “blind ghetto products”). However, since most games are inherently reliant on sight, I find it an unfair expectation.
I went on to create a game I simply called Swimming. The goal of the game was simple: keep swimming as fast as you can (with the up arrow key), and turn left or right depending on which ear you hear the beeping sound from (with the left/right arrow keys). For example, if you hear a beeping sound from the left, you must turn left, and if you hear the sound from the right, turn right. If you failed to turn, you would hit the side of the pool, getting stunned for a few seconds.
This was by no means a success story, though.
For one thing, I didn’t have a proper domain. I was living in Iran and I didn’t have a source of income, so even if there were no sanctions preventing me from paying anything, I couldn’t ask my parents to do that. That was just not my sort of thing.
Then there was the issue of real-world experience: reading a book about how to create GUIs with an IDE that allows you to drag-and-drop controls and generates code for you behind the scenes does not teach you programming. I remember my swimming game had three functions, and those were there because the Visual Basic 6.0 IDE had generated them for me. Later when I joined a few friends to found Lighttech Interactive, the very first sentence i heard from my friend Robert Osztolykan was, “Dude, how can you read your code?”
So, in the end, that project flopped. However, it showed me something very, very important: I liked programming. It made me feel good to be able to make computers do things that I wanted. To help others.
How I Learned
It was that experience that led me to choose software as the field I wanted to study in the university. This decision came with its own problems: there were no books for my highschool, and no books for the courses I had to take in the university. I had to either rely on my own knowledge, or look for ways to get someone to read my books for me. However, since I hate studying a determined number of resources to take an exam, I mostly did the former. I relied on my knowledge of tinkering around with different programming languages at home. That got me an A+ in all programming fields: databases, and any course that had practical programming in it.
As for mathematics and theoretical subjects such as data storage and retrieval, operating systems, statistics, and other subjects that relied on presentation… well, I didn’t do so well in them, because there was no way of learning them for me.
In the end, those experiences earned me an Associates degree, an A, and a hatred toward every method of teaching that begins with theory or graphical representations.
I was so fed up with trying to conform to educational systems that I got even more into tinkering with different technologies. During university, I had found that PHP and the web was something I loved to pursue, and that made me try out different frameworks.
How I Worked
I met Howard Chang in the #yii channel on FreeNode. I happened to be there when he asked a few questions, and I somehow got to impress him enough for him to look at my information.
That got me my first job doing PHP. Of course, it was my very first job, and although my technical skills were in the same level as the rest of the team, my soft skills weren’t as good. That ended up putting me on the wrong side of the manager, and as most of you can guess (and you are probably facepalming as you are reading this) numorous violent sessions ensued, in which I was always wondering, “hey, what did I do? Why is he yelling at me?” Yes. That guy still hates my guts. As for me, there is only one statement i remember him saying, and that is a statement that got everyone else into a state of shock for a few seconds. It went like this: “I won’t let some blind guy ruin my business! You understand me?”
So I quit. I just sent in an email one day and said I won’t be coming to the office anymore. My soft skills were that bad.
My next workplace was a start-up which was awesome. The founder was a well spoken Canadian-Iranian who had an awesome idea: BusinessX.
I got hired as one of the very first employees. The horizons were bright. The people were energetic. The enthusiasm was palpable. We were going to change the way small businesses interacted and represented themselves.
Except, that never happened.
There are only a few qualities in me that I admire, and I’m sure you are the same. For some reason, we have this tendency to make all of our achievements seem small and insignificant, and riddle our personality, skills and attributes full of holes. At the same time, we expect everyone else to admire us, assert us, and just verify how awesome we are so that we can float in our bubble of perfection.
Anyway! I’m getting off-topic here.
One of those qualities I admire in me is my need to learn. I watch, process, and learn at a very rapid pace, and while BusinessX was going through the small business cycle (infancy, adolescence, and back to infancy), I watched and learned, and the lessons I learned, coupled with James Altucher’s post on LinkedIn called 10 reasons why you have to quit your job this year made me quit to find more opportunities to flourish.
But I didn’t start my own business. I joined another, again.
Since I’m completely blind, I had been drawn more and more to the back-end of web development. I have never written one line of view code in production, and that was why my new workplace (where I was responsible for the back-end API of an Asterisk system that sold some services) was awesome. I could now execute all those practices I wanted to do: test-driven development, practical application of design patterns, refactoring, and all that jargon. And I did.
How This Blog Began
While at my current job, I found a book called Soft Skills. At the time, there were no pirated copies available (sorry, John Sonmez). However, after having gone through Uncle Bob’s the Clean Coder, I was quite happy to get another book like it. After all, in my humble opinion, developers were a very important reason for BusinessX’s first stage development efforts to be unsuccessful. My patience paid off, and I one day found a copy floating around on the net, and then I hungrily slurped it up. Through that book, I realized the power of sharing yourself through a blog.
There’s another thing. Since I was thirteen, I have been reading a lot of books. Having a screen reader that reads at about 520 words per minute is a blessing when you are gathering knowledge. And lately, I have decided to share what I learn and what I have learned, both to show myself to the world and to share and discuss, get corrections, and make what I learn stick. Examples include my author page on SitePoint, my profile on Quora and of course, this blog.
So, apart from a very old post, I thought a perfect way to start my blog, officially, is to tell you a bit about me. I hope you liked my story.
How do you feel about this autobiography? Did it answer your questions? Did it cause new ones? If you have any questions you want answered, or if you have any feedback about this post, I would love to read them in the comments below.