Demoralized but Motivated

So like I mentioned in my previous blog post, I have been interviewing for a while. My last interview was a few weeks ago at Facebook's Menlo Park office. I was just informed recently that: "Unfortunately, we won't be going forward at this point." So with that I can now add Facebook to the list of companies that have rejected me in the last few months, a list which includes Google, Microsoft, Bloomberg, Dropbox, and a number of smaller startups and lesser known companies. Needless to say, I am feeling humbled. Demoralized, even.

I used to believe I would be a great interviewee. After all, I'm friendly, and I make friends easily. I've gotten pretty good at talking to strangers. A friend of mine told me she likes inviting me to her parties because I sort of walk around and make an effort to talk to every single one of her guests. It's something I genuinely enjoy doing. Needless to say, all of the recent rejections I've received have convinced that I was very wrong. At this point, I have to assume that I'm pretty bad at interviewing.

I think -- though I'm not certain -- that it's the technical portion where I'm falling short. Some people say that the technical portion of a software interview isn't necessarily a test to see how quickly you can write the solution but a test to see "how you think and how you approach a problem". Well, after these last few months, I've come to the conclusion that those people are full of junk. It is absolutely a test to see how fast you come up with the optimal solution. It's even better if you knew the optimal solution to begin with. In all of the interviews I've done recently, I always got a rejection after an interview if I took a little too long to think of the solution or if I took too long to code that solution. My "thought process" didn't matter. The only times where the interview process progressed to the next stage were when I quickly thought of the solution or knew the solution beforehand because I had seen a similar problem before. Speed is the only thing that seems to matter. Anyone who tells you otherwise is lying.

Unfortunately for me, speed was never my strength. I am a slow guy. When I record my own voice, I'm always amazed at how slow my speech sounds. I swear, it sounds much faster when I'm hearing it in my head. Many years ago, someone asked me if I was from Texas. Bewildered, I asked him why he would ask me that and he said: "Oh, I thought you talked with a Southern drawl." I informed him that I grew up in California. I was once pulled over by a cop who thought I was heavily intoxicated despite the fact that I only had one beer 2 hours ago. He made me do the field sobriety test (which I easily passed). I'm convinced that he thought I was drunk because I talk kind of slow.

I think my brain just has a lower clock rate or something. I do everything in a kind of slow and deliberate manner. But my strength was never in my speed. My strength was always in my ability to concentrate, and in my stick-to-it-ness. Whereas many people these days claim to suffer from attention deficit disorder, I have the opposite condition. I can easily sit still and pay attention for a 3 hour lecture but find it difficult to multi-task. I suppose, if my brain were a computer, it would be one that wasn't very responsive but was good at performing large batch jobs. During my flight to and from Menlo Park, I noticed that everyone else at the airport was perpetually tapping and clicking away on their phones and laptops. I was content to just read my library book. All of this has generally worked in my favor for both my academic and professional career, except when it comes to the typical 45 minute technical interview, especially at a place like Facebook, where the coding interviews involve solving two programming problems in under 40 minutes -- that's no more than 20 minutes for each one. And if it takes you a little too long to solve one of them you're toast.

I'm not really complaining about Facebook's interview process. Theirs is honestly better than most, including Qualcomm's. Maybe I'm just trying to make myself feel better... I don't know. But I do wish there weren't this "One-Size-Fits-All" attitude when it comes to tech interviews. For example, a good friend of mine is an excellent data scientist and machine learning researcher, but he has limited experience as a programmer. Yet, the Googles and Facebooks of the world force him to go through the same sorts of problems (e.g. find the kth largest integer in this array in linear time) that they would ask a computer science undegrad looking for an internship. I think there's got to be a better way than that. It's just.... stupid.

After the Facebook interview, I told myself that if I don't get an offer, I will stop interviewing and just focus on becoming a better engineer one way or another. I may revisit the job search again in a few years time, but in the meantime I'm just going to focus on learning as much as possible and try to work on some interesting projects. I've been meaning to do some stuff with a BeagleBone Black I bought a while back. And maybe I'll take some interesting courses online. And I'm going to stick around at Qualcomm for the time being. Fortunately, I did get one job offer -- an internal team within Qualcomm that I interviewed with a few weeks ago. Admittedly, it's not the most glamorous work; I won't be working on deep learning research or self-driving cars or whatever else is hot right now (I tried to get a role doing that sort of thing in Qualcomm's Corporate R&D division but those hiring managers wouldn't give me the time of day) but it's a team that designs telematics modules for cars. So far, I've been really impressed by the all-encompassing knowledge these guys have of virtually every hardware and software component on the modules. They really know their Stuff. Again, it's not the sexiest kind of work -- Ethernet switches, USB drivers, RF front ends, Linux kernel stuff, etc. -- but it's important work, and hopefully the knowledge I gain there will be useful for me in my career.

