<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Ammar Najjar Blog</title>
        <link>https://ammar-najjar.com/books</link>
        <description>Ammar Najjar Blog</description>
        <lastBuildDate>Tue, 24 Jun 2025 15:55:50 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Atomic Habits]]></title>
            <link>https://ammar-najjar.com/books/atomic-habits</link>
            <guid>https://ammar-najjar.com/books/atomic-habits</guid>
            <pubDate>Tue, 24 Jun 2025 15:55:50 GMT</pubDate>
            <description><![CDATA[Book review of Atomic Habits by James Clear — the Four Laws of Behavior Change, identity-based habits, and why building systems beats chasing goals for lasting improvement.]]></description>
            <content:encoded><![CDATA[<img src="https://ammar-najjar.com/assets/images/cover-7b11dde89792b75b12193d6b2e5346b2.jpg" alt="Atomic Habits cover" style="float:right;margin:0 0 1rem 1.5rem;width:120px">
<p>In his book "Atomic Habits", James Clear outlines the principles of habit formation and behavior change. The author shares his personal journey of recovery from a severe injury, which led him to understand that significant progress stems from a series of small, consistent actions, rather than singular transformative events. Clear introduces the "Four Laws of Behavior Change": making habits obvious, attractive, easy, and satisfying. He emphasizes the importance of systems over goals, highlighting how environmental design, social influence, and the immediate gratification of rewards play crucial roles in establishing and maintaining habits, ultimately arguing that true identity change is the North Star of habit transformation.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="summery">Summery:<a href="https://ammar-najjar.com/books/atomic-habits#summery" class="hash-link" aria-label="Direct link to Summery:" title="Direct link to Summery:" translate="no">​</a></h3>
<p>The central theme revolves around the idea that "success is the product of daily habits—not once-in-a-lifetime transformations". It emphasizes the compounding effects of small, consistent improvements and the importance of systemic thinking over goal-setting.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="i-the-power-of-atomic-habits-compounding-small-improvements">I. The Power of "Atomic Habits": Compounding Small Improvements<a href="https://ammar-najjar.com/books/atomic-habits#i-the-power-of-atomic-habits-compounding-small-improvements" class="hash-link" aria-label="Direct link to I. The Power of &quot;Atomic Habits&quot;: Compounding Small Improvements" title="Direct link to I. The Power of &quot;Atomic Habits&quot;: Compounding Small Improvements" translate="no">​</a></h3>
<p>The fundamental premise of "Atomic Habits" is that minuscule, consistent changes, referred to as "atomic habits," accumulate over time to produce significant, even "remarkable," results.</p>
<ul>
<li class=""><strong>Compound Interest of Self-Improvement</strong>: Habits are likened to "the compound interest of self-improvement". Just as money multiplies with compound interest, "the effects of your habits multiply as you repeat them".</li>
<li class=""><strong>The 1% Rule</strong>: Getting "just 1 percent better each day, you’ll end up with results that are nearly 37 times better after one year". Conversely, being 1% worse leads to a near-zero outcome (0.99^365 = 0.03). This small difference "can make over time is astounding".</li>
</ul>
<p><img decoding="async" loading="lazy" alt="1%" src="https://ammar-najjar.com/assets/images/1percent-89f6bbc8bf354d7801174418ba5a5d2f.jpg" width="1872" height="1504" class="img_ev3q"></p>
<ul>
<li class=""><strong>Delayed Outcomes</strong>: The impact of small habits is often not immediately apparent. "It is only when looking back two, five, or perhaps ten years later that the value of good habits and the cost of bad ones becomes strikingly apparent". This requires patience, as "Change can take years—before it happens all at once," echoing the stonecutter analogy: "Yet at the hundred and first blow it will split in two, and I know it was not that last blow that did it—but all that had gone before". This period of unnoticeable progress before breakthroughs is called the "Plateau of Latent Potential". People often stop making changes because they don't see immediate tangible results, not realizing their work is being stored.</li>
<li class=""><strong>Trajectory Over Current Results</strong>: What truly matters is the "current trajectory" set by your habits, rather than "current results". Your "outcomes are a lagging measure of your habits". For example, your net worth is a lagging measure of your financial habits, and your weight is a lagging measure of your eating habits. Tiny daily choices "will compound ten or twenty years down the line". Good habits make time your ally, while bad habits make time your enemy.</li>
<li class=""><strong>Double-Edged Sword</strong>: Habits are a "double-edged sword". They can either compound for you or against you. For instance, productivity and knowledge compound positively, as does being nicer in interactions leading to stronger relationships. Conversely, stress and negative thoughts can compound into serious issues.</li>
<li class=""><strong>Atomic Habit Defined</strong>: An "atomic habit" refers to a tiny change, a marginal gain, or a 1 percent improvement, and they are "little habits that are part of a larger system". Just as atoms are the building blocks of molecules, "atomic habits are the building blocks of remarkable results". They are small and easy to do, yet also "the source of incredible power".</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ii-systems-over-goals-the-foundation-for-lasting-change">II. Systems Over Goals: The Foundation for Lasting Change<a href="https://ammar-najjar.com/books/atomic-habits#ii-systems-over-goals-the-foundation-for-lasting-change" class="hash-link" aria-label="Direct link to II. Systems Over Goals: The Foundation for Lasting Change" title="Direct link to II. Systems Over Goals: The Foundation for Lasting Change" translate="no">​</a></h2>
<p>A pivotal concept introduced is the distinction between goals and systems, advocating for a focus on the latter for sustained progress.</p>
<ul>
<li class=""><strong>Goals vs. Systems</strong>: "Goals are about the results you want to achieve. Systems are about the processes that lead to those results". The author argues that focusing solely on goals often leads to failure because the underlying "system" for change is flawed.</li>
<li class=""><strong>Falling to the Level of Your Systems</strong>: "You do not rise to the level of your goals. You fall to the level of your systems". This highlights that consistent behavior is a direct output of the established processes, not merely aspirations.</li>
<li class=""><strong>Goal-less Thinking</strong>: True long-term thinking is described as "goal-less thinking". It's about <strong>"the cycle of endless refinement and continuous improvement,"</strong> and <strong>"your commitment to the process that will determine your progress"</strong>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="iii-identity-based-habits-changing-who-you-are">III. Identity-Based Habits: Changing Who You Are<a href="https://ammar-najjar.com/books/atomic-habits#iii-identity-based-habits-changing-who-you-are" class="hash-link" aria-label="Direct link to III. Identity-Based Habits: Changing Who You Are" title="Direct link to III. Identity-Based Habits: Changing Who You Are" translate="no">​</a></h2>
<p>Beyond merely changing behaviors, "Atomic Habits" emphasizes that <strong>true, lasting habit change stems from a shift in identity</strong>.</p>
<ul>
<li class=""><strong>Behavior Change as Identity Change</strong>: "True behavior change is identity change". Instead of focusing on what you want to achieve (outcome-based goals) or what you need to do (process-based habits), the most profound change comes from focusing on <strong>"who you wish to become"</strong>.</li>
<li class=""><strong>"Repeated Beingness"</strong>: Your identity is literally your "repeated beingness," formed by the actions you consistently take. Every action is a <strong>"vote for the type of person you wish to become"</strong>.</li>
<li class=""><strong>Proof Through Small Wins</strong>: To build a new identity, one must "Prove it to yourself with small wins". For instance, "Each time you write a page, you are a writer. Each time you practice the violin, you are a musician".</li>
<li class=""><strong>Pride and Motivation</strong>: "The more pride you have in a particular aspect of your identity, the more motivated you will be to maintain the habits associated with it". The example of Clark stopping nail-biting after taking pride in his manicured nails illustrates this point.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="iv-the-four-laws-of-behavior-change">IV. The Four Laws of Behavior Change<a href="https://ammar-najjar.com/books/atomic-habits#iv-the-four-laws-of-behavior-change" class="hash-link" aria-label="Direct link to IV. The Four Laws of Behavior Change" title="Direct link to IV. The Four Laws of Behavior Change" translate="no">​</a></h2>
<p>The author presents <strong>four fundamental laws for building good habits and breaking bad ones</strong>. These laws offer a framework for designing an environment conducive to desired behaviors.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-make-it-obvious-1st-law">1. Make it Obvious (1st Law):<a href="https://ammar-najjar.com/books/atomic-habits#1-make-it-obvious-1st-law" class="hash-link" aria-label="Direct link to 1. Make it Obvious (1st Law):" title="Direct link to 1. Make it Obvious (1st Law):" translate="no">​</a></h3>
<ul>
<li class=""><strong>Awareness is Key</strong>: Habits are often "nonconscious and automatic". To improve them, you must first become aware of them. "Until you make the unconscious conscious, it will direct your life and you will call it fate".</li>
<li class=""><strong>The Habits Scorecard</strong>: A practical tool to identify and categorize existing habits (+ for good, – for bad, = for neutral) by listing daily behaviors and assessing their long-term impact. The goal is to <strong>"simply notice what is actually going on" without judgment</strong>.</li>
<li class=""><strong>Implementation Intentions</strong>: Clearly defining <em>when</em> and <em>where</em> a habit will occur: <strong>"I will [BEHAVIOR] at [TIME] in [LOCATION]"</strong>. This specificity helps in saying "no to things that derail progress".</li>
<li class=""><strong>Habit Stacking</strong>: Linking a new habit to an existing one: <strong>"After [CURRENT HABIT], I will [NEW HABIT]"</strong>. This leverages established routines as cues.</li>
<li class=""><strong>Environmental Design</strong>: Make cues for good habits visible and accessible (e.g., placing workout clothes out). Conversely, make cues for bad habits invisible (e.g., removing junk food from sight). "We like to think that we are in control... but the truth... is that many of the actions we take each day are shaped... by the most obvious option".</li>
<li class=""><strong>Priming the Environment</strong>: "Resetting the room" (e.g., cleaning up after an activity) prepares the environment for the next desired action, making it easy to start.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-make-it-attractive-2nd-law">2. Make it Attractive (2nd Law):<a href="https://ammar-najjar.com/books/atomic-habits#2-make-it-attractive-2nd-law" class="hash-link" aria-label="Direct link to 2. Make it Attractive (2nd Law):" title="Direct link to 2. Make it Attractive (2nd Law):" translate="no">​</a></h3>
<ul>
<li class=""><strong>Dopamine-Driven Feedback Loop</strong>: Habits are deeply tied to dopamine, a neurotransmitter associated with craving and desire. "When dopamine rises, so does our motivation to act". It's the <strong>"anticipation of a reward—not the fulfillment of it—that gets us to take action"</strong>.</li>
<li class=""><strong>Supernormal Stimuli</strong>: Humans are naturally drawn to "heightened versions of reality" (like hyper-palatable processed foods) that amplify desire.</li>
<li class=""><strong>Temptation Bundling</strong>: Pair an action you <em>need</em> to do with an action you <em>want</em> to do. Formula: <strong>"After [HABIT I NEED], I will [HABIT I WANT]"</strong> (e.g., Ronan Byrne connecting Netflix to his stationary bike).</li>
<li class=""><strong>Social Influence</strong>: We are heavily influenced by the habits of those around us, especially "the close, the many, and the powerful". "One of the most effective things you can do to build better habits is to join a culture where your desired behavior is the normal behavior".</li>
<li class=""><strong>Reframing</strong>: Change your mindset about habits by highlighting their benefits or reframing negative associations. "You don’t 'have' to. You 'get' to" (e.g., "I get to run in the morning" instead of "I have to run"). This relates to the inverse: "make it unattractive" (e.g., Allen Carr's reframing of smoking).</li>
<li class=""><strong>Underlying Motives</strong>: Cravings are specific manifestations of deeper, underlying human motives (e.g., to conserve energy, obtain food, connect with others, reduce uncertainty, gain status). Understanding these deeper desires can help in making habits attractive.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-make-it-easy-3rd-law">3. Make it Easy (3rd Law):<a href="https://ammar-najjar.com/books/atomic-habits#3-make-it-easy-3rd-law" class="hash-link" aria-label="Direct link to 3. Make it Easy (3rd Law):" title="Direct link to 3. Make it Easy (3rd Law):" translate="no">​</a></h3>
<ul>
<li class=""><strong>Reduce Friction</strong>: Make good habits effortless and bad habits difficult. "The greater the friction, the less likely the habit".</li>
<li class=""><strong>The Law of Least Effort</strong>: Human nature seeks the path of least resistance. Design your environment to make desired actions the easiest option.</li>
<li class=""><strong>"Master the Habit of Showing Up"</strong>: Don't focus on perfecting a habit from the start; instead, "do the easy thing on a more consistent basis". "A habit must be established before it can be improved".</li>
<li class=""><strong>The Two-Minute Rule</strong>: <strong>"When you start a new habit, it should take less than two minutes to do"</strong>. This minimizes the initial barrier to action, ensuring you "master the habit of showing up".</li>
<li class=""><strong>Commitment Devices</strong>: Make choices in the present that control your future actions, binding you to good habits and restricting bad ones (e.g., Victor Hugo locking away his clothes to write, Nir Eyal's internet router timer). These devices "enable you to take advantage of good intentions before you can fall victim to temptation".</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-make-it-satisfying-4th-law">4. Make it Satisfying (4th Law):<a href="https://ammar-najjar.com/books/atomic-habits#4-make-it-satisfying-4th-law" class="hash-link" aria-label="Direct link to 4. Make it Satisfying (4th Law):" title="Direct link to 4. Make it Satisfying (4th Law):" translate="no">​</a></h3>
<ul>
<li class=""><strong>Immediate Gratification</strong>: The brain prioritizes immediate pleasure. Behaviors followed by "feelings of pleasure" are signals to the brain to "Do this again, next time".</li>
<li class=""><strong>The Cardinal Rule of Behavior Change</strong>: <strong>"What is rewarded is repeated. What is punished is avoided"</strong>.</li>
<li class=""><strong>Instant vs. Delayed Rewards</strong>: Many good habits have delayed rewards, while bad habits often provide instant gratification. This is known as "time inconsistency" or "hyperbolic discounting". "The more immediate pleasure you get from an action, the more strongly you should question whether it aligns with your long-term goals".</li>
<li class=""><strong>Habit Tracking</strong>: A simple way to make the progress of good habits visible and satisfying. Tools like the "Paper Clip Strategy" or crossing off a calendar day provide immediate visual proof of progress, creating a "habit streak" that motivates continued action.</li>
<li class=""><strong>Never Miss Twice</strong>: The critical rule for maintaining streaks: <strong>"If I miss one day, I try to get back into it as quickly as possible. Missing once is an accident. Missing twice is the start of a new habit"</strong>.</li>
<li class=""><strong>Habit Contracts</strong>: Formal agreements with accountability partners that outline a commitment to a habit and specify punishments for non-adherence, leveraging the desire for social approval and avoiding negative consequences.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v-additional-insights">V. Additional Insights<a href="https://ammar-najjar.com/books/atomic-habits#v-additional-insights" class="hash-link" aria-label="Direct link to V. Additional Insights" title="Direct link to V. Additional Insights" translate="no">​</a></h2>
<ul>
<li class=""><strong>Genetic Predisposition</strong>: Genes influence nearly "every behavior". While they don't dictate destiny, they "predispose you to a unique cluster of genetic traits" that can make certain habits naturally easier or harder. The goal is to "identify the opportunities and habits that are right for you" based on your personality.</li>
<li class=""><strong>The Plateau of Latent Potential</strong>: There's often a period of unnoticeable progress before breakthroughs occur. Patience is crucial to overcome this "Valley of Disappointment".</li>
</ul>
<p><img decoding="async" loading="lazy" alt="valley of disappointment" src="https://ammar-najjar.com/assets/images/valley-of-disappointment-39e0f56e083bd1235bb115910f645a15.jpg" width="1296" height="880" class="img_ev3q"></p>
<ul>
<li class=""><strong>The Role of Emotion and Desire</strong>: "Desire is the difference between where you are now and where you want to be in the future". Conversely, "Happiness is simply the absence of desire... It arrives when you have no urge to feel differently". This suggests that observing actions without craving a change in state leads to contentment.</li>
<li class=""><strong>Brain Plasticity</strong>: Repetition of habits leads to "clear physical changes in the brain," akin to muscles adapting to training. <strong>"Neurons that fire together wire together"</strong>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://ammar-najjar.com/books/atomic-habits#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h3>
<ul>
<li class="">
<p>➕ Small Habits Compound<br>
<!-- -->A 1% improvement every day leads to 37x improvement in a year.
Bad habits compound negatively in the same way.</p>
</li>
<li class="">
<p>🛠️ Systems vs. Goals<br>
<!-- -->Don’t just set goals; build systems that get you there.
Winners and losers often have the same goals. Systems make the difference.</p>
</li>
<li class="">
<p>🧩 Identity-Based Habits<br>
<!-- -->Focus on who you want to become, not just what you want to achieve.
“The goal is not to read a book, but to become a reader.”
Every action is a vote for the kind of person you want to be.</p>
</li>
<li class="">
<p>🔁 Cue → Craving → Response → Reward<br>
<!-- -->This habit loop explains how behaviors are formed and maintained.</p>
</li>
<li class="">
<p>⚖️ Good vs. Bad Habit Loop<br>
<!-- -->Good habits: usually feel bad now but benefit long-term.
Bad habits: feel good now but harm long-term.
Key insight: align short-term satisfaction with long-term benefits.</p>
</li>
<li class="">
<p>🎯 Motivation ≠ Discipline<br>
<!-- -->It’s not about willpower. It's about environment and design.
People with strong self-control are better at avoiding temptation, not resisting it.</p>
</li>
<li class="">
<p>📈 Mastery through Deliberate Practice<br>
<!-- -->Combine automaticity (via habits) with intentional improvement.
Use reflection and review to maintain self-awareness and avoid complacency.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="opinion">Opinion<a href="https://ammar-najjar.com/books/atomic-habits#opinion" class="hash-link" aria-label="Direct link to Opinion" title="Direct link to Opinion" translate="no">​</a></h3>
<p>In essence, "Atomic Habits" provides a systematic framework for understanding and manipulating the forces that drive human behavior, enabling individuals to cultivate habits that align with their long-term aspirations by making them obvious, attractive, easy, and satisfying.</p>
<p>I really liked this book, read it multiple times.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ammar-najjar.com/books/atomic-habits#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h3>
<ul>
<li class="">Success = Systems + Tiny Improvements ✅</li>
<li class="">I would recommend it to everyone 👍</li>
</ul>
<a href="https://ammar-najjar.com/books/atomic-habits#" class="go-to-top">Go to Top</a>]]></content:encoded>
            <category>Productivity</category>
            <category>Book Review</category>
        </item>
        <item>
            <title><![CDATA[The Pragmatic Programmer, 20th Anniversary Edition]]></title>
            <link>https://ammar-najjar.com/books/pragmatic-programmer</link>
            <guid>https://ammar-najjar.com/books/pragmatic-programmer</guid>
            <pubDate>Mon, 23 Sep 2019 22:44:23 GMT</pubDate>
            <description><![CDATA[Book review of The Pragmatic Programmer (20th Anniversary Edition) by David Thomas and Andrew Hunt — timeless advice on software craftsmanship, career growth, and writing maintainable code.]]></description>
            <content:encoded><![CDATA[<img src="https://ammar-najjar.com/assets/images/cover-be9ee13428aa474fdbe968ed551c43d0.jpg" alt="The Pragmatic Programmer cover" style="float:right;margin:0 0 1rem 1.5rem;width:120px">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="about-the-book">About the book:<a href="https://ammar-najjar.com/books/pragmatic-programmer#about-the-book" class="hash-link" aria-label="Direct link to About the book:" title="Direct link to About the book:" translate="no">​</a></h2>
<ul>
<li class="">Author: David Thomas, Andrew Hunt</li>
<li class="">ISBN: 978-0-1359-5705-9</li>
<li class="">Official website: <a href="https://pragprog.com/book/tpp20/the-pragmatic-programmer-20th-anniversary-edition" target="_blank" rel="noopener noreferrer" class="">https://pragprog.com/book/tpp20/the-pragmatic-programmer-20th-anniversary-edition</a></li>
</ul>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summery">Summery:<a href="https://ammar-najjar.com/books/pragmatic-programmer#summery" class="hash-link" aria-label="Direct link to Summery:" title="Direct link to Summery:" translate="no">​</a></h2>
<p>This book gives a definition for being a pragmatic programmer, then talks about some of the basic principles to being one. It take a theoretical approach, with examples in the form of stories, to explain a specific problem, and how should one approach it, and solve it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights:<a href="https://ammar-najjar.com/books/pragmatic-programmer#highlights" class="hash-link" aria-label="Direct link to Highlights:" title="Direct link to Highlights:" translate="no">​</a></h3>
<p>What I take with me from it:</p>
<ul>
<li class="">
<p>1-3: Software Entropy:</p>
<blockquote>
<p>Tip 3: Don't live with broken windows</p>
</blockquote>
</li>
<li class="">
<p>1-7: Communicate:</p>
<blockquote>
<p>Tip 13: Build documentation in, don't bolt it on</p>
</blockquote>
</li>
<li class="">
<p>6-36: Blackboards:</p>
<blockquote>
<p>Tip 60: Use blackboards to coordinate workflow</p>
</blockquote>
</li>
<li class="">
<p>7-42: Property-Based Testing:</p>
<blockquote>
<p>Tip 71: Use property-based tests to validate your assumptions</p>
</blockquote>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="opinion">Opinion<a href="https://ammar-najjar.com/books/pragmatic-programmer#opinion" class="hash-link" aria-label="Direct link to Opinion" title="Direct link to Opinion" translate="no">​</a></h2>
<p>For someone, like me, who already has experience with more than one programming language, prioritise testing, and familiar with the agile development methods, this book looks some kind of repetition or an emphasise for the information one already know.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion:<a href="https://ammar-najjar.com/books/pragmatic-programmer#conclusion" class="hash-link" aria-label="Direct link to Conclusion:" title="Direct link to Conclusion:" translate="no">​</a></h2>
<ul>
<li class="">I recommend it if you don't appreciate testing, or early refactoring, or want to know more about agile development methods, ways to better architect your projects. It is a good read after all.</li>
<li class="">Level: Beginner to Intermediate</li>
</ul>
<a href="https://ammar-najjar.com/books/pragmatic-programmer#" class="go-to-top">Go to Top</a>]]></content:encoded>
            <category>Book Review</category>
            <category>Software Engineering</category>
        </item>
        <item>
            <title><![CDATA[Book Review: Introduction to Python for Science and Engineering]]></title>
            <link>https://ammar-najjar.com/books/intro-python-science-and-engineering</link>
            <guid>https://ammar-najjar.com/books/intro-python-science-and-engineering</guid>
            <pubDate>Wed, 11 Sep 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Book review of Introduction to Python for Science and Engineering by David J. Pine — a concise, practical introduction to Python for scientists and engineers using NumPy, SciPy, and Matplotlib.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="about-the-book">About the book:<a href="https://ammar-najjar.com/books/intro-python-science-and-engineering#about-the-book" class="hash-link" aria-label="Direct link to About the book:" title="Direct link to About the book:" translate="no">​</a></h3>
<ul>
<li class="">Author: David J. Pine</li>
<li class="">ISBN: 978-1-138-58389-4 (Paperback)</li>
<li class="">ISBN: 978-1-138-58390-0 (Hardback)</li>
</ul>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="summery">Summery:<a href="https://ammar-najjar.com/books/intro-python-science-and-engineering#summery" class="hash-link" aria-label="Direct link to Summery:" title="Direct link to Summery:" translate="no">​</a></h3>
<p>This book gives an introduction to python as a language, then dives into some engineering problems and how they can be solved using python:</p>
<ul>
<li class="">Plotting (matplotlib)</li>
<li class="">Curve Fitting (linear regression and nonlinear least squares)</li>
<li class="">Numerical Routines (SciPy and Numpy)</li>
<li class="">Data manipulation (Pandas)</li>
<li class="">Animation (matplotlib)</li>
<li class="">Intro to Python GUI (PyQt)</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="opinion">Opinion<a href="https://ammar-najjar.com/books/intro-python-science-and-engineering#opinion" class="hash-link" aria-label="Direct link to Opinion" title="Direct link to Opinion" translate="no">​</a></h3>
<p>I skipped the first few chapters and read only the chapters which introduce numpy, matplotlib, scipy and pandas.
I found it nice to read, and had a jupyter notebook open on the side, to try some examples. The examples were clear and easy to understand. I enjoyed reading it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion:<a href="https://ammar-najjar.com/books/intro-python-science-and-engineering#conclusion" class="hash-link" aria-label="Direct link to Conclusion:" title="Direct link to Conclusion:" translate="no">​</a></h3>
<ul>
<li class="">Level: Intermediate</li>
<li class="">I recommend it for students of information engineering, and who finished their degree.</li>
</ul>
<a href="https://ammar-najjar.com/books/intro-python-science-and-engineering#" class="go-to-top">Go to Top</a>]]></content:encoded>
            <category>Book Review</category>
            <category>Software Engineering</category>
        </item>
        <item>
            <title><![CDATA[Book Review: Python Descriptors]]></title>
            <link>https://ammar-najjar.com/books/python-descriptors</link>
            <guid>https://ammar-najjar.com/books/python-descriptors</guid>
            <pubDate>Tue, 03 Sep 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Book review of Python Descriptors by Jacob Zimmerman — how Python's descriptor protocol works, when to use it, and practical examples for building reusable attribute logic.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="about-the-book">About the book:<a href="https://ammar-najjar.com/books/python-descriptors#about-the-book" class="hash-link" aria-label="Direct link to About the book:" title="Direct link to About the book:" translate="no">​</a></h3>
