How did I get into computer science? I don’t know. I grew up immersed in computers.
A preschooler: At the panel interview for my admission to grade school (this additional scrutiny required because my parents want me admitted a year early), the principal is relieved to hear I can’t write my name. She is about to reject the application–when I ask for a computer mouse so that I can write it. The bemused principal asks, “A mouse?”
I’m in grade one, in my first computer class. The computers are PC XTs, older than the computer we have at home. The program is LOGO. I light up. It’s an old friend. I finish my exercise quickly and fidget. Before long, I’m helping my classmates with the blessing of my teacher. Then I’m helping the teachers with Wordstar.
At home. My sister is learning Turbo Pascal in high school. I idolize my eldest sister, seven years older than I am. I want to wear the same kinds of clothes, read the same books, do the same kinds of things. She is in high school, and is probably annoyed by this at home and embarrassed by this in front of friends. My first taste of rebellious learning: when people are busy or distracted, I sneak into the computer area and dive into the Turbo Pascal manuals. I don’t understand them yet, but given enough reading – and whatever experimentation I can fit into my ration of computer time – I will.
And I do. I watch Doogie Howser type his episodic summary into a simple text editor. I figure out how to create a similar tool myself, and discover the interesting secrets of the ASCII character set along the way.
Grade school English classes. I teach myself how to speed-read through the SRA reading labs, focusing on which parts are likely to turn up in the review sections. I finish well ahead of schedule. The teacher sends me to the computer lab to play educational games and tinker.
My eldest sister relents and teaches me about bulletin board systems. I’m nine, one of the youngest. I hide it with clear writing and good punctuation, although my poetry is still trite. I write. A lot.
By the time I hit high school, I’m firmly established as a computer geek. In a school full of nerds and geeks, I can code circles around most people in my batch. While my classmates get the hang of MSDOS Edit and Microsoft Word, my high school teacher Hagee Sarmago gives me root access on a Linux machine and a few tips on how to find documentation. He asks me to set up a Linux-based BBS. It’s my first time to work with that operating system. I love it.
My teacher also invites me to try out for the programming competitions team. I scribble some algorithms in Turbo Pascal-like pseudocode and others in flowcharts. I make it into the list of trainees.
Then it’s a crash course in QBasic and competitive problem solving. The rest of high school computing class is a blur – Turbo Pascal (officially now), SQL, Visual Basic – nothing as challenging or as fascinating as the competitions. My parents take us backpacking through Europe over my protests; I’d rather be in training all summer, even if I’m not on the main team. By my second year of contests, I consistently place among the top spots.
This is also where I discover that it’s interesting to be a geek girl. I have crushes on, am crushed-on by, and go through the requisite high school drama mostly within the closeknit tech group. Sometimes I take advantage of this, turning up at programming contests in a dress in case people will underestimate me. Sometimes I struggle to navigate friendships complicated by expectations.
There’s no question about what course I want to take in university, only where I want to take it. I want to go to the University of the Philippines, where many of my friends have gone. My parents make me apply to another school, just in case – Ateneo de Manila University. I go to Ateneo’s computer science open house and see the professors laughing, having fun with the orientation. Everyone is nice. I go there.
I discover a few of my former team members in the same course, a few years ahead. We start joining programming competitions again, training during summers. We do well. In my spare time, we build web systems and other tech projects for the school. I get a kick out of seeing teachers use our system. Much better than projects that get deleted at the end of the term. I support it through several incarnations.
Some of my friends talk the residence manager into bumping me up the waitlist because of my technical skills. I get a spot in the girls’ dorm. I have my own key to the server room, which is in the boys’ dorm. It’s airconditioned, a paradise in August heat.
I help administer the network: everything from installing LAN cards and crimping cables, to labelling wires with the help of a tester, to creating firewall rules and managing our small web server. There are a number of other geeks who do amazing things. I learn by osmosis.
I’m in third year university, looking at my curriculum. I hear operating systems class will be high-level; learn from the textbook, understand, and answer the tests. I look with envy at the syllabus from Georgia Tech, where students learn about operating systems by hacking Linux on the Compaq iPaq PDA. I decide that if ordinary undergraduates at a good school can do that, surely I should be able to figure something out. I ask my parents for an iPaq for my 18th birthday, instead of a fancy party. I get the iPaq and flash Linux onto it carefully. It works.
I want to try out the ideas from class. I skim a book about the Linux kernel, but it’s too big for me to grasp. I start with the iPaq bootloader. I read the C source code and spot two small errors: = instead of ==. I write the developers and confirm that those were really errors. Emboldened, I read some more, and write code for some their low-priority task items. They teach me how to send a diff. It’s finals week and I’m procrastinating studying, so I hack some more features in. Several days of this, and Jamey Hicks from the Compaq Research Labs calls me up to ask me who I am and if I want commit access to their repository. I add tab completion and help to their shell, and FAT support for long filenames.
I try different editors until Unix Power Tools convinces me to stick with Emacs for a while. I do. I learn to tweak it. I try things out. I fall in love with the Emacs Planner mode for managing your day, and I send John Wiegley a note volunteering to help track down bugs.
He promptly makes me the maintainer.
I’m down to four classes a semester during my final year, because I got extra credits from advanced placement and took summer classes too. I have plenty of time to code, and I do. I start using Emacs Planner to keep my notes. Following people’s requests and my ideas, I build publishing tools, cross-referencing tools, tracking tools. I build a community through a mailing list, start hanging out on IRC.
A bug of mine wipes out someone’s data. He writes me an unhappy but polite note. I’m mortified, but we keep working on it, and eventually we solve the problem. The solution helps another, inspires yet another, and we add more and more.
And there I am, an 18-year-old girl in a developing country, and I’m making a difference in hundreds of people’s lives through code.
Open source transformed computer science for me. It wasn’t about figuring out the right algorithm for a problem – although that was fun for years. It wasn’t about building projects that would get briefly reviewed by a teacher and then forgotten. It was about making things that helped people work or live better. It was a profoundly social experience, a conversation with countless others through the medium of code.
Part of the reason why I have this deep love of Emacs (irrational for a computer program?) is this experience of layer upon layer of accreted functionality from programmers solving problems and scratching itches, a treasurehunt of gems, an incredible community across time and space. And always that question: how can I do things a little bit better?
You might know this story. You may even have helped me through it, and know more clearly the parts that are fuzzy or forgotten. There’s luck in it, but I owe a lot more to conscious decisions by others: my family, my teachers, my friends, and so many other people. Thanks.
Sacha Chua is a collaboration evangelist at IBM. She blogs at http://livinganawesomelife.com.