It'll take me some time, but I'll get over the rejections. I once consoled a friend who had just interviewed and failed at Google for the third time. I told him: "Who cares? You can work on whatever you want on your own!" Now I have to take my own advice. I'm humbled and dejected, but I'm more motivated than ever! 

STAY IN YO LANE

So I haven't been very diligent about keeping up with the whole blogging thing.  I haven't updated a single thing on this website in over two months! I'm sorry, blog! I do have a pretty good excuse, however; I've been going on job interviews over the last few months, and in an effort to prepare for software technical interviews, I was spending much of nights and weekends solving short programming problems, the kinds that can be completed in a day or less.

While I wasn't unhappy with my job, I felt like my evolution as an engineer was stagnating, and that I had to leave if I were to ever level-up (and by "leveling-up" I'm not talking about promotions or titles but of getting better from a technical standpoint). I had hoped to find work in completely different areas, and the opportunity to do something totally different from what I had been doing. I quickly learned that moving laterally into new areas wasn't going to be easy.

Perhaps I was naive, but I had always thought that I would have the opportunity to work on all sorts of different things throughout my career. In school, I took courses in just about everything: cryptography, computer vision, security, web applications, 3D rendering, machine learning, etc, and I thought my career would go much the same way. And for a while, it was. I got my start interning at a console game company, then jumped into the emerging world of GPU computing, and later found myself in the wireless/embedded space at Qualcomm where I am now. When my 6 year anniversary at Qualcomm had passed and I had finally finished my M.S. program (which I had been working on part-time over the last 5 years), I figured it was once again time for me to jump into something new. Cloud computing, perhaps? Maybe something machine-learning related?

This time around, however, I got a rude awakening. Now that I'm a more "experienced" engineer (which I suspect is just a euphemism for "not so young anymore") hiring managers and recruiters only wanted to talk to me if the jobs they were trying to fill were identical to my current one. This meant that the people most interested in me were people who were looking for wireless/embedded folks. When iRobot reached out to me, I was ecstatic. I love my Roomba and I thought they might give me a chance to get more into robotics and possibly A.I. and path-finding. I was disappointed when the recruiter informed me: "Actually, we're interested in hiring you into our wireless connectivity team." And when Uber's self driving car team in Pittsburgh contacted me, I was hesitant (due to all of the negatives stories about the company) but intrigued by the possibility of getting to work on self-driving cars. Yet, when I got to talk to the engineer for the technical phone screen, he informed me that they were only talking to me because they were looking for a networking guy and they figured Qualcomm engineers know networking stuff.

The thing is, I completely understand it from the employers' point of view. I get it. They don't want to fill a job with an experienced engineer if his or her background doesn't closely match the job they're trying to fill.They don't want to hire a senior engineer and have them learn X,Y, and Z; they want to hire a senior engineers who already know X, Y, and Z. As an industry, this creates a kind of gravitational force that pulls engineers deeper into their own little niche. The Industry says to us: "Specialize! Stay in Yo Lane!"

At the same time, I wish recruiters and hiring managers would see things from my perspective.  A while back, Toyota reached out to me about a job out in Plano, Texas that involved integrating Qualcomm modules into their cars. I asked him the same question I asked Uber and iRobot: "What's my motivation to leave beautiful San Diego to go and do the same kind wireless/embedded work in Boston or Pittsburgh or Plano, Texas?" After all, Qualcomm is the industry leader in that space. Here, I have access to resources like training courses and subject matter experts that aren't available if I'm working at Toyota or iRobot. So if I'm going to be working in the wireless/embedded space, if I'm going to specialize in that space. it makes a lot more sense for me to stay put.

