The Problematic Developer/Programmer Interview Process

Annoying Orange Fan Art, Copyright The Annoying Orange
Annoying Orange Fan Art, Copyright The Annoying Orange

I was going through Dzone and bumped into this article by Bozhidar Bozhanov explaining his frustration with the interview process at Facebook after being rejected after 3 phone interviews. In the article Bozhanov explains that the interview process consisted of algorithmic skills and general computer science test (recursion, binary search, basic data structures), basically “easy” stuff that any computer science grad should be able to solve and that is the rub that I personally have with those types of interviews. As Bhozanov puts it (better than I could have):

  • what you do on these interviews is something you never, ever do in real life: you write code without using any compiler or debugger. You do that in a limited time, with people watching you / waiting for you on the line. But let’s put that aside for now. Let’s assume that writing code without being able to run it is fine for interview purposes.
  • the skills that these puzzles are testing are skills that the majority of developers have never needed. Most people are writing business software, and it does not require red-black trees. What was the last time you used recursion in your business software? So the last time you’ve done anything like that is in college. And many of these problems are really simple if you are a freshman, you did them as a homework just the other day. But then it becomes a bit more tedious to write even things as simple as a binary search. Because you just didn’t do it yesterday. Of course you will be able to do it, but for a little more time, so that you can remember, and for sure by using a compiler. (By the way, the puzzles at facebook were really simple. I didn’t do them perfectly though, which is my bad, perhaps due to interview anxiety or because I just haven’t done anything like that for the past 3 years)
  • the skills tested are rarely what you will do in your daily work anyway. Even in these cool companies like Google and Facebook, there are still pretty regular projects that require coding to APIs, supporting existing code, etc. I don’t think you will be allowed to tweak the search engine in your first week, no matter how great you did on the interview
  • interview preparation is suggested and actually required before these interviews. Exactly as if it is a college exam. But that’s dumb – you don’t want people to study to match your artificial interview criteria. You want them to be…good programmers.
  • focusing on these computer science skills means these companies will probably miss good engineers that are simply not so interested in the low-level details.

And I agree with all of the points. I love programming, but I did not love my computer science classes. I had the most fun in classes that involved web development and database practice, but the theoretical classes,  zzzzzzzzzz… In all honesty. So it annoys me when going through an interview process and I am asked questions that I could have answered in 2003 but whose answers have long been pushed out of my general memory. Bozhanov (I agree again)  states that “obviously my problem is that I don’t like low-level and algorithmic stuff, so I wouldn’t be able to work for cool companies like Google and Facebook ” not just them but smaller companies that adopt the same practices in looking for candidates.

In my own personal experience, I was once rejected in pre-screening for a possible opportunity because I used “obtrusive Javascript” on a skill test I was given. For the uninitiated, obtrusive javascript means mixing Javascript and HTML code within the same document, proponents argue that the JS and HTML code should be contained in their own respective files, which is okay and makes sense to me for the the purpose of keeping organized code. What peeved me in this case is that the only reason I used obtrusive Javascript was to make submission of the test easier since there are email filters that block Javascript files. In the end, I figured that it was a sign that culturally in any case, I would not have been a good fit at that company. In any case, I feel like the market for developers is so hot right now that there are enough opportunities to interview with companies where you are asked and even tested about what you actually did, and will be doing at the company than algorithms I learned a decade ago. Some would argue that makes me a bad programmer, and it is fine with me, but the work I have done so far in my career did not involve me pondering what the Big O of binary search is and how to improve on it. There are cases where in pursuit of optimization there is a need to get a refresher on those concepts in order to research of to improve of them, but as I know, the life of a web developer rarely involves that detail of knowledge. If your dream job is to work for Google/Facebook/insertanybigtechcompany out here and you are willing to study for the interview, then proceed by all means, and it might be that those companies are looking for those individuals with that kind of profile but as for me, I will stick to interviews to where I am asked: “So what type of projects are you worked on?”, “Can you explain to us why you chose to implement this functionality this way?”, or better yet, “how would you go architecturally about implementing a Twitter like site?”.

PS: Jeff Atwood over at Coding Horror has his own views on the developer interview process and #5 and #6 where the biggest source of no-nos from the comment sections and the consensus in my opinion that is that the process Jeff outline was very risk averse for the company but will lose a lot of good people through it. This confirmed what I felt, is that as a developer, unless I am applying for a research oriented position don’t want to be bothered with theoretical knowledge from the past or being taken through loops which I feel are unrelated to what I worked and will be working on.

Africa Tech News Tidbits: Week of March 25th

Magatte Wade, founder of Tiossan Copyright Forbes
Magatte Wade, founder of Tiossan
Copyright Forbes

Here we are back again. Another round of African Tech news you might have missed over the past couple of weeks:

That enough material to keep your brain sizzling for this week.

A list of West African brilliant startups?

