{"id":256,"date":"2009-10-03T06:48:59","date_gmt":"2009-10-03T12:48:59","guid":{"rendered":"http:\/\/minkhollow.ca\/beckerblog\/?p=256"},"modified":"2014-09-12T12:02:13","modified_gmt":"2014-09-12T18:02:13","slug":"teaching-introductory-programming-were-doing-it-wrong-still","status":"publish","type":"post","link":"https:\/\/minkhollow.ca\/beckerblog\/2009\/10\/03\/teaching-introductory-programming-were-doing-it-wrong-still\/","title":{"rendered":"Teaching Introductory Programming: We&#8217;re Doing It Wrong (still)"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Approximate Reading Time: <\/span> <span class=\"rt-time\"> 3<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>I just read Mark Guzdial&#8217;s excellent post on some of what&#8217;s wrong with how we teach introductory programming courses.<\/p>\n<h2 style=\"padding-left: 60px;\"><a href=\"http:\/\/computinged.wordpress.com\/2009\/10\/02\/question-everything-how-we-teach-intro-cs-is-wrong\/\">Question Everything: How We Teach Intro CS is\u00a0Wrong<\/a><\/h2>\n<p>The notion that we should be modeling expert behaviour when teaching programming is silly. Experts work quite differently from novices. We accept this as a given in sport &#8211; if you make a novice do things an expert does you could very well cause them to injure themselves.<\/p>\n<p><!--more--><\/p>\n<p>I have taught introductory programming on &amp; off for about 30 years and have never really been happy with the way we do it. Mark puts his finger on at least some of the reasons why. We make novices write their own programs WAY too soon. We also don&#8217;t provide enough variety.<\/p>\n<p>This probably sounds redundant, but we should be helping students (novices) become experts by starting off teaching them how to be novices. In my experience most intro programming instructors &#8220;teach&#8221; by lecturing, going over one or two examples, telling them to read from the book, and making students do a few assignments.<\/p>\n<p>I certainly agree with the idea that we should be using a wide range of approaches. Most of the time, we use a very few.<\/p>\n<p>Here are some of the ones mentioned in Mark&#8217;s post and in <span>Alan Fekete&#8217;s comment<\/span> :<\/p>\n<ol>\n<li>Write a program to do &#8216;X&#8217;.<\/li>\n<li>Fix this program.<\/li>\n<li>Document this program.<\/li>\n<li>Trace a program.<\/li>\n<li>Explain a program.<\/li>\n<li>Identify differences between two programs.<\/li>\n<li>Convert pseudocode into a program.<\/li>\n<li>Teach someone else about this feature of programming.<\/li>\n<\/ol>\n<p>One of the ones we really don&#8217;t use often enough is the &#8220;change a program&#8221; exercise. I don&#8217;t know about anyone else but that is my own main method for learning a new language on my own. I *never* use the approach we impose on our novices myself. When I am trying to learn a new language, it is usually because I have some thing I need to accomplish. So I look for existing code that does something similar &#8211; usually several examples. I check them over to find the one that is closest to what I want AND that makes the most sense to me (we all have different approaches to coding) and then I try and modify it to fit my needs.<br \/>\nIf I were to organize these notions into some rough hierarchy, I&#8217;d do &#8220;change a program&#8221; before asking them to &#8220;fix a program&#8221;. I think debugging requires a relatively deep understanding of the way the code works. I think we use this approach way too early. I have been guilty of that myself &#8211; recently &#8211; and your post Mark has helped me to get a handle on why that approach rarely works well with rank novices.<\/p>\n<p>I also think one of the strongest reasons why intro programming is often taught the way it is is because we&#8217;re lazy: creating 12 examples is more work than creating 2 or 3, so if it&#8217;s not in the book, we&#8217;re not likely to make it up ourselves.<\/p>\n<p>There are, of course, many exceptional CS teachers who do make up their own examples and who create resources for their students, but this is not the norm. Even those who DO make up their own examples typically just make one or two to &#8216;supplement&#8217; the text. Here I will fess up and say I am one of those who made up a few of my own examples and then used those year after year.<\/p>\n<p>p.s. I also maintain that laziness is an essential quality in a computer scientist: why else would we work SO hard to find an easy way to do things?<\/p>\n<div class='wp_likes' id='wp_likes_post-256'><a class='like' href=\"javascript:wp_likes.like(256);\" title='Like' ><img decoding=\"async\" src=\"http:\/\/minkhollow.ca\/beckerblog\/wp-content\/plugins\/wp-likes\/images\/like.png\" alt='' border='0'\/><\/a><span class='text'>1 person likes this post.<\/span><\/p>\n<div class='like' ><a href=\"javascript:wp_likes.like(256);\">Like<\/a><\/div>\n<div class='unlike' ><a href=\"javascript:wp_likes.unlike(256);\">Unlike<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Approximate Reading Time: <\/span> <span class=\"rt-time\"> 3<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>I just read Mark Guzdial&#8217;s excellent post on some of what&#8217;s wrong with how we teach introductory programming courses. Question Everything: How We Teach Intro CS is\u00a0Wrong The notion that we should be modeling expert behaviour when teaching programming is &hellip; <a class=\"more-link\" href=\"https:\/\/minkhollow.ca\/beckerblog\/2009\/10\/03\/teaching-introductory-programming-were-doing-it-wrong-still\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/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,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9,14,24],"tags":[388,6,15,47,393],"class_list":["post-256","post","type-post","status-publish","format-standard","hentry","category-educational-technology","category-general","category-teaching-learning","tag-academia","tag-computer-science","tag-higher-education","tag-programming","tag-teaching-learning"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p4Hsb6-48","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":3262,"url":"https:\/\/minkhollow.ca\/beckerblog\/2013\/01\/09\/what-happens-when-professionals-take-on-line-cs-classes-when-life-and-learning-do-not-fit-computing-education-blog\/","url_meta":{"origin":256,"position":0},"title":"What happens when professionals take on-line CS classes: When Life and Learning Do Not Fit \u00ab Computing Education Blog","author":"Katrin Becker","date":"January 9, 2013","format":false,"excerpt":"Another great bit of info from Mark Guzdial's blog: Home About Computing Education BlogWhat happens when professionals take on-line CS classes: When Life and Learning Do Not FitJanuary 9, 2013 at 9:46 am Leave a comment The journal article on the research that Klara Benda, Amy Bruckman, and I did\u2026","rel":"","context":"In &quot;Computers&quot;","block_context":{"text":"Computers","link":"https:\/\/minkhollow.ca\/beckerblog\/category\/computers-2\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3654,"url":"https:\/\/minkhollow.ca\/beckerblog\/2013\/07\/24\/if-we-cant-teach-programming-create-software-engineering-for-poor-programmers-computing-education-blog\/","url_meta":{"origin":256,"position":1},"title":"If we can\u2019t teach programming, create software engineering for poor programmers | Computing Education Blog","author":"Katrin Becker","date":"July 24, 2013","format":false,"excerpt":"If we can\u2019t teach programming, create software engineering for poor programmers | Computing Education Blog. Oh wow. Talk about taking the words right out of my mouth! Who knew you could get a book published that said this? I totally agree with Nathan Ensmenger's take on software engineering. What do\u2026","rel":"","context":"In &quot;Educational Technology&quot;","block_context":{"text":"Educational Technology","link":"https:\/\/minkhollow.ca\/beckerblog\/category\/educational-technology\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2162,"url":"https:\/\/minkhollow.ca\/beckerblog\/2012\/05\/07\/struggle-continues-to-plug-embedded-programming-gap\/","url_meta":{"origin":256,"position":2},"title":"Struggle continues to plug embedded programming gap","author":"Katrin Becker","date":"May 7, 2012","format":false,"excerpt":"\u201cTo be blunt,\u201d Dewar wrote, \u201cadopting Java to replace previous languages used in introductory programming courses \u2013 such as Pascal, Ada, C or C++ -- was a step backward pedagogically. via Struggle continues to plug embedded programming gap. I started saying this over a decade ago. I even did embedded\u2026","rel":"","context":"In &quot;General&quot;","block_context":{"text":"General","link":"https:\/\/minkhollow.ca\/beckerblog\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":768,"url":"https:\/\/minkhollow.ca\/beckerblog\/2010\/07\/10\/hello-worlds-why-humanities-students-should-learn-to-program-matthew-g-kirschenbaum\/","url_meta":{"origin":256,"position":3},"title":"A Programming Language does NOT count as a second language","author":"Katrin Becker","date":"July 10, 2010","format":false,"excerpt":"Although I still think learning several is good for you. Hello Worlds (why humanities students should learn to program) \u00ab Matthew G. Kirschenbaum. (May 23, 2010) While I do agree with some of what he says, his misconceptions convince me that there is more to learning about Informatics (I don't\u2026","rel":"","context":"In &quot;Educational Technology&quot;","block_context":{"text":"Educational Technology","link":"https:\/\/minkhollow.ca\/beckerblog\/category\/educational-technology\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6240,"url":"https:\/\/minkhollow.ca\/beckerblog\/2016\/05\/27\/worth-sharing-donald-clark-plan-b-why-the-tablets-in-schools-debacle-is-over\/","url_meta":{"origin":256,"position":4},"title":"Worth Sharing: Donald Clark Plan B: Why the tablets in schools debacle is over","author":"Katrin Becker","date":"May 27, 2016","format":false,"excerpt":"When will they ever learn? Had I said that iPads in the the schools were not the answer four years ago at the height of the love-affair with the iPad, I'd have been thought a crank. Wait, I DID. More than once. (For more, just try the iPad or iStuff\u2026","rel":"","context":"In &quot;Academia&quot;","block_context":{"text":"Academia","link":"https:\/\/minkhollow.ca\/beckerblog\/category\/academia\/"},"img":{"alt_text":"iPad","src":"https:\/\/i0.wp.com\/minkhollow.ca\/beckerblog\/wp-content\/uploads\/2012\/03\/2012-02-16_22-14-28_img_20120216_221429b-300x244.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1482,"url":"https:\/\/minkhollow.ca\/beckerblog\/2010\/12\/07\/computational-science-needs-cs-education-but-does-it-need-cs\/","url_meta":{"origin":256,"position":5},"title":"Computational Science needs CS Education: But Does It Need CS?","author":"Katrin Becker","date":"December 7, 2010","format":false,"excerpt":"Computer Science is dead (or should be). I love reading Mark Guzdial's blog. He so often talks about things I think are important, AND (perhaps not surprisingly) things about which I have strong opinions. Here's another: Computational Science needs CS Education \u00ab Computing Education Blog. Computer science professors may not\u2026","rel":"","context":"In &quot;Educational Technology&quot;","block_context":{"text":"Educational Technology","link":"https:\/\/minkhollow.ca\/beckerblog\/category\/educational-technology\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/posts\/256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/comments?post=256"}],"version-history":[{"count":5,"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/posts\/256\/revisions"}],"predecessor-version":[{"id":679,"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/posts\/256\/revisions\/679"}],"wp:attachment":[{"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/media?parent=256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/categories?post=256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/minkhollow.ca\/beckerblog\/wp-json\/wp\/v2\/tags?post=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}