<?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[ books - 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[ books - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 19:41:40 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/books/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ What I Learned from The Pragmatic Programmer and The Clean Coder ]]>
                </title>
                <description>
                    <![CDATA[ By Ramón Morcillo I recently finished reading The Pragmatic Programmer 20th Anniversary Edition (2019) and The Clean Coder (2011). You'll find these books on almost every “top 10 Software Development books” list out there.  My goal was to learn, impr... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/lessons-learned-from-the-pragmatic-programmer-and-the-clean-coder/</link>
                <guid isPermaLink="false">66d460c9d14641365a050967</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ clean code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 24 Nov 2021 16:38:09 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/11/pragmatic_programmer_and_clean_coder_book_covers-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Ramón Morcillo</p>
<p>I recently finished reading <em>The Pragmatic Programmer 20th Anniversary Edition</em> (2019) and <em>The Clean Coder</em> (2011). You'll find these books on almost every “top 10 Software Development books” list out there. </p>
<p>My goal was to learn, improve, and get the kind of knowledge that a teacher from mine used to say “<em>can’t be obtained from just reading articles</em>.”</p>
<p>When you are developing software, you may get stuck at a point where YouTube videos and StackOverflow answers don’t help. You end up reaching for the official docs, or the source code of that technology to find the answer. </p>
<p>The same thing happens when you want to understand the subject really deeply. <strong>Articles can sometimes fall short, and reading well-known books is the often best approach.</strong></p>
<p>These books focus not only on how to write code, but on teaching you best practices for developing software and even useful life lessons. I’ll share some lessons I learned from them in this article. </p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li>How to Take Responsibility</li>
<li>Testing is Important</li>
<li>Teamwork Makes the Dream Work</li>
<li>How to Estimate</li>
<li>Tracer Bullet Development</li>
<li>How to Handle Pressure</li>
<li>The Importance of Refactoring</li>
<li>Main Differences Between These Books</li>
<li>Conclusion</li>
<li>Resources</li>
</ul>
<h2 id="heading-how-to-take-responsibility">How to Take Responsibility</h2>
<p>As a software developer, you are responsible for the code you create. You must ensure that it not only works now but will do so in the best possible way for a long time (nothing lasts forever). </p>
<p>The best way to make sure the code won’t fail is by testing it – having automated tests that you run each time you write new lines to be sure everything is still working.</p>
<blockquote>
<p>Take Responsibility. Responsibility is something you actively agree to.
— The Pragmatic Programmer</p>
</blockquote>
<p>Responsibility is not only related to coding, though. You have to <strong>take responsibility for improving yourself</strong> too and get better by scheduling time for it. </p>
<blockquote>
<p>Professionals spend time caring for their profession. Presumably, you became a software developer because you are passionate about software and your desire to be a professional is motivated by that passion.
— The Clean Coder</p>
<p>Your knowledge and experience are your most important day-to-day professional assets.
— The Pragmatic Programmer</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/responsibility.gif" alt="Responsibility" width="600" height="400" loading="lazy"></p>
<h2 id="heading-testing-is-important">Testing is Important</h2>
<p>The importance of testing in software development is so great that both books focus on this topic. </p>
<p>You have to <strong>look at tests as the first users of your code</strong>, so they are the best feedback that guides your coding.</p>
<p>Practice <a target="_blank" href="https://en.wikipedia.org/wiki/Test-driven_development">TDD Test Driven Development</a>. How does it work? Here are its three main steps:</p>
<ol>
<li>Choose a feature to add and write a test that will pass after implementing it. Now, all tests but the new one should pass. </li>
<li>Write the code required to pass it.</li>
<li>Refactor the code and check that all tests still pass.</li>
</ol>
<p>This said, it is important to look at the big picture and not to miss the main goal by writing too many tests.</p>
<blockquote>
<p>It is easy to become seduced by the green "tests passed" message, writing lots of code that doesn’t actually get you closer to a solution.
— The Pragmatic Programmer</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/tests.gif" alt="Tests" width="600" height="400" loading="lazy"></p>
<p>There are three ways of testing: <em>First, During,</em> and <em>Never.</em> First (TDD) is the best one. During is a fallback when First is not useful. And Never is often called “Test Later” but sadly <strong>in most cases Later means Never.</strong></p>
<blockquote>
<p>The need to test first forces you to think about "good design."
— The Clean Coder</p>
</blockquote>
<p>Having tests give you the confidence to refactor code more often because you can check to make sure that the tests still pass after you've made your changes.</p>
<blockquote>
<p>Tests should be run as frequently as possible to provide maximum feedback and to ensure that the system remains continuously clean.
— The Clean Coder</p>
</blockquote>
<p>Use acceptance tests to <em>define when a requirement is done</em> collaborating with the stakeholders.</p>
<p>Developers take the responsibility to ensure that tests are <em>always automated</em> for a simple reason: <strong>cost.</strong></p>
<p>Developers have should have the goal that “QA should find nothing”. You can accomplish this by implementing different kinds of tests, in different measures from unit to exploratory tests.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/the_test_automation_pyramid.png" alt="The Test Automation Pyramid - The Clean Coder" width="600" height="400" loading="lazy"></p>
<h2 id="heading-teamwork-makes-the-dream-work">Teamwork Makes the Dream Work</h2>
<p>When working on a team, you have to be a "team player", communicate frequently, keep an eye out for your teammates, and execute your responsibilities as effectively as possible.</p>
<blockquote>
<p>Good communication is key to avoiding these problems. And by "good" we mean instant and frictionless. Frictionless means it’s easy and low-ceremony to ask questions, share your progress, your problems, your insights and learnings, and to stay aware of what your teammates are doing.
— The Pragmatic Programmer</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/tobias-mrzyk-iuqmGmst5Po-unsplash.jpg" alt="tobias-mrzyk-iuqmGmst5Po-unsplash" width="600" height="400" loading="lazy"></p>
<p>Teams should be <strong>small, less than 10-12 members</strong>, where everyone knows and trusts each other. This team environment is <strong>hard to achieve</strong> therefore once you get it you have to <strong>care for it changing the projects the team works on rather than the members.</strong></p>
<blockquote>
<p>As team size grows, communication paths grow at the rate of O(n^2), where n is the number of team members. On larger teams, communication begins to break down and becomes ineffective.
— The Pragmatic Programmer</p>
<p>To form teams around projects is a foolish approach. Individuals are only on the project for a short time and therefore never learn how to deal with each other. Teams are harder to build than projects. Therefore, it is better to form persistent teams that move together from one project to the next and can take on more than one project at a time.
— The Clean Coder</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/tobias-mrzyk-Px3oXvVXRxc-unsplash.jpg" alt="tobias-mrzyk-Px3oXvVXRxc-unsplash" width="600" height="400" loading="lazy"></p>
<p>Furthermore, great teams will face and solve issues together where each individual will provide their best effort. They <em>get things done as a unit</em>. In the end, they will be known for their performance and quality of work.</p>
<blockquote>
<p>Quality can come only from the individual contributions of all team members. Quality is built in, not bolted on.
— The Pragmatic Programmer</p>
<p>A gelled team can work miracles, anticipate each other, cover for each other, support each other, and demand the best from each other. They make things happen.
— The Clean Coder</p>
<p>Great project teams have a distinct personality. People look forward to meetings with them, because they know that they’ll see a well-prepared performance that makes everyone feel good. The documentation they produce is crisp, accurate, and consistent.
— The Pragmatic Programmer</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/natalie-pedigo-wJK9eTiEZHY-unsplash.jpg" alt="natalie-pedigo-wJK9eTiEZHY-unsplash" width="600" height="400" loading="lazy"></p>
<h2 id="heading-how-to-estimate">How to Estimate</h2>
<p>This lesson, like the majority from both books, is as important in software development as in real life. The more you practice and develop it, the more intuitive will be your ability to determine the feasibility of any task. </p>
<p>First, I want to clarify what <em>estimating</em> means by sharing The Clean Coder's definition of an estimate which refers to it as a <em>probability distribution.</em></p>
<blockquote>
<p>An estimate is not a number. An estimate is a <em>probability distribution,</em> the likelihood of completion.
— The Clean Coder</p>
</blockquote>
<p>To help you understand it, here is a figure of the likelihood of completion of a task for the next 11 days.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/probability_distribution.png" alt="probability_distribution" width="600" height="400" loading="lazy"></p>
<p>One of the basics to make great estimations is to <strong>have proper knowledge of what you are estimating.</strong> </p>
<blockquote>
<p>The first part of any estimation exercise is building an understanding of what’s being asked. You need to have a grasp of the scope of the domain.
— The Pragmatic Programmer</p>
</blockquote>
<p>Don’t estimate alone, <strong>communicate with other people to be as accurate as possible.</strong></p>
<blockquote>
<p>The most important estimation resource you have are the people around you. They can see things that you don’t. They can help you estimate your tasks more accurately than you can estimate them on your own.
— The Clean Coder</p>
<p>A basic estimating trick that always gives good answers: ask someone who’s already done it.
— The Pragmatic Programmer</p>
</blockquote>
<p>When asked for an estimation choose the units that better reflect the accuracy you intend to convey. This Estimation times scale from The Pragmatic Programmer may help you.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Duration</td><td>Quote estimate in</td></tr>
</thead>
<tbody>
<tr>
<td>1–15 days</td><td>Days</td></tr>
<tr>
<td>3–6    weeks</td><td>Weeks</td></tr>
<tr>
<td>8–20    weeks</td><td>Months</td></tr>
<tr>
<td>20+    weeks</td><td>Think hard before giving an estimate</td></tr>
</tbody>
</table>
</div><p>Although Business likes to view estimates as commitments, remember that <strong>an estimate is just a guess therefore no commitment is implied.</strong> </p>
<blockquote>
<p>A commitment is something you must achieve. If you commit to getting something done by a certain date, then you simply have to get it done by that date. Professionals don’t make commitments unless they know they can achieve them. Missing a commitment is an act of dishonesty only slightly less onerous than an overt lie.
— The Clean Coder</p>
</blockquote>
<p>Thus said, to help Business measuring requirements and making appropriate plans, you have to <strong>remove the requirement’s ambiguity before estimating.</strong> Afterwards, <strong>keep them updated about the progress.</strong> </p>
<blockquote>
<p>The trick to managing lateness is early detection and transparency. Regularly measure your progress against your goal. Be as honest as you can about all dates. Do not incorporate hope into your estimates!
— The Clean Coder</p>
</blockquote>
<p>Do not reinvent the wheel, use well-known estimation techniques for tasks. Here I made a summary of some techniques mentioned in both books.</p>
<ul>
<li><a target="_blank" href="https://reymon359.github.io/book-sentences/#/The%20Clean%20Coder/index?id=pert">PERT</a></li>
<li><a target="_blank" href="https://reymon359.github.io/book-sentences/#/The%20Clean%20Coder/index?id=wideband-delphi">Wideband Delphi</a></li>
<li><a target="_blank" href="https://reymon359.github.io/book-sentences/#/The%20Clean%20Coder/index?id=flying-fingers">Flying Fingers</a></li>
<li><a target="_blank" href="https://reymon359.github.io/book-sentences/#/The%20Clean%20Coder/index?id=planning-poker">Planning Poker</a></li>
<li><a target="_blank" href="https://reymon359.github.io/book-sentences/#/The%20Clean%20Coder/index?id=affinity-estimation">Affinity Estimation</a></li>
<li><a target="_blank" href="https://reymon359.github.io/book-sentences/#/The%20Clean%20Coder/index?id=trivariate-estimates">Trivariate Estimates</a></li>
<li><a target="_blank" href="https://reymon359.github.io/book-sentences/#/The%20Clean%20Coder/index?id=the-law-of-large-numbers">The Law of Large Numbers</a></li>
</ul>
<p>The more experience you have on a certain project, the better you will estimate its tasks. Therefore don’t worry if the first estimates you make are not as accurate as they could be. It is an incremental process as with every long term goal you want to achieve. </p>
<p>Like one of my favorite quotes states:</p>
<blockquote>
<p>There is only <strong>one</strong> way to <strong>eat an elephant</strong>: a <strong>bite at a time</strong>.
— Desmond Tutu</p>
</blockquote>
<p>However, there is no way you can eat such cuteness:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/elephant.gif" alt="Elephant" width="600" height="400" loading="lazy"></p>
<h2 id="heading-tracer-bullet-development">Tracer Bullet Development</h2>
<p>Tracer bullets are a special kind of bullet used in movies to mark the path they’ve taken as feedback for the shooter to aim better the next time. Therefore, the main goal of Tracer Bullet Development is to "shoot" new features into the project and get quick feedback to "aim" better on the next ones.</p>
<blockquote>
<p>Tracer development is consistent with the idea that a project is never finished: there will always be changes required and functions to add. It is an incremental approach.
— The Pragmatic Programmer</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/tracer_bullets.png" alt="Tracer Bullets. Source: The Pragmatic Programmer" width="600" height="400" loading="lazy"></p>
<p>This method helps developers focus on the main features to be implemented so others can be built on. </p>
<p>In addition, it serves as <strong>proof the architecture is compatible and feasible</strong> by providing a functional and demonstrable skeleton to work from the beginning of the development process.</p>
<blockquote>
<p>Look for the important requirements, the ones that define the system. Look for the areas where you have doubts, and where you see the biggest risks. Then prioritize your development so that these are the first areas you code.
— The Pragmatic Programmer</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/outer-digit-Ys78stblUyY-unsplash.jpg" alt="outer-digit-Ys78stblUyY-unsplash" width="600" height="400" loading="lazy"></p>
<p>Lastly, <strong>Tracer Bullet Development should not be confused with prototyping.</strong> The code from prototypes isn’t supposed to be part of the project, whereas the code from the tracer bullets isn’t thrown away. It works and is improved each iteration with new features.</p>
<blockquote>
<p>Prototyping generates disposable code. Tracer code is lean but complete, and forms part of the skeleton of the final system. Think of prototyping as the reconnaissance and intelligence gathering that takes place before a single tracer bullet is fired.
— The Pragmatic Programmer</p>
</blockquote>
<h2 id="heading-how-to-handle-pressure">How to Handle Pressure</h2>
<p>I liked this one as well, since it helps you outside software development too. Soon or later you will be under pressure, and the best tricks to handling it are to <strong>avoid it when you can, and weather it when you can’t.</strong></p>
<blockquote>
<p>The best way to stay calm under pressure is to avoid the situations that cause pressure.
— The Clean Coder</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/avoiding.gif" alt="Avoiding" width="600" height="400" loading="lazy"></p>
<p>You mainly <strong>avoid it by managing commitments, keeping clean, and following your disciplines.</strong> </p>
<p>The best way to manage commitments is by <em>saying no</em> to those deadlines you aren’t sure you can meet. Keeping clean basically means that you have no mess on your systems, code, and design.</p>
<blockquote>
<p>The way to go fast, and to keep the deadlines at bay, is to stay clean. Professionals do not succumb to the temptation to create a mess in order to move quickly. “Quick and dirty” is an oxymoron. Dirty always means slow!
— The Clean Coder</p>
</blockquote>
<p><strong>Follow disciplines you truly believe in and stick to them all the time</strong> no matter the situation. Crisis times will come, and that’s when you have to pay attention to how you behave. If you follow your disciplines it means you believe in them. </p>
<p>Changing your behavior and not following your disciplines would mean you don’t truly believe in your normal behavior, and you have to shift those disciplines to improve it.</p>
<blockquote>
<p>If you keep your code clean during normal times but make messes in a crisis, then you don’t really believe that messes slow you down. If you pair in a crisis but don’t normally pair, then you believe pairing is more efficient than non-pairing.
— The Clean Coder</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/federico-lancellotti-YBuVjp5Mtrw-unsplash.jpg" alt="federico-lancellotti-YBuVjp5Mtrw-unsplash" width="600" height="400" loading="lazy"></p>
<p>Choose disciplines that you feel comfortable following in a crisis. <em>Then follow them all the time.</em> Following these disciplines is the best way to avoid getting into a crisis. Don’t change your behavior when the crunch comes. If your disciplines are the best way to work, then they should be followed even in the depths of a crisis.</p>
<p>But you can’t always avoid pressure, so you have to learn how to get through it. <strong>You weather it by staying calm, communicating, following your disciplines, and getting help.</strong></p>
<p>To stay calm, <strong>don’t panic,</strong> manage your stress, and think the problem through to find the best possible outcome. Then go for it at a steady pace, <em>like eating an elephant</em>. Make sure you're <strong>communicating</strong> all the time with your team and superiors to let them know when you are in trouble so you can get input and guidance. This way there won’t be any unexpected surprises in the end.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/good_communication_is_the_key_to_success.jpg" alt="Communication is the key" width="600" height="400" loading="lazy"></p>
<blockquote>
<p>Avoid creating surprises. Nothing makes people more angry and less rational than surprises. Surprises multiply the pressure by ten.
— The Clean Coder</p>
</blockquote>
<p>In the same way you relied on your disciplines to avoid pressure, you should also rely on them when the moment gets tough. In fact, these times you have to pay special attention to them and neither question nor abandon them.</p>
<p>The communication tip includes <strong>asking for help</strong> from teammates to pair, superiors, or internet sites and forums. </p>
<p>Don't forget to be there for others too when they are under pressure and need help.</p>
<blockquote>
<p>When the heat is on, find an associate who is willing to pair program with you. You will get done faster, with fewer defects. Your pair partner will help you hold on to your disciplines and keep you from panicking.
— The Clean Coder</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/pairing.gif" alt="pairing" width="600" height="400" loading="lazy"></p>
<h2 id="heading-the-importance-of-refactoring">The Importance of Refactoring</h2>
<p>The term <em>Refactoring</em> is defined by Martin Fowler as a:</p>
<blockquote>
<p>Disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.
— Martin Fowler</p>
</blockquote>
<p>Sometimes you will find code that does not feel right and should be fixed or improved. And you have to keep in mind the best moment to do so is <strong>now</strong>, when you find it.</p>
<p><strong>It is inevitable: a program’s code needs to grow, evolve, and improve.</strong> To do so, you'll need to rethink some decisions, and the code will need to change. So be sure to have it covered with <strong>automated tests</strong> to guarantee that the external behavior does not change.</p>
<blockquote>
<p>Rather than construction, software is more like gardening – it is more organic than concrete. You plant many things in a garden according to an initial plan and conditions. You constantly monitor the health of the garden, and make adjustments as needed.
— The Pragmatic Programmer</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/bobs_burger_gardening.gif" alt="Bob gardening" width="600" height="400" loading="lazy"></p>
<p>When should you refactor the code? Here is a list of situations that qualify:</p>
<ul>
<li>To remove <strong>code duplication.</strong></li>
<li>To make some parts of the code more <strong>orthogonal.</strong></li>
<li>To <strong>update</strong> code and/or documentation that's outdated.</li>
<li>To improve <strong>performance.</strong></li>
</ul>
<p>And here are Martin Fowler's tips on how to refactor without doing more harm than good:</p>
<ol>
<li>Don’t try to refactor and add functionality at the same time.</li>
<li>Make sure you have good tests before you begin refactoring. Run the tests as often as possible.</li>
<li>Take short, deliberate steps: move a field from one class to another, split a method, rename a variable. Refactoring often involves making many localized changes that result in a larger-scale change.</li>
</ol>
<p>The most important thing to keep in mind is that <strong>refactoring is not a certain task, it is a habit</strong>. And, as with most things in life, it is easier to do while the issues are small, as an ongoing activity while coding. </p>
<p><strong>The less you refactor now the greater time you’ll have to invest to fix the problem down the road.</strong></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/cat_refactoring.gif" alt="Cat refactoring" width="600" height="400" loading="lazy"></p>
<blockquote>
<p>Refactoring as "a growth." Removing it requires invasive surgery. You can take it out while it is still small. Or, you could wait while it grows and spreads – but removing it then will be both more expensive and more dangerous. Wait even longer, and you may lose the patient entirely.
— The Pragmatic Programmer</p>
</blockquote>
<h2 id="heading-main-differences-between-these-books">Main Differences Between These Books</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/differences.gif" alt="Differences" width="600" height="400" loading="lazy"></p>
<p>I did not want this article to be a comparison – but although these books focus on similar subjects, the content and the way each is narrated are not the same. </p>
<p>Here are the main impressions I got from them that are not related to the content itself. These observations can help you have an idea of what to expect while reading them.</p>
<ul>
<li>The Clean Coder speaks about the developer in a more day by day at work way. It makes references to common situations that are given in such an environment like the relationship with sales or business people, working in a team, or saying no to clients. The developer in the Pragmatic Programmer isn’t really placed in job situations. Rather, it grants an overview of the field, structuring the book on advice: <em>topics and tips</em>, for any situation. </li>
<li>The Clean Coder refers to the figure of the Software Developer as a <em>Professional Programmer</em> while The Pragmatic Programmer uses the totally unexpected term <em>Pragmatic Programmer</em>.</li>
<li>In general terms, The Clean Coder has a more subjective sense since it shares more personal experiences from the author. On the other hand, The Pragmatic Programmer feels more objective, focusing mostly on the advice itself.</li>
<li>The Pragmatic Programmer contains more code examples in different programming languages than the Clean Coder, which helps you understand the concepts discussed.</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Keep in mind that what I've discussed here is just my own personal impressions and lessons I got from reading these two books. Each book has much more to offer, and the best thing you can do is read both yourself to form your own opinion and conclusions. </p>
<p>If you are interested in software development and want to get better, you should read both of them. It's worth it – they're very different and each is worth your time. And they'll bring you different knowledge and best practices for your career. </p>
<p>Having said that, if you still want to go the lazy way, I made this <a target="_blank" href="https://github.com/reymon359/book-sentences">open-source project with the core sentences from each book</a>.</p>
<p><a target="_blank" href="https://github.com/reymon359/book-sentences"><img src="https://www.freecodecamp.org/news/content/images/2021/11/book_sentences.png" alt="[Book Sentences Project](https://github.com/reymon359/book-sentences)" width="600" height="400" loading="lazy"></a></p>
<h2 id="heading-resources">Resources</h2>
<p>The main resources are both books, which you can find easily on the internet and <a target="_blank" href="https://github.com/reymon359/book-sentences/">the project</a> where I noted down the sentences I found most important.</p>
<p>I hope you enjoyed this article. You can read it too <a target="_blank" href="https://ramonmorcillo.com/7-lessons-learned-from-the-pragmatic-programmer-and-the-clean-coder/">on my site</a> along with others! If you've got any questions, suggestions, or feedback in general, don't hesitate to reach out on any of the social networks from <a target="_blank" href="https://ramonmorcillo.com/">my site</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 460 Free Textbooks – Math, Science, and More [Online PDF for College and High School] ]]>
                </title>
                <description>
                    <![CDATA[ While you're in school, you will go through a number of textbooks and the cost can add up pretty quickly. Luckily, there are websites that offer free textbooks for high school and college students.  Here is a list of 460 free textbooks, arranged by t... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/free-textbooks-math-science-and-more-online-pdf-for-college-and-high-school/</link>
                <guid isPermaLink="false">66b8d945f805ffd579552e84</guid>
                
                    <category>
                        <![CDATA[ Advanced Mathematics ]]>
                    </category>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Math ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Science  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jessica Wilkins ]]>
                </dc:creator>
                <pubDate>Thu, 09 Sep 2021 14:25:28 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/10/inaki-del-olmo-NIJuEQw0RKg-unsplash--1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>While you're in school, you will go through a number of textbooks and the cost can add up pretty quickly. Luckily, there are websites that offer free textbooks for high school and college students. </p>
