Skip to content

Recent Articles

12
May

Twitter

It only took 6 years, but I am finally on it.

If you’re following this website (thank you!), you probably want to follow my feed as well.

5
May

Android is not fragmented, it’s outdated

This isn’t really news for anyone even vaguely familiar with the mobile space, but here’s one image that reflects what I believe is by far the biggest problem with Android, straight from the developer’s website.

The vast majority 90%+ of the Android users out there use versions of the OS that are more than one year old and some 30%+ use versions that are 2 years old. This is a much bigger problem than the multiple devices Android runs on.

17
Apr

Getting your first “real” job: 3 – Live interview

Part of a series. Also see: Part 0, Part 1, Part 2.

The CV was great, your application was successfully processed and read and you are now being contacted for an interview. You may expect some or all of the following. (Note: I’m using my own terminology to categorize interviews, don’t expect them to be called this way)

 

1. HR interview

For some companies this is just a routine check to make sure that you meet the absolute minimum criteria needed for someone else to bother with interviewing you (your CV/resume is up to date and you have some idea about what’s in it, you can express ideas coherently etc.).They also usually try to determine that you understand the job opening (or to clarify what position you’d be interested in). The rest is just around arranging the procedures for the following interviews.

On the other hand, some HR interviews are actually very important; whether it is or not depends on the company and you probably won’t know in advance, so you have to be prepared regardless. Tech people don’t seem to like asking the “soft questions” (soft as in soft skills, not soft as in “easy”) so sometimes you will get these thrown at you during the HR interview.

Examples:

- What are your strength/weaknesses?

- Describe an occasion in which you demonstrated leadership (or some other quality you say you have); or describe a setback, a mistake and how you reacted to it.

- Why are you a good fit for this position or company?

- Where do you see yourself in 5 years? etc.

You need to be aware of these questions and be prepared to respond. These may be difficult questions to answer under pressure, so you should think about them before and know what you want to say. Avoid trying to run away from the questions (e.g. Weaknesses? WHAT weaknesses?!) because they are important and the way you answer can say a lot about you.

Also, here’s a very good concise post from Seth Godin about what interview questions are actually trying to discover.

 

2. Technical phone interview

This is something that many people find very difficult and it really shouldn’t be. The purpose of the phone interview is just to screen candidates and reject obviously bad candidates early on. On-site interviews cost quite a bit of money for the company and so before you drag away some of your lead developers to be unproductive for some number of hours to interview a candidate extensively, you want to try and screen candidates as much as possible and only give them the best of the pool to evaluate, so you waste as little of their time as possible. Because of that, phone interviews SHOULD NOT be hard. They should seek to have you demonstrate the basic skills and knowledge for that job.

They will usually be 30-60 minutes long and in some cases (e.g. Google) will require you to actually write code during the interview; in general though that won’t be the case and they will just focus on you describing your way of thinking about a problem without actually having to type anything out.

Expect questions of the type:

- FizzBuzz

- (OOP): How would you design your classes for [some simple problem]?

- Explaining how a classic simple algorithm works (binary search, sorting etc.) or why you’d pick one over another

- Basic concepts of OOP (or another paradigm you said you knew) or of a programming language (again, that you said you knew)

- Tech details regarding anything on your CV. If it’s there, it’s fair game. So what’s project X about, why did you do it this way and not this way etc.

You may get “soft” questions here as well, especially if you didn’t have an HR interview. But you’re already prepared for those, right?

 

3. On-site interviews

This is the real deal, the make or break stuff. Some companies will have one or two, some will have several in the same day, some will actually call you in over multiple days. For most places, this will be the most intensive tech interview you will get. Expect to have to write code, to explain your previous work in detail and to have to give it everything you got.

Especially expect to FAIL some questions. I know this is difficult to accept, but try to understand that it will happen and just because you blew a question or even an entire interview, it doesn’t mean you automatically lost the job. There are companies which will give you increasingly harder questions to make you fail and see how you react. So keep a positive attitude, stay focused and answer to the best of your ability. Also keep in mind that these are rarely formal checklist interviews… What’s more important than solving the problem you are given is to show how you think, how you go about solving etc. No one really cares about your solution to that problem (because 90% of the time, they don’t care about the problem), as much as they  care about how you got to that solution, how would you perform if they were to hire you. The questions and problems are just props. Use them to your advantage and if you can’t, try to show off your skills around the questions as well.

 

That’s usually what you’re going to see and though I’ve encountered numerous variants, I think I could fit either variant into one of these boxes. I’ll talk about one more thing, which I haven’t encountered as much unfortunately, but it sometimes part of the interviewing plan and that is…

 

Project “interview”

This is the scenario in which at some point between the first phone call and before the on-site interview, you are given some sort of a project to work on, in your own time. I personally love this type of setup, though I’ve only done it two or three times.

The reason I like it is because it really gives you a platform to showcase your skills and eliminates so much of the subjectivity and guesswork in interviews. You write your code at home, on your own comfortable setup, with your own favorite mug of a hot beverage ready at hand. Whatever code you write then is probably a very fair indicator of what you will be able to produce on the job in a good day.

Not too much to say here in terms of advice… The projects can vary from the fairly simple (e.g. write some manner of a date picker) to the slightly more complex ones (e.g. for some interview I had to implement a virtual simple processor in Java and then write a program in that “assembly language” to run on that proc and solve some problem), but I’ve never found it to be too mind-boggling.

What’s important is that you don’t just write code that works, but try to write good code, well documented, tested, etc. You know, the best of the best!

