Two Steps Forward

My blog on software development, the universe, and everything.

About Me

My name is Narsimham Chelluri. Most people call me Narsa.

I love computers. I had the good fortune to grow up in a household that always had a computer in it: first a Commodore 64, next an AT&T PC 6300 (an 8086, it ran MS-DOS), next a 386SX, and so on. My big brother played on the C64 and the 6300 and I watched over his shoulder and soaked in as much as I could (later taking my turn when I got it). My mother likes to talk about how as I child I begged him to “let me push button!” And when I was in elementary school it was not at all uncommon for three or four of us kids from the neighborhood to be sitting around someone’s computer playing some game or other.

My parents had taught me to read, and with the computers around, I learned to type before I learned to write. The earliest document I remember writing was called “I love school!!!”. I preferred PFS: Write over WordPerfect since it was simple and to the point. I played Dig Dug, Prince of Persia, Tetris, Rampage, Test Drive, Bubble Bobble, Q*bert, Ski or Die, and many Sierra games on that PC. I read the MS-DOS manuals (for version 2.11, but over time I upgraded that bad boy all the way up to 6.22) and learned to perform the AUTOEXEC.BAT and CONFIG.SYS modifications needed to get all the games running. I made boot disks with CONFIG.SYS menus full of game configurations for my friends.

I used our 2400 baud modem to play BBS door games like Operation Overkill: ][, TradeWars 2002, Barren Realms Elite, and Legend of the Red Dragon, and posted on message boards with adults around the world on FidoNet while I was 7 or 8 years old. It makes me laugh now thinking of what they must have thought of me. I can’t remember what I said to them at all, which may not be something a 7 or 8 year old will be one day be saying about the postings they make today! I remember really enjoying the shareware concept, and I loved TELIX with its ANSI glory and the digital human interactions it opened up. I remember installing the third-party IceZmodem protocol; it implemented Zmodem, the fastest protocol, and let you play in-built games or listen to .MOD music at the same time. It really was a revelation back then.

Once when my friend upgraded to a Sound Blaster I bought his old AdLib soundcard for $20 and his dad came over and installed it in my machine. It was glorious. I remember rocking out to the Space Quest 3 music on that thing. Life just lacked a little luster when you first heard a soundcard at someone else’s house and then came home to your 1-voice PC speaker, and getting that experience at home was one of those rare things where the reality was just as good as the expectation. (I later experienced this feeling again after watching a friend play Quake 2 with his 3dfx graphics card and when I, shortly after, installed my brand new OEM RIVA TNT2.) I modified and executed my first and only real-world penetration by tweaking an exploit for the Renegade BBS system that I’d found in Phrack magazine (adding relative paths to a ZIP file and having the Renegade upload scanner extract it, overwriting system menus with backdoored versions) for the Iniquity BBS system, hiding a “Drop to Iniquity Shell” command in a high ASCII 2-stroke hotkey (/², ALT-2,5,3 baby).

We had a few programming books lying around, but they were tough to read and I didn’t get anywhere with them. One day we were visiting my cousins’ house and they had a copy of “C for Dummies” lying around and I picked it up and started reading it. I loved it so much I didn’t stop going through the book and doing the exercises until I was done. In writing that book I feel that Dan Gookin changed my life in a serious way. I am incredibly grateful to him for this gentle and fun and really enthusiastic introduction to the world of programming. Things have never been the same for me since. Picking up that book and going through it, entering into the world of software development, will always be one of the most significant events in my life. I love this shit.

I was not able to obtain full-time employment as a professional developer, though I’d tried, by the time I was about 20, and I ended up enrolling in the University of Waterloo. In 2007 I earned a Bachelors of Mathematics degree (Honors Computer Science, Drama Minor). Despite me being a perpetually underachieving student always on the brink of getting thrown out of school, I found it really educational. Once I was done, having the degree on my resume combined with experience from programming internships meant I definitely got taken seriously for entry level full-time dev positions.

Some of the many projects I worked on at school included: developing a real-time multikernel operating system for x86 (C, 386 assembly), implementing lossless data transfer over UDP (Java), making a remote procedure call library (C++), and publicly performing two original plays with a group of my friends. I also took a public speaking class which was great. I’ve been developing consumer facing applications professionally since finishing school. Nearly all of my work has been web application development, and I’ve worked at mostly tiny-to-fairly-small companies so I’ve at some point played pretty much every role on the product team. I also make open-source contributions where I’m able and interested, which is mostly drive-through bugfixes and patches to projects I encounter in my work. I have a couple of thousand side projects in the works, one or two of which may even see the light of day.

A couple of my favorite quotes on software development:

“If you want to set off and go develop some grand new thing, you don’t need millions of dollars of capitalization. You need enough pizza and Diet Coke to stick in your refrigerator, a cheap PC to work on and the dedication to go through with it.” — John Carmack

“The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures…

“Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. […] The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.” — Fred Brooks