<p>Here is a list of 460 free textbooks, arranged by topic. Once you find a topic that interests you, click that link and it will jump you down to a list of related textbooks.</p>
<h2 id="heading-high-school-textbook-categories">High School Textbook Categories</h2>
<ul>
<li><a class="post-section-overview" href="#heading-math">Math</a></li>
<li><a class="post-section-overview" href="#heading-natural-sciences">Natural Sciences</a></li>
<li><a class="post-section-overview" href="#heading-classical-novels">Classical Novels</a></li>
</ul>
<h2 id="heading-college-textbook-categories">College Textbook Categories</h2>
<ul>
<li><a class="post-section-overview" href="#heading-computer-science">Computer Science</a></li>
<li><a class="post-section-overview" href="#heading-engineering">Engineering</a> </li>
<li><a class="post-section-overview" href="#heading-education">Education</a></li>
<li><a class="post-section-overview" href="#heading-math-1">Math</a></li>
<li><a class="post-section-overview" href="#heading-natural-sciences-1">Natural Sciences</a></li>
<li><a class="post-section-overview" href="#heading-medicine">Medicine</a></li>
<li><a class="post-section-overview" href="#social-sciences-1">Social Sciences</a></li>
<li><a class="post-section-overview" href="#heading-humanities">Humanities</a></li>
<li><a class="post-section-overview" href="#heading-business">Business</a></li>
<li><a class="post-section-overview" href="#heading-law">Law</a></li>
<li><a class="post-section-overview" href="#heading-journalism-and-communication">Journalism and Communication</a></li>
</ul>
<h2 id="heading-high-school-textbooks-90">High school Textbooks (90)</h2>
<h3 id="heading-math">Math</h3>
<ol>
<li><a target="_blank" href="https://openstax.org/details/books/statistics">Statistics</a> </li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/advanced-high-school-statistics-first-edition">Advanced High School Statistics - 2nd Edition</a></li>
<li><a target="_blank" href="https://www.math.ksu.edu/~dbski/writings/further.pdf">Advanced High School Mathematics</a></li>
</ol>
<h3 id="heading-natural-sciences">Natural Sciences</h3>
<ol>
<li><a target="_blank" href="https://openstax.org/details/books/college-physics-ap-courses">AP Physics Collection</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/college-physics-ap-courses">Biology for AP courses</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/physics">Physics</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-macroeconomics-ap-courses-2e">Principles of Macroeconomics for AP courses 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-microeconomics-ap-courses-2e">Principles of Microeconomics for AP courses 2e</a></li>
</ol>
<h3 id="heading-classical-novels">Classical Novels</h3>
<ol>
<li><a target="_blank" href="https://www.planetebook.com/the-adventures-of-huckleberry-finn/">Adventures of Huckleberry Finn, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-adventures-of-tom-sawyer/">Adventures of Tom Sawyer, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/aesops-fables/">Aesop’s Fables</a></li>
<li><a target="_blank" href="https://www.planetebook.com/agnes-grey/">Agnes Grey</a></li>
<li><a target="_blank" href="https://www.planetebook.com/alices-adventures-in-wonderland/">Alice’s Adventures in Wonderland</a></li>
<li><a target="_blank" href="https://www.planetebook.com/andersens-fairy-tales/">Andersen’s Fairy Tales</a></li>
<li><a target="_blank" href="https://www.planetebook.com/anna-karenina/">Anna Karenina</a></li>
<li><a target="_blank" href="https://www.planetebook.com/anne-of-green-gables/">Anne of Green Gables</a></li>
<li><a target="_blank" href="https://www.planetebook.com/around-the-world-in-80-days/">Around the World in 80 Days</a></li>
<li><a target="_blank" href="https://www.planetebook.com/beyond-good-and-evil/">Beyond Good and Evil</a></li>
<li><a target="_blank" href="https://www.planetebook.com/bleak-house/">Bleak House</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-brothers-karamazov/">Brothers Karamazov, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/a-christmas-carol/">Christmas Carol, A</a></li>
<li><a target="_blank" href="https://www.planetebook.com/crime-and-punishment/">Crime and Punishment</a></li>
<li><a target="_blank" href="https://www.planetebook.com/david-copperfield/">David Copperfield</a></li>
<li><a target="_blank" href="https://www.planetebook.com/down-and-out-in-paris-and-london/">Down and Out in Paris and London</a></li>
<li><a target="_blank" href="https://www.planetebook.com/dracula/">Dracula</a></li>
<li><a target="_blank" href="https://www.planetebook.com/dubliners/">Dubliners</a></li>
<li><a target="_blank" href="https://www.planetebook.com/emma/">Emma</a></li>
<li><a target="_blank" href="https://www.planetebook.com/erewhon/">Erewhon</a></li>
<li><a target="_blank" href="https://www.planetebook.com/for-the-term-of-his-natural-life/">For the Term of His Natural Life</a></li>
<li><a target="_blank" href="https://www.planetebook.com/frankenstein/">Frankenstein</a></li>
<li><a target="_blank" href="https://www.planetebook.com/great-expectations/">Great Expectations</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-great-gatsby/">Great Gatsby, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/grimms-fairy-tales/">Grimms Fairy Tales</a></li>
<li><a target="_blank" href="https://www.planetebook.com/gullivers-travels/">Gulliver’s Travels</a></li>
<li><a target="_blank" href="https://www.planetebook.com/heart-of-darkness/">Heart of Darkness</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-hound-of-the-baskervilles/">Hound of the Baskervilles, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-idiot/">Idiot, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-iliad/">Iliad, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-island-of-doctor-moreau/">Island of Doctor Moreau, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/jane-eyre/">Jane Eyre</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-jungle-book/">Jungle Book, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/kidnapped/">Kidnapped</a></li>
<li><a target="_blank" href="https://www.planetebook.com/lady-chatterlys-lover/">Lady Chatterly’s Lover</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-last-of-the-mohicans/">Last of the Mohicans, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-legend-of-sleepy-hollow/">Legend of Sleepy Hollow, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/les-miserables/">Les Miserables</a></li>
<li><a target="_blank" href="https://www.planetebook.com/little-women/">Little Women</a></li>
<li><a target="_blank" href="https://www.planetebook.com/madame-bovary/">Madame Bovary</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-merry-adventures-of-robin-hood/">Merry Adventures of Robin Hood, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-metamorphosis/">Metamorphosis, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/middlemarch/">Middlemarch</a></li>
<li><a target="_blank" href="https://www.planetebook.com/moby-dick/">Moby Dick</a></li>
<li><a target="_blank" href="https://www.planetebook.com/1984/">1984</a></li>
<li><a target="_blank" href="https://www.planetebook.com/northanger-abbey/">Northanger Abbey</a></li>
<li><a target="_blank" href="https://www.planetebook.com/nostromo-a-tale-of-the-seaboard/">Nostromo: A Tale of the Seaboard</a></li>
<li><a target="_blank" href="https://www.planetebook.com/notes-from-the-underground/">Notes from the Underground</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-odyssey/">Odyssey, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/of-human-bondage/">Of Human Bondage</a></li>
<li><a target="_blank" href="https://www.planetebook.com/oliver-twist/">Oliver Twist</a></li>
<li><a target="_blank" href="https://www.planetebook.com/paradise-lost/">Paradise Lost</a></li>
<li><a target="_blank" href="https://www.planetebook.com/persuasion/">Persuasion</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-picture-of-dorian-gray/">Picture of Dorian Gray, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/pollyanna/">Pollyanna</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-portrait-of-a-lady/">Portrait of a Lady, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/a-portrait-of-the-artist-as-a-young-man/">Portrait of the Artist as a Young Man, A</a></li>
<li><a target="_blank" href="https://www.planetebook.com/pride-and-prejudice/">Pride and Prejudice</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-prince/">Prince, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/robinson-crusoe/">Robinson Crusoe</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-scarlet-pimpernel/">Scarlet Pimpernel, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/sense-and-sensibility/">Sense and Sensibility</a></li>
<li><a target="_blank" href="https://www.planetebook.com/sons-and-lovers/">Sons and Lovers</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-strange-case-of-dr-jekyll/">Strange Case of Dr Jekyll and Mr Hyde, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/swanns-way/">Swanns Way</a></li>
<li><a target="_blank" href="https://www.planetebook.com/a-tale-of-two-cities/">Tale of Two Cities, A</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-tales-of-mother-goose/">Tales of Mother Goose, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/tarzan-of-the-apes/">Tarzan of the Apes</a></li>
<li><a target="_blank" href="https://www.planetebook.com/tender-is-the-night/">Tender is the Night</a></li>
<li><a target="_blank" href="https://www.planetebook.com/tess-of-the-durbervilles/">Tess of the d’Urbervilles</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-thirty-nine-steps/">Thirty Nine Steps, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-three-musketeers/">Three Musketeers, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-time-machine/">Time Machine, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/treasure-island/">Treasure Island</a></li>
<li><a target="_blank" href="https://www.planetebook.com/the-trial/">Trial, The</a></li>
<li><a target="_blank" href="https://www.planetebook.com/ulysses/">Ulysses</a></li>
<li><a target="_blank" href="https://www.planetebook.com/utopia/">Utopia</a></li>
<li><a target="_blank" href="https://www.planetebook.com/vanity-fair/">Vanity Fair</a></li>
<li><a target="_blank" href="https://www.planetebook.com/war-and-peace/">War and Peace</a></li>
<li><a target="_blank" href="https://www.planetebook.com/within-a-budding-grove/">Within A Budding Grove</a></li>
<li><a target="_blank" href="https://www.planetebook.com/women-in-love/">Women In Love</a></li>
<li><a target="_blank" href="https://www.planetebook.com/wuthering-heights/">Wuthering Heights</a></li>
</ol>
<h2 id="heading-college-textbooks-370">College TextBooks (370)</h2>
<h3 id="heading-computer-science">Computer Science</h3>
<ol>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/python-for-everybody-exploring-data-using-python-3">Python for Everybody: Exploring Data Using Python 3</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/web-accessibility-for-developers">Web Accessibility for Developers</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-missing-link-an-introduction-to-web-development-and-programming">The Missing Link: An Introduction to Web Development and Programming</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/foundations-of-computation">Foundations of Computation</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/algorithms-and-data-structures-with-applications-to-graphics-and-geometry">Algorithms and Data Structures With Applications to Graphics and Geometry</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/think-data-structures-algorithms-and-information-retrieval-in-java">Think Data Structures: Algorithms and Information Retrieval in Java</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/open-data-structures-an-introduction">Open Data Structures: An Introduction</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/java-with-bluej">Java with BlueJ</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-programming-using-java-seventh-edition">Introduction to Programming Using Java - Eighth Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-byte-of-python">A Byte of Python</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/eloquent-javascript-a-modern-introduction-to-programming">Eloquent JavaScript: A Modern Introduction to Programming</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/high-performance-computing">High Performance Computing</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/database-design-2nd-edition">Database Design - 2nd Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/relational-databases-and-microsoft-access">Relational Databases and Microsoft Access</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-first-course-in-electrical-and-computer-engineering">A First Course in Electrical and Computer Engineering</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/how-to-think-like-a-computer-scientist-learning-with-python">How to Think Like a Computer Scientist: Learning with Python</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/how-to-think-like-a-computer-scientist-c-version-1999">How to Think Like a Computer Scientist: C Version</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/how-to-think-like-a-computer-scientist-c-version">How to Think Like a Computer Scientist: C++ Version</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/programming-fundamentals-a-modular-structured-approach-using-c">Programming Fundamentals - A Modular Structured Approach using C++</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/think-java-how-to-think-like-a-computer-scientist">Think Java: How To Think Like a Computer Scientist - 2e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/java-java-java-object-oriented-problem-solving">Java, Java, Java: Object-Oriented Problem Solving</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/think-stats-probability-and-statistics-for-programmers">Think Stats: Probability and Statistics for Programmers - 2e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/think-bayes-bayesian-statistics-made-simple">Think Bayes: Bayesian Statistics Made Simple</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/think-complexity-exploring-complexity-science-with-python">Think Complexity: Exploring Complexity Science with Python - 2e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/digital-circuit-projects-an-overview-of-digital-circuits-through-implementing-integrated-circuits">Digital Circuit Projects: An Overview of Digital Circuits Through Implementing Integrated Circuits</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-the-modeling-and-analysis-of-complex-systems">Introduction to the Modeling and Analysis of Complex Systems</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/physical-modeling-in-matlab">Physical Modeling in MATLAB</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/spatial-thinking-in-planning-practice-an-introduction-to-gis">Spatial Thinking in Planning Practice: An Introduction to GIS</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-computer-graphics">Introduction to Computer Graphics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/computer-networks-a-systems-approach">Computer Networks: A Systems Approach</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/an-introduction-to-computer-networks">An Introduction to Computer Networks - Second Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/computer-networking-principles-protocols-and-practice">Computer Networking : Principles, Protocols and Practice</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/signal-computing-digital-signals-in-the-software-domain">Signal Computing: Digital Signals in the Software Domain</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/x86-64-assembly-language-programming-with-ubuntu">x86-64 Assembly Language Programming with Ubuntu</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/professional-web-accessibility-auditing-made-easy">Professional Web Accessibility Auditing Made Easy</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/first-semester-in-numerical-analysis-with-python">First Semester in Numerical Analysis with Python</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-crystal-ball-instruction-manual-volume-one-introduction-to-data-science">The Crystal Ball Instruction Manual - version 1.1 Volume One: Introduction to Data Science</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/an-introduction-to-matlab-and-mathcad">An Introduction to Matlab and Mathcad</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/yet-another-introductory-number-theory-textbook-cryptology-emphasis-version">Yet Another Introductory Number Theory Textbook (Cryptology Emphasis Version)</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/delftse-foundations-of-computation">Delftse Foundations of Computation</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-unicode-cookbook-for-linguists-managing-writing-systems-using-orthography-profiles">The Unicode cookbook for linguists: Managing writing systems using orthography profiles</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/implementing-a-one-address-cpu-in-logisim">Implementing a One Address CPU in Logisim</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/embedded-controllers-using-c-and-arduino-2e">Embedded Controllers Using C and Arduino - 2e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-mips-assembly-language-programming">Introduction to MIPS Assembly Language Programming</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/think-dsp-digital-signal-processing-in-python">Think DSP: Digital Signal Processing in Python</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/information-systems-for-business-and-beyond">Information Systems for Business and Beyond</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/information-systems-a-manager-s-guide-to-harnessing-technology">Information Systems: A Manager's Guide to Harnessing Technology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-little-book-of-semaphores">The Little Book of Semaphores</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/essentials-of-geographic-information-systems">Essentials of Geographic Information Systems</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/programming-languages-application-and-interpretation">Programming Languages: Application and Interpretation - Version Second Edition</a></li>
</ol>
<h3 id="heading-engineering">Engineering</h3>
<ol>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-brief-introduction-to-engineering-computation-with-matlab">A Brief Introduction to Engineering Computation with MATLAB</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-industrial-engineering">Introduction to Industrial Engineering</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-electrical-engineering-1">Fundamentals of Electrical Engineering I</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-first-course-in-electrical-and-computer-engineering">A First Course in Electrical and Computer Engineering</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/sustainability-a-comprehensive-foundation">Sustainability: A Comprehensive Foundation</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/notes-on-diffy-qs-differential-equations-for-engineers">Notes on Diffy Qs: Differential Equations for Engineers</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/elementary-differential-equations-with-boundary-value-problems">Elementary Differential Equations with Boundary Value Problems</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/developing-new-products-and-services">Developing New Products and Services</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-aerospace-structures-and-materials">Introduction to Aerospace Structures and Materials</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/building-maintenance-construction-tools-and-maintenance-tasks">Building Maintenance &amp; Construction: Tools and Maintenance Tasks</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/direct-energy">Direct Energy</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/operational-amplifiers-linear-integrated-circuits-theory-and-application-3e">Operational Amplifiers &amp; Linear Integrated Circuits: Theory and Application - 3e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/manufacturing-processes-4-5">Manufacturing Processes 4-5</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/electromagnetics-vol-1">Electromagnetics Vol 1</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/dc-electrical-circuit-analysis-a-practical-approach-fiore">DC Electrical Circuit Analysis: A Practical Approach</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/ac-electrical-circuit-analysis-a-practical-approach-fiore">AC Electrical Circuit Analysis: A Practical Approach</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/applied-fluid-mechanics-lab-manual-ahmari">Applied Fluid Mechanics Lab Manual</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-microwave-and-rf-design">Fundamentals of Microwave and RF Design</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-probability">Introduction to Probability</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-linear-time-invariant-dynamic-systems-for-students-of-engineering">Introduction to Linear, Time-Invariant, Dynamic Systems for Students of Engineering</a></li>
</ol>
<h3 id="heading-education">Education</h3>
<ol>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/hybrid-flexible-course-design-beatty">Hybrid-Flexible Course Design</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/creating-online-learning-experiences">Creating Online Learning Experiences</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/education-for-a-digital-world-advice-guidelines-and-effective-practice-from-around-globe">Education for a Digital World: Advice, Guidelines and Effective Practice from Around Globe</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/educational-psychology">Educational Psychology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/learning-to-learn-online">Learning to Learn Online</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/sharing-our-knowledge-best-practices-for-supporting-english-language-learners-in-schools">Sharing Our Knowledge: Best Practices for Supporting English Language Learners in Schools</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-curriculum-for-early-childhood-education">Introduction to Curriculum for Early Childhood Education</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/bad-ideas-about-writing">Bad Ideas About Writing</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/write-here-right-now-an-interactive-introduction-to-academic-writing-and-research">Write Here, Right Now: An Interactive Introduction to Academic Writing and Research</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/elementary-earth-and-space-science-methods-2019">Elementary Earth and Space Science Methods</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/mathematics-for-elementary-teachers">Mathematics for Elementary Teachers</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/trauma-informed-behaviour-support-a-practical-guide-to-developing-resilient-learners">Trauma Informed Behaviour Support: A Practical Guide to Developing Resilient Learners</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/trauma-informed-school-practices-building-expertise-to-transform-schools">Trauma-Informed School Practices: Building Expertise To Transform Schools</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/wellbeing-in-educational-contexts">Wellbeing in Educational Contexts</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/parenting-and-family-diversity-issues">Parenting and Family Diversity Issues</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/safety-health-and-nutrition-in-early-childhood-education">Safety, Health, and Nutrition in Early Childhood Education</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-elc-an-early-childhood-learning-community-at-work">The ELC: An Early Childhood Learning Community at Work</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/building-democracy-for-all-interactive-explorations-of-government-and-civic-life">Building Democracy for All: Interactive Explorations of Government and Civic Life</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/foundations-of-learning-and-instructional-design-technology">Foundations of Learning and Instructional Design Technology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/ethical-use-of-technology-in-digital-learning-environments-graduate-student-perspectives">Ethical Use of Technology in Digital Learning Environments: Graduate Student Perspectives</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/writing-instruction-tips-for-automated-essay-graders-how-to-design-an-essay-for-a-non-human-reader">Writing Instruction Tips For Automated Essay Graders: How To Design an Essay for a Non-human Reader</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/conventions-101-a-functional-approach-to-teaching-and-assessing-grammar-and-punctuation">Conventions 101: A Functional Approach to Teaching (And Assessing!) Grammar and Punctuation</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/choosing-using-sources-a-guide-to-academic-research">Choosing &amp; Using Sources: A Guide to Academic Research</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/wac-and-second-language-writers-research-towards-linguistically-and-culturally-inclusive-programs-and-practices">WAC and Second-Language Writers: Research Towards Linguistically and Culturally Inclusive Programs and Practices</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/wac-partnerships-between-secondary-and-postsecondary-institutions">WAC Partnerships Between Secondary and Postsecondary Institutions</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/working-with-academic-literacies-case-studies-towards-transformative-practice">Working With Academic Literacies: Case Studies Towards Transformative Practice</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/antiracist-writing-assessment-ecologies-teaching-and-assessing-writing-for-a-socially-just-future">Antiracist Writing Assessment Ecologies: Teaching and Assessing Writing for a Socially Just Future</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/critical-expressivism-theory-and-practice-in-the-composition-classroom">Critical Expressivism: Theory and Practice in the Composition Classroom</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/copy-write-intellectual-property-in-the-writing-classroom">Copy(write): Intellectual Property in the Writing Classroom</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/teaching-autoethnography-personal-writing-in-the-classroom">Teaching Autoethnography: Personal Writing in the Classroom</a></li>
</ol>
<h3 id="heading-math-1">Math</h3>
<ol>
<li><a target="_blank" href="https://openstax.org/details/books/algebra-and-trigonometry">Algebra and Trigonometry</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/calculus-volume-1">Calculus Volume 1</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/calculus-volume-2">Calculus Volume 2</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/calculus-volume-3">Calculus Volume 3</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/multivariable-calculus">Multivariable Calculus</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/college-algebra">College Algebra</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/open-resources-for-community-college-algebra">Open Resources for Community College Algebra</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/elementary-algebra-2e">Elementary Algebra 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/intermediate-algebra-2e">Intermediate Algebra 2e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-matrix-algebra">Fundamentals of Matrix Algebra</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-gnu-octave-a-brief-tutorial-for-linear-algebra-and-calculus-students">Introduction to GNU Octave: A brief tutorial for linear algebra and calculus students</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-cool-brisk-walkthrough-discrete-mathematics-davis">A Cool Brisk Walk Through Discrete Mathematics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/mathematical-analysis-i">Mathematical Analysis I</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introductory-statistics-with-randomization-and-simulation-first-edition">Introductory Statistics with Randomization and Simulation - First Edition</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/introductory-business-statistics">Introductory Business Statistics</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/introductory-statistics">Introductory Statistics</a> </li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/statistical-thinking-for-the-21st-century">Statistical Thinking for the 21st Century</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/lies-damned-lies-or-statistics-how-to-tell-the-truth-with-statistics">Lies, Damned Lies, or Statistics: How to Tell the Truth with Statistics</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/prealgebra-2e">Prealgebra 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/precalculus">Precalculus</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/geometry-with-an-introduction-to-cosmic-topology">Geometry with an Introduction to Cosmic Topology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/technical-mathematics">Technical Mathematics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-game-theory-a-discovery-approach">Introduction to Game Theory: a Discovery Approach</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/quantitative-problem-solving-in-natural-resources">Quantitative Problem Solving in Natural Resources</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/euclidean-plane-and-its-relatives">Euclidean plane and its relatives</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/proofs-and-concepts-the-fundamentals-of-abstract-mathematics">Proofs and Concepts: The Fundamentals of Abstract Mathematics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/applied-finite-mathematics">Applied Finite Mathematics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/linear-regression-using-r-an-introduction-to-data-modeling">Linear Regression Using R: An Introduction to Data Modeling</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/applied-combinatorics">Applied Combinatorics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/math-in-society">Math in Society - Edition 2.5</a></li>
</ol>
<h3 id="heading-natural-sciences-1">Natural Sciences</h3>
<ol>
<li><a target="_blank" href="https://openstax.org/details/books/anatomy-and-physiology">Anatomy and Physiology</a> </li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/human-anatomy-lab-manual">Human Anatomy Lab Manual</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-mixed-course-based-research-approach-to-human-physiology">A Mixed Course-Based Research Approach to Human Physiology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-anatomy-and-physiology">Fundamentals of Anatomy and Physiology - Australian Edition</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/astronomy">Astronomy</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/biochemistry-free-for-all-ahern">Biochemistry: Free For All</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/biology-2e">Biology 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/concepts-biology">Concepts of Biology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/principles-of-biology-biology-211-212-and-213">Principles of Biology: Biology 211, 212, and 213</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/microbiology">Microbiology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/general-microbiology-1st-edition-bruslind">General Microbiology - 1st Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-primer-for-computational-biology">A Primer for Computational Biology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/from-growing-to-biology-plants-1e">From Growing to Biology: Plants 1e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-student-s-guide-to-tropical-marine-biology">A Student's Guide to Tropical Marine Biology</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/chemistry-2e">Chemistry 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/chemistry-atoms-first-2e">Chemistry: Atoms first 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/college-physics">College Physics</a> </li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/foundations-of-neuroscience">Foundations of Neuroscience</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/foundations-of-epidemiology">Foundations of Epidemiology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/radiation-safety">Radiation Safety</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/environmental-toxicology">Environmental Toxicology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/geological-structures-a-practical-introduction">Geological Structures: a Practical Introduction</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/physical-geology-first-university-of-saskatchewan-edition">Physical Geology - First University of Saskatchewan Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/climate-toolkit-a-resource-manual-for-science-and-action-granshaw">Climate Toolkit: A Resource Manual for Science and Action</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-climate-science-1st-edition-schmittner">Introduction to Climate Science - 1st Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/bending-the-curve-climate-change-solutions">Bending the Curve: Climate Change Solutions</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/chemical-biology-biochemistry-laboratory-using-genetic-code-expansion-manual-mehl">Chemical Biology &amp; Biochemistry Laboratory Using Genetic Code Expansion Manual</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/biotechnology-foundations">Biotechnology Foundations - 2nd Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/an-ekg-interpretation-primer">An EKG Interpretation Primer</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-oceanography">Introduction to Oceanography</a></li>
</ol>
<h3 id="heading-medicine">Medicine</h3>
<ol>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/nutrition-science-and-everyday-application">Nutrition: Science and Everyday Application - beta v 0.1</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/human-nutrition">Human Nutrition - 2020 Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/concepts-of-fitness-and-wellness">Concepts of Fitness and Wellness</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/histology-and-embryology-for-dental-hygiene">Histology and Embryology for Dental Hygiene</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/nursing-pharmacology">Nursing Pharmacology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/nursing-care-at-the-end-of-life-what-every-clinician-should-know">Nursing Care at the End of Life: What Every Clinician Should Know</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/transitions-to-professional-nursing-practice-2nd-edition">Transitions to Professional Nursing Practice - 2nd Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/safety-health-and-nutrition-in-early-childhood-education">Safety, Health, and Nutrition in Early Childhood Education</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-complete-subjective-health-assessment-lapum">The Complete Subjective Health Assessment</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/evidence-based-massage-therapy">Evidence-Based Massage Therapy</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-laboratory-guide-to-clinical-hematology">A Laboratory Guide to Clinical Hematology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/undergraduate-diagnostic-imaging-fundamentals">Undergraduate Diagnostic Imaging Fundamentals</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/public-health-ethics-global-cases-practice-and-context">Public Health Ethics: Global Cases, Practice, and Context</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/literature-reviews-for-education-and-nursing-graduate-students">Literature Reviews for Education and Nursing Graduate Students</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/health-case-studies">Health Case Studies</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/supporting-individuals-with-intellectual-disabilities-mental-illness">Supporting Individuals with Intellectual Disabilities &amp; Mental Illness</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/field-trials-of-health-interventions-a-toolbox">Field Trials of Health Interventions: A Toolbox</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/clinical-procedures-for-safer-patient-care">Clinical Procedures for Safer Patient Care</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/creative-clinical-teaching-in-the-health-professions">Creative Clinical Teaching In The Health Professions</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/veterinary-epidemiology-principles-and-methods">Veterinary Epidemiology: Principles and Methods</a></li>
</ol>
<h3 id="heading-social-sciences">Social Sciences</h3>
<ol>
<li><a target="_blank" href="https://openstax.org/details/books/american-government-2e">American Government 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/american-government-3e">American Government 3e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/introduction-sociology-2e">Introduction to Sociology 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/introduction-sociology-3e">Introduction to Sociology 3e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-economics-2e">Principles of Economics 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-macroeconomics-2e">Principles of  Macroeconomics 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-microeconomics-2e">Principles of Microeconomics 2e</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/psychology-2e">Psychology 2e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/psychology-the-science-of-human-potential">Psychology: The Science of Human Potential</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/abnormal-psychology-1st-edition">Abnormal Psychology - 2nd Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-community-psychology">Introduction to Community Psychology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/an-introduction-to-psychological-statistics">An Introduction to Psychological Statistics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/human-behavior-and-the-social-environment-i-tyler">Human Behavior and the Social Environment I</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/human-behavior-and-the-social-environment-ii-payne">Human Behavior and the Social Environment II</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/language-and-culture-in-context-a-primer-on-intercultural-communication">Language and Culture in Context - A Primer on Intercultural Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/intercultural-communication">Intercultural Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/contemporary-families-an-equity-lens">Contemporary Families: An Equity Lens</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/child-growth-and-development">Child Growth and Development</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/child-family-and-community">Child, Family, and Community</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/parenting-and-family-diversity-issues">Parenting and Family Diversity Issues</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/interpersonal-communication-a-mindful-approach-to-relationships">Interpersonal Communication: A Mindful Approach to Relationships</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/attenuated-democracy">Attenuated Democracy: A Critical Introduction to U.S. Government and Politics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/foundations-of-social-work-research">Foundations of Social Work Research</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-human-geography-dorrell">Introduction to Human Geography - 2nd Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/beyond-race-cultural-influences-on-human-social-life">Beyond Race: Cultural Influences on Human Social Life</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/classical-sociological-theory-and-foundations-of-american-sociology-hurst">Classical Sociological Theory and Foundations of American Sociology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/speak-out-call-in-public-speaking-as-advocacy-mapes">Speak Out, Call In: Public Speaking as Advocacy</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-quick-guide-to-quantitative-research-in-the-social-sciences">A Quick Guide to Quantitative Research in the Social Sciences</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-balance-of-personality">The Balance of Personality</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-art-of-being-human-a-textbook-for-cultural-anthropology">The Art of Being Human: A Textbook for Cultural Anthropology</a></li>
</ol>
<h3 id="heading-humanities">Humanities</h3>
<ol>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/stand-up-speak-out-the-practice-and-ethics-of-public-speaking">Stand up, Speak out: The Practice and Ethics of Public Speaking</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/us-history">U.S. History</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/world-history-cultures-states-and-societies-to-1500">World History: Cultures, States, and Societies to 1500</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/modern-world-history-2021">Modern World History</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/international-relations">International Relations</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/becoming-america-an-exploration-of-american-literature-from-precolonial-to-post-revolution">Becoming America: An Exploration of American Literature from Precolonial to Post-Revolution</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/american-literature-i-an-anthology-of-texts-from-early-america-through-the-civil-war">American Literature I: An Anthology of Texts From Early America Through the Civil War</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/spanish-i-beginning-spanish-language-and-culture">Spanish I: Beginning Spanish Language and Culture</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/linguistics-for-teachers-of-english-russell">Linguistics for Teachers of English</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-changing-story-digital-stories-that-participate-in-transforming-teaching-learning">The Changing Story: digital stories that participate in transforming teaching &amp; learning</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/essentials-of-linguistics">Essentials of Linguistics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/technical-writing-2016">Technical Writing</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/let-s-get-writing">Let's Get Writing!</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/you-writing-a-guide-to-college-composition">You, Writing! A Guide to College Composition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/writing-for-success">Writing for Success</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/college-esl-writers-applied-grammar-and-composing-strategies-for-success">College ESL Writers: Applied Grammar and Composing Strategies for Success</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-sociology-2e">Introduction to Sociology - 2e</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-philosophy-philosophy-of-religion">Introduction to Philosophy: Philosophy of Religion</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-philosophy-philosophy-of-mind">Introduction to Philosophy: Philosophy of Mind</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/english-composition-connect-collaborate-communicate">English Composition: Connect, Collaborate, Communicate</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/studying-the-bible-the-tanakh-and-early-christian-writings-eiselein">Studying the Bible: The Tanakh and Early Christian Writings</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/philosophical-ethics">Philosophical Ethics</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/ethics-for-a-level">Ethics for A-Level</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/steps-to-success-crossing-the-bridge-between-literacy-research-and-practice">Steps to Success: Crossing the Bridge Between Literacy Research and Practice</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/exploring-public-speaking-2nd-revision">Exploring Public Speaking - 4th Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/plato-s-republic-an-introduction">Plato's 'Republic': An Introduction</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/decoding-the-1920s-a-reader-for-advanced-learners-of-russian">Decoding the 1920s: A Reader for Advanced Learners of Russian</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/an-introduction-to-technical-theatre">An Introduction to Technical Theatre</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/theatrical-worlds">Theatrical Worlds</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/understanding-basic-music-theory-2013">Understanding Basic Music Theory</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/music-theory-for-the-21st-century-classroom">Music Theory for the 21st-Century Classroom</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/music-on-the-move-fosler-lussier">Music on the Move</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-art-design-context-and-meaning">Introduction to Art: Design, Context, and Meaning</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/guide-to-ancient-egyptian-art-ezra">Guide to Ancient Egyptian Art</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/guide-to-ancient-roman-art-ezra">Guide to Ancient Roman art</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/guide-to-ancient-greek-art-ezra">Guide to Ancient Greek Art</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/moving-pictures-an-introduction-to-cinema">Moving Pictures: An Introduction to Cinema</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/naming-the-unnameable-an-approach-to-poetry-for-new-generations">Naming the Unnameable: An Approach to Poetry for New Generations</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/prose-fiction-an-introduction-to-the-semiotics-of-narrative">Prose Fiction: An Introduction to the Semiotics of Narrative</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/composing-mindfully-writing-fundamentals-atkinson">Mindful Technical Writing: An Introduction to the Fundamentals</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/explorations-1-grammar-for-the-experienced-beginner">Explorations 1: Grammar for the Experienced Beginner</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-logic-and-critical-thinking">Introduction to Logic and Critical Thinking</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/writing-and-literature-composition-as-inquiry-learning-thinking-and-communication">Writing and Literature: Composition as Inquiry, Learning, Thinking, and Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/british-literature-i-anthology-from-the-middle-ages-to-neoclassicism-and-the-eighteenth-century">British Literature I Anthology: From the Middle Ages to Neoclassicism and the Eighteenth Century</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/british-literature-ii-romantic-era-to-the-twentieth-century-and-beyond">British Literature II: Romantic Era to the Twentieth Century and Beyond</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/perspectives-an-open-invitation-to-cultural-anthropology">Perspectives: An Open Invitation to Cultural Anthropology</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-guide-to-good-reasoning-cultivating-intellectual-virtues">A Guide to Good Reasoning: Cultivating Intellectual Virtues - Second edition, revised and updated</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/inferring-and-explaining">Inferring and Explaining</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/exploring-perspectives-a-concise-guide-to-analysis">Exploring Perspectives: A Concise Guide to Analysis</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/empoword-a-student-centered-anthology-handbook-for-college-writers">EmpoWord: A Student-Centered Anthology &amp; Handbook for College Writers</a></li>
</ol>
<h3 id="heading-business">Business</h3>
<ol>
<li><a target="_blank" href="https://openstax.org/details/books/introduction-business">Introduction to Business</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/business-ethics">Business Ethics</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/business-law-i-essentials">Business Law 1 Essentials</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/entrepreneurship">Entrepreneurship</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/introduction-intellectual-property">Introduction to Intellectual Property</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/organizational-behavior">Organizational Behavior</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-financial-accounting">Principles of Financial Accounting</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-managerial-accounting">Principles of Managerial Accounting</a></li>
<li><a target="_blank" href="https://openstax.org/details/books/principles-management">Principles of Management</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-writing-style-guide">Business Writing Style Guide</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/financial-management-for-small-businesses-financial-statements-present-value-models">Financial Management for Small Businesses: Financial Statements &amp; Present Value Models</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/intermediate-microeconomicswith-microsoft-excel-2nd-edition-barreto">Intermediate Microeconomics with Microsoft Excel - 2nd Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-computers-365-lacher">Business Computers 365</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/problem-solving-in-teams-and-groups">Problem Solving in Teams and Groups</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/digital-accessibility-as-a-business-practice">Digital Accessibility as a Business Practice</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/management-communication">Management Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-financial-accounting-u-s-gaap-adaptation">Introduction to Financial Accounting: U.S. GAAP Adaptation</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/emarketing-the-essential-guide-to-online-marketing">eMarketing - The Essential Guide to Online Marketing</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-infrastructure-management">Fundamentals of Infrastructure Management</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/an-introduction-to-cooperation-and-mutualism">An Introduction to Cooperation and Mutualism</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/financial-strategy-for-public-managers">Financial Strategy for Public Managers</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/entrepreneurship-and-innovation-toolkit">Entrepreneurship and Innovation Toolkit</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-plan-development-guide">Business Plan Development Guide</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/project-management">Project Management</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introducing-marketing">Introducing Marketing</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-business">Fundamentals of Business - 3rd Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-law-and-the-legal-environment">Business Law and the Legal Environment</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/good-corporation-bad-corporation-corporate-social-responsibility-in-the-global-economy">Good Corporation, Bad Corporation: Corporate Social Responsibility in the Global Economy</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/guidelines-for-improving-the-effectiveness-of-boards-of-directors-of-nonprofit-organizations">Guidelines for Improving the Effectiveness of Boards of Directors of Nonprofit Organizations</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/small-business-management-in-the-21st-century">Small Business Management in the 21st Century</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-sustainable-business-case-book">The Sustainable Business Case Book</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/advanced-business-law-and-the-legal-environment">Advanced Business Law and the Legal Environment</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/electronic-commerce-the-strategic-perspective">Electronic Commerce: The Strategic Perspective</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/developing-new-products-and-services">Developing New Products and Services</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/focusing-on-organizational-change">Focusing on Organizational Change</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/human-relations">Human Relations</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/leading-with-cultural-intelligence">Leading with Cultural Intelligence</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/managerial-accounting">Managerial Accounting</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-english-for-success">Business English for Success</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/human-resource-management">Human Resource Management</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/international-business">International Business</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/mastering-strategic-management">Strategic Management</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/sustainability-innovation-and-entrepreneurship">Sustainability, Innovation, and Entrepreneurship</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-power-of-selling">The Power of Selling</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/principles-of-marketing">Principles of Marketing</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-legal-and-ethical-environment-of-business">The Legal and Ethical Environment of Business</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/money-and-banking">Money and Banking</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/risk-management-for-enterprises-and-individuals">Risk Management for Enterprises and Individuals</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/exploring-business">Exploring Business</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/international-finance-theory-and-policy">International Finance: Theory and Policy</a></li>
</ol>
<h3 id="heading-law">Law</h3>
<ol>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/law-school-materials-for-success">Law School Materials for Success</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-criminal-investigation-processes-practices-and-thinking">Introduction to Criminal Investigation: Processes, Practices and Thinking</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/ethics-in-law-enforcement">Ethics in Law Enforcement</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/criminal-law">Criminal Law</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/intellectual-property-law-the-information-society-cases-and-materials">Intellectual Property: Law &amp; the Information Society—Cases and Materials</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/wetlands-law-a-course-source">Wetlands Law: A Course Source</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/first-amendment-cases-controversies-and-contexts">First Amendment: Cases, Controversies, and Contexts - Second Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-indigo-book-a-manual-of-legal-citation-sprigman">The Indigo Book: A Manual of Legal Citation</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/fundamentals-of-business-law-randall">Fundamentals of Business Law</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-law-i-essentials">Business Law I Essentials</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/law-101-fundamentals-of-the-law">Law 101: Fundamentals of the Law</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/liberty-equality-and-due-process-cases-controversies-and-contexts-in-constitutional-law">Liberty, Equality and Due Process: Cases, Controversies, and Contexts in Constitutional Law</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-law-and-the-legal-environment">Business Law and the Legal Environment</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-the-american-criminal-justice-system">Introduction to the American Criminal Justice System</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-law-of-trusts">The Law of Trusts</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/sources-of-american-law-an-introduction-to-legal-research">Sources of American Law: An Introduction to Legal Research - 4th Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/basic-income-tax">Basic Income Tax - 8th Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/what-color-is-your-c-f-r">What Color is Your C.F.R.?</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/u-s-federal-income-taxation-of-individuals-2017">U.S. Federal Income Taxation of Individuals 2020</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-contracts-sales-and-product-liability">Introduction to Contracts, Sales and Product Liability</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/law-for-entrepreneurs">Law for Entrepreneurs</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/legal-aspects-of-corporate-management-and-finance">Legal Aspects of Corporate Management and Finance</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/legal-aspects-of-marketing-and-sales">Legal Aspects of Marketing and Sales</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-basic-legal-citation">Introduction to Basic Legal Citation</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/contract-doctrine-theory-practice-volume-1">Contract Doctrine, Theory &amp; Practice Volume 1</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/united-states-copyright-law">United States Copyright Law</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/land-use">Land Use</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/introduction-to-the-law-of-property-estate-planning-and-insurance">Introduction to the Law of Property, Estate Planning and Insurance</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/law-of-commercial-transactions">Law of Commercial Transactions</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/united-states-securities-law">United States Securities Law</a></li>
</ol>
<h3 id="heading-journalism-and-communication">Journalism and Communication</h3>
<ol>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/exploring-public-speaking-2nd-revision">Exploring Public Speaking - 4th Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/stand-up-speak-out-the-practice-and-ethics-of-public-speaking">Stand up, Speak out: The Practice and Ethics of Public Speaking</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/communication-in-the-real-world-an-introduction-to-communication-studies">Communication in the Real World: An Introduction to Communication Studies</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/launch-advertising-and-promotion-in-real-time">Launch! Advertising and Promotion in Real Time</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/business-communication-for-success">Business Communication for Success</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/understanding-media-and-culture-an-introduction-to-mass-communication">Understanding Media and Culture: An Introduction to Mass Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/information-strategies-for-communicators">Information Strategies for Communicators</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/tools-for-podcasting">Tools for Podcasting</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/digital-foundations-introduction-to-media-design-with-the-adobe-creative-cloud-revised-edition">Digital Foundations: Introduction to Media Design with the Adobe Creative Cloud - Revised Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/humans-r-social-media-open-textbook-edition">Humans R Social Media - Open Textbook Edition</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/writing-for-strategic-communication-industries">Writing for Strategic Communication Industries</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/open-technical-writing-an-open-access-text-for-instruction-in-technical-and-professional-writing">Open Technical Writing: An Open-Access Text for Instruction in Technical and Professional Writing</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/writing-for-electronic-media">Writing for Electronic Media</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/be-credible">Be Credible</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/language-and-culture-in-context-a-primer-on-intercultural-communication">Language and Culture in Context - A Primer on Intercultural Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/intercultural-communication">Intercultural Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/arguing-using-critical-thinking">Arguing Using Critical Thinking</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/writing-unleashed">Writing Unleashed: Content and Structure - 3.0</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/management-communication">Management Communication</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/oer-a-field-guide-for-academic-librarians">OER: A Field Guide for Academic Librarians</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/the-data-journalism-handbook">The Data Journalism Handbook</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/media-society-culture-and-you">Media, Society, Culture and You</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/message-processing-the-science-of-creating-understanding">Message Processing: The Science of Creating Understanding</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/media-innovation-and-entrepreneurship">Media Innovation and Entrepreneurship</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/a-guide-to-technical-communications-strategies-applications">A Guide to Technical Communications: Strategies &amp; Applications</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/graphic-design-and-print-production-fundamentals">Graphic Design and Print Production Fundamentals</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/media-studies-101">Media Studies 101</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/small-group-communication-forming-sustaining-teams">Small Group Communication: Forming &amp; Sustaining Teams</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/new-media-futures-faltesek">New Media Futures</a></li>
<li><a target="_blank" href="https://open.umn.edu/opentextbooks/textbooks/communication-affect-learning-in-the-classroom">Communication, Affect, &amp; Learning in the Classroom - 4th Edition</a>  </li>
</ol>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Machine Learning Systems Book Recommendations – Learn How to Build and Understand ML Systems ]]>
                </title>
                <description>
                    <![CDATA[ “Good friends, good books, and a sleepy conscience: this is the ideal life.”― Mark Twain I hope you’re reading this blog in your pjs looking forward to a rejuvenating and healthy weekend. I have been working on multiple projects lately, from creatin... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/machine-learning-systems-book-recommendations/</link>
                <guid isPermaLink="false">66d45f524a7504b7409c341f</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Machine Learning ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Harshit Tyagi ]]>
                </dc:creator>
                <pubDate>Fri, 07 May 2021 21:07:57 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/05/IMG_0596.JPG" medium="image" />
                <content:encoded>
                    <![CDATA[ <blockquote>
<p><em>“Good friends, good books, and a sleepy conscience: this is the ideal life.”</em><br><em>―</em> <strong><em>Mark Twain</em></strong></p>
</blockquote>
<p>I hope you’re reading this blog in your pjs looking forward to a rejuvenating and healthy weekend.</p>
<p>I have been working on multiple projects lately, from creating Machine Learing Engineering and Machine Learning Operations courses to developing end-to-end ML systems at scale. And I have realized that often times I am either revisiting a book that I’ve read or I’m referring to a book that I just skimmed through but never got the chance to really read.</p>
<p>This week, I want to share with you the books that I personally feel every ML enthusiast and practitioner should read to get a sense of the breadth of ideas and depth of this field.</p>
<p>It is a short and crisp list covering a majority of ML topics. It should be useful both for beginners getting started and intermediate-level professionals wanting to understand the intricacies of engineering successful ML systems.</p>
<p>So, here we go...</p>
<h2 id="heading-1-hands-on-machine-learning-with-scikit-learn-keras-and-tensorflow-2nd-editionhttpslearningoreillycomlibraryviewhands-on-machine-learning9781492032632"><a target="_blank" href="https://learning.oreilly.com/library/view/hands-on-machine-learning/9781492032632/">#1 — Hands-On Machine Learning with Scikit-Learn, Keras and TensorFlow, 2nd Edition</a></h2>
<p><strong>By Aurélien Géron</strong></p>
<p>This book is simply a work of art. I highly recommend not just reading this book but also coding along with the author.</p>
<p>The book is divided into two parts — the first part is focused on the <strong>fundamentals of machine learnin</strong>g and covers all the major classic ML algorithms. It has just the right amount of mathematical explanation and Python code to actually start developing models.</p>
<p>The the second part focuses on <strong>neural networks</strong> and <strong>deep learning</strong>.</p>
<p>I have read through this complete book and have maybe read a few chapters two or three times in order to get the concepts right and do the exercises.</p>
<p><strong>Reading tip</strong> for this one: Spend 2–3 days (or more if needed) with each chapter if you’re spending 2–3 hours learning actively.</p>
<h2 id="heading-2-machine-learning-engineeringhttpwwwmlebookcomwikidokuphp"><a target="_blank" href="http://www.mlebook.com/wiki/doku.php">#2 — Machine Learning Engineering</a></h2>
<p><strong>By Andriy Burkov</strong></p>
<p>Andriy has done it again. This book explains each phase of the ML Systems Lifecycle and is a complete and concise resource for anyone who intends to build scalable ML-powered applications.</p>
<p>The book is a compilation of engineering challenges and best practices to make ML work in production. Andriy explains how you should look to plan a project, why projects might fail, and how to approach every step . Here are the sections in this book:</p>
<ul>
<li><p><a target="_blank" href="http://bit.ly/MLEbook-Chapter2">Before the Project Starts</a></p>
</li>
<li><p><a target="_blank" href="http://bit.ly/MLEbook-Chapter3">Data Collection and Preparation</a></p>
</li>
<li><p><a target="_blank" href="http://bit.ly/MLEbook-Chapter4">Feature Engineering</a></p>
</li>
<li><p><a target="_blank" href="http://bit.ly/MLEbook-Chapter5">Supervised Model Training</a></p>
</li>
<li><p><a target="_blank" href="http://bit.ly/MLEbook-Chapter7">Model Evaluation</a></p>
</li>
<li><p><a target="_blank" href="http://bit.ly/MLEbook-Chapter8">Model Deployment</a></p>
</li>
<li><p><a target="_blank" href="http://bit.ly/MLEbook-Chapter9">Model Serving, Monitoring, and Maintenance</a>.</p>
</li>
</ul>
<p>His first book,  <strong>The Hundred-Page Machine Learning</strong> <strong>Book</strong>, was a great success and the same can be said about this one as well.</p>
<h2 id="heading-3-practical-deep-learning-for-cloud-mobile-and-edgehttpslearningoreillycomlibraryviewpractical-deep-learning9781492034858"><a target="_blank" href="https://learning.oreilly.com/library/view/practical-deep-learning/9781492034858/">#3 — Practical Deep Learning for Cloud, Mobile, and Edge</a></h2>
<p><strong>By Anirudh Koul, Siddha Ganju, and Meher Kasam</strong></p>
<p>The book follows the practical advice that you should learn by doing. It's a hands-on guide to building Deep Learning applications for the cloud, mobile browsers, and edge devices. I am currently reading this book and I am surprised that I didn’t stumble upon it before.</p>
<p>Every chapter helps you build an application end-to-end. Each application targets a subdomain of deep learning, a different serving method, or techniques to optimize experimentation using TensorFlow.</p>
<p>It's a must-read for people already familiar with deep learning. This book helps you dive deeper and learn by building a set of cool projects.</p>
<h2 id="heading-4-building-machine-learning-pipelineshttpslearningoreillycomlibraryviewbuilding-machine-learning9781492053187"><a target="_blank" href="https://learning.oreilly.com/library/view/building-machine-learning/9781492053187/">#4 — Building Machine Learning Pipelines</a></h2>
<p><strong>By Hannes Hapke and Catherine Nelson</strong></p>
<p>After reading a number of case studies on how organizations like Spotify and Airbnb are using TF Extended to improve their ML platforms, I started learning about TFX. It can really help you optimize the development of end-to-end pipelines.</p>
<p>The book explains techniques to set up ML pipelines right through from data ingestion to pipeline orchestration using Airflow or Kubeflow. TFX along with TF offers tools for every step of the process.</p>
<p>This is an advanced-level read, and you should indulge only after you are done reading the top two recommendations.</p>
<h2 id="heading-interesting-read-of-the-week">Interesting Read of the Week</h2>
<p>This is a slightly unusual recommendation compared to what I usually write about. But I couldn’t resist sharing it with you because of the sheer quality of the work here.</p>
<p>Do you understand how an internal combustion engine works? How all of these parts come together to power your vehicles and machines? Well, I have come across the best possible explanation of the functionality of all the basic engine parts.</p>
<h3 id="heading-read-the-article-internal-combustion-engine-by-bartosz-ciechanowskihttpsciechanowskiinternal-combustion-engine"><a target="_blank" href="https://ciechanow.ski/internal-combustion-engine/">Read the article: Internal Combustion Engine by Bartosz Ciechanowski</a></h3>
<p>The beautifully designed, 360 degree, in-action illustrations along with the explanation not only help you understand combustion engines, but for my part it definitely inspired me to work harder on my art.</p>
<p>This made me question whether our education system is doing enough to inspire us or are they just getting away with “teaching” us.</p>
<h3 id="heading-thanks-for-reading">Thanks for reading!</h3>
<p>That’s it for this week. I don’t want to bog you down with a plethora of random ML books. Feel free to reach out if you have any thoughts, recommendations, or questions.</p>
<p>If this tutorial was helpful, you should check out my data science and machine learning courses on <a target="_blank" href="https://www.wiplane.com/">Wiplane Academy</a>. They are comprehensive yet compact and helps you build a solid foundation of work to showcase.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Write Your First Technical Book: Tools, Techniques, and Resources for First-time Developer Authors ]]>
                </title>
                <description>
                    <![CDATA[ By Shubham Chadokar Recently, I wrote my first technical book – yes, I finally finished it. ?This project was on my list for a long time. And now that I've finally completed it, I'd like to share my experience with everyone. In this post, I tried to ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-write-your-first-technical-book/</link>
                <guid isPermaLink="false">66d460f073634435aafcefc0</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technical writing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ writing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ writing tips ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 22 Sep 2020 19:35:55 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/09/writing-cover.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Shubham Chadokar</p>
<p>Recently, I wrote my first technical book – yes, I finally finished it. ?<br>This project was on my list for a long time. And now that I've finally completed it, I'd like to share my experience with everyone.</p>
<p>In this post, I tried to document my complete journey of writing the book. I discuss everything motivation and hurdles to tools, techniques and resources.</p>
<p>My book focuses on the <a target="_blank" href="https://schadokar.dev/ebooks/">Hyperledger Composer Blockchain</a> tool. It is completely free and right now is only available in PDF format.  </p>
<p>All these points are equally helpful for technical blog writing. So let's get started and dive into what I learned.</p>
<h1 id="heading-motivation">Motivation</h1>
<p>I have been writing technical articles and tutorials since late 2018. By now I am quite comfortable with the process of writing an article or a tutorial. I understand how to approach the article and which tools I should use.</p>
<p>But when it comes to book writing – and especially a technical book – the arena is quite different. </p>
<p>My motivation was curiosity. I wondered how authors write books. What is their thought process? What tools do they use? And of course, how does it feel to write a book? ?</p>
<p>I am a Software Engineer and I have been working on Blockchain since 2018. I have learned about different blockchains like Ethereum and Hyperledger Fabric. I have also used many tools like <a target="_blank" href="https://www.trufflesuite.com/">truffle</a>, <a target="_blank" href="https://remix.ethereum.org/">remix</a> and <a target="_blank" href="https://hyperledger.github.io/composer/">hyperledger composer</a>.</p>
<p>There were a few different things I wanted to write about, like <strong>Ethereum</strong> or <strong>Hyperledger Fabric</strong>. </p>
<p>But since it was my first book, these topics were not ideal for me. They would've required a lot more time and effort than I could give. So, I picked a simple one: Hyperledger Composer.</p>
<h1 id="heading-first-hurdle">First Hurdle</h1>
<p>Before getting started, I wondered which tool or editor I should use to write the book. </p>
<p>Should I write in MS Word, Google Docs, or use something else?<br>The major issue was how to format code snippets correctly. These editors are not designed for technical writing. </p>
<p>There are different work arounds to add code, but it would require additional formatting.  </p>
<p>I read lots of articles about <strong>what good tools are available for technical book writing.</strong> I tried many of them, but I wasn't happy with any of them. I wasted a lot of time finding the perfect tool.  </p>
<p>In the end, I realized that editors only ease the writing process and make managing the book simpler. But what really matters is the content. So, I stopped searching for the perfect editor and went to the basics.</p>
<h2 id="heading-the-basics-vs-code">The basics: VS Code</h2>
<p>I used my favourite code editor to write the book. Yes, <strong>VS Code</strong> ?. </p>
<p>After spending days searching around on the Internet, not a single article suggested that you need any specific tool or editor to write a technical book. VS Code or Atom would be more than enough.</p>
<p>I wrote the whole book in <strong>VS Code</strong> in my favourite markdown format. To make my writing easier, I used a couple of markdown plugins like <strong>Markdown All in One</strong> and <strong>Markdown Preview Enhanced</strong>.  </p>
<p>The first plugin helps you write markdown while the second helps in preview mode. It shows how the markdown will look and behave after converting it into HTML or other formats. </p>
<p><strong>Markdown All in One</strong> also has a preview mode, but <strong>Markdown Preview Enhanced</strong> has multiple themes and options to export the markdown file in HTML, PDF, and other readable formats like epub or Mobi. </p>
<p>Just a heads up – those other formats require that you install <strong>Pandoc</strong> on your machine.</p>
<blockquote>
<p>I am a Windows User. For Mac Users, I found there are many great editors available like <a target="_blank" href="https://bear.app/">bear</a>, <a target="_blank" href="https://ulysses.app/">ulysses</a> and many others.</p>
</blockquote>
<p>Recently, I discovered that there are many markdown editors available on <strong>Windows</strong> and <strong>MacOS</strong> which you can use for book writing. Check out <a target="_blank" href="https://www.notion.so/">Notion</a>, <a target="_blank" href="https://typora.io/">Typora</a>, <a target="_blank" href="https://ia.net/writer">iA Writer</a>, and <a target="_blank" href="https://simplenote.com/">SimpleNote</a>.</p>
<p>Bottom line <strong>Don't waste too much time finding the perfect editor</strong>. Just start writing in your editor of choice. With time you'll figure it out.</p>
<h1 id="heading-second-hurdle">Second Hurdle</h1>
<p>Then I started asking myself, from where should I start writing? How should I write? How should I approach it?  </p>
<p>In short, I wanted to know how exactly I should write this book so that the reader would get the most out of it.</p>
<p>These questions made me scratch my head a lot. In the beginning, I changed my approach 4 or 5 times.  </p>
<p>At this point, I suggest spending some time to really ponder your approach. Because once you're in the middle of the book, it is not going to be an easy task to change it.</p>
<h3 id="heading-ask-the-questions">Ask the questions</h3>
<p>I asked myself these questions about the book and noted my thoughts down.</p>
<ol>
<li>Who is my target audience? Are they beginner, intermediate, or expert?</li>
<li>Do they need some prior knowledge of the subject? </li>
<li>How should I organize the book?</li>
<li>How should I name the files or chapters so it's easy to find each topic?</li>
<li>How should I track my progress?</li>
<li>How should I maintain the versions of the chapters and drafts of the book? There will be a number of occasions that last edit was actually much better than the current version.</li>
</ol>
<p>These are a few basic questions which I asked, and they were helpful.</p>
<h2 id="heading-my-approach">My approach</h2>
<p>I'll now describe the approach I took to writing this book.</p>
<h3 id="heading-create-a-todo-list">Create a todo list</h3>
<p>First, I created a to-do list. In this list, I noted down all the main points, topics, sub-topics, references, preface, cover, title and so on. </p>
<p>I pretty much added all the thoughts that came to mind about the book.</p>
<p>I would suggest creating 2 todo lists: one on paper and the same as a soft copy.  </p>
<p>First, note down all the points on paper. Once you note down everything, read it 2-3 times. Then whatever new ideas pop into your head, note them down. </p>
<p>For example, if you think about how you're going to explain a particular topic, note it down. It will make your work much easier. Then when you start writing about that topic, you can refer to these notes.</p>
<p>Once you have a <strong>todo</strong> list on paper, create a soft copy and save all the points in chronological order.  </p>
<p>This is what my <strong>todo</strong> list used to look like:</p>
<h4 id="heading-tasks">Tasks</h4>
<ul>
<li>[x] Index</li>
<li>[x] Cover</li>
<li>[x] Title</li>
<li>[x] Subtitle</li>
<li>[x] Preface</li>
<li>[x] What is Blockchain and Hyperledger Fabric?</li>
<li>[x] Introduction to Hyperledger Composer</li>
<li>[x] Environment Requirements and Setup<ul>
<li>[x] Azure</li>
<li>[x] AWS</li>
<li>[x] GCP</li>
</ul>
</li>
<li>[x] Project Objective</li>
<li>[x] Project Setup in Composer</li>
<li>[x] Model File<ul>
<li>[x] Definition</li>
<li>[x] Modeling Language</li>
<li>[x] project code</li>
</ul>
</li>
<li>[x] Script File<ul>
<li>[x] Definition</li>
<li>[x] syntax</li>
<li>[x] project code</li>
</ul>
</li>
<li>[x] Query File<ul>
<li>[x] Definition</li>
<li>[x] Query Language</li>
<li>[x] project code</li>
</ul>
</li>
<li>[x] ACL File<ul>
<li>[x] Definition</li>
<li>[x] syntax</li>
<li>[x] project code</li>
</ul>
</li>
<li>[x] Deployment in Composer Playground</li>
<li>[x] Testing in Composer Playground</li>
<li>[x] Export the .bna</li>
<li>[x] Composer Rest Server</li>
<li>[x] Frontend</li>
<li>[x] Conclusion</li>
<li>[x] References</li>
<li>[x] About Me</li>
<li>[x] Grammar Check 1</li>
<li>[x] Grammar Check 2</li>
<li>[x] Read the draft</li>
<li>[x] Read the final draft</li>
<li>[x] PDF format</li>
<li>[x] Add page no. to PDF</li>
<li>[x] New chapter starts from the new page</li>
<li>[x] Thank You Note</li>
<li>[x] License</li>
<li>[x] End cover</li>
</ul>
<p>I used markdown format for my <strong>todo</strong> list. You can use whatever format is easiest for you.</p>
<h2 id="heading-start-small-but-do-start">Start Small but Do Start</h2>
<p>Keep in mind that you don't need to write about each topic in order. There might be many topics which depend on previous topics, but others won't. </p>
<p>Also, you don't have to finish writing about the topic all at once either. Whatever topics you are feeling comfortable with, start there.</p>
<p>Your goal should be to start the book. Aim to write 10-20% of your book within a couple of weeks. Once you start, it will keep reminding you that you have to complete the book. In time you'll realize that this turns into a great motivator.</p>
<p>If there is a topic you don't know as much about, don't worry. Don't hesitate to get help from the Internet. Read how other people explained it. Take inspiration and then write about it in your way. </p>
<p>And remember – If you use any content from other people's work, make sure you inform them, cite it properly in your text, and list their work as a reference at the end.</p>
<blockquote>
<p>Consider this as a professional courtesy. -- John Wick ?</p>
</blockquote>
<h2 id="heading-chronological-order">Chronological Order</h2>
<p>It took me a while to understand the importance of having a file naming convention. </p>
<p>At first I started following a <em>Chapter 1</em>, <em>Chapter 2</em> naming convention for each topic. It turned out to be a terrible idea. </p>
<p>The problem with this naming scheme is that you have to maintain a separate file where you explain what is in the file. Or you have to open each file to see what it contains. </p>
<p>Another problem is that if you add a new chapter in between then you have to rename all the following chapters.</p>
<p>There are two conventions I found helpful, but each has its disadvantages.</p>
<p>One option is to use <strong>chapternumber-topic</strong>: Name the file as a chapter number followed by the topic of the chapter. Like this <strong>10-Introduction-of-Blockchain</strong>. </p>
<p>Name the chapter number in 2 digits. This will help you add sub-sections to the same chapter in different files. Like this <strong>11-History-of-Blockchain</strong>. </p>
<p>Another benefit of this naming convention is it will show all the files in the order of your book chapters.</p>
<p><strong>Disadvantage:</strong> Adding new chapter in between requires that you rename all the following chapters.</p>
<p>The second option is to use <strong>filename as topic</strong>: Name all the files as the topic name. This will give you the freedom to write topics in random order. And you can maintain the order of the book in your todo list.</p>
<p><strong>Disadvantage:</strong> All the files will be arranged in alphabetical order. After 10-15 files it will be difficult to track all the files, and it'll be harder to put them together in a draft.</p>
<p>In the end, I followed the second method. It worked alright for me.</p>
<p>To create a draft, I created a Node.js script. In this script, I entered all the topics in an array. Then I created a draft file and appended all the topics in it. Of course by reading them first ?. A few perks of being a Software Engineer ?.</p>
<p>This script was a saviour when I was editing. Many times I updated the topics or pictures within them. I fixed grammatical mistakes. Here Grammarly really saved me...but not completely as I was using the free version. ?</p>
<h2 id="heading-chronicle-of-the-book-journey">Chronicle of the book journey</h2>
<p>Writing a book is not a sprint, it is a marathon. Always save your work when you complete a topic or are done for the day. </p>
<p>The next day, you might get a new idea for the same topic which you already completed. You might spend an hour on it, but it doesn't look good. In this case, UNDO is great but it also has limitations (and its limits vary from editor to editor). <strong>Do not test its limits too much</strong>.</p>
<p>Instead of relying on the editor or making duplicate copies, I used <strong>Git</strong> for version control. Don't think that <strong>git</strong> can only be used for managing your code. It is a versitile tool and its applications are only limited by your imagination.</p>
<p>For the readers who don't know about <strong>git</strong>:</p>
<blockquote>
<p>Git is a distributed version control system for tracking changes in source code during software development. It is designed for coordinating work among programmers, but it can be used to track changes in any set of files. --<a target="_blank" href="https://en.wikipedia.org/wiki/Git">Wikipedia</a></p>
</blockquote>
<p>You don't have to learn everything about <strong>git</strong> to use it for writing. The basic commands like <strong>init</strong>, <strong>add</strong>, <strong>commit</strong>, <strong>logs</strong> and <strong>checkout</strong> are more than enough for you to maintain your versions and keep your text accessible and safe.  </p>
<p>There are many Git code hosting platforms available, like <a target="_blank" href="https://github.com/">GitHub</a>, <a target="_blank" href="https://about.gitlab.com/">GitLab</a> and others. To host your book on one of these platforms, you can follow the below steps:</p>
<ol>
<li>Create an account. My personal choice is <strong>GitHub</strong>.</li>
<li>Create a private repository with default choices. You can change its visibility to public in the future.</li>
<li>Follow the instructions provided once the repository is created. Basically, in this step, you're connecting your local <strong>Git</strong> to your hosted repository.</li>
<li>Learn 2 more commands, <strong>push</strong> and <strong>pull</strong>. Use <strong>push</strong> to push the local changes to the cloud repo and use <strong>pull</strong> to get the content from the cloud.</li>
</ol>
<p>After this, whenever you make any changes, just <strong>add</strong>, <strong>commit</strong> and <strong>push</strong>. Simple, isn't it? ?  </p>
<p>After a couple of commits, you will feel comfortable with <strong>git</strong>.  </p>
<blockquote>
<p>Check out this amazing article to learn more: <a target="_blank" href="https://www.freecodecamp.org/news/learn-git-and-version-control-in-an-hour/">Learn Git and Version Control in an Hour</a></p>
</blockquote>
<h1 id="heading-the-tools-and-resources-i-used">The tools and resources I used</h1>
<p>I used many tools and resources while writing, editing, formatting and designing the book.</p>
<h2 id="heading-writing">Writing</h2>
<p>For writing, I used the VS Code editor with a couple of markdown plugins, as I've discussed above.</p>
<p>For emojis, I used <a target="_blank" href="https://getemoji.com/">copy and paste emojis</a>.</p>
<h2 id="heading-editing">Editing</h2>
<p>For correcting grammatical mistakes I used the free version of Grammarly. In the free version, it corrects all the basic mistakes like incorrect or missing articles, prepositions, commas, and so on.</p>
<p>I used the <a target="_blank" href="https://www.ilovepdf.com/add_pdf_page_number">online pdf editor</a> to add page numbers to the book.</p>
<h2 id="heading-formatting">Formatting</h2>
<p>I used the Markdown in Preview plugin in VS Code to generate the PDF format. I used the default Git markdown formatting. You can change the formatting in the settings.</p>
<h3 id="heading-page-breaks-in-the-pdf">Page breaks in the PDF</h3>
<p>As I was writing in markdown format, the PDF output was inconsistent. For example, it starts a new topic from the last page instead of from a new page. </p>
<p>To fix this, I used the page break <code>html</code> code at the end of each topic.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"page-break-after:always;"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>This will make the content that follows it start on a new page.<br>You can also add the end of the page-sequence like *<strong>****</strong> this.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"page-break-after:always; display:block; text-align:center; border:none"</span>&gt;</span>*****<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<h3 id="heading-about-me-page">About Me Page</h3>
<p>In the <strong>About Me</strong> section of my book, I divided the content into two columns: a brief about me and a profile picture. </p>
<p>It took me a while to realize the full capabilities of the markdown format. We can add plain <code>html</code> code in it. Here's what my "about me" page says:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> &gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">align</span>=<span class="hljs-string">"right"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"padding-left:65px"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../images/profilepic.JPEG"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"400px"</span> <span class="hljs-attr">height</span>=<span class="hljs-string">"450px"</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>

Hello, I am **_Shubham Kumar Chadokar_**.

I am a Software Engineer and in my short career of almost 4 years, I've had the opportunity to work on Blockchain, Nodejs, Golang, and Docker.

I've learned about other tech as well, but these are my primary focus. I love to write articles and tutorials on new tech by following a hands-on approach. This is my first book.

Front end development isn't my specialty, and that's why I didn't include it in the book.

If you have any queries or questions, please feel free to drop me an email.

:e-mail: [hello@schadokar.dev](hello@schadokar.dev)
:globe_with_meridians: [schadokar.dev](https://schadokar.dev)
<span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://github.githubassets.com/images/icons/emoji/octocat.png"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"width:20px;"</span> /&gt;</span>[github.com/schadokar](https://github.com/schadokar)
</code></pre>
<p>For octacat, I used the <code>img</code> tag.</p>
<p>It looks like this.  </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/about-me-3.PNG" alt="about-me-3" width="600" height="400" loading="lazy"></p>
<h3 id="heading-thank-you-page">Thank You Page</h3>
<p>I added a thank you page to express my gratitude to the <strong>Hyperledger Composer Community</strong> for their work. I tried to add the content in the middle of the page.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"padding-top:40%; text-align: center; font-size:35px;"</span>&gt;</span>
Thank You <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/240/microsoft/209/person-with-folded-hands_1f64f.png"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"width:40px"</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"text-align: center; font-size:25px;"</span>&gt;</span>
I especially want to thanks the entire
<span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://github.com/hyperledger/composer/graphs/contributors"</span>&gt;</span>Hyperledger Composer Community<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span> for creating such
an amazing tool. Many developers entered into the blockchain domain because of the simplicity of the composer. <span class="hljs-tag">&lt;<span class="hljs-name">br</span> /&gt;</span>
It is unfortunate that it is deprecated but it sets a great example of easy automation,
wrapping a complex Hyperledger Fabric into the easy to use Hyperledger Composer.
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>It looks like this.  </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/thanks-note.PNG" alt="thanks-note" width="600" height="400" loading="lazy">  </p>
<h2 id="heading-book-title-and-sub-title">Book Title and Sub-title</h2>
<p>The book title should make the contents of the book clear in a few words or one short sentence. </p>
<p>While you're writing the book, note down all the keywords you use. This will help you to come up with a great title. You want to capture the essence of the book and let readers know, for example, whether it's theoretical or more hands-on.</p>
<p>A sub-title should give readers more detail about what they will get from this book or what they are going to learn. </p>
<p>A one sentence sub-title is ideal, and shouldn't be any longer than two sentences. Don't overdo it – let readers read the book. The idea is to give readers a taste of the complete book in one sentence but still not to tell anything ?.</p>
<p>My book title is <strong><em>Playtime with Hyperledger Composer</em></strong> and sub-title is <strong>Create a supply chain management project in Blockchain using Hyperledger Composer</strong>.</p>
<p>When you start writing your book, don't spend much time on the book title. When you finish writing, you'll be in a much better position to decide the book title. Everything is written, you know what it is all about, and what others will get from it. </p>
<p>In my case, I changed the book title and book cover at the last moment before publishing it. Before that, it was so boring ?.</p>
<h2 id="heading-designing-the-book-cover">Designing the Book Cover</h2>
<p>You might have heard the idiom <strong>Don't judge a book by its cover</strong>.<br>But the harsh reality is, a book's cover is very important. It is the face of the book. </p>
<p>Try to keep it simple and informative. Don't overdo it. A simple title and a short subtitle with an image or two is more than enough.   </p>
<p>I started designing the book cover by taking references from other books, and trying to edit them in Paint. The result was a complete disaster, and I couldn't think of anything good. </p>
<p>Then I realized that <em>designing is not my cup of tea</em>. I decided to hire a freelancer for this, so I checked out freelancing sites like <strong>UpWork</strong> and <strong>Fiverr</strong>.</p>
<p>Then, I found <a target="_blank" href="https://canva.com"><strong>Canva</strong></a>. It's such a great tool. Amazing! ? ? ? ?</p>
<blockquote>
<p>Canva is a graphic design platform that allows users to create social media graphics, presentations, posters and other visual content. It is available on web and mobile and integrates millions of images, fonts, templates and illustrations. <a target="_blank" href="https://en.wikipedia.org/wiki/Canva">Wikipedia</a></p>
</blockquote>
<p>I used one of the templates from the canva book cover section and created my book cover. Not bad, right? ?</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/book-cover.png" alt="book-cover" width="600" height="400" loading="lazy"></p>
<h2 id="heading-license">License</h2>
<p>I wrote this book out of curiosity and for fun. So, I wanted it to be free, and open-source, but I didn't want others to monetize it. Without a license, there are no restrictions.  </p>
<p>I searched for a while and found a great answer on StackOverflow regarding free licenses, <a target="_blank" href="https://creativecommons.org/licenses/">Creative Commons Licenses</a>.</p>
<blockquote>
<p><strong>Creative Commons is a nonprofit organization that helps overcome legal obstacles to the sharing of knowledge and creativity to address the world’s pressing challenges.</strong></p>
</blockquote>
<p>They have provided a <a target="_blank" href="https://creativecommons.org/choose/">form</a> with a couple of questions related to what kind of license you want. Fill out the form and voilà ?, your license is ready. Copy and paste it or use the embedded link.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/license.PNG" alt="license" width="600" height="400" loading="lazy"></p>
<h1 id="heading-publishing-your-book">Publishing your book</h1>
<p>There are many options you can choose from to publish your book. You can approach a publishing house and send in your draft. If they want to publish you can go ahead and secure a deal. </p>
<p>After this, the publishing house takes care of other processes like formatting, editing your book, creating an attractive book cover, all the licensing, the publishing process, and most importantly marketing.</p>
<p>In short, if you want to monetize your book and you're expecting a good amount, then a publishing house is the best option available.</p>
<p>Another option is self-publishing. Yes, we can self-publish our own books. Amazon's <a target="_blank" href="https://kdp.amazon.com/en_US/">Kindle Direct Publishing</a> provides a great platform for this. It is free and it publishes the book worldwide. </p>
<p>You'll get 70% of the profits for each sale. The kdp take cares of all the publishing process. You just have to write the book, upload it and format it. </p>
<p>You simply enter the price you want to charge, along with some basic info about the book and and yourself. You can follow their tutorials for more info – they have done a great job.</p>
<p>But I wanted to keep my book free and didn't have the patience for the above processes. So, I self-published it without using any third party. </p>
<p>I just converted the book to PDF format and saved it in an AWS S3 Bucket so that anyone can download it. Then I hosted the book on my website. Simple. ?</p>
<h1 id="heading-share-your-work">Share your work</h1>
<p>Once you complete your masterpiece, it is time to show it to the world.<br>If you haven't teamed up with a publisher or even if you did, you have to spread the word.</p>
<p>These are the few platforms I used, but don't limit yourself.</p>
<h2 id="heading-linkedin">LinkedIn</h2>
<p>LinkedIn is a professional platform and many developers are on it, no matter their specialty in the tech world. You'll also find people of every profession, you name it. </p>
<p>Share your work with them, ask for feedback. 90% of the time you'll get a reply. I shared my work with Dan Selmon, one of the Hyperledger Composer contributors, as well as Srinivas Mahankali, who wrote many books on Blockchain. </p>
<p>They were both very helpful and gave their honest feedback. I am thankful to Dan, who even offered to share the book among his network on LinkedIn and Twitter. ?</p>
<h2 id="heading-reddit">Reddit</h2>
<p>Reddit is a community hub. You will find many active communities on various subjects here. You just have to join the community that's relevant to your work and share it there. </p>
<p>You'll find a lot of active members on Reddit, in these groups, and they are not shy to share their opinion. If there is a room for improvement, some of them might offer to help. </p>
<p><em>But before sharing, DO READ THE GUIDELINES. If you violate any of them, they will remove your post</em>.</p>
<h2 id="heading-twitter">Twitter</h2>
<p>Twitter is not just a social platform where people share their opinions. So don't underestimate it. </p>
<p>If you like facts and figures, here you go: there are 1.3+ billion accounts on Twitter, 330 million monthly active users, 152 million daily active users and 500 million tweets per day. This is huge. </p>
<p>You just have to craft your message and select the right keywords within the 280 characters limit and you can potentially reach a large audience.</p>
<h2 id="heading-blogs">Blogs</h2>
<p>Do some research and figure out which publications or digital magazines publish articles in your book's category. Share your book summary and details with them. </p>
<p>Ask them if they can write an article about your book. Or you can write an article about your book and share the draft with those publications.</p>
<p>There are also many other platforms you can try – just do a bit of digging.</p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>This was my first experience writing a book. It took some time but it was worth it. Now, I have another badge on my portfolio. ?</p>
<p>I learned a lot from this experience. This article serves as documentation of all my learning for anyone who wants to write their first book or their next book.</p>
<p>Below is the final list of tools I've used so far.<br>Any suggestions for others are most welcome.</p>
<p>Thank you for reading and don't forget to share your first book with me. ?</p>
<h1 id="heading-final-list-of-tools-i-used">Final List of Tools I used</h1>
<ul>
<li><strong>Editor</strong>: <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> with 2 Markdown plugins</li>
<li><strong>Versioning Tool</strong>:Git and <a target="_blank" href="https://github.com">GitHub</a></li>
<li><strong>Emojis</strong>: <a target="_blank" href="https://getemoji.com/">Copy and Paste emojis</a></li>
<li><strong>Grammar Check</strong>: <a target="_blank" href="https://app.grammarly.com/">Grammarly</a></li>
<li><strong>License</strong>: <a target="_blank" href="https://creativecommons.org/licenses/">Creative Commons Licenses</a></li>
<li><strong>Cover Design</strong>: <a target="_blank" href="https://www.canva.com/">Canva</a></li>
<li><strong>PDF page number</strong>: <a target="_blank" href="https://www.ilovepdf.com/add_pdf_page_number">online pdf editor</a></li>
<li><strong>eBook storage</strong>: <a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html">AWS S3 bucket</a>.</li>
<li><strong>Book Hosting</strong>: <a target="_blank" href="https://schadokar.dev/ebooks/">On my blog</a></li>
</ul>
<h2 id="heading-thanks-for-reading">Thanks for Reading</h2>
<p>If you have any feedback or suggestions to help me improve this article please connect with me on <a target="_blank" href="https://twitter.com/schadokar1">twitter</a> or <a target="_blank" href="hello@schadokar.dev">email</a> me.  </p>
<ul>
<li><a target="_blank" href="https://schadokar.dev">Read my other articles</a></li>
<li>Subscribe to <a target="_blank" href="https://schadokar.dev/newsletter/">My Newsletter</a></li>
</ul>
<p><span>Cover photo by <a href="https://unsplash.com/@thoughtcatalog?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Thought Catalog</a> on <a href="https://unsplash.com/s/photos/writers?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Best Computer Programming Books to Help You Learn to Code ]]>
                </title>
                <description>
                    <![CDATA[ Here are some book recommendations covering everything from general programming knowledge to language-specific information. Happy reading! General Automate the Boring Stuff With Python by Al Sweigart http://automatetheboringstuff.com/ ISBN-13: 978-1... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/best-computer-programming-books-to-help-you-learn-to-code/</link>
                <guid isPermaLink="false">66c345804f7405e6476b0180</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ reading ]]>
                    </category>
                
                    <category>
                        <![CDATA[ toothbrush ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 28 Jan 2020 01:11:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9d5a740569d1a4ca3751.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Here are some book recommendations covering everything from general programming knowledge to language-specific information. Happy reading!</p>
<h2 id="heading-general"><strong>General</strong></h2>
<p><em>Automate the Boring Stuff With Python</em> by Al Sweigart</p>
<ul>
<li><a target="_blank" href="http://automatetheboringstuff.com/">http://automatetheboringstuff.com/</a></li>
<li>ISBN-13: 978-1593275990</li>
</ul>
<p><em>Structure and Interpretation of Computer Programs</em> by Harold Abelson, Gerald Jay Sussman, and Julie Sussman</p>
<ul>
<li><a target="_blank" href="https://mitpress.mit.edu/sicp/">https://mitpress.mit.edu/sicp/</a></li>
<li>ISBN-13: 978-0262510875</li>
</ul>
<p><em>Clean Code: A Handbook of Agile Software Crafstmanship</em> by Robert C. Martin</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882?sa-no-redirect=1">Amazon Smile</a></li>
<li>ISBN-13: 978-0132350884</li>
</ul>
<p><em>CODE: The Hidden Language of Computer Hardware and Software</em> by Charles Petzold</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1508780869&amp;sr=1-1&amp;keywords=code">Amazon Smile</a></li>
<li>ISBN-13: 978-0735611313</li>
</ul>
<p><em>Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability by Steve Krug</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Dont-Make-Think-Revisited-Usability/dp/0321965515/ref=sr_1_1?ie=UTF8&amp;qid=1538370339&amp;sr=8-1&amp;keywords=dont+make+me+think">Amazon Smile</a></li>
<li>ISBN-13: 978-0321965516</li>
</ul>
<p><em>Programming Pearls (2nd Edition) by Jon Bentley</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880">Amazon Smile</a></li>
<li>ISBN-13: 978-0201657883</li>
</ul>
<p><em>Structure and Interpretation of Computer Programs</em></p>
<ul>
<li><a target="_blank" href="https://mitpress.mit.edu/sicp/">https://mitpress.mit.edu/sicp/</a></li>
<li>ISBN-13: 978-0262510875</li>
</ul>
<p><em>The Pragmatic Programmer: From Journeyman to Master</em> by Andrew Hunt and David Thomas</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X?sa-no-redirect=1">Amazon Smile</a></li>
<li>ISBN-13: 978-0201616224</li>
</ul>
<p><em>The Self-Taught Programmer: The Definitive Guide to Programming Professionally</em> by Cory Althoff</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Self-Taught-Programmer-Definitive-Programming-Professionally-ebook/dp/B01M01YDQA?sa-no-redirect=1">Amazon Smile</a></li>
<li>ISBN-13: 978-1520288178</li>
</ul>
<p><em>You Don’t Know JS (book series)</em> by Kyle Simpson</p>
<ul>
<li><a target="_blank" href="https://github.com/getify/You-Dont-Know-JS">https://github.com/getify/You-Dont-Know-JS</a></li>
<li>ISBN-13: 9781491924464</li>
</ul>
<p><em>Soft Skills: The software developer’s life manual</em> - John Sonmez</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Soft-Skills-software-developers-manual/dp/1617292397?pldnSite=1">Amazon Smile</a></li>
<li>ISBN-13: 9781617292392</li>
</ul>
<h2 id="heading-algorithms"><strong>Algorithms</strong></h2>
<p><em>Introduction to Algorithms, 3rd Edition (MIT Press)</em> by Thomas H. Cormen and Charles E. Leiserson</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/">Amazon Smile</a></li>
<li>ISBN-13: 978-0262033848</li>
</ul>
<p><em>Cracking the Coding Interview: 150 Programming Questions and Solutions</em> by Gayle Laakmann McDowell</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X">Amazon Smile</a></li>
<li>ISBN-13: 978-0984782802</li>
</ul>
<h2 id="heading-c-lang"><strong>C-lang</strong></h2>
<p><em>The C Programming Language</em> by Brian W. Kernighan and Dennis M. Ritchie</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/">Amazon Smile</a></li>
<li>ISBN-13: 978-0131103628</li>
</ul>
<p><em>A Book on C: Programming in C</em></p>
<ul>
<li><a target="_blank" href="https://www.amazon.com/Book-Programming-4th-Al-Kelley/dp/0201183994/ref=cm_cr_arp_d_bdcrb_top?ie=UTF8">Amazon</a></li>
<li>ISBN-13: 978-0201183993</li>
</ul>
<h2 id="heading-coding-interview"><strong>Coding Interview</strong></h2>
<p><em>Cracking the Coding Interview: 150 Programming Questions and Solutions</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X">Amazon Smile</a></li>
<li>ISBN-13: 978-0984782802</li>
</ul>
<p><em>Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition</em></p>
<ul>
<li><a target="_blank" href="https://www.wiley.com/en-id/Programming+Interviews+Exposed:+Secrets+to+Landing+Your+Next+Job,+2nd+Edition-p-9780470121672">Wiley</a></li>
<li>ISBN: 978-0-470-12167-2</li>
</ul>
<h2 id="heading-java"><strong>Java</strong></h2>
<p><em>Head First Java</em> by Kathy Sierra and Bert Bates</p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208">Amazon Smile</a></li>
<li>ISBN-13: 978-0596009205</li>
</ul>
<p><em>Effective Java by Joshua Bloch</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Effective-Java-3rd-Joshua-Bloch/dp/0134685997">Amazon Smile</a></li>
<li>ISBN-13: 978-0134685991</li>
</ul>
<h2 id="heading-javascript"><strong>JavaScript</strong></h2>
<p><em>You Don’t Know JS (book series)</em></p>
<ul>
<li><a target="_blank" href="https://github.com/getify/You-Dont-Know-JS">https://github.com/getify/You-Dont-Know-JS</a></li>
<li>ISBN-13: 9781491924464</li>
</ul>
<p><em>Eloquent JavaScript: A Modern Introduction to Programming by Marijn Haverbeke</em></p>
<ul>
<li><a target="_blank" href="https://eloquentjavascript.net/">Read it online here</a></li>
<li><a target="_blank" href="https://smile.amazon.com/gp/product/1593275846/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1593275846&amp;linkCode=as2&amp;tag=marijhaver-20&amp;linkId=VPXXXSRYC5COG5R5">Amazon Smile</a> -ISBN-13: 978-1593275846</li>
</ul>
<p><em>JavaScript: The Good Parts</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742">Amazon Smile</a></li>
<li>ISBN-13: 978-0596517748</li>
</ul>
<p><em>JavaScript and JQuery: Interactive Front-End Web Development</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/?pldnSite=1">Amazon Smile</a></li>
<li>ISBN-13: 978-1118531648</li>
</ul>
<h2 id="heading-python"><strong>Python</strong></h2>
<p><em>Automate the Boring Stuff With Python</em></p>
<ul>
<li><a target="_blank" href="http://automatetheboringstuff.com/">http://automatetheboringstuff.com/</a></li>
<li>ISBN-13: 978-1593275990</li>
</ul>
<p><em>Core Python Applications Programming (3rd Edition) by Wesley J Chun</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Core-Python-Applications-Programming-3rd/dp/0132678209">Amazon Smile</a></li>
<li>ISBN-13: 978-0132678209</li>
</ul>
<h2 id="heading-soft-skills"><strong>Soft Skills</strong></h2>
<p><em>Soft Skills: The software developer’s life manual</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Soft-Skills-software-developers-manual/dp/1617292397?pldnSite=1">Amazon Smile</a></li>
<li>ISBN-13: 9781617292392</li>
</ul>
<h2 id="heading-other"><strong>Other</strong></h2>
<p>*Hacking: Ultimate Hacking Guide: Hacking For Beginners And Tor Browser</p>
<ul>
<li><a target="_blank" href="https://www.amazon.in/dp/B075CX7T6G/ref=cm_sw_r_cp_awdb_t1_-7ESBbZ43CCBM">https://www.amazon.in/dp/B075CX7T6G/ref=cm_sw_r_cp_awdb<em>t1</em>-7ESBbZ43CCBM</a></li>
<li>(ISBN 1976112524).</li>
</ul>
<p><em>Code: The Hidden Language of Computer Hardware and Software (Developer Best Practices) </em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319">Amazon Smile</a></li>
<li>ISBN-13: 978-0735611313</li>
</ul>
<p><em>Data Structures And Algorithms Made Easy</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Data-Structures-Algorithms-Made-Easy/dp/819324527X">Amazon Smile</a></li>
<li>ISBN-13: 978-8193245279</li>
</ul>
<p><em>Think Python: How to Think Like a Computer Scientist</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Think-Python-Like-Computer-Scientist/dp/1491939362">Amazon Smile</a></li>
<li>ISBN-13: 978-1491939369</li>
</ul>
<p><em>Python Crash Course: A Hands-On, Project-Based Introduction to Programming</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Python-Crash-Course-Hands-Project-Based/dp/1593276036">Amazon Smile</a></li>
<li>ISBN-13: 978-1593276034</li>
</ul>
<p><em>Computer Science Distilled: Learn the art of solving computaitonal problems by Wladston Ferreira Filho</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Computer-Science-Distilled-Computational-Problems/dp/0997316020">Amazon Smile</a></li>
<li>ISBN-13: 978-0-9773160-2-5</li>
</ul>
<p><em>Algorithms Unlocked by Thomas H. Cormen</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Algorithms-Unlocked-Press-Thomas-Cormen/dp/0262518805">Amazon Smile</a></li>
<li>ISBN-13: 978-0262518802</li>
</ul>
<p><em>Violent Python: A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security Engineers</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Violent-Python-Cookbook-Penetration-Engineers/dp/1597499579/ref=sr_1_2?ie=UTF8&amp;qid=1538665634&amp;sr=8-2&amp;keywords=violent+python">Amazon Smile</a></li>
<li>ISBN-13: 978-1597499576</li>
</ul>
<p><em>The Shellcoder’s Handbook: Discovering and Exploiting Security Holes</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Shellcoders-Handbook-Discovering-Exploiting-Security/dp/047008023X/ref=sr_1_1?ie=UTF8&amp;qid=1538665772&amp;sr=8-1&amp;keywords=shellcoders+handbook+3rd+edition&amp;dpID=41xfa6zpuPL&amp;preST=_SX218_BO1,204,203,200_QL40_&amp;dpSrc=srch">Amazon Smile</a></li>
<li>ISBN-13: 978-0470080238</li>
</ul>
<p><em>Head First C: A Brain-Friendly Guide</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Head-First-C-Brain-Friendly-Guide/dp/1449399916/ref=sr_1_2?ie=UTF8&amp;qid=1538665818&amp;sr=8-2&amp;keywords=head+first+c&amp;dpID=51StqzL2dWL&amp;preST=_SX218_BO1,204,203,200_QL40_&amp;dpSrc=srch">Amazon Smile</a></li>
<li>ISBN-13: 978-1449399917</li>
</ul>
<p><em>Practical Object-Oriented Design in Ruby</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330">Amazon Smile</a></li>
<li>ISBN-13: 978-0321721334</li>
</ul>
<p><em>Thinking in C++ by Bruce Eckel</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Thinking-C-Bruce-Eckel/dp/0139177094">Amazon Smile</a></li>
<li>ISBN-13: 978-0139177095</li>
</ul>
<p><em>Operating System Concepts</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/1118063333/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1538967825&amp;sr=1-1&amp;keywords=operating+system+concepts+10th+edition&amp;dpID=51Qy2upM%252BaL&amp;preST=_SY291_BO1,204,203,200_QL40_&amp;dpSrc=srch">Amazon Smile</a></li>
<li>ISBN-13: 978-1118063330</li>
</ul>
<p><em>Computer Networking: A Top-Down Approach (7th Edition) by Kurose and Ross</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Computer-Networking-Top-Down-Approach-7th/dp/0133594149/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1538967896&amp;sr=1-1&amp;keywords=kurose+and+ross&amp;dpID=51xp1%252BoDRML&amp;preST=_SX218_BO1,204,203,200_QL40_&amp;dpSrc=srch">Amazon Smile</a></li>
<li>ISBN-13: 978-0133594140</li>
</ul>
<p><em>Competitive Programming 3: The New Lower Bound of Programming Contests</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Competitive-Programming-3rd-Steven-Halim/dp/B00FG8MNN8">Amazon Smile</a></li>
<li>ISBN-13: 978-5800083125</li>
</ul>
<p><em>Dynamic Programming for Coding Interviews: A Bottom-Up approach to problem solving</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.in/Dynamic-Programming-Coding-Interviews-Bottom-Up-ebook/dp/B06XZ61CMP">Amazon Smile</a></li>
<li>ISBN-13: 978-1946556691</li>
</ul>
<p><em>GATE 2019 Computer Science and Information Technology</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/GATE-Computer-Science-Information-Technology/dp/194658178X">Amazon Smile</a></li>
<li>ISBN-13: 978-1946581785</li>
</ul>
<p><em>The Art of Computer Programming by Donald E. Knuth</em></p>
<ul>
<li><a target="_blank" href="https://www-cs-faculty.stanford.edu/~knuth/taocp.html">https://www-cs-faculty.stanford.edu/~knuth/taocp.html</a></li>
<li>ISBN-13: 978-0321751041</li>
</ul>
<p><em>Facts and Fallacies of Software Engineering</em></p>
<ul>
<li><a target="_blank" href="https://smile.amazon.com/Facts-Fallacies-Software-Engineering-Robert/dp/0321117425/">Amazon Smile</a></li>
<li>ISBN-13: 978-0321117427</li>
</ul>
<p>The Mythical Man-Month: Essays on Software Engineering</p>
<ul>
<li><a target="_blank" href="https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959">Amazon Smile</a></li>
<li>ISBN-13: 978-0201835953</li>
</ul>
<p>This list was compiled from multiple suggestion threads on Reddit and Stackoverflow.</p>
<p>Please feel free to add more that you have found useful!</p>
<h2 id="heading-other-programming-book-recommendations">Other programming book recommendations:</h2>
<ul>
<li><a target="_blank" href="https://www.freecodecamp.org/news/best-books-data-structures-and-algorithms-javascript/">The best books for data structures and algorithms in JavaScript</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/my-software-engineering-bookshelf/">What's on one dev's software engineering bookshelf</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/books-that-every-engineering-manager-should-read-7a053e296d11/">Books that every engineering manager should read</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/9-books-for-junior-developers-in-2019-e41fc7ecc586/">Books that junior devs should read</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/must-read-books-to-learn-java-programming-327a3768ea2f/">Must-read books to learn Java programming</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What I Learned from Reading "The Pragmatic Programmer" ]]>
                </title>
                <description>
                    <![CDATA[ By Pramono Winata In short: old but gold. Published in 1999, The Pragmatic Programmer is a book about how to become a Pragmatic Programmer. Which really means a ‘Good Programmer’.  Yes, it was published about 20 years ago. But this book still provide... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/thought-on-the-pragmatic-programmer/</link>
                <guid isPermaLink="false">66d460a03a8352b6c5a2aae5</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Quality Software ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Software Engineering ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 22 Jan 2020 16:28:10 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/01/51nz9ROuoHL-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Pramono Winata</p>
<p><em>In short: old but gold.</em></p>
<p>Published in 1999, The Pragmatic Programmer is a book about how to become a Pragmatic Programmer. Which really means a ‘Good Programmer’. </p>
<p>Yes, it was published about 20 years ago. But this book still provides many insights that are very relevant to programmers or software engineers, as some people might call them these days.</p>
<p>You might have heard about this book before and questioned what actually it's actually about. Well, today I will share with you some of the interesting things I learned while reading the book.</p>
<h2 id="heading-there-is-more-to-being-a-programmer-than-technical-skills">There is more to being a programmer than technical skills</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-190.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@alexkixa?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Alexandre Debiève / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>When reading the book's title, you might expect it to give out a lot of technical lessons. But in fact it does not. What makes this book still relevant 20 years later is that it teaches us that being a programmer is not all about technical strength. And we often overlook this fact.</p>
<p>The book teaches us that there is more to programming than technical abilities.</p>
<h2 id="heading-the-cat-ate-my-source-code">The cat ate my source code</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-191.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@chen93?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Chen Zhao / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>This is the first chapter in the book and is a very interesting concept.</p>
<p>Remember that one day when we didn’t finish our homework and we said that the dog ate it? (Actually I don’t remember it, because I always finish my homework ?)</p>
<p>What that - and this chapter - teaches us is actually responsibility. When you have responsibility for something, you should be prepared to be held accountable for it. </p>
<p>If you make mistakes and cannot fulfill those responsibilities, you have to make up for it and find a solution. Don’t make up excuses and play the finger pointing game. You can’t just go into work and tell everybody that <strong>a cat just ate your source code</strong>.</p>
<p><strong>Provide options, don’t make lame excuses.</strong></p>
<h2 id="heading-its-all-about-a-broken-window">It’s all about a broken window</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-192.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@pawel_czerwinski?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Paweł Czerwiński / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>In the book, there is a story about an urban area that became very messy and run-down, all because of one broken window.</p>
<p>This is much like our code: when we see some dirty code (which we can see like it's a broken window), we might start to think that it’s okay to let the code be dirty. That it’s okay to just go back later, which most of the time we never do. </p>
<p>Try not to leave “broken windows” unrepaired. When you find that kind of code, fix it up as soon as possible. When you continue to think that no one has the time to fix that broken code, you might as well go and buy yourself a dumpster just to keep your code.</p>
<p>What this chapter discusses is actually simple: it’s about <strong>initiative and taking care of your stuff</strong>.</p>
<h2 id="heading-take-the-initiative-be-the-catalyst">Take the initiative, be the catalyst</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-193.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@bradencollum?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Braden Collum / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>There also might be times when you know that either something is all good or something needs to actually get done. It comes to your mind and you just think to yourself that it’s the right thing to do. </p>
<p>If you just keep thinking, nothing will happen. Or if you just ask for it to be on the project timeline, you might be met with huge feature development requests and technical debt. So it ends up in another year in discussion.</p>
<p>It’s time to step up your game. Work out what you can, don’t overdo it, but also make it <strong>reasonable</strong>. Once you got your complete idea, show it to people. They might think that “Yeah, it might be better if we had that.” </p>
<p>Show them a glimpse of the future and people will rally around you. <strong>Be a catalyst for change</strong>.</p>
<h2 id="heading-more-so-this-book-also-teaches-us-about-basic-fundamentals-that-we-often-forget-as-programmers">More so, this book also teaches us about basic fundamentals that we often forget as programmers.</h2>
<p>Sometimes, the more we delve deeper and deeper into our work, the more often we forgot about the basic things that we learned a long time ago. </p>
<p>Busy chasing features and new tech improvements, we often forget that there are actually a lot more things that we need to pay attention to beforehand before going deeper.</p>
<h3 id="heading-clean-code">Clean code</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-194.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@4themorningshoot?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Oliver Hale / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>One of the most basic principles we often forget about is clean code. As features are piling up more and more, the codebase become fatter and technical debt rises. </p>
<p>But we must always remember to keep our code consistent and clean every time we write it. </p>
<p>One of the things that is mentioned in the book is the DRY principle (Don’t Repeat Yourself). It is related to code reusability. Duplication is evil and that's the truth. Duplicate code will make maintaining your code very hard, and it can cause confusion when you need to change a feature or fix a bug.</p>
<p>Remember that time when you needed to fix some of your code? And you realized that there was code that was very similar to the bit you just changed? So then you gotta change that part too, and another too, and then maybe this bit too…you get the picture.</p>
<h3 id="heading-find-the-correct-tools">Find the correct tools</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-195.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@carlevarino?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Cesar Carlevarino Aragon / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Like a woodcutter, finding the correct and proper tools is very important. Before a woodcutter starts cutting trees. they have to decide - do they need a chainsaw? Or is an axe good enough? Or maybe there is a brand new lightsaber they can use. But using kitchen knife might take some time to cut down a tree.</p>
<p>It's similar for programmers: this book teaches us that it’s very important for us to find the proper tools before we start working (like a good code editor). We shouldn't jump right to coding. </p>
<p>For example, it’s actually possible to code using Windows notepad and compile it using the console. But is it the right tool for you? Try to find the best editor that you are most comfortable using. Learning and mastering it and it will increase your productivity by several times.</p>
<p>There are several editors mentioned in the book, such as Emacs or Vim. But nowadays you can find more modern code editors such as Visual Studio Code. Find one that suites you. It's like your taste in coffee – some people prefer lattes and others prefer cappuccinos.</p>
<h3 id="heading-dont-program-by-coincidence">Don’t program by coincidence</h3>
<p>This is one very important point noted in the book. In all of our programming journeys, there have likely been times when we were just coding blindly and unexpectedly… and somehow it just worked.</p>
<p>You probably weren't sure what you were actually doing, so you kept adding more and more code and it still worked. That is, until one day when there was an issue and you tried to remove some chunk of code and it completely broke everything. And you were not sure which piece caused it.</p>
<p>Relying on unknowns is very dangerous. When you are not sure what the code is supposed to do, try to simplify it and make sure that the code is reliable in its own right, not just reliable by chance.</p>
<p>Rely only on things you are sure of. Don’t program by coincidence.</p>
<h3 id="heading-unit-test">Unit test</h3>
<p>Testing is a hot topic these days. And yes, it was also an important topic 20 years ago (and it will always be).</p>
<p>But sometimes people forget about unit tests these days. They might have just finished their code and they assumed everything was okay...until the code ended up broken in production because of edge cases.</p>
<p>In order to maintain stability and refactor safely, we always need to keep our code protected by writing unit tests. And it’s never enough if your tests only cover the happy path. Perform ruthless testing on your code, and remember that your code is not finished until you've covered every available test. </p>
<p>Unit testing will help you be confident that your piece of code is truly done.</p>
<h3 id="heading-taking-ownership">Taking ownership</h3>
<p>There's one last thing I want to talk about. As we know, programmers like to leave ‘legacies’ behind, in the form of code. And yes, most of the time it’s bad.</p>
<p>Being a programmer, we ought to take pride in our own work. We should be proud of the responsibility we've been given and the piece of code we have been working on. </p>
<p>When we are finally able to take pride in our code and own it, we will be able to leave a good legacy behind. And people will see our code as a signature. When they see our code, they'll know that it will be solid and well-written, by a professional.</p>
<h2 id="heading-finishing-up">Finishing up</h2>
<p>There are even more topics covered in this book that I haven’t discussed here, such as Requirements and Teamwork. If you are interested in exploring these topics, you should try to find and read the book!</p>
<p>Just a note, however: as much as I liked the book, some stuff just didn't seem relate-able, looking at how old the book is (20 years old). It talks about old languages such as Prolog, and speaks about OOP like it’s a really new concept - so these oddities just don't seem right. </p>
<p>But it can’t be blamed since it's already a couple decades old.</p>
<p>Aside from that most of the stuff covered in the book is still quite relevant to the current age of Programming, like those topics I covered above.</p>
<p>If I was trying to sum everything up in this book, I'd say it basically covers <strong>everything I have ever read on the Web about becoming a better engineer</strong>.</p>
<p>Thanks for reading my article about The Pragmatic Programmer! Hopefully it has given you some insight into your journey as a Programmer or Software Engineer. And grab yourself a copy of the book if you are interested in learning more.</p>
<p><em>P.S. I wrote this article on my own, without any means of advertising or marketing from a third party. The cover photo was taken from <a target="_blank" href="https://www.amazon.com/Pragmatic-Programmer-Journey-Mastery-Anniversary/dp/B07TSG6FGJ">amazon's site</a>.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What's on my software engineering bookshelf ]]>
                </title>
                <description>
                    <![CDATA[ By Luca Florio Keeping up to date and constantly improving is part of the job of a software engineer. There are lots of ways to study new things on the internet like MOOCs, tutorials, and articles. However, sometimes a physical book is the best choic... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/my-software-engineering-bookshelf/</link>
                <guid isPermaLink="false">66d45e4c7df3a1f32ee7f835</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Lifelong Learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Software Engineering ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sun, 27 Oct 2019 21:29:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/10/jason-leung-D4YrzSwyIEc-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Luca Florio</p>
<p>Keeping up to date and constantly improving is part of the job of a software engineer.</p>
<p>There are lots of ways to study new things on the internet like MOOCs, tutorials, and articles. However, <strong>sometimes a physical book is the best choice</strong>, especially when it is a "reference" that provides knowledge that will last for the years to come. We can put it on our bookshelf and go through it every time we feel it is necessary.</p>
<p>This is a list of reference books I keep on my software engineering bookshelf. I hope it can be a source of inspiration for everyone looking for something interesting to read! ? </p>
<h2 id="heading-what-i-have-on-my-bookshelf">What I have on my bookshelf</h2>
<h3 id="heading-design-patterns-elements-of-reusable-object-oriented-software">Design Patterns: Elements of Reusable Object-Oriented Software</h3>
<p>This is a classic. </p>
<p>In this book, the so-called "Gang of Four" present the <strong>23 design patterns</strong> that drove the Object-Oriented world for decades. New patterns have been created since then, but the ones in the book are considered the foundations of all other patterns.</p>
<p>It is not an easy read, but you should have a look at it just to understand where to find what you need on every occasion. Keep it on your desk, and go through it when you are building something and have the feeling, "What I'm doing sounds familiar." You will probably discover that you are trying to implement a design pattern already described in this book.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/design_patterns-2.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-clean-code-a-handbook-of-agile-software-craftsmanship">Clean Code: A Handbook of Agile Software Craftsmanship</h3>
<p>I read this book many years ago, but it has stuck with me since then. </p>
<p>This is a great source of best practices to produce clean, readable code and avoid code smells. The book is focused mainly on Java/OOP, but lots of advice can be applied to every language or programming paradigm. </p>
<p>Writing maintainable and readable code is not a luxury -- it is something <strong>every good software engineer should aspire to</strong>. This book will provide you with the knowledge to make that happen. </p>
<p>Uncle Bob can be a little extreme sometimes, and I don't agree with him on all of the presented techniques. My suggestion: read it, and take with you only the things you feel are right. In any case, <strong>it is a book worth reading</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/clean_code-1.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-learn-you-a-haskell-for-great-good-a-beginners-guide">Learn You a Haskell for Great Good!: A Beginner's Guide</h3>
<p>This is a book on the Haskell programming language, so why buy it and keep it as a reference? My reasons are:</p>
<ul>
<li>It is a very well written and easy-to-read book on a not-so-easy topic like functional programming</li>
<li>It gives you the foundation of functional thinking, not just Haskell syntax</li>
<li>Haskell is a very elegant language and I like it</li>
</ul>
<p>This is the book that introduced me to functional programming. Right now I program mainly in Scala, but the transition has been a lot easier after learning the basics of Haskell. </p>
<p>Functional programming is not easy, but it will open your mind. It can be very theoretical, and <strong>put it into practice using Haskell will help a lot</strong>. </p>
<p>There are also very nice drawings in the book, so you have no excuse not to flip through it. ?</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/haskll-1.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-category-theory-for-programmers">Category Theory for Programmers</h3>
<p>This book covers <strong>Category theory</strong>, which is the foundation of the functional programming paradigm.</p>
<p>The topic is quite complex for non-mathematicians, but the author has put great effort into making it understandable for developers. I admit that I had some difficulties reading it, but I would like to go through it again.</p>
<p>This book is not required to become a great functional programmer. Read it if you like challenges and want to go deeper on the theoretical foundations of functional programming.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/category_theory-1.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-designing-data-intensive-applications-the-big-ideas-behind-reliable-scalable-and-maintainable-systems">Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems</h3>
<p>This is my favourite, maybe because I love distributed systems! :-D</p>
<p>In this book, Martin Kleppmann describes all the various aspects of distributed systems, from serialisation to consistency models and consensus, passing through the various database engines. He also explores new trendings regarding data-driven applications.</p>
<p>In a world of cloud-native microservices-based applications, it is fundamental to know the various aspects of a distributed system. The knowledge provided by this book is not tied to a specific technology and <strong>will be valuable your entire career in software engineering</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/data_intensive_applications-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-release-it-design-and-deploy-production-ready-software">Release It!: Design and Deploy Production-Ready Software</h3>
<p>I'm reading this one now. </p>
<p>Are we finished once our software is sent to production? Nope, <strong>that is just the beginning!</strong> </p>
<p>This book highlights what can go wrong after the software is put in production and has to face real users. It describes anti-patterns that can undermine the stability of our software, as well as solutions to such problems. </p>
<p>What I like the most about this book is that every chapter starts with an example taken from real life. Then the author analyses the problems that caused the software to fail in production. I think learning from concrete examples is a very effective approach.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/release_it-1.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-introduction-to-algorithms">Introduction to Algorithms</h3>
<p>What can I say about this book? <strong>Just buy it and keep it on your desk</strong>.</p>
<p>If you are a software engineer, there is a high chance you had to study data structures and algorithms. It is not always easy to deal with complexity or to choose the right data structure. </p>
<p>When doubts arise, open this book and you will find what you need for. </p>
<p>For most people (including me) this is a very hard read. I usually just read what I need to know at that moment, and keep the book in sight on my desk.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/algo.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-hyperfocus-how-to-manage-your-attention-in-a-world-of-distraction">Hyperfocus: How to Manage Your Attention in a World of Distraction</h3>
<p>This is not a technical book, but it is in the set of readings that changed my life in better. </p>
<p>Our work as software engineers consists of solving problems with our minds. To be effective in this task, <strong>we need the ability to completely focus on the problem we are solving</strong>. </p>
<p>Here you can find lots of suggestions and techniques to maximise the time you can focus on a task. The author discusses also the importance of letting your mind wander when you need to be more creative. </p>
<p>Mastering how to use your attention is something that will improve not only your performance at work, but also every other aspect of your life.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/hyperfocus-1.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-what-i-will-add-to-my-bookshelf">What I will add to my bookshelf</h2>
<h3 id="heading-the-pragmatic-programmer">The Pragmatic Programmer</h3>
<p>This is one of the most famous books in software development. </p>
<p>The suggestions and techniques presented in this book influenced the careers of many developers and engineers for the better. The book was been published in 1999, but it is now available as new and updated 20th-anniversary edition. </p>
<p>You can't miss this. :-)</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/pragmatic_programmer-1.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-refactoring-improving-the-design-of-existing-code">Refactoring: Improving the Design of Existing Code</h3>
<p>It is hard to always deliver high-quality code. Deadlines, urgency, a bad day all affect the quality of your work. </p>
<p>That's why refactoring is so important. If we couldn't provide quality the first time, we can improve it later for better maintainability. Martin Fowler (one of my idols in the world of software development) describes the best techniques for an effective refactoring. </p>
<p>There will be always space on my bookshelf for books that help me write better code.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/refactoring-1.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This is my list of must-have books on software engineering. It is by no means a comprehensive list of "important" books in this field, and I'm sure I will add more and more books in the years to come. </p>
<p>Hopefully I gave you some nice tips on the next book you should read. ? </p>
<p>See you!?</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Why is so much enterprise documentation so awful? ]]>
                </title>
                <description>
                    <![CDATA[ I spend a very large portion of my professional workday reading through technology documentation. Perhaps “reading through” isn’t quite the right way to describe it. At this point, it’s more like quickly scanning menus, FAQs, and paragraph headings f... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/why-enterprise-documentation-awful/</link>
                <guid isPermaLink="false">66b9967322379234769e45f7</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ documentation ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ David Clinton ]]>
                </dc:creator>
                <pubDate>Thu, 15 Aug 2019 13:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/08/documentation-small.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>I spend a very large portion of my professional workday reading through technology documentation. Perhaps “reading through” isn’t quite the right way to describe it. At this point, it’s more like quickly scanning menus, FAQs, and paragraph headings for clues to where I can find the exact piece of information I’m after. </p>
<p>With some exceptions, this tends to be the case whether I’m just looking for a quick confirmation of the right command line syntax or whether I’m trying to get my mind around a whole new technology.</p>
<h2 id="heading-web-based-technology-documentation-the-art-of-underperformance">Web-based Technology Documentation: The art of underperformance</h2>
<p>Now, I have no complaints with the people who provide detailed syntax guides and main pages — why should they reformat their entire document to highlight some obscure detail for which I may <em>someday</em> come searching? </p>
<p>But when I’m trying to introduce myself to a complicated software package — to figure out its purpose and primary use-case — then it’s reasonable for me to expect a relatively predictable and comfortable route to my goal. Instead, I often encounter a project home page with links to multiple targets with names like “Getting Started,” “How to use…?” “Documentation” and, buried deeply under a few menu layers, “Quick Start Guide.”</p>
<p>Often, the pages I’m sent to will be incomplete, apparently the victims of changed minds and budget overruns. Others will cover outdated versions of the software that might easily have a feature set that’s significantly different than the latest version. Worse: the features might actually still exist but, between then and now, they’ve changed names and even icons.</p>
<p>Even if we ignore the quality of the writing — something that can be remarkably difficult and costly to control — and the intelligibility of individual documents, there often seem to be significant version control and project management problems. </p>
<p>I can usually guess what happened: some customers complained that they couldn’t figure out how to use the software, so management — unable to properly assess the current state of the documentation on their own — ordered the creation of a complete new set from scratch. The project starts, but about half way through, the key contributor either leaves the company or is distracted by other deadlines and demands.</p>
<p>And there it sits until a few more customers complain that they, too, can’t figure out how to use the software. Rinse. Repeat.</p>
<p>Is poor documentation always evil? Absolutely not. I’m often amazed at just how much some open source projects manage to accomplish considering the limited resources they’re usually working with. And, in any case, as long as people (like me) aren’t volunteering to help out, we have no right to grumble.  </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-127.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Is all documentation evil? Nope. While you could argue that there’s way too much of it, Amazon’s AWS maintains a magnificent <a target="_blank" href="https://aws.amazon.com/documentation/">documentation resource</a> that’s well-written, well-designed, and so well organized across the system that finding elements within any given page is predictable and fast. AWS isn’t the only success story out there, but it’s not exactly part of an overcrowded field, either.</p>
<h2 id="heading-technology-books-the-art-of-overperformance">Technology Books: the art of overperformance</h2>
<p>At the other end of the documentation continuum lie books. Remember those? While I may not have purchased a tech book for years, many thousands of other people do it all the time. In fact, at least in the short term, the technology publishing industry seems remarkably healthy.</p>
<p>The better traditional publishers will subject a book proposal to very close analysis before concluding that the idea makes sense and that there are enough readers interested to make it worthwhile. Once the writing begins, they’ll throw layers and layers of editors and reviewers at every stage of a book’s production. And when they’ve run out of editors, they’ll stage an editorial board review to make sure it wasn’t all a terrible mistake.</p>
<p>With some variation, that’s how the editors at Wiley/Sybex and Manning got their job done while working on <a target="_blank" href="https://bootstrap-it.com/?page_id=351">my books</a>. And it’s also quite similar to the process I go through producing <a target="_blank" href="http://pluralsight.pxf.io/c/1191769/424552/7490?subId1=solving&amp;u=https%3A%2F%2Fapp.pluralsight.com%2Fprofile%2Fauthor%2Fdavid-clinton">my video courses with the Pluralsight team</a>.</p>
<p>When it’s done properly, the system creates checkpoints at the theme, style, chapter, and even paragraph levels, asking whether this element is needed, is presented as well as it can be, and will fit properly into the greater vision. These checkpoints make for great books, but they tend to be very expensive.</p>
<p>Is it overdone? Sometimes. Is the full-blown multi-level editorial system going to be affordable for web-based documentation projects? Perhaps not always.</p>
<p>But creating high-quality, readable, and well-organized documentation is a significant business need for many companies, so it would probably be a really good idea for them to at least submit what they’ve already got to a thorough audit by someone with experience, technical knowledge, and — most important of all — objectivity. The odds are, that will lead to a far more useful documentation product. And yes: documentation is also a product.</p>
<p><em>David Clinton parks a lot of his goods at</em> <a target="_blank" href="https://bootstrap-it.com/"><em>Bootstrap-IT.com</em></a><em>. You might be surprised what you find there…</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ An introduction to Functional JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ By Cristian Salcescu Hey everybody! I’ve written a book called Discover Functional JavaScript, and it’s now ready in both paperback and Kindle formats. After publishing several articles on Functional Programming in JavaScript, at some point I realize... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/an-introduction-to-functional-javascript-e8dab63bb51d/</link>
                <guid isPermaLink="false">66d45e03c7632f8bfbf1e420</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Functional Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 20 May 2019 17:31:24 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*DxjfBur9XKUWgSgceIv11Q.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Cristian Salcescu</p>
<p>Hey everybody! I’ve written a book called <a target="_blank" href="https://www.amazon.com/dp/B07PBQJYYG">Discover Functional JavaScript</a>, and it’s now ready in both paperback and Kindle formats.</p>
<p>After publishing several articles on Functional Programming in JavaScript, at some point I realized I have enough material to think about a book. So, I started from my previous writings, filled in the missing parts and created a book on Functional Programming in JavaScript.</p>
<p>What I tried to do in this book was to give practical examples of the core functional concepts. I think that if we master the fundamentals then it will be easier to handle more complex situations. And this is what this book is for.</p>
<p>I looked into a deeper understanding of pure functions other than that they are great. If they are so good, why don’t we write the whole application using only pure functions?</p>
<p>The other reason behind the book is to emphasize the new way of building encapsulated objects without classes and prototypes in JavaScript. I even saw classes presented as a way to bring encapsulation to objects. Encapsulation means hiding information. Objects built with classes in JavaScript are built over the prototype system. All their properties are public, they are not encapsulated.</p>
<p>I tried and hope I have succeeded to present the fundamental functional programming concepts in an easy to learn and practical manner. After reading the book you will understand better concepts like first-class functions, closures, currying, and partial application. You will understand what pure functions are and how to create them. You will better understand immutability and how it can be achieved in JavaScript.</p>
<p>Another thing not taken so much into account is naming. With the rise of arrow functions, more and more anonymous functions are created. The pretext behind all this is the fact that arrow functions have no <code>this</code> and have a shorter syntax. I don’t challenge that, I just challenge the fact that meaningful names are what we understand best. Removing that will make code harder to understand.</p>
<p>The book is pretty condensed, so you can even read it a few times. In regard to the core JavaScript concepts, it aims to make an overview of them, not to enter into great detail. There are a lot of resources for that.</p>
<p>For me, it was a great experience trying to organize my thoughts to express these ideas in a simple, practical way. I tried to focus on the main practical concepts and just eliminate everything that ads no value to the reader.</p>
<p>A deeper understanding of the fundamental concepts in JavaScript makes us better at resolving complex problems. I hope you will like it.</p>
<p>Here is what you can find inside:</p>
<h4 id="heading-chapter-1-a-brief-overview-of-javascript">Chapter 1: A brief overview of JavaScript</h4>
<p>JavaScript has primitives, objects and functions. All of them are values. All are treated as objects, even primitives.</p>
<p>Number, boolean, string, <code>undefined</code> and <code>null</code> are primitives.</p>
<p>Variables can be defined using <code>var</code>, <code>let</code> and <code>const</code>. The <code>let</code> declaration has a block scope.</p>
<p>Primitives, except <code>null</code> and <code>undefined</code>, are treated like objects, in the sense that they have methods but they are not objects.</p>
<p>Arrays are indexed collections of values. Each value is an element. Elements are ordered and accessed by their index number.</p>
<p>JavaScript has dynamic typing. Values have types, variables do not. Types can change at run time.</p>
<p>The main JavaScript runtime is single threaded. Two functions can’t run at the same time.</p>
<h4 id="heading-chapter-2-new-features-in-es6">Chapter 2: New features in ES6+</h4>
<p>ES6 brings more features to the JavaScript language. Some new syntax allows you to write code in a more expressive way, some features complete the functional programming toolbox, and some features are questionable.</p>
<p><code>let</code> declaration has block scope.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">doTask</span>(<span class="hljs-params"></span>)</span>{   
  <span class="hljs-keyword">let</span> x = <span class="hljs-number">1</span>;   
  {       
    <span class="hljs-keyword">let</span> x = <span class="hljs-number">2</span>;   
  }

  <span class="hljs-built_in">console</span>.log(x); 
}  
doTask(); <span class="hljs-comment">//1</span>
</code></pre><p><code>var</code> declaration has function scope. It doesn't have block scope.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">doTask</span>(<span class="hljs-params"></span>)</span>{   
  <span class="hljs-keyword">var</span> x = <span class="hljs-number">1</span>;   
  {       
    <span class="hljs-keyword">var</span> x = <span class="hljs-number">2</span>;   
  }

  <span class="hljs-built_in">console</span>.log(x); 
}  
doTask(); <span class="hljs-comment">//2</span>
</code></pre><h4 id="heading-chapter-3-first-class-functions">Chapter 3: First-class functions</h4>
<p>Functions are first-class objects. Functions can be stored in variables, objects or arrays, passed as arguments to other functions or returned from functions.</p>
<p>A higher-order function is a function that takes another function as an input, returns a function, or does both.</p>
<p><code>map()</code> transforms a list of values to another list of values using a mapping function.</p>
<pre><code><span class="hljs-keyword">let</span> numbers = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>];

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">doubleNo</span>(<span class="hljs-params">x</span>)</span>{
  <span class="hljs-keyword">const</span> result = x*<span class="hljs-number">2</span>;
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`<span class="hljs-subst">${x}</span> -&gt; <span class="hljs-subst">${result}</span>`</span>)
  <span class="hljs-keyword">return</span> result;
}

