Peter Christensen

  • Presentations
  • Contact Me

Advice to a college sophomore programmer

January 17, 2011 by Peter 11 Comments

Background: One of the new responsibilities I have at Groupon is getting lots of awesome developers to work here. [If you are or might be an awesome developer, email my work address – peterc@groupon.com – and check out the job openings at http://groupon.com/jobs ] So I’ve put myself out as a representative of Groupon’s dev team, announced hiring, answered questions, etc. In one week, two people have responded asking about summer internships.

[HILARIOUS UPDATE: I left off one sentence that has confused at least one person so far. Groupon doesn’t have an internship program right now. We’re just barely starting on campus recruiting for college graduates. The friendly advice was a consolation prize since I couldn’t help with the internship. Sorry for the confusion!]

Here’s some advice I gave them through email that I thought was worth posting publicly:

  1. If you’re already reaching out to companies when you’re a sophomore , you should be commended for being so on top of your career this early in school. Too many people wait until two months before (or even after) they graduate. Even if you don’t get the internship, you make an impression.
  2. If there’s an established technology you’d like to learn, a book is still a good place to start. There’s a balance of theory and practice, it will be edited and consistent, and give you a complete end-to-end look at the technology. But don’t just read the books, do the exercises in them. If you want to learn Rails, the book Agile Web Development with Rails has you build a complete ecommerce website and you can do it in a week or so. Sometimes doing comes before understanding (or rather, you can’t understand without doing). EDIT: How do you tell the good tech books from the bad? Ask someone who is good at that technology. Too shy? O’Reilly and Pragmatic Programmer books are generally good, and you can often get good recommendations by searching on StackOverflow or SearchYC.
  3. On that note, PLEASE don’t wait for a class to learn a new language or technology. CS classes have their place, giving you a broad foundation of principles and practice in certain specific subjects. But many techniques (e.g. source control), technologies (e.g. server administration, nginx configs, etc), and languages (many schools teach only C and Java) won’t EVER be covered in school. In the workforce, you’ll have to learn stuff on the fly and on your own for your whole career, so you need to start learning things outside of class now if you want to be decent.
  4. Don’t just focus on specific languages or frameworks, learn some general programming skills. Books like Structure and Interpretation of Computer Programs (free online at http://mitpress.mit.edu/sicp/full-text/book/book.html) , Clean Code, The Pragmatic Programmer, etc are great for that.
  5. If you glossed over that last point, go back! Reading SICP, watching the video lectures, and doing the exercises will make you a fantastic programmer.
  6. Learn at least one “obscure” language. It will help you learn things that are hard to learn in mainstream languages like Java. I’m partial to Lisp and the book Land of Lisp is a great, fun way to learn that language.
  7. Find a project. It doesn’t have to be something meaningful or important, just do it! Write a scraper to find the nearest Starbucks to you. Make a group management website for your study groups. Write software to control a LEGO mindstorm robot. Just do something, post projects online, put code up on GitHub, and write something about what you did, and put it on a blog. This gives you a public record of interest in programming outside of work, which is very, very appealing to employers and probably the number one thing in getting to an interview. It will also give you practice writing and show you how you improve over time.
  8. Get involved with developers in your area. If there are meetings in your area, you can find them in 5 seconds thanks to the other Big G. If you can’t find any, it’s because those things take time and hassle to arrange. Volunteer to help with the meetings, find locations, etc, or organize your own. That stuff isn’t hard, it just takes time and the confidence to do. That way you will generate a lot of goodwill and make connections with people you can work with and learn from.

So there you go. $100 worth of books to buy, a years worth of homework, and you will have made yourself more appealing to employers than most college graduates!

Bonus points: If someone answers you saying “We’re not ready now but get in touch next year”, make sure you do it!

Filed Under: Business, Programming

Observations After A Month At Groupon

December 20, 2010 by Peter 4 Comments

About a month ago, I started working at Groupon. It has been a pretty exciting month since then. Here are some random observations based on that time:

1) Groupon is working on exciting technology problems. Big scale, big data, multi platform, etc. The problem space is straightforward but the scale and importance of every part of the system makes it a worthwhile challenge.

2) Groupon has a principled approach to software development. Pair programming as needed, small, focused teams, meaningful code reviews, sensible testing, operations and deployment options, etc. The team is a mix of permanent employes and long-term consultants, and they support each other. It helps that the consultants come from one of the most excellent companies in Chicago. The product roadmap for the coming year shows a legitimate need to balance short term business needs with building a platform to support continued growth into the future.

