I had a short phone screen today with a manager interviewing for an L3VPN (Layer 3 Virtual Private Network) position.

"Tell me about yourself."

I gave a brief summary of my background and interests in networking, including brief descriptions of the two Equinix route server platforms.

"Let's say you had a sequence of numbers, starting and ending with -1. How would you sort them?"

I had to ask for clarification first, because the manager's accent made it a bit difficult to understand him. Then I proceeded to describe how you could read the numbers into an array until reaching the end, and use a standard sorting algorithm to sort them. He then asked how large an array was needed, so I stopped, thought a bit, and asked if the input sequence could be unbounded. He said yes, so I asked for a minute to think about it. After thinking about it, I replied that I could not think of anything that would be computationally feasible (because I was thinking to myself that you might very well need to resort the entire input, depending upon what the next element was in the sequence). So he said that it was indeed computationally feasible, but not something that would generally be done as a practical matter. The question was more to test my problem solving skills.

He proceeded to say something else that I don't remember, but I asked if I could have a clue to help me figure it out, without giving away the answer. So he said, ok, you have a background in data structures, right? Then, a green light went on in my head, and I replied that you could use a linked list instead of an array to store the sequence, and sort that, but practically speaking, you could still run out of resources. He then asked me to give some examples of sorting algorithms, and I mentioned quicksort, mergesort, and bubblesort. (I was hoping that he would not ask me to give the algorithm for each, because I don't have them all memorized.) I also added that I would not use bubblesort. He did ask me which one I would use, and I said I would use mergesort, but that for some circumstances, you would get the worst-case performance. (This was the best answer, based on the mergesort wikipedia page.)

"From your resume, it looks like you have a lot of experience. Where do you see yourself career-wise in five years"

I said that ideally I'd like to be a principal contributor to standards bodies like the IETF (the same way I usually answer this question). He said that he was primarily looking for a developer, and asked if I understood that; I said yes. That concluded the screen.

So ... as you might expect, I was displeased with myself for not answering that I could use a linked list right away, but happy that with the one clue I was able to answer all of the other questions. As I have said before, I wish that I was somehow "better" at this sort of thing – that my reasoning process would go immediately, and reliably, to the best solution to a given problem. (I think this would have improved my academic performance, at least.) I felt a little uncomfortable about how the interview ended, because I wasn't sure if the manager was disappointed in the answer that I gave about my career aspirations, but since I have written about this in many places, I don't think it would look good to give a different answer for each interview.

It may be that the kinds of jobs that are available now are generally not done by people who have more analytical and/or architectural inclinations. But what do they do if they need a job, especially in economic downturns? Even though they are capable of doing such jobs, they may not get these jobs, or even be considered for them, on the grounds that because they are less inclined to write programs on demand, they aren't as good candidates for software engineering positions as those who are. But we need the architectural and analytical contribution as well, or else we would not understand the practical limitations of the problems we encounter in software engineering (and thus, we might not find effective solutions). This flies in the face of the new "fail fast" that seems to be espoused in (some) software engineering circles, where if a project doesn't seem to be working out, scrub it and move onto something else. Where would we be today if things like the telephone were scrubbed because Shannon had not developed information theory yet?

Thinking along the lines of yesterday's post, another possible career approach for me would be to get very involved in standards bodies – go to many meetings; participate on many mailing lists; contribute to open-source projects; blog about issues and problems encountered – in the hopes that people benefitting from my contributions would hire me as a consultant or architect. This is just as risky as any other thing I can think of to earn income again, but it would probably be a better career for me, and I'd probably do better (assuming conditions were such that I could do what I needed to do to properly analyze problems and make recommendations).

I don't think so, because the way the questions were phrased, he was looking for something that would take unsorted input numbers, and sort them in either increasing or decreasing order. There was no mention of storing the inputs for later retrieval. I usually think of 2/3-trees, b-trees, and similar data structures for (efficient) storage and retrieval. Was there something about what I wrote that made you think of 2/3-trees or b-trees?