{"id":1281,"date":"2008-08-13T17:21:03","date_gmt":"2008-08-13T21:21:03","guid":{"rendered":"http:\/\/www.starkeith.net\/coredump\/?p=1281"},"modified":"2022-12-02T16:40:05","modified_gmt":"2022-12-02T21:40:05","slug":"10-tips-for-new-programmers","status":"publish","type":"post","link":"https:\/\/www.starkeith.net\/coredump\/2008\/08\/13\/10-tips-for-new-programmers\/","title":{"rendered":"10 Tips for New Programmers"},"content":{"rendered":"<p>It occurred to me the other day that I&#8217;ve been doing this stuff (programming) for more than a few years now &#8211; most of them in a very much &#8220;professional&#8221; manner. So I guess that makes me qualified to come up with lists like this!<\/p>\n<ol>\n<li><strong>Learn the machine.<\/strong> Build yourself a computer. Understand how the CPU, memory, and IO work. Even if you forget it all tomorrow, you&#8217;ll have at least a rough understanding &#8211; trust me, it&#8217;s important.<\/li>\n<li><strong>Everything you know is wrong.<\/strong> Well, not really, but you need to act like it is. Always go back and look at your code with a critical eye &#8211; as if it was written by someone else, if that helps &#8211; and imagine that you just <em>know<\/em> there&#8217;s something wrong with it, something terribly, terribly wrong, and it&#8217;s your mission to find it. Your code will be better because of this sort of attitude.<\/li>\n<li><strong>Communication is key.<\/strong> Coding is basically communicating with a very dumb machine (the computer). You have to give it very, very precise instructions, being very careful to tell it exactly, precisely what you want it to do. The mark of a good programmer is someone who can commune with the computer on an almost instinctual level. But it&#8217;s equally important to be able to talk to real, live people in just as effective a manner. So don&#8217;t neglect that &#8220;speech&#8221; class that they make you take in college!<\/li>\n<li><strong>Everything you&#8217;ve done is junk (a corollary to &#8220;everything you know is wrong&#8221;).<\/strong> Be humble. Learn from your mistakes. Because you <em>will <\/em>make them.<\/li>\n<li><strong>Doublethink can be your friend.<\/strong> Being a really good programmer means walking a fine mental line between being totally confident in what you&#8217;re doing &#8211; you think that Bill Gates will show up at any given moment to kiss the ground you&#8217;re walking on, that&#8217;s how good you are &#8211; and simultaneously thinking of your work as the worst possible junk that looks like it was hammed out by a bunch of monkeys banging randomly on keyboards.<\/li>\n<li><strong>99% of the time, it&#8217;s been done before. <\/strong>Otherwise known as &#8220;be a lazy programmer.&#8221; Take advantage of work that&#8217;s been done before &#8211; unless you really want to learn how it&#8217;s done, in which case you should re-write it on your own, get it to work, and then throw it out and use the pre-made code instead. Humility AND experience, all in one deft stroke!<\/li>\n<li><strong>Be multi-lingual. <\/strong>You don&#8217;t need to be able to write an OS from scratch in x86 assembly or anything, but being able to at least read other languages is a great asset &#8211; especially since so much of the 99% of code that&#8217;s already been written (see #6 above) has probably been written in a different language from the one you&#8217;re using right now.<\/li>\n<li><strong>Always think of yourself as a student.<\/strong> Programming languages grow and there is always something more to learn, so always think of yourself as a student, and never let go of that feeling.<\/li>\n<li><strong>Know your tools &#8211; but don&#8217;t be held hostage by them.<\/strong> Experiment with different IDEs. Try a different code editor. Yes, we all love auto-complete and Intellisense, but you should at least not be completely helpless without it.<\/li>\n<li><strong>Learn and use source control.<\/strong> Hey, you knew I had to squeeze this in here. There&#8217;s just no excuse for not using some form of source control, no matter how small your project is &#8211; even if it&#8217;s just a little side project you&#8217;re doing for nobody but yourself. <a href=\"http:\/\/subversion.tigris.org\/\">Subversion<\/a> is free, and so is the great client <a href=\"http:\/\/tortoisesvn.tigris.org\/\">TortoiseSVN<\/a>. They&#8217;re both available for Windows and Linux, so you have no excuse for not using them.<\/li>\n<\/ol>\n<p>Well, there you have it. If you&#8217;re a new programmer, hopefully these tips will be helpful to you &#8211; goodness knows I wish I had known them all when I started out.<\/p>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It occurred to me the other day that I&#8217;ve been doing this stuff (programming) for more than a few years now &#8211; most of them in a very much &#8220;professional&#8221; manner. So I guess that makes me qualified to come up with lists like this! Learn the machine. Build yourself a computer. Understand how the&hellip; <a class=\"more-link\" href=\"https:\/\/www.starkeith.net\/coredump\/2008\/08\/13\/10-tips-for-new-programmers\/\">Continue reading <span class=\"screen-reader-text\">10 Tips for New Programmers<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"webmentions_disabled_pings":false,"webmentions_disabled":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[199,201,5],"tags":[107,97],"class_list":["post-1281","post","type-post","status-publish","format-standard","hentry","category-my-opinion","category-software-technology","category-technology","tag-programming","tag-software","entry"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pimUj-kF","jetpack-related-posts":[{"id":4611,"url":"https:\/\/www.starkeith.net\/coredump\/2014\/10\/10\/things-wish-id-known-started-programming\/","url_meta":{"origin":1281,"position":0},"title":"Things I Wish I&#8217;d Known When I Started Programming","author":"Keith Survell","date":"October 10, 2014","format":false,"excerpt":"I've been programming for more than a few years now, but sometimes I like to look back at things I wrote when I was much younger, and reflect on how much I've learned since then. Of course, no one expects you to start out knowing everything, but there are a\u2026","rel":"","context":"In &quot;My Opinion&quot;","block_context":{"text":"My Opinion","link":"https:\/\/www.starkeith.net\/coredump\/category\/personal\/my-opinion\/"},"img":{"alt_text":"code","src":"https:\/\/i0.wp.com\/www.starkeith.net\/coredump\/wp-content\/uploads\/\/2014\/09\/code.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1201,"url":"https:\/\/www.starkeith.net\/coredump\/2008\/07\/10\/some-of-my-programming-book-recommendations\/","url_meta":{"origin":1281,"position":1},"title":"Some of MY Programming Book Recommendations","author":"Keith Survell","date":"July 10, 2008","format":false,"excerpt":"Well, I shouldn't say \"recommendations,\" since I'm just recommending one book: Testing Computer Software (Second Edition) by Cem Kaner, Jack Falk, and Hung Quoc Nguyen. This is an utterly invaluable book for anyone who ever aspires to be more than just a code monkey. Technically speaking, this book was written\u2026","rel":"","context":"In &quot;My Opinion&quot;","block_context":{"text":"My Opinion","link":"https:\/\/www.starkeith.net\/coredump\/category\/personal\/my-opinion\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4398,"url":"https:\/\/www.starkeith.net\/coredump\/2013\/06\/19\/know-your-code\/","url_meta":{"origin":1281,"position":2},"title":"Know Your Code","author":"Keith Survell","date":"June 19, 2013","format":false,"excerpt":"Q: As a .NET programmer, why do you care about being familiar with the Win32 API? A: Because the .NET framework is just another abstraction, and I like to think that I'm a good programmer - and good programmers know that all abstractions are leaky.","rel":"","context":"In &quot;Software&quot;","block_context":{"text":"Software","link":"https:\/\/www.starkeith.net\/coredump\/category\/technology\/software-technology\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":493,"url":"https:\/\/www.starkeith.net\/coredump\/2005\/05\/12\/joel-on-software-back-to-basics\/","url_meta":{"origin":1281,"position":3},"title":"Joel on Software &#8211; Back to Basics","author":"Keith Survell","date":"May 12, 2005","format":false,"excerpt":"This article makes a good point about something very important; namely, that to be a good software programmer, you have to know a lot about the nuts & bolts of how the computer works - from raw CPU instructions right up to drivers & other high-level nonsense.","rel":"","context":"In &quot;personal&quot;","block_context":{"text":"personal","link":"https:\/\/www.starkeith.net\/coredump\/category\/personal\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2800,"url":"https:\/\/www.starkeith.net\/coredump\/2009\/09\/08\/treating-our-legal-code-like-computer-code\/","url_meta":{"origin":1281,"position":4},"title":"Treating our Legal Code like Computer Code","author":"Keith Survell","date":"September 8, 2009","format":false,"excerpt":"Looking at some pending legislation through the eyes of a computer programmer... and finding it... wanting.","rel":"","context":"In &quot;My Opinion&quot;","block_context":{"text":"My Opinion","link":"https:\/\/www.starkeith.net\/coredump\/category\/personal\/my-opinion\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1882,"url":"https:\/\/www.starkeith.net\/coredump\/2009\/04\/09\/communication-and-programming\/","url_meta":{"origin":1281,"position":5},"title":"Communication and Programming","author":"Keith Survell","date":"April 9, 2009","format":false,"excerpt":"Programming is all about communicating - communicating with the computer, and with other people. So it follows that to be a good programmer, you need to be a good communicator, too.","rel":"","context":"In &quot;My Opinion&quot;","block_context":{"text":"My Opinion","link":"https:\/\/www.starkeith.net\/coredump\/category\/personal\/my-opinion\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/posts\/1281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/comments?post=1281"}],"version-history":[{"count":1,"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/posts\/1281\/revisions"}],"predecessor-version":[{"id":5944,"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/posts\/1281\/revisions\/5944"}],"wp:attachment":[{"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/media?parent=1281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/categories?post=1281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.starkeith.net\/coredump\/wp-json\/wp\/v2\/tags?post=1281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}