Good question, and that's the main reason I prefer to own physical books over Kindle books. I know that I own a physical book, but a Kindle book can disappear at any moment. Kindles are great while traveling though.
Problem Solving 101 by Ken Watanabe provides a toolbox of problem solving techniques. One method I've been using to decompose problems us to use a "logic tree". Start here: https://en.wikipedia.org/wiki/Issue_tree. Another technique is to first explain the problem and solution at a high level (pretend you're explaining it to a friend or coworkers), then write pseudocode for how you would solve it, and then convert that pseudocode to actual code.
If you're located in the Bay Area I'm up for it. Or even working together remotely. I'm somewhat junior (3 years of experience) but mentorship is something I've been looking for in my career.
Oh look, a thread about my current company. I'm actually in a bug fixing team right now separate from the main product development team. It's an extremely difficult position because as someone else mentioned, you need an incredibly deep understanding of the system to truly resolve these bugs. Unfortunately I work on a 20+ year old legacy codebase with minimal documentation and poorly written code, and our dev team is unwilling to spend any time helping to resolve these issues. They're too occupied with churning our new features, while the bug team is abandoned to clean up the mess from all this new code without any sort of help whatsoever. Another perspective that many people don't discuss is that only doing bug fixing is soul crushing. With things constantly breaking, it can be very mentally draining having to fix them. That being, the attrition rate on the team is quite high because there's very little career growth or satisfaction in being a bug fixer. This experience could be exclusive to my company, and I can't say whether it's effective for the business to run things this way since I'm still really early in my career.
Should be titled "How to Ace the Technical Interview in the Bay Area". Even absolute shithole bottom tier companies or unknown startups are asking these questions. Write perfect code on the whiteboard or get rejected. You have to put in A LOT of time into preparation even if you don't want to work at Google, which is ridiculous.
The books that I've read that have helped me immensely: How To Solve It, Problem Solving 101, 5 Elements of Effective Thinking, and Peak: Secrets from the New Science of Expertise. Trying to improve my problem solving ability in coding forced me to look inwards and analyze my thought process to understand why I'm able to solve some problems and unable to solve others. Ultimately I've realized the root cause of my inability to solve hard problems was poor problem decomposition. Every hard problem can be broken down into subproblems, and those can be further broken down until they become easy enough to solve. Then you just connect all the pieces together. It takes a lot of deliberate practice with many problem types to be able to recognize how to decompose problems, however.
So basically you're asking for a HackerRank screening. In my experience, if your code doesn't pass 100% of all test cases you get automatically rejected. At least with a human interviewer, they can evaluate your thought process even if the code itself isn't quite correct. Trust me you don't want to me interviewed only by robots.
If you don't actively review this material you're going to forget it. I created my own study guide for data structures/algorithms that I frequently review to prevent forgetting any concept. Every few days, or at least once a week, I'll take a blank sheet of paper and try to write down everything I possibly know about every fundamental data structure, including pseudocode and real code for operations such as searching/insertion/deletion. When I go through interviews I read my notes and do this active recall exercise at least once a day every day. Unfortunately there's no shortcut and you have to actively think about and code this material in order to remember it (if your day job doesn't involve knowing those things).
Technical interviews only test your data structures and algorithms skills and your actual work experience is mostly irrelevant. If you want to crack an interview, grind leetcode and practice writing code on a whiteboard. If you want to become a better developer, create software.
#2: Have almost too much self-belief. Self-confidence has been something I've struggled with my entire life, to the point where its crippled my career growth as a developer. I've been told that I'm a good developer, but if I only believed in myself I could go a lot further and become truly great. However, it's hard for me to believe in myself when I don't have a lot of data points to prove that I AM competent and capable. Over the past 3 years of working full-time yes I've accomplished some things, but none of them were truly difficult or ground breaking. I'm always pushing myself harder to learn more and get better, but it never feels like its having enough impact on me actually growing. So if all I have are at best average/mediocre accomplishments, how do I convince myself that no, I AM great, that I CAN do this? I feel like if I start having a lot of self-belief it'll just become a lie that will blind me from my weaknesses and cause me to stop growing.
That's hilarious and so true. Last year I interviewed for a senior back-end engineering position at a well known mid-sized company in the Bay Area. They put me through 2 technical phone screens and a 6 hour onsite interview, grilling me in detail about system design, domain knowledge, personal experience, and of course doing endless exercises of writing solutions to algorithmic problems on a whiteboard. I really felt like I nailed the interview but they still rejected me because they thought my technical skills weren't good enough. 7 months later I start applying to jobs again via LinkedIn, and guess what, that exact same position on the same team is still open. It seems insane that during the past 7 months they couldn't find a single person to fill that role. Makes me wonder if they know what they're really looking for.
2015 15" Macbook Pro. The screen size and resolution is perfect for coding and watching movies. Keyboard is super comfortable, the touchpad is the best of any laptop I've ever used. The physical size and weight of the laptop is hardly noticeable in my backpack. It integrates flawlessly with all my peripherals like a mechanical keyboard, mouse, external monitors, etc. macOS is also sleek and simple. The overall experience of using that MBP is a pleasure.