Once upon a time, I spent my spare time in practising white board test, i.e., try to solve data structure / algorithm issues from leetcode, hackerrank, etc. But after nearly one or two months, I decided to stop this activity since I find the time spent on it is not worthy, at least for me.
I am not a clever software engineer, even a little dumb. Except very basic problems, I find a lot of puzzles which has “medium” difficulty level will cause me spend hours to fix it. I mean although I can resolve part of them, but I am not sure whether this is the optimal solution, so I would read others’ answers which claims consume very little time carrefully to understand them. For some extreame cases which I could’t get a clue after two hours, it usually costs me to take much longer time to get the point of the puzzles.
Gradually, I found though this practice can have some effect in improving my coding ability, whereas compared to the time consumed, it is not cost-effective, and honestly not very helpful for my daily work. Take C++
as an example, the STL
and boost
have provided almost all the data structures and algorithms which you need. You just need to call std::sort
, and don’t care it is “bubble sort” or “quick sort” under the hood. So in reality, I seldom have the opportunity to implement the sort algorithm from scratch. Furthermore, most problems just need single-thread to resolve, but I find multi-thread and synchronization are real needs in daily life. Unfortunately, concurreny programming ability can’t be polished through resloving these puzzles. Last but not least, researching these problems really consume too much time. If I really need the realted knowledge of one specified problem at work, studying it then is not too late.
After stopping these practice, I leverage the spare time for following tasks: read C++
classical books and learn more about standard libraries (There is another example, hash table is a commonly used data structure, and STL
provides a lot of member functions for it, but I find many puzzles related to hash table only need very few methods, so you can’t get a comprehensive understanding of hash table class in STL
by resolving these problems only); watch techncical conference videos (this can expand horizon and improve my English skills) and study basic knowledges for computet and maths (Definitely, the data structures and algorithms are important, I think we should know the internals well, but no need implementing them ourselvels).
To wrap up, currently I feel the time is fully utilized and more worthy compared to practise white board tests before. What’s your opinions? Feedback welcome!
I don’t think you understand the purpose of a whiteboard test. When I interview candidates, I’m looking for a lot of things that can’t be practiced:
– How well can you converse about a technical topic
– How adaptable are you to design constraints
– Do you understand the fundamentals of threading, databases, data structures, ect?
– Can you “think in code?”
– How well do you really understand the language that you spent XX years of your career working in
The best way to improve your skills is by doing: specifically, choose a hobby project that involves an area that you want to learn. Reading a book will only get you about 10-15% of the way there. Books are useful to choose a technology to learn, but not to learn the specific technology.
Getting back to whiteboarding: I’ve used it to:
– Reject candidates who forget basic fundamentals of a language that they claim XX years in. (Seriously, if you can’t construct an “if” statement or use a common collection class in a language you claim XX years in, then you don’t belong on my team.)
– Reject candidates who can’t learn an unfamiliar API. This is critical, because we need to discuss new APIs in design discussions; and because “old & working” code isn’t always worth refactoring to use some shiny new API.
– Reject candidates who don’t know how to use a database. (Frameworks / ORMs are not a replacement for knowing how a database works and how to program with one.)
– Reject candidates who don’t know fundamentals of threading
That issue goes to the core of why I chose to explore and also write an honest review of
GSA Internet search engine Ranker.