Log in

Nov. 9th, 2013

I decided not to enter into any more WSDC J&J (Jack & Jill) competitions. (I will still do All-American J&J's where they're offered.) I'm glad I made that decision. I've been to two dance events since then, and just watched the competitions when I was able. Not competing allowed me to take in everything that was happening, and focus in on some issues that turn out to be on many people's minds. I've written a number of things about this on FB, and time permitting, I'll write about them here as well.


Juniper test engineer initial phone screen

Yesterday, the engineering manager for a Juniper test engineer position gave me an initial phone screen. He asked me to describe the two route servers I worked on at Equinix. He also asked me one of those "rate yourself on $programming_language" questions (Perl). I gave myself an 8. After looking at my resume, he asked me if I wanted to stay at a company for a long time. (I'm not sure what prompted this question – arguably, I have worked for (most of the last) 30 years, within which one might reasonably have several jobs (especially considering those companies either no longer exist or were acquired by other companies).

Anyway, tomorrow, I'll have another phone screen with two engineers from the team. As part of interview prep, I reviewed some notes from a talk a former Equinix colleague gave on merging Internet infrastructure companies, which included results from some testing I did of the OpenBGPd and Bird routing daemons. I also looked at the IETF idr WG mailing list archive to see if an update of a draft of a "socialite" route server has been published. (I reviewed a previous release of the draft a few weeks ago.) It hasn't been yet.

Google SRE initial phone screen

About a week ago, a Google recruiter emailed me who I hadn't heard from in about five years. He asked if I was still looking for a position. I said I was, and he said he would get back in touch with me if anything was available. I didn't hear back from him until Tuesday, when he asked if I could do a short phone screen. I agreed, so the phone screen was set for yesterday.

The phone screen started out pretty informally. After a few questions about what I had done in recent jobs, he asked if I wanted to go ahead with more "technical" questions, or to have him send me the description for an SRE (Site Reliability Engineer) job. Since I know a fair amount of what the SREs do, I figured what the heck, can't really prepare for this stuff anyway so we'll just see what happens.

There were some questions I just didn't remember the answers to, such as "What system call gives all the information about an inode?" and "What are the fields in an inode?" Since it has been nearly 20 years since I've done anything involving (kernel) file system development, I don't have that information on the tip of my tongue. (However, it occurred to me after the interview that he was actually asking for the information returned from a stat() system call – I just wish he had phrased the questions a bit differently.) He asked if I knew the worst case runtime for quicksort, which I did not remember, but I did give the average case, and said that I could get the information from the wikipedia page on sorting in two seconds, but he said no, He asked me to estimate what the decimal value of 224 was without using a calculator, and I made a careless mistake, but from doing a lot of talking which aggravated my throat (I'm getting over a cold), I started coughing while speaking, which threw my train of thought off somewhat. However, I did answer a number of other questions correctly involving some other system calls, the TCP three-way handshake (this seems to come up fairly often), and a few other things. I also got the "rate yourself 1-10 on the following languages, OSes, etc." question, and decided to be a little less conservative, and give myself an 8 on C and Perl (since those where on the level of "has done significant development work" or "has contributed to a project" but not "has textbook knowledge" (and may have actually written a textbook). (Since I have recently done a little bit of Python programming and testing related to dance competition scoring, I decided to give myself a 2 – we'll see how that goes.)

The good news is I did well enough to make it to the next round. Next week, I'll have a more in-depth technical interview. In the meantime, I have a lot of material to review.

I still don't like these types of interviews, and probably never will. They don't really show my best qualities, and I always feel stressed. However, I am not alone, and in fact, some people who give these types of interviews realize that they don't really test job competence. I wrote about this some on my FB wall, but will go into it in more detail here when I have more time. (It relates to things I have written in the past about not being able to "perfectly prepare" for things, and paying opportunity costs for spending (too much) time on some things at the expense of others.)

Mar. 31st, 2013

I've been meaning to write about my experiences at Swing comps, but haven't had much time. I only have a little bit of time now, so here goes.

Back in October 2011, I wrote about being excited about Swing comps, but a bit concerned that I would not have time to participate (and practice) as much as I would need to do well (namely, make top five in WCS Jack and Jill (J&J) finals). I was right to be concerned. For various reasons, it is very difficult for most people to make top five in such finals. There is a somewhat long explanation of why, but the short version is that especially at the larger comps (including Boogie by the Bay, my "home" comp), there are far more entrants in the entry-level division (Novice) than opportunities to earn "points" through making finals. I was told that it might take me five years to get out of Novice; that is quite a realistic estimate, considering I have been in six comps so far, and the closest I've come to getting a top five placement is being the first alternate to the Novice finals at Monterey Swingfest back in January.

I'm still sorting out my feelings about making finals. On one hand, I don't really need to make finals, because I'm not trying to start a career in Swing dance or anything like that. At present, the most value making finals would be to me is with enough final placements, I'd be able to move into a higher division which would get me admittance to workshops with smaller student-to-teacher ratios. OTOH, I feel a bit of "unrest", due to personal pride and some other things, because I would like to get into one of the higher divisions.

If I have time, I'll write about some more things about Swing competitions and dancing that have been on my mind.


Cisco phone screen

I had a phone screen today from the manager of a forwarding plane group at Cisco. The interview started a half hour late, but fortunately, the recruiter (anticipating that it would not start on time), contacted me ten minutes before the scheduled time, asking me to contact him if I didn't hear from the interviewer after a few minutes. 15 minutes after I contacted him, the interviewer called me.

I wasn't very happy with how well I did, for reasons I've given before. Realistically, I don't know how well I will do in a subsequent round of interviews (if that happens), because the group develops code for ASICs, which I have never done, although the interviewer didn't think it would be a problem. It is similar to developing device drivers, something I have done, but not recently, and not on the latest high-performance router hardware.

Anyway, here goes ...

"Tell me about yourself."

I gave a short description of my interests in computer networking and some relevant projects I'd worked on (route servers, provisioning, congestion avoidance).

"What type of work do you want to do?"

I said I wanted to do IETF protocol work. He said his group worked mostly with ASICs and packet forwarding (e.g. IPv4 and IPv6).

"Why did you leave your last job?"

I said I had been working a lot of overtime and wanted to take some time off.

"I see you were also not working for a while between the time you worked at Nominum and Equinix. Why did you leave Nominum?"

I said I was laid off.

He then asked me two C questions he said were "simple". The first was to explain the difference between a struct and a union. I gave an answer that wasn't the best answer (after reviewing the topic in K&R after the interview was over). The second question was to give the size of a struct with an integer, a char, and an integer, in that order. I made a stupid mistake, assuming 64-bit integers, but giving an answer as if I had assumed 32-bit integers. (I didn't realize this until I wrote to the recruiter letting him know that the interview had taken place.) But even if I hadn't made that mistake, I might still have given an incorrect answer. Some experimenting with sizeof and various structs revealed that the sizes that the C compiler I was using (gcc 3.4.6 FreeBSD) aren't necessarily predictable. In the future, if I am ever presented with this type of question, I will give the sum of the base sizes of each struct element as an answer, and indicate that for padding, the actual amount of storage may be rounded up to a multiple of the word size.

In general, I am just getting burned on things that the interviewers think are easy, but I have (historically) not had to demonstrate on-the-job knowledge of. In most cases, I can either look up the information, or if it's a bug I've introduced, I can find and fix it through my own unit testing, before checking in the code. Otherwise, historically, the bugs have been sufficiently tricky that no one else on the team was able to fix them quickly, so my overall job performance (relative to others on the team) was considered at least satisfactory. Basically, I don't expect much to change – my performance on interviews will more or less mirror how I would perform on the job. All I can do is hope that someone interviews me who doesn't care if I get some "easy" answers wrong, because they are confident that I will get the job done anyway, or I get the answers right, because these are things I just happen to remember at the time.

Cisco interview

I had an onsite interview with a QA group at Cisco last Thursday. It went ok – better than the recent Brocade interview, but not as well as I would have liked it to. One of the people who interviewed me asked me lots of protocol questions, most of which I gave very good answers to. The time I've spent on the LinkedIn IPv6 and other computer networking-related forums has paid off.

There was a C programming question that I had trouble with involving pre- and postincrement of variables. I had never encountered this type of situation, where the target of an assignment statement is also an operand:

int v, x, y;

v = x = 5;
y = 11;

v = v++;

x = ++y + x++;

printf("%d %d %d\n", y, x, v);

The value of v is 5. The values of y and x are 12 and 18, respectively. I don't understand why either v is not equal to 6 or x is not equal to 17. I checked K&R, which doesn't say anything explicit about what happens when the target of an assignment statement is also pre- or postincremented. My general opinion is that one wouldn't want to write such code, which could have unexpected side effects, but perhaps I'm wrong.

Update: Didn't get the job. Oh well.

Brocade interview

I had an onsite interview at Brocade yesterday to talk to members of the L3VPN team. I won't be able to write anything specific about the interview, but I'd give it a 50/50. I've done better, and I've done worse. I was able to answer some questions after getting a hint or clue, and there were things I didn't remember (but knew where I would look up the information). There were more questions of an architectural nature involving various types of network setups that I was not very familiar with (because they didn't come up in my recent work).


