{"id":15107,"date":"2011-06-12T09:53:10","date_gmt":"2011-06-12T07:53:10","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=15107"},"modified":"2012-09-19T08:36:56","modified_gmt":"2012-09-19T06:36:56","slug":"on-teaching-programming-languages","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2011\/06\/12\/on-teaching-programming-languages\/","title":{"rendered":"On teaching programming languages"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>Via <a href=\"https:\/\/twitter.com\/#!\/dangoor\/status\/78808882671136768\">this tweet<\/a> I came across <a href=\"http:\/\/ask.slashdot.org\/comments.pl?sid=2198700&amp;cid=36293622\">this insightful comment<\/a> over at <a href=\"http:\/\/ask.slashdot.org\/story\/11\/05\/31\/0153235\/Ask-Slashdot-Best-Certifications-To-Get\">Slashdot<\/a>. \u00a0Quoting in its\u00a0entirety:<\/p>\n<blockquote><p>A bit off topic, but you triggered something I&#8217;ve been thinking about for a couple of years. That &#8220;spark&#8221; is fluency.<\/p>\n<p>I swtiched jobs from being a computer programmer to being an ESL teacher in Japan. Japan is somewhat famous for churning out students who know a lot *about* English, but can&#8217;t order a drink at Mac Donald&#8217;s. We used to have a name for those kinds of people with regard to programming languages: language laywers. They can answer any question you put to them *about* a programming language, but couldn&#8217;t program to save their life. These people often make it past job interviews easily, but then turn out to be huge disappointments when they actually get down to work. I&#8217;ve read a lot about this problem, but the more I look at it, the more I realise that these disabled programmers are just like my students. They have a vocabulary of 5000 words, know every grammar rule in the book but just can&#8217;t speak.<\/p>\n<p>My current theory is that programming is quite literally writing. The vast majority of programming is not conceptually difficult (contrary to what a lot of people would have you believe). We only make it difficult because we suck at writing. The vast majority of programmers aren&#8217;t fluent, and don&#8217;t even have a desire to be fluent. They don&#8217;t read other people&#8217;s code. They don&#8217;t recognise or use idioms. They don&#8217;t think *in the programming language*. Most code sucks because we have the fluency equivalent of 3 year olds trying to write a novel. And so our programs are needlessly complex.<\/p>\n<p>Those programmers with a &#8220;spark&#8221; are programmers who have an innate talent for the language. Or they are people who have read and read and read code. Or both. We teach programming wrong. We teach it the way Japanese teachers have been teaching English. We teach about programming and expect that students will spontaneously learn to write from this collection of facts.<\/p>\n<p>In language acquisition there is a hypothesis called the &#8220;Input Hypothesis&#8221;. It states that *all* language acquisition comes from &#8220;comprehensible input&#8221;. That is, if you hear or read language that you can understand based on what you already know and from context, you will acquire it. Explanation does not help you acquire language. I believe the same is true of programming. We should be immersing students in good code. We should be burying them in idiom after idiom after idiom, allowing them to acquire the ability to program without explanation.<\/p><\/blockquote>\n<p>I&#8217;ve been thinking about this for a long time as well. \u00a0And I do agree. \u00a0I also think that programming is a very practical matter. As the comment says, one could know everything about programming in general and some programming language in particular, and yet be totally useless when it comes to writing code.<\/p>\n<p>I think, when it comes to getting an online IT degree or a degree from a traditional school that most\u00a0colleges and universities lack on the practical side when teaching programming. \u00a0At most I&#8217;ve seen done were short group assignments. \u00a0I think programming projects should be much larger and longer than that. \u00a0 I don&#8217;t see anything wrong with having a couple of programming assignments spanning a couple of years. \u00a0Bachelor degree takes longer than that, and all that time could be used to teach students not only how to write code, but also how maintain it, how to document, how to work in groups, how to use all those tools that programmers in real world are using &#8211; IDEs, debuggers, compilers, version control, project build tools, continuous integration systems, and so on and so forth. \u00a0All of those won&#8217;t do any good (and possibly quite the opposite) on a tiny little short assignment.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>Via this tweet I came across this insightful comment over at Slashdot. \u00a0Quoting in its\u00a0entirety: A bit off topic, but you triggered something I&#8217;ve been thinking about for a couple of years. That &#8220;spark&#8221; is fluency. I swtiched jobs from being a computer programmer to being an ESL teacher in Japan. Japan is somewhat famous &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2011\/06\/12\/on-teaching-programming-languages\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">On teaching programming languages<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_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},"_links_to":"","_links_to_target":""},"categories":[1,18,62],"tags":[1114,1336,3300],"keyring_services":[],"class_list":["post-15107","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","tag-education","tag-inspiration","tag-paid-content"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":10322,"url":"https:\/\/mamchenkov.net\/wordpress\/2006\/08\/14\/can-your-programming-language-do-this\/","url_meta":{"origin":15107,"position":0},"title":"Can your programming language do this?","author":"Leonid Mamchenkov","date":"August 14, 2006","format":false,"excerpt":"Can Your Programming Language Do This? post by Joel Spolsky can give you some insight on why people use different programming languages, as well as provide you with some doubts on wheathere are you using the proper tool. ...programming languages with first-class functions let you find more opportunities for abstraction,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":7595,"url":"https:\/\/mamchenkov.net\/wordpress\/2004\/06\/22\/computer-languages-history\/","url_meta":{"origin":15107,"position":1},"title":"Computer Languages History","author":"Leonid Mamchenkov","date":"June 22, 2004","format":false,"excerpt":"\"Computer Languages History\" is in excellent website devoted to...well...history of computer programming languages. Currently, it lists about 50 programming languages with links to language websites. There is also an excellent timeline, which shows the relationships between different programming languages starting with Fortran in November 1954 and ending with PHP of\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":7883,"url":"https:\/\/mamchenkov.net\/wordpress\/2004\/09\/09\/the-language-guide\/","url_meta":{"origin":15107,"position":2},"title":"The Language Guide","author":"Leonid Mamchenkov","date":"September 9, 2004","format":false,"excerpt":"There are so many computer programming languages that newcomers and around-IT people get confused very often. Which language should I learn? What is better C or Perl? What is SQL? These are the questions posted forums and newsgroups where programmers hang out. The Language Guide website attempts to tell the\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9612,"url":"https:\/\/mamchenkov.net\/wordpress\/2005\/10\/26\/perl-vs-java-vs-any-other-programming-language\/","url_meta":{"origin":15107,"position":3},"title":"Perl vs. Java vs. any other programming language","author":"Leonid Mamchenkov","date":"October 26, 2005","format":false,"excerpt":"Ovid once again does an excellent job. This time he talks about choosing proper tools for the job, using computer programming languages as examples. Do not choose solutions if you don't know what the problem is.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":26680,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/09\/10\/quora-if-programming-languages-were-countries\/","url_meta":{"origin":15107,"position":4},"title":"Quora: if programming languages were countries &#8230;","author":"Leonid Mamchenkov","date":"September 10, 2016","format":false,"excerpt":"\"If programming languages were countries, which country would each language represent?\" over Quora is hilarious! \u00a0Here are a few bits to get you started: C \u2013 Russia. Everything has to be done in a backwards way, but everything is possible, and there's a lot of legacy. C++ \u2013 USA. Powerful,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":26107,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/05\/15\/programming-and-greek\/","url_meta":{"origin":15107,"position":5},"title":"Programming and Greek","author":"Leonid Mamchenkov","date":"May 15, 2016","format":false,"excerpt":"One thought that cracks me up every now and then is about Greek programmers. \u00a0In Greek language, instead of a question mark a semicolon is used. In many programming languages, a semicolon is used to represent the end of statement. \u00a0So, this: to Greek programmers must be looking like this:\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"Greek","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/05\/greek-500x176.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/15107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=15107"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/15107\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=15107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=15107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=15107"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=15107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}