1. 1

    Some good links to papers here! Great summary

    1. 4

      I wouldn’t worry so much about algorithms and data structures, at least beyond the basics - if you know the rough behaviour of a list, tree and hashmap that’s all that usually comes up, and they’re straightforward to learn on your own. I’d say learn by solving real problems; particularly software design type matters where the best practice makes no sense until you’ve seen a several-hundred-thousand-line codebase. If you can’t do that, try and calibrate your sense of what is and isn’t possible - maybe read through open-source library code, find the gnarly bits and see if you can rewrite them to be less gnarly (this is the key skill for professional programming). Sometimes it’s bad programming and sometimes it’s like that for a reason; being able to tell the difference at a glance will serve you very well.

      1. 1

        Totally agree with your sentiment except for interviews. I just finished a job search in San Francisco and some places in the Valley for a senior type position. I had one interviewer actually expect me to implement a totally functional LRU cache on a phone interview with no ability to google anything. I got dinged because I didn’t implement the most efficient cache removal algorithm on my first try (though I knew this was the hotspot and indicated how I would fix it).

        What I’m saying is, most of the Bay Area firms I talked to were very picky about hiring and intricate knowledge of data structures and algorithms were table stakes for the interview.

        1. 1

          I disagree.

          Learning data structures is pretty important, to me its what makes a difference between a decent and a good developer. Learning programing patters and best practices is something that develops overtime, but understand different data structures, their performance, best times to use this or that data structure in the end can make your design decisions much easier and the algorithms much simpler. Some data structures lend themselves to concurrency well while others don’t etc. You don’t need to be able to implement them, but understanding them is paramount.