Memeburn just compiled a list of 30 African startups and it’s an inspiration to see the list of business models and technologies at play. The startup scene in Africa is definitely picking up, and ideas come from all over the continent. Of course South Africa and Kenya are well represented, as well as Nigeria (TruSpot), but there are companies from Cameroon (Njorku, X-Net), Ghana (Dropifi), Zimbabwe (ForgetMeNot). What is glaringly missing from this list though is an account from other West African countries like Senegal, Cote d’Ivoire, Mali etc, and I am taking it upon myself to put such a list together (They must be out there…). If you are in West Africa and currently working on a startup, please contact me and let me know what you are doing so we can highlight it as well.

Update an array property in MongoDB with multiple values

If you are working with array properties in your Mongo documents you know that by using $push you can add a value to an existing array or create one and add the value to it like:

db.test.push({name:”TechnologicalAfrican”}, {$push:{partners:”Abou Kone”}})

But let’s say you have an array like

var partners =  [“Coders4Africa”, “EtriLabs”, “IndexDot”]

and you want to update your array with those values, if you use $push again with the previous syntax, you will end up with a document that looks like:

{name:”TechnologicalAfrican”, partners:[“Abou Kone”, [“Coders4Africa”, “EtriLabs”, “IndexDot”] ]}

which is basically an embedded array as $push is for atomic values. Use $pushAll to add multiple values to an array like:

db.test.push({name:”TechnologicalAfrican”}, {$pushAll:{partners:[“Coders4Africa”, “EtriLabs”, “IndexDot”] }})

This will append the new values to the “partners” property in your document as you would expect.

Africa Tech News Tidbits, Week of March 5

Mobile in Africa
Mobile Users in Africa, copyright @ AgenceEcofin

Back at it, after  taking a little break due to a busy work schedule, let’s see what’s been happening in African Tech:

  • In Cameroon, a young entrepreneur just released the Cardiopad, a medical tablet designed to help with remote diagnosis of heart problems.
  • Saya Mobile in Ghana has released a messaging competitor to WhatsApp called Saya, which killer feature is StreetChat, allowing you to chat with people in your direct proximity.
  • AfriNic (The Registry of Internet Number Resources for Africa) is currently working with the Internet society to promote and encourage a bigger African participation in the worldwide IPv6 launch initiative scheduled for June 6th 2012.
  • Today, March 7th was the last day of a 2-day conference held in Ouagadougou on the topic of “Internet infrastructure for an African Digital Economy”. This event was put together by the African Union for Telecommunications in collaboration with the ICANN, ISOC and the aforementioned AfriNic and was aimed at educating government officials and ICT regulators on Internet ecosystems and the current challenges in term of infrastructure.
  • On the topic of conferences, another was held in Zanzibar February 29th to March 1st on the topic of African mobile finance with representatives from about 39 countries, as well as banking and financials operatives from diverses African economic bodies (ECOWAS). Finance experts concluded that there are real opportunities to develop finance in informal economies by allowing the 75% of unbanked Africans to have access to banking services through the mobile platform.
  • In 2011 , First National Bank in South Africa sold 30000 Ipads and 2400 Galaxy (S smartphones) by allowing clients to break down payments in monthly installments, allowing them to boast that they sold one Ipad “every two minutes”. Everybody’s happy!
  • Etisalat Nigeria will offer the Samsung Galaxy Note for N125,000 ($795 US), not too bad…
  • For you African football fans, has released the localized edition of its site for Nigeria.
  • Not directly tech related, but with the help of social media participation during the first round of the presidential elections in Senegal, more and more Senegalese people are calling for a public televised debate between the participants in the second round incumbent Abdoulaye Wade and challenger Macky Sall.
  • A recent UN report warns against an increase in electronic waste in West Africa, with 85% of it coming from domestic consumption and the remainder through imports. The dangers to the population and environment are real but collection and recycling of this waste is a job creator in itself with about 30000 people deriving income from it in Ghana for example.

That’s it for this edition, back for more next week!

Cardiopad: A Cameroonian Medical Tablet

Arthur Zang
Arthur Zang, copyright @ Agence EcoFin

Arthur Zang is a 24 year old Cameroonian who just came up with the country’s first medical tablet, the CardioPad, which is aimed at helping diagnose heart patients. Zang explains that the tablet will help “enable remote medical exams and the transfer of those results without the patients travelling to the city where the heart doctors usually practice”. The device operates by recording the patient’s heartbeat, which is a common app feature on most of today’s smartphones, and based on an integrated heart diseases databases, transmits the recorded data to the cardiologist who can then diagnose and prescribe the appropriate medications. Zang wrote a thesis about capturing heart rate and transmitting it as a student and after studying electronics at in a Indian university, he created the tablet from Chinese parts.  The tablet he says will be useful in a country where there is  a cardiologist for every 20 million resident. He is currently looking for investment and backers, as the the table cost 1 million CFA ( $2000 US) to make but is cheaper compared to traditional electrocardiographs which costs about $5000 US .