{"id":22618,"date":"2021-02-11T11:29:19","date_gmt":"2021-02-11T11:29:19","guid":{"rendered":"https:\/\/www.experfy.com\/blog\/5-takeaways-the-pragmatic-programmer\/"},"modified":"2023-09-05T07:09:01","modified_gmt":"2023-09-05T07:09:01","slug":"5-takeaways-the-pragmatic-programmer","status":"publish","type":"post","link":"https:\/\/www.experfy.com\/blog\/software-ux-ui\/5-takeaways-the-pragmatic-programmer\/","title":{"rendered":"5 Essential Takeaways From \u201cThe Pragmatic Programmer\u201d"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"22618\" class=\"elementor elementor-22618\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"has_eae_slider elementor-section elementor-top-section elementor-element elementor-element-048ebb9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"048ebb9\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_eae_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-302feb7\" data-id=\"302feb7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0dfa4d6 elementor-widget elementor-widget-text-editor\" data-id=\"0dfa4d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"font-size:18px\"><em>Key points from the best-selling coding book of all time<\/em><\/p>\n<p id=\"b14c\"><em>The Pragmatic Programmer<\/em>\u00a0was first published in 1999 and has since been named\u00a0<a href=\"https:\/\/www.best-books.dev\/list\/best-programming-books\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"broken_link\">the best programming book of all time<\/a>.<\/p>\n<p id=\"344b\">Authors Andy Hunt and David Thomas were among the original authors of the\u00a0<a href=\"https:\/\/agilemanifesto.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Agile Manifesto<\/a>\u00a0and have some serious credentials. The book has achieved an average rating of 4.3 on\u00a0<a href=\"https:\/\/www.goodreads.com\/book\/show\/4099.The_Pragmatic_Programmer?from_search=true&amp;from_srp=true&amp;qid=yegRtom9dm&amp;rank=1\" target=\"_blank\" rel=\"noreferrer noopener\">Goodreads<\/a>\u00a0from over 16,000 ratings. Suffice to say it\u2019s one of those books every programmer should read.<\/p>\n<p id=\"cd52\">In this review, I\u2019m going to condense the book into five essential takeaways.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-847a090 elementor-widget elementor-widget-heading\" data-id=\"847a090\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">1. Don\u2019t Repeat Yourself<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-83ae0a3 elementor-widget elementor-widget-text-editor\" data-id=\"83ae0a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"53d6\">Thomas coined the term \u201cDRY\u201d (or\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noreferrer noopener\">Don\u2019t Repeat Yourself<\/a>), one of the most useful rules for achieving high-quality code that has ever existed. The authors define the DRY principle as follows:<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1614f4b elementor-widget elementor-widget-text-editor\" data-id=\"1614f4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote class=\"wp-block-quote is-style-large\"><p><mark>\u201cEvery piece of knowledge must have a single, unambiguous, authoritative representation within a system.\u201d<\/mark><\/p><\/blockquote>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d2e3d4 elementor-widget elementor-widget-heading\" data-id=\"8d2e3d4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">In the book, they give the following example as non-DRY code:<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6623a96 elementor-widget elementor-widget-text-editor\" data-id=\"6623a96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>https:\/\/gist.github.com\/jamiebullock\/df5a06096d98246fce96d315c2128df9#file-print_balance_non_dry-rb<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d34cf98 elementor-widget elementor-widget-heading\" data-id=\"d34cf98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">This is then refactored to the following DRY version:<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-385aeff elementor-widget elementor-widget-text-editor\" data-id=\"385aeff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>https:\/\/gist.github.com\/jamiebullock\/6d102e89d41be8278b107d2062f78d41#file-print_balance_dry-rb<\/p>\n<p id=\"06aa\">In the second fragment, the duplication of constants is removed. Equivalent lines are encapsulated into separate functions for printing, formatting, and reporting.<\/p>\n<p id=\"bd6f\">Interestingly, this actually results in&nbsp;<em>more<\/em>&nbsp;code. However, the result is more readable, maintainable, testable, and scalable. The DRY principle could be viewed as a means to achieve these other outcomes.<\/p>\n<p id=\"73e7\">The authors emphasise that DRY is not only about avoiding&nbsp;<em>literal<\/em>&nbsp;code duplication. This is just a small part of the picture. They write:<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c0bd6ea elementor-widget elementor-widget-text-editor\" data-id=\"c0bd6ea\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote class=\"wp-block-quote is-style-large\"><p>\u201cDRY is about the duplication of knowledge, of intent. It\u2019s about expressing the same thing in two different places, possibly in two totally different ways.\u201d<\/p><\/blockquote>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2af4e6 elementor-widget elementor-widget-text-editor\" data-id=\"c2af4e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"5dfa\">Duplication could be in representation, data structures, API design, or could even refer to duplicated effort between team members. The latter is a management issue discussed later in the book.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fce3878 elementor-widget elementor-widget-heading\" data-id=\"fce3878\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">2. Mindset Is As Important as Knowledge<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5018ee1 elementor-widget elementor-widget-text-editor\" data-id=\"5018ee1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"b037\">Unlike typical programming books, much of&nbsp;<em>The Pragmatic Programmer<\/em>&nbsp;is not about the code itself but rather the mindset and philosophy of the programmer.<\/p>\n<p id=\"7530\">A lot of what is discussed boils down to thinking about software development more generally as an end-to-end process rather than simply zooming in on the code. This makes sense. After all, programmers are not paid to write code but to produce working software!<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5193e1d elementor-widget elementor-widget-heading\" data-id=\"5193e1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Some important aspects of this mindset include:<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1379d45 elementor-widget elementor-widget-text-editor\" data-id=\"1379d45\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>Taking responsibility for your work by not making excuses or passing blame when things go wrong.<\/li><li>Writing software that\u2019s \u201cgood enough.\u201d This means not wasting time on things that are better than they need to be to make the product successful.<\/li><li>Not ignoring technical debt. The authors use the analogy of broken windows for this:<\/li><\/ul>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3823bb9 elementor-widget elementor-widget-text-editor\" data-id=\"3823bb9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote class=\"wp-block-quote\"><p>\u201cDon\u2019t leave \u2018broken windows\u2019\u2019 (bad designs, wrong decisions, or poor code) unrepaired. Fix each one as soon as it is discovered. If there is insufficient time to fix it properly, then&nbsp;<em>board it up.&nbsp;<\/em>Perhaps you can comment out the offending code, or display a \u2018Not Implemented\u2019 message, or substitute dummy data instead.\u201d<\/p><\/blockquote>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c21b878 elementor-widget elementor-widget-text-editor\" data-id=\"c21b878\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"ad58\">I find this last point interesting. The authors are not saying code needs to be&nbsp;<em>perfect<\/em>&nbsp;but that it needs to be kept in a condition where it doesn\u2019t deteriorate. A boarded-up window might not look great, but it prevents a whole bunch of other problems from building up over time.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8e3cb1f elementor-widget elementor-widget-heading\" data-id=\"8e3cb1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">3. Good Code Is Easy To Change<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09d474b elementor-widget elementor-widget-text-editor\" data-id=\"09d474b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"f9e1\">For me, possibly the most important takeaway from&nbsp;<em>The Pragmatic Programmer<\/em>&nbsp;is the Easy to Change(ETC) principle.<\/p>\n<p id=\"9b2c\">How often as programmers do we get UI changes from a designer or new requirements from customers that mean reimplementing existing functionality? Basically all the time. Yes, in an ideal world, we\u2019d get a fully considered design up front that we can turn into perfectly crafted code, but the real world doesn\u2019t work like that.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-630f884 elementor-widget elementor-widget-heading\" data-id=\"630f884\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">The Easy to Change principle solves this problem. It states that:<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f1251e elementor-widget elementor-widget-text-editor\" data-id=\"4f1251e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote class=\"wp-block-quote is-style-large\"><p>\u201cGood Design Is Easier to Change Than Bad Design.\u201d<\/p><\/blockquote>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e003b88 elementor-widget elementor-widget-text-editor\" data-id=\"e003b88\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"f5f0\">The authors present this as a guiding value from which many other software engineering principles derive. Specifically, much of\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/SOLID\" target=\"_blank\" rel=\"noreferrer noopener\">SOLID<\/a>\u00a0could be thought of as a special case of ETC.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e23fc2 elementor-widget elementor-widget-text-editor\" data-id=\"4e23fc2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote class=\"wp-block-quote\"><p>\u201cWhy is decoupling good? Because by isolating concerns we make each easier to change.<\/p><p>Why is the single responsibility principle useful? Because a change in requirements is mirrored by a change in just one module.<\/p><p>Why is naming important? Because good names make code easier to read, and you have to read it to change it.\u201d<\/p><\/blockquote>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f5aece elementor-widget elementor-widget-text-editor\" data-id=\"5f5aece\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"c58d\">If you write code with&nbsp;<em>changeability<\/em>&nbsp;in mind, then next time a designer revises the layout, life will be much easier!<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-78a2511 elementor-widget elementor-widget-heading\" data-id=\"78a2511\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">4. Choose Great Tools and Become Fluent With Them<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dfc4ab1 elementor-widget elementor-widget-text-editor\" data-id=\"dfc4ab1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"5b3d\">Joel Spolsky\u00a0<a href=\"https:\/\/www.joelonsoftware.com\/2000\/08\/09\/the-joel-test-12-steps-to-better-code\/\" target=\"_blank\" rel=\"noreferrer noopener\">famously wrote<\/a>\u00a0that programmers should have \u201cthe best tools money can buy\u201d in order to be fully productive.\u00a0<em>The Pragmatic Programmer<\/em>\u00a0aligns with this notion and has an entire chapter dedicated to tools.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-858fd20 elementor-widget elementor-widget-text-editor\" data-id=\"858fd20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote class=\"wp-block-quote is-style-large\"><p>\u201cTools amplify your talent.\u201d<\/p><\/blockquote>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12b1669 elementor-widget elementor-widget-text-editor\" data-id=\"12b1669\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"6b6b\">I must admit, I\u2019ve become so obsessed with finding the absolute best tools that some of this chapter felt a bit obvious to me, but it was reassuring to have my assumptions reaffirmed. <\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0ff10df elementor-widget elementor-widget-heading\" data-id=\"0ff10df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The key takeaways are:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e33a569 elementor-widget elementor-widget-text-editor\" data-id=\"e33a569\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>Keep knowledge in plain text. According to the authors, this means text \u201cunderstandable to humans.\u201d This includes HTML, JSON, etc. The reasoning is that it\u2019s more sustainable than binary formats and easier to manipulate with scripts and other software.<\/li><li>Always use version control. The authors argue that version control should be used for any project, even when working only on your local computer.<\/li><li>Become fluent with your tools.It\u2019s tempting as a developer to constantly keep evaluating new tools and switching between them. Whilst this can have some value, it\u2019s often better to become highly fluent with the tools you already have.<\/li><\/ol>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1f1dd49 elementor-widget elementor-widget-heading\" data-id=\"1f1dd49\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">5. Agile Is Probably Not What You Think It Is<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d1e110 elementor-widget elementor-widget-image\" data-id=\"3d1e110\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"900\" height=\"283\" src=\"https:\/\/www.experfy.com\/blog\/wp-content\/uploads\/2021\/05\/1pmS_rpOaxNpi1ng0QuVg7g.gif\" class=\"attachment-large size-large wp-image-18697\" alt=\"5 Essential Takeaways From \u201cThe Pragmatic Programmer\u201d\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Source: DILBERT \u00a9 Scott Adams. Used By permission of ANDREWS MCMEEL SYNDICATION. All rights reserved.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f4f4ac elementor-widget elementor-widget-text-editor\" data-id=\"3f4f4ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"0c20\">Both authors of\u00a0<em>The Pragmatic Programmer<\/em>\u00a0were involved in writing the original\u00a0<a href=\"https:\/\/agilemanifesto.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Agile Manifesto<\/a>. I was therefore expecting a chapter on a favoured agile methodology \u2014 SCRUM or maybe Kanban. But there was no such thing. In fact, they actively criticise rigid methodologies and their associated certifications:<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-afc715c elementor-widget elementor-widget-text-editor\" data-id=\"afc715c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote class=\"wp-block-quote\"><p><em>\u201cMany certification programs are actually even worse [\u2026]: they are predicated on the student being able to memorize and follow the rules. But that\u2019s not what you want. You need the ability to see beyond the existing rules and exploit possibilities for advantage. That\u2019s a very different mindset from \u2018but Scrum\/Lean\/Kanban\/XP\/agile does it this way\u2026\u2019 and so on.<\/em>\u201d<\/p><\/blockquote>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21aa613 elementor-widget elementor-widget-text-editor\" data-id=\"21aa613\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"448c\">Instead, they suggest that developers take the best pieces from a range of methodologies and adapt them for use, advocating what they call&nbsp;<em>The Essence of Agility<\/em>.<\/p>\n<p id=\"b2eb\">What this means in practice is there can never be an \u201cagile process\u201d because, by definition, being agile is about \u201cresponding to change.\u201d According to the authors, project management decisions should always be contextual, depending on your company, the nature of the team, and many other factors. No pre-defined process can take account of all this.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f19c601 elementor-widget elementor-widget-heading\" data-id=\"f19c601\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">So what does this mean in practice? How can projects be managed?&nbsp;<em>The Pragmatic Programmer<\/em>&nbsp;provides three brilliant and universal steps:<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-be6c037 elementor-widget elementor-widget-text-editor\" data-id=\"be6c037\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>Work out where you are.<\/li><li>Make the smallest meaningful step towards where you want to be.<\/li><li>Evaluate where you end up and fix anything you broke.<\/li><\/ol>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9df6886 elementor-widget elementor-widget-text-editor\" data-id=\"9df6886\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"8ff8\">They suggest repeating these steps until you\u2019re done and using them recursively at every level of everything you do.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a369ad elementor-widget elementor-widget-heading\" data-id=\"5a369ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1239904 elementor-widget elementor-widget-text-editor\" data-id=\"1239904\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"3650\">As you will have gathered from this review,\u00a0<em>The Pragmatic Programmer<\/em>\u00a0isn\u2019t really a book about programming. It\u2019s a <a href=\"https:\/\/www.experfy.com\/blog\/bigdata-cloud\/top-books-kickstart-machine-learning-journey\/\" target=\"_blank\" rel=\"noreferrer noopener\">book <\/a>about building working software. This requires many other skills besides writing code.<\/p>\n<p id=\"9731\">Going into every detail is beyond the scope of this article, but there is also excellent advice on:<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2791cda elementor-widget elementor-widget-text-editor\" data-id=\"2791cda\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>Estimating<\/li><li>Requirements analysis<\/li><li>Refactoring<\/li><li>Testing<\/li><li>Prototyping and many aspects of coding<\/li><\/ul>\n<p id=\"05ca\">If I have one minor criticism, it\u2019s that the book doesn\u2019t have one central theme about what it means to be \u201cpragmatic.\u201d It feels more like a long list of aphorisms woven together with supporting explanations. These are some world-class aphorisms, though, and overall this book is essential reading for any developer.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The Pragmatic Programmer has been named the best programming book of all time. It is one of those books every programmer should read. This review condenses the book into five essential takeaways.<\/p>\n","protected":false},"author":1051,"featured_media":18698,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[200],"tags":[834,408,294,1330],"ppma_author":[3915],"class_list":["post-22618","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-ux-ui","tag-coding","tag-programming","tag-software-development","tag-software-engineering"],"authors":[{"term_id":3915,"user_id":1051,"is_guest":0,"slug":"jamie-bullock","display_name":"Jamie Bullock","avatar_url":"https:\/\/www.experfy.com\/blog\/wp-content\/uploads\/2021\/05\/Jamie-Bullock-150x150.jpeg","user_url":"https:\/\/www.noiiz.com\/","last_name":"Bullock","first_name":"Jamie","job_title":"","description":"Jamie Bullock, a PhD in Music Technology, is Audio Software Developer at Noiiz, a platform that provides audio software plugins. He is the sole author of LibXtract, a C library for audio analysis and feature extraction used in a range of projects from interactive arts to sound recognition. He is also the developer of ml-lib, a library of machine learning objects for Max and Pure Data. He has worked as a consultant to various companies, developing audio and music-based applications for mobile platforms including LiveShout, an audio streaming app for iOS."}],"_links":{"self":[{"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/posts\/22618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/users\/1051"}],"replies":[{"embeddable":true,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/comments?post=22618"}],"version-history":[{"count":4,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/posts\/22618\/revisions"}],"predecessor-version":[{"id":32238,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/posts\/22618\/revisions\/32238"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/media\/18698"}],"wp:attachment":[{"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/media?parent=22618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/categories?post=22618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/tags?post=22618"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.experfy.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=22618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}