<span class="hljs-keyword">const</span> doubleNumbers = numbers.map(doubleNo);
<span class="hljs-comment">//1 -&gt; 2</span>
<span class="hljs-comment">//2 -&gt; 4</span>
<span class="hljs-comment">//3 -&gt; 6</span>
<span class="hljs-comment">//4 -&gt; 8</span>
<span class="hljs-comment">//5 -&gt; 10</span>
<span class="hljs-comment">//[2, 4, 6, 8, 10]</span>
</code></pre><h4 id="heading-chapter-4-closures">Chapter 4: Closures</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/JSAYSH9IZCpQfKGWJdklasvq1VmXf7aLpBB5" alt="Image" width="800" height="533" loading="lazy"></p>
<p>A closure is an inner function that has access to the outer scope, even after the outer scope container has executed.</p>
<p>The <code>count()</code> function in the next example is a closure:</p>
<pre><code><span class="hljs-keyword">const</span> count = (<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
  <span class="hljs-keyword">let</span> state = <span class="hljs-number">0</span>;
  <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    state = state + <span class="hljs-number">1</span>;
    <span class="hljs-keyword">return</span> state;
  }
})();

count(); <span class="hljs-comment">//1</span>
count(); <span class="hljs-comment">//2</span>
count(); <span class="hljs-comment">//3</span>
</code></pre><h4 id="heading-chapter-5-function-decorators">Chapter 5: Function decorators</h4>
<blockquote>
<p>A function decorator is a higher-order function that takes one function as an argument and returns another function, and the returned function is a variation of the argument function — Reginald Braithwaite, author of <a target="_blank" href="https://leanpub.com/javascript-allonge/read#decorators">Javascript Allongé</a></p>
</blockquote>
<p>The <code>unary()</code> decorator returns a new version of the function that accepts only one argument. It may be used to fix problems when the function is called with more arguments than we need.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unary</span>(<span class="hljs-params">fn</span>)</span>{
 <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">first</span>)</span>{
   <span class="hljs-keyword">return</span> fn(first);
 }
}

