{"id":13558,"date":"2011-01-22T15:49:10","date_gmt":"2011-01-22T23:49:10","guid":{"rendered":"http:\/\/www.kith.org\/journals\/jed\/2011\/01\/22\/13558.html"},"modified":"2011-01-22T15:49:10","modified_gmt":"2011-01-22T23:49:10","slug":"software-engineering","status":"publish","type":"post","link":"https:\/\/www.kith.org\/jed\/2011\/01\/22\/software-engineering\/","title":{"rendered":"Software engineering and me"},"content":{"rendered":"\n<p>I've been programming, one way and another, since I was about eleven years old.<\/p>\n<p>I taught myself a lot, and learned from my father and from friends, and then in college I took Computer Science classes.<\/p>\n<p>And some of those classes weren't just about programming per se. I took a Theory of CS class (which felt more like math than like computers), and a Compiler Design class, and so on.<\/p>\n<p>But I was never actually trained as a software engineer.<\/p>\n<p>And it's finally beginning to get in the way of my work.<\/p>\n<p>The first time I noticed this kind of issue was when I took a graphics class the year after I graduated, while I was working for the college. One of the things the class tried to do was create a graphics library, which made me nervous because (at the time) I didn't have a clear idea of what a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Library_(computing)\">library<\/a> was, despite having been writing code for ten years.<\/p>\n<p>I eventually figured that out. But I've been noticing more of this kind of thing in the past few years.<\/p>\n<p>Possibly the most important thing that I was never formally taught was the idea of a <a href=\"http:\/\/en.wikipedia.org\/wiki\/First-class_function\">function as a first-class object<\/a>. When I first encountered <a href=\"http:\/\/en.wikipedia.org\/wiki\/Callbacks\">callbacks<\/a>, sometime post-college, I couldn't figure them out. Reading <cite><a href=\"http:\/\/oreilly.com\/catalog\/9780596102067\">Intermediate Perl<\/a><\/cite> a few years ago was my first real exposure to a lot of related concepts, including anonymous functions. I'm still struggling with the idea of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Closure_(computer_programming)\">closures<\/a>.<\/p>\n<p>There are a bunch of other common and widely used programming concepts and practices that I haven't had much exposure to and haven't used much. For example:<\/p>\n<ul>\n  <li>I've done very little object-oriented programming, though I understand the concepts.<\/li>\n  <li>I think the first time I encountered the term &ldquo;<a href=\"http:\/\/www.saravanansubramanian.com\/Saravanan\/Articles_On_Software\/Entries\/2010\/1\/19_Unit_Testing_101_For_Non-Programmers.html\">unit test<\/a>&rdquo; was four or five years ago, at my current job.<\/li>\n  <li>I think I get the general idea of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Design_pattern_(computer_science)\">design patterns<\/a>, but I've never knowingly used one.<\/li>\n  <li>I understand the idea of the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Model-View-Controller\">Model-View-Controller<\/a> architecture, but I haven't actually implemented it.<\/li>\n  <li>Every so often, I try again to teach myself about the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Lambda_calculus\">lambda calculus<\/a>, but my attention seems to just bounce off of it.<\/li>\n  <li>I have only a vague understanding of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Interface_(Java)\">interfaces<\/a> and <a href=\"http:\/\/en.wikipedia.org\/wiki\/Factory_(software_concept)\">factories<\/a>.<\/li>\n<\/ul>\n<p>And I've never worked on a significant multi-author software project, which may help explain why and how I've never really learned how to do any of the following:<\/p>\n<ul>\n  <li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Exception_handling\">Exception handling<\/a> (error-checking, sure, but I've never written code to throw or catch an exception per se)<\/li>\n  <li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Instrumenting\">Instrumenting<\/a> code<\/li>\n  <li>Using an IDE (or even using a non-primitive debugger)<\/li>\n  <li>Using version control for code (I've used it plenty for documentation, but somehow never thought to use it for my own code until Sumana suggested it recently)<\/li>\n<\/ul>\n<p>I'm sure there's lots more I could say along similar lines, but that'll do.<\/p>\n<p>In short, though I've written probably a few thousand lines of code in my time (which I know is not a lot by professional standards), in probably a dozen different programming languages, I don't have the training or the knowledge to engage in really good software engineering practices.<\/p>\n<p>I'm gradually learning. I've now written a couple of unit-test-like tests, and I'm slowly trying to add a sort of an abstraction layer to the <cite>SH<\/cite> story-tracking database system, and I keep reading up on stuff when it comes to my attention. Wikipedia and <a href=\"http:\/\/stackoverflow.com\/\">Stack Overflow<\/a> and a mailing list set up by friends of mine have been invaluable resources.<\/p>\n<p>But I do kinda wish I had, at some point in college, taken a class on good software engineering practices. It would've made me a much more effective programmer.<\/p>\n<p>I doubt I have the talent or the temperament to have become a professional software engineer even if I'd taken such a class. But learning earlier about how to do this stuff would've made me a better tech writer, and it would've made various code that I've written (especially the <cite>SH<\/cite> database) a lot more powerful, robust, and testable.<\/p>\n<hr width=\"25%\" \/>\n<p>Wrote most of this entry about a week ago, didn't get around to finishing it &#8217;til now.<\/p>\n<p>Some disclaimers:<\/p>\n<p>I should note that none of this is intended to beat myself up, nor to lament how woefully nontechnical I am (and it's definitely not intended to fish for compliments); I know more about programming than most non-programmers, and I'm not a programmer so it's not surprising that I don't know everything they know.<\/p>\n<p>So nothing here is meant to be a complaint; it's more that I would like to (a) be able to write better and more effective code when I need to, and (b) have a better grasp of the kinds of things that engineers are doing in code that I'm documenting.<\/p>\n<p>I'm also a little concerned that this entry might come back to bite me if at some future time I'm applying for a job somewhere. (I have no plans to leave my current job, but things can change.) So I should explicitly say that in this entry I'm focused entirely on what I don't know; there's lots that I do know, but I'm not talking about that here. And I'm working on learning more about some of the things I don't know.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been programming, one way and another, since I was about eleven years old. I taught myself a lot, and&#8230;<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[68],"tags":[],"class_list":["post-13558","post","type-post","status-publish","format-standard","hentry","category-programming"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/posts\/13558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/comments?post=13558"}],"version-history":[{"count":0,"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/posts\/13558\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/media?parent=13558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/categories?post=13558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kith.org\/jed\/wp-json\/wp\/v2\/tags?post=13558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}