Metaweb is building a new type of database to support large-scale collaborative web applications.
- a talented, eclectic team
- a fashionable, lounge-saturated working environment
- some hard problems for you to help us solve.
You need to be good at doing things you've never done before.
To apply, please respond to the following four questions in your cover letter. Brevity is the soul of wit.
1. Programming Languages have changed very little in the past 30 years: OO (Smalltalk) dates from the mid seventies. Closures and continuations (Scheme) were invented in the late seventies. List comprehensions, and other lazy functional constructs date from the early eighties. Is this vocabulary "it" for programming?
2. Have you ever built something you could have bought? If so, what and why?
3. What is your favorite time of day?
4. Imagine a graph that consists of directional links between nodes identified by small non-negative integers < 2**16. We define a "cycle" in the graph as a nonempty set of links that connect a node to itself.
Imagine an application that allows insertion of links, but wants to prevent insertion of links that close cycles in the graph.
For example, starting from an empty graph, inserting links 1 ->2 and 2 -> 3 would succeed; but inserting a third link 3 -> 1 would fail, since it would close the cycle 1 -> 2 -> 3 -> 1. However, inserting a link 1 -> 3 instead would succeed.
In your favorite programming language, declare data structures to represent your graph, and give code for an "insert link" function that fails if a new link would close a cycle. What, roughly, is the space- and time-complexity of your solution?
You have a passion for clean, tractable algorithms, data structures, and interfaces tempered by a pragmatism that allows you to get beautiful things done.
You're a good writer, speaker, and listener - you'll have to explain and justify your designs, and be able to run with other people's ideas and give feedback to them.
It matters what your code looks like. (It matters to us, and we want it to matter to you.) You like it when people look over your shoulder, and you're prepared to give other people feedback on what they're doing as well.
Of course, you're extremely proficient in C, but you don't really mind switching to Python, or Bash, or Lisp. After all, programming is programming.
You've got experience with a number of operating systems, some, but not all, of which were flavors of Unix. In particular, you understand the gritty details of using Unix to implement a large server: networking, memory, disk storage and concurrency.
You need to have a deep understanding of fundamental data structures and algorithms, particularly those that might apply to the storage and retrieval of large amounts semi-structured data.