Hands up who likes PHP?

(Clarification: I’m a UK high school teacher. “School” in this post means high school, not university and “IT Professionals” is the term used to distinguish those who are not teachers on the forum in question.)

On the miffed-off-ometer, I’d have to say that I’m getting quite close to a 9 with some of the CS Education community of late. The CAS Community is a forum for teachers and IT professionals with an interest in Computer Science education to get together and discuss whatever they wish. As we all know, the Computing curriculum is changing rapidly at the moment and there are a lot of questions being asked on the forum by puzzled teachers, wanting sensible classroom related answers.

rollerderbyHere’s an analogy. I’m learning to play Roller Derby at the moment – for the purposes of this analogy the only thing you need to know is that it’s a sport played on roller skates. My coaches do not come up to me and tell me how the skates I’m using are sub-optimal because the wheels are 96a and I really should have a mix of 93a and 88a for my build, the cushions will make my skates squirrelly, my plates are too rigid and I really should tape my toes and double lace because that’s what all the people playing in the big leagues do. Unless you already play Roller Derby, you probably won’t even understand any of what I just said. Sadly, that’s exactly the type of advice that teachers often get from industry pros – the advice is all true but super unhelpful to someone who is only just learning how to skate.

There are a lot of common misconceptions that IT professionals seem to have about CS education, so I thought I’d address some of them here:

Misconception #1

It is a school’s job to churn out students who will be able to walk into a job in industry on day one and work in whatever language/paradigm is flavour du jour.

WRONG! We’re here to teach children the core concepts of Computer Science. Working on that basis to produce someone with employable skills is your job. Do you expect Chemistry students to walk out of school ready to begin work in a lab? Should we stop using Scratch as a teaching language because nobody programs with it in industry? Of course not, so please stop recommending that we should be teaching using Scala/JSON/whatever is currently flavour of the month. It is simply not possible for teachers to be able to keep up to date with the latest flavours in industry. It’s sad that some people label teachers as ‘unprofessional’ for not being equivalent to someone in industry with their subject knowledge – but if you think about it, that’s like asking us to do two jobs at once. We hardly even have time to do one.

 

Misconception #2

Kids should start off learning the right way to code with an unforgiving programming language, so they don’t pick up bad habits that have to be undone later. (i.e. PHP is beyond reproach)

WRONG! When we teach kids French do we begin with teaching the subjunctive tense  – it’s really difficult but that’s how a French person would say it? Every time they confuse the passé compose with the imperfect do we get on their case nitpicking at their grammar? Of course not. We start with the present tense and useful sentences that mean something to them. OK so if you went to France you may not be able to pass as fluent but maybe saying something basic is better than saying nothing at all and getting disheartened and giving up.

I really have no time for developers who go on about how we should be teaching lambdas or mutability or tail recursion to 12 year olds or that kind of high horse gubbins. A lot of developers seem to have absolutely NO CLUE at what level students work at each age – please, educate yourself, visit a school and instead of looking for faults, just look and listen. Just because YOU had to learn a programming a certain way in the good old days, doesn’t make it the right way or the only way. People used to have to use tin baths, read by candlelight and clean their clothes with a mangle.

It makes me happy when a student writes a program on their own that works and that they are proud of. So they could have used a switch instead of lots of ifs. So they could have put that part inside a function. So their program doesn’t handle exceptions gracefully. SO WHAT. Computing A-Level students are already as rare as hens’ teeth. If we start forcing younger kids to use unfriendly mean programming languages that require 16 lines of set up to get Hello World just because some developer likes that language’s implementation of scoping, there will literally be nobody left to teach.

Oh and by the way, getting a language set up for students to use on a computer is no mean feat either. Some schools have technicians whose favourite phrase seems to be “Computer says no”, some IDEs are not free, the fun is endless.

 

Misconception #3

A teacher who doesn’t have up to date flawless subject knowledge isn’t fit to stand in the classroom.

WRONG! I find it incredibly rude that so many industry people seem to secretly think that they would be the saviours of CS education, if only they weren’t already occupied as a developer. Wow. Two things I have to break to you:

  • I know less than you about Computer Science
  • I know more than you about teaching Computer Science

Yeah, I said it – I know LESS THAN YOU about Computer Science. I haven’t got a clue about the latest GPUs, lambda calculus is a distant memory and when I explain networking protocols there’s more fudge than a Devon tourist shop. I’m not saying I teach things that are plain wrong or that I don’t take care with my lessons, I’m saying that I know the basics but you probably know the whole picture. This is not a competition about who knows the most about Computer Science.

Quite frankly, you could be Alan Turing himself but that wouldn’t mean you know the best way to teach a child. I’ve gone through a postgraduate qualification and nine years of experience to get to where I am, so don’t presume to know more than me about how to teach children – and if you do, expect that I will be justifiably miffed. Some teachers may ask for help with subject knowledge, but they don’t need a show off who has the arrogance to assume they could do that person’s job better than them. Going back to my Roller Derby analogy, don’t be the guy who skates around really fast doing all kinds of tricks when all the beginner wanted was to know was how to stop.

I know I probably sound a bit peeved in this post (because I am) but I hope it’s also useful to any developers who read this and who are genuinely interested in CS education. We do value and respect your help, but please respect our professionalism – you’re not just someone who could be doing our job but chose to do something else.

