{"id":664,"date":"2006-09-29T07:16:46","date_gmt":"2006-09-29T12:16:46","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=664"},"modified":"2007-05-24T16:30:37","modified_gmt":"2007-05-24T21:30:37","slug":"experience-knowledge","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=664","title":{"rendered":"Experience != Knowledge"},"content":{"rendered":"<p><a href=\"http:\/\/denbeste.nu\/Chizumatic\/\">Steven was talking about computer-science education and computer sorting systems yesterday<\/a>.  This subject made my brain tingle for a number of reasons, not the least of which is that he likened the game of solitaire to a sort algorithm with very specific restrictions. I must resist the urge to turn my blog into a morass of code theory and C++ snippets that would interest only me, but this is a very interesting idea<\/p>\n<p>On the subject of Computer Science education, he says:<\/p>\n<div class=quote>The first volume of that series was a textbook for one of my classes; I think it was my &#8220;Data Structures&#8221; course. (Which was the single most useful CS course I took in my entire college experience, since it taught me about linked lists, stacks, queues, and also, it turns out, about recursive descent parsers. All of which I&#8217;ve used heavily ever since.)<\/div>\n<p>I&#8217;ve mentioned before that I program for a living, but I have no formal education.  Steven mentions &#8220;linked lists&#8221;, which is a programming technique for dealing with lists of things where you don&#8217;t know ahead of time how many things you&#8217;ll be dealing with.  You may need three, or three thousand.  Linked lists are easy to implement, although they have several drawbacks I won&#8217;t list here because of the damage your face would sustain when it hit the keyboard at the onset of deep-REM sleep.<\/p>\n<p>Since I was not formally educated, I was never taught linked lists. I was a programmer for several years before I even saw one.  When I did, I told my boss (who had written the bit of code I was reading) that I thought it was pretty slick; I thought it was his idea. Then he explained linked lists to me, and I learned that they were a very common technique. Oops. Heh. I still have odd gaps like this in my knowledge.  <\/p>\n<p>For contrast, I have a cousin who took the other route.  He was educated at <a href=\"http:\/\/www.cmu.edu\/\">CMU<\/a>.  He stayed with our family for a time after graduation, and we talked programming quite a bit.  It was obvious that he was the better coder <em>by far<\/em>.  I was still cutting my teeth on vanilla C, and he had several languages under his belt.  He was faster at coding, better at debugging, better at understanding the limits of the hardware he was working with, and better at designing software in his head.  I started to get pretty scared &#8211; if this is what all programmers were like coming out of college, then the chances of me landing a job were pretty slim.  <\/p>\n<p><em>(This was both true and false.  All programmers were <strong>not<\/strong> like my cousin, who was naturally talented and had a passion for coding, and who went to a fairly impressive college.  However, is <strong>was<\/strong> true that my chances of getting a job were slim.  Not because of the knowledge deficit on my part, but because people want to hire coders with degrees.  I assumed employers knew how to tell a good coder from a bad one.  They don&#8217;t.  But they <strong>can<\/strong> tell someone who has a degree from someone who doesn&#8217;t. Even when comparing two candidates with degrees, they can usually tell who has the most <strong>expensive<\/strong> education.)<\/em><\/p>\n<p>At one point we were talking about sorting techniques.  Suddenly my cousin blurted out that <em>bubble sort was a stupid sorting system and there was no justification for using it, ever<\/em>.  I wasn&#8217;t holding a CS degree, but I was smart enough to identify dogma when I saw it.  I pressed him on this point, which he believed with great conviction but little evidence.<\/p>\n<p>&#8220;Bubble sort&#8221; is a technique of sorting stuff &#8211; any kind of data in the computer &#8211; that is easy to understand, but quite slow in implementation.  It&#8217;s a sort of brute-force approach.  I&#8217;ve heard it said that it is the slowest, although I&#8217;ve never sat down and tried to prove that for myself.  <\/p>\n<p>Anyway, my cousin was obviously just repeating some nonsense that an instructor had pounded into his head. &#8220;Bubble sort was the slowest, therefore it was the worst and should never be used.&#8221; I pointed out the Tetris clone I was working on (which floated around on <a href=\"http:\/\/members.tripod.com\/~tetrislovers\/features\/tetris_download_list_2_12_2000.htm\">various BBS systems<\/a> for a number of years) and that bubble sort was a perfectly acceptable way of dealing with the high score list. He countered, saying that it was very slow, and I could speed up performance of the sorting algorithm many, many times by simply using a less stone-age method of sorting.  I pointed out that I was sorting a list of 10 names.  Even on the decrepit 8mhz machine I was using, the sort was instant. If I made it a list of the top 100 names, I&#8217;m sure it would still have been instant. If I made the sort ten times faster, the user would not be able to tell the difference.  There was simply no justification for optimizing the thing.<\/p>\n<p>This was a heartening moment for me.  It showed me that while formal education was valuable, it could never take the place of experience.  A seasoned programmer would not go around spouting absolutes like this.  They would know better. Idealogical purity is one of the first things out of the window when trying to accomplish something instead of <em>learning<\/em> to accomplish something.<\/p>\n<p>Classroom assignments almost never capture the chaos and uncertainty of the real world.  If it did, students would go crazy.  Imagine an instructor that gave a lengthy coding assignment, and then every day for the next week he would change some of the goals of the assignment.  Once he saw a working prototype, he would inform them that while they gave him what he <em>asked<\/em> for, it still wasn&#8217;t what he really <em>wanted<\/em>, and he would change the requirements again.  Let&#8217;s also assume that even though the students had to start over many times, the instructor never altered the original due date. This is the world of professional coding, and no professor could teach it without getting lynched.<\/p>\n<p>It&#8217;s a shame that higher education works the way it does. Colleges are great at taking an established body of knowledge and distilling it into courses and curriculum.  This works well as long as the body of knowledge isn&#8217;t changing too fast.  CS changes at a shocking pace, and it&#8217;s hard for educators to keep up.  Heck, it&#8217;s hard for those of us <em>working in the field<\/em> to keep up. How much harder is it for teachers who are trying to teach what they know, instead of fighting to learn new things!  College is a very expensive way to gain knowledge, although there are clearly gems of learning in there that are difficult to learn by other means. The most difficult part of filling in the gaps in my self-taught knowledge is that I don&#8217;t know where the gaps are.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Steven was talking about computer-science education and computer sorting systems yesterday. This subject made my brain tingle for a number of reasons, not the least of which is that he likened the game of solitaire to a sort algorithm with very specific restrictions. I must resist the urge to turn my blog into a morass [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-664","post","type-post","status-publish","format-standard","hentry","category-personal"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=664"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/664\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}