{"id":40132,"date":"2021-06-24T08:14:00","date_gmt":"2021-06-24T12:14:00","guid":{"rendered":"https:\/\/www.shortform.com\/blog\/?p=40132"},"modified":"2021-06-26T13:36:54","modified_gmt":"2021-06-26T17:36:54","slug":"characteristics-of-a-good-programmer","status":"publish","type":"post","link":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/","title":{"rendered":"6 Characteristics of a Good Programmer"},"content":{"rendered":"\n<p>What are the characteristics of a good programmer? What traits and qualities distinguish a &#8220;good programmer&#8221; from an &#8220;average programmer&#8221;?<\/p>\n\n\n\n<p>In <em><a href=\"https:\/\/www.shortform.com\/blog\/the-clean-coder-book\/\">The Clean Coder<\/a><\/em>, Robert C. Martin, describes six qualities of a great programmer: 1) commitment to professional development, 2) discipline, 3) honesty, 4) professional communication, 5) time management, and 6) ability to work with others.  Further, he shares the lessons learned the hard way, in the hopes that he can help the reader cultivate these traits and avoid making some of his mistakes.<\/p>\n\n\n\n<p>In this article, you&#8217;ll learn about Martin&#8217;s six characteristics of a good programmer and how to develop them.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">What Makes a Great Programmer?<\/h2>\n\n\n\n<p>Many people (including developers) don\u2019t consider developers professionals, and this is partly because developers don\u2019t act like professionals. Robert Martin certainly didn\u2019t, when he started his career\u2014he missed deadlines, didn\u2019t test code before releasing it, and was such a <a href=\"https:\/\/www.shortform.com\/blog\/weak-leaders\/\">bad leader<\/a> he got two people working under him fired. In this book, he shares the lessons learned the hard way, in the hopes that he can help you avoid making some of the same mistakes.<\/p>\n\n\n\n<p>Here are the six skills and characteristics of a good programmer.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Commitment to professional development<\/li><li>Discipline<\/li><li>Honesty (around estimates and deadlines)<\/li><li>Communication (via testing)<\/li><li>Time management<\/li><li>Collaboration<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">1. Commitment to <strong>Professional Development <\/strong><\/h3>\n\n\n\n<p><strong>The first quality of a professional is a commitment to professional development. <\/strong>The hours you put into your day job rarely contribute to your professional development because at work, you often perform tasks and skills you already know how to do. Therefore, to be a professional, <strong>you should spend 20 hours per week of personal time on improving your programming skills and learning new ones.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>(Shortform example: If you\u2019re a front-end web developer by day, you won\u2019t have any opportunity at work to practice working the back end, so you\u2019ll need to learn those skills on your own time.)<\/li><\/ul>\n\n\n\n<p>Use these hours to:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Improve your existing skills. <\/strong>Contribute pro bono to open source projects and do coding exercises like kata, ping-pong, or randori. Aim to get the unconscious part of your mind to recognize a problem and your body to instinctively react to it (for example, by hitting a particular combination of keys). This leaves the rest of your mind free to focus on strategy and problem-solving.<\/li><li><strong>Learn new skills. <\/strong>Learn about the industry\u2019s history, new developments, and your customer or employer\u2019s field. Additionally, develop your error sense (becoming aware of mistakes as you make them) and humility (accept you\u2019ll make mistakes, and don\u2019t attack others for theirs).<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Discipline<\/h3>\n\n\n\n<p>Professional quality #2 is discipline\u2014a collection of rules and standards around the act of coding. Everyone\u2019s discipline is personal and unique, and in this section, Martin shares his rules as inspiration.<\/p>\n\n\n\n<p><strong>Rule #1: Avoid doing damage, or when you can\u2019t, <a href=\"https:\/\/www.shortform.com\/blog\/accepting-responsibility\/\">take responsibility<\/a>. <\/strong>To avoid doing damage:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Personally and regularly test <\/strong><strong><em>all <\/em><\/strong><strong>of your code.<\/strong> Before you release your code to anyone, including Quality Assurance, make sure you know that it works.&nbsp;<\/li><li><strong>Learn from bugs<\/strong> so you can avoid making the same mistake in the future.<\/li><li><strong>Clean up bad code. <\/strong>When you come across something you know how to improve, refactor it.<\/li><\/ul>\n\n\n\n<p><strong>Rule #2: Don\u2019t code while you\u2019re tired or worried.<\/strong> if you\u2019re not in a mental space in which you can concentrate, you\u2019re going to make mistakes and have to throw out most of your work. If you\u2019re tired or worried:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Disengage and recharge.<\/strong> Once you\u2019ve used up all your focus, you need to recharge by disengaging and spending at least an hour doing something that doesn\u2019t require focus. For example, you might go for a drive, exercise, or take a nap.&nbsp;<\/li><li><strong>Boost your focus reserves and use them wisely.<\/strong> Get enough sleep, use caffeine only in moderation, and pace yourself. When you have focus, code, when you don\u2019t, do other work that\u2019s less mentally taxing.<\/li><li><strong>Address distractions.<\/strong> If you\u2019re worried about something, part of your brain will be occupied with the worry instead of thinking about your code. Devote some time (often an hour) to addressing the worry\u2014making some progress can reduce your anxiety enough to let you work.<\/li><\/ul>\n\n\n\n<p><strong>Rule #3: Don\u2019t wallow in writer\u2019s block.<\/strong> When you\u2019re <a href=\"https:\/\/www.shortform.com\/blog\/stuck-in-life\/\">feeling stuck<\/a>, try the following techniques to get past the block:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Increase your <a href=\"https:\/\/www.shortform.com\/blog\/media-consumption\/\">content consumption<\/a>. <\/strong>Consuming creative content (like reading sci-fi novels) will help you output creativity\u2014inspired by someone else\u2019s work, you\u2019ll want to create your own.<\/li><li><strong>Pair program. <\/strong>Working with someone else will nearly always refresh you. Martin feels a physiological change when pair programming.<\/li><\/ul>\n\n\n\n<p><strong>Rule #4: Avoid or minimize time pressure<\/strong>. The best way to deal with pressure is to avoid it. To do this:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Adhere to your rules.<\/strong> You\u2019ll be most efficient if you don\u2019t break things, don\u2019t get stuck behind writer\u2019s block, and so on.<\/li><li><strong>Use your crisis behaviors all the time.<\/strong> In a crisis, you\u2019ll use the most effective and efficient method of doing something. If you use your crisis methods all the time, you\u2019ll be as efficient as you are in emergencies all the time.<\/li><li><strong>Say no to unreasonable deadlines<\/strong>. See Quality #3 for more on this.<\/li><li><strong>Watch out for manipulative client behaviors. <\/strong>If a client describes the project as simple and easy, fails to discuss all required features, or pushes deadlines, you might want to avoid working with them.<\/li><\/ul>\n\n\n\n<p><strong>No matter how well you employ the above techniques, you\u2019ve inevitably going to encounter pressure.<\/strong> When you <em>are<\/em> under pressure, you should:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Stay calm. <\/strong>Getting stressed and rushing will only do damage, which will ultimately slow you down because you\u2019ll have to go back and fix things.&nbsp;<\/li><li><strong>Exaggerate your rule-following.<\/strong> For example, if your normal workflow involves refactoring, refactor more than usual.<\/li><li><strong>Talk to your coworkers and pair program. <\/strong>Pair programming produces higher-quality code faster\u2014your partner will help you focus, stay calm, and see the whole project.<\/li><\/ul>\n\n\n\n<p><strong>Rule #5: Avoid the \u201czone\u201d when you\u2019re working. <\/strong>The \u201czone\u201d is a state of mind that makes you <em>feel <\/em>focused, productive, and invincible. In reality, you\u2019re not being more productive\u2014the zone is just a <a href=\"https:\/\/www.shortform.com\/blog\/meditation-states\/\">meditative state<\/a> in which parts of your brain shut off. You\u2019ll write more code, but because you\u2019ve got tunnel vision, you\u2019ll probably have to revise what you\u2019ve written so it fits into the larger structures. If you feel the zone approach, arrest its onset by taking a break or pair programming (you can\u2019t get hyper-focused on your code if you have to talk to someone.)<\/p>\n\n\n\n<p><strong>Rule #6: Be careful with music. <\/strong>Some people find music helps them concentrate; for others, it pushes them into the zone or distracts them.<\/p>\n\n\n\n<p><strong>Rule #7: Finish properly. <\/strong>Completely finish all tasks before declaring them \u201cdone\u201d and define \u201cdone\u201d as \u201cpassed all tests\u201d (for more on tests, see Quality #4). Don\u2019t accept partial completion for any reason, including if you\u2019re short on time.<\/p>\n\n\n\n<p><strong>Rule #8: Give and accept help.<\/strong> Programming is so hard it requires more than one brain. When people ask you for help, always give it, and if someone appears to be struggling, offer to pair program with her even if she doesn\u2019t ask. Similarly, always accept help when it\u2019s offered and ask for it when you\u2019re stuck. It\u2019s unprofessional to waste paid time staring at a screen when help is available.<\/p>\n\n\n\n<p><strong>Rule #9: Deal with interruptions efficiently and gracefully.<\/strong> You\u2019ll inevitably be interrupted while coding. Here are some strategies to quickly refocus on your work after an interruption:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Pair program.<\/strong> When you get interrupted, your partner can keep track of your place and thought process.<\/li><li><strong>Use a workflow that holds your place for you. <\/strong>For example, in test-driven development (more in Quality #4), you alternate writing short tests and short pieces of code. Because these steps are in such a strict order, you can quickly <a href=\"https:\/\/www.shortform.com\/blog\/find-your-place-in-the-world\/\">find your place<\/a> when you return.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Honesty<\/strong><\/h3>\n\n\n\n<p>The third professional quality is honesty, especially in the face of estimates and deadlines. Whenever you\u2019re programming something for someone, they always want to know when it will be done.<strong> Most of the time, you won\u2019t know exactly how long something will take, so you\u2019ll provide an estimate instead of a guaranteed commitment<\/strong>. Estimates aren\u2019t promises, so missing them isn\u2019t unprofessional, but professionals <em>do <\/em>make their estimates as accurate as possible.<\/p>\n\n\n\n<p><strong>To that end, estimates aren\u2019t single numbers\u2014they\u2019re probability distributions. <\/strong>They factor in the following <em>three <\/em>numbers:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Best-case.<\/strong> If <em>everything <\/em>goes right, you\u2019ll be finished in this amount of time. This number should be <em>very<\/em> optimistic\u2014there\u2019s only a 1% chance that you\u2019ll make this number.<\/li><li><strong>Nominal. <\/strong>This is the amount of time you think is most likely.<\/li><li><strong>Worst-case.<\/strong> If <em>everything <\/em>goes wrong, you\u2019ll be finished in this amount of time. This number should be <em>very<\/em> pessimistic\u2014there\u2019s only a 1% chance that this is how long the task will take you.<\/li><\/ul>\n\n\n\n<p>When giving estimations, you should mention all three numbers.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Defending Your Estimations<\/strong><\/h4>\n\n\n\n<p><strong>There\u2019s always the possibility that people won\u2019t like your estimates and will want something done faster.<\/strong> If this happens, you have three options, not all of which are professional:<\/p>\n\n\n\n<p><strong>1. Saying \u201cno.\u201d <\/strong><a href=\"https:\/\/www.shortform.com\/blog\/saying-no\/\">Saying no<\/a> has a bad rap, but it\u2019s the most professional thing to do in many situations. If it\u2019s impossible to get something done properly (adhering to discipline) by a certain deadline, and you say anything other than no, you\u2019re essentially lying.<\/p>\n\n\n\n<p><strong>2. Saying \u201ctry.\u201d<\/strong> Never agree to try to do something in a time period shorter than your estimation. People often interpret \u201ctry\u201d to mean \u201cyes\u201d or \u201cmaybe,\u201d and both are lies because if you\u2019re a professional, you\u2019ve already been giving the project your full effort. There\u2019s nothing more you can do that would make things go faster.<\/p>\n\n\n\n<p><strong>3. Saying \u201cyes.\u201d<\/strong> Only say yes when you <em>know <\/em>you can meet a deadline because a yes is a commitment. If it\u2019s impossible to say yes to something in its current form, ask to change the parameters of the task so that you <em>can <\/em>say yes. For example, you might ask to reduce the scope of the project so that there\u2019s less to do and you can finish in a shorter amount of time.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Communication<\/h3>\n\n\n\n<p>The fourth professional quality is communication, which is best done via testing. Tests ensure that a system works, but that\u2019s a happy bonus, not their main purpose. <strong>The most important purpose of a test is to communicate, specify, and document how a system is supposed to work and how it actually works.<\/strong><\/p>\n\n\n\n<p>First, we\u2019ll look at acceptance testing, which is the main type of testing used for communication. Then, we\u2019ll look at how acceptance tests fit into the broader discipline of testing.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Acceptance Testing<\/strong><\/h4>\n\n\n\n<p><strong>Acceptance tests are automatic tests that determine if the system behaves the way the business wants it to<\/strong>\u2014in other words, these tests specify what the system is supposed to do. Therefore, acceptance tests are the most unambiguous way to communicate about system requirements\u2014there\u2019s no possibility of misunderstandings or inaccurate assumptions.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>For example, if a client requires that an operation completes in under two seconds so a user doesn\u2019t experience a delay, the test checks if the operation completes fast enough.<\/li><\/ul>\n\n\n\n<p><strong>Acceptance tests are co-written by clients and testers or QA (Quality Assurance)<\/strong>. The client will usually come up with the happy-path test and QA will write the unhappy-path tests that cover unusual scenarios. Then, it\u2019s the developers\u2019 job to add the tests to the system and build something that passes them.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>The Pyramid of Tests<\/strong><\/h4>\n\n\n\n<p>There is a pyramid of testing that ensures a system works and that it behaves the way a business wants it to. We\u2019ll start at the bottom and move up:<\/p>\n\n\n\n<p><strong>Level #1: Unit tests<\/strong> test \u201cunits\u201d\u2014small sections of code. They cover as much of the code as possible (at least 90%) and their purpose is to specify the system. They run continuously and they\u2019re written <em>before <\/em>the code by developers using test-driven development (TDD).<\/p>\n\n\n\n<p>There are three rules to TDD:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>You can\u2019t write code until you write a unit test that fails. (The test will fail because it needs code to evaluate, and the code isn\u2019t written yet.)<ul><li>For example, if you plan to write a function, you\u2019ll have to mention its name in the test. The test will fail because the function doesn\u2019t exist yet.<\/li><\/ul><\/li><li>You can\u2019t write any more of the test beyond the first failure. (Not compiling counts as a failure.)<\/li><li>You can\u2019t write more code than you need to pass the test.<\/li><\/ol>\n\n\n\n<p>TDD comes with several advantages:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>The cycle time is fast. <\/strong>Since you write and test only a little bit of code at a time, you regularly execute the code.<\/li><li><strong>You know your code works and can update with confidence.<\/strong> In TDD, you test every single time you make a change, so you have confirmation that what you\u2019ve written will work.<\/li><li><strong>There are fewer bugs. <\/strong>For example, Martin uses TDD on a project called FitNesse, and FitNesse only had 17 bugs after he added 20,000 lines of code.<\/li><li><strong>They facilitate good (decoupled) design<\/strong>. Decoupled code is easier to work with because when a test identifies a problem, you can quickly find it\u2014there aren\u2019t layers of code the wade through.<\/li><li><strong>Tests double as documentation.<\/strong> The TDD unit tests act as instructions for how to use the program because they cover every piece of the system.<\/li><\/ul>\n\n\n\n<p><strong>Level #2: Component tests (which include acceptance tests) <\/strong>test individual components and business rules. They cover 50% of the system and run continuously, just like unit tests.<\/p>\n\n\n\n<p><strong>Level #3: Integration tests <\/strong>assess how well different components communicate (only relevant in multi-component systems). They cover 20% of the system, execute periodically, rather than continuously (they\u2019re time-consuming), and are written by the system\u2019s lead designer or system architect.<\/p>\n\n\n\n<p><strong>Level #4: System tests<\/strong> are the highest form of integration tests and they evaluate the whole system. They cover 10% of the system, execute infrequently (they\u2019re time-consuming), and are written by the technical leads or system architects.<\/p>\n\n\n\n<p><strong>Level #5: Manual exploratory tests <\/strong>are tests in which humans use the system to confirm how it works and report bugs. They cover 5% of the system, are executed infrequently (they\u2019re expensive), and aren\u2019t written (people explore the system however they like).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Time Management<\/strong><\/h3>\n\n\n\n<p>The fifth quality of professionals is that they manage their time well. There are three techniques professionals use for time management:<\/p>\n\n\n\n<p><strong>Technique #1: Attend meetings strategically. <\/strong>Meetings take up a lot of time and are expensive\u2014they require renting a location and paying for the time of the attendees. Therefore, professionals strive to make the best use of meetings by:<\/p>\n\n\n\n<p><strong>Technique #2: Use the <a href=\"https:\/\/www.shortform.com\/blog\/infographic-pomodoro-technique\/\">Pomodoro technique<\/a>.<\/strong> Pomodoro is a way of reserving chunks of time for uninterrupted (and therefore productive) work. It works like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Start a timer for 25 minutes. Focus on your work for 25 minutes and don\u2019t let anyone interrupt you. When the timer goes off, stop working.<\/li><li>Address any interruptions you ignored during your 25 minutes.<\/li><li>Take a five-minute break.<\/li><li>Do another 25 minutes of work.<\/li><li>After four 25-minute sets, take a half-hour break.<\/li><\/ul>\n\n\n\n<p><strong>Technique #3: Avoid priority inversion.<\/strong> Priority inversion is when you avoid unpleasant work (work that\u2019s dull, frightening, or uncomfortable) by doing a lower-priority task instead (and often invent some justification). Do your tasks in the real priority order.<\/p>\n\n\n\n<p><strong>Technique #4: Avoid and abandon dead ends and messes.<\/strong> Abandon a course of action <em>as soon<\/em> <em>as<\/em> you realize it\u2019s going nowhere and try something else. Don\u2019t get mired in a mess before you officially hit the dead end\u2014turn back as soon as possible.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. Ability to Work With Others<\/strong><\/h3>\n\n\n\n<p>The final quality of professionals is the ability to work with others. In <em>The Clean Coder<\/em>, Martin covers two elements of collaboration:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Collaborative<\/li><li>Mentoring<\/li><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Collaborative Coding<\/h4>\n\n\n\n<p>There are three techniques for <a href=\"https:\/\/www.shortform.com\/blog\/effective-collaboration\/\">effective collaboration<\/a>:<\/p>\n\n\n\n<p><strong>1. Share code. <\/strong>Anyone should be able to make improvements to any part of the code. That way, people can work with each other and learn from each other.<\/p>\n\n\n\n<p><strong>2. Pair program.<\/strong> Not only is pair programming efficient, but it also allows people to share knowledge about both the system and the business, and familiarity with other people\u2019s work allows team members to take over for each other in emergencies. Additionally, pair programming is the most efficient way to review code.<\/p>\n\n\n\n<p><strong>3. Work physically close to each other.<\/strong> Face each other when you\u2019re sitting around a table, and be close enough to talk and read <a href=\"https:\/\/www.shortform.com\/blog\/body-language-crucial-conversations\/\">body language<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Mentoring<\/h4>\n\n\n\n<p>Mentoring teaches technical skills and professionalism and instills craftsmanship\u2014the mindset of attitudes, techniques, values, and disciplines required for coding. <\/p>\n\n\n\n<p>Martin\u2019s ideal mentoring system includes the following roles and responsibilities.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Masters <\/strong>have over 10 years of experience with various systems and languages, have led at least one important project, and are skilled coders, architects, and designers. Masters mentor journeypeople.<\/li><li><strong>Journeymen and women<\/strong> have around five years of experience with one system and language. They mentor less experienced people.<\/li><li><strong>Apprentices<\/strong> have less than a year of experience. They don\u2019t have their own tasks\u2014they help journeymen and women and regularly participate in pair programming.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>What are the characteristics of a good programmer? What traits and qualities distinguish a &#8220;good programmer&#8221; from an &#8220;average programmer&#8221;? In The Clean Coder, Robert C. Martin, describes six qualities of a great programmer: 1) commitment to professional development, 2) discipline, 3) honesty, 4) professional communication, 5) time management, and 6) ability to work with others. Further, he shares the lessons learned the hard way, in the hopes that he can help the reader cultivate these traits and avoid making some of his mistakes. In this article, you&#8217;ll learn about Martin&#8217;s six characteristics of a good programmer and how to<\/p>\n","protected":false},"author":7,"featured_media":40133,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[29,30],"tags":[397],"class_list":["post-40132","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-career","category-work","tag-the-clean-coder","","tg-column-two"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.3 (Yoast SEO v24.3) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>6 Characteristics of a Good Programmer - Shortform Books<\/title>\n<meta name=\"description\" content=\"According to Robert C. Martin, there are several characterists that distinguish a good programmer from a bad programmer. Read more.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"6 Characteristics of a Good Programmer\" \/>\n<meta property=\"og:description\" content=\"According to Robert C. Martin, there are several characterists that distinguish a good programmer from a bad programmer. Read more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/\" \/>\n<meta property=\"og:site_name\" content=\"Shortform Books\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-24T12:14:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-26T17:36:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/s3.amazonaws.com\/wordpress.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Darya Sinusoid\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Darya Sinusoid\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/\"},\"author\":{\"name\":\"Darya Sinusoid\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46\"},\"headline\":\"6 Characteristics of a Good Programmer\",\"datePublished\":\"2021-06-24T12:14:00+00:00\",\"dateModified\":\"2021-06-26T17:36:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/\"},\"wordCount\":2887,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg\",\"keywords\":[\"The Clean Coder\"],\"articleSection\":[\"Career\",\"Work\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/\",\"url\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/\",\"name\":\"6 Characteristics of a Good Programmer - Shortform Books\",\"isPartOf\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg\",\"datePublished\":\"2021-06-24T12:14:00+00:00\",\"dateModified\":\"2021-06-26T17:36:54+00:00\",\"description\":\"According to Robert C. Martin, there are several characterists that distinguish a good programmer from a bad programmer. Read more.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage\",\"url\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg\",\"contentUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.shortform.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"6 Characteristics of a Good Programmer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#website\",\"url\":\"https:\/\/www.shortform.com\/blog\/\",\"name\":\"Shortform Books\",\"description\":\"The World&#039;s Best Book Summaries\",\"publisher\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.shortform.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#organization\",\"name\":\"Shortform Books\",\"url\":\"https:\/\/www.shortform.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png\",\"contentUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png\",\"width\":500,\"height\":74,\"caption\":\"Shortform Books\"},\"image\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46\",\"name\":\"Darya Sinusoid\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png\",\"contentUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png\",\"caption\":\"Darya Sinusoid\"},\"description\":\"Darya\u2019s love for reading started with fantasy novels (The LOTR trilogy is still her all-time-favorite). Growing up, however, she found herself transitioning to non-fiction, psychological, and self-help books. She has a degree in Psychology and a deep passion for the subject. She likes reading research-informed books that distill the workings of the human brain\/mind\/consciousness and thinking of ways to apply the insights to her own life. Some of her favorites include Thinking, Fast and Slow, How We Decide, and The Wisdom of the Enneagram.\",\"url\":\"https:\/\/www.shortform.com\/blog\/author\/darya\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"6 Characteristics of a Good Programmer - Shortform Books","description":"According to Robert C. Martin, there are several characterists that distinguish a good programmer from a bad programmer. Read more.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/","og_locale":"en_US","og_type":"article","og_title":"6 Characteristics of a Good Programmer","og_description":"According to Robert C. Martin, there are several characterists that distinguish a good programmer from a bad programmer. Read more.","og_url":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/","og_site_name":"Shortform Books","article_published_time":"2021-06-24T12:14:00+00:00","article_modified_time":"2021-06-26T17:36:54+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/s3.amazonaws.com\/wordpress.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg","type":"image\/jpeg"}],"author":"Darya Sinusoid","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Darya Sinusoid","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#article","isPartOf":{"@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/"},"author":{"name":"Darya Sinusoid","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46"},"headline":"6 Characteristics of a Good Programmer","datePublished":"2021-06-24T12:14:00+00:00","dateModified":"2021-06-26T17:36:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/"},"wordCount":2887,"commentCount":0,"publisher":{"@id":"https:\/\/www.shortform.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg","keywords":["The Clean Coder"],"articleSection":["Career","Work"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/","url":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/","name":"6 Characteristics of a Good Programmer - Shortform Books","isPartOf":{"@id":"https:\/\/www.shortform.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage"},"image":{"@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg","datePublished":"2021-06-24T12:14:00+00:00","dateModified":"2021-06-26T17:36:54+00:00","description":"According to Robert C. Martin, there are several characterists that distinguish a good programmer from a bad programmer. Read more.","breadcrumb":{"@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#primaryimage","url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg","contentUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/www.shortform.com\/blog\/characteristics-of-a-good-programmer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.shortform.com\/blog\/"},{"@type":"ListItem","position":2,"name":"6 Characteristics of a Good Programmer"}]},{"@type":"WebSite","@id":"https:\/\/www.shortform.com\/blog\/#website","url":"https:\/\/www.shortform.com\/blog\/","name":"Shortform Books","description":"The World&#039;s Best Book Summaries","publisher":{"@id":"https:\/\/www.shortform.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.shortform.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.shortform.com\/blog\/#organization","name":"Shortform Books","url":"https:\/\/www.shortform.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png","contentUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png","width":500,"height":74,"caption":"Shortform Books"},"image":{"@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46","name":"Darya Sinusoid","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png","contentUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png","caption":"Darya Sinusoid"},"description":"Darya\u2019s love for reading started with fantasy novels (The LOTR trilogy is still her all-time-favorite). Growing up, however, she found herself transitioning to non-fiction, psychological, and self-help books. She has a degree in Psychology and a deep passion for the subject. She likes reading research-informed books that distill the workings of the human brain\/mind\/consciousness and thinking of ways to apply the insights to her own life. Some of her favorites include Thinking, Fast and Slow, How We Decide, and The Wisdom of the Enneagram.","url":"https:\/\/www.shortform.com\/blog\/author\/darya\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/programmer-software-developer-coder.jpg","_links":{"self":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts\/40132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/comments?post=40132"}],"version-history":[{"count":12,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts\/40132\/revisions"}],"predecessor-version":[{"id":40447,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts\/40132\/revisions\/40447"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/media\/40133"}],"wp:attachment":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/media?parent=40132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/categories?post=40132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/tags?post=40132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}