{"id":691,"date":"2015-02-11T00:14:09","date_gmt":"2015-02-10T18:44:09","guid":{"rendered":"http:\/\/abhinav.spsdarj.org\/?p=691"},"modified":"2015-03-29T00:51:29","modified_gmt":"2015-03-28T19:21:29","slug":"what-are-the-best-kept-secrets-of-great-programmers","status":"publish","type":"post","link":"https:\/\/abhinavkr.com\/musings\/2015\/02\/what-are-the-best-kept-secrets-of-great-programmers\/","title":{"rendered":"What are the best-kept secrets of great programmers?"},"content":{"rendered":"<p><strong>Answer by Jeff Darcy:<\/strong><\/p>\n<blockquote><p>Never reveal all that you know.<\/p><\/blockquote>\n<p>OK, seriously this time.\u00a0 I think there are really a few things that distinguish great programmers.<\/p>\n<ol>\n<li>Know the concepts.\u00a0 Solving a problem via memory or pattern recognition is much faster than solving it by reason alone.\u00a0 If you&#8217;ve solved a similar problem before, you&#8217;ll be able to recall that solution intuitively.\u00a0 Failing that, if you at least keep up with current research and projects related to your own you&#8217;ll have a much better idea where to turn for inspiration.\u00a0 Solving a problem &#8220;automatically&#8221; might seem like magic to others, but it&#8217;s really an application of &#8220;practice practice practice&#8221; as <span class=\"qlink_container\"><a href=\"http:\/\/www.quora.com\/Miguel-Paraz\">Miguel Paraz<\/a><\/span> suggests.<\/li>\n<li>Know the tools.\u00a0 This is not an end in itself, but a way to maintain &#8220;flow&#8221; while programming.\u00a0 Every time you have to think about how to make your editor or version-control system or debugger do what you want, it bumps you out of your higher-level thought process.\u00a0 These &#8220;micro-interruptions&#8221; are small, but they add up quickly.\u00a0 People who learn their tools, practice using their tools, and automate things that the tools can&#8217;t do by themselves can easily be several times as productive as those who do none of those things.<\/li>\n<li>Manage time.\u00a0 Again it comes back to flow.\u00a0 If you want to write code, write code.\u00a0 If you want to review a bunch of patches, review a bunch of patches.\u00a0 If you want to brainstorm on new algorithms . . . you get the idea.\u00a0 Don&#8217;t try to do all three together, and <span style=\"text-decoration: underline;\">certainly<\/span> don&#8217;t interrupt yourself with email or IRC or Twitter or Quora.\u00a0 \ud83d\ude09\u00a0 Get your mind set to do one thing, then do that thing for a good block of time before you switch to doing something else.<\/li>\n<li>Prioritize.\u00a0 This is the area where I constantly see people fail.\u00a0 Every problem worth tackling has many facets.\u00a0 Often, solving one part of the problem will make solving the others easier.\u00a0 Therefore, <span style=\"text-decoration: underline;\">getting the order right<\/span> really matters.\u00a0 I&#8217;m afraid there&#8217;s no simple answer for how to recognize that order, but as you gain more experience within a problem domain &#8211; practice again &#8211; you&#8217;ll develop a set of heuristics that will guide you.<\/li>\n<li>Reuse everything.\u00a0 Reuse ideas.\u00a0 Reuse code.\u00a0 Every time you turn a new problem into a problem you already know how to solve &#8211; and computing is full of such opportunities &#8211; you can save time.\u00a0 Don&#8217;t worry if the transformed solution isn&#8217;t absolutely perfect for the current problem.\u00a0 You can refine later if you really need to, and most often you&#8217;ll find that you&#8217;re better off moving on to the next problem.<\/li>\n<\/ol>\n<p>A lot of these really come down to efficiency.\u00a0 As you move through more problems per day, you&#8217;ll gain more experience per day, which will let you move through more problems per day, and so on.\u00a0 It&#8217;s a feedback loop; once you get on its good side, your effectiveness (and value) will increase drastically.<\/p>\n<p><span class=\"qlink_container\"><a href=\"http:\/\/www.quora.com\/What-are-the-best-kept-secrets-of-great-programmers\/answer\/Jeff-Darcy\">What are the best-kept secrets of great programmers?<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Answer by Jeff Darcy: Never reveal all that you know. OK, seriously this time.\u00a0 I think there are really a few things that distinguish great programmers. Know the concepts.\u00a0 Solving a problem via memory or pattern recognition is much faster than solving it by reason alone.\u00a0 If you&#8217;ve solved a similar problem before, you&#8217;ll be&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[4,11,189],"tags":[],"class_list":["post-691","post","type-post","status-publish","format-standard","hentry","category-knowledge","category-quora-post","category-tech"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p4KGvB-b9","jetpack-related-posts":[{"id":998,"url":"https:\/\/abhinavkr.com\/musings\/2016\/09\/what-is-the-best-strategy-to-improve-my-skills-in-competitive-programming-in-2-3-months\/","url_meta":{"origin":691,"position":0},"title":"What is the best strategy to improve my skills in competitive programming in 2-3 months?","author":"Abhinav","date":"September 11, 2016","format":false,"excerpt":"Answer by Sachin Gupta: This post has been taken from the blog post\u00a0 Learn to Code by Competitive Programming written by MV Kaushik when he was interning at HackerEarth Here are some steps to get started and be good at it. Get comfortable writing code in either of one of\u2026","rel":"","context":"In &quot;Knowledge&quot;","block_context":{"text":"Knowledge","link":"https:\/\/abhinavkr.com\/musings\/category\/knowledge\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":697,"url":"https:\/\/abhinavkr.com\/musings\/2015\/02\/how-do-you-know-if-your-startup-idea-already-exists\/","url_meta":{"origin":691,"position":1},"title":"How do you know if your startup idea already exists?","author":"Abhinav","date":"February 15, 2015","format":false,"excerpt":"Answer by Carlos Del Carpio: The founder of Dropbox was pitching in front of an investor one day, and the investor asked him: \"there are similar companies out there doing the same as dropbox, why should I invest in just another similar company?\" His reply: \"Yes. There are similar companies\u2026","rel":"","context":"In &quot;Quora Post&quot;","block_context":{"text":"Quora Post","link":"https:\/\/abhinavkr.com\/musings\/category\/quora-post\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":986,"url":"https:\/\/abhinavkr.com\/musings\/2016\/08\/what-was-anudeep-nekkantis-competitive-programming-strategy-to-become-35th-in-global-ranking-in-just-6-7-months\/","url_meta":{"origin":691,"position":2},"title":"What was Anudeep Nekkanti&#8217;s Competitive Programming strategy to become 35th in Global ranking, in just 6-7 months?","author":"Abhinav","date":"August 19, 2016","format":false,"excerpt":"Answer by Anudeep Nekkanti: What I did ? Solved about 300 problems on SPOJ in this order - Sphere Online Judge (SPOJ) Result ? Became very good with C++ and STL Got introduced to most Competitive programming KEYWORDS (like DP, maxflow, sets, hashing, etc) Learned Standard Problems and Algorithms Indenting\u2026","rel":"","context":"In &quot;Knowledge&quot;","block_context":{"text":"Knowledge","link":"https:\/\/abhinavkr.com\/musings\/category\/knowledge\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":654,"url":"https:\/\/abhinavkr.com\/musings\/2014\/11\/my-friends-have-girlfriends-i-never-had-and-feel-depressed-about-it-what-to-do\/","url_meta":{"origin":691,"position":3},"title":"My Friends have girlfriends. I never had and feel depressed about it. What to do?","author":"Abhinav","date":"November 12, 2014","format":false,"excerpt":"Answer by Nabarun Mondal: Right now I am solving a problem of how to automatically generate a graph from a bunch of processes. This is Friday weekend and my entertainment is to study the History of North East India, and then General Relativity. NO, I am not a \"student\", and\u2026","rel":"","context":"In &quot;Motivate&quot;","block_context":{"text":"Motivate","link":"https:\/\/abhinavkr.com\/musings\/category\/motivate\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":564,"url":"https:\/\/abhinavkr.com\/musings\/2014\/08\/be-a-good-programmer\/","url_meta":{"origin":691,"position":4},"title":"Be a good Programmer","author":"Abhinav","date":"August 24, 2014","format":false,"excerpt":"Recommendations for Academic Learning Introduction to CS Course Notes: Introduction to Computer Science Course that provides instructions on coding. Online Resources: Udacity- \u00a0Intro to CS course, Coursera - Computer Science 101 Code in at least one object oriented programming language: C++, Java, or Python Beginner Online Resources: Coursera - Learn\u2026","rel":"","context":"In &quot;Knowledge&quot;","block_context":{"text":"Knowledge","link":"https:\/\/abhinavkr.com\/musings\/category\/knowledge\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":943,"url":"https:\/\/abhinavkr.com\/musings\/2016\/05\/what-are-some-study-hacks-every-student-should-know\/","url_meta":{"origin":691,"position":5},"title":"What are some study hacks every student should know?","author":"Abhinav","date":"May 24, 2016","format":false,"excerpt":"Answer by Nela Canovic You can try one or all of these 9 study hacks to help you work smarter towards your exams: ONE. Create a morning habit to give your energy for the day ahead. You can be on top of your game by following a morning routine so\u2026","rel":"","context":"In &quot;Knowledge&quot;","block_context":{"text":"Knowledge","link":"https:\/\/abhinavkr.com\/musings\/category\/knowledge\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/posts\/691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/comments?post=691"}],"version-history":[{"count":4,"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/posts\/691\/revisions"}],"predecessor-version":[{"id":789,"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/posts\/691\/revisions\/789"}],"wp:attachment":[{"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/media?parent=691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/categories?post=691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abhinavkr.com\/musings\/wp-json\/wp\/v2\/tags?post=691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}