<span class="hljs-keyword">const</span> numbers = [<span class="hljs-string">'1'</span>,<span class="hljs-string">'2'</span>,<span class="hljs-string">'3'</span>,<span class="hljs-string">'4'</span>,<span class="hljs-string">'5'</span>,<span class="hljs-string">'6'</span>];
numbers.map(<span class="hljs-built_in">parseInt</span>); 
<span class="hljs-comment">//[1, NaN, NaN, NaN, NaN, NaN]</span>

numbers.map(unary(<span class="hljs-built_in">parseInt</span>)); 
<span class="hljs-comment">//[1, 2, 3, 4, 5, 6]</span>
</code></pre><h4 id="heading-chapter-6-pure-functions">Chapter 6: Pure functions</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/6XNeBIiQldZ1bK7AK3-5GrQuUyEprm50TNq8" alt="Image" width="800" height="533" loading="lazy"></p>
<p>A pure function is a function that, given the same input, always returns the same output and has no side effects.</p>
<p>You may have seen examples of pure functions like the ones below and want to look at some practical examples of pure functions.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">double</span>(<span class="hljs-params">x</span>)</span>{
  <span class="hljs-keyword">return</span> x * <span class="hljs-number">2</span>;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span>(<span class="hljs-params">a, b</span>)</span>{
  <span class="hljs-keyword">return</span> a + b;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">multiply</span>(<span class="hljs-params">a, b</span>) </span>{
  <span class="hljs-keyword">return</span> a * b;
}
</code></pre><p>Like other programming paradigms, Pure Functional Programming promises to make code easier to read, understand, test, debug, and compose. Can it deliver its promise? If it can, can we build an application using only pure functions? These are questions this chapter tries to answer.</p>
<h4 id="heading-chapter-7-immutability">Chapter 7: Immutability</h4>
<p>An immutable value is a value that, once created, cannot be changed.</p>
<p>Does immutability have to do with variables that cannot change or values that cannot change? And how can we make that happen? Why do we even care about that? This chapter tries to answers these questions.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/THSwkY8IPNQ0UjMPr5yzQG0vij3fEhdeaoIp" alt="Image" width="800" height="533" loading="lazy"></p>
<h4 id="heading-chapter-8-partial-application-and-currying">Chapter 8: Partial application and currying</h4>
<p>Partial application refers to the process of fixing a number of parameters by creating a new function with fewer parameters than the original.</p>
<p>Currying is the process of transforming a function with many parameters into a series of functions that each takes a single parameter.</p>
<p>Usually we find examples using currying to add or multiply a few numbers, like in the code below:</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span>(<span class="hljs-params">a</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">b</span>)</span>{
    <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">c</span>)</span>{
      <span class="hljs-keyword">return</span> a + b + c;
    }
  }
}

