I'm a software engineer with more than 5 years experience. There have been more than 1 time I am contacted by big companies for interview opportunities. And every time I find myself in a position where I'm totally unprepared for it.<p>I know the drill, and I know my skills. I'm not terrific with algorithm problems. I need preparation and frequent practice to stay sharp. In the past, I have tried spending 1-2 hours each day to practice. But as I gain more experience, I find myself spending more and more time working on side projects, exploring things that interest me, solving problems at a different scale. I can't really keep myself motivated to practice random algorithm problems anymore.<p>I do want to be prepared when the chance comes, but I can't balance my time. What would you do if you were me?
To be frank, I have never gotten a job I've really enjoyed which required me to know my algorithms in an interview. Such questions are a negative indicator which indicate to me that the interviewer is more interested in showing off than getting things done.<p>The only practice I keep up with is talking to people. Being able to maintain a conversation with a non-technical person for more than a minute will has furthered my career more than any amount of algorithmic knowledge.
Always be interviewing.<p>This has a few advantages:<p>* You get practice and insight into interview questions<p>* you always have an idea of your worth<p>* interviewing stops being something you only do when you NEED a new job. Now it's just a day to day thing and it's less nerve wracking. You don't really want a new job so the pressure is off.<p>* you may find a much better job and decide to take it.<p>I'm sure there's more positives as well. The downside is it takes time away from other things including work. As you do it regularly though you'll find it takes less and les time since your resume is always up to date and you get better at weeding out companies you wouldn't want to work for.
I reversed my attitude for interviews. If the employer has an interview process that doesn't respect my time, my experience, and my ability, then I don't want to work there.<p>My attitude isn't "As a candidate, I failed that interview." My attitude is "That employer failed to have a process that enabled them to hire someone as awesome as me." I know that I'm a 10x-100x programmer at the places I've been, and if your interview process can't identify that, then that's your problem and not my problem.
I have reached a point where I am comfortable enough with implementing things that I do not need to practice as long as I understand how it works. So I get to spend all my free time on side projects just like you.<p>I have a set of downloaded algorithm lectures by Robert Sedgwick from Coursera (text version: <a href="http://algs4.cs.princeton.edu/home/" rel="nofollow">http://algs4.cs.princeton.edu/home/</a>) that I watch before every interview. I make it a point to do this even if I think I remember it well. In fact, I now know parts of the course so well, that I can watch it as 2x speed in VLC, and that refreshes everything in my mind.<p>To be fair, I'm still in college, and all my interviews were for internship positions and algorithms focussed, so it might definitely differ from your situation. However, what I learnt from this set of videos has never failed me with any of the big companies.<p>PS: I use scripts like these (<a href="https://github.com/coursera-dl/coursera" rel="nofollow">https://github.com/coursera-dl/coursera</a>) to download useful courses from Coursera that I can then watch before interviews.
Stop drilling pointless "interview questions" and instead prefer employers that value your ability to do the actual work.<p>If you can build and ship side-projects your <i>preferred</i> employer will hire because of that, not some tricky interview question. You can safely reject employers that want to, if you get the analogy, hire scrabble players instead of writers
Do something like TopCoder SRMs or CodeForces rounds. They are not only fun but they take up only about 2-4 hours of effort per week. You can judge yourself how well you are doing compared to college kids and competitive programmers. After the contest, read the editorial about the problems that you could not solve during the contest.<p>After about 3-6 months of this, I can confidently say, I can pass the pure algo/data-structure rounds of any company..
> What would you do if you were me?<p>Ignore recruiters unless I was actively looking and start practising whatever the relevant set of questions; silly flash card memory tricks, etc; were if that became true.
I just do interviews constantly. Not frequently but I keep my resume updated and keep alert for relevant positions and some position that aren't an exact fit as well. I will respond to recruiters and do interviews until I am pretty sure that its not a good match. If I happen to find an awesome company to work for in this way then that's just an added bonus. Basically I'm always on the lookout for my next job.
It seems like you've already identified that the problem is you needing to know 'algorithm problems', so I would work on that. You shouldn't need to memorize hundreds of random problems. I think a few simple (not requiring much time to learn or to maintain) things would go a long way if you really are willing to make yourself put in some effort. Learn how to do basic big oh analysis. Learn how to apply recursion to simple enough problems, like the boggle question. Learn how merge sort and quick sort work and be able to implement them (they're not even that many lines of code). If you're already working on side projects and solving problems at different scale, that should help you naturally stay up on these things. Being able to talk about different libraries you learn and how you worked at different scales should also be valuable during an interview.
Found myself in similar situations in the past. My tentative solution was to maintain a corpus of resources for practice (beyond the usual suspects of implementing the standard data structures etc.), and hope that when the chance comes, 1-2 hours each day for a week before an interview would suffice. And when I do practice, I don't use a code editor, either paper or plain editor with no way to execute the code, simulating the (horrible) conditions of interviews as best as I can.<p>Obviously, this doesn't get you the benefit of being constantly drilled, but should provide some advantage. If you do care enough to get yourself a bigger advantage, maybe try to clear a few weeks before a round of job searching (if that's how you operate), then use those weeks for a few hours of practice each day.
I do the same as you. For me it's far more important to maintain energy level and motivation in self improvement projects than to do some specific trick question kata for a hypothetical interview. Some people like those, I can't stand them.<p>I get a huge kick from algorithms when they solve a specific problem at my current problem elegantly. I suppose for me my algorithm learning plan is to constantly ask myself "what is the simplest form of data that I need and which algorithms then process it most elegantly for my current problem".<p>The only thing I know for sure is a) people learn differently b) each must find a learning strategy that fits his or her strengths the best.
The real question is not how you as a well educated computer science professional stay ready for interviews. The question is whether or not the US economy is going to be able to handle integrating and making use of modern technology in an efficient way, or if the US software industry will be collapsed by incompetence in the same way the US auto industry was.
Always be looking for a job. Always be interviewing. Because recruiters are whores your boss will find out. Just tell them that you are looking for a part time job. Schedule all your interviews during lunch or after work.