Brocade phone screen

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).

interviewing isn't working for me

I had another phone screen today with Huawei. I'll spare you all most of the details.

There was one question about BGP that I didn't answer fully. The guy asked me about how it's handled internally to an autonomous system. I said that iBGP is used, and tried to remember the specific types of peering that are done. (I have read about iBGP, but when I worked with BGP, all of the peers were external, so I spent much more time on eBGP than iBGP.) Since I was not sure about the specifics, I just left it at that.

Another question had to do with data alignment in C programs. The question was how large a structure with four fields: an int, a char, another char, and a pointer is. Wisely, I asked how large an int is on this platform, but the first answer I gave (128 bits) was not correct. (I did not remember that alignment rounds up to the nearest multiple of the word size, so I gave a "safe" answer, because it was the nearest power of two. The sum of sizes for each member is 80 bits, and the correct answer is 96 bits, using an assumption of a word size of 32 bits, and rounding up to the nearest multiple.)

There was also a question of how to find a loop in a linked list. There is a clever way to do this, but I didn't remember what it was, so I gave a naive algorithm of just keeping track of addresses encountered on the list.

Anyway ... this isn't working for me. I get hung up on the same type of question; the type where if I was just working on something, I'd check references for clarity or to refresh my memory. The interviews are making it look like I don't have enough experience to do jobs that I have done, and are not allowing me to demonstrate the abilities I have to get things done. I thought pointing people to open-source projects I've contributed to would help somewhat, in that they'd at least see examples of things I'd done that others thought were useful. Perhaps the projects aren't high-profile enough, or more participation on my part is needed. I also thought that even if I didn't get considered for a full-time position, I could at least get some part-time or contract positions that would focus on the things that I actually did well on in the interviews, but that hasn't happened either.