Groupon’s technology work isn’t bleeding edge or particularly innovative. It is extremely well done application to a profitable problem and has scaled from a team of inital whiz kids to a medium sized team better than any place I’ve worked or know of, and signs are that it will continue into the future.

3) By a quirk of seating, I sit right behind the CEO, Andrew Mason. I occasionally overhear him talking so I have a tiny bit of insight into the higher up business decisions. Let’s just say that if you’re competing against him an the rest of the exec team, good luck to you. I think a lot of people are fooled by how he comes of as a goofball in his interviews. Don’t get me wrong, he is a goofball, buthe is also a savvy business leader. He knows what’s going on with us, our competitors, the technology, the business, etc. If you still insist on getting into the deal space, build a small niche based on personal relationships, because the chance to be a big player in the deal business is gone and it will not be relinquished.

If you’re interested in more about what it’s like to work at Groupon, leave a comment or email me. If you’re a talented developer interested in working here, email me now.

Filed Under: Business, Programming

Hey Language Snobs: Don’t Pinch Pennies

June 4, 2008 by Peter 27 Comments

Programming language snobs are penny pinchers. That’s a tough sentence to write for some that just finished holding a workshop to help people learn Lisp of all languages. Why would I make such a bold, inflammatory statement? (No, not to troll. Most of the criticisms in this article are aimed at myself, based on my own actions over the last few years.) I had an unpleasant realization after listening to two excellent talks that developed this idea planted in my head by Raganwald with this post he quoted a few months ago:

“…you can count the number of games written in a purely functional style on one hand. Is it that language tinkerers are less concerned about writing real applications? That they know you can solve any problem with focused grunt work, but it’s not interesting to them? That the spark and newness of a different language is its own reward? Either way, the BASIC programmers win when it comes down to getting projects finished.”

—James Hague, Slumming with BASIC Programmers

The gist of the post is that uber-languages like Lisp, Erlang, Ruby, and even C are worlds ahead of BASIC, but somehow a group of Neanderthals put down their clubs and wiped away their drool long enough to write a slew of various and impressive computer games using BASIC. OK, he didn’t say that, his exact words were “…largely written by people with minimal programming background.” I was just translating for the language snobs out there. But then, mid-gloat, he hits them, you (even me) with that damning quote above about getting projects finished.

[Read more…]

Filed Under: Programming, Startups

Installing SBCL, Emacs, and SLIME on Windows XP

May 30, 2008 by Peter 28 Comments

My recent install guide for CLISP, Emacs, and SLIME on Windows XP was a big hit – it has had about 2000 hits and 5 sincere thanks in the comments (it even got praise from a troll!). In it I promised a similar guide for SBCL, and here it is.

The nice thing is that swapping out Common Lisp implementations within an Emacs/SLIME setup is easy, so maybe 3/4 of this guide is identical to the CLISP guide. I’ll put a disclaimer at the beginning of each section saying whether there’s anything new or whether you can skip it.

[Read more…]

Filed Under: Lisp, Programming

Setting Up and Using Emacs InfoMode

May 25, 2008 by Peter 4 Comments

Emacs has an ancient (predating hypertext), simple, powerful documentation program called Info. It’s very difficult to find info about it online (try searching for “Info”), so here’s my beginner’s guide.

Info is an output format for the Texinfo typesetting syntax. Texinfo is used for writing documentation that can be output in multiple print and digital formats and is the official documentation format of the GNU project. Info files are strongly associated with Emacs – Emacs is the primary reader for Info files, but there is also a standalone reader. Manuals are organized into a tree of nodes, with a variety of ways to navigate between those nodes.

Info files can technically be written by hand, but it is much more common for them to be compiled from Texinfo. Many Linux/Unix distros come bundled with the TeX toolchain necessary to compile Texinfo, but Windows does not. The TeX/LaTex/Texinfo on Windows post is coming in the near future. For now, stick to precompiled .info files or go dive into TeX yourself.

Emacs ships with several Info manuals – they’re in the emacs/info folder. You can also create your own Info directory, add new manuals to the directory, and create your own manuals. This guide will walk you through the steps needed to get Emacs to find your info directory, add manuals in your directory to the main directory list, and use Info from within Emacs.

