A brief history
So the obligatory how I got started programming story: I taught myself BASIC using my fourth grade math textbook. My first nontrivial program was a text adventure game backed by a big spaghetti mess of GOTOs. I’ve been hooked ever since.
I was ambitious enough to set my sights on a Computer Science degree from one of the top 5 Universities in the US. After applying to the University of California Berkeley three times, they finally let me in, due to what I’m guessing was some combination of persistence, luck, skill, and a desire not to be bothered anymore. I learned a tremendous amount and graduated with a GPA just shy of honors. Berkeley’s computer science department was ranked number one in the country the year I graduated. I was sorely tempted to write a letter to my good friends in the admissions department to gloat, but decided to leave them in peace.
After graduation, I took a consulting position with a Costa Rican company. I moved to Costa Rica for what was originally supposed to be 6 months, and ended up staying for nearly 10 years. During that time I had the opportunity to consult in a wide variety of industries, bootstrap a service for book lovers, and use a bunch of different tech stacks. A few of the highlights are listed in my portfolio.
As of 2014, I’m back in the United States and working full-time building web and mobile apps in the health and quantified-self space.
I am opinionated about my tools because my productivity depends on them, but opinionated isn’t the same as fanatical. Strong opinions loosely held and all that.
Emacs is my editor of choice. Even though I have been using it for many years, I still feel like an emacs novice. This is something I have been changing with more structured and deliberate practice.
I’ve used various flavors of Linux on the desktop: Red Hat, Suse, Mandrake, Ubuntu… In the end I realized that once the OS is set up and configured, I spend most of my time in bash and they are all pretty much the same. My current development machine is a MacBook Air, the first Mac I’ve owned. With the help of Homebrew and Vagrant, it’s a suitable Linux replacement with a very nice form factor.
As far as programming languages, I have had a lot of opportunity to experiment – creating large scale applications in Python, Java, and .NET, and dabbling with PHP, Common Lisp, Scheme, Clojure, Verilog, shell scripting, Scala, and others. At the moment, my weapon of choice is Python. It took me a while to get over the idea that whitespace is significant, but now firing up an editor and looking at Python code feels like a breath of fresh air compared to more verbose languages like Java.
I have been writing longform articles about programming, development tips and guides, and reviews of books and tools for developers here on GrokCode since 2007. GrokCode was started as a way to connect with other developers despite the dearth of programmers in the small Costa Rican town where I lived. Writing has become an invaluable way for me to focus and explore my thoughts.
Some of my favorite pieces explore pain points (Java Build Systems: A Sad State of Affairs, Dear Python, Why Are You So Ugly), share useful tips (You Should Change Your Python Shell, The Power of a Programming Portfolio), or spring from research I have done to improve my productivity or become a better programmer (The Ergonomic Keyboard Productivity Myth, Be a Paranoid Pessimistic Programmer, Test Driven Development and the Meaning of Done).
Here are the all time most popular articles ranked by pageviews:
- The Top 9½ In a Hacker’s Bookshelf
- The Power of a Programming Portfolio
- Scientifically Proven Tips For a More Productive Office
- Dear Python, Why Are You So Ugly?
- Jess Johnson’s Programming Portfolio
- Famous Programmers From Adleman to Zimmermann
- 5½ More Books In a Hacker’s Bookshelf
- E2: The (NP-Complete) Kids’ Game with the $2 Million Prize
- How to Write Original Jokes (Or Have A Computer Do It For You)
- Practice Your Code-Fu: Programming Contests and Puzzles Online
GrokCode has been featured on Slashdot, Mashable, Daring Fireball, The Code Project, Pycoder’s Weekly and various other publications around the interwebs. Jeff Atwood and Zed Shaw have tweeted links to GrokCode, which isn’t by any means a reliable measure of the writing quality, but was still really awesome.
Aside from being a programmer and a writer, I am a world citizen. Living in two different cultures and traveling in unfamiliar places has changed my perspective on what it means to be a person and a caretaker of the Earth.
The world is my country, all mankind are my brethren and to do good is my religion. – Thomas Paine