add(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>)(<span class="hljs-number">3</span>);
<span class="hljs-comment">//6</span>
</code></pre><p>Does currying have a practical application? This chapter shows some practical examples of using partial application and currying.</p>
<h4 id="heading-chapter-9-function-composition">Chapter 9: Function composition</h4>
<p>Function composition is applying one function to the result of another.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">compose</span>(<span class="hljs-params">...functions</span>)</span>{
  <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">x</span>)</span>{
    <span class="hljs-keyword">return</span> functions.reduceRight(<span class="hljs-function">(<span class="hljs-params">value, f</span>) =&gt;</span> f(value), x);
  }
}

f(g(x)) === compose(f,g)(x);
</code></pre><h4 id="heading-chapter-10-intention-revealing-names">Chapter 10: Intention revealing names</h4>
<p>Functions can be created with or without a name. The arrow syntax usually creates anonymous functions.</p>
<pre><code>(<span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">/*code*/</span>
    (<span class="hljs-function">() =&gt;</span> {
        <span class="hljs-comment">/*code*/</span>
    })();
})();
</code></pre><p>Anonymous functions appear as “(anonymous)” in the CallStack.</p>
<p>Intention revealing names improve code readability.</p>
<h4 id="heading-chapter-11-making-code-easier-to-read">Chapter 11: Making code easier to read</h4>
<p>This chapter shows examples of refactoring imperative code with functional programming techniques and looks at the readability of the final code.</p>
<h4 id="heading-chapter-12-asynchronous-programming">Chapter 12: Asynchronous programming</h4>
<p>In an application, there are two kinds of functions: synchronous and asynchronous. We take a look at the asynchronous programming model in JavaScript.</p>
<h4 id="heading-chapter-13-objects-with-prototypes">Chapter 13: Objects with prototypes</h4>
<p>Objects are dynamic collections of properties, with a “hidden” property to the object’s prototype.</p>
<p>Objects inherit from other objects.</p>
<p><code>class</code> is a sugar syntax from creating objects with a custom prototype.</p>
<pre><code><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Counter</span> </span>{
  <span class="hljs-keyword">constructor</span>(){
    <span class="hljs-built_in">this</span>.state = <span class="hljs-number">0</span>;
  }

  increment(){
    <span class="hljs-built_in">this</span>.state = <span class="hljs-built_in">this</span>.state + <span class="hljs-number">1</span>;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.state;
  }

  decrement(){
    <span class="hljs-built_in">this</span>.state = <span class="hljs-built_in">this</span>.state - <span class="hljs-number">1</span>;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.state;
  }
}

<span class="hljs-keyword">const</span> counter = <span class="hljs-keyword">new</span> Counter();
counter.increment(); <span class="hljs-comment">//1</span>
counter.increment(); <span class="hljs-comment">//2</span>
counter.increment(); <span class="hljs-comment">//3</span>
counter.decrement(); <span class="hljs-comment">//2</span>
</code></pre><h4 id="heading-chapter-14-objects-with-closures">Chapter 14: Objects with closures</h4>
<p>With closures we can create encapsulated and flexible objects. Consider the same counter object created with closures:</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Counter</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">let</span> state = <span class="hljs-number">0</span>;

  <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">increment</span>(<span class="hljs-params"></span>)</span>{
    state = state + <span class="hljs-number">1</span>;
    <span class="hljs-keyword">return</span> state;
  }

  <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">decrement</span>(<span class="hljs-params"></span>)</span>{
    state = state - <span class="hljs-number">1</span>;
    <span class="hljs-keyword">return</span> state;
  }

  <span class="hljs-keyword">return</span> <span class="hljs-built_in">Object</span>.freeze({
    increment, 
    decrement
  })
}