[NOTE: This guide assumes you’re following the directory conventions I laid out in my previous post Installing CLISP, Emacs, and SLIME on Windows XP. It also gives you the baseline level of familiarity with Emacs to follow along here.]

[Read more…]

Filed Under: Lisp, Programming

Installing CLISP, Emacs, and SLIME on Windows XP

May 16, 2008 by Peter 57 Comments

Until this week, I had been putting off setting up a CL/Emacs/SLIME environment from scratch ever since I had trouble getting ASDF to work with Lispbox. Every time I tried, I ran into some will-sapping problem like needing to find a good Windows program for .tar.gz files, or finding the command line flags to get CLISP to run right, or figuring out the best way to setup a folder structure that matches the Unix folders used by most Lispers. Every time I fixed one problem, I ran into another. For someone out there trying to do a setup like this, there are lots of good resources, but they are either incomplete or outdated.

For instance, the Common Lisp Cookbook has a very thorough page on Setting Up an IDE with Emacs on Windows or Max OSX, but as far as I can tell, it’s from 2004 or earlier because it doesn’t mention SBCL or SLIME, two of the most popular pieces of CL development software today. Or when you run into a specific problem, it’s usually not too hard to find an answer, but it might not match the setup you’re using. That’s why I had to quit using Lispbox, because no one had any clue how it was configured, especially not on Windows. n00bs didn’t know the answers and the wizards had a traditional setup.

Here are some of the variables that contribute to the combinatorial explosion of configuration, in order or pain caused:

  • Operating system: Linux (many flavors), Mac, Windows, Cygwin
  • CL implementation: most common are SBCL, CMUCL, Allegro, LispWorks, CLISP
  • CL implementation version (I ran into a problem here)
  • SLIME version (stable 2.0 release or CVS snapshot)
  • Emacs version (I didn’t run across any problems with this)
  • I almost forgot, now there’s Cusp/Eclipse if you don’t want to use Emacs/SLIME, but right now Cusp is only tested on SBCL.

Maybe someday someone will try out all of those combinations and report, but for today, I did exactly one: Windows XP, CLISP 2.44, SLIME CVS, and Emacs 22.2 Why CLISP? After reading lots of internet, I came to the conclusion that (aside from the commercial CLs), CLISP is the best implementation for Windows users. The knocks against it are that it’s slow because it’s byte-code compiled, it doesn’t have threads, and on some points, it’s ideologically different from CL and other implementations.

Well, the performance isn’t a big concern for me (plus as I went to press, 2.45 was released with experimental JIT compilation), the threads also aren’t a big deal right now, and I think the differences will help me be aware of the considerations for writing portable code. Also regarding the SBCL windows port, it’s still considered experimental (currently v1.013 for Windows) but people are saying it’s stable and everything works except the threads. There’s even an msi installer for the Windows version. One of my next projects will be to dive into the SBCL documentation and mailing lists to get a better feel for it.

As far as the philosophy behind this (and future) setup guides, I want them to be a) thorough and b) instructive. Instructive? If you just want to take my word for everything, that’s fine, but I want you to know where I got my info from, so I’ve tried to include links to references for each step. On to the setup guide!

[Read more…]

Filed Under: Lisp, Programming

Music Operates Directly On Your Abstract Syntax Tree

May 9, 2008 by Peter 3 Comments

I mentioned music in each of the last two posts as a digitizable creation that people enjoy enough to pay for. So what is it about music that is so great? I’ve been asking myself this question for years, and now seems like the time to try and tackle it.

I’ve always enjoyed music – from playing the trumpet in elementary school, owning a $230 portable CD player in 1993, to being an iPod man today. Practically every spare dollar I earned between the ages of 13 and 17 was spent on CDs. I love and appreciate all kinds of music – classical, rap, rock, alternative, opera, techno, Hawai’ian (especially Hawai’ian), even country (Claire from 9th grade, if you’re reading this (which I’m pretty darn sure you’re not), it took over 15 years and I’m still not a fan, but I can say now that I appreciate country music). But now I don’t listen to music very often. In fact hardly at all. I have my iPod running most of the day, but I listen to podcasts, sweet delicious podcasts of all stripes that keep me informed and help me learn new things. What’s the difference between me now and when I was in high school (besides the notably reduced mental redardation and 70 extra pounds)?

Music and the Brain

On Intelligence

