Amir Sharif
Engineer.
Weekend hacker.
Self improvement enthusiast.

Career Advice

General Career Advice

Start with self-care as your foundation. Before tackling ambitious goals, prioritize the basics: sleep, exercise, and mental health. Ambitious people often neglect themselves and become less successful. Without this foundation, productivity techniques don’t work.

Use deep work to achieve flow states. Establish routines, minimize distractions, and batch focused work sessions. This creates fulfillment through challenging work.

Break hard things into learnable components. Apply the single-loop system: modify easy tasks to resemble hard ones in just one way, practice until mastery, then repeat. This makes impossible challenges achievable.

You’re not hired to write code—you’re hired to solve business problems. As Patrick McKenzie emphasizes, engineers create business value, not just programs. Instead of describing yourself as someone who writes Python,” focus on how you’ve increased revenue or reduced costs for previous employers. The most successful developers understand they’re problem-solvers first, programmers second.

Your technology stack doesn’t define your business value. Whether you code in JavaScript, Python, or Ruby matters far less than your ability to deliver meaningful results. The programming language you choose doesn’t matter”—what matters is your impact on the business.

Soft skills separate good programmers from great ones. The hardest part of software development isn’t writing code—it’s dealing with people. You need to navigate human complexities, manage expectations, and communicate with stakeholders who don’t speak your technical language.

Continuous learning trumps specialization. The most valuable developers maintain broad skill sets and stay curious. Read foundational books like The Pragmatic Programmer” and Code Complete”. Your career success depends more on understanding business needs than mastering the latest framework.

Interviewing

  • Always be coding. If your current job is not allowing you to learn new things, then you are falling behind, especially in an AI world.
  • Use recruiters to your advantage. Ask questions to them like what company values should I try to highlight?” and what are the best ways to prepare for the interview?”
  • Research the interviewer(s) and company before the interview. A single statement at the start of the interview not only shows that you prepared, but I’ve noticed it changes the tone of the whole interview. In that past I’ve referenced an interviewer’s Github project, a post on their Linkedin, or a company blog post. I always have good questions for the end of the interview.
  • Reflect on the interview afterwards. If it didn’t go well, where did it start going wrong? If there were things that stumped you, find and prepare how you’d answer it better next time.
  • Your self-worth is not driven by your performance on an interview. Companies make incorrect hiring decisions all the time, and an interview is not like a test. It’s less about you and more about the people you are competing with. The only thing in your control is your own performance through your own lens.

Algorithms

If your dream job requires you to grind technical questions, here’s how I’d do it:

Start with NeetCode 150 and Blind 75. Use a Custom GPT with the following prompt to have it guide you to the answer on tricky problems.

You are a mentor helping a software engineer with medium experience to solve coding problems. I will provide you with a coding problem, and you will break it down for me.

Your breakdown should consist of the following sections:

1. Problem Breakdown: Briefly summarize the problem, highlighting the key challenge. Provide some clarifying questions that I should ask before tackling this problem in an interview environment.
2. Core Data Structures and Algorithms: Mention the main data structures and algorithms needed to solve this problem.
3. Patterns to Remember: Share helpful analogies or patterns that make the solution easier to recall.
4. Solution: Write out the solution in Javascript. Use a tab indent size of 2.
5. Explanation of Solution: Provide a terse explanation of how the code solves the problem.

Format your response such that each section above is its own header.

Appendix

When I come across something useful to this topic, I add it below.

Github Resources

  • EbookFoundation/free-programming-books - A community-maintained list of free programming books, tutorials, and resources in dozens of languages and topics.
  • trekhleb/javascript-algorithms - Algorithms and data structures implemented in JavaScript, each with explanations and links to further reading. Ideal to prepare for coding interviews or digging deeper into algorithms, especially if you already know Javascript.
  • DopplerHQ/awesome-interview-questions - Technical interview questions for nearly every programming language, framework, and technology.
  • h5bp/Front-end-Developer-Interview-Questions - Open-ended and practical questions for front-end developer interviews, covering HTML, CSS, JavaScript, accessibility, performance, and more.
  • ashishps1/awesome-system-design-resources - Free resources for learning system design concepts and preparing for system design interviews. Includes key concepts, architectural patterns, tradeoffs, real-world case studies, and links to articles and papers.

Books

  • The Algorithm Design Manual - Definitive textbook on algorithm design, blending practical techniques with real-world war stories.” A little bit academic, but still useful.
  • The Imposter’s Handbook - A self-taught programmer’s guide to the core concepts of computer science, written for those without a formal CS degree. Useful to get a more layman’s explanation of topics like algorithms, data structures, complexity, cryptography, and more.

Notable Blog Posts

Other


Tags
1 Pager

Date
December 2, 2022