Archive for September, 2008
How to Hire College Grads
As a little background for this post, I should tell you that in the past few months I have graduated with a computer engineering degree from a good university, drove a startup into the ground, and have just accepted an offer for a “real” job. In these past few months, I have experienced and heard tales of a number of different recruiting techniques, and have developed an appreciation for what works and what does not.
The most important thing is to believe that college recruiting is important. It is important. Making an effort to get good college students not only helps get the best recruits, but will help improve your reputation. With a good reputation, the best candidates come to you. That’s a good thing. Young talent can energize the company in way the best management cannot, and it is a lot cheaper than the best management to boot.
So what can you do to get the best talent to come to your company?
- Make sure they will be interested in their day to day work. Even if the company makes boring products, people interested in technology will hear you out if you convince them that they can work on the technology they want to work on at your company. Find out what they are interested in and put them in touch with the people who do that in your company. Make sure HR is familiar with the technologies your company is delving into.
- Make the offer competitive. One of the easiest ways to get a candidate is to offer more money. That’s rather obvious.
- Make them excited about the team. College students are used to being around college students and are a bit scared that Office Space describes real life. Make sure your recruiters are young, a relaxed work atmosphere is emphasized, and interns come back raving about how much fun they have.
- Make it obvious that you have your act together. Have every question answered quickly, and make sure the people who are in charge of answering questions answer promptly. When offers are flying in from every direction, the company that takes three days to get back to its candidates is the company that has already been forgotten. This is especially important for startups. If there’s a question about whether your company is going to make it, present a face that is overwhelmingly professional, dynamic, and, well, proud. You need to show that you can do anything the bigger companies can and, since you’re so small, you really want this candidate. Make sure every detail is in place.
- Have them talk to people who are calling the shots. Even if it’s not for very long, college students are impressed by executive power. For a small company, make sure the CEO is contacting every candidate.
- Go the extra step. This is the most important. College students are so easy to influence, and when you are paying them tens of thousands of dollars a year, it’s worth it to throw a few perks their way to make it obvious you are on their side and you really want them. If a candidate makes a comment about a particular product they think is cool, give them one, on the house. Take them out for drinks after an interview. For instance, if the candidate might sign with the iPhone team but starts chatting about a side interest that deals with Apple TV, send them an Apple TV. It sets you back a few hundred dollars, but you’ve won a loyal candidate. If you fly them out to interview, get them a room with a view. Even just giving them a nice shirt is enough to win you some points.
I had a friend that went to Microsoft. He was being used by the MS recruiters for an ad that demonstrated the kind of talent they were pulling in. The ad was going to run in a week, and he had not signed yet. The recruiter asked him what it would take to get him to sign that day, and he said an open tab at his favorite bar for him and his friends. She said yes, and they ran up a $800 bar tab (which is huge in Champaign, IL). $800 is nothing for Microsoft, and they got a top recruit and a ton of good will for their money. Half of the top recruits in that class ended up going to Microsoft.
That’s the kind of recruiting that works. It might seem base to those that have been in the industry a while, but for college students, this is a whole new game, and love is easy to buy.
The American Suburbs
Many of my friends and myself feel that the American suburb is a terrible thing. The houses are all the same, the restaurants are all chains, the stores are all warehouses, and the people are all fake. I had the privilege of growing up in a neighborhood that viciously guarded its downtown. This town was not as bad as many suburban towns, but it was still slowly falling into becoming the typical American suburb.
So where did we go wrong? Europe is as advanced as we are and has largely managed to avoid the big box stores and especially the subdivisions. They have retained their neighborly villages and it’s still possible to find a place to eat that makes the village specialty. Hell, it may have invented the village specialty. What is so different about America that has created this suburban culture?
In short, I’m too young to know. However, no one is too young to guess. I’ve hypothesized a few things below, let me know what you think.
- Land values in Europe went up before there were cars. If land outside your village was prohibitively expensive when it became practical to move out of the village, you may not have done so. In contrast, land in America has always been cheap on average.
- Europeans like good food. They’re just raised with more sophisticated tastes and wouldn’t tolerate chain restaurants.
- High inner city crime drove people out of population centers. The US had very high crime rates earlier in the 20th century. Perhaps respectable people needed to get out.
- Bussing reduced the quality of inner city schools. With people afraid to send their children to schools of questionable quality, those with means and desire left the cities. This left only poor and disrupted children in the cities, which inevitably lead to a worse educational system, forcing more people to leave.
- Home ownership became a status symbol. It’s hard to own land in the city, if owning a home became something to shoot for, the suburbs would be very attractive.
That’s all I’ve got right now. Does anybody have any better ideas? How did America become Suburbia?
Django round 2
Last year when I was going through the various python frameworks, I eventually dismissed Django in favor of TurboGears. From TurboGears I settled on Pylons as my web framework of choice, and excepting some quirks and some bad documentation, I’ve been very happy.
Last night I had the privledge of revisiting Django to do a programming problem as part of an interview. I was tasked with making a little blog system that supported pingbacks. Having a lot more experience with frameworks now, I was able to really sit back and think about what I liked and what I didn’t, with respect to Pylons.
First of all, the emphasis on loosely coupled components is terriffic. One of the major problems we realized with harmonize was that our componentization was not fine grained enough and required too much knowledge of the code base to effectively navigate. Django is right to emphasize this from the beginning.
Django’s documentation is also quite a bit better organized than Pylons. They have a standardized approach that details all their components, and good tutorials and an alright book. On the other hand, the documentation for pylons is spotty and disorganized, with the documentation for its components being hit and miss. The docs for SQLAlchemy are second to none, but the docs for Beaker, the caching framework shipped with Pylons, barely exist.
The actual components of Django could use some help, however.
Django does not have a robust web server built in, like Pylons, so the recommended deployment strategy is with mod_python and Apache. This is hardly the lightweight, scalable approach that has become popular lately. I feel that an excellent static web server that can also serve as a reverse proxy is a great way of getting the most out of your servers. When developing new apps, you don’t want to be giving huge amounts of memory to apache. Your young app is most likely going to need that memory!
Django’s model is pretty good, but it clearly lacks the power that SQLAlchemy has. SQLAlchemy is an amazing bit of technology with support for everything from programmatically constructing SQL to sharding databases to a fully declarative ORM. Django’s model is just an ORM. I didn’t find querying to be very intuitive either (attributes just magically appear in objects that represent relationships), but it may just be that I am used to SQLAlachemy’s model. SQLAlchemy uses a “session” in a way that makes a lot of sense once you read a bit about it. I never know when Django is flushing transactions because there’s no real concept of a session.
By far the worst part of Django is the templating system. Perhaps I wasn’t using it correctly, but I hated it. After spending all summer with a robust and powerful templating solution in Pylons (Mako), I was completely taken aback at the simplicity and incompleteness of the Django solution. Beyond optimizations like the lack of compiling and caching of templates, the Django system doesn’t even support basic python syntax. You can pass variables, define blocks, and do basic if statements and loops, but beyond that, you can’t actually actually execute any code. Simple things like accessing a single element of a list seemed to be unsupported. I could not import modules or call functions, and forget about blocks of python code.
The syntax itself of the templating system seemed poorly thought out. The template tags did not look like html tags, python code, or the code of any other language. Instead they use “{% %}” to denote blocks and “{{ }}” to denote where the values of variables should be inserted. This seems completely arbitrary. I feel that Mako’s habit of making its syntax look like regular tags is much cleaner and natural.
Finally there was the URL routing system, in which I had to define the route of every URL I wanted. This may have just been my own lack of knowlege, but I really like the Routes strategy (if not Routes itself) in Pylons. Routes just automatically routes urls to a class and function, but allows you to specify custom routes that behave very similarly to Django’s. The difference is that you don’t need to specify a complicated regular expression in the average case. Normally things just work.
Django defends their URL mapper by saying that other solutions are Black Magic and that explicit is better than implicit. I think that’s ridiculous. You can easily look in the routes.py file in a pylons project to see exactly how they achieve their “Magic”. Furthermore, Django uses magic all over their model, both in how objects are constructed and in how you query the model. The Django URL routing could definitely benefit from some useful defaults.
Well, I think that’s all I want to say on the topic right now. Django seems like a very nice framework, and a bit more organized than Pylons. In the end, however, I’ll stick with the superior components Pylons ships with, and maybe try to help them out with their organizational issues.