Yet a part of me resists this pull to specialize. Obviously, specialists will always be needed and valued, but I've hoped that generalists with a diverse knowledge and skill set can be valuable to engineering teams too. I've always admired the multi-faceted Renaissance man, the "five-tool" player in baseball, the "two way player" in basketball, or the rare musician who can write, sing, and play multiple instruments well (R.I.P. Prince). I want to like James Franco but he just seems a little too annoying. 

Organizational psychologists now understands that diversity is a great strength in an organization. We're told now that teams are often better when they're made up of a diverse group of people. Is it not possible then that a generalist with a diverse skill set can be a stronger contributor than a specialist with a narrow skill set? And if it is possible, a company should be able to justify hiring a senior engineer to learn X, Y, and Z, because that engineer brings with her knowledge in other areas that may make her a better hire in the long run than someone who has only been doing X, Y, and Z for his entire career.

Then again, sometimes, you just need an expert, and maybe this whole generalist vs. specialist debate is just counting the number of angels that fit on the head of a pin. 

Hi. I'm an Embedded Guy.

I've decided to create a separate Tech Blog distinct from my not-necessarily-tech-related blog, Tofu Blog. That way, if someone should find my Tech Blog interesting, he or she wouldn't have to wade through all of my other random musings. So without further delay, on with my inaugural Tech Blog Entry!

So it appears I was wrong yesterday when I wrote in my very first Tofu blog entry: I wouldn't even have to learn anything about CSS! Less than 24 hours later and I've started the Full Stack Web Developer Nanodegree program on Udacity. There's no avoiding CSS now.

I enrolled in the program to learn how to build a site for a data science-y project that I'm working on with a few friends of mine. I'm definitely not trying to find employment as a full stack web developer or anything like that. Moreover, I'm not even sure if anyone would hire me as a web developer at this point, even if I wanted to be one. Over the past few months I've started to realize that recruiters and hiring managers that read my resume or view my online profile increasingly see me as "an embedded guy".  I'm not entirely sure why. I list embedded programming as one of my skills, but I don't draw much attention to it. I don't describe myself as an "Experience Embedded Software Engineer" or anything like that. Instead, I describe myself as a software generalist. But I suppose people see the name of my employer and immediately make the mental connection that I must be an embedded guy.

The last 4 or 5 unsolicited messages I've received from recruiters were nearly identical.

"Hi! We're looking to hire talented embedded software engineers and your profile caught our attention! Would you be interested in joining our awesome embedded software team?"

And in the uncommon case where someone contacts me about an interesting non-embedded job opportunity, things quickly go to hell once they realize what kinds of targets I work on.

"So tell me about yourself! Are you doing more front-end development? Back-end?"

Me: "Well, actually, that kind of jargon -- front-end, back-end -- doesn't really apply to us since we're mostly working on smart phones and modules and IoT devices. Things like that."

"Oh. You're an embedded guy. Thanks a lot for talking to me Bye."

The real kicker was when I was contacted by an Amazon recruiter a while ago about a machine-learning + cloud computing type job. I told him that, while I'm currently not working in that space, I have great interest in it, having focused in A.I. and machine learning in my M.S. program, and that I've been taking cloud computing courses online in my spare time through Coursera. He said:

"Yeah... unfortunately, the hiring manager that I'm working for doesn't like embedded programmers. He thinks that they lose the ability to write higher level software."

Me: "I mean... but I can do other things. I swear it! In fact, I have done other things! I'm not just some... some... embedded guy."

"Well, I encourage you to keep taking those online courses. Bye"

The thing is, I honestly don't consider myself an embedded software engineer. I can't claim to know the ins and outs of the Linux kernel or I2C or anything. I'm a software generalist that happens to have experience doing low-level programming on embedded targets. I would never claim to be an embedded expert. Nor, for that matter, would I turn down the opportunity to work as a hardcore embedded software engineer and develop genuine expertise in embedded programming. That's something I can't claim to possess today without being an enormous liar.

I wonder if it's true what that hiring manager (supposedly) said -- that embedded programmers lose the ability to write high level software. I'm more inclined to believe that a seasoned embedded programmer who has been working down "close to the metal" for many years may need some time to adjust when coming back up to high level software again, but will do just as well once that period of adjustment is over, like a sailor whose been out at sea for a long time needing a little time to get his land legs back. Moreover, I think it works both ways. I suspect a great software engineer working at a high level could quickly adjust to doing low-level system programming if she wanted to.

Of course, what do I know? I'm just an embedded guy.