You also should be prepared to talk about it later in the interview. Normally this isn’t a problem unless you tried to show off using some language, pattern or architecture you are not familiar with (so, don’t!). You will be questioned on your design and coding decisions, on alternatives to your approach, advantages, disadvantages etc. Pretty much everything that you’d expect in order to guarantee that you actually wrote that code and to observe how you came to make the decisions you did.

 

Do you have any questions?

Finally, I’d just want to add one more bit on the mirror-side of the interview and that’s what you should be asking. For some companies, the “do you have any questions” part is just that… a chance for you to ask any questions you want, no hidden things about it. On the other hand, for some companies this is a critical part of the interview.

Think about it this way… put yourself in the position of a firm which is going to invest lots of money into the training of a new hire (as some of the big ones do) and decide what do you care about more: how long that person will stay with you, aka how much you’ll be able to reap from your initial investment or what technical skills that person has coming in, which you’ll improve to a standard baseline with the initial training anyway. And what’s the best way to try and “guesstimate” how long you’ll keep that person, other than trying to see if they’re interested in the company and what you do? That’s why they care about your questions.

Regardless of that, you *should* care about the job more than just what it’s going to pay you and whether or not you get free bagels on Wednesdays. You’ll be spending more than half of your waking hours there if you start, you should care a lot about what you’re doing during that time. Since you do care, you will be doing some research and have some questions that your research won’t answer and you should ask those at the end.

You should probably be asking questions around aspects of the work that are not clear, around what a regular work day looks like, development procedures etc.You may also want to ask the questions of the Joel Test or similar things that are important to you.

The bottom line is: don’t be afraid to ask those questions, this is the best time to find out more about what you’re job would be like if you get hired. You won’t get much of a chance to do it after you get an offer and this will be very useful, especially if you have to compare several offers and pick one.

 

Resources:

Despite its length, this is actually pretty brief for a post about this topic, so I’ll give you a few more resources to read on later.

Have a look at Joel Spolsky’s posts on interviewing to get a bit more of the interviewer’s perspective. Here’s the one on the topic of the live interview, but you will find links for previous stages also.

If you’re looking for a book on programming interviews, this is a very good read:

 

It’s not too long, I went through it in just a few days when I was preparing for a Google interview, but it may take you a bit longer depending on how familiar you already are with programming exercises.

That being said, if I missed any important points, please ask questions in the comments so that I can edit and clarify. Good luck!

28
Mar

Legal protection

Here’s a statement from the label on my shiny new bike helmet (from a very famous brand might I add):

A bicycle helmet does not protect what it doesn’t cover, and as noted it may not protect what it does cover.

 

Aren’t we taking this a bit too far? Yes, EULAs, I’m looking at you as well.

It’s especially fun to compare these legal statements to the ads for the same product. If you look at the ads for the bike helmet, you’d swear it’s all you need to make it through a nuclear meltdown unharmed and only have to worry about the following zombies. If you look at the legal statement, you’re wondering why you didn’t just buy a hat instead. That at least is guaranteed to give you some protection from the cold and it’s ten time cheaper.

Moving beyond the ridiculousness of it all, I think that this practice is hurting the end-user. I actually think that the producer of a bike helmet should take responsibility for the protection it’s supposed to offer (and you can generalize this as needed for other products). It’s ok if you want to put in a statement there that will make it clear that it won’t protect my knees, just in case I was confused about the laws of physics, and feel free to explain how it may not save me in case of a plane crash and if you really REALLY feel like it, add that paragraph in there about how it doesn’t actually protect me if I’m not wearing it on my head; but, at the end of it all, take some responsibility! At least guarantee that it will protect my head in case of a bike crash. Is that really too much to ask? Test the damn thing and take some responsibility!

I’ll also extend this to food as well. I don’t want warnings about how unpasteurized milk is more dangerous than smoking or about how eating a steak in any other way than totally-burned may give you five different deadly diseases and possibly even an indigestion! I want everyone in the chain from the person milking the cow to the one that puts my plate down in front of me to take responsibility for their part. Farmers should check their animals for disease, restaurants should check their providers and sanitation etc. That’s a good working system that I can trust. Failing to take responsibility and throwing the decision on the end-user’s/consumer’s shoulders (who has no information except for the last link in the chain) is wrong on multiple levels.

Clearly, this is an engineering perspective… Create, test and take ownership and be responsible. I’d be curious to get some perspective on this from my friends more familiar with the way the legal system works. Are my thoughts that alien?

25
Mar

Creative challenge

I’ve been reading Rands in Repose blog (and so far I loved every post I read there) and this one entry really got me thinking.

I think you should take the time to read it, it’s a really good piece, especially if you’re a manager of tech lead. But back to the topic, it really got me thinking… about how cool that idea is! It’s so awesome to try doing this commitment to one hour of creative work every single day and so much that could come out of it. So I decided to take that concept and mold it into something interesting and useful for me and here’s what came out of that.

Anca & I have now challenged each other to do something creative for an hour everyday and then show each other what is it that we did. There are a few catches: it can’t be work or school related (and in my case this means that I must not use this hour to debug my pet Android projects… if I have an exciting idea, I could write something new, but I will stay away from large projects; there’s other blocks of time for that), and it has to be “creative”… it has to be something NEW, whether it’s writing, building something, coding a *new* project, anything that delivers a creative original result.

To try and make sure we actually deliver something (as some of our previous similar challenges haven’t materialised because of too many things we have to do), I thought about using the “Seinfeld Calendar” technique.

Now, time to get to it!