My answer has come from my interest in neuroscience and artificial intelligence. Jeff Hawkins’ book On Intelligence (God bless him for writing it) stresses the temporal nature of the brain – how learning, memory, even sensory perceptions like vision and hearing only work on data that changes through time. Our brain works by processing related events connected by the sequence they occur in – kind of like musical notes! Music speaks our brain’s native language! No compiling, no byte code, etc – it operates directly on our abstract syntax tree (that’s my analogy, don’t hold it against Jeff). That is why it’s easier to remember song lyrics than the words of a speech – the lyrics are attached to a musical sequence that burns into your mind.

[Read more…]

Filed Under: Fun, Programming

Hacker vs Engineer – Know The Difference!

March 6, 2008 by Peter 8 Comments

Some of the most commonly used terms are often the most misunderstood and least agreed upon. One example of this is the difference between a startup and a business. Now I’m no expert (having run neither of them), but I do read a lot and I pay $8 a month for hosting, so I can pretend to be! Here are my definitions for startup and business (again lifted from a Hacker News comment I made):

Startup: This is when your revenues can’t support the company and its employees at a standard they would expect. This could mean a lot of things, for instance

  • You’re self funding but doing the ramen/living on a friend’s couch/wifi-freeloading super cheapo route. Maybe you’re making a profit but you don’t want to live like this forever.
  • You’re living off of investment money unrelated to what your startup is producing: angel/VC money, cash from a prior successful exit, student loans, day job money, etc.

The key thing is that your idea and execution are currently unproven. You should be getting noticeably better each day as you improve your technology, your product, your marketing, your brand, your sales cycle, etc, (all these things create wealth but not necessarily money), trying to find the right combination of those things that lead to market acceptance and self-sustaining revenues. Or your goal might not be self-sustaining revenues but to create a product or technology or business that will be bought by another, larger company.

Business: A business is funded by its customers and revenues, and it has found a successful niche in the market. Once you get to this point, some of the pressure is off, although your niche and success is a moving target and you need to continue working and executing in order to get knocked out of it. There are completely different skills and personalities needed to nurture and grow a successful business/product as opposed to developing a new one and finding a market for it.

[Read more…]

Filed Under: Programming, Startups

Sleeping Too Much and Fighting With Emacs and ASDF

February 29, 2008 by Peter 11 Comments

So it has been a while since I wrote something useful. I have either an excuse or an explanation, (depending on how you value excuses). Two weekends ago, I got sick and, long story short, I got better but I had to sleep a lot to do it. Ergo, no polyphasic sleep during that time. I’ve been sleeping like a normal person, except my wife has had trouble sleeping so I’ve been sleeping for maybe 6-7 hours, with a 30-60 minute interruption somewhere in the middle. What did this do to me? It made me really, really tired! I’ve been sleeping too much and doing a bad job at it, and I’m sick of it. I’m taking one last night sleep tonight and then tomorrow I’ll start taking my naps and staying up at night. And I’m very much looking forward to getting that time back.

So with 5 fewer hours a day to work, what did I cut out and what did I keep? Well, I haven’t a) written quality blog material, b) done housework chores, c) programmed as much, or d) made all the great improvements people suggested to my SLIME/Emacs cheat sheet. I decided that if I only had a little time, I should spend it on what’s most important, which right now is sharpening my Lisp skills. I’m trying to get to a point where I can work on programming for my startup without referring to documentation for every single thing I try to do. That consists of 3 things:

  1. get better at Lisp (currently working through Practical Common Lisp)
  2. learn to use ASDF (so I don’t have to only use one file)
  3. customize Emacs and learn more commands

#1 is going nicely. Unfortunately, #2 and #3 pose a bit of a problem. I’m currently using the Allegro-bundled LispBox for Windows from the PCL website. It’s been great for getting started, getting comfortable with basic commands, and getting familiar with SLIME and Emacs. However, it’s not conducive at all to customization. I’m not saying that it can’t be customized, just that it is a minor distribution for new users, so there’s not a lot of documentation out there for working with it. Three big strikes: (Windows, LispBox, Allegro) means that there are very few users, very few comments, and very little help.

For instance, ASDF is included and configured correctly, with the code from PCL already setup and easy to load. However, I tried for (too long) to get ASDF to load my code. I wrote my own packages.lisp and .asd files, I tried pushing values for my directory to the asdf:*central-registry* so I didn’t have to make a zillion shortcut files, etc. Long story short, it didn’t work and nowhere on the Google did anyone have specific advice for my setup. Ditto with .emacs customization with Lispbox (for anyone who’s wondering, I think it’s at C:\Program Files\acl81-express\misc\dot-emacs.el, but I couldn’t get the settings to load. YMMV). It’s just too obscure and I don’t have the time to figure out everything on my own, so I’m moving to a more mainstream setup.

