Peter Schaadt

posts, problems, and pleasantries

Interviewing the Interviewer

So your interview is going along great, you’re swiftly navigating their questions with gusto and aplomb, then they ask you, “Okay, do you have any questions for us?” For the first time in the interview, you don’t know what to say. How many questions should you ask? Are certain questions offensive? Is this a trick question about asking questions?!

Hint: If the interviewer does not give you time to ask questions, especially if they sidestep around your attempts to ask questions, skip this company and move on to the next one. They’re probably hiding something, like their sweatshop headquarters, lack of decent coffee, or their ancient PowerPC developer workstations. The interview should be as much about whether the company is a good fit for you as them figuring out if you’re a good fit for the company.

If you’re interviewing with an engineer/software developer, feel free to ask them an opinionated question, like if they prefer Vim or Emacs, Nginx or Apache, or Supervisor or Upstart. You shouldn’t start an argument with them of course, but ask questions that give you a sense for how they think and what their preferences are.

Here are some specific questions I like to ask when interviewing for technical positions. I don’t encourage you to just read through this list in an interview, tailor these questions to the company and your personal interests.

1. What is a typical day at your company like?

This is a great question that gives you an idea of what your workday could be like. Ask questions about daily checkins, meetings, typical hours, whether employees eat meals together or not, Agile/Scrum, and management style.

2. What are the sizes of various teams?

I encourage you to ask this question about teams you’re specifically interested in. Their response should give you a picture of how any people you’ll be working alongside and how the team communicates with management. Additionally this question might give you insight into which team you’d like to work with.

3. Do developers use Mac, Linux, or Windows workstations? Why?

Chances are most employees are going to be using the same machines for development. If you strongly prefer a certain operating system, mention this upfront. They may be able to accommodate you or they’ll at least explain their reasons for the company’s preference.

4. What does your company use for source code management? Is submitted code reviewed first?

In this modern age, especially at a startup, you’re probably going to get an answer involving a distributed version control system (DVCS) like Git or Mercurial, with code backed up to GitHub or Bitbucket. Ask about code reviews before pushing to production, if open-sourcing service components is encouraged, how code quality is maintained (PEP8 for Python, JSLint for JavaScript), how testing is done, and if a continuous integration service like Jenkins is used.

5. Does your company have a mentorship or onboarding program for new employees?

Inquire about what new hires do in their first two weeks to get acquainted with the company and its codebase. If you’re applying for an internship at a mid-size or large company, ask if there are any activities or outings for interns. Assuming you take the internship, many of these interns could be your future coworkers so you’ll want to get to know them and figure out what kind of personalities are attracted to the company.

6. How does your company assess the performance of employees and how often is this done?

Some companies are known for strangling employees with management constantly evaluating them. This question will give you a sense for how management keeps tabs on employees and what incentives (or bonuses) they offer for outstanding work. Having your performance reviewed isn’t necessarily a bad thing, this information can be instrumental in pointing out which of your strengths are being recognized and areas that you have room to grow in. A little constructive criticism can be very helpful.

7. Does your company encourage developing internal tools to automate tasks and increase productivity?

Some companies are against their employees spending time in the office on other projects, however related to the company they may be. If you spot an opportunity to increase the productivity of yourself and other developers you should be encouraged to work on a solution. They key is to get approval first and demonstrate the potential benefits of your project.

8. What are some of the biggest challenges I will face?

Ask the interviewer about challenges that other employees face at the position you’re interviewing for. Show that you don’t shy away from problems and are interested in coming up with innovative solutions. This question can also serve as an opportunity for you to discuss how you would specifically address some of these challenges.

9. What is the culture of your company like?

This is a very important question because every company can have a different culture on some level. Ultimately this often ends up being the biggest determining factor in whether or not the employee feels like the company is a good fit for them. Ask if employees go out to lunch together or hang out after work, what kind of values the company was founded upon, what the general atmosphere in the office is, how approachable upper management is, and how many ping-pong tables are in the rec room.

10. Do you have any reservations about my skill set or are there any strengths I will need to develop while working to be a contributer to your company?

I like to save this for my last question. It gives you a chance to find out what the interviewer really thinks about your fit for the position in the company. One time I asked this question in an interview and the interviewer said he was concerned that I didn’t have any Java experience. Now I am by no means a big Java fan, but I’ve got plenty of experience with it. I pointed out to him that it was on my resume and in addition to working with Android, all of my university coursework has been in Java. If I had not asked this question it’s likely that the interviewer would have just skipped over me, all due to a simple misunderstanding.

I encourage you to ask questions like these so that you get a much better sense of the company than you’ll be able to gleam from a job post. Additionally, many of these questions demonstrate to the interviewer that you’re really interested in the company and want to make sure they’re a good fit for you. They’ll want to qualify themselves and their company to you to prove that they’re good enough to have you as an employee. Never be afraid to ask questions!

Upgrading to Django 1.5

Recently I upgraded a Django site from 1.4.5 to the new 1.5 release. I decided to upgrade before my Django app got more complex and I wanted to check out the new configurable user model. I’ll cover some problems I had when upgrading and show replacements for some deprecated methods.