62 thoughts on “Hands up who likes PHP?

  1. As a developer with a great deal of respect for teachers (a respect I imagine I’d have for you if I knew you) I do feel compelled to take issue with some of this.

    Point 1: I think I’m not clear on your target audience here… but as far as I know, the point of education is to teach useful skills. While I dislike the fact that most schools and universities in the US have switched from C/C++ to Java for CS education, I can’t fault them for the fact that Java is indeed very useful in industry. Teaching concepts is important, but if you’re teaching concepts that are meaningful to your students’ future, they will be applicable to the most widely-used languages… using a language that is not used anywhere in industry to teach concepts that could be taught (perhaps with a few more lines of code… which… so what? It’s bad to teach kids that most languages actually require some boilerplate to do anything useful?) actually gives your students exposure to, if not industry experience in, languages that matter and that they’re likely to use if they go into the field. If that’s not something you’re concerned about, I’m not sure what it is this curriculum is based on.

    Point 2: You immediately contradict your first “misconception” by stating that doing something useful and applicable is your first goal. When I learned French, it was exactly as you said: Simple and useful sentences came first. Well, guess what? No one anywhere uses Scratch for anything. You’re teaching something that might provide the basics, but in a language that is practically worthless to your students. If learning to set up a useful language (because learning to set it up is a fixed cost, and once you do that, the actual overhead of installing it is negligible) is more effort than you’re willing to commit, please don’t pass it off as impractical.

    Point 3: Your point is well taken. Your two sub-points are not, and frankly, they don’t fit. Yes, we do know more than you about computer science. However, no, your further education in teaching does not somehow make your judgments infallible. Nor is it logical to assume that anyone offering you advice is doing so or would do so only through arrogance and would necessarily not be justified.

    It sounds like you’ve been talking to… well… jerks. The fact that you’ve spoken with jerks who are computer scientists does not mean all computer scientists are jerks, and logical errors of this type seem to underpin and permeate this piece. Rather than railing against people who disagree with you or your methods, it might be instructive to consider that — just like you — “IT professionals” are hard-working people with hard-earned skills who don’t necessarily misunderstand you or your work just because you’ve had some bad experiences with people most of us likely wouldn’t tolerate either.

    1. Im with you on this one. The post is focused on the bad experiences that she had with some jerks.

      I think that the perfect world would be where the teachers join the tech community in order to provide more tools to the kid to learn everyrhing the want abput technology. Not the trending language or the father of the languages.

    2. It’s not just about the problem with boilerplate (but that IS a real problem) it’s about using the right tool to get the kids to think in the right way.

      I use a variety of languages, but start kids with scheme and NetLogo first – these aren’t going to be used in industry but they train the kids to think in a certain way.

      By the end of our program many of my seniors get internships with NY based tech companies – I had a conversation with one of our young ladies at the end of her internship – it’s a conversation I’ve had over and over:

      Me: So what did you do

      Her: (explains project) (explains that she had to use all sorts of tools/languages/techniques on top of what we studied)

      Me: So how did you handle it

      Her: It wasn’t a big deal because I got the fundamentals at Stuy – it was easy to figure everything else out.

      Now, of course, we do use real tools over our program — languages like Python/Javascript/Java/C and tools like Git and GitHub but we start them out with anything but mainstream languages.

    3. Hi trepidation, thanks for your reply. A few replies from me here:

      Point one: Nowhere am I saying “don’t use languages that are used in industry” – of course I am very much pro using languages which are actually useful. Even if we restrict our discussion to high school students though (age 11-18), some of them are going to massively struggle with boilerplate and give up. If students struggle with

      print(“Hello world”)

      …they are definitely going to struggle with

      public static void main(String[] args){
      System.out.println(“Hello world”);
      }

      Most students who study Computing at school will not go on to work in a related field – hell, *all* students aged 11-13 have to study Computing. What I want them to understand is the concepts and not get stuck on whether there’s a bracket here or a semicolon there. It’s like learning to drive in your instructor’s car and then actually owning your own car. A good driver is still a good driver in a different car (if a little wobbly to start!)

      Point two: Nobody said anything about the overheads from learning how to install a language being too great to bother (lazy naughty teachers!). That isn’t the issue. In the vast majority of schools in the UK, teachers of Computing have NO administrator rights on the school network. Lots of network administrators refuse to install languages on a very tenuous basis, for example many do not wish to allow students access to a language which creates executable files because of ‘security threats’, and no matter how much of a fuss is kicked up, due to senior managers being totally non technical, the threat of security issues usually wins. Sometimes in the state sector, network provision is managed centrally by a provider for that particular county, so there is even less possibility. (I’d like to point out here that my school’s techies are awesome!)

      Point three: I never said my judgements were infallible. I said that people who know a lot about Computer Science should not presume that their superior subject knowledge makes them a better teacher. I also didn’t say that people offering advice were always arrogant – if you read the last sentence of the post you’ll see that I say that we value and respect the help of those in industry.

      Finally, I haven’t been talking to jerks. I’ve been talking to lovely, kind people who have taken the time to even bother to be a member of a forum about CS education. I’m confident that none of the people who provided the impetus for this post intended to be arrogant, jerk-like or anything other than helpful. However sometimes however well intentioned, people can get blind spots (someone mentioned secondary teachers doing a similar thing to primary colleagues – touché!) so this is my way of attempting to point some of these out.

  2. Footnote (sorry, I can’t edit my previous comment): I loathe PHP. But PHP is not the only language in wide and continued use, nor should it be treated/cited as such. As an example, it suffers from so many awful, awful failures that it does in fact make a good illustration of point 1 under misconception 3: Any IT professional worth his salt would immediately quash any consideration of PHP as a teaching tool (or, if it’s within his power to influence, a development tool).

  3. @trepidation you just prove her point. Teaching, especially at the high school or younger level, is not about teaching specific languages, but teaching things like boolean logic, loops, and putting instructions in the right order. You then need to help students transfer those basics from one language to another. Because you know what? The language I learned in school isn’t used anymore, and that’s likely to be true for our 12 year old students.

    What you have is called the expert blind spot. Look it up. It’s what many programmers have when it comes to teaching CS. Most teachers of CS understand it and work to overcome it.

    I believe that IT professionals are great people. I used to be one. I worked with a lot of them. But many of them (not you) on the Internet are jerks to teachers. And some are jerks to teachers face to face. We’re called stupid and not knowledgeable and more. Teaching is a profession. And teachers are professionals. And teaching coding != coding. I’ve seen many a professional coder fall completely flat when trying to teach anyone anything. That said, I appreciate learning from those in the industry and do try to make what I teach as relevant as possible. But teaching what’s current this second is not my priority. My priority is teaching students to learn what’s current. Because things will change, and change rapidly. If they can’t learn, then all hope is lost.

  4. Not sure why you are teaching something that you don’t really seem curious about? No offense intended. There are a lot of resources about computing online.

    1. She wrote that she didn’t know anything about the cutting edge of computer technology, which is perfectly fine. Do you expect physics teachers to keep up to date with the latest improvements in quantum physics? Do you expect an English literature teacher to keep up to date with the very latest literary criticism techniques? And so on.

  5. As an IT professional (and more specifically, a software developer) I’m quite happy with the state of CS education in this country. I think you folks are doing a great job of teaching computer science. I’m not being sarcastic. I really do.

    I just wish there were more schools teaching the trade of software development. I don’t do computer science at work. I build software. Learning to really do it well by trial and error can take decades and having a computer science degree only helps marginally.

  6. Thanks for clarifying you are teaching high school.

    I agree with most of your points, but I have issue with myth #2. While I agree that introducing industrial strength tools at this age is beyond any reasonable expectation of the course, your attitude is so cavalier about teaching bad habits. As a professional IT person (and sorry about the honesty), this reads like a coach that does not like teaching warm-ups and stretching. You are risking the potential of your varsity athletes for the sake of all the other guys that just want a passing grade in gym class so they can go back to being couch potatoes for the rest of their lives.

    Bad habits are a real handicap, and are extremely hard to remove. Every tech community develops a subculture, a personality, and are not all created equal. And yes, PHP is really awful (even its creator says so, it was supposed to be a throw away project). It takes years of experience to write competent PHP, and usually the best programmers are transplants from other subcultures anyways.

    1. in my experience, it is not that as a teacher i do not care about bad habits (i do and i try to correct any i see) it is more that at this level there is actually very little opportunity for really bad habits to form. Programs are short, simple and more about understanding basic program flow than any deeper computational complexities.

      To use your analogue of a sports coach – it is more like a coach who teaches some general warm-up/stretches that will meet the basic needs, all the while knowing that if there is a varsity athlete in the group it is possible to teach them some additional stretches outside of the main session.

      1. Yes, agreed. Whatever lets you do basic program flow will accomplish the task. The problem I have with PHP is the culture. This has nothing to do with what you do as a teacher in the classroom, but what the student will in the Internet find after going home and getting stuck with the homework.

        PHP is Capital-L Lazy. And vague. You go to the forums and the typical question is some poor soul that babbles a semi-coherent description of whatever problem they have. Then, you see a bunch of proactive “helpers” that apparently (sort of) parsed the description and copied&pasted some snippet that (sort of) does whatever they think the OP has asked. “Here, you do this.” without further explanation of what “this” does or why is it a solution to the (perceived) problem at hand.

        My generation used to have the same complains about BASIC. Still, many young people learned to program with that because it was what came available with your microcomputer (in ROM, you did not have to install it or anything). I have worked professionally both with Visual Basic and PHP, and I find the hand-wavery of the later’s communities much more appalling than the former’s. Maybe I am just getting old…

    2. Hi CRP, thanks for your comment. I feel that in actual fact my attitude towards bad habits is anything but cavalier – indeed it causes me much anxiety. Please have a look at an old post of mine from 2012 where I talk about my internal conflict about whether to teach things “the crappy way” or the difficult way. https://codeboom.wordpress.com/2012/01/04/coding-the-crappy-way/

      I (and I’m sure many other teachers) make a point to insist on things such as properly named variables, sticking to a naming convention, proper indentation, comments, using functions to reuse code etc etc. If (depending on level) a student has written code that I really would have expected to be better, I will absolutely call them out on it.

      However, if you picture this situation – you’re in a room with 25 eleven year olds writing some simple code. Half of the kids have their hand up, someone’s computer won’t turn on, two people can’t find where they saved their work from last lesson, the IDE has mysteriously uninstalled itself from 3 of the machines and one child is in tears because of something that happened at break. Please forgive me if I then do not chastise a child for writing

      if functionThatReturnsABoolean() == True:

      1. I think we are talking past each other, so we will have to leave it as is. I will say that it is good that you care about proper naming, indentation, comments, and the like. I have also done my fair share of teaching in suboptimal/under-resourced labs (though at undergraduate university level), so I sympathize with your day-to-day problems.

        I also do not have the heart to chastise kids who could not program their way out of a paper bag if their lives depended on it. I just don’t hire them!

  7. As a developer I feel I have to wade in here and comment a bit on the previous comment and add a few extras as well.

    Let’s start with Scratch. Trepidation is right that it is used nowhere in industry but it is an excellent language for primary schools (say 7 to 11). Please remember that we are not trying to get 11 year olds to program real-time systems with beautiful object-orientated abstraction in C++ for embedded real-time systems.

    This is what’s behind point #1. I’m not expecting ready-to-go sotware engineers at 16. Or 18. At 21, after university, we can start down that road but, and this is the really important bit, the point is to get them thinking about the basics and even more importantly discover that it’s both fun and a potential career.

    So, Scratch is fine. At secondary school (11-16) I’d expect them to move onto something like Python. Simple, powerful and used in industry. Also it’s not an “unforgiving” language (I love that phrase). It forms an excellent bridge between being easy to work with, forgiving and used in the real world.

    Point #2 is the only one I have any sort of issue with. However, if one reads it carefully that issue vanishes. The issue is the “bad habits” one. A friend of mine just quoted a presentation where it was said “Good developers have a “duty of care” to push back against bad practices.” This is very true. There are some horrible “bad habits” out there that cost us dear. Most recently and high profile was the Heartbleed bug. It was best summed up for me when someone said “It’s 2014: how can this happen?”. I spent all of last Easter working to make sure our products weren’t affected by this and that those that were had fixes provided.

    Ultimately the cause was “bad habits in unforgiving proigramming languages”. It all cost a lot of time and money and there may well have been nasty happenings out of sight with security leaks.

    But I don’t expect 12 year olds to be writing complex cryptographic software in C! This is the exact area I work in and it’s a minefield of complexity and evil. No school pupil should be exposed to this horror!

    This brings us back to Scratch and Python: it’s much harder to make really horrible errors. This is what I’ve got against teaching using C/C++ and (please no!) perl or BASIC because it’s very easy to get into appalling habits. As Dijkstra (a top-level computer scientist) once said: It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.

    The way to deal with this is actually in the original point: unforgiving programming languages. The answer is simple: don’t use them! Scratch and Python both lead on object-orientated and concurrent programming in a very natural way. They also avoid the syntacic and lexical nasties that plague the C family.

    I’ve just had a thought. I think it might be interesting to walk some older students (say 14+) through exactly what causes Heartbleed, Apple’s goto fail and/or the GnuTLS bugs. I think it would be “instructive” for them to see just how easy it is to make such horrible errors in unforgiving languages!

    Point #3 spot on. Anyone who turns up and says “Why aren’t you using Clojure/swift/whatever else?” is an ass. Scratch for primary and Python later on seems fine. Avoid the dangerous languages which invite bad programming habits.

    And what happens if someone tuns up and says “Hey Miss, I’ve just written an iPhone app in Objective-C. What do you think?”? Great! If they can explain it to you then a) the teacher has learned something and b) the student has demonstrated not only programming ability but also (and more importantly) the ability to communicate their ideas. Everyone wins!

  8. Parallel experience. I am a CS teacher in primary (part time) and run a manufacturing business too. I’ve been teaching coding within the ‘ICT’ curriculum for 4 years.
    At a conference with fellow manufacturers, exporters and engineers, some ‘good old days’ engineers were lamenting that kids don’t want to come into engineering and that teachers don’t do enough to promote engineering.
    What it came down to, as I explained to the bar-bore who didn’t expect to have a teaching manufacturer in the room, is:
    Don’t ask other people to do your job.
    If people are not going into engineering that is no-one’s fault but your (our) own.
    Teachers have a different role to the one you think they have. As an employer, I can train someone in the software I need them to use pretty quickly: it takes years to train for creativity. That is what teaching is about. I teach children to enjoy coding, to use it and to consider it as a career. I do not need, as an employer, another flippin’ ‘operative’. I want kids using computers creatively.
    If industry wants C++ lieterate coders, but isn’t getting them it is no one’s fault but that industry. Raise your profile, visit FE colleges, make it clear that is worth learning these languages. I am an employer, I do, because I know what my business needs.

    Let me put it another way, I wish to complain that developers do not use the code we use in schools.

    Was that of any use to anyone?

    Schools use, for example, Scratch, . Developers use, say C++. Different arenas, different goals, different customers, different code. As linguists point out, once you have one language, picking up others is easier. So, if you want people arriving with knowledge of specific programming language, what are YOU going to do about it?

  9. Having been directed to your blog from the one of the discussion is the forum you are moaning about, i must say that i feel exactly the same, and there are plenty of others out there who feel the same way too.

    I generally steer clear of the forums on CAS for precisely the reasons you’ve outlined. I am a secondary teacher, with a CS degree but much of what is said is simply irrelevant and either passess over my head, or i tune it out as white noise (in some cases the responses are so patronising as to be borderline offensive).

    I understand that an industry presence is required, but they have to realise the level that we are working at. There are very few subjects (if any) where the content taught in schools would allow them to walk directly into industry and allow them to perform fully without additional education/training – why is CS any different. It is about the provision of basic building blocks, a stimulation of an interest and perhaps more importantly than all else, the nurturing of an inquiring mind.

    It may not be possible to ‘build’ a future programmer in school, but it is certainly possible to dissaude/destroy any potential by swamping them with overly frustrating rules and restaints, and weighing them down with topics that may only just about be reached at university level.

    i don’t think it is a co-incidence that there are currently several forum topics looking at the structure and interactions on CAS, from the idea of self-moderation, to general discussions on it losing its focus. It may be an inevitable consequence of how much time is available, but it seems that teachers cannot comment as much as the industry professionals, and therefore get sidelined and silenced, exacerbating the problem.

    i love that those in industry want to contribute and help, but they need to do so with an extra helping of understanding and consideration

  10. (I am a school Network Manager.)

    I agree with this post, particularly the point about how this level of education now is not intended to generate “work skills”.

    lf you ask me, education at primary phase is intended to provide some basic skills for future learning. At secondary phase our education is intended to generate interest in subjects for future study at a professional level. At tertiary phase, yes, we might expect to be learning skills applicable to the workplace (though that wasn’t always the point of it). Having said that, some children are high achievers even at secondary phase and it’s good to support them where we can, though we do need to remember that the school is not the last bastion for these kids – it’s the first. Their opportunities for learning, both within and outside formal education, don’t end with their GCSEs. What’s more important at school is to inspire the children, not to churn out boil-in-the-bag professionals, so when the author talks about “core concepts” she is absolutely correct.

    On that note, I was pointed to http://www.codecombat.com today and, having had a look at it, I’ve now sent over to our ICT/CS staff. It’s a game that’s designed to teach coding in JavaScript and it does it well partly because it’s fun, but also because it doesn’t let you get away with a missed semi-colon. It’s a fantastic resource for getting across that “core concept” – common among all languages – that, as others have said, it’s either right or it’s wrong. But it manages to do it without insisting on C++.

    1. Problem is though this post isn’t an argument on whats being educated to the kids from coding to general IT. Its a moan that the teacher should be doing what they see fit and not what coders suggest. THATS WRONG if its whats BEST for the kids.

      1. it is not that teachers want to do as they see fit, it was a genuine complaint that industry professionals who are trying to help do not understand the level or scope of the audience and therefore end up being unhelpful.

      2. Coders know what’s best for today’s fellow peers/professionals, but the job of turning out tomorrow’s and how to develop them at particular stages (such as secondary phase education) is actually the domain of teachers. Coders cannot necessarily judge on their own what is best for individual children (remember that teachers must assess each child’s progress and needs individually; this is called “differentiation”) at particular stages of their education.

        What they CAN do is provide a general overview of where the industry seems to be going, as well as assisting with some of the more complex technical elements of a theme that a teacher may wish to introduce or explore with a class. Teachers absolutely, definitely should listen to today’s experts in coming to their judgments on this, but they can bring their own expertise in terms of pedagogy to the table too when we are talking about tomorrow’s experts; it is this element that the author feels is being somewhat downplayed at the moment.

  11. This reminds me of the debate about Logo versus Basic in schools in 1970s. The Logo group led by Seymour Papert at MIT saw Basic as sub-standard. Logo was designed to be a tool to think with (and about). Basic in those days lacked subroutines, relied upon GOTO statements, and had many other restrictions. It wasn’t just that Basic encourages bad programming habits but it was a much poorer environment for learning computational thinking and powerful ideas.

    Regarding the role of computer science, I recall Seymour Papert describing Logo as the result of child-engineering the best ideas in computer science (in 1977). In those days the best computer science ideas were embedded in Lisp. The idea that a dialect of Lisp would be appropriate for children was a very radical idea in its day. It is kind of sad that some of Logo’s descendants such as Scratch are poorer from that point of view (but of course much richer from the point of view of easy of learning, avoidance of syntax errors, and rich media integration).

    1. I have to weigh in again here. I’m essentially in total agreement. Logo is immeasurably better than BASIC. In more modern terms Python is better than Perl (I view even modern BASICs as unacceptable for both teaching and industry and loath Perl for its unmaintainability).

      I should also point out that I have great respect for Seymour Papert’s work. It was (and is) strongly influential on how I learn and work. Can I plug his 1971 paper “twenty things to do with a computer”, it’s just amazing!

      Scratch, as I mentioned before, is great for primary school kids. It frees them from the tedious drudgery of syntax (almost) and lets them explore. This is essential at that stage. Later on they can get what they used to from get from Logo from Python. In fact, one of the schools I’m working with has some kids who’ve just joined the senior school and want to learn Python because it’s a “grown-ups language”. Sums it all up perfectly.

      I have to admit that I used BASIC at school (I was 14 at the time and knew no better). At 15 I learned assembly language and played with that for about a year (writing my O-level computer science project in it). Finally I discovered Lisp and spent the next two years happily working with it on my Acorn Atom. I thought you might find this amusing.

      Perhaps the most important part of spending the majority of my pre-university days programming in Lisp was that it taught me a lot about code design and structure. I still have a fondness for it and am currently playing with Clojure.

  12. As an intern mentor, and a holder of a a CS degree (and Masters) myself, there’s definitely a communication problem. Software Engineers are in general very poor communicators outside of objective technical discussions. With that in mind, let me try and lay out some of the problems I experience with interns and grads that I think are the source of gripes from my (that is, the industry’s) side of the wall.

    I realise you’re addressing pre-college education, but a lot of the industry issues with CS education are directed at college level CS programs, and I imagine you’re catching some of the flak, so below are some of my opinions in the hope I can communicate the problems I’ve seen first hand.

    Addressing misconception #1, we don’t expect them to know specific languages necessarily, even though some people are very vocal about what language(s) should be taught. I do however agree with other people in industry that the languages taught should be relevant. Scratch might be great for a middle/high school intro to programming, but in a CS degree level course, a language that familiarizes students with syntax and semantics they are going encounter in a real job is important. That factor segues smartly into my next issue with college CS courses. Outside of a small number of colleges (and not necessarily the “top” ones), students are not being taught how to actually apply core concepts to real problems. I would rapidly run out of fingers if I had to count the number of interviews I’ve done where candidates knew about, but could code, closures or recursive functions, both concepts that pretty much all the engineers work with on at least a weekly if not daily or even hourly basis.

    In misconception #2, I generally agree that we shouldn’t choose unforgiving programming languages, but again, at college level, it is necessary to start making students think beyond pure functionality and start considering clarity, maintenance, portability. Even with a forgiving language, students should be taught how to use the language constructs in the most effective way, which includes pointing out when they should have used a switch, or when they do something like “if func_that_returns_bool() == True:” instead of just “if func_that_returns_bool():” (when I was in college we would automatically lose 10% of the total possible marks on a piece of coding if we did that).

    Finally, on to #3, I absolutely don’t expect your information to be flawless. Everyone has specialties in industry and nobody knows everything. However, I do expect you to keep somewhat up to date. For the most part, writing code in any language only gets easier over time as new libraries are written and published by the community. I wouldn’t expect anyone to know the specific right library to use for every case, but as new libs are published, having at least some idea of what is out there is very important. Again I’m amazed in interviews how many candidates don’t know of Python’s collections or itertools libraries, both of which are in the core distribution and provide some very useful generic utility data structures and and looping constructs. So when a student comes to you and asks what Swift is because they were reading an article about WWDC, I would expect you to at least be able to tell them “It’s Apple’s new app programming language.” I certainly don’t expect you to be able to teach them the syntax.

    An additional gripe, I’m tired of the lack of pragmatism. So many students are also fan boys (or girls) for some language, framework or OS. They think something like Node.js is the last platform we’ll ever need and try to build everything in it. As an exercise in programming I think it’s great to make languages do things they really shouldn’t, but don’t write a graphics driver in JavaScript and expect me to actually use it, though I’d certainly think it’s cool and want to know how you did it, and definitely don’t write the server side of a web app in C and expect me to maintain it. Just because you love your hammer, doesn’t mean everything is a nail. My college CS course exposed me to a wide range of languages and platforms, applied in appropriate areas, giving me a pretty good appreciation of what the right tool does at the right time. I wish more colleges taught that pragmatism.

    1. Ugh, damn typos… comes from being interrupted so many times when writing.

      “I would rapidly run out of fingers if I had to count the number of interviews I’ve done where candidates knew about, but couldn’t code, closures or recursive functions, both concepts that pretty much all the engineers I work with use on at least a weekly if not daily or even hourly basis.”

    1. Yes! I haven’t fully read it yet but a quick skim through indicates that it looks spot on to me. I’ll read it properly later but it would appear to be a report on taking Papert’s ideas and just rrunning with them.

      Chaos in Computing? Well, chaotic learning is a Good Thing! Managing chaos practically defines the computing industry!

  13. You are coming across as far too ranting. As for your “It is a school’s job to churn out students who will be able to walk into a job in industry on day one and work in whatever language/paradigm is flavour du jour.” If that’s WRONG then why is the Schools, Head Teachers, SLTs and even Teachers say that EXACT LINE. YOU are WRONG, YOU are a Teacher with probably little experience in management, budgeting and general common sense which a lot of teachers lack because you came fresh from University to Teaching. What did YOU learn? Teaching, You didn’t learn CODING, you didn’t learn how to better manage your self, your career or a team.
    “Coders should visit Schools” SOME work in Schools and will say the EXACT same thing. Coders/ Like most IT professionals say “HOW IT IS” regardless of how you like it. Most IT Professionals are not treated like Car Mechanics even though they should be. YOU should book your time in for help instead of ranting for “NOW HELP” YOU should be paying completely for their time instead of “NOW HELP”. They work all day every day to fix YOUR problems, to assist YOU yet they are doing the bad job. I think you need to realise CODERS know better than YOU in coding if you like it or not. You may be proud if a Student builds a program in 1 hour that says “HELLO WORLD” but is an employer going to like that? NO. You don’t prepare some one to driver a car by spending an hour learning what a gear stick is, you get them in the car and learning how to drive. Driving is industry standard and there is only one to pass – the right way. Coding is the exact the same thing even if you DONT understand it. If you don’t understand what a steering wheel is that’s YOUR tough luck. It’s down to you to spend a year researching and learning what coding really is because those coders you are complaining about will be treated like dirt when YOU want help. YOU will be calling them to fix YOUR mistakes. Teachers need to realise that YOU ARE educating our Youth to be ready for the world. What I find even more funnier is you go out of your way when you want to for “INDUSTRY STANDARD” e.g. Macs in Music yet YOU DONT go out of your way if its some one else’s idea. In 2 years time when coding is standard in Schools you will be begging for help on coding and YOU will not take any blame for failing students who don’t get jobs, don’t get university places, don’t do well in life.

    If its not your job to prepare youth these days for the world you should be sacked and I wouldn’t want my kids in your School if your SLT stand by that exact comment. I would like to know IF they support you in your statement.

    1. Hi MK, thanks for your…comment. I have a degree in Computer Science and prior to becoming a teacher I worked in industry for a short time.

  14. MK – it doesn’t make an awful lot of sense to start by complaining about somebody else ranting and then going off on a lengthy diatribe. I am not sure who it is aimed at and is is certainly not helpful (or easy to read TBH).

    The original post was a comment upon how industry professionals are not always as helpful as they might be when trying to help time-poor teaching staff. It was in reference to a particular frustration and your comment (as Jim has noted) serves to enforce that original point.

    The assumption that teachers are lazy or don’t have the best interests of the students at heart is reductive and plain ridiculous. The hours, effort, stress and sheer willpower required to teach any subject these days means that teachers simply wouldn’t do it if they were lazy, or in the job for the wrong reasons.

    You did however hit the nail on the head when you said that teachers learnt to teach, and in numerous student surveys results have shown that students (certainly at secondary level) prefer teachers who are good teachers, rather that those who simply possess excellent subject knowledge.

    What we teach at secondary level is dictated by exam boards, and fits into a holistic education of a well-rounded and skilled child. By no means are there expectations that a secondary age child could walk out of school and into industry – in any subject. For you to suggest that a child could do that either means you have completely the wrong idea about education or have misunderstood the level which is being discussed here (and was mentioned just under the title)

    Your analogy of driving the car is perhaps valid but your comparison points are not. No one is saying that teachers do not know what a steering wheel is but, given the level we are working at and the time constraints, it is simply not practical or feasible to teach an in-depth explanation of rack and pinion steering rigs.

  15. I have been teaching CS and programming for 30 years. I agree completely with everything said here. Scratch is a great language to start with and high schools are not job training sites for the CS industry any more than they are for something like chemical engineering. We need to teach kids how to learn to program and some basics, not a specific language. I have held one job in the programming industry in 2000. The business wrote software for police and 911 dispatching. They used Visual Basic. Does this mean I should teach only VB in my classes? When my kids are done with my classes they understand what programming is all about, they are not programmers. There are simply too many languages out there to teach only one or to focus on only one. Programming teachers K-12 have to teach the basics and focus on teaching how to learn a new language.

  16. I teach bioinformatics primarily to graduate students and last-year undergraduates. Python is the language of choice for much bioinformatics work, though students may also be called on to program in C, R, JavaScript, specialized languages for GPUs, or even (G-d forbid) Perl. Java, the most common teaching language in US universities, is almost unused in bioinformatics—if you need speed and memory efficiency, you use C, and if you don’t, you use Python, unless you are doing a web page, where you are forced into JavaScript. (I’ve never heard of a bioinformatics application using PHP—that seems to be used only in legacy web-server applications, and most bioinformatics servers are new enough to use Python for those applications.)

    It turns out though, that it hardly matters what language a student has learned before taking my class—what matters is whether they know how to decompose a problem into subproblems and how to represent information in reasonable ways. They can pick up language-specific tricks fairly quickly (like Python’s yield statement, which greatly simplifies separating input from processing), but I don’t have the time to teach them how to think about basic computational ideas. The worst students are ones whose programming courses have all been heavily scaffolded, so that they only coded small routines to plug into instructor-provided frameworks, rather than learning how to subdivide problems.

    In short, I want to see students who are taught to think like programmers or engineers, who are methodical in checking for bugs and edge cases, and who document their work clearly. All these can be taught in almost any programming language. Scratch is an excellent place to start, and Python is an excellent way to continue to the next level. Java and C++ are good languages to learn before going into industry, but they are poor places to start from—there is too much “ritual magic” boilerplate for beginners. It takes almost a year of instruction before the ritual magic becomes comprehensible.

    Teaching high school students is tough—they often don’t have the enthusiasm of younger students nor the diligence of older ones. Finding ways to motivate them to learn is a challenge—building games, writing simple phone apps, programming robots, creating music, manipulating images, … are all ways to catch their interest. Often the application chosen to motivate the students dictates a narrow range of programming languages for the particular platforms available—teaching that language is OK if it supports the basics of programming instruction, even if it the language is unused in industry.

  17. See out of all of that, the only thing I saw, was Roller Derby! (Don’t get me wrong, I love computers and such too) Welcome to the most intense, demanding, craziness that is our world. Don’t worry about your skates so much. Your new. It takes time. If I could offer you two bits of advice. One, when it comes to safety spare no expense in your pads. There is a HUGE difference between 20 dollar knee pads, and 75 dollar knee pads. Its a difference you will feel and possibly regret. Two, try not to get aggravated when 20 people tell you how to do one thing, 20 different ways. Everyone skates their own style. Work with them and learn, then make it your own when they aren’t around. Don’t be surprised if not very many of the vets don’t talk to you much. They are used to “fresh meat” (you) coming and going. It takes a little time for them to warm up to you. Always remember falling is learning, not failing.

  18. Wow, so many comments I don’t have the time to read; apologies for any repetition.

    I am that rarest of beasts, both a currently practicing industry professional in video game programming, and a part time university lecturer in programming. And I think this article is spot on.

    In fact I believe the main reason we have reached this crisis point (changing the curriculum and so on) is because we put far too much faith in industry blow-hards whining about lack of skills during the last tech boom. I’m a firm believer in preparing kids for the unknown future. The industry has no more clue about this than anyone else.

  19. The point is not to teach useful skills, but to prepare them to learn useful skills later and to get them fired up and not turn them off if they are already fired up about going on to learn those useful skills. The skill is really not so much the particular language you use, it is a way of thinking about things that can be then expressed in almost any programming language.

  20. I am a computer scientist and after reading this post, I really wishes I could have got teachers like you to study me. I was so enthusiastic and passionate about computer sciences but today I don’t know how to use my skills. Following your website in the hope to learn something new. Thanks.

  21. Excellent post, I can’t find anything to really disagree with. Having worked in industry for 5 years and now teaching at University, I have always been flabbergasted at misconception 1. Please, give the middle and high-schoolers a good grounding in developmentally-appropriate *concepts*, don’t worry about the language (except, choose a language so that the concepts are obvious and clear and the kids are doing something interesting for them!!). Never did any of the 4 industry jobs I worked at (and even hired at) hire a 12-year old, or even a high schooler. If “IT Professionals” want to complain, then complain to us at the University level, not to the K-12 teachers!! (and, our job is to teach them **how to learn** new languages and libraries quickly, we can’t teach them all: I never once used the same language in any of my industrial jobs. Always a new one at each shop.) It might be appropriate to discuss what concepts work at what grade level, or the best way to convey them in a language (e.g. Snap!/BYOB instead of Scratch, for older students, allows access to some concepts that are hidden/unavailable for the younger students), but not to tell you “teach those 15-year-olds C++” 🙂

    For misconception 2, I would not worry too much until high school, and even then—pick your battles. It would be nice if CS K-12 teacher training laid out the “bad habits” in a language-neutral hierarchy (from truly evil to mildly annoying 🙂 [I’d put the (booleanVar == true) as only mildly annoying; I still get a laugh at how many freshmen do that! I’d put “writing a huge function that has more than one clear purpose” more up towards the evil end 🙂 Some common “bad habits” (namespace issues, law-of-Demeter) really only show up in larger software engineering contexts that high school students might not see/appreciate, whereas things like putting everything in one big messy function hurts my science/engineering student programmers (e.g. non-CS majors) who are just writing analysis scripts and get lost maintaining their own fairly short code 😉 With respect to installation issues, on other blogs I’ve read the horror stories about administrators locking down laptops and pouring glue into the USB connectors (that’s why stuff like bootstrapworld.org, the middle-school version of Program By Design, moved to a pure browser-based system, so that no local software at all is required)

    And agree with #3 also. None of those IT people (or I) have flawless subject knowledge either 🙂

  22. Progress in software – the industry and the art – happens entirely by software being developed that is robust, solves a well-defined problem well and is generic enough for reuse – reusable enough that that investment in code becomes a platform you can build on for the next thing you or someone else writes. That’s how we got TCP/IP, DNS, Unix, hash tables, binary search, file systems, or any of a thousand other things a developer takes for granted.

    Call me an “industry blowhard” if you want. PHP as a language and a platform is designed, almost with malice aforethought, to guarantee that it’s almost impossible to develop anything robust or reusable. Which means students starting from it don’t develop the habits of thought that make that sort of development an option.

    If you are a developer, your time and your intellect is your capital, and how you invest that (in what you write, but more importantly, what you learn by writing it) is what will determine the compensation you can command later. Sending a budding developer off with an education in PHP is like giving them a class in casino gambling – they will be completely unequipped to recognize the difference between that and an actual investment. That may be what the industry wants – semi-competent lackeys able to write one-offs who think that’s all there is. But it is a huge disservice to them to stunt their potential.

  23. Using simplified languages like SCRATCH, BASIC, and PASCAL make senses for teaching children. My rants center around College/University programs that continue to teach Pascal. It very nearly amounts to theft of tuition dollars, IMHO and most of it results from some lazy, tenured douchebag who hasn’t produced so much as a new power point slide for the class in 20 years.

    There is nothing, and I mean nothing, that you get from PASCAL or BASIC as a college student that you couldn’t get from a live useful language like Java or C++, both of which have stood the test of time and continue to be viable commercially.

  24. Thank you to all teachers for all your hard work!
    Please, please, please continue to inspire young programmers by any means possible!
    Please continue to teach them good habits, and teach them how to learn any computer language that has the building blocks that they will need in the future. Whatever program that can get our young people successfully interested in programming and then let them take it from there. If it is something that they want to continue on in the future (depending on how far college and the workforce is for them). That one language might no longer be useful, however if they are taught that they can learn a computer language and how to critically think through problems (debugging/being more careful/clearer when they write code to begin with) then I say – goal accomplished!
    I find a lot gets lost in translation when we talk down to anyone. So if I know something quite well then I am eager to share it or politely point someone in the right direction(someone who can explain it better than myself/to Google it). Sometimes people just don’t want to hear it. That’s fine too, but when they are ready and need my help I’m there for them!
    Please remember it’s all in how you take things and if someone doesn’t know how to express themselves politely then there might be someone else out there who knows how to and ask for their support instead. If they were really rude to you politely say so just as this post stated so well and move forward. Please teach the children this as well, because this is a real world problem. I’d much rather they know to expect all personality types in their future and how to work with them, instead of being discouraged and going to another field. We need everybody’s knowledge because it is all valuable!
    Thank you to all who might recognize this in yourself and who care to make a difference and change it to help improve the field!
    Please support our teachers positively! Our children depend on them and so do we!

  25. A good and well written poke in the eye for the governments policies and a levelling of parental expectations based on thoes so called policies. Thanks for brilliant post.

  26. I love this! I always use CodeAcademy when first learning a language because it holds your hand in the beginning but really instills the skills you need to code later on.

  27. This is so true! Having worked as a computer systems and electronics teacher, the students can’t be taught everything, they need to be taught how to adapt and how to teach them selves. So when they get into the work place they can adapt to the new system/language they have to use. As for knowing my topics, on some occasions I was doing the industry exam (CISCO Microsoft) the day before starting the class. As a teacher you can’t know everything especially when your subjects change constantly but you can teach the students to solve their own problems. Once in the work force they won’t have a teacher to answer all their problems

    1. Problem is, having done IT Support in Schools and Teaching one thing is consistent. Teachers expect IT to know everything, don’t treat them with respect or professional courtesy. Then they don’t like it when its the other way around? Double standards at all?

      1. Actually plenty of teachers do, just as not all Network Managers are reclusive cupboard men!

        In my view the point is really around “support staff” in general; because you still have a two-tier system in a lot of places (even many of those that profess otherwise), and because there are unfortunately still a lot of distinctions drawn between those who are seen to be doing the “real work” and those who aren’t, attitude problems on both sides are inevitable.

        When the education sector finally realises that there are people from all manner of professions working in it now, who all need to be recognised and treated equally for the services they provide, the problems will begin to drop off I think.

Leave a comment