<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Mindset - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Mindset - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 25 Jul 2026 22:29:00 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/mindset/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Prepare for Technical Interviews – Problem-Solving Tips + Mindset Tricks to Get You Ready ]]>
                </title>
                <description>
                    <![CDATA[ Hi everyone! In this article we're going to talk a bit about technical interviews. I'll share a few tips that, based on my experience, might help you go through these interviews successfully. I originally wrote this article more than a year ago, befo... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/problem-solving-and-technical-interview-prep/</link>
                <guid isPermaLink="false">66d45f1ad1ffc3d3eb89ddf7</guid>
                
                    <category>
                        <![CDATA[ Interview tips ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Interviewing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Mindset ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Problem Solving ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ German Cocca ]]>
                </dc:creator>
                <pubDate>Mon, 06 Jun 2022 22:50:19 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/06/pexels-christina-morillo-1181345.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Hi everyone! In this article we're going to talk a bit about technical interviews. I'll share a few tips that, based on my experience, might help you go through these interviews successfully.</p>
<p>I originally wrote this article more than a year ago, before getting my first job offer as a developer.</p>
<p>I'm sharing this with you now because I recently went through another interview process. And I found that the same concepts and thoughts that helped me get my first job offer allowed me to pass all the interviews successfully again. 🙂</p>
<h2 id="heading-my-background">My Background</h2>
<p>I took up coding more or less a year ago. I started learning out of pure curiosity, and as I learned more about it and was able to build personal projects, I just fell in love with it.</p>
<p>I got so obsessed and passionate about it that I dedicated all the free time I had to coding, reading about code, watching videos about code, and just learning as much as I possible could, because for me it was fun and interesting!</p>
<p>Time passed and at a point I started imagining myself working as a developer. First it was like a blurry thought, and then I started thinking about it seriously and learning about what I needed to do to get to that point.</p>
<p>My learning journey and the approach I took towards becoming a dev will probably be the subject of another article, but my point is that I made it! I recently got an offer for my first job as a full time developer and I couldn’t be happier about it.</p>
<p>And there were many things and learning experiences I had to go through to get to this point, but I’d say the toughest one – and the one I was less prepared for – was technical interviews.</p>
<h3 id="heading-what-are-technical-interviews-like">What are Technical Interviews Like?</h3>
<p>I come from a social sciences background, and most of the time, within that field, there’s nothing too “technical” to talk about during interviews. Employers normally hire you based on your experience and behavior during interviews.</p>
<p>But in the coding field it’s really different. Experience is valuable, of course, but employers also value projects you can show to them, theoretical knowledge about different programming topics, and, most of all, the problem solving skills you can show off during technical interviews.</p>
<p>In almost all selection processes I went through, there was a technical interview in which an interviewer tossed me a problem and I had to solve it live with them looking at me the whole time.</p>
<p>This is a standard practice for coding jobs, but I wasn’t prepared at all. I failed miserably more than once, and these experiences were some of the most embarrassing and frustrating moments in my professional life so far.</p>
<p>At times I felt stupid for even thinking I’d be capable of switching careers at almost 30. I thought I just wasn’t smart enough. But luckily I kept going, researched about technical interviews, learned, practiced, and kept failing until I didn’t fail anymore.</p>
<p>Technical interviews are tough and can be really stressful if you’re not prepared correctly. Also, even though I successfully passed a selection process, I know I still have a lot to learn about this and that I’ll need to perfect this skill to further grow my career in the future. So here are my main tips for nailing your technical interviews.</p>
<h2 id="heading-1-prepare-for-the-interview"><strong>1. Prepare for the Interview</strong></h2>
<p>This is important for all kind of interviews, but for technical interviews I think it’s crucial. Your chances of passing these evaluations are way lower if you don’t prepare correctly for them.</p>
<p>Here are some ideas that allowed me to better prepare for these interviews.</p>
<h3 id="heading-do-your-research">Do Your Research</h3>
<p>Find out about technical interviews in general, how are they normally organized, what interviewers ask and what do they intend to measure, what kind of problems do companies toss at you, and what are the best approaches towards interviews.</p>
<p>The internet is an infinite resource of knowledge, so don’t waste it! Google about everything you can and take advantage of the experience of the thousands of people who have gone through similar situations and share their experiences.</p>
<h3 id="heading-practice-solving-problems">Practice Solving Problems</h3>
<p>Problem solving is a skill just like any other. There is specific knowledge you’ll need to get good at it, but most of it is practice and getting your brain to be comfortable in that situation.</p>
<p>There are tons of websites that contain the types of problems you’ll see during interviews. <a target="_blank" href="https://www.freecodecamp.org/learn/coding-interview-prep/">freeCodeCamp has an amazing course designed for this.</a> Some other cool resources are <a target="_blank" href="https://www.hackerrank.com/">hackerrank.com</a>, <a target="_blank" href="https://leetcode.com/">leetcode.com</a>, <a target="_blank" href="https://www.codewars.com/">codewars.com</a>, <a target="_blank" href="https://exercism.io/">exercism.io</a>, <a target="_blank" href="https://app.codesignal.com/">app.codesignal.com</a>, and <a target="_blank" href="https://www.algoexpert.io/">algoexpert.io</a>.</p>
<p>Solve as many problems as you can from any of these sites and you’ll start getting good at them.</p>
<p>And when you practice, at first it’s okay to just worry about solving the problem. But once you get comfortable enough, a great idea is to try to make your practice as similar as possible to an actual interview. And by this I mean setting a timer, explaining your solution out loud, analyzing your final algorithm and refactoring…just basically following all the steps you’d normally follow in an actual interview.</p>
<p>If your practice is similar to the actual situation, once you get to that situation you’ll feel more confident because in some way you’ve already been there.</p>
<h3 id="heading-build-a-theoretical-foundation">Build a Theoretical Foundation</h3>
<p>Besides actually practicing, learning theoretical concepts about algorithms and data structures is a great idea to get better at solving these problems.</p>
<p>Think about it as adding tools to your toolbox. The more tools and concepts you have in your mind, the more problems will sound familiar or ring a bell in your brain, and from that you'll be more able to arrive at a solution.</p>
<p>There are many resources on the internet, some free and some paid. A course about data structures and algorithms is pretty much a must for any programmer, so I encourage you to find a good one. Here are a couple you can start with:</p>
<ul>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/learn-all-about-data-structures-used-in-computer-science/">Data Structures Explained</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/learn-data-structures-from-a-google-engineer/">Learn Data Structures from a Google Engineer</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/learn-algorithms-and-data-structures-in-python/">Learn Algorithms and Data Structures in Python</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/algorithms-and-data-structures-free-treehouse-course/">Learn about Algorithms and Data Structures</a></p>
</li>
</ul>
<p>Of course also theoretical knowledge about your programming language of choice and any other tools in your stack (frameworks, libraries, databases, and so on) is also very important.</p>
<h3 id="heading-imitate-others">Imitate Others</h3>
<p>It’s ok to run into problems you don’t know how to solve or to come up with solutions that are not the best suited ones.</p>
<p>In these type of situations, or always actually, it’s a good idea to take a look at how other people solved that same problem and learn from them. What approach did they take? What ideas did they have? Did they get stuck? How did they move towards the solution?</p>
<p>Analyze their solution and their behavior, identify what works for them, think if that could work for you and if the answer is yes, copy them! It’s crucial that you deeply understand why their solution works and how their logic works. You want to internalize the logical approach, not the code, as that’s just an after effect.</p>
<p>Looking at problem solutions and videos of mock interviews is a good idea to get this kind of data.</p>
<h3 id="heading-understand-what-kind-of-interview-youll-have">Understand What Kind of Interview You'll Have</h3>
<p>I mentioned the most classic type of technical interview is the one based on algorithms and data structures, in which the interviewer will give you a problem to solve through an algorithm.</p>
<p>But I found that there're also interviews that are mostly theoretical, in the sense that the interviewer will ask questions to measure your knowledge about a given programming language, framework, library, design and architecture patterns, and so on.</p>
<p>Another kind of interview is where the interviewer shows you an actual project or asks you to build one. During the interview you discuss the decisions you made to build it or implement new features/modifications on it.</p>
<p>Each kind of interview is different and might require different preparation, so it's always a good idea to ask the company what will the interview be based on, and prepare accordingly.</p>
<h2 id="heading-2-breathe-and-think-things-through"><strong>2. Breathe and Think Things Through</strong></h2>
<p>Once you've seen and gone through a ton of examples and start feeling somewhat confident around coding problems, it’s time to get to the deeper stuff.</p>
<p>Here are some tips that helped me go through the interviews successfully.</p>
<h3 id="heading-dont-code">Don’t code</h3>
<p>This sounds crazy right? The best approach to solving most coding problems is actually not coding, or at least <strong>not right away</strong>.</p>
<p>No matter how anxious or secure you are about the idea you have in mind, I find it better to always take a step back and make sure you understand things deeply before going to the details and breaking out the code.</p>
<p>So how do you do that?</p>
<h3 id="heading-understand-the-problem">Understand the Problem</h3>
<p>The first step to solving a problem is actually understanding it. And to understand it, the best idea is to “make it yours”, and internalize it.</p>
<p>A good idea is to read the exercise twice, repeat it again in your own words, and go through multiple examples (simple ones, complex ones, examples with null or invalid inputs…).</p>
<p>No matter how silly, complex or simple the problem may seem, this helps you make sure you understand it properly and gives your brain data and time to come up with solution ideas.</p>
<h3 id="heading-make-sure-you-understood-it">Make Sure You Understood It</h3>
<p>Repetitive? Yeah, but effective. Check and make sure you understood what you need to do and how your function will work.</p>
<p>Ask yourself, what are the inputs going to be? What will be the output? Check for edge cases. Will you always receive the same input or could you expect different formats? Do you have to be prepared for strange cases or does the exercise restrict the kind of situation you’ll encounter?</p>
<p>It’s better to clear out all this things before even starting to think about a solution.</p>
<h3 id="heading-explore-your-toolbox">Explore Your Toolbox</h3>
<p>I said that learning theoretical concepts and practicing is like adding tools to your problem solving toolbox. When you see a new problem, it’s a good idea to explore that toolbox and see if any of the concepts or solutions you’ve used in the past could work here.</p>
<p>Could it help to use some sort of counter? What about implementing some sort of data structure to help you out? Could you use pointers or a sliding window? Would it be a good idea to take a divide and conquer approach? What about recursion? Could sorting the input help for anything?</p>
<p>You don’t necessarily have to know the exact path to take, but comparing the problem to previous patterns you’ve seen can help spark ideas in your mind.</p>
<p>Of course the more you practice solving problems and learning about possible solutions, the more patterns you’ll have to remember and compare.</p>
<h3 id="heading-break-down-the-problem">Break Down the Problem</h3>
<p>Once you’ve analyzed the problem deeply, hopefully you’ll have at least an idea of how to tackle it, or where to start.</p>
<p>A great idea here is to try to think about the different steps you need to take to get to your solution and write down those steps to analyze them, check if your logic is correct, and later use them as little memory helpers and “instructions” for you to translate into code.</p>
<p>Simplifying your solution through steps and specially writing them down will often help you identify flaws in your logic or cases you didn’t think about before.</p>
<p>This is great because you’re at a stage when it’s really easy to modify your approach or lean towards a different idea. You didn’t waste time coding or getting yourself into a maze of logic that doesn’t actually work.</p>
<h3 id="heading-simplify-the-problem">Simplify the Problem</h3>
<p>Specially when facing complex and difficult problems, a good idea is to first ignore the main difficulty of the problem and try to solve a similar, simpler version of it.</p>
<p>When you nail that solution, bring the main difficulty back and see if you can translate your solution to it.</p>
<h3 id="heading-visualize-the-problem">Visualize the Problem</h3>
<p>Complex problems are sometimes difficult to get your head around. Having a whiteboard, either a physical or a digital one, is always a great idea.</p>
<p>Visually stimulating your brain by drawing up the problem or an idea can be a good approach to buy yourself some time and see if that perspective shows you some data you didn’t notice.</p>
<h3 id="heading-start-to-write-your-code">Start to Write Your Code</h3>
<p>So once you have a clear idea of the steps you’ll need to cover to get to the solution, it’s time for translating that into code. This should be the simple part if you’re comfortable enough with the language.</p>
<p>A thought to keep in mind here is that if you can’t remember something very specific, don’t let that hold you down – pseudo code it and carry on with the rest of the solution.</p>
<p>Talk to your interviewer and see if they can help you with that part, or ask if they'll let you Google it. In most cases this will be ok and the important thing will be to show that you nailed the correct logic to solve the problem.</p>
<h3 id="heading-test-your-code">Test Your Code</h3>
<p>Test your solution at every step and at the end. There’s nothing more annoying than writing a ton of code and later seeing it fail without knowing the exact cause.</p>
<p>Test your code and your logic at every step of the solution, as this will allow you to catch bugs earlier and will save you from wasting time and effort.</p>
<p>Of course testing at the end is important to check if your solution actually works! So throw your function different inputs and edge cases to see if it behaves as expected.</p>
<h3 id="heading-analyze-the-solution">Analyze the Solution</h3>
<p>Once you've gotten to the solution, you’re not done yet. It’s a great idea to show your interviewer you can analyze what you did too.</p>
<p>Ask yourself and tell them, what’s the big O complexity of your solution? Can you think of a way to improve the performance or the memory usage of your algorithm? Is there a way to make your function easier to read and understand?</p>
<p>Even if you can’t think about how to code it exactly, it’s great to show them that you’re the kind of developer who is always going to look for improvements and not settle for something that just works.</p>
<h3 id="heading-improve-your-solution">Improve Your Solution</h3>
<p>Of course, if you can find ways to optimize your solution and know how to code it, do it!</p>
<p>And about this, in a coding interview situation you’ll rarely come up with the perfect solution for a problem. You’re under pressure and on the clock, so it’s perfectly ok to come up with a so-so solution and then refactor it until it reaches an acceptable level.</p>
<p>It’s often better to show you can solve the problem even if not in the perfect way than spend all your time just thinking about the perfect solution.</p>
<h3 id="heading-talk-to-your-interviewer">Talk to Your Interviewer</h3>
<p>Talk with your interviewer during the whole process. What your interviewer is trying to measure is your problem solving ability and your level of comfort with your programming language of choice.</p>
<p>That is a hard thing to measure if you don’t open your mouth and just code away.</p>
<p>It’s crucial that you talk to your interviewer and let them know what you’re thinking, what is your thought process, what ideas are you having, how are you understanding the problem, what logic are you going to follow with your solution and why are you making decisions.</p>
<p>Talk to them, ask questions, explain yourself, and if you get stuck or don’t know how to go on, explain to them exactly the thing that is giving you trouble. In most cases you’ll get some help and more importantly you’ll show them you’re actually trying to work towards a solution.</p>
<h3 id="heading-listen-to-your-interviewer">Listen to Your Interviewer</h3>
<p>When you’re being given the problem to solve – and specially if you get tips or feedback from your interviewers – pay attention! No matter if you think you already have the best idea or if there’s something that’s driving you crazy and need to solve right now, just drop it and listen to what you’re being told.</p>
<p>If you don’t listen to feedback, you’re giving a very negative signal to your possible future employers. Think about it: would you like to work with someone that doesn’t listen to feedback? Besides, feedback will certainly help you solve your problem, so listen!</p>
<h2 id="heading-3-control-your-emotions"><strong>3. Control Your Emotions</strong></h2>
<p>This for me was the toughest part of the interviewing process, and it's something I didn’t really find a lot of information about when researching technical interviews.</p>
<p>Dealing with the anxiety and frustration these situations can provoke is hard, but also a crucial step to improve your performance.</p>
<p>So here are some things that have helped me in this regard.</p>
<h3 id="heading-prepare-your-body-and-mind">Prepare Your Body and Mind</h3>
<p>Interviews are stressful situations in which you have to deal with expectations and perform to reach those expectations while being judged by other people.</p>
<p>I’ve always felt uncomfortable in these type of situations so I’m quite familiar with the type of anxiety you might feel.</p>
<p>Something that helps me is try to think about it like the moment of a game for a sports player or when actors get out on stage. You normally see these people trying to warm up and focus before they start to perform, right? There’s a reason for that – and it’s that this preparation actually enhances performance and gets you ready to give your best.</p>
<p>It may sound stupid at first, but stretching, warming up your voice, meditating, imagining the moment in your mind and picturing yourself being successful in the moment are all things that will push you towards doing nicely in this important moment.</p>
<h3 id="heading-be-confident">Be Confident</h3>
<p>Easier said than done, right? Absolutely. Confidence for most people isn’t something you can just turn off and on, but something you build along the way and comes with lots of practice, studying, and preparation behind it.</p>
<p>You'll build confidence with the work you do prior to the interview, but once you’re in the moment it’s important to remember that you want to show the interviewers you have confidence in yourself as a coder and that you trust yourself to solve any problem you face.</p>
<p>This doesn’t mean you have to know absolutely everything and be able to solve any complex problem absolutely by yourself. Rather, it means that you won’t panic when you face something you don’t know how to solve at first, and that you have the ability to slowly analyze the problem, break it down, and work towards a solution.</p>
<h3 id="heading-slow-down">Slow Down</h3>
<p>Stress, anxiety, and the wish to show that you can solve the problem can make you rush more than you need to. And rushing can lead to missing key information, flaws in your logic, bugs in your code, and errors in general.</p>
<p>So take your time, actually, take more time than you actually need. Analyze the heck out of the problem, talk slowly, code slowly, think slowly, and remember to breath. Things are easier to deal with when you take your time and <em>slow-mo</em> the process.</p>
<h3 id="heading-dont-take-it-personally-or-do">Don’t Take it Personally – or Do...</h3>
<p>You’ll mess up at some point, that’s a certainty. Especially in your first interviews, you’ll probably fail and feel miserable about it. It’s just the way it is, and it's a step that is needed for you to understand where you need to improve.</p>
<p>A key issue here is how you deal with that frustration. I could tell you to think about it as a process, to not get mad when you fail, to be patient… But if you’re an anxious and self demanding person as I am, you’ll be very frustrated when you fail, and there’s nothing you can do to avoid it.</p>
<p>But how do you deal with that? Do you get depressed and quit coding forever? Do you get scared of interviews and never apply for a job ever again?</p>
<p>Personally, I get very mad at myself when I fail at something or find out I don’t know something I "was supposed" to know. I get mad at myself for not preparing correctly or for missing things, and even though that anger feels bad at first, later on is something that pushes me forward.</p>
<p>I feel so bad about it that I make absolutely sure I won't fail at that again, and I practice as hard as I can to avoid being in that situation again.</p>
<p>Different approaches work for different people, but the thing is to handle your emotions in a way that pushes you forward and not backwards.</p>
<h3 id="heading-learn-from-your-mistakes">Learn from Your Mistakes</h3>
<p>As it’s a certainty you’ll mess up, the smart thing to do is to learn from the errors you made and try to not make them again.</p>
<p>Always try to take note of the problems you were presented and your solutions, analyze your mistakes, analyze other possible approaches you could have taken, what optimizations you didn’t see, and what key concepts you didn’t remember at that moment.</p>
<p>Also always ask your interviewers for feedback about what you could have done better. This information is gold if you get the best of it.</p>
<h3 id="heading-have-fun">Have Fun</h3>
<p>If you love coding, you probably have lots of fun doing it. Never forget that, no matter the context.</p>
<p>In interviews, try to approach each problem with curiosity rather than fear of failing. Try to show your interviewers you’re enthusiastic about problems, because you’re probably going to work with similar stuff on a daily basis.</p>
<p>Plus if you’re having fun and thinking in a positive way, you’ll be more relaxed and your mind will be clearer, which of course helps your problem solving skills.</p>
<h3 id="heading-keep-going">Keep Going</h3>
<p>If you pass or if you fail, at the end it doesn’t matter, in the sense that your approach and behavior should stay the same.</p>
<p>Just as code can always be improved, so can you as a programmer. You should always keep learning, keep getting better, keep practicing, keep facing stuff you didn’t know anything about and eventually overcoming it.</p>
<p>So don’t get too high if you pass or too low if you miss – just keep coding and keep learning.</p>
<h1 id="heading-roundup"><strong>Roundup</strong></h1>
<p>As always, I hope you enjoyed the article and learned something new. If you want, you can also follow me on <a target="_blank" href="https://www.linkedin.com/in/germancocca/">LinkedIn</a> or <a target="_blank" href="https://twitter.com/CoccaGerman">Twitter</a>.</p>
<p>See you later!</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/06/see-you-soon-see-you.gif" alt="Image" width="600" height="400" loading="lazy"></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Simplicity is sophistication ]]>
                </title>
                <description>
                    <![CDATA[ By Srinivasan C Recently I attended a meeting with multiple stakeholders from the business side. When asked to explain a feature, I started explaining them the details of the feature and its implementation. After the meeting one of my colleagues told... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/simplicity/</link>
                <guid isPermaLink="false">66d4614dd14641365a050971</guid>
                
                    <category>
                        <![CDATA[ Clean Architecture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ mental models ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Mindset ]]>
                    </category>
                
                    <category>
                        <![CDATA[ soft skill ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software architecture ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sun, 07 Jul 2019 09:54:58 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9ca1a3740569d1a4ca4fc9.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Srinivasan C</p>
<p>Recently I attended a meeting with multiple stakeholders from the business side. When asked to explain a feature, I started explaining them the details of the feature and its implementation. After the meeting one of my colleagues told me even though I explained it in detail, they will be requesting a follow-up meeting to discuss the same thing and it was true — the next day we had a meeting invite for the same thing as a follow-up. He explained to me that the reason was I had provided them more details than necessary which probably confused them. This incident led me to the principle of Occam’s Razor.</p>
<p>Quoted from Wikipedia</p>
<blockquote>
<p><em>Occam’s razor or the law of parsimony is the problem-solving principle that essentially states that “simpler solutions are more likely to be correct than complex ones.” When presented with competing hypotheses to solve a problem, one should select the solution with the fewest assumptions. The idea is attributed to English Franciscan friar William of Ockham (c. 1287–1347), a scholastic philosopher and theologian.</em></p>
</blockquote>
<p>We have all heard the famous quote by Sherlock Holmes</p>
<blockquote>
<p><em>Once you eliminate the impossible, whatever remains, no matter however improbable, must be the truth.</em></p>
</blockquote>
<p>This follows directly from Occam’s Razor. This principle states that given two explanations of a situation, the one in which there is the least number of variables(simpler) however improbable is the most likely explanation. This principle is very helpful and it can be used in a wide variety of situations but it is especially powerful in the hands of software professional.</p>
<p>There are many areas of Software development which can benefit from this principle. A few of them are:</p>
<h3 id="heading-coding">Coding</h3>
<p>The first and foremost area is coding. As developers, we make hundreds of decisions every day which directly affects the health of the codebase and in turn the business. Few of the mistakes we make include adding unwanted abstractions, designing for the future, making it “extensible”(whatever that means). These code with unwanted additional complexity slowly rots over time and becomes “that” part of the codebase that no one understands and nobody is willing to touch. These are the things we do either knowingly or unknowingly which can put a dent on our codebase health in the long-run.</p>
<p>To overcome this it would be prudent for us to think in terms of Occam’s Razor. Always do the simplest thing possible at any point in time. Principles like YAGNI and KISS are examples of Occam’s Razor in coding. If you want to combine 3 design patterns to accommodate a feature request you expect in the future, restrain your primal instincts and stick with a single class for now. Using Occam’s razor during the development process would keep the codebase simple and readable and your future peers will really thank you.</p>
<p>A word of caution here is, this principle should not be used as an excuse to write bad code or take shortcuts. If there is a real need to add complexity, by all means, you should do that. Consider this a framework for you to step back and think for a moment and weigh the cost of your decision in the long run.</p>
<h3 id="heading-debugging">Debugging</h3>
<p>Another interesting application of this principle is while debugging. The hard part about debugging is nobody knows the answer especially when you work in a legacy code base with business critical functionalities. Bigger the codebase, more complex the debugging process and thus the Occam’s Razor comes in really handy. All the good software developers I know trace the root cause of a bug by using this principle without even realising it.</p>
<p>Let's say there you write a program to display a few stats in the dashboard. You observe that each time the dashboard is updated you get 2x instead of x for a particular stat. What would be your first instinct? Is it a double counting issue or some thread level race condition? I am guessing most of you with go with the former. This is Occam’s Razor in action. You picked the choice which provides the simplest explanation for the issue intuitively.</p>
<p>This is not to say that always the simplest explanation is the right one. Instead, you start from the simplest one and eliminate one by one either by theory or experimentation until you arrive at the actual root cause for the problem. This provides a framework for you to tackle problems methodically.</p>
<h3 id="heading-communication">Communication</h3>
<p>One of the most under-rated functions of a software developer is communication. Be it with peers/ managers/ stakeholders, communication is as important as coding for any developer. As developers, we are the closest to any given problem and it is natural for people to rely on us for understanding the whole picture of a product/feature. This makes what you communicate and how you communicate extremely crucial from a business standpoint.</p>
<p>As we are closest to a problem, we will have a lot of technical and domain knowledge around it. But it is extremely important to communicate the right things to the right people. Assume you are in a mail thread with Sr. engineer, PM, Manager, and a Business development executive, you need to provide just the right amount of detail so that the Engineer can get the technical challenges and the others can also understand the complexity technically as well as the business justification. You need to achieve the right amount of balance in the technical/business mixture for the audience to understand and not lose interest. This is where Occam’s razor comes in. You need to provide the least level of detail in the mail and schedule a follow up for the people who need to understand more.</p>
<p>Take this as an example “we did a POC on x and we were able to achieve y. Even though we discussed A in the previous mail, we could not achieve A due to the complexities in a library that we were using. There were a lot of assumptions in the threading model in the library and thus it prevented us from achieving A”.</p>
<p>Now, what do you think the different stakeholders will understand?</p>
<ol>
<li>Engineer — Yes I get the issue.</li>
<li>PM- So basically we cant achieve A. And what is a threading model?</li>
<li>Manager — Did he try enough to achieve A?</li>
</ol>
<p>Instead, if we write “we did a POC on x and were able to achieve y. A was targetted but not achieved. I’ll schedule a meeting to demo the POC and go into details on the blocker for A.” After that, you have all the time in the world to explain in detail the blockers for the right audience and achieve a consensus.</p>
<p>Now, what is the thought process after the demo?</p>
<ol>
<li>Engineer — Makes sense.</li>
<li>PM — The POC is good for now. I guess we can drop A for now and proceed without it.</li>
<li>Manager — He has done an in-depth analysis and knows what he is doing.</li>
</ol>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Occam’s Razor can be employed in a wide variety of scenarios and these are just a few examples. Developers use this principle intuitively without knowing it. But knowing it and using it deliberately in various situations will greatly improve you as a software developer. If you can think of any other area of Software where this principle is being used feel free to leave your thoughts in comments.</p>
<hr>
<p>If you liked this article, feel free to reach out to me at <a target="_blank" href="https://kaizencoder.com/contact">https://kaizencoder.com/contact</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Why learn-by dates make you fail when you’re learning to code ]]>
                </title>
                <description>
                    <![CDATA[ This blog is for all those who have set deadlines for their learning goals and then been discouraged when it took a great deal more time than anticipated. When we are inspired to set goals, what inspires us are the outcomes not the process. We are ne... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/why-learn-by-dates-make-you-fail-when-youre-learning-to-code-f1ac2bc41ea5/</link>
                <guid isPermaLink="false">66d461e33dce891ac3a96854</guid>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Mindset ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Zubin Pratap ]]>
                </dc:creator>
                <pubDate>Thu, 28 Mar 2019 17:13:39 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*r9zX6hqDel_pLmf7ZEI8FQ.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><em>This blog is for all those who have set deadlines for their learning goals and then been discouraged when it took a great deal more time than anticipated.</em></p>
<p>When we are inspired to set goals, what inspires us are the outcomes not the process. We are never eager to do 50 crunches at the gym — we are eager to walk around with flat abs.</p>
<p>Our wonderful human imagination makes us fall in love with the destination and overlook the path.</p>
<p>This is a good thing. Without this, none of us would start. But the flip side is that because of this most of us quit, or lose momentum. When the reality of the path to our dream is experienced, day in and day out, it’s very easy to slow down and eventually stop. Maybe we don’t want the dream after all. Or, more specifically, we want the result, not the work.</p>
<p>Right?</p>
<p>Sadly, this natural human habit is what stands in the way of many us learning new skills, especially complex skills like coding. Setting <em>outcome</em> goals is what drives people to action, but without <em>process</em> goals, the outcome is seriously at risk.</p>
<p>This is how I set my coding goals the first time I tried to learn to code: <em>I am going to learn HTML this month. Then next month I’m going to do JavaScript.</em></p>
<p>Sound familiar? Exciting outcome, no process.</p>
<p>That is actually a risky, ineffective way to set your coding goals. Here’s why.</p>
<p>In your head that target date seems reasonable, achievable, and importantly, encouraging. It’s motivating to think you will have results that soon. The problem is that a deadline-based goal like that is arbitrary. Learning a new skill takes a certain amount of time. Some are faster than others, but everyone has to put a minimum amount of time that <em>they</em> need to acquire that skill. The skill doesn’t care which month you want to finish by. It only demands that you put in enough time to learn it.</p>
<p>Therefore, setting a deadline-based outcome goal is incomplete — it ignores some vital math about learning.</p>
<p>For example, if you want to learn HTML and CSS in 30 days (<strong>outcome</strong>), it is absolutely achievable. But**,** what does that actually mean? How many hours, on average, does a person need to learn HTML and CSS? And then, how many hours a day or week (<strong>process</strong>) do you need to achieve that goal? If it takes 8 hours a day, 5 days a week, are you in a position to do that? Which metric really decides success: the outcome or the process? (hint: it’s not outcome).</p>
<p>Simply put: knowing how much time it takes to achieve a goal and how much time you can commit to regularly will decide when you you can expect to achieve that goal by.</p>
<p>It’s like a time and distance navigation problem — if you need to travel 100 kilometres, you cannot know when you will get to your destination unless you know how fast you’re traveling. No matter how sincere you are, you cannot do 100 kilometres in 1 hour if you’re walking. Setting that sort of goal is absurd and will result in frustration if you fooled yourself into thinking it’s possible.</p>
<p>So when you set your coding goals, work out the distance between where you are and the skill level you want, how much time will it take in total, and most importantly how much time you can guarantee you will devote to it every week. Divide total time by weekly time and you get the number of weeks it’s going to take you. That is your deadline.</p>
<p>Most learning resources online make this easy. <a target="_blank" href="http://freecodecamp.org/">freeCodeCamp.org</a> makes it super easy — the curriculum tells you clearly how much time a certification takes! Sites like <a target="_blank" href="https://www.udacity.com/">Udacity</a> and <a target="_blank" href="https://www.coursera.org/">Coursera</a> also tell you this, but it’s buried under other course data. Typically they tell you you can complete a course in X weeks if you spend a minimum of Y hours a week.</p>
<p>Even on <a target="_blank" href="https://www.udemy.com/how-not-to-quit-coding/">Udemy</a> this can be calculated. For example, <a target="_blank" href="https://www.udemy.com/how-not-to-quit-coding/">my course</a> is about 3 hours long. You can finish it in a day, if you spend 4 hours (including thinking and assignments). If you spend an hour a day you cannot finish it in less than 3 days. For more technical courses, where you learn by coding along, I would multiply the hours of video by at least 3 to get an estimate of time required to complete the course.</p>
<p>Put this way, it’s pretty clear that deadline-based outcome goals for learning are arbitrary if you don’t focus on the process goals of daily or weekly commitment. “When by” is useless without knowing “how much every day”.</p>
<p>And this one shift in approach will greatly improve your odds of success. This way you will know if something is going to take you 6 or 12 or 18 months. No nasty surprises — and you can <a target="_blank" href="https://www.udemy.com/how-not-to-quit-coding/">build a solid plan</a> around that, and prepare yourself for the journey.</p>
<p>Ultimately, every place is walking distance if you have the time. It’s no different for learning new skills. It takes the time it takes. You just got to be ready to show up and do the work until the math gets you to your destination.</p>
<p>If you would like to learn more about my journey into code, check out <a target="_blank" href="http://podcast.freecodecamp.org/53-zubin-pratap-from-lawyer-to-developer">episode 53</a> of the <a target="_blank" href="http://podcast.freecodecamp.org/">freeCodeCamp podcast</a>, where Quincy (founder of freeCodeCamp) and I share our experiences as career changers that may help you on your journey. You can also access the podcast on <a target="_blank" href="https://itunes.apple.com/au/podcast/ep-53-zubin-pratap-from-lawyer-to-developer/id1313660749?i=1000431046274&amp;mt=2">iTunes</a>, <a target="_blank" href="https://www.stitcher.com/podcast/freecodecamp-podcast/e/59201373?autoplay=true">Stitcher</a>, and <a target="_blank" href="https://open.spotify.com/episode/4lG0RGpzriG5vXRMgza05C">Spotify</a>.</p>
<p>I will also hold a few AMAs and webinars in the coming months. If this is of interest to you please let me know by going <a target="_blank" href="http://www.matchfitmastery.com/">here</a>. And of course, you can also Tweet me at <a target="_blank" href="https://twitter.com/zubinpratap">@ZubinPratap</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How best to use small pockets of idle time ]]>
                </title>
                <description>
                    <![CDATA[ Let’s say you finish a task before the time is up. You have another 5 to 15 minutes more. What do you do with this time? If you get distracted during work, you may also end up with this 5 to 15 minutes left. What do you do with it? ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-best-to-use-small-pockets-of-idle-time-61a0eb050df4/</link>
                <guid isPermaLink="false">66c4c72f99f22436b71945ed</guid>
                
                    <category>
                        <![CDATA[ learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Mindset ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Zell Liew ]]>
                </dc:creator>
                <pubDate>Mon, 28 Jan 2019 23:14:49 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*DdQKUcQ90SC_9g6ERsVVQg.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Let’s say you finish a task before the time is up. You have another 5 to 15 minutes more. What do you do with this time?</p>
<p>If you get distracted during work, you may also end up with this 5 to 15 minutes left. What do you do with it?</p>
<p>If you find yourself in a distracting situation, like having to take care of a baby who cries every now and then. You probably have 5 to 15 minutes pockets of time very often. How do you use this time?</p>
<p>I think you can use it in four possible ways:</p>
<ol>
<li>Use it do errands</li>
<li>Use it to learn</li>
<li>Start the next thing</li>
<li>Use it to chill</li>
</ol>
<h3 id="heading-use-it-to-do-errands">Use it to do errands</h3>
<p>The most obvious thing to do is knock something off your todo-list. Ideally, you want something that’s urgent or important. And it doesn’t take up a lot of time.</p>
<p>Here’s a possible list of things I cooked up with:</p>
<ol>
<li>Reply to emails</li>
<li>Make a phone call</li>
<li>Chat with someone</li>
<li>Eat something</li>
<li>Do grocery shopping online</li>
<li>Do 1 push up</li>
</ol>
<p>If you do this, make sure you keep a running list of small errands. Trying to search for an errand to do, deciding to do it, and doing it often takes more than 5 to 15 minutes.</p>
<h3 id="heading-use-it-to-learn">Use it to learn</h3>
<p>I used to hate learning in distracting environments. I can’t even finish a page in a book or watch a 2-minute video before someone interrupts me!</p>
<p>When I get interrupted, rage builds up inside ?.</p>
<p>I realized this rage builds up because I wanted things to be perfect. I want to be in my room. I want to have an undisturbed block of time. I want to make sure my back isn’t hurting, etc.</p>
<p>But we don’t need situations to be perfect to learn. We can tell ourselves this:</p>
<ol>
<li>If we read 1 sentence, that’s enough</li>
<li>If we watch 5 seconds of video, that’s enough</li>
</ol>
<p>If we get distracted, we’ll just resume from where we left off.</p>
<h3 id="heading-start-the-next-thing">Start the next thing</h3>
<p>If you have 5 to 15 minutes of undisturbed time left over, the best thing you can do is start the doing the next important thing.</p>
<p>Stop when your 5 to 15 minutes is up. Yes, even if you’re only halfway into the next thing.</p>
<p>When there’s unfinished business, we want to finish things up. And our brains work overtime without us knowing.</p>
<blockquote>
<p><em>The best way is always to stop when you are going good and when you know what will happen next. If you do that every day… you will never be stuck.</em>  </p>
<p><em>Always stop while you are going good and don’t think about it or worry about it until you start to write the next day.</em>  </p>
<p><em>That way your subconscious will work on it all the time. But if you think about it consciously or worry about it you will kill it and your brain will be tired before you start. — Ernest Hemingway</em></p>
</blockquote>
<h3 id="heading-use-it-to-chill">Use it to chill</h3>
<p>It feels like taboo to waste time and do nothing. After all, we have too much to do, why are we wasting time here?</p>
<p>But it might just be the thing we need.</p>
<ol>
<li>We need boredom to be creative.</li>
<li>We need to relax to perform.</li>
</ol>
<p>And sometimes, 5 minutes of rest can get you enough clarity to do the most important work for the rest of the day.</p>
<h3 id="heading-wrapping-up">Wrapping up</h3>
<p>Remember, you’re free to use this 5 to 15 minutes any way you want. It’s not a stupid block of time where you can do nothing with it. It’s a gift. Do what you want with it.</p>
<p>One simple reframe can change how you spend your time. It can change how your day turns out. Compounded over time, it changes your life.</p>
<p>What will you do with the next 5 to 15 minutes?</p>
<p>Let me know in the comments below :)</p>
<p>Thanks for reading. Did this article help you out? If it did, I hope you consider <a target="_blank" href="https://twitter.com/share?text=Using%20small%20pockets%20of%20idle%20time%20by%20@zellwk%20?%20&amp;url=https://zellwk.com/blog/idle-time/">sharing it</a>. You might help someone else out. Thanks so much!</p>
<p>This article was originally posted at <a target="_blank" href="https://zellwk.com/blog/idle-time/">my blog.</a><br>Sign up for my <a target="_blank" href="https://zellwk.com/">newsletter</a> if you want more articles to help you become a better frontend developer.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