I did a quick pip install django==1.5 and hoped for the best. Unfortunately my heart sank when I ran python manage.py runserver after upgrading and was greeted with an error message (DEBUG set to true in settings) about some import statements. Nothing in software comes easy.

Like a lot of sites on the web, my Django app has a robots.txt and a humans.txt file. With Django 1.4.5 I had been serving these text files with the direct_to_template method, with a mimetype of “text/plain.” I realized I’d have to switch to Django’s shiny new class-based generic views and remove the deprecated method. Note that “mimetype” has been changed to “content_type” also.

urls.py
1
2
3
4
5
6
7
8
9
from django.conf.urls import patterns, url
from django.views.generic import TemplateView

urlpatterns = patterns('',
    url(r'^robots\.txt$', TemplateView.as_view(template_name='robots.txt',
        content_type='text/plain')),
    url(r'^humans\.txt$', TemplateView.as_view(template_name='humans.txt',
        content_type='text/plain')),
)

Another problem I had was the invalid import of from django.views.generic.simple import redirect_to which has been deprecated in 1.5. To get around that I changed my view code to use redirect instead.

views.py
1
2
3
4
5
from django.shortcuts import redirect

def page_view(request):
    # View code here
    return redirect('/other-page/')

You could also use Django’s class-based generic views to put the redirect in a URL rule in your urls.py file.

urls.py
1
2
3
4
5
6
from django.conf.urls import patterns, url
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^page-url', RedirectView.as_view(url='/other-page/'))
)

I hope these examples help someone out who had the same problems as me. I was still impressed with how seamless the upgrade to 1.5 was and I had fewer things to fix than I thought I would. Upgrade early and upgrade often!

My Setup

What do I use?

This post is inspired by UsesThis, a site that highlights individuals and their development setups. I have a lot of people that ask me what I use in my development workflow so I’d like to put it out there. I’ll try to update this as frequently as I can when things change.

Operating System: OS X Mountain Lion 10.8.2

I was a long-time Windows fan but once I started doing serious development work Cygwin just wasn’t cutting it anymore. I had some problems with OS X Lion, notably with compiling MySQL and with support for full-screen apps, but the latest release of Mountain Lion seems to work much better for me.

Browser: Google Chrome Beta

Google Chrome’s silent updates and syncing features (including tabs!) keep my browser up to date between my laptops and desktops. I’ve always loved Firefox but I stopped using it as my primary browser once Google Chrome expanded its collection of extensions. Firefox has fixed some of the memory bloat and I still use it frequently for debugging with Firebug, but I’ve become attached to the speed and usability of Google Chrome. The Canary release provides even more cutting-edge features and can be used alongside your standard Chrome install.

Text Editor: Sublime Text 2

When I used Windows I was a fan of Notepad++ and I looked for something similar when I switched to Mac OS X. I do not find the features of Textmate or BBEdit to be worth the cost and ever since I’ve discovered Sublime Text Editor I haven’t looked back. I haven’t checked it out yet but a Sublime Text 3 Beta was recently released.

IDE: Jetbrains PyCharm

PyCharm isn’t cheap but anyone who’s familiar with Jetbrains’ IntelliJ (for Java) knows that Jetbrains knows how to make productive, yet attractive, IDEs. PyCharm also offers great Django and Flask support. I’ve used Eclipse for university projects but it’s always been too cumbersome and slow for me.

Terminal: iTerm2, ZSH, and oh-my-zsh

Coming from PowerShell and Cygwin, the default terminal app was a blessing. Then I found iTerm2 which offers split panes, search, autocomplete, instant replay (mostly just for fun), and custom profiles. Before long I had switched from Bash to ZSH (Z Shell) (just a chsh -s /bin/zsh away!) and oh-my-zsh. There is much better support for extended globbing, path expansion, command line history, and oh-my-zsh adds support for configuring your prompt and choosing a color theme to suit your preferences.

Mail: Sparrow

This excellent and intuitive mail application offers the best desktop Gmail support for Macs. I was dismayed to find out that the team had been hired by Google and that development would cease. That said, the app is still very usable.

Office Suite: LibreOffice

While the Microsoft Office Suite reigns over almost every Windows install, their offering for Macs is an entirely different beast. I uninstalled OpenOffice after a few days of using it and settled on LibreOffice. Their productivity apps are fast and I prefer their traditional look.

Mockups: Balsamiq

For those quick, interactive, but not high-fidelity mockups, I haven’t found a better tool than Balsamiq. In addition to producing great software, I’ve reached out to the Balsamiq Team before about support issues and received prompt feedback with a solution. Their Mockups To Go page offers downloads for additional UI elements like Twitter’s Bootstrap and Apple’s iPad which have been very helpful.

VM: VirtualBox

Sadly, when I enabled Full Disk Encryption on my MacBook Air I was no longer able to dual-boot with Linux. Since then I’ve run my Ubuntu OS (usually 12.04) using VirtualBox. It’s a really useful program and it doesn’t seem to slow down my computer as much as other virtual machine tools.