<ul>
<li class="">Author: Jacob Zimmerman</li>
<li class="">ISBN (pbk): 978-1-4842-3726-7</li>
<li class="">ISBN (electronic): 978-1-4842-3727-4</li>
<li class="">URL: <a href="https://link.springer.com/book/10.1007%2F978-1-4842-3727-4" target="_blank" rel="noopener noreferrer" class="">https://link.springer.com/book/10.1007%2F978-1-4842-3727-4</a></li>
</ul>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="summery">Summery:<a href="https://ammar-najjar.com/books/python-descriptors#summery" class="hash-link" aria-label="Direct link to Summery:" title="Direct link to Summery:" translate="no">​</a></h3>
<p>This book has two parts:</p>
<ul>
<li class="">
<p>First on explaining what descriptors are, data vs non-data ones, and basic implementation of the built in <code>classmethod</code>, <code>staticmethod</code> and <code>property</code> descriptors.</p>
</li>
<li class="">
<p>Second on showing how to implement your custom descriptors.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights:<a href="https://ammar-najjar.com/books/python-descriptors#highlights" class="hash-link" aria-label="Direct link to Highlights:" title="Direct link to Highlights:" translate="no">​</a></h3>
<p>Chapter 4: Descriptors in the Standard Library</p>
<ul>
<li class="">The property Class</li>
</ul>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">property</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fget</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fset</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fdel</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fget </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> fget</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fset </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> fset</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fdel </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> fdel</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__get__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> instance</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> owner</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> instance </span><span class="token keyword" style="color:#00009f">is</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> self</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">elif</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fget </span><span class="token keyword" style="color:#00009f">is</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">raise</span><span class="token plain"> AttributeError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"unreadable attribute"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">else</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fget</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">instance</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__set__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> instance</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fset </span><span class="token keyword" style="color:#00009f">is</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">raise</span><span class="token plain"> AttributeError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"can't set attribute"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">else</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fset</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">instance</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__delete__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> instance</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fdel </span><span class="token keyword" style="color:#00009f">is</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">raise</span><span class="token plain"> AttributeError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"can't delete attribute"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">else</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fdel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">instance</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fget</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token builtin">type</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fget</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fset</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fdel</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">setter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fset</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token builtin">type</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fget</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fset</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fdel</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">deleter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fdel</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token builtin">type</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fget</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fset</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fdel</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<ul>
<li class="">The classmethod descriptor</li>
</ul>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">classmethod</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> func</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">func </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> func</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__get__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> instance</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> owner</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> functools</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">partial</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">func</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> owner</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<ul>
<li class="">The staticmethod descriptor</li>
</ul>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">staticmethod</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> func</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">func </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> func</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__get__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> instance</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> owner</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">func</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="opinion">Opinion<a href="https://ammar-najjar.com/books/python-descriptors#opinion" class="hash-link" aria-label="Direct link to Opinion" title="Direct link to Opinion" translate="no">​</a></h3>
<p>I enjoyed reading this book, especially the first part, it shows a view port of a developer who is not involved in the core development of python itself. He sometimes also says, ask a core developer if you wanna get the exact reasoning behind it 😄</p>
<p>You don't need an editor open deside you while reading, so I pretty much read it on the bus.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion:<a href="https://ammar-najjar.com/books/python-descriptors#conclusion" class="hash-link" aria-label="Direct link to Conclusion:" title="Direct link to Conclusion:" translate="no">​</a></h3>
<ul>
<li class="">Level: Advanced</li>
<li class="">I recommend this book for python developer who like to know what is going under the hood, twinkle with the interiors functionality of python, and curious how every thing works.</li>
</ul>
<a href="https://ammar-najjar.com/books/python-descriptors#" class="go-to-top">Go to Top</a>]]></content:encoded>
            <category>Book Review</category>
            <category>Software Engineering</category>
        </item>
        <item>
            <title><![CDATA[Book Review: Python Tricks, The Book]]></title>
            <link>https://ammar-najjar.com/books/python-tricks</link>
            <guid>https://ammar-najjar.com/books/python-tricks</guid>
            <pubDate>Sun, 01 Sep 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Book review of Python Tricks by Dan Bader — a practical guide to writing more Pythonic code with clean patterns, idiomatic techniques, and hidden language features.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="about-the-book">About the book:<a href="https://ammar-najjar.com/books/python-tricks#about-the-book" class="hash-link" aria-label="Direct link to About the book:" title="Direct link to About the book:" translate="no">​</a></h3>