So I put development and practice mostly on hold so I could get a more common setup that will make it easier to get help with when (not if) I have issues. I’m still working on the setup, becuase I spent a lot of time researching recommendations and best practices. I want to get it right (or at least mostly right) the first time so I don’t have to go back and re-do everything again. Tweaking is fine and I plan to keep doing that forever, but no more redos. I’ll put out another n00b type giude (along with rationales) when I get my own setup working, but here’s what I’ve come up with:

  • Emacs 22.1
  • SLIME 2.0
  • CLisp
  • Cygwin(?) – I’m trying to limit the number of tools I have to deal with so I wanted to leave out Cygwin. Can anyone give advice on whether it will make my life easier or harder in the short term?

Thanks to everyone who has expressed interest in the meantime. Keep your eyes out for more guides and an update to the cheat sheet. That’s my motto, helping the n00b in all of us!

UPDATE: I wrote this on Thursday but haven’t been able to post until Friday night. I’ve taken two naps, planning on staying up at night, and I feel great! I’m already happy to be back on a polyphasic schedule!

Filed Under: Polyphasic, Programming

Public Beta Open For “Ultimate N00b SLIME/Emacs Cheat Sheet”

February 14, 2008 by Peter 28 Comments

On this Valentine’s Day, give the gift people really want – complex key chords!

In other news, I’ve got fans!

Well, at least one anyway. A lot of the feedback I’ve received on this site so far has been from experienced Lispers who appreciate my enthusiasm and contributions for new users. Yesterday, I got the first (I think) comment and reply from another new Lisper who’s actually getting some use out of my stuff. Aaron Feng wrote up my SLIME movie reference, and he even caught my later reference to my upcoming “Ultimate N00b SLIME/Emacs Cheat Sheet”. Well Aaron, wait no more!

I’ve been using it for a week or so, and I’m sort of pleased with it. First the positives:

  • It includes all of the SLIME commands from the SLIME manual
  • It includes all of the Emacs commands from the built in tutorial
  • It includes the main Emacs help keys
  • The commands are sorted and grouped by functional area
  • It’s all fits on one page

Here are some of the things I’m not so pleased with:

  • It has very few Emacs commands, relative to what’s available
  • It doesn’t include any advanced text manipulation options
  • It doesn’t have the sexp-based manipulation commands. I couldn’t find standard bindings for these and I’m not up to Emacs tweaking yet. Adding a key for the slime-selector was enough for me at this point.
  • It’s pretty crowded (~100 commands and descriptions on one page)

The Emacs section is weak mainly because I haven’t dived into Emacs the way I have into Lisp/SLIME. I figure for now I can use it as a standard, powerful IDE for writing, testing, and debugging Lisp, and I can add Emacs wizardry later. I think I hit the point of diminishing returns where focusing on my tools will help me learn to code in Lisp. Now I need to get my coding up to par with my tools! I need to improve to the point where it’s worth getting a copy of Learning GNU Emacs.

So without further ado, here is my unfinished yet eminently usable cheat sheet:

[NOTE: These links were broken for a while. They work now]

Ultimate N00b SLIME/Emacs Cheat Sheet (pdf)

or customize your own!

Ultimate N00b SLIME/Emacs Cheat Sheet (xls)

Enjoy! As usual, feedback is appreciated. If you’ve got an Emacs trick that you use a jillion times a day that you think a new user could use, this is a great way to share!

(PS I hope it goes without saying but there isn’t any kind of beta process. Just that I consider it a work in progress and that it will definitely change in the future, hopefully in response to useful criticism.)

Follow the discussion at: Hacker News, programming.reddit.com, comp.lang.lisp, comp.emacs

 

Filed Under: Lisp, Programming

« Previous Page

Categories

  • Blog
  • Book Review
  • Business
  • Clojure
  • Education
  • Emacs
  • Fun
  • iOS
  • Lisp
  • Personal Sprints
  • Pictures
  • Polyphasic
  • Presentations
  • Programming
  • Rails
  • Startups
  • Uncategorized

Copyright © 2025 · Minimum Pro Theme on Genesis Framework · WordPress · Log in