I get the feeling that a lot of the jobs I apply for are typically done by people who have spent a lot of time on a few things, whereas most of the jobs I've had required me to wear a lot of hats. Since I was being paid to do what was asked of me, I didn't have the option of spending time on things that might have (in retrospect) made me more attractive today. Also, it isn't clear how I would have been able to predict what kinds of things I needed to make sure I knew for the future.
And the one time I did spend most of my time on one thing (implementing an e-commerce server in Java), the project ran into problems. I became concerned that I was falling behind in my other areas of expertise.

It has occurred to me that I might have to just work on one project with a particular focus and try to make something out of it. There is always the risk that if it turns out to be the "wrong thing", for whatever reasons, I might have to start from scratch, and keep going until (hopefully) something sticks – either I can make money off of it, or the experience is sufficient for someone to want to hire me. Also, some people are very critical of those who haven't become successful (yet); as they are compared to the most successful of startups. I have read about people who've made many failed attempts at starting companies. Some give up (and are hopefully hired to do something anyway), while others keep going until they hit on something that makes money.

Cisco phone screen

I had a phone screen last week with the manager of a L2VPN (layer 2 virtual private network) QA group and one of her direct reports. I spoke with the manager first:

"Why do you want to do testing?"

I said that I think testing is an important part of software engineering, and also gave some summary examples of testing I'd done at Equinix and Nominum.