Media: VLC, XBMC 12.0 RC2 Frodo

For those odd media file types, VLC handles everything with ease. I’ve even had a lot of luck with it playing corrupted files. I prefer to not have iTunes managing my media library so I just open my Music directory with VLC and it works great. For managing movies and TV shows, you just can’t beat XBMC. It fetches background art, HD trailers, and IMDB ratings for every movie in your collection. This is all with the default configuration. There’s also an amazing remote control app for your Android device called Yatse.

Last updated: 2/7/2013.

Installing Redis on Mac OS X Lion

Redis is a very popular open-source key-value store that provides a great solution for services that don’t need 100% data durability. Redis is an extremely fast database because it is almost always used to hold the entire dataset in memory. This post will give you a quick overview of installing the latest stable version of Redis on Mac OS X Lion 10.7.3.

Fire up the Terminal app (I recommend iTerm2) on your Mac and fetch the Redis package.

1
wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz

If you don’t have wget, you can install it with Homebrew.

1
brew install wget

Now extract the Redis archive, navigate to the folder, and run make.

1
2
3
tar xzf redis-2.4.8.tar.gz
cd redis-2.4.8
sudo make

It’s a good idea to run the included tests to make sure everything went smoothly (warning: this caused a lot of System Prompts about allowing Redis connections on my computer).

1
make test

Fire up the server on localhost.

1
redis-server

To use the Redis console, redis-server must already be running (in a separate tab/window).

1
redis-cli

Give Redis a shot, bindings exist for all major languages. If you’re new to Redis, start with the interactive tutorial to learn the basic commands and how to interact with the database.

Silicon Valley Code Camp

This October I was fortunate enough to be able to attend Silicon Valley Code Camp at Foothill Community College in sunny Los Altos, California. A two-day event, SVCC consisted of a diverse collection of tech talks and demos. A stronge presence of corporate sponsors such as Google, Box, Adobe, Microsoft, Bitbucket, Twilio, and 10gen ensured an ample supply of coffee, muffins, and catered sandwiches for the 2,247 in attendance. This was the first tech conference I have attended, and while I am the spritely age of 21, I noticed I was one of the youngest people on site.

Day 1, Saturday

The morning kicked off with a personal highlight, hearing Douglas Crawford, author of one of my favorite technical books, Javascript: The Good Parts, give his “ECMAScript 5: The New Parts” talk. His presentation sparked a fantastic discussion on the future direction of Javascript and its role in web development as well as its surge in popularity among mobile frameworks.

For my next talk I headed over to an “Introduction to MongoDB,” given by Manish Pandit, Director of Engineering at IGN. It’s rare that binary JSON, server replication, and humor are combined in a presentation but a great job was done entertaining the crowded auditorium while we learned the basics of MongoDB. We viewed ad-hoc queries being made on production servers (I hope he didn’t get in trouble!) and got a great look at being productive with the mongo shell.

After sandwiches provided courtesy of Google, I went to an Android Tablet application programming session which showed off the capabilities of the Android 3.x SDK. We used working code snippets to demonstrate some of the new features and picked through a couple sample applications.

Day 2, Sunday

With the passing of Steve Jobs less than a week earlier, many of us gathered in a packed room Sunday to mourn the loss of one of the world’s greatest leaders and innovators. Many attendees shared personal anecdotes of their encounters with Steve that lent unique insight into his world.

I followed this with an in-depth session exploring the world that is Vim. Many people in the crowd were split by the question of their favorite code editor and soon a strong, but informed, debate ensued between the entrenched users of Vim and Emacs. This session was just as much about development practices as much as it was about programming culture and I got to pick up many great insights on achieving maximum workflow productivity.

I finished the afternoon with a session on current and upcoming trends in web analytics. This fascinating presentation discussed the rise in event-based tracking as well as the emerging desire for mobile application analytics. Considering Leftronic, the startup I started working for in September, offers a lot of dashboard widgets utilizing APIs for web analytics, I felt like I walked away from this session with a newfound understanding of web analytics and their importance in generating actionable business intelligence data.

In addition to the many interesting topics I was exposed to at the tech talks, I got to demo the latest Windows Phone Mango update, watch an autonomous robot navigate with just Microsoft Kinect sensors, and see fork bombs test the autoscaling capabilities of some cloud-hosted applications.

Belated Blog Begins

Well it’s about damn time.
                                      - Me

Before Web 3.0 takes the Silicon Valley by storm I’d like to fulfill my Web 2.0 obligation of maintaining a personal blog. This blog will serve as a collection of ideas, observations, thought-provoking monologues (or is it monoblogs?), and a number of technical posts. The content may get dry at times but be confident that when I do make jokes, they’ll be sharp and brimming with sarcastic wit.

This blog was built using Octopress, a Jekyll framework, and will be hosted on Heroku. I’ve found it an annoyance to maintain Wordpress and a database and I’ve decided the portable solution that Jekyll provides is best for my purposes. Additionally, you can view this blog’s source code repository on Github.

Be sure to check back frequently for updates (subscription feature hopefully coming soon). Feel free to contact me if you have any questions or suggestions!