{"id":576,"date":"2010-07-06T02:00:41","date_gmt":"2010-07-06T07:00:41","guid":{"rendered":"http:\/\/www.thejuliagroup.com\/blog\/?p=576"},"modified":"2010-07-06T02:00:41","modified_gmt":"2010-07-06T07:00:41","slug":"are-you-a-programmer-or-arent-you","status":"publish","type":"post","link":"https:\/\/www.thejuliagroup.com\/blog\/are-you-a-programmer-or-arent-you\/","title":{"rendered":"Are you a programmer or aren&#8217;t you?"},"content":{"rendered":"<p>So, I am writing a paper on how you know you (or someone else) is a &#8220;real&#8221; programmer. That is, they don&#8217;t fit in that &#8220;new user&#8221; box any more. But how do you make that decision?<\/p>\n<p>Is it like pornography, you just know it when you look at it? (Not that I ever personally looked at any of course, but I have heard you can find it on the Internet if you try really hard.)<\/p>\n<p>Yesterday, Rob Meekings made a comment about design decisions. That is certainly a distinction, when you get to the point that you are actually thinking that way. For example, I often will merge everything together in one long dataset, a habit that makes those who love SQL and the star schema just cringe. The REASON I do this is that most of the people I work with are researchers using very powerful computers with datasets of a few thousand observations, or, at most, a few hundred thousand. Even on a desktop, an analysis with SAS, Stata or SPSS takes seconds. It isn&#8217;t worth taking an extra hour or two to make a program run in one second instead of two. It also may make the program more difficult for the user to maintain him\/herself.<\/p>\n<p>HOWEVER, when I am running a program that runs against a 100GB dataset and can take hours to run because the researcher cannot use a supercomputer, e.g., due to security classification, I&#8217;ll spend a good bit of time trying to make it run as efficiently as possible. <\/p>\n<p>If there isn&#8217;t a pressing reason not to do it, I&#8217;d recommend someone with a large dataset considering running it on a cluster and take advantage of parallel processing capabilities. This means changing your code slightly to run on a different OS, often Linux or some other Unix version.<\/p>\n<p>I do a lot of &#8220;throw away programming&#8221;, that&#8217;s not to say it&#8217;s garbage. Sometimes I think my work is quite good, in fact, but it&#8217;s not production code that runs every day to produce reports on 500 different stores. When I DO write production code, I do several things differently. One is that I make good use of  %include statements. For example, if there is a footnote that is going to be in every single output that says, &#8220;Funding provided by National Science Foundation Rural Systemic Initiative Grant #1234-2010&#8221;  and several more lines about the university, address for contact, etc., I am going to have a small file that I just include. Yes, I could copy and paste it or have that as a template for when I create a new program. BUT what happens when we get another grant and we want to recognize both funding agencies in everything we publish? <\/p>\n<p>My point, and you may be surprised by this point to find that I do, in fact, have one, is that a distinction between novice and non-novice programmers is that they have the luxury of thinking about a design because they know more than one way to do something.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So, I am writing a paper on how you know you (or someone else) is a &#8220;real&#8221; programmer. That is, they don&#8217;t fit in that &#8220;new user&#8221; box any more. But how do you make that decision? Is it like pornography, you just know it when you look at it? (Not that I ever personally&#8230;<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,9,8],"tags":[],"class_list":["post-576","post","type-post","status-publish","format-standard","hentry","category-dr-de-mars-general-life-ramblings","category-software","category-technology"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/posts\/576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/comments?post=576"}],"version-history":[{"count":1,"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/posts\/576\/revisions"}],"predecessor-version":[{"id":577,"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/posts\/576\/revisions\/577"}],"wp:attachment":[{"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/media?parent=576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/categories?post=576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thejuliagroup.com\/blog\/wp-json\/wp\/v2\/tags?post=576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}