Skip to content

Rough Book

random musings

Menu
  • About Me
  • Contact
  • Projects
    • bAdkOde
    • CherryBlossom
    • FXCalendar
    • Sulekha
Menu

Learning how to program in Oman in the 90’s

Posted on July 26, 2016July 19, 2020 by vivin

I grew up in Oman and lived there until I finished high-school in 1999. In 1991, when I was ten years old, my father bought me a 386SX for my birthday having noticed my burgeoning interest in computers. For the first few months, I mainly played games. But even that was a non-trivial endeavor in those days. You couldn't just click or touch an icon on the screen to launch the game; you had to use command-line1. The technician who set up the computer showed me a few MS-DOS commands and I learned others from my friends who already owned computers.

There wasn't anywhere you could really purchase computer games in Oman those days (as far as I knew anyway), so we would have to copy them from each other. This required me to learn how to do things like copy files, delete them, create new directories, etc., in addition to learning how to deal with the idiosyncrasies of different installer-programs. Furthermore, RAM was a scarce resource in those days and sometimes you would have to fiddle around with your AUTOEXEC.BAT, CONFIG.SYS, or create boot disks to play the more resource-hungry games (especially to get around the 640K limit imposed by DOS). This was a process of trial and error, but I was patient and motivated (wanting to play a game is a great motivator!). As a result, I slowly started becoming pretty proficient in DOS.

Digger
F-19
Some of the games I used to play: Digger and F-19 Stealth Fighter

At some point in '91, I remember getting a notice from my school about an after-hours computer-course that was going to be held on the premises. I showed it to my dad and told him that I was interested in joining because I wanted to learn more about computers. He readily agreed. Thus began my journey into the wonderful world of Computer Programming.

The class was held once a week and I would count down the days before each one. The first few classes went over the basics of working with DOS (most of which I already knew at the time) before moving onto programming proper. Before even introducing the language, the teacher introduced a concept called GIGO (Garbage In Garbage Out). "The computer is stupid", the teacher told us. "You have to tell it what to do, and it will do exactly what you will tell it to do." So I learned that if the program I wrote didn't work properly, it was probably my fault. After some preliminary principles, the teacher introduced us to the programming language that we would be using. That's how Logo became my first programming-language.

Logo
Logo screen. Source sydlexia.com.

Logo was a fun programming-language to learn; it was almost like a game. There was immediate feedback, since you could see what the turtle was drawing on the screen. I remember finally grasping the concept of "functions", so that you could repeatedly call a set of Logo instructions, varying the parameters each time, allowing you to draw some pretty complicated patterns.

The next language I learned was BASIC, and it would dominate my programming life until I graduated high-school. We started with IBM BASICA and then moved to GW-BASIC, which was compatible with IBM's BASIC. I wish I could remember my thought process at the time, and what it felt like to learn a proper programming-language from scratch. What I do remember was that I had zero preconceptions and innumerable expectations; I knew that by learning how to write code, I would be able to write my own games and tools. Even if I didn't know how to do it, I knew that it was possible. I also remember that it was incredibly exciting to be using a grown up language; Logo still seemed more like a game to me. I would religiously practice writing my own programs when I got back home and throughout the week, much to my parents' chagrin, because I preferred doing that to actual schoolwork!