<ul>
<li class="">Author: Dan Bader</li>
<li class="">ISBN: 9781775093305 (paperback)</li>
<li class="">ISBN: 9781775093312 (electronic)</li>
</ul>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="summery">Summery:<a href="https://ammar-najjar.com/books/python-tricks#summery" class="hash-link" aria-label="Direct link to Summery:" title="Direct link to Summery:" translate="no">​</a></h3>
<p>This book gives some basic tips for python beginners, so like a flower from each field. Actually not each field, but the very basic very well known fields: assert, dunders, args &amp; kwargs, data structures, loops.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights:<a href="https://ammar-najjar.com/books/python-tricks#highlights" class="hash-link" aria-label="Direct link to Highlights:" title="Direct link to Highlights:" translate="no">​</a></h3>
<blockquote>
<p>7.4 The Craziest Dict Expression in the West</p>
</blockquote>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&gt;&gt;</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'yes'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'no'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1.0</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'maybe'</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'maybe'</span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="opinion">Opinion<a href="https://ammar-najjar.com/books/python-tricks#opinion" class="hash-link" aria-label="Direct link to Opinion" title="Direct link to Opinion" translate="no">​</a></h3>
<p>I found myself just flipping through pages rather than reading the book, all seemed very basic and shallow. Don't get me wrong, it is well organizsed and formatted, but targeted for people who just started doing python, maybe followed the first tutorial, or had their first week playing with the language.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion:<a href="https://ammar-najjar.com/books/python-tricks#conclusion" class="hash-link" aria-label="Direct link to Conclusion:" title="Direct link to Conclusion:" translate="no">​</a></h3>
<ul>
<li class="">Level: Entry</li>
<li class="">I would never recommend it for anyone who had even one month doing python.</li>
</ul>
<a href="https://ammar-najjar.com/books/python-tricks#" class="go-to-top">Go to Top</a>]]></content:encoded>
            <category>Book Review</category>
            <category>Software Engineering</category>
        </item>
    </channel>
</rss>