"Where do you see yourself ultimately, professionally?"

I said that I'd like to be a principal IETF contributor.

"What type of testing did you do?"

I said it was primarily performance- and availability-based white box testing. Her group is more focused on functional and correctness testing.

"Would you switch to a development group after, say, six months?"

I said that I would not do that (by choice), but that I would if this is what the company needed me to do. (I did not feel comfortable being asked this question.)

"How did customers use Equinix's route servers"

I described the peering models for both the EDRS and MLPE platforms.

"Which project did you consider your greatest accomplishment"

I said the congestion avoidance project was my greatest accomplishment, as it united two engineering subfields that I most enjoyed – control theory and networking. I gave a description of the project and what I did. She asked if it was similar to QoS (quality of service), and I said no, it promoted fairness among traffic queued according to packet attributes (IP source, destination, and TCP port, a precursor to flows).

The manager's direct report asked me questions for the rest of the screen:

"Give me the algorithm for determining whether a number is a power of 4"

Due to either nervousness or the way the question was asked, I misinterpreted it to have asked whether a number is a perfect fourth power (ie., if you took its fourth root, you'd get a positive integer). So I started off giving a naive (linear time) algorithm for the former, but when corrected, and asked to adapt my algorithm to the intended question, I did that. She then asked if there were ways to both generalize simiplify it, for example taking into account divisibility, and considering any power. I modified the algorithm to report failure if the divisibility test failed, assign the input to a temporary variable, then to iteratively divide that variable's value by the base and compute the modulus at each step. The general idea was to stop dividing if you either reach the point where the value divided by the base equals the base (and there modulus is zero), or the value divided by the base is less than the base (with a nonzero modulus). This needed to be cleaned up a bit. I did, however, give the right answer for its time complexity. I think I could code this fine if just sitting down and implementing it by myself instead of having my thought processes interrupted by questions.

"How do you convert binary numbers to their decimal representations?"

For some reason, I thought she was asking me what the machine representation of a (floating point) decimal number was. I said that I didn't remember. Then she said that we would get back to it later, but that it had something to do with the next question, which was about determining whether an IP packet was valid. Then I realized what she meant was how to convert the string of binary bits to a decimal number, and said so (feeling frustrated because I do know how to do that), but she said we had to move on.

"How would you validate an IP header and how would you process a sequence of them?"

After asking for clarification that we were discussing IPv4 packets, I proceeded to describe how typical programs that work with packet headers allocate space for the header, read as many bytes as are necessary (based on the header's size), etc. She wanted something more specific, so I started to describe how the header files one includes in network software programs delineate the header fields by their sizes (eg. the source and destination are 32 bit unsigned quantities). This still didn't seem to make her happy, so I asked what it was she was actually trying to get me to say. She then asked me how I would tell, for example, if the dotted quad representation of an IP address (which is not how it's stored in the header) was legal. I said ok, you have to check that each field falls within the range 0-255, and then something about not exceeding the largest legal address. (While talking, I was trying to remember what the IPv4 multicast range was, but could not, offhand, and should probably have taken into account that is legal (but would most likely not yield the desired result, if used).) At that point I was trying to picture an IP header as depicted in RFC 791 and couldn't remember all of the fields (and feeling frustrated that yet again, I'm getting stuck on details that are practically always referred to in work situations). As to how I would process a sequence of them, I said they could be placed on a queue, and that in fact, the network stacks generally do that. So we got into another discussion where I wasn't really sure what she was trying to get me to say. She asked me if a linked list could be used to process the sequence, and I said yes, and that in fact, some kernel implementations keep the packets in a (doubly) linked list (as I was thinking, which a queue can be implemented with).

Since the entire interview had run over an hour, she had to stop, and asked me if I had any more questions. I first asked if we could go back to the conversion of binary to decimal question (since I knew exactly what to say), but she said there wasn't enough time. So I asked how long she'd been in the group; she said a couple of years. The manager didn't rejoin the call, so that was the end.

I give this one a 50/50 – could've been worse; could've been better. I wish there was something I could do that would reduce my nervousness to the point where I answer questions based on my overall aptitude level, or at least, how I'd answer them if it was just something that came up during the normal course of work.