<span class="hljs-keyword">const</span> counter = Counter();
counter.increment(); <span class="hljs-comment">//1</span>
counter.increment(); <span class="hljs-comment">//2</span>
counter.increment(); <span class="hljs-comment">//3</span>
counter.decrement(); <span class="hljs-comment">//2</span>
</code></pre><p>This chapter presents more encapsulated objects and discusses the difference between objects built with closures and prototypes.</p>
<h4 id="heading-chapter-15-method-decorators">Chapter 15: Method decorators</h4>
<p>Method decorators are a tool for reusing common logic.</p>
<h4 id="heading-chapter-16-waiting-for-the-new-programming-paradigm">Chapter 16: Waiting for the new programming paradigm</h4>
<p>The last chapter contains thoughts on Functional and Object Oriented Programming in JavaScript.</p>
<p><a target="_blank" href="https://read.amazon.com/kp/embed?asin=B07PBQJYYG&amp;preview=newtab&amp;linkCode=kpe&amp;ref_=cm_sw_r_kb_dp_j0hTCbF0B1230"><strong>Enjoy the book</strong></a><strong>!</strong></p>
<p>You can find me on <a target="_blank" href="https://twitter.com/cristi_salcescu">Twitter</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Must-read books to learn Java programming ]]>
                </title>
                <description>
                    <![CDATA[ By javinpaul Hello everybody, today is the world of online courses. Everyone is talking about learning from online training, Youtube, free courses on Coursera and other websites, which is great as online courses to help you to learn faster, but, I be... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/must-read-books-to-learn-java-programming-327a3768ea2f/</link>
                <guid isPermaLink="false">66c35b9e1bbad699e4279a02</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 16 Apr 2019 17:14:52 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*kcnamVBpM1mWyD5W" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By javinpaul</p>
<p>Hello everybody, today is the world of online courses. Everyone is talking about learning from online training, Youtube, free courses on <a target="_blank" href="https://www.freecodecamp.org/news/must-read-books-to-learn-java-programming-327a3768ea2f/undefined">Coursera</a> and other websites, which is great as online courses to help you to learn faster, but, I believe books should still be an important part of your learning, as they provide the most in-depth knowledge and often written by authority on the subject matter.</p>
<p>If you are learning <a target="_blank" href="https://www.java.com/en/">Java Programming</a>, then be ready to be introduced to some of the most awesome books to learn and master Java Programming in this article.</p>
<p>Whenever a Programmer starts learning the Java programming language, the first question they ask is, “<em>Which book should I refer to learn Java?</em>” or <em>“What is the best book to learn Java for beginners?”</em> or <em>“Can you tell me some good books to learn Java?”</em> That, itself, says how important Java books are for programmers, especially beginners.</p>
<p>Despite having so many free resources available in Java, like <a target="_blank" href="http://java67.blogspot.com/">tutorials</a>, <a target="_blank" href="http://www.java67.com/2018/08/top-10-free-java-courses-for-beginners-experienced-developers.html">online courses</a>, tips, <a target="_blank" href="http://javarevisited.blogspot.com/">blogs</a>, and code examples, Java books have their own place because:</p>
<ul>
<li>They are written by programmers who are an authority in the subject</li>
<li>They cover the subject with more details and explanation.</li>
</ul>
<p>These Java books are my personal favorites, and whenever I get some time, I prefer to read them to refresh my knowledge. Though I have read many of them already (I have read <a target="_blank" href="https://www.amazon.com/Effective-Java-3rd-Joshua-Bloch/dp/0134685997/?tag=javamysqlanta-20"><strong>Effective Java</strong></a> at least four times so far), I always want to learn something new and my quest for great books never ends.</p>
<p>These books are some of the best available today and are equally useful for beginners, intermediate, and advanced Java programmers.</p>
<p>It doesn’t matter whether you are completely new to Java or have been programming in Java for some time, you will learn a lot of new things through these books.</p>
<p>Having said that, not all books are equally suitable for all programmers. For beginners, <a target="_blank" href="http://www.amazon.com/dp/0596009208/?tag=javamysqlanta-20"><em>Head First Java</em></a> is <em>still</em> the best book to get started, and for the advanced Java developer, <a target="_blank" href="https://www.amazon.com/Effective-Java-3rd-Joshua-Bloch/dp/0134685997/?tag=javamysqlanta-20"><em>Effective Java</em></a> is a nice book to start with.</p>
<h3 id="heading-10-best-books-to-learn-java-programming">10 Best Books to Learn Java Programming</h3>
<p>Here is my collection of Java books that I suggest to every programmer who wants to learn Java. It contains books for both beginners and experienced programmers.</p>
<p>These books cover a variety of areas, including core Java fundamentals, the Java collection framework, <a target="_blank" href="https://javarevisited.blogspot.com/2018/06/top-5-java-multithreading-and-concurrency-courses-experienced-programmers.html">multithreading and concurrency</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2018/07/top-5-java-performance-tuning-books-for.html">JVM internals</a> and performance tuning, <a target="_blank" href="https://javarevisited.blogspot.com/2018/02/top-5-java-design-pattern-courses-for-developers.html">design patterns</a>, etc.</p>
<h4 id="heading-1-head-first-java">1. Head First Java</h4>
<p>Many people will think that this is dated book, but to be honest <a target="_blank" href="http://www.amazon.com/dp/0596009208/?tag=javamysqlanta-20">Head First Java</a> is the best book for any programmer who is new in both programming and Java. The head-first way of explanation is quite phenomenal and I really enjoyed their book.</p>
<p>Head First Java covers the essential Java programming knowledge about class, object, thread, collection, and language features, like <a target="_blank" href="http://javarevisited.blogspot.sg/2011/09/generics-java-example-tutorial.html">Generics</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2011/08/enum-in-java-example-tutorial.html">Enums</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2011/09/variable-argument-in-java5-varargs.html">variable arguments</a>, or <a target="_blank" href="http://javarevisited.blogspot.sg/2012/07/auto-boxing-and-unboxing-in-java-be.html#axzz59AWpr6cb">auto-boxing</a>.</p>
<p>They also have some advanced section on Swing, networking, and Java IO, which makes them a complete package for Java beginners. This should be your first Java book you look at if you’re starting from scratch.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/4csFYtoAOwVvQ9U3FCT4wwKjhX85rUZj3FjE" alt="Image" width="226" height="257" loading="lazy"></p>
<p>If you prefer online courses over books, then you can also check out Udemy’s <a target="_blank" href="https://pluralsight.pxf.io/c/1193463/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fjava1"><strong>Complete Java MasterClass</strong></a> course.</p>
<p>Disclaimer: this is not a free course, and I will receive compensation if you buy this course from Udemy or if you use any links to books listed here from Amazon.</p>
<h4 id="heading-2-head-first-design-patterns">2. Head First Design Patterns</h4>
<p>The <a target="_blank" href="http://www.amazon.com/dp/0596007124/?tag=javamysqlanta-20">Head First Design Pattern</a> is another top class Java book from the Head-First lab.</p>
<p>When I started reading this book back in 2006, I didn’t think much about design patterns, how they solve common problems, how to apply a design pattern, what benefits they provide, and all sort of basic things. But after reading this Java book, I have benefited immensely.</p>
<p>The first chapter on <a target="_blank" href="http://www.java67.com/2016/03/top-21-java-inheritance-interview-Questions-Answer-Programming.html">Inheritance</a> and <a target="_blank" href="http://javarevisited.blogspot.sg/2013/06/why-favor-composition-over-inheritance-java-oops-design.html#axzz57Kv4wGXe">Composition</a>, which is simply fantastic and promotes improved practices by introducing a problem and then the solution.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/NhFRKmiDJZRW5xBRjHNsIQwD7WrTf5d8jGLC" alt="Image" width="224" height="251" loading="lazy"></p>
<p>This book also contains helpful bullet points, exercises, and memory maps, which help you to understand design patterns quickly.</p>
<p>If you want to learn core Java design patterns and object-oriented design principles, this is the first Java book you should check out.</p>
<p>If you are looking for a course on GOF or object-oriented design patterns, I suggest you check out <a target="_blank" href="https://pluralsight.pxf.io/c/1193463/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fpatterns-library"><strong>Design Pattern Library</strong></a>, one of the best courses I have attended on design patterns so far.</p>
<p>One point of good news about this book is that the new edition is updated for <a target="_blank" href="https://javarevisited.blogspot.com/2018/08/top-5-java-8-courses-to-learn-online.html">Java SE 8</a>, which will teach you how to develop classic GOF design pattern using Java 8 features, like <a target="_blank" href="https://javarevisited.blogspot.com/2014/02/10-example-of-lambda-expressions-in-java8.html#axzz5b2nmYJFN">lambda expressions</a>, and <a target="_blank" href="http://www.java67.com/2018/10/java-8-stream-and-functional-programming-interview-questions-answers.html">streams</a>.</p>
<h4 id="heading-3-effective-java">3. Effective Java</h4>
<p><a target="_blank" href="http://www.amazon.com/dp/0321356683/?tag=javamysqlanta-20">Effective Java</a> is one of the top Java books in my record and one of the most enjoyable. I have high regard for Joshua Bloch, the author, for his contribution to the Java collection framework and Java Concurrency package.</p>
<p>Effective Java is best for a seasoned or experienced programmer who is well versed in Java programming. It’s great for programmers who want to share their skill by following <a target="_blank" href="http://javarevisited.blogspot.sg/2014/10/10-java-best-practices-to-name-variables-methods-classes-packages.html#axzz5Bwn8nSNW">programming best practices</a> and who are eager to listen to someone who contributed to the Java development kit (JDK).</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/BQ18O-sFd7slae-N-55hOBzo7qDRg5AyWkQE" alt="Image" width="800" height="1042" loading="lazy"></p>
<p>Effective Java consists of a collection of Java programming best practices, ranging from <a target="_blank" href="http://javarevisited.blogspot.it/2011/12/factory-design-pattern-java-example.html">static factories</a>, <a target="_blank" href="http://javarevisited.blogspot.sg/2016/09/how-to-serialize-object-in-java-serialization-example.html">serialization</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2012/12/difference-between-equals-method-and-equality-operator-java.html#axzz5Y4Kd7uK1">equals</a>, and <a target="_blank" href="http://javarevisited.blogspot.sg/2011/02/how-to-write-equals-method-in-java.html#axzz5B6EWE6M7">hashcode</a> to generics, enums, varargs, and reflection.</p>
<p>This Java programming book covers almost every aspect of Java in a slightly different way than you are used to.</p>
<p>A new edition was released last year that introduced features in the JDK 7, 8, and 9, which was released last year in September. It also has a full chapter on <a target="_blank" href="https://javarevisited.blogspot.com/2017/08/how-to-convert-lambda-expression-to-method-reference-in-java8-example.html">lambdas</a>.</p>
<h4 id="heading-4-java-concurrency-in-practice">4. Java Concurrency in Practice</h4>
<p><a target="_blank" href="http://www.amazon.com/dp/0321349601/?tag=javamysqlanta-20">Java Concurrency in Practice</a> is another classic from Joshua Bloch, Doug Lea, and team. This is the best Java book on concurrency and multi-threading — one of the must-reads for core Java developers.</p>
<p>The strengths of Concurrency Practice in Java include:</p>
<p>1) This book is very detailed and captures minor details of multi-threading and concurrency</p>
<p>2) Instead of focusing on core Java classes, this book focuses on concurrency issues and problems, like <a target="_blank" href="https://javarevisited.blogspot.com/2018/08/how-to-avoid-deadlock-in-java-threads.html">deadlock</a>, starvation, thread-safety, race conditions, and present ways to solve them using Java concurrency classes.</p>
<p>This book is an excellent resource to learn and master Java concurrency packages and classes, like <a target="_blank" href="http://javarevisited.blogspot.sg/2012/07/countdownlatch-example-in-java.html">CountDownLatch</a>, <a target="_blank" href="http://javarevisited.blogspot.sg/2012/07/cyclicbarrier-example-java-5-concurrency-tutorial.html">CyclicBarrier</a>, <a target="_blank" href="http://javarevisited.blogspot.sg/2012/12/blocking-queue-in-java-example-ArrayBlockingQueue-LinkedBlockingQueue.html">BlockingQueue</a>, or <a target="_blank" href="http://javarevisited.blogspot.sg/2012/05/counting-semaphore-example-in-java-5.html">Semaphore</a>. This is the biggest reason I like to read this Java book and read it again and again.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/ZeYTp24WT8fbXEdj9g-urlCF2AMIZmee2QaY" alt="Image" width="197" height="259" loading="lazy"></p>
<p>3) One more strong point of concurrency practice in Java is the no-nonsense examples; the examples in this book are clear, concise, and intelligent.</p>
<p>4) This book is also good at explaining what is wrong and why it's wrong and how to make it right, which is essential for any Java book to succeed.</p>
<p>In short, this is one of the best books to learn concurrency and multi-threading in Java. The content is definitely advanced from a beginner’s perspective, but surely, this is a must-read book for experienced Java programmers.</p>
<h4 id="heading-5-java-generics-and-collections">5. Java Generics and Collections</h4>
<p>The <a target="_blank" href="http://www.java67.com/2016/06/12-must-read-advance-java-books-for-intermediate-programmers.html">Java Generics and Collection</a> by Naftalin and Philip Wadler from O’Reilly is another good book on Java, which I initially forgot to include in my list but am including it now as requested by many readers.</p>
<p>I like this book because of its content on generics and collections, which are core areas of the Java language.</p>
<p>Having a strong knowledge of <a target="_blank" href="https://javarevisited.blogspot.com/2011/11/collection-interview-questions-answers.html">Java collections</a> and <a target="_blank" href="https://javarevisited.blogspot.com/2017/03/how-to-implement-stack-in-java-using-array-example.html">Generics</a> is expected from an experienced programmer, and these books help in that area.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/ZkmoK-J95A9alfhTgbu6zx5rBsg4ZyU1KEkL" alt="Image" width="249" height="320" loading="lazy"></p>
<p>It explains each collection interface like <a target="_blank" href="http://www.java67.com/2013/08/ata-structures-in-java-programming-array-linked-list-map-set-stack-queue.html">Set</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2011/05/example-of-arraylist-in-java-tutorial.html">List</a>, <a target="_blank" href="http://www.java67.com/2013/02/10-examples-of-hashmap-in-java-programming-tutorial.html">Map</a>, Queue, and their implementation, comparing how well they perform in a different situation.</p>
<p>I really loved their comparison chart at the end of each chapter, which gives you a good idea about when to use a particular Java collection class, like <code>ArrayList</code>, <code>HashMap</code>, or <code>LinkedHashMap</code>.</p>
<h4 id="heading-6-java-performance-from-binu-john">6. Java Performance From Binu John</h4>
<p>This is another good book that teaches about JVM internals, garbage collection, JVM tuning, profiling. etc, and I highly recommend every senior Java developer read <a target="_blank" href="http://javarevisited.blogspot.sg/2017/04/top-10-java-books-of-last-5-years-for-experienced-java-Programmers.html">this book</a>. This is also one of my personal favorites.</p>
<p>As we are moving gradually, we started from a beginners level to intermediate and now the senior level.</p>
<p><em>The Java Performance</em> is all about performance monitoring, profiling, and tools used for Java performance monitoring.</p>
<p>This is not a usual programming book. Instead, it provides details about <a target="_blank" href="http://javarevisited.blogspot.sg/2011/11/hotspot-jvm-options-java-examples.html">JVM</a>, <a target="_blank" href="http://javarevisited.blogspot.sg/2012/10/10-garbage-collection-interview-question-answer.html">Garbage Collection</a>, <a target="_blank" href="http://javarevisited.blogspot.sg/2011/05/java-heap-space-memory-size-jvm.html">Java heap</a> monitoring, and profiling application.</p>
<p>I loved their chapter on the JVM overview, and it’s a must read to learn more about JVM in simple language.</p>
<p>Both beginners and an intermediate programmer can benefit from this book, but it’s good to have some Java experience under your belt before reading it. So far, this is the best Java book on performance monitoring.</p>
<p>This is another must-read Java book if you are serious about performance.</p>
<p>There are a couple of new books available in Java, which cover JDK 1.7. To find out latest book on Java performance like <a target="_blank" href="http://javarevisited.blogspot.com/2014/07/top-5-java-performance-tuning-books.html">Java Performance, The Definitive Guide by Scott Oaks</a>, which is certainly worth checking out before buying this book.</p>
<p>If you need some guidance on solving memory and CPU issues, I suggest you to also take a look at <a target="_blank" href="https://pluralsight.pxf.io/c/1193463/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fjava-understanding-solving-memory-problems">Understanding and Solving Java Memory Problems</a> course by Richard Warburton.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/cgoMIpRcb2mWyziyNvcpHgb1Qk96TCh0j4Pw" alt="Image" width="800" height="1049" loading="lazy"></p>
<h4 id="heading-7-java-puzzlers">7. Java Puzzlers</h4>
<p><a target="_blank" href="http://javarevisited.blogspot.sg/2017/02/top-5-core-java-books-for-beginners.html">Java Puzzlers</a> is another book worth reading from Joshua Bloch, this time with Neal Gafter. This book is about corner cases and pitfalls in the Java programming language.</p>
<p>Java is safer and more secure than <a target="_blank" href="http://www.java67.com/2018/02/5-free-cpp-courses-to-learn-programming.html">C++</a>, and the JVM does a good job to free the programmer from error-prone memory allocation and deallocation. But still, Java has corner-cases that can surprise even the experienced Java programmer.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/OUdEuWTLMub2w4x96KF5wMPLFpeKhHjXJEQv" alt="Image" width="207" height="258" loading="lazy"></p>
<p>This Java book presents such Java pitfalls and explains them in greater detail. This is a good Java book if you love puzzles — you can even include many of these in <a target="_blank" href="http://javarevisited.blogspot.sg/2015/10/133-java-interview-questions-answers-from-last-5-years.html#axzz4pEKHfj36">core Java interviews</a> to check their Java knowledge.</p>
<p>I don’t rate it as high as <em>Effective Java</em> and <em>Java Concurrency in Practice,</em> but you can still give it a go, particularly to check your knowledge about Java and its corner cases, which will help you to answer some of the <a target="_blank" href="http://www.java67.com/2012/09/top-10-tricky-java-interview-questions-answers.html">tricky Java questions</a> from interviews.</p>
<p>In order to get most of this Java book, try to solve puzzles by yourself and then look into explanations to make your knowledge more concrete.</p>
<h4 id="heading-8-head-first-object-oriented-analysis-and-design">8. Head First Object-Oriented Analysis and Design</h4>
<p>Another <a target="_blank" href="http://www.java67.com/2016/10/top-5-object-oriented-analysis-and-design-patterns-book-java.html">good book</a> on Java programming and design principles from the Head-First series. <em>Head First Object-Oriented Analysis and Design</em> can be read in conjunction with <em>Head First Design Patterns</em>.</p>
<p>This book focuses on object-oriented design principles, like <a target="_blank" href="http://javarevisited.blogspot.sg/2013/06/why-favor-composition-over-inheritance-java-oops-design.html">favor Composition over inheritance</a>, programming for interface rather than implementation, DRY, etc.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Y97xBlLl4dvCMy1fU0sA4QgzW3F21qQu1Wcv" alt="Image" width="226" height="258" loading="lazy"></p>
<p>One part of learning Java is writing good code and following the best practices, and this book is great in educating programmers about them.</p>
<p>Knowledge gained from this book is applicable to many object-oriented programming languages and will, overall, improve your understanding of <a target="_blank" href="http://www.java67.com/2016/02/5-books-to-improve-coding-skills-of.html">code</a> and <a target="_blank" href="https://pluralsight.pxf.io/c/1193463/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fprinciples-oo-design">OOP design principles</a>.</p>
<h4 id="heading-9-thinking-in-java">9. Thinking in Java</h4>
<p><em>Thinking in Java</em> is written by Bruce Eckel, who is also the author of <em>Thinking in C++</em> and uses his unique style to teach the Java concept.</p>
<p>Many would agree that this is one of the best Java books, with a strength being that is points to intelligent examples. This is one of the complete books in Java and can be used as a reference as well.</p>
<p>There is a chapter on <a target="_blank" href="http://javarevisited.blogspot.sg/2012/01/memorymapped-file-and-io-in-java.html">Java memory mapped IO</a> from <em>Thinking in Java</em>, which is my favorite.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/eVI7mVi9QoIPM50hi5RCP0iZY33QIrBvhPro" alt="Image" width="194" height="261" loading="lazy"></p>
<p>If you don’t like the Head-First teaching style, but you need a beginners Java book with a plain example style, <em>Thinking in Java</em> is a good choice.</p>
<p>It is detailed, mature, and frequently updated, but, if you need more choices, you can check out these <a target="_blank" href="http://www.java67.com/2015/05/best-book-to-learn-java-for-beginners.html">core Java books for beginners</a>, as well.</p>
<h4 id="heading-10-java-se-8-for-the-really-impatient"><strong>10. Java SE 8 for the Really Impatient</strong></h4>
<p>This is one of the <a target="_blank" href="https://www.amazon.com/Java-SE8-Really-Impatient-Course/dp/0321927761?tag=javamysqlanta-20">best books</a> to learn Java 8. It is also my general purpose Java 8 books. If you have less time and you want to learn all important things about <a target="_blank" href="https://javarevisited.blogspot.com/2018/08/top-5-free-java-8-and-9-courses-for-programmers.html">Java 8</a>, this is the book to refer to.</p>
<p>I don’t have to remind you about Cay. S. Horstmann’s writing skill, one of the best authors in Java and right up there with Joshua Bloch. I have found both of them highly readable.</p>
<p>You won’t feel bored, which programmers often do when they read technical books. It explains about <a target="_blank" href="http://www.java67.com/2014/11/java-8-comparator-example-using-lambda-expression.html">lambda expression</a>, <a target="_blank" href="http://www.java67.com/2014/04/java-8-stream-examples-and-tutorial.html">Streams</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2018/01/what-is-functional-interface-in-java-8.html">functional interface</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2017/03/what-is-method-references-in-java-8-example.html">method references</a>, <a target="_blank" href="https://javarevisited.blogspot.com/2015/03/20-examples-of-date-and-time-api-from-Java8.html#axzz5dUGc82ss">new Java Date Time API</a> and several other small enhancement like joining Strings, repeatable annotations, etc. In short, one of the best book to learn Java hands down.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/ypWHwJh1zUFCRsLDFU8VF98vxRvd3lCmAt8h" alt="Image" width="247" height="320" loading="lazy"></p>
<h3 id="heading-wrapping-up">Wrapping up</h3>
<p>This was my list of <strong>top Java programming books</strong>. I have read all the books, some of them I am still reading and a couple of them, like <em>Effective Java</em> and the Head-First series, I have read a couple of times. Many programmers ask me which books they should start with and which Java book they should read now. I hope you found some good books in this collection. Happy reading!</p>
<p><strong>Other Useful Resources to Learn Java Programming</strong><br><a target="_blank" href="https://javarevisited.blogspot.com/2017/12/10-things-java-programmers-should-learn.html#axzz5atl0BngO">10 Things Java Programmer Should Learn in 2019</a><br><a target="_blank" href="http://www.java67.com/2018/04/10-tools-java-developers-should-learn.html">10 Tools Every Java Developer Should Know</a><br><a target="_blank" href="http://javarevisited.blogspot.sg/2013/04/10-reasons-to-learn-java-programming.html">10 Reasons to Learn Java Programming languages</a><br><a target="_blank" href="http://javarevisited.blogspot.sg/2018/01/10-frameworks-java-and-web-developers-should-learn.html">10 Frameworks Java and Web Developer should learn in 2019</a><br><a target="_blank" href="http://javarevisited.blogspot.sg/2018/05/10-tips-to-become-better-java-developer.html">10 Tips to become a better Java Developer in 2019</a><br><a target="_blank" href="http://javarevisited.blogspot.sg/2018/04/top-5-java-frameworks-to-learn-in-2018_27.html">Top 5 Java Frameworks to Learn in 2019</a><br><a target="_blank" href="https://javarevisited.blogspot.sg/2018/01/10-unit-testing-and-integration-tools-for-java-programmers.html">10 Testing Libraries Every Java Developer Should Know</a></p>
<h3 id="heading-closing-notes">Closing Notes</h3>
<p>Thanks for reading this article so far. You might be thinking that there is so much stuff to learn, so many courses to join, but you don’t need to worry.</p>
<p>There is a good chance that you may already know most of the stuff, and there are also a lot of useful <a target="_blank" href="http://www.java67.com/2018/08/top-10-free-java-courses-for-beginners-experienced-developers.html">free resources</a> which you can use — I have also linked to them here and there along with the other resources, which are certainly not free, but worth of money.</p>
<p>I am a particular fan of Udemy courses as they are very affordable and provide a lot of values in a very small amount, but you are free to choose the course you want.</p>
<p>At the end of the day, you should have enough knowledge and experience from using the resources mentioned here.</p>
<p>Good luck with your Java journey! It’s certainly <strong>not going to be easy</strong>, but by following this roadmap and guide, you are one step closer to becoming the Java Developer you always wanted to be</p>
<p>If you like this article then please consider following me on medium (<a target="_blank" href="https://www.freecodecamp.org/news/must-read-books-to-learn-java-programming-327a3768ea2f/undefined">javinpaul</a>). If you’d like to be notified for every new post, don’t forget to follow <a target="_blank" href="https://twitter.com/javarevisited">javarevisited</a> on Twitter!  </p>
<p>Once again, all the best for your Java Development Journey and a Big thanks to all the authors for writing such awesome books. These top Java programming books are some of the best books to learn Java — I would even say that some of them are the best Java books ever published.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Books that Junior Developers should read ]]>
                </title>
                <description>
                    <![CDATA[ By Khalil Stemmler These books “are basically cheat codes” for leveling up your skills and knowledge as a developer. Whether you’re a new developer or you’re fairly experienced as a programmer, you’ll come to realize that the amount of time you’ve wo... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/9-books-for-junior-developers-in-2019-e41fc7ecc586/</link>
                <guid isPermaLink="false">66d45f633dce891ac3a96808</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ careers ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Junior developer  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 13 Mar 2019 13:23:21 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*saCtF1gMCsRietI_i9mYwQ.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Khalil Stemmler</p>
<h4 id="heading-these-books-are-basically-cheat-codes-for-leveling-up-your-skills-and-knowledge-as-a-developer">These books “are basically cheat codes” for leveling up your skills and knowledge as a developer.</h4>
<p>Whether you’re a new developer or you’re fairly experienced as a programmer, you’ll come to realize that the amount of time you’ve worked at a job isn’t the best way to determine your skill and knowledge as a programmer (I know, tell that to the recruiters ?).</p>
<p>What you do in your spare time and how you choose to take learning into your own hands is what’s going to ultimately determine your success in this industry. That’s why it’s so important for us as developers to adopt a growth mindset.</p>
<p>There are some excellent ways to learn and improve as a developer. Some of those ways are pair-programming, online courses, meetups, work experience, building projects and finding a mentor.</p>
<p>One of my personal favorite ways to learn is to crack open a well-written book and try to absorb something from those who have distilled years of knowledge and insight into a permanent artifact.</p>
<p>Here are my personal recommendations that I think all developers (especially junior ones) should read at some point. These books are all highly regarded by professionals in our industry and have the potential to leave a profound impact on the quality of your work and your speed of development &amp; learning.</p>
<p>Some of them stray from the technical details and focus more on giving you practical rules about what it means to be a good developer on the interpersonal and professional level.</p>
<blockquote>
<p><strong><em>Disclosure:</em></strong> <em>Some of the links below are affiliate links. But, I’ve only added those books that I personally feel are useful for a junior dev.</em></p>
</blockquote>
<h3 id="heading-1-clean-code"><strong>1. Clean Code</strong></h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/0132350882/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0132350882&amp;linkId=63a7fb47960db0590eabb58edf25aee5">by Robert C. Martin (Uncle Bob)</a></p>
<p>After you overcome the basic challenges of development and get comfortable figuring out how to write code to solve problems, it’d be a good idea to take a look at this book. It turns out that making the code work the first time is actually the easy part. The hard part is making your code read well so that others are able to understand it and change it in the future.</p>
<p>Remember the last time you had to read code like this?</p>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">calculateIt</span> (<span class="hljs-params">a, b</span>) </span>{
 <span class="hljs-keyword">if</span> (a.delta &lt; b.element.x) {
   <span class="hljs-keyword">var</span> x = b.element.x;
   <span class="hljs-keyword">return</span> x - b.delta.x
 } <span class="hljs-keyword">else</span> {
   <span class="hljs-keyword">var</span> y = b.next.y;
   <span class="hljs-keyword">var</span> h = b.element.y * <span class="hljs-number">2</span>;
   <span class="hljs-keyword">return</span> y - h
 }
}
</code></pre>
<p>Who knows what it really does. Code like this might work, but the moment we need to change it, we have to hope the author of the code is still in the company and pray that they are somehow able to decipher what they wrote potentially years ago.</p>
<p>When careful attention isn’t taken to write code that’s readable and maintainable, we end up with pockets of code like this that everyone is afraid to touch, and if it ever breaks, we’re in trouble.</p>
<p>Uncle Bob’s “Clean Code” teaches you how to identify what clean code looks like compared to bad code, and it teaches you how to transform it into good code. A task like this sounds trivial to most, but you’d be surprised at how turning a just a few clean software design principles into habits can help you write much more professional and scalable code.</p>
<p>We’re software craftspeople, you know. Building a house is not much different than building an application in principle. We need to pay attention to the details or else it can all become very expensive to fix in the future if not done right first time.</p>
<h3 id="heading-2-the-clean-coder">2. The Clean Coder</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/0137081073/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0137081073&amp;linkId=c172b446308df330b348e0db03e30168">by Robert C. Martin (Uncle Bob)</a></p>
<p>This book is not necessarily a technical book as it is a book for teaching you how to be a professional in this industry. Professionals are those who, when faced with challenges, uncertainty and pressure, will continue to treat creating software as a craft and will be determined to adhere to their professional values.</p>
<p>The Clean Coder is full of practical advice on estimation, refactoring, testing, dealing with conflict, schedules, avoiding burnout, and much more. Trusted advice from someone who has spent decades doing this stuff.</p>
<p>One of the best things it teaches, is how to have integrity as a developer, when to say “No” and how to say it.</p>
<p>A book about professionalism.</p>
<h3 id="heading-3-refactoring">3. Refactoring</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/0134757599/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0134757599&amp;linkId=cd665cc1a6483955a2d51dd2d1a576d1">by Martin Fowler</a></p>
<p>Martin Fowler is one of my favorite authors. The first reason is that he’s hilarious. His approach to writing software books is unmistakably “Fowler”. The other reason is that he’s incredibly good at explaining complex topics, and doing so very simply, in a way that doesn’t fatigue you as a reader.</p>
<p>Refactoring is a book that the creator of Ruby on Rails once said that you should “read before you write another line of code”. Fowler guides you through refactoring a simple application, introducing you to a number of techniques that he’s accumulated and cataloged over his years of consulting.</p>
<p>Fowler shows you how to flip between coding and refactoring, how often you should be committing your code and when you should be writing your tests. Highly recommended. The latest version of this book was updated to present the examples in JavaScript, which was an added plus for me since it’s my favorite language.</p>
<h3 id="heading-4-design-patterns-elements-of-reusable-object-oriented-software">4. Design Patterns: Elements of Reusable Object-Oriented Software</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/0134757599/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0134757599&amp;linkId=cd665cc1a6483955a2d51dd2d1a576d1">by Erich Gamma, Richard Helm, Ralph Johnson, &amp; John Vlissides</a></p>
<p>This is the seminal book on Design Patterns. What are design patterns, you ask? Design Patterns are well-known solutions to commonly occurring problems in software development. If you’re familiar with the patterns, you’ll find that you’ll be able to greatly reduce the amount of time it takes you to put forth the solutions to those problems.</p>
<p>Having a good awareness of design patterns also allows you to communicate your solutions effectively with other developers.</p>
<blockquote>
<p><em>“Yeah, I just used a Facade overtop of whichever database Adapter gets loaded from the Strategy.”</em>  </p>
<p><em>“Ahh! Gotcha.”</em></p>
</blockquote>
<p>Yeah, it’s an older book. But it’s still one of the best for reference. If you’d like something on this topic that’s a bit more recent and friendly, I’d also recommend the good “Head First Design Patterns: A Brain-Friendly Guide” by Eric Freeman.</p>
<h3 id="heading-5-domain-driven-design-tackling-complexity-in-the-heart-of-software">5. Domain-Driven Design: Tackling Complexity in the Heart of Software</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/0321125215/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0321125215&amp;linkId=c16807ab5ed838159eb3a89a339459a6">by Eric Evans</a></p>
<p>In order for large code bases to continue to scale, we need to logically split up code into different parts. The idea is to partition your code in a way such that it would be possible for separate teams to work on those parts of your system without affecting anyone else.</p>
<p>The underlying concept that enables moving your code base in this direction is Domain-Driven Design (DDD). It’s an approach to software development where we model the problems that exist in the “problem domain” (the real world) to a number of solution domains.</p>
<p>DDD is incredibly important when a code base gets sufficiently large. Large enterprise companies employ DDD in order to assign teams to parts of the company’s code base.</p>
<p>Eric Evan’s coined the term “Ubiquitous Language”, which is the term for building a common, all-encompassing language between the developers, the domain experts and any other users or actors in the domain. By using this Ubiquitous Language, it ensures that the most important domain concepts are well understood and get modeled in the software.</p>
<p>The book is a little more technical and challenging than the others, but if you get familiar with these concepts, you’ll be very well off in understanding how today’s largest companies keep their code bases manageable and scalable.</p>
<h3 id="heading-update-april-17th-2019"><strong>Update: April 17th, 2019</strong></h3>
<p>I’ve thought about this recommendation a little bit. Introduction to the DDD world is, in my opinion, extremely beneficial for Junior Developers. I believe this to be true because DDD places importance on familiarity with <strong>software architecture</strong>, <strong>design</strong> <strong>principles</strong> and <strong>design patterns</strong>. It’s a great way to practically introduce yourself to a higher level of programming.</p>
<p>That said, DDD is a large and challenging topic. For some readers, this book (the seminal <em>“blue book”</em>) by Eric Evans might be better treated as a reference. It was Eric Evans who wrote the first book on DDD.</p>
<p>However, I just recently finished reading <a target="_blank" href="https://www.amazon.ca/gp/product/0134434420/ref=as_li_tl?ie=UTF8&amp;camp=15121&amp;creative=330641&amp;creativeASIN=0134434420&amp;linkCode=as2&amp;tag=stemmlerjs09-20&amp;linkId=a783087421f92bcb1952c4f4fae2112f">DDD Distilled</a> by Vaughn Vernon. It’s a really short and sweet intro to DDD, written in order to address the fact that most books on DDD are huge in size.</p>
<p>Definitely try DDD Distilled instead. I think this book would be a lot better for most developers in order to get ramped up on the DDD essentials first. For more practical details on how to implement the concepts, refer back to “<a target="_blank" href="https://www.amazon.ca/gp/product/0321125215/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0321125215&amp;linkId=521ea5470496a6c68831718b074489eb">the blue book</a>” and “<a target="_blank" href="https://www.amazon.ca/gp/product/0321834577/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0321834577&amp;linkId=e5acbe0b630c48120491d54298adc2c1">the red book</a>”.</p>
<h3 id="heading-6-soft-skills-the-software-developers-life-manual">6. Soft Skills: The Software Developer’s Life Manual</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/1617292397/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=1617292397&amp;linkId=d1e4c3b453d124d01e886aab876c8ff9">by John Sonmez</a></p>
<p>We should strive to stay well-balanced as a software developer. Unfortunately, being well-balanced is not a trait that most people affiliate with software developers. The truth is, it’s incredibly important to invest in your learning, health and overall well-being as a developer.</p>
<p>“Soft skills” is about the important stuff that matters outside of actually coding, like productivity, career goals and personal finance. Sonmez also goes into investing, how he retired at 33, fitness hacking tips and maintaining relationships - things rarely addressed in the programming community.</p>
<p>It’s written in such a way that you can jump into the book at whichever chapter you think is most relevant to you today.</p>
<h3 id="heading-7-clean-architecture">7. Clean Architecture</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/0134494164/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0134494164&amp;linkId=32995f69d0747d8723d42ffdda296878">by Robert C. Martin (Uncle Bob)</a></p>
<p>What? Uncle Bob writes good books, ok?</p>
<p>In school, there’s a lot of focus on algorithms and less focus on software design principles. I think it’s kind of unfortunate because in reality, you don’t encounter that many algorithm challenges too often. Instead, it’s more common that you’ll be faced with the challenge of structuring your code in a way that’s modular, flexible, readable and will allow you to add new features quickly when requirements change.</p>
<p>Clean Architecture is about the essential software design principles and patterns that you’ll be able to use in order to face these challenges.</p>
<p>Some of the best takeaways from this book are the cost of dependencies, stable vs. non-stable code and the SOLID principles: a way to write code so that it’s more understandable, flexible and maintainable.</p>
<p>Other aspects of this book that were incredibly useful were concepts of “screaming architecture” and “packaging by component” which are opinions on how to organize your modules so that it practically <strong><em>screams</em></strong> to the reader exactly what the project is all about.</p>
<p>This book goes well hand-in-hand with Domain-Driven Design, which is enabled through the use of a “Layered Architecture” or as Uncle Bob calls it, “The Clean Architecture” (also known as Ports and Adapters). A great book for anyone who wants to up their architecture chops and learn how to effectively design a system at a high level, and do the dance of dependencies at the detail level.</p>
<h3 id="heading-8-the-effective-engineer">8. The Effective Engineer</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/0996128107/ref=as_li_tl?ie=UTF8&amp;tag=stemmlerjs09-20&amp;camp=15121&amp;creative=330641&amp;linkCode=as2&amp;creativeASIN=0996128107&amp;linkId=c26139ec47911c60569dc5851da21d06">by Edmond Lau</a></p>
<p>Time is our single most valuable asset in life, and we should aim to be more efficient with it. It’s easy to get bogged down and spend a lot of time fixing bugs and wasting effort. Doing repeated work. Bleh. The Effective Engineer is all about getting more done in less time and removing repeated work.</p>
<p>We can mitigate wasted time and effort on repetitive tasks through a framework called “leverage”.</p>
<p>Leverage helps you identify the activities that you can do that produce the most disproportionate results- per unit of time invested. It’s a framework that can apply to anything, whether that be how you learn, how you code, how you debug… anything!</p>
<h3 id="heading-9-the-pragmatic-programmer">9. The Pragmatic Programmer</h3>
<p><a target="_blank" href="https://www.amazon.ca/gp/product/020161622X/ref=as_li_tl?ie=UTF8&amp;camp=15121&amp;creative=330641&amp;creativeASIN=020161622X&amp;linkCode=as2&amp;tag=stemmlerjs09-20&amp;linkId=005803be38be1c9a5d5b8c01afb049f3">by Andrew Hunt &amp; David Thomas</a></p>
<p>Praised for being easy to follow and understand, The Pragmatic Programmer is a book that should be on the desktop of developers of all levels. Andrew and David are programmers that not only spent many years doing what they do, but paying attention to what they were doing <strong>as they were doing it</strong>, and then <strong>trying to determine if they could do that better</strong>.</p>
<p>What came out of their years of introspection was this book, which introduces a number of essential programmer philosophies to follow throughout your career, like “programmers should have a “do it once, or automate” philosophy”.</p>
<p>It includes simple yet detailed advice that you should carry with you in the back of your mind before you write another line of code or start a new project.</p>
<h3 id="heading-final-words">Final Words</h3>
<p>Books really are some of the best tools to improve your knowledge and skills as a new programmer or Junior Developer. Books tend to have a really high return on investment; did you know you can make a lot of money programming? ?</p>
<p>These are just a few of the best books out there right now in 2019! None of them are really new, but that’s because programming has maintained the same general philosophies and best practices for years. As a professor I once had to say, “<strong>you can make a lot of money in this industry, you just have to read the damn manual</strong>”.</p>
<p>Have you read any of these books? What did you think? Any books not on this list that you think newer developers would really benefit from reading? Let us know in the comments!</p>
<h3 id="heading-additional-resources">Additional Resources</h3>
<p>Here’s a list of some really excellent articles that cover some of the topics from these books. If you don’t quite have the time to invest in fully blown books right now, familiarizing yourself with these concepts might assist you in your journey to become a better developer!</p>
<p><strong>Surviving Your First Junior Developer Job [Guide]</strong> ??<br><a target="_blank" href="https://univjobs.ca/blog/developer-guides/ultimate-guide-for-first-junior-developer-job-success/">https://univjobs.ca/blog/developer-guides/ultimate-guide-for-first-junior-developer-job-success/</a></p>
<p><strong>Refactoring.guru</strong><br><a target="_blank" href="https://refactoring.guru/">https://refactoring.guru/</a></p>
<p><strong>SOLID Design Principles</strong><br><a target="_blank" href="https://stackify.com/solid-design-principles/">https://stackify.com/solid-design-principles/</a></p>
<p><strong>DRY (Don’t Repeat Yourself)</strong><br><a target="_blank" href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">https://en.wikipedia.org/wiki/Don%27t_repeat_yourself</a></p>
<p><strong>NodeJS and Good Practices</strong><br><a target="_blank" href="https://blog.codeminer42.com/nodejs-and-good-practices-354e7d76362">https://blog.codeminer42.com/nodejs-and-good-practices-354e7d76362</a></p>
<p><strong>Implementing the SOLID and the onion architecture in Node.js</strong><br><a target="_blank" href="https://dev.to/remojansen/implementing-the-onion-architecture-in-nodejs-with-typescript-and-inversifyjs-10ad">https://dev.to/remojansen/implementing-the-onion-architecture-in-nodejs-with-typescript-and-inversifyjs-10ad</a></p>
<p><strong>Better Software Design with Clean Architecture</strong><br><a target="_blank" href="https://fullstackmark.com/post/11/better-software-design-with-clean-architecture">https://fullstackmark.com/post/11/better-software-design-with-clean-architecture</a></p>
<p><strong>The Clean Architecture</strong><br><a target="_blank" href="http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html">http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html</a></p>
<h4 id="heading-my-upcoming-free-resource-an-introduction-to-software-architecture-and-design-principles-with-nodejs-and-typescript"><strong>My upcoming free resource, an introduction to software architecture and design principles with Node.js and TypeScript</strong></h4>
<p><a target="_blank" href="https://khalilstemmler.com/resources/solid-nodejs-architecture">https://khalilstemmler.com/resources/solid-nodejs-architecture</a></p>
<p>Keep growing, and have fun while you’re at it!</p>
<hr>
<p>If you’re a Canadian student or recent-grad looking for entry-level developer opportunities or co-ops/internships, you should check out our platform, <a target="_blank" href="http://bit.ly/2HQ1g6y">Univjobs</a>. We only post jobs specifically for students and recent-grads.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to launch your own open source book that’s popular and profitable ]]>
                </title>
                <description>
                    <![CDATA[ By Baptiste Pesquet I am the author of The JavaScript Way, a self-published open source book for learning to code. Despite the lack of any initial audience, it topped GitHub trending charts worldwide during its launch. This is the story of this unexp... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/taking-off-the-successful-launch-of-an-open-source-book-7553a2262898/</link>
                <guid isPermaLink="false">66c36030a365c359945c9b8e</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ writing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 03 Oct 2017 20:29:18 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*i0W3owJAB1oR57Bu6v1_Hw.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Baptiste Pesquet</p>
<p>I am the author of <a target="_blank" href="https://github.com/bpesquet/thejsway">The JavaScript Way</a>, a self-published open source book for learning to code. Despite the lack of any initial audience, it topped GitHub trending charts worldwide during its launch.</p>
<p>This is the story of this unexpected success.</p>
<h3 id="heading-project-inception">Project inception</h3>
<p>At the beginning of this project, I <a target="_blank" href="https://medium.com/@bpesquet/walk-this-javascript-way-e9c45ab5b696">explained</a> why I started it and went over some of my initial choices. In short:</p>
<ul>
<li>There was a need for a book teaching modern JavaScript to beginners.</li>
<li>I decided to self-publish this book and write it in the open on <a target="_blank" href="https://github.com">GitHub</a>. Doing so, I was hoping to reach as many people as possible. Also, to leverage the great <a target="_blank" href="https://en.wikipedia.org/wiki/Open-source_model">collaborative model</a> that is at the heart of open source.</li>
<li>The book would have a Creative Commons <a target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">BY-NC-SA</a> license. It allows anyone to share or build upon my work as long as some rules are observed. In particular, no commercial purposes outside of mine are allowed.</li>
</ul>
<p>Also, some key factors in the decision were:</p>
<ul>
<li>Text is still a great medium to convey knowledge. So, the choice of a book instead of some video-based material.</li>
<li>I already authored two online courses on the same topic (<a target="_blank" href="https://openclassrooms.com/courses/learn-the-basics-of-javascript">here</a> and <a target="_blank" href="https://openclassrooms.com/courses/use-javascript-on-the-web">there</a>). The feedback for them has been very positive, so I knew that I had some pretty solid content at hand.</li>
<li>I wanted to hone my JavaScript skills, and knew firsthand that teaching something is a great way to master it.</li>
</ul>
<p>What I lacked was an initial audience, something often seen as a critical asset for this kind of project. Since someone has to start somewhere, I went on anyway.</p>
<h3 id="heading-choosing-a-business-model">Choosing a business model</h3>
<p>Every creator faces the same dilemma. How to share your work with the world that would make an impact and also be profitable? There is no definitive answer to this age-old question.</p>
<p>The digital revolution has turned things upside down for authors. It has lowered the distribution and sharing costs to zero. In our “reputation economy”, content creators must battle to gain consumer attention. As a new player in this field, meeting success will be very difficult if all your content sits behind a paywall. Some of it <em>has</em> to be available for free.</p>
<p>For authors, the most common marketing tactic is now to split your work into several parts. The first one free, gives potential customers a glimpse of your content and style. In the hope that hooked up customers will buy the other parts.</p>
<p>Kyle Simpson’s alternative <a target="_blank" href="https://github.com/getify/You-Dont-Know-JS/blob/master/CONTRIBUTING.md#reading-experience-chaptersection-links-etc">choice</a> for its quite successful <a target="_blank" href="https://github.com/getify/You-Dont-Know-JS">You Don’t Know JS</a> book series appealed to me. Like him, I decided to give away the entire book content for free, but let users pay for a better reading experience through the ebook version.</p>
<p>Taking example from <a target="_blank" href="https://leanpub.com/rprogramming">another self-published bestseller</a>, I chose to include coding exercises and projects right into the book, but sell their solutions as an extra.</p>
<p>This “hybrid” business model seemed a reasonable balance between openness and potential profit.</p>
<h3 id="heading-building-an-audience-or-not">Building an audience (or not)</h3>
<p>Another common marketing advice is building some audience through a mailing list, using some existing content (for example, your own blog) as a magnet.</p>
<p>I don’t like this approach very much and didn’t want to bother my readers with any subscription.</p>
<p>I also considered launching a crowdfunding campaign. Without any initial audience, this seemed to me as a lot of work for a very uncertain outcome, so I shied away from it. Maybe next time!</p>
<h3 id="heading-tools-and-process">Tools and process</h3>
<p>The very best file format for authoring <em>any</em> book (not only technical ones) is <strong>plain text</strong>. No need for a dedicated editor. No interoperability issue. The ability to use a <a target="_blank" href="https://en.wikipedia.org/wiki/Version_control">version control</a> system like <a target="_blank" href="https://git-scm.com/">Git</a> to keep track of changes.</p>
<p>Among the various text-based markup languages available. I chose <a target="_blank" href="https://en.wikipedia.org/wiki/Markdown">Markdown</a> because I already knew and liked its syntax. Markdown is also a first-class citizen on GitHub, which was essential for this project.</p>
<p>A self-published author needs a toolchain to transform the raw manuscript files into various ebook formats (PDF, EPUB, MOBI). For me, the <a target="_blank" href="https://leanpub.com">Leanpub</a> platform ticked all the boxes: Markdown support, integration with GitHub and a fair royalty structure (90% minus 50 cents per sale).</p>
<p>I used the free text editor <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> for authoring the book files on my computer. It has great Markdown support out of the box and a very convenient side-by-side file preview (see image below). Extensions like <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=mdickin.markdown-shortcuts">Markdown Shortcuts</a> and <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint">markdownlint</a> can be installed to become even more productive.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Y5eTbqW4dc3WfElzvEWI2vEcnVTc3UfilwkK" alt="Image" width="800" height="500" loading="lazy"></p>
<p>After all tools were chosen, I drafted the book outline (a very important first step) using my previous courses as a basis. Then I dived into the writing process.</p>
<h3 id="heading-early-publishing">Early publishing</h3>
<p>Leanpub’s motto is “Publish early, publish often”. The platform empowers you to publish early drafts of your work. Receive feedback and create traction, enabling an <a target="_blank" href="https://en.wikipedia.org/wiki/Minimum_viable_product">MVP</a>-like approach to book authoring.</p>
<p>It’s a great idea on paper… Which unfortunately didn’t work at all for me. One month after the writing process started, I made the book public on Leanpub. By that time, the ebook price was $0, so anyone could get it for free.</p>
<p>I told my personal network about it, <a target="_blank" href="https://twitter.com/bpesquet/status/836354787616641024">twitted</a> about it, submitted it to <a target="_blank" href="https://www.reddit.com/r/javascript/comments/5wmw8q/the_javascript_way_a_new_book_for_learning_modern/">Reddit</a> and <a target="_blank" href="https://news.ycombinator.com/item?id=13749641">Hacker News</a>. I also reached out to other book authors or prominent individuals. I also reached out to Kyle Simpson, <a target="_blank" href="https://www.robinwieruch.de/">Robin Wieruch</a> and freeCodeCamp’s <a target="_blank" href="https://twitter.com/ossia">Quincy Larson</a>, looking for advice and support.</p>
<p>The outcome was a mixed bag. A few GitHub stars, a handful of messages on Twitter and Reddit. An HN thread that went out-of-topic and got buried. Execution was poor, the lack of any initial audience was too much of a disadvantage there.</p>
<p>A majority of comments were like “Ping me back when it’s finished”. People may not want to invest time to read in-progress books, which is understandable after all.</p>
<p>But, individual responses from Kyle, Robin and Quincy were hearthwarming. They played a big role in keeping me motivated. I’m very thankful to them.</p>
<h3 id="heading-the-writing-phase">The writing phase</h3>
<p>Even after this underwhelming early launch, I was still convinced that my book was worth something. I didn’t want to give up after having already spent dozens of hours on it. Using an unchanged book outline, I went for a no-feedback route and kept on writing all by myself until the book got finished.</p>
<p>That was the hardest part. Spending countless hours, day after day, only to see things take shape very slow. Inevitably, doubts surface: how could it ever succeed? Is this all a giant waste of time? Why am I inflicting this to myself?</p>
<p>The key to overcome these obstacles is <strong>putting the right amount of pressure on yourself</strong>. If your time commitment is too scarce, you will lose motivation and give up. But, trying to move forward too fast, neglecting other important aspects of your life along the way, is risky on many levels.</p>
<p>After all, this was only a side project. Low risk, low pressure! Self-publishing means I had no deadlines to meet, which can be both a blessing and a curse. I tried to use this to my advantage: I was free to invest time in something I believed into, but at my own pace.</p>
<p>I found a reasonable balance (about 10–15 hours a week) between work, personal life and the writing process. Limited long and hazardous breaks. This <a target="_blank" href="https://open.buffer.com/side-projects-creative-hobbies/">article on side projects</a> gives useful advice to keep things going during this phase.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/vHUYXRM9s9XVXig3ZhqCoCA3nP2Br7Sinym7" alt="Image" width="499" height="209" loading="lazy">
<em>My commit statistics on GitHub during the writing phase</em></p>
<p>Luckily, I had some existing material to build upon. Some experience writing content on my own… And also a very understanding spouse ;)</p>
<h3 id="heading-launch-day">Launch day</h3>
<p>After eight months of steady work and a few last hours feverishly spent fixing things here and there, my book was ready at last!</p>
<p>The upside of writing in a vacuum like I did is that your book launch becomes a pretty big event. After such a huge time investment, it’s a great feeling (and also a huge relief) to show your finished creation to the world.</p>
<p>For lack of anything better, I reused my previous launch strategy. <a target="_blank" href="https://twitter.com/bpesquet/status/890564975596630017">Twitter</a>, <a target="_blank" href="https://www.reddit.com/r/javascript/comments/6poszc/the_javascript_way_a_new_book_for_learning_modern/">Reddit</a> and <a target="_blank" href="https://news.ycombinator.com/item?id=14865043">Hacker News</a> (<a target="_blank" href="https://www.quora.com/When-is-the-best-time-to-post-on-Hacker-News-to-get-and-stay-long-on-the-front-page">timing submissions</a> for most visibility). Also, the same nice people that kept me motivated after the early launch.</p>
<p>To my astonishment, the result was this time overwhelmingly positive. Kyle Simpson and Quincy Larson kindly tweeted about the book to their dozens of thousands of followers.</p>
<p>Hour after hour, I watched in awe of disbelief as rave comments and retweets piled into my inbox. I finally knew that my book would have an impact.</p>
<p>Launch is also the blissful moment where the magic of open source happens. People can read and share your book for free. Creating traction without any marketing effort. But they can also improve its quality through contributions using GitHub <a target="_blank" href="https://guides.github.com/features/issues/">issues</a> and <a target="_blank" href="https://help.github.com/articles/about-pull-requests/">pull requests</a>.</p>
<p>Since I’m not an English native and didn’t have an editor by my side to proof check the content. I knew that my book contained many typos and errors at launch. I hoped people would help to spot and correct them, and wasn’t disappointed.</p>
<p>Here are a few figures gathered two days after launch:</p>
<ul>
<li>The book repository on GitHub had more than <strong>51k views</strong> from <strong>17k unique visitors</strong>. The bulk of this traffic came from Hacker News, followed by Reddit.</li>
<li>It gained more than <strong>2,400 stars</strong>, and becoming the <strong>#1 trending repo</strong>worldwide for a day.</li>
<li>The Hacker News story climbed to <strong>#5 rank</strong> on the front page, generating more than a hundred comments.</li>
<li>Readers submitted <strong>30 pull requests</strong>, correcting many of the book’s initial mistakes. Small typos for the most part, but also grammatical improvements and even a few coding errors.</li>
<li>I already received <strong>two translation requests</strong>, to Spanish and Chinese.</li>
</ul>
<p>All in all, far more than what I could dream of.</p>
<h3 id="heading-financial-outcome">Financial outcome</h3>
<p>Can an open source book be profitable after all? Of course, it’s too soon to tell. Two days after launch, it became Leanpub’s bestselling book of the week, with more than <strong>$1,000</strong> in royalties.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/7fU7sEq2J2tPqUKuOqKBIP7Z9nEBHlbpbwf8" alt="Image" width="724" height="562" loading="lazy">
<em>Leanpub royalties dashboard two days after launch</em></p>
<p>Profitability was not the reason this project was started in the first place. Yet the hybrid pricing model, with free sources and paid ebook/corrections, will ultimately contribute to the book’s reputation while making for some welcome passive income.</p>
<p>Later on, I may create a paperback version of the book (Maybe <a target="_blank" href="https://www.createspace.com/">Amazon CreateSpace</a>) if there is any demand for it. An interactive online course offering a richer user experience is already under way.</p>
<p>Most importantly, I have the deep satisfaction of having contributed something meaningful to the community. Thousands of people around the world will use my book to learn to code, improve at JavaScript and it may change their lives for the better.</p>
<p>And that is priceless.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>It wasn’t all roses, but self-publishing a successful open source book without any prior audience is definitely possible.</p>
<p>I hope this little story has entertained you. I also hope it might inspire you to start a creative project on your own, be it a book or something completely different.</p>
<p>I look forward to see what you will achieve!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How I used machine learning to explore the differences between British and American literature ]]>
                </title>
                <description>
                    <![CDATA[ By Sofia Godovykh As I delved further into English literature to further my own language gains, my interest was piqued: how do American and British English differ? With this question framed in my mind, the next steps were to apply natural language pr... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-differentiate-between-british-and-american-literature-being-a-machine-learning-engineer-ac842662da1c/</link>
                <guid isPermaLink="false">66c351c30107ba195e79f711</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Data Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Machine Learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ writing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 13 Jan 2017 13:58:43 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*qjL1gt3ru64goK8PYlTjVw.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Sofia Godovykh</p>
<p>As I delved further into English literature to further my own language gains, my interest was piqued: how do American and British English differ?</p>
<p>With this question framed in my mind, the next steps were to apply natural language processing and machine learning techniques to find concrete examples. I was curious to know whether it would be possible to train a classifier, which would distinguish literary texts.</p>
<p>It is quite easy to distinguish texts written in different languages since the cardinality of the intersection of words (features, in terms of machine learning) was relatively small. Text classification by category (such as science, atheism, computer graphics, etc.) is a well-known “hello world” when it comes to tasks related with working with text classification. I faced a more difficult task when I tried to compare two dialects of the same language, as texts have no common theme.</p>
<p>The most time consuming stage of machine learning deals with the retrieval of data. For the training sample, I used texts from Project Gutenberg, which can be freely downloaded. As for the list of American and British authors, I used names of authors I found in the Wikipedia.</p>
<p>One of the challenges I encountered was finding the name of the author of a text that matched the Wikipedia page. A good search by name was implemented on the site, but since the site doesn’t allow the parsing of data, I instead proposed to use files that contained metadata. This meant that I needed to solve a non-trivial task of matching names (Sir Arthur Ignatius Conan Doyle and Doyle, C. is the same person, but Doyle, M.E. is a different person) — and I had to do so with a very high level of accuracy.</p>
<p>Instead, I chose to sacrifice the sample size for the sake of attaining high accuracy, as well as saving some time. I chose, as a unique identifier, an author’s Wikipedia link, which was included in some of the metadata files. With these files, I was able to acquire about 1,600 British and 2,500 American texts and use them to begin training my classifier.</p>
<p>For this project I used sklearn package. The first step after the data collection and analysis stage is pre-processing, in which I utilized a CountVectorizer. A CountVecrorizer takes a text data as input and returns a vector of features as output. Next, I needed to calculate the <strong>tf-idf</strong> (term frequency — inverted document frequency). A brief explanation why I needed to use it and how:</p>
<p>For example, take the word “the” and count the number of occurrences of the word in a given text, A. Let’s suppose that we have 100 occurrences, and the total number of words in a document is 1000.</p>
<p>Thus,</p>
<p><code>tf(“the”) = 100/1000 = 0.1</code></p>
<p>Next, take the word “sepal”, which has occurred 50 times:</p>
<p><code>tf(“sepal”) = 50/1000 = 0.05</code></p>
<p>To calculate the inverted document frequency for these words, we need to take the logarithm of the ratio of the number of texts from which there is at least one occurrence of the word, to the total number of texts. If there are all 10,000 texts, and in each, there is the word “the”:</p>
<p><code>idf(“the”) = log(10000/10000) = 0</code> and</p>
<p><code>tf-idf(“the”) = idf(“the”) * tf(“the”) = 0 * 0.1 = 0</code></p>
<p>The word “sepal” is way more rare, and was found only in the 5 texts. Therefore:</p>
<p><code>idf(“sepal”) = log(10000/5) and tf-idf(“sepal”) = 7.6 * 0.05 = 0.38</code></p>
<p>Thus, the most frequently occurring words carry less weight, and specific rarer ones carry more weight. If there are many occurrences of the word “sepal”, we can assume that this is a botanical text. We can not feed a classifier with words, we will use tf-idf measure instead.</p>
<p>After I had presented the data as a set of features, I needed to train the classifier. I was working with text data, which is presented as sparse data, so the best option is to use a linear classifier, which works well with large amounts of features.</p>
<p>First, I ran the CountVectorizer, TF-IDFTransformer and SGDClassifier using the default parameters. By analyzing the plot of the accuracy of the sample size — where accuracy fluctuated from 0.6 to 0.85 — I discovered that the classifier was very much dependent on the particular sample used, and therefore not very effective.</p>
<p>After receiving a list of the classifier weights, I noticed a part of the problem: the classifier had been fed with words like “of” and “he”, which we should have treated as a noise. I could easily solve this problem by removing these words from the features by setting the <code>stop_words</code> parameter to the CountVectorizer: <code>stop_words = ‘english’</code> (or your own custom list of stop words).</p>
<p>With the default stop words removed, I got an accuracy of 0.85. After that, I launched the automatic selection of parameters using GridSearchCV and achieved a final accuracy of 0.89. I may be able to improve this result with a larger training sample, but for now I stuck with this classifier.</p>
<p>Now on to what interests me most: which words point to the origin of the text? Here’s a list of words, sorted in descending order of weight in the classifier:</p>
<p><strong>American:</strong> dollars, new, york, girl, gray, american, carvel, color, city, ain, long, just, parlor, boston, honor, washington, home, labor, got, finally, maybe, hodder, forever, dorothy, dr</p>
<p><strong>British:</strong> round, sir, lady, london, quite, mr, shall, lord, grey, dear, honour, having, philip, poor, pounds, scrooge, soames, things, sea, man, end, come, colour, illustration, english, learnt</p>
<p>While having fun with the classifier, I was able to single-out the most “American” British authors and the most “British” American authors (a tricky way to see how bad my classifier could work).</p>
<p><strong>The most “British” Americans:</strong></p>
<ul>
<li>Frances Hodgson Burnett (born in England, moved to the USA at age of 17, so I treat her as an American writer)</li>
<li>Henry James (born in the USA, moved to England at age of 33)</li>
<li>Owen Wister (yes, the father of Western fiction)</li>
<li>Mary Roberts Rinehart (was called the American Agatha Christie for a reason)</li>
<li>William McFee (another writer moved to America at a young age)</li>
</ul>
<p><strong>The most “American” British:</strong></p>
<ul>
<li>Rudyard Kipling (he lived in America several years, also, he wrote “American Notes”)</li>
<li>Anthony Trollope (the author of “North America”)</li>
<li>Frederick Marryat (A veteran of Anglo-American War of 1812, thanks to his “Narrative of the Travels and Adventures of Monsieur Violet in California, Sonara, and Western Texas” which made him fall into the american category)</li>
<li>Arnold Bennett (the author of “Your United States: Impressions of a first visit”) one more gentleman wrote travel notes</li>
<li>E. Phillips Oppenheim</li>
</ul>
<p>And also the most “British” British and “American” American authors (because the classifier still works well):</p>
<p><strong>Americans:</strong></p>
<ul>
<li>Francis Hopkinson Smith</li>
<li>Hamlin Garland</li>
<li>George Ade</li>
<li>Charles Dudley Warner</li>
<li>Mark Twain</li>
</ul>
<p><strong>British:</strong></p>
<ul>
<li>George Meredith</li>
<li>Samuel Richardson</li>
<li>John Galsworthy</li>
<li>Gilbert Keith Chesterton</li>
<li>Anthony Trollope (oh, hi)</li>
</ul>
<p>I was inspired to do this work by @TragicAllyHere tweet:</p>
<p>Well, wourds really matter, as I realised.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ A Cognitive Sciences Reading List for Designers ]]>
                </title>
                <description>
                    <![CDATA[ By Andy Fitzgerald If you’ve ever done any contextual inquiry or usability testing, you’ve probably observed first hand the difference between what people say they will do and what they actually end up doing. Overlooked calls to action, bizarre navig... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/a-cognitive-sciences-reading-list-for-designers-5297c2934aa9/</link>
                <guid isPermaLink="false">66c3423a4f1fc448a3678f70</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ psychology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ user experience ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UX ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 29 Jul 2016 01:11:56 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*oKOl5SS8hsaDWETEAOFGlQ.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Andy Fitzgerald</p>
<p>If you’ve ever done any contextual inquiry or usability testing, you’ve probably observed first hand the difference between what people say they will do and what they actually end up doing. Overlooked calls to action, bizarre navigation paths, mind-bogglingly irrational decisions — even the most sensible seeming users occasionally (or often) do things that “rationally” make little sense.</p>
<p>Which is to say that we all, on occasion (or often) do things that seem to make little rational sense.</p>
<p>And yet, on a day-to-day basis, this is how we successfully negotiate the complexities of our world. We use heuristics (aka rules-of-thumb) and limited information to make decisions about how we live our lives, and we do it continuously throughout the day — often without stopping to consider why we choose one thing over another.</p>
<p>In order to get a better sense of how our often erratic decision making processes work behind the scenes — and better understand why they sometimes don’t — I’ve been doing more reading lately into cognitive science and decision making. This post is a quick roundup of the books I’ve found most enlightening to the task of designing information systems for messy, irrational humans.</p>
<h3 id="heading-embodied-amp-distributed-cognition">Embodied &amp; Distributed Cognition</h3>
<p>There’s been a lot of attention given lately to the idea that “thinking” doesn’t take place solely in the space between our ears. Modern notions of cognition understand thinking as a process that crosses into the body and spills out into the world. For a deeper understanding of how thinking is embodied and distributed, these texts are a good place to start:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Q8NVJzj2O3LNtZeB-0TCZJmZznUaOYsFJJAO" alt="Image" width="298" height="452" loading="lazy"></p>
<h4 id="heading-beyond-the-brain">Beyond the Brain</h4>
<p>Louise Barrett, 2011</p>
<p><strong>Theme</strong></p>
<p>It is an error to assume that complex behavior and complex cognition are necessarily linked and that the one can only arise from the other. By understanding how brains, bodies, and environment are connected, we can better understand how intelligent, adaptive behavior is produced.</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>“To make a distinction between perception and cognition as separate psychological processes is both arbitrary and false” (22).</li>
<li>“Language is not purely for communicating, but is also a way of effecting changes in our environment that enable us to achieve more than we could otherwise” (194).</li>
<li>“The real ‘problem solving machine’ is not the brain alone, but the brain, the body, and the environmental structures that we use to augment, enhance, and support internal cognitive processes” (219).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>Very readable with lots of relatable examples and relevant context. This book draws on and furthers a wide body of foundational work (Andy Clark figures in here a lot — we’ll get to him in a minute), but remains accessible to a general audience.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/FS3h08emhnCOlB4UHqn0UvEoM6ah3Vsm8Xkt" alt="Image" width="300" height="452" loading="lazy"></p>
<h4 id="heading-proust-and-the-squid">Proust and the Squid</h4>
<p>Maryanne Wolf, 2007</p>
<p><strong>Theme</strong></p>
<p>The process of learning to read creates physical changes in the brain that directly affect how that brain works and how we think. Understanding this process (neuroplasticity) in the reading brain prepares us to better understand the changes we’re currently undergoing as we “make the transition from a reading brain to an increasingly digital one.”</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>The efficient reading brain — which takes years to develop — literally has “more time to think” (54).</li>
<li>Contrary to spoken language, “there are neither genes nor biological structures specific only to reading. Instead, in order to read, each brain must learn to make new circuits by connecting older regions originally designed and genetically programmed for other things” (168).</li>
<li>“The new circuits and pathways that the brain fashions in order to read become the foundations for being able to think in different, innovative ways” (271).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>The first part of this book focuses on the plasticity of the brain and the ways that learning to read changes it. Wolf illustrates this story with historical accounts of writing in early societies and plenty of good ol’ neuroscience. Later chapters focus more closely on reading development in children and dyslexia before returning in a brief final chapter to the effects of digital technology on how our brains work.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/hkumflDGfderP0iAd1Zvn4rJ6rZlk7ZfbwpN" alt="Image" width="300" height="452" loading="lazy"></p>
<h4 id="heading-supersizing-the-mind">Supersizing the Mind</h4>
<p>Andy Clark, 2008</p>
<p><strong>Theme</strong></p>
<p>What we call “thinking” often occurs only partially in the brain: much of the human cognitive process regularly criss-crosses the boundaries of brain, body, and environment. “In building our physical and social worlds, we build (or rather, we massively reconfigure) our minds and our capacities of thought and reason” (xxviii).</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>“Words and linguistic strings are among the most powerful and basic tools we use to discipline and stabilize dynamic processes of reason and recall” (53).</li>
<li>“Gesture and speech are interacting parts of a distributed, semianarchic cognitive engine, participating in cognitively potent self-stimulating loops whose activity is as much an aspect of our thinking as its result” (133).</li>
<li>“The presence of humanlike minds depends quite directly on the possession of a humanlike body” (200).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>Clark makes a compelling and provocative case for radically rethinking the way human beings perceive, think, and act in the world; for him, all of these actions are part of a single, continuous process. Clark supports his claim by drawing on a wide range of sources in linguistics, robotics, biology, and neuroscience — from which he pulls a variety anecdotes and examples that keep the text humming along. Big ideas here and intense reading; well worth the effort.</p>
<h3 id="heading-meaning-making">Meaning Making</h3>
<p>Ferdinand de Saussure, the founder of linguistics, argued that without language, we wouldn’t have thought. Figuring out how we make meaning has lot to do with how we use and manipulate symbols. This field is plenty deep, but these titles will give you some practical ways to think about how “saying” and “meaning” relate:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/DzBmEXGu7Y6PN3-j4UmQiTFiASSLAcrj9Akm" alt="Image" width="276" height="452" loading="lazy"></p>
<h4 id="heading-metaphors-we-live-by">Metaphors We Live By</h4>
<p>George Lakoff and Mark Johnson, 1980</p>
<p><strong>Theme</strong></p>
<p>We have all at one time been taught to recognize a “metaphor” as a figure of speech, a particular use of language. Lakoff and Johnson argue that, to the contrary, metaphor as a linguistic expression is possible only because the human conceptual system and thought process is, at its core, metaphorically defined.</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>“Our values are not independent but must form a coherent system with the metaphorical concepts we live by” (22).</li>
<li>Even seemingly literal expressions are often structured by metaphorical concepts which highlight some aspects of experience while hiding others (51, 149).</li>
<li>Since truth is always relative to a conceptual system, and since any human conceptual system is mostly metaphorical in nature, there can be no fully objective, unconditional, or absolute truth (185).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>This book is a great first foray into the subtleties of how we use language and metaphor to construct meaning and make sense of the world. Lakoff and Johnson drive the narrative with examples out of everyday language and take the time to thoroughly explain their conclusions. This book is definitely one of my favs.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/eiD1h8fjs7ldJG72Pj0zmGteneKsMTXNLAAx" alt="Image" width="298" height="450" loading="lazy"></p>
<h4 id="heading-seeing-what-others-dont">Seeing What Others Don’t</h4>
<p>Gary Klein, 2013</p>
<p><strong>Theme</strong></p>
<p>Insight is not the result of concentration or a proven process, but rather of learning to “restructure beliefs.” To nurture the power of insight, we must change the story we use to understand events.</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>“Intuition is the use of patterns we’ve already learned, whereas insight is the discovery of new patterns” (27).</li>
<li>“Insights change our understanding by shifting the central beliefs — the anchors — in the story we use to make sense of events” (148).</li>
<li>“Confusions, contradictions, and conflicts can work as springboards to insight. We just have to replace our feelings of consternation with curiosity” (182).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>Klein’s book is the record of his own quest to figure out what sparks insight — and to figure out what keeps us from grasping insight that is right in front of us. He explores these questions, as well as the question of how to increase the flow of insight, across scores of stories of insight achieved (and missed). Very readable, very engaging.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/MFEx9SGdsEOUcdDxsueS6ezYOJRiPIOIwhBp" alt="Image" width="298" height="452" loading="lazy"></p>
<h4 id="heading-the-way-we-think">The Way We Think</h4>
<p>Gilles Fauconnier with Mark Turner, 2003</p>
<p><strong>Theme</strong></p>
<p>Identity, integration, and imagination are the result of the uniquely human ability to “blend” mental spaces by projecting elements from one frame of reference to another. This “cognitive blending” is the core process behind the human power to construct meaning.</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>“Meaning systems and formal systems are inseparable. They co-evolve in the species, the culture, and the individual” (11).</li>
<li>“The meanings we take most for granted are those where the complexity is best hidden” (24).</li>
<li>“Language does not represent meaning directly; instead, it systematically prompts the construction of meaning” (142).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>The Way We Think provides one of the most meticulous, in depth readings of how humans construct meaning I have ever read. The examples given range from “Eureka!” moments, where we are shown the core inner workings of sudden realization and certainty, to constructions of the most banal everyday speech, revealed to contain complex operations of imaginative blending and synthesis. A less patient reader may find some of the case studies tedious, but the core framework and analytical approach offered here provides a powerful set of tools for digging deep into how we construct and communicate meaning.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/cNQqc5n-ck-Uc0D2lnOdPAw3DgtRmwSfpmM3" alt="Image" width="324" height="452" loading="lazy"></p>
<h4 id="heading-women-fire-and-dangerous-things">Women, Fire, and Dangerous Things</h4>
<p>George Lakoff, 1990</p>
<p><strong>Theme</strong></p>
<p>We organize knowledge by means of structures called “idealized cognitive models,” which account for our ability to categorize and conceptualize. These models emerge from the basic, experiential aspects of human psychology: “gestalt perception, mental imagery, motor activities, social function, and memory” (37).</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>“Motivation depends on overall characteristics of the conceptual system, not just local characteristics of the category at hand” (113).</li>
<li>“Since we act in accord with our conceptual systems and since our actions are real, our conceptual systems have a major role in creating reality” (296).</li>
<li>“Reason is embodied in the sense that the very structures on which reason is based emerge from our bodily experience. Reason is imaginative in the sense that it makes use of metonymies, metaphors, and a wide variety of image schemas” (368).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>“Women, Fire, and Dangerous Things” is the 500 ton locomotive of this list — and it doesn’t come with brakes. This is a big book full of big ideas, some of which you’ll follow, some of which you likely won’t. Don’t worry about it. Success means grappling with it, not defeating it. That said, there is a lot in here for the diligent reader. I’m particularly fond of chapter 17, “Cognitive Semantics.”</p>
<h3 id="heading-decision-making">Decision Making</h3>
<p>You’re a rational person, right? You make rational decisions, right? Alas, this is what everyone thinks — and we collectively have pretty varied opinions (to say the least) about what counts as “rational.” Dig these books to get some insight into why:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/453BeHggh73HW9ZIXD9UEw2b6gXDQklJsbTz" alt="Image" width="303" height="452" loading="lazy"></p>
<h4 id="heading-predictably-irrational">Predictably Irrational</h4>
<p>Dan Ariely, 2008</p>
<p><strong>Theme</strong></p>
<p>Standard economic theory suggests that individuals make decisions based on carefully weighed consideration of their options. In practice, however, “rationality” is regularly eclipsed by our irrational feelings about initial states (anchors), the temptation of getting anything for free, social norms, and the outsized value we place on what we already possess (loss aversion).</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>“Once prices are established in our minds — even if they’re arbitrary — they shape not only what we are willing to pay for an item, but also how much we are willing to pay for related products” (32).</li>
<li>“The difference between two cents and one cent is small; the difference between once cent and zero is huge” (68).</li>
<li>“Our propensity to overvalue what we own is a basic human bias, and it reflects a more general tendency to fall in love with, and be overly optimistic about, anything that has to do with ourselves” (182).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>This is one of the most accessible texts on this list: Ariely writes in an easy-going, conversational style and structures all of his arguments around closely focused, often funny studies and experiments he has himself conducted with students and colleagues. His examples are great both at illustrating his points and keeping his reader engaged.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/4grPMK-LdttDKDHRXhwXvsknj4VMXwK8o9hq" alt="Image" width="303" height="452" loading="lazy"></p>
<h4 id="heading-thinking-fast-and-slow">Thinking, Fast and Slow</h4>
<p>Daniel Kahneman, 2011</p>
<p><strong>Theme</strong></p>
<p>We use two cognitive processes to evaluate information: a fast, always-on, but error-prone automatic system, and a more effective, analytical but effortful deliberate system. The trouble we get into is that we sometimes mistake automatic and error-prone decisions for well-considered, analytical ones — sometimes to the point of consciously making decisions that are opposed to our best interests.</p>
<p><strong>Key Concepts</strong></p>
<ul>
<li>Why we fail at statistics: “our mind is strongly biased toward causal explanations and does not deal well with ‘mere statistics.’ When our attention is called to an event, associative memory will look for its cause — more precisely, activation will automatically spread to any cause that is already stored in memory” (182).</li>
<li>What You See is All There Is (WYSIATI): “You cannot help dealing with the limited information you have as if it were all there is to know. You build the best possible story from the information available to you, and if it is a good story, you believe it. Paradoxically, it is easier to construct a coherent story when you know little, when there are fewer pieces to fit into the puzzle. Our comforting conviction that the world makes sense rests on a secure foundation: our almost unlimited ability to ignore our ignorance” (201).</li>
<li>In misunderstanding statistical possibility, we end up paying a premium (sometimes an exorbitant one) for security from unlikely events, while at the same time gambling resources regularly on equally unlikely events. Chapter 29 (and much of the book, really).</li>
</ul>
<p><strong>Impressions</strong></p>
<p>This book is a fascinating and compelling read. Kahneman’s examples are clear and easy to follow — and their implications are sobering (if not terrifying). I’ve talked to a lot of folks who have started this book, but never quite finished it. At 400 + pages, it’s a bit longer than some other texts on this list, but I definitely recommend reading it all the way to the end — it’s all good stuff, especially if you’re trying to understand why people (perhaps including yourself) make the decisions they do in the face of uncertain outcomes.</p>
<h3 id="heading-and-there-you-have-it">And There You Have It</h3>
<p>Now: I’m not going to claim that this list isn’t challenging, or that you should be able to knock these out in a couple weekends. If you’re interested in digging into the prickly problems of designing for the complex systems that crop up when we mix data, choice, and the human decision-making process, though, these books will give you plenty to think about.</p>
<p>Even more than that, all of them should give you additional frames of reference from which to consider the messy, human challenges we face as designers every day. Principles like Daniel Kahnemman’s “What You See Is All There Is” or Fauconnier &amp; Turner’s “cognitive blending” will give you new ways to pop your thinking out of the “best practices” ruts you might have fallen into and look for solutions to messy human problems in the very behavior of messy humans themselves.</p>
<h3 id="heading-bonus-paragraph-how-to-read">Bonus Paragraph: How to Read!</h3>
<p>You, of course, know how to read. I get that. But reading work by professional research scholars — even books intended for a popular audience, as are many of these — is a bit different from reading professional or trade publications. As a grad student (in English, during which time I read <em>a lot</em>), I developed some habits to help me better understand, retain, synthesize, and be able to recall texts like these. Here’s what worked for me:</p>
<p><strong>1. Buy a Book</strong></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/xsJEashK6JQqmxH3wvedXWLGqv4qD7NbURTl" alt="Image" width="322" height="322" loading="lazy"></p>
<p>If I’m going to read a book like one of those listed here, I want a paper copy I can write in and (slightly) abuse. The point of a physical book for me is to be able to read it actively: underline, highlight, star passages, dog-ear corners, make notes. Reading actively helps you 1) integrate what you’re reading and synthesize it with the other ideas jumbling around in your head and 2) come back to this text weeks, months, or years later and quickly find the ideas and passages that piqued your interest.</p>
<p><strong>2. Buy a Pencil</strong></p>
<p>Leave it in the book. If you don’t have a pencil, you won’t take notes and you won’t annotate. You’ll read passively. Set yourself up to be an active, physically engaged reader. I like a <a target="_blank" href="https://www.amazon.com/Zebras-Zebra-Mechanical-Pencil-51391/dp/B001BZ4RJS">mechanical pencil like these</a> because they’re cheap, always sharp, fit well in a book, and allow me to write satanically tiny notes.</p>
<p><strong>3. Steal a Sheet of Paper</strong></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Comwtkd8xnEjeL0QYx2weM4cKJRecS6Lcu-m" alt="Image" width="322" height="322" loading="lazy"></p>
<p>Cut it in half, then fold one of your halves in half to make a booklet. Jot down the ideas and passages that stand out. I include page numbers so I can easily find passages later on. You’ll have to write small — and you’ll have to be selective about what you record (which is a good thing: too much note taking will slow you way down). Leave your notes in the book. Now when you come back and look for that idea or passage later, you’ll have both your annotations and a quick reference guide to the passages you personally found most intriguing.</p>
<hr>
<p><em>This post was originally published at <a target="_blank" href="http://www.andyfitzgerald.org/">andyfitzgerald.org</a>. If you’re interested in how cognitive science, language, and meaning-making fit in with the practice of user experience architecture &amp; design, do check it out.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Danger of Stopping at Z: Why Kids Should Code, in the Words of Dr. Seuss ]]>
                </title>
                <description>
                    <![CDATA[ By William Cabell “In the places I go there are things that I see That I never could spell if I stopped with the Z. I’m telling you this ‘cause you’re one of my friends. My alphabet starts where your alphabet ends!” So begins the journey of Conrad ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-danger-of-stopping-at-z-c28fbd702e0b/</link>
                <guid isPermaLink="false">66c3611dc7095d76345eb03d</guid>
                
                    <category>
                        <![CDATA[ books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ children ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Children&#39;s Books ]]>
                    </category>
                
                    <category>
                        <![CDATA[ education ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 16 Jun 2016 01:20:31 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*xjyk8AeOjwyunKu6vQ9-Qg.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By William Cabell</p>
<blockquote>
<p>“In the places I go there are things that I see</p>
<p>That I never could spell if I stopped with the Z.</p>
<p>I’m telling you this ‘cause you’re one of my friends.</p>
<p>My alphabet starts where your alphabet ends!”</p>
</blockquote>
<p>So begins the journey of Conrad Cornelius o’Donald o’Dell into the world of code, the alphabet beyond the alphabet. Written in 1955, there is no direct mention of programming in Dr. Seuss’ <a target="_blank" href="https://en.wikipedia.org/wiki/On_Beyond_Zebra!">On Beyond Zebra</a>, of course, but it is clear in its message that staying locked within comfortable knowledge is a recipe for a boring and unfulfilled life.</p>
<p>As a universal message, this is one for academics, scientists, writers, and everyone else whose job involves expanding their understanding of the world. I heartily recommend the book to these people, but today, I’m recommending it to developers and technologists as well.</p>
<p>Read it with your children. Discuss with them the importance of exploration. But in particular, make clear the parallels with what you do as a hobby, for a living, or for a passion. Not only will it pay dividends for decades to come, but it will help to build a healthy respect for the utility of technology and the beauty of the humanities.</p>
<h4 id="heading-what-on-beyond-zebra-is-about">What On Beyond Zebra is about</h4>
<p>For those of you who have not had the pleasure — or need a refresher — <em>On Beyond Zebra</em> relates the story of young Conrad Cornelius o’Donald o’Dell discovering a new branch of knowledge through the Narrator’s cavalier assertion that he would never be so boring as to stop at “Z” when he had reached the “end” of the alphabet.</p>
<p>The Narrator explains that there are letters beyond “Z,” which allow one to spell the sorts of words that one finds in Dr. Seuss’ books, such as Glikker and Floob-Boober-Bab-Boober-Bubs.</p>
<p>As the narrator drags Conrad from imaginary land to imaginary land, he shows him the incredible beasts and contraptions that they would have missed without the letters Glikk and Floob and more. After all this, the Narrator leaves Conrad back at the school’s blackboard where he found him, inventing his own new letter, A-Z erased and left long behind.</p>
<h4 id="heading-sharing-the-exploration">Sharing the exploration</h4>
<p>The other day, I looked in the rear-view mirror on the way to karate and asked my almost-five-year-old daughter if she knew what I was doing on my computer when I worked at home. She shrugged and said no. I decided it was time to tell her anyway.</p>
<p>I am in the midst of a major undertaking: learning to code from scratch, having not touched a computer in that way since I endured a QuickBasic class in middle school.</p>
<p>Starting with HTML5 and CSS, I am working my way through JavaScript, and plan to finish the rest of <a target="_blank" href="https://www.freecodecamp.com/">Free Code Camp</a>’s Full Stack Development certification.</p>
<p>By training, though, I am an historian and a <a target="_blank" href="https://en.wikipedia.org/wiki/Classics">Classicist</a>, meaning that, though I have never directly made money with what I learned in school, I find pleasure in drawing together disparate pieces of information and seeing how they inform each other.</p>
<p>So when I read this story of a boy who has his whole world opened up past its previous boundaries, I had an instant flashback to the first time that I wrote a piece of basic HTML and refreshed my browser to see an incarnation of that code appear there as if by magic, somehow transformed from the obtuse, alchemical equation in my text editor to the beautiful (to me), clean text, images, and links that now sat before me in shining Chrome.</p>
<p>How sad it would have been, to have missed that moment, just because my world was never expanded beyond the everyday constraints of A-Z to the new, exotic letters of <a> and </a></p><div><a>. And then, how could I not think of my two young daughters and want to give them the power, as early as possible, to write their own thoughts and bring their own ideas into the world?</a></div><p></p>
<p>I sat down and read them <em>On Beyond Zebra</em> on a rainy afternoon in June. We had gotten it from the library on a whim, since we had already read through most of the Seuss canon, because as a parent, most children’s books are honestly not that fun to read, but the good Doctor’s are.</p>
<p>As we made our way through, enjoying the wordplay, rhythm, and meter (me) and striking illustrations (my daughters), I began to see a razor sharp argument for teaching children that there are always new fields of study and new worlds that lie beyond their current knowledge. And that is when I made the connection to code.</p>
<p>As our children grow and technology becomes increasingly unavoidable, it becomes essential to ensure that they inherit the digital world with open eyes and full understanding. They must not only understand on an intellectual level that they can push the envelope forward into unexplored territories, but also on a practical level know how to use the technologies that make this possible.</p>
<p>The danger comes when they approach technology simply as magic — not as a complicated, incredible ecosystem that is driven by the interplay of hardware and software. If we can stave off the lazy assumption of magic, our children can live more productive, interconnected, and ultimately, safer lives.</p>
<h4 id="heading-the-talk">The talk</h4>
<p>“Well, would you like to know what I’m doing?”</p>
<p>“Sure.”</p>
<p>“You know when we read the <a target="_blank" href="https://en.wikipedia.org/wiki/Fancy_Nancy">Fancy Nancy</a> books, and there is one person who writes the words that we read and one person who draws the pictures that we look at?”</p>
<p>“Yeah.”</p>
<p>“You know those apps that you play on my phone or mommy’s phone? Or on an iPad? Like Toca House?”</p>
<p>“Yup.”</p>
<p>“Well, it’s a similar idea. There are people who draw all the pictures you see and touch, but then there are also people who write the languages that make those pictures move, or something happen when you touch the screen. And that’s what I’m doing. I’m not really even working yet, it’s more like I’m in school, learning those languages so I can write apps like that.”</p>
<p>Silence.</p>
<p>“Does that make sense?”</p>
<p>“Yes. Can I have a pretzel?”</p>
<p>“Yes, but only one, it’s almost time for dinner.”</p>
<p>For an almost-five-year-old, I’ll count that as a win.</p>
<h4 id="heading-learning-and-teaching-the-new-literacy">Learning (and teaching) the new literacy</h4>
<p>Coding is the <a target="_blank" href="https://medium.freecodecamp.com/please-do-learn-to-code-233597dd141c#.gx82502mt">new literacy</a>. Software is seeping into every corner of our lives — often much faster than we as a culture can appreciate. The way that we communicate with machines, and the way those machines connect us to other people, is becoming increasingly vital.</p>
<p>There have been initiatives to help our children come through the education system having a better understanding of the <a target="_blank" href="https://en.wikipedia.org/wiki/Science,_technology,_engineering,_and_mathematics">STEM</a> (Science Technology Engineering and Math) disciplines, and many universities have worked to expand those departments, sometimes at the expense of other “less profitable” ones.</p>
<p>I find the hubris in the “technology-first” movement terrifying, as it could mean a loss of the culture that has led us to where we are today. And this is where I found inspiration in a children’s book from 1955.</p>
<p>The beauty of children’s literature is its simplicity. At their best, children’s books read like good code. They take a concept, an idea, an entire worldview, and they present it in a way that is clean and clear and simple.</p>
<p>And much of that beauty is how, within a constrained vocabulary, those ideas shine through and spark something in every mind — whether young or old — and inspire comprehension and creativity.</p>
<p>This is where our children need to understand that with code, as with the “everyday” letters of A-Z, they can create any world in their imagination. They can solve any problem, and enact their wills upon the world in breathtaking way.</p>
<p>Software serves as the raw material of the future. Creativity will shape it into something that isn’t just functional, but beautiful. Thus, the liberal arts are a key component for helping children grow up to be healthy, sane members of society who can engage culture and society as intelligently as they engage problem solving, and the next wave of technology that stands poised to wash over us.</p>
<h4 id="heading-dont-stop-at-z">Don’t stop at Z</h4>
<p>I haven’t yet started a follow-up to the conversation with my daughter, but I know now that continuing to educate her and her sister on what is happening when I’m on my computer with those funny symbols and words is going to be as important as any language. In the meantime, I will continue to read them as many Dr. Seuss and other books as I can, to ensure that when they start interacting with technology, they have the intellect and vocabulary to understand it.</p>
<p>While the narrator never looks down on Conrad for learning the alphabet, he’s clear in his astonishment that Conrad would have thought it acceptable to stop at “Z.” And so, the book and the subsequent conversation with my daughter became the inspiration for this article, and also for my new blog <a target="_blank" href="https://medium.com/on-beyond-z">“On Beyond Z”</a>which will focus on providing resources to help expose children to the worlds beyond our basic alphabet.</p>
<p>I aim to be a resource for parents and educators to help children find their way through this brave new world, so that the coming generations will be the first where significant portions of the population will grow up knowing the basics of programming as well as all of the cultural touchstones that shape our society.</p>
<p>And, even if technology wasn’t what he had in mind, Dr. Seuss was an advocate for helping children break out of the bounds of the A-Z alphabet and find their own way into the future.</p>
<p>What else is education for, if not to expand the mind to new possibilities, across all spectra?</p>
<p>As Dr. Seuss says:</p>
<blockquote>
<p>“I led him around and I tried hard to show</p>
<p>There are things beyond Z that most people don’t know.</p>
<p>I took him past Zebra. As far as I could.</p>
<p>And I think, perhaps, maybe I did him some good…”</p>
</blockquote>
<p>If you enjoyed this, please favorite and recommend below by clicking the ❤️! Thank you and check back weekly for more posts.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
