<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    <title>TechOpinionation - Education</title>
    <link>http://joshuakugler.com/</link>
    <description>The life of a programmer/system admin</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.1 - http://www.s9y.org/</generator>
    <pubDate>Wed, 29 Apr 2009 09:15:15 GMT</pubDate>

    <image>
        <url>http://joshuakugler.com/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: TechOpinionation - Education - The life of a programmer/system admin</title>
        <link>http://joshuakugler.com/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Skills vs. Theory: Which Should Be Taught?</title>
    <link>http://joshuakugler.com/archives/16-Skills-vs.-Theory-Which-Should-Be-Taught.html</link>
            <category>Education</category>
    
    <comments>http://joshuakugler.com/archives/16-Skills-vs.-Theory-Which-Should-Be-Taught.html#comments</comments>
    <wfw:comment>http://joshuakugler.com/wfwcomment.php?cid=16</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://joshuakugler.com/rss.php?version=2.0&amp;type=comments&amp;cid=16</wfw:commentRss>
    

    <author>nospam@example.com (Joshua Kugler)</author>
    <content:encoded>
    [The meat of this post was actually a reply to a UAF (Univeristy of Alaska Fairbanks) LUG (Linux User&#039;s Group) mailing-list thread a few months back.  It&#039;s been reworked for this blog post.  In addition, this post was moved from my person blog, &lt;a href=&quot;http://jjncj.com/blog/&quot; title=&quot;JJ and CJ&#039;s blog&quot;&gt;jjncj.com&lt;/a&gt; where it was originally posted March 25 of last year.]&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;I was reminded of this topic by a post on CodeJustin that had a poll about &lt;a href=&quot;http://codejustin.com/did-you-go-to-college-for-programming-poll/&quot;&gt;whether or not you went to college for programming&lt;/a&gt;.  For me the answer is yes and no.  I went to college to learn many skills and much theory about computer systems, but 95%+ of what I use in my day-to-day job I&#039;ve taught myself.  However, that learned theory has formed a solid foundation for my learned skills.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
This has been hashed out many, many times, but I&#039;ll jump into the fray again. If you want a foundation in computer science, and the ability to learn: get a theory-based CS degree.  If you just want the skills you need for a job, take a class for it, read it on the web, or take a university course that is more geared toward certifications (for example: &lt;a href=&quot;http://www.tvc.uaf.edu/programs/infotech/index.html&quot;  title=&quot;UAF TVC&quot;&gt;see the UAF Info Tech program&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
But as to practical skills, the UAF CS program does offer many.  If you want to program, take Operating Systems (321) and Assembly (301).  Architecture (471) is a good one too.  Those classes will make understanding programming so much easier, because you understand what the system is doing as your program executes.  If you want to be a network guru, take CS 442 first (or the grad level 642).  Will it teach you to set up a windows AD network and configure roaming profiles?  No, but it will give you a base-line knowledge level that will make understanding how that network works, and troubleshooting that network, so much easier.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve taken the full complement of CS classes to earn my BS, and almost my MS. There are classes I may never use again.  But I&#039;m glad I had CS 201/202 (I&#039;ve used C/C++ since in job and school); 301 (Assembly language; understanding of a computer&#039;s operation); 331/631 (Compiler and language theory; better understanding of how compilers work, and the complexities thereof); 401 (senior project, better understanding of process and project management); Computer Architecture (gives me a good idea of how all the hardware fits together so I understand the system better when working on it); 311 (Algorithms and data structures; will I being doing heavy algorithm design, maybe, but I also know I can evaluate possible algorithms for efficiency and the load they will put on the system); 321 (Operating systems; especially helps when running on &quot;sane&quot; systems such as Linux or Mac OS X); 447 (software engineering: gave me so much insight into the proper ways to go about designing programs.  Something I&#039;m about to put into heavy use at my current job); and there are others.&lt;br /&gt;
&lt;br /&gt;
Among the things I&#039;ve learned on my own or via &quot;on the job training&quot;: Python, Perl; SQL; Visual Basic; Linux administration; Apache administration; Postfix administration; a little Sendmail too; general system administration; network setup, with some routing (My friend Todd Medbury could still make my head hurt); hardware/software troubleshooting/assembly; Qt programming; CGI/web programming; Bind (DNS Server); HTML; VMWare Server; Bacula (backup server); as well as other skills I&#039;ve probably failed to mention.  I&#039;m not bragging, I&#039;m simply pointing out that taking classes in all those would have been prohibitively expensive, taken a LOT of time, and in the end I would have learned less than my on-the-job training taught me.&lt;br /&gt;
&lt;br /&gt;
For another example of what all that theory got me, see &lt;a href=&quot;http://jjncj.com/papers/VotingVirtually.pdf&quot;  title=&quot;Voting Virtually&quot;&gt;this paper&lt;/a&gt;. Careful design and development led to a successful election with software that was designed, coded, and debugged (very little debugging, due to careful coding) in 80 hours.&lt;br /&gt;
&lt;br /&gt;
My point is, with a  CS degree from UAF (or another college that is more on the theory side), you will be able to drop into any job and pick up the skills quickly.  With a purely skills-based degree, if you do not have the learn-on-your-own-itude that is needed in this industry, you will be totally&lt;br /&gt;
lost when faced with a new paradigm or language.&lt;br /&gt;
&lt;br /&gt;
Bottom line: if one requires a university class to learn a job skill, then a CS degree won&#039;t do one much good in the real world, whether theoretical or practical. 
    </content:encoded>

    <pubDate>Wed, 29 Apr 2009 08:47:09 +0000</pubDate>
    <guid isPermaLink="false">http://joshuakugler.com/archives/16-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><category>education</category>
<category>experience</category>
<category>learning</category>
<category>skills</category>
<category>theory</category>

</item>

</channel>
</rss>