I recall that at some point I finally "got" programming; I was able to decompose a particular problem to little steps and translate that into BASIC. This gave rise to something that I value to this day: by breaking down the problem into tiny pieces, I became intensely aware of my own lack of knowledge (there were pieces I didn't know how to implement), and that let me know what I should try to learn or figure out next. I do wish I had kept my notebooks from those days, because I would frequently sketch out my algorithms and draw pictures before actually writing the code; this is something I do to this day. In those early days, it helped me deal with the cognitive load of complex (at least for me at the time) problems and helped me plan out my approach. Though the resulting code was sometimes hopelessly naïve, it most definitely wasn't wasted effort.

GW-BASIC
GW-BASIC

My programming classes continued, but I was starting to get bored because by figuring out things on my own, I was ahead of the class. I thought that perhaps in the next session we would be taught more advanced topics in BASIC, but instead we switched to learning dBase, which I found dreadfully boring. As a result, I had to get my fix elsewhere. This was difficult in the early 90's in Oman. There was no internet, and I didn't have access to programming magazines (much less knew that they even existed). In desperation (and boredom), I started poking around in the source of example programs that came with my BASIC distribution, trying to figure out how they worked. A lot of it went over my head, so what I would do was change the code in different ways to see what happened. It was a process of experimentation, and trial and error. Little by little, I was able to slowly figure out what the more complicated commands did, and thus add more tools to my "BASIC toolkit".

When I ran out of programs to inspect, I started scouring my school library looking for any book that dealt with BASIC. This was an exercise in frustration that would only occasionally reveal a gem; the main issue was that I was unaware that there were different flavors of BASIC. For example, I was starting to get into playing around with graphics a lot since I wanted to write my own games. I recall being extremely excited when I ran into a book in the library that claimed to cover this exact topic. I couldn't wait to get home that day to try out the programs in the book. However, I was very disappointed when the programs didn't even work; this was because the programs in the book were written in the Applesoft BASIC dialect, which had been made for the Apple II series of computers. Even still, I went through each example program in the book, diligently typed them out, and then attempted to run them; most didn't work but some would, and through these I was able to learn something. When I did find a book with a compatible dialect of BASIC, it was like getting a birthday gift. I still remember the excitement of typing RUN and hitting enter, after I had spent a bunch of time entering the code from the book; some of these programs were hundreds of lines long! Inevitably there would be syntax errors and I would have to go back and fix them.

BASIC
I'd try to find books like these in the school library (source: tedfelix.com)

Once I got the syntax errors out of the way, I would have to deal with logic errors. Sometimes I introduced subtle bugs while copying, like typing a greater than sign instead of a less than sign, a wrong array subscript, or a wrong line-number in a GOTO or GOSUB statement. After fixing all the errors, I would try to figure out how the program actually worked. I remember adding my own lines of code to print out values of variables to see how they changed as the program ran. I would then modify how these values were calculated to see their effect on the execution of the program. In this slow, often error-prone method, I was able to tease out information about the inner-workings of these programs. I started getting comfortable doing this and didn't mind the manual nature of the process, as I was learning a lot doing so. This valuable skill helps me out to this day; I don't mind debugging framework-code or looking at disassembled bytecode to figure out what is happening. It is actually something that gives me more confidence and peace of mind, because I never like taking things for granted and blindly assuming that things "just work"; I always want to know how they work. Fiddling with the sample programs in my BASIC distribution, and fixing errors in programs I typed from books also introduced me to debugging code that I hadn't written myself. This was a valuable lesson, because it taught me to how to read, process and understand other people's code.

By sixth or seventh grade I had taught myself enough to be slightly dangerous. Having learned about the CHAIN command, I wrote my own menu-system that would let me launch different programs, including non-BASIC programs (this was via the MARKDOWN_HASH28d568b3892dce36f2833542693a1062MARKDOWN<em>HASH command). I remember demoing this to my computer teacher in school (by then we had computer classes as part of the curriculum) who was impressed and encouraged me to keep learning and do more. I had also written my first game at that point; it was just a simple math game that posed math problems to the user. A correct answer would give them 5 points and the wrong one would deduct 1 point. By the end of eighth grade though, I had finally written a game with graphics; it was a simple slot-machine game. I had a ton of fun writing it and it was a huge hit at the science exhibition that year. At some point I even started teaching myself [C](https://en.wikipedia.org/wiki/C(programming_language)), after finding out from my computer teacher that it was easier to write more powerful games in this language. Unfortunately I wasn't able to make much progress because I had a hard time finding a good C compiler that I could use.

Being self-taught got me into a little bit of trouble at times. In ninth grade I switched schools, and in my first programming-class at the new school the teacher asked us to write a program to sum numbers from 1 to a number provided by the user. We only had a small number of working computers so three or four students clustered around a single computer. The students I was with weren't that interested in programming and so just let me write the program. This kind of code was quite easy for me at this point and I wrote the solution in no time. As always, I quickly got bored because the teacher was still going around the class inspecting everyone's solutions and he hadn't gotten to us yet. So I decided to "spice up" the program by including a few PLAY commands that would play musical tones; I thought the teacher would be impressed. Instead, he looked around and asked in an angry voice, "Who did that?!". I sheepishly raised my hand and he made me go sit in a chair for playing games instead of working. Of course, my protestations to the contrary fell on deaf ears. When he finally got to our machine, he looked at the code and asked, "Who wrote this?". All the kids there pointed to me. I thought I was going to be in trouble again, but instead the teacher asked me to come back from my time out and then had me explain how I solved the problem to the rest of the class.

Las
Las Vegas Slot Machine - a game I wrote in GW-BASIC.

I remember that I also tried to write some utility programs; I created my own journal program after being inspired by the one in Doogie Howser, M.D.. It was hopelessly limited, of course. It wasn't a true editor; you couldn't move around the screen and modify what you had already typed (I think I literally just used an INPUT statement). But it did have the ability to save journal entries. I even had a primitive encryption system based on a Caesar cipher; I would randomly generate a number (between 1 and 13) and then shift each character by that number. I used some convoluted formula to obfuscate the key and wrote it out to the encrypted file as well. Then when I read in the journal file, I would de-obfuscate the key to find the original number and then un-shift the characters by that amount. I think by this point I had also moved from GW-BASIC to QBasic which was much more powerful. In QBasic I ended up writing a shooting-gallery game as my tenth grade final-project that I also demoed at the science exhibition. It was definitely very rough and the code was terrible; I had to figure out how to do animation on my own and so things were quite hacky.

Diary
A later version diary program that I originally wrote in GW-BASIC (wish I had the source to the original); Sigma Software was some cool name I thought up for my non-existent software company.

Shooting
A Shooting Gallery game I wrote in QBasic.

By '97 we finally got dial-up internet in Oman. The trickle of information changed into a firehose! I discovered an online community of QBasic programmers and numerous QBasic pages on GeoCities and Xoom. I was ecstatic! I downloaded as many of the pages as I could so that I could go over them offline. I had also started learning HTML at this point and made my first webpage that showcased my own QBasic code and programs.

My
Viv's Domain - my silly website.

I remember that I had grand plans to have my own QBasic tutorials and even a forum where people interested in QBasic could gather and discuss programming techniques. None of those materialized, however. I graduated high-school in '99 and by that time I was writing code in C++ and had also started learning Java. My interest in QBasic and writing games slowly faded away once I began college and I started gaining interest in subjects like artificial intelligence, agent-based modeling, and language design. In fact, in the middle of my freshman year of college I even wrote an interpreter in Java for a programming-language I designed and created, called bAdkOde. I had no clue what I was doing, so the parser and interpreter were both horrific, but I learned a lot (mainly how not to do certain things).

double a, b, hypotenuse;
>"This bAdkOde script calculates the length of the hypotenuse of a right triangle.\n";

>"a:";
<a;

>"b:";
<b;

hypotenuse = (((a ^ 2.0) + (b ^ 2.0)) ^ 0.5);

>"\nThe Hypotenuse of the triangle is " + hypotenuse + ".\n";

Sample of some bAdkOde code.

Today my interests are still rather similar - I still like AI (in fact, I'm working on my PhD in game-theoretic artificial-intelligence right now) and I still like to create things that help others be productive; rather than just using tools, I prefer making them. My work is also much easier these days in the age of things like Stack Overflow, GitHub pages, and YouTube tutorials on any conceivable programming-topic. But I still fondly remember and wax nostalgic about those early days as a green computer-programmer; days that were characterized by an insatiable hunger for knowledge and an unfortunate paucity of information. The experience taught me that through perseverance, passion, and initiative, nothing is impossible to learn and master.


  1. Yes, Windows was around, but I didn't have it installed; neither did most of my friends. Plus, games needed all the memory they could get at the time and Windows used up too much of it. ↩

Digiprove sealCopyright protected by Digiprove © 2020 Vivin PaliathSome Rights Reserved
Original content here is published under these license terms: X 
License Type:Attribution
License Abstract:You may copy this content, create derivative work from it, and re-publish it, provided you include an overt attribution to the author(s).
License URL:http://creativecommons.org/licenses/by/3.0/

30 thoughts on “Learning how to program in Oman in the 90’s”

  1. vi5in says:
    July 26, 2016 at 7:08 am

    Learning how to program in Oman in the 90’s https://t.co/jWB32Tud9H https://t.co/DHck1LN88P

    Reply
  2. SecNewsBot says:
    July 26, 2016 at 7:17 am

    Hacker News – Learning how to program in Oman in the 90’s https://t.co/KGFgBhYtE1

    Reply
  3. Javin says:
    July 26, 2016 at 7:59 am

    Thanks for telling us your story, very motivating

    Reply
  4. argonautJim says:
    July 26, 2016 at 8:03 am

    Learning how to program in Oman in the 90’s https://t.co/ySHDerNPDo

    Reply
  5. tolpp says:
    July 26, 2016 at 8:07 am

    Learning how to program in Oman in the 90’s https://t.co/gIWuEzfmRB

    Reply
  6. compscinews says:
    July 26, 2016 at 8:15 am

    Learning how to program in Oman in the 90’s #programming https://t.co/3P7VoRlQjy https://t.co/bvyLr2WGZ1

    Reply
  7. HoppSearch says:
    July 26, 2016 at 8:20 am

    Learning how to program in Oman in the 90’s https://t.co/azNAYdNIA2

    Reply
  8. moski_doski says:
    July 26, 2016 at 9:07 am

    #interesting read

    Learning how to program in oman in the 90s

    https://t.co/eeJwqxBaVN

    Reply
  9. tek_news says:
    July 26, 2016 at 9:20 am

    Reddit/p: Learning how to program in Oman in the 90’s https://t.co/RRHGme6iqf

    Reply
  10. michaeljsouth says:
    July 26, 2016 at 12:14 pm

    This was really, really fun to read. Thank you for sharing it! I can definitely identify with your experimenting younger self.

    Reply
  11. animesh1977 says:
    July 26, 2016 at 4:14 pm

    Learning how to program in Oman in the 90’s https://t.co/SK9OA5iUDN

    Reply
  12. silverbacklive says:
    July 26, 2016 at 4:15 pm

    Learning how to program in Oman in the 90’s https://t.co/oqGr6m6woF #startup #Dubai #GCC

    Reply
  13. my_duwad says:
    July 26, 2016 at 4:18 pm

    Learning how to program in Oman in the 90’s https://t.co/52yQiHekdk #startup #Dubai #KSA

    Reply
  14. ipropertynet says:
    July 26, 2016 at 4:19 pm

    RT @my_duwad: Learning how to program in Oman in the 90’s https://t.co/52yQiHekdk #startup #Dubai #KSA

    Reply
  15. Jobi George Mathew says:
    July 26, 2016 at 4:29 pm

    Wow..this was a blast from the past – Jobi 🙂

    Reply
    1. vivin says:
      July 27, 2016 at 2:24 am

      Hey Jobi! Haha, yes definitely a blast from the past 🙂

      Reply
  16. hackrnews says:
    July 26, 2016 at 4:39 pm

    #hacker_news Learning how to program in Oman in the 90’s https://t.co/74RSnAdgxy

    Reply
  17. vrai777 says:
    July 26, 2016 at 4:50 pm

    Learning how to program in Oman in the 90’s https://t.co/gbTw6Cj1Rt #News #YCombinator

    Reply
  18. 0fz3 says:
    July 26, 2016 at 5:35 pm

    Learning how to program in Oman in the 90’s https://t.co/kxMftuRVyk

    Reply
  19. FrontPageHN says:
    July 26, 2016 at 5:38 pm

    Learning how to program in Oman in the 90’s https://t.co/v7fGvHUcUB (cmts https://t.co/hLYXiZ8Rjw)

    Reply
  20. sharon_smith_1 says:
    July 26, 2016 at 5:45 pm

    Learning how to program in Oman in the 90’s https://t.co/9txc89YIpi

    Reply
  21. SproutCats says:
    July 26, 2016 at 6:01 pm

    CAT HACKER: Learning how to program in Oman in the 90’s https://t.co/ugUCy16CAe

    Reply
  22. newsyc20 says:
    July 26, 2016 at 6:20 pm

    Learning how to program in Oman in the 90s https://t.co/RMVP6zeArP (https://t.co/GF9SQV4SII)

    Reply
  23. AbdurahmanAM says:
    July 26, 2016 at 11:02 pm

    @developar Learning how to program in Oman in the 90’s | Rough Book https://t.co/5fPiKPk3sN

    Reply
  24. newsyc50 says:
    July 27, 2016 at 4:01 am

    Learning how to program in Oman in the 90s https://t.co/IR1OxMK4t0 (https://t.co/unF8dv7Gru)

    Reply
  25. developar says:
    July 27, 2016 at 5:00 am

    RT @AbdurahmanAM: @developar Learning how to program in Oman in the 90’s | Rough Book https://t.co/5fPiKPk3sN

    Reply
  26. DaveQuBits says:
    July 27, 2016 at 5:54 am

    Learning how to program in Oman in the 90’s https://t.co/3Feu1RrhGd via @vi5in

    Reply
  27. _odino_ says:
    July 27, 2016 at 10:30 am

    Learning how to code growing up in oman https://t.co/BX6HjgHyV3

    Reply
  28. icymihn says:
    July 27, 2016 at 4:53 pm

    Learning how to program in Oman in the 90’s https://t.co/OkwPiRLDq3 comm: https://t.co/6Fqb2w7Qlf

    Reply
  29. Alonso Meraz says:
    July 28, 2016 at 3:44 pm

    I was born and raised in Mexico. I learned QBasic in late 90’s. My first game was a slot machine game built in Pascal. Definitely your story bring me good memories, best regards.

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Archives

  • February 2023
  • April 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • June 2017
  • March 2017
  • November 2016
  • August 2016
  • July 2016
  • June 2016
  • February 2016
  • August 2015
  • July 2014
  • June 2014
  • March 2014
  • December 2013
  • November 2013
  • September 2013
  • July 2013
  • June 2013
  • March 2013
  • February 2013
  • January 2013
  • October 2012
  • July 2012
  • June 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • July 2011
  • June 2011
  • May 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • August 2008
  • March 2008
  • February 2008
  • November 2007
  • July 2007
  • June 2007
  • May 2007
  • March 2007
  • December 2006
  • October 2006
  • September 2006
  • August 2006
  • June 2006
  • April 2006
  • March 2006
  • January 2006
  • December 2005
  • November 2005
  • October 2005
  • September 2005
  • August 2005
  • July 2005
  • June 2005
  • May 2005
  • April 2005
  • February 2005
  • October 2004
  • September 2004
  • August 2004
  • July 2004
  • June 2004
  • May 2004
  • April 2004
  • March 2004
  • February 2004
  • January 2004
  • December 2003
  • November 2003
  • October 2003
  • September 2003
  • July 2003
  • June 2003
  • May 2003
  • March 2003
  • February 2003
  • January 2003
  • December 2002
  • November 2002
  • October 2002
  • September 2002
  • August 2002
  • July 2002
  • June 2002
  • May 2002
  • April 2002
  • February 2002
  • September 2001
  • August 2001
  • April 2001
  • March 2001
  • February 2001
  • January 2001
  • December 2000
  • November 2000
  • October 2000
  • August 2000
  • July 2000
  • June 2000
  • May 2000
  • March 2000
  • January 2000
  • December 1999
  • November 1999
  • October 1999
  • September 1999
©2023 Rough Book | Built using WordPress and Responsive Blogily theme by Superb
All original content on these pages is fingerprinted and certified by Digiprove