Misconceptions that IT professionals seem to have about CS education
codeboom.wordpress.com
codeboom.wordpress.com
CS knowledge is, I think, valued highly (or at least valued) in the tech sector itself, but once you leave the sphere of companies that make tech products for tech people, or if you happen to be outside one of the major software hubs, the atmosphere can become rather absurd. And who gets blamed by these business owners and managers? The CS programs, because they are clearly just a bunch of ivory tower jackasses who don't want people to have any useful knowledge. Ever. Ugh.
This sucks two ways: first, it means that people with solid theoretical foundations in CS are derided if they can't--for example--get an iPhone to print to a wireless printer, and second (and worse!) it means that people who want to do something with computers think they can't because they don't have a CS degree. It's a sad state of affairs.
This is 100% true for new CS grads I think.
It's even true for people like myself (who have been working in industry for over 5 years, but then don't know a particular tool that a new tech job is asking for...if I don't have to use it at my current job, and I can only program small things on the side using a particular language/tool, how does one get the needed experience that the startups want you to know if they won't hire you so you can learn it, firsthand?).
I just finished a 3-4 month stint having a past student volunteer with me so I could give him the additional direction and practical experience I knew he needed to actually get a job locally (and web developer positions are few and far between where I live). This is a few years AFTER he had already graduated from San Diego State's CS program.
Now with that additional training he was able to get a part-time position at a local web development firm (a foot in the door) and is also on his way to a 2nd interview for a web developer position at our local county office.
It hurts when you can see the potential in someone and know that it's not being developed properly because no one else (a.k.a. potential employers) can see it and make the jump to hire the person based on their potential and then give a bit of their time to train that person properly.
It's also awesome to know that my past student is going in the right direction now through my guidance (partially) but also through his hard work these past few months to acquire the needed skills :-).
P.S. I forgot to mention in our area, most of the graduates of our CS program can't find actual software development jobs (because there are hardly any available) so many of them end up in regular IT work, which makes them even more overqualified (and underqualified) since their schooling really didn't teach them about the IT stuff, per se, so they have to learn a whole lot on the job (once they are even able to get one).
1) You need to explain to people what you do - "write database applications and generate web pages from the data stored in the database".
2) And what the people questioning your ability are looking for "you are looking for someone that works in a mobile phone shop, not a software engineer".
The fact they expect a software engineer to deal with configuring /installing applications on a mobile phone, makes them look stupider than a software engineer who "can't" configure a phone.
Total agreement here. A lot of the issue is ignorance. Most small to medium business owners and managers do nto code and do not know how to. They see a CS grad as a white, male, 135 lbs., pasty, skinny genius. Just like Bill Gates, Zuck, and countless movie 'hackers'. They expect your skills to be just as good to, ie. able to 'code' a website in minutes and hack NORAD as well.
Why? They just plain do not know anything about the discipline. They have to go on what little they do know, and that stuff oversells the CS degree by a lot.
I had a boss once that thought I should be able to program a microcontroller in an afternoon. Mind you, the spec sheet is ~650 pages. But he really really did think that it was that easy. Like it was speaking Spanish, it just took a long time to get up to speed, but when you are there, it's super simple.
Its the same disconnect as with dentists, accountants, lawyers, and mechanics. Most people can't begin to think in the way required, and they are helpless without you. That breeds resentment and suspicion.
To help with these issues, a level of trust needs to be established. You have to trust them, and they you. Many employers think that the trust comes from the degree granting agency. University vetted you, so I can at least trust that you know how to do hacker stuff.
Unfortunately, the gulf is so wide between the layman and the professional that trust is ALL you have to go on and a degree is not enough. Possibly a better testing agency, like the Bar, AMA, or ASE is needed as 'hackers' are more and more needed.
Spot on.
By my estimation, the most common sort of work in IT has little resemblance to computer science. It's something more along the lines of very environment, industry and proprietary platform specific operations.
There's a very wacky disconnect between what's taught in schools, desired by students and expected by employers.
I'd liken the situation to one in which mechanical engineers, ASE mechanics and truck drivers were all lumped together as simply 'TI' (Truck Industry).
All those roles are needed and all have ready and willing candidates available, but most employers have no clue how to compensate, hire or task each appropriately.
Look, let me sum up the problem with CS education in a nutshell: today, when I think about hiring someone, I basically don't care about their CS education. This is increasingly what I hear from my colleagues as well. Degree in CS means more or less nothing. Notice that that's not the case in Chemistry (since the author is fond of comparing fields). What does that tell us? That whether you like it or not, you are doing a poor job teaching them, or that we have very different definitions of CS. Which is fine, after all, there are degrees in accounting and degrees in math that are separate, maybe we need to move to that model.
If your program graduates students that have never used version control, never committed to a single open source project, or have a difficult time picking up new languages/technologies, then maybe you're teaching them "something", but that something isn't what the world cares about. So unless they go and become teachers of this thing you call CS as well, its time to change what you're teaching.
(BTW, I rarely find that these recent grads have done NP reductions or any of that kind of thing that would at least justify not teaching them all that "useless" industry stuff)
In a nutshell, academic certifications assess whether you know things, while industry certifications assess whether you can do things.
For a business, there is a strong focus on doing, rather than knowing. Who cares about whether certain classes of problems are computable? Just write a program that does it for our problem set.
And there is nothing wrong with this. At the same time though, if you want to make advances that bring about the next generation of programming/technology/etc, you would need to have an understanding of how these things work.
Unfortunately, this line has been blurred significantly -- universities have become big business, caring more about selling degrees then teaching fundamentals. At the same time, businesses have been using degrees as a criteria for hiring, and then complaining that people with said degrees can't do what they expect them to.
I hate to describe a problem without providing a solution, but I don't really have a solution for this.
Apprenticeships were the vocational education, and they were done in the workplace. Apparently they still do coding apprenticeships in Germany and they work really well.
Employers need to stop expecting new hires, and especially new graduates, to be able to hit the ground running at full speed, and train more.
I'm astounded that so many people are pinging the author for not being on the ball, yet missing all the massive signposts saying "This is a high-school environment, not university".
the fact that a bunch of people missed it is rather telling, isn't it
Not particularly, given that the author's criticism is that folks in our industry give her short shrift and ignore what she has to say. It actually plays directly into her criticism that a bunch of us just tilted at her windmill without bothering to understand what it is that she actually does first.
In this case... I guess I just find the premise that a bunch of industry people are telling her what to teach some high schoolers a little hard to believe/overblown (but I guess I'm not from the UK so maybe its common there to do that?). But yeah, sure, teach them whatever you want in high school, I agree.
Her complaint is the way in which "IT professionals" complain about high school education, not degree level education.
In the context of the original article, this comment is therefore a little unrealistic. >If your program graduates students that have never used version control, never committed to a single open source project, or have a difficult time picking up new languages/technologies, then maybe you're teaching them "something", but that something isn't what the world cares about.
I teach CS to the 11-14 age range for 1 hour a week, and 2.5 hours a week to 14+ students. Good luck teaching core CS theory, multiple languages and version control in that amount of time.
My CS degree was about 50/50 CS and programming. I felt is was a good balance, but there was still tons I needed to learn on the job. I'd never done web dev outside of that one weekend I checked out codecademy. I'd never set up a web server or pulled a repo from github or any of the other things you'd want me to be able to do in industry, because they weren't a part of my education. I did write a tcp/ip server from scratch, make Roombas write things, and the like, because those were part of my education, but none of that has come in handy in my current job.
There's a real divide between what education is and what industry leaders think it should be. It has never been and likely will never be about churning out job-ready young adults with all the skills industry wants. That's vocational school, not university. Don't confuse the two.
They of course don't think of themselves that way; they're "developers", "engineers", or "hackers." To them, IT is the poor guy installing Adobe Reader on the manager's PC.
My Software Engineering degree is accredited by the Australian Institute of Engineers. I am an Engineer.
In Texas you need a P.E. license, or did, anyway, to be an engineer.
It boils down to how much a state legally buys into the P.E. license exams. Some care a lot, some not at all, some have an alternative viewpoint for certification and bonding.
In the U.S., neither of those are true. I'm curious about how Australia might differ.
No. Someone could just study Computer Science and still write code.
> Is there a legal prohibition on calling yourself a "software engineer" in the absence of such credentials?
Unfortunately not. In Australia you seem to be able to call yourself anything you want with no consequence. At my previous company we had "Sales Engineers" and "Solutions Engineers" - even though none of them had been to University.
I doubt anyone would put "B.Eng" after their name unless it was real though.
Yes? As someone who didn't major in chemistry or go into a related field... what the hell does someone with a degree in chemistry do when they graduate? Go and work in a coffeeshop?
Edit: the original post seems to have been edited several times since my original comment, including the clarification that she's a high school teacher in the UK.
Back when Flash was more in favour I used to do ActionScript programming with my 15 year olds as a basic course since it was relatively easy to wrap your head around building something to look at and then attach code to it (one of the few redeeming features of Visual Basic) and even then few kids coped well.
I've yet to see much success from high schools I've visited that tout courses that involve mobile development and what have you that don't also have very large pools of students and significant streaming of those kids into the CS course.
Now it could be quite valid to argue that perhaps I'm just not good enough at teaching, but I've seen enough top end success with my students that I don't think that's enough to explain it away.
In Portugal universities call Software Engineering to Computer Science degrees.
Computer Science seems it should be what "pre-med" is for someone on the way to becoming a medical doctor.
Several undergraduate programs offer engineering practicum programs in which students are paired with organizations to work on open source software. These opportunities can help to familiarize students with some of the engineering practices in the industry. Every company is a bit different and development practices change often.
Initiatives like http://codeclubworld.org/ will allow you to engage with children at the chalk-face. You could inspire the next generation of hackers, rather than just criticising those of us that have chosen to do this as a profession.
I don't see much substantial disagreement between the OP's post and the comments here--she's basically making three points:
1. The (secondary) education system's role is to show students how to engage with the field, not tailor their training to the specifics of a job posting. It's more important that students be able to pick up new paradigms than it is that they know any particular language.
2. Education is iterative. It's ok to learn something that fudges the details or that's not a best practice if it means you're making things now. We all return to domains of knowledge with finer granularity when we need it.
3. Content knowledge is important for teachers, but their expertise is in pedagogical content knowledge--the knowledge and skills of how to productively open a domain to new learners.
Do we disagree about any of these? Sure, there's some unnecessary heat in the post. But that's true of the comments here too. I wish some folks here were able to bring more introspection and empathy to conversations about education (yielding insights about who they are as learners, and how others are different). And I wish we stopped dumping on teachers as the source of all our problems (let's talk more about why this is happening later...), so teachers didn't have to feel resentful and defensive in public fora.
If you're interested in CS education and you haven't spent any time in a classroom/after school club/coder dojo, I'd invite you to come get some firsthand experience. I teach in Palo Alto, come on over...
2. That's true. Is there a reason not to fudge the details of a current, employable technology stack?
3. Let's examine the logical extremes. On the one hand you have an incompetent teacher who can nevertheless communicate well. On the other hand you have a competent teacher who is a poor communicator. Frankly, I would rather have the latter. Otherwise, what's the point?
Also the reason why Physics has: Mechanical Engineering but Computer Science has no vocational counterpart is because: there is money in Computer Science. Microsoft could not afford to not do R&D. Computer Science research can pay off within 5-10 years. Theoretical Physics research cannot. :P
So the industry tends to be as up to date as Computer Scientist are while there is money to be such. (Although, I have met plenty of programmers who do not understand theoretical computer science topics).
1. The author appears to be talking about pre-university level CS education. 2. The "IT Professionals" and the commenters here appear to be talking about CS Degrees (undergrad and up) and their relevance to jobs/hiring.
I do not see how those two connect. In fact, I argue that they shouldn't be related at all. Teaching children, especially at the age the author mentions - 12 year olds - is not about preparing them for future work. Most children at that age don't even know what they want to be yet. So what is taught and how it is taught cannot be judged by how useful it would be in employment.
No one here is making any sense. I also find it funny that the author uses teaching a secondary language as a comparison because the manner in which the US (and other countries like Japan) teach secondary languages is all manners of messed up. The system and approaches used in secondary language education do not produce fluency or even long term retention.
University is not Job Skill training. CS Students are not Engineers because they have a degree. It takes years as someone's junior to learn "how it's done in the real world".
I'm not saying that a teacher needs to go and learn rust/go/swift, but if you are teaching python you should it well.
[1]: (though I do softly disagree with some of them -- while chasing the latest tech trends shouldn't be a thing, things like language choices do matter, for example.)
This should be a core concept in CS education though.
This is the thing about teachers that just irritates the hell out of me. I had plenty of teachers who went through postgraduate qualification and had 20 years of experience who couldn't teach for shit. Getting trained as a teacher doesn't mean you're going to be automatically good at it, just like getting trained in CS doesn't mean you're going to be a good programmer.
I've been taught by plenty of people who didn't have the title Teacher, who taught me way more than my Teacher ever did. I've also talked and taught plenty of people who thought they were stupid because their formal University Teacher, armed with postgraduate qualifications and years of experience, couldn't communicate a simple concept to them. They go through life thinking they're dumb because this trained teacher made them feel that way because the teacher failed at teaching and passed that failure to the student.
So to see this person talk about their qualifications and how she thinks these qualifications confer teaching ability leaves me quite a bit miffed, because it comes off as just an arrogant dismissal of criticism.
And yes, there are some terrible teachers. But there are a lot more terrible armchair quarterbacks.
University professors do not do this kind of training. They hold a PhD in their field and probably did several post-doc research positions before finding a position as faculty. This makes them experts in their field but doesn't necessarily make them very good teachers.
Her qualifications are in teaching, not in CS. It makes sense for her to assume that she is generally a better teacher than someone with qualifications in CS and not teaching.
I think a lot of HN readers are missing the background to and context of this article though, which is that the author's talking about the UK secondary school system (11-18 year olds), which has been going through significant changes in the way computer science is taught.
When I learnt IT/CS at school, the correct answer to "How do you secure a computer" was "Make sure it isn't near the edge of a desk and there are no cables trailing across the floor" - answers involving passwords and firewalls were actually marked as incorrect. Formal education before university provided very little information which was actually relevant.
In the past year or so though, the government has changed the curriculum to be more practical and relevant. However, my understanding is that a lot of IT teachers didn't have a background in CS, so although they were happy at the level of tidying cables, they lacked the technical knowledge required to explain the new syllabus. That's insultingly simplified and generalised of course, but you get the idea.
Because the new syllabus was brought in in a rush following much political fanfare, questions were raised about how to bring these teachers up to speed in a short amount of time. I haven't followed the situation closely, but I believe that one solution which was pushed by government was that the industry should step in to save the day, despite the fact that they know sod all about teaching, and that their skill sets are often too topical and transient to be of any actual use to students. I don't want to put words into anyone's mouth, but I think that's a large part of what has led to this post, and re-reading the article in this context may shed a different light on it.
WRONG! We’re here to teach children the core concepts of Computer Science"
Am I the only one ticked off by the "WRONG!" in this post?
If you can tell me that it is your job to accept payment yet not create useful people, in my opinion, you're committing some form of fraud.
Schools like Waterloo in Canada do a great job of providing core concepts while providing the workforce with useful people. I'm an employer (who didn't go to Waterloo personally) and we love to see their interns come our way, as does LinkedIn, Facebook, Google and many others. The school realizes they're not good at making people useful, but they do what they can to help the student become useful by connecting them with the real world, while providing them with the core concepts to enable them to be successful in that position.
Maybe you're frustrated and getting a lot of opposition because you're WRONG!?
edit: I also distinguish between CS and CE. I'd firmly agree with you that CE or other engineering oriented degree programs should be almost vocational.
edit: can't stick around to wait til I am allowed reply to you, karmelapple, so I have to reply by edit. I know some schools have a computer engineer degree, in addition to a computer science degree. I would say that mechanical & structural are applied physics, and EE and some others are more like applied math (in which I invite, but back away from the centuries old math/physics flamewars)
All of the engineering majors study a particular type of engineering: mechanical, electrical, computer, construction.
There's no "engineering science" program that I'm aware of that would teach the theory behind engineering and award a degree just for that. Instead, the engineering student must understand that way of thinking simultaneously while learning the practical components of the degree (analyzing free-body diagram forces, producing printed circuit boards, building physical objects for competitions, etc).
Actually the University of Toronto offers an "Eng Sci" program that is exactly this. They offer it alongside their regular engineering program. A guy I went to high school with dropped out of the eng sci program because it was "too theoretical" for him and he wanted a more practical education.
In chemistry land, the chemists daydream and theorize and apply massive creativity. The ChemEng implement known ideas as cheaply and safely as possible on huge scale, which turns out to be ridiculously hard. The process techs and lab techs pretty much just follow orders.
Computer engineering is, or used to be, a hybrid of EE and CS. More compiler / assembly work than OO design. More control system theory (PID controllers and the like) than database theory.
There is a modern variant of what CE is, along the engineer is the accountant/project manager of the sciences. And its often called "software engineer". So a project manager who knows programming.
But as someone who took both EE and CS courses, I wouldn't consider the EE to be particularly more "vocational training" than the CS.
I think it's more of a level thing; higher-ranked universities will tend to be more theoretical and take umbrage at being thought of as vocational training. More prestigious companies will also interview more for your grasp of theory than your skill bullets. E.G. Facebook is a PHP shop but when I interviewed there they didn't ask a single PHP question. I bet they never do.
This is a huge distortion of the point the author is making.
The author is not saying "schools should be paid to churn out students that are not useful."
The author is saying "schools should be paid to churn out students *already equipped with the skills they will need to learn once they get to the work force."
Anyone, and this includes you, that expects a fresh CS graduate to "hit the ground running" with no adjustment period and to be fluent in whatever language/toolset you decide is important is deluded.
The point of a CS education is not to master every library, every IDE, and every language. The point of a CS education is to master the fundamentals so that even if you learned Java in school, you can spend a weekend learning the syntax of Swift because really that's all that's different. You already know object-oriented design (or whatever).
The problem is that employers expect new employees to start being profitable on day 1, when that is absurd. There's always a learning period, even for a seasoned veteran. Whether that learning period is 3 weeks or 3 months, there's always a learning period and I wish employers would get this through their seemingly think skulls.
Yes, employer expectations are often absurd, but so too is the expectation that teaching Java without ever building an Android app does everything sufficient to "equip students with skills." If a curriculum is going to spend a month on linked lists that's fine, but do something real with them instead of implementing stdlib over and over in a vacuum. Use some popular libraries as teaching tools to demonstrate good and bad code, ways things have been done in real life, etc. Don't pigeonhole on jquery widgets, but build a webapp in rails or node or go or c or jsp or whatever. Hell, build it in Haskell and teach some killer fp at the same time. But don't just spend 4 years teaching students how to implement x to do arbitrary y with no practical examples or connection to real life.
If you really believe that it's a high school's job to "create useful people" then I hope you're not working in education.
> Schools like Waterloo in Canada
That, or you simply didn't bother to even read the article. I'm not Canadian or anything similar, but a part of me suspects that "Waterloo in Canada" isn't a high school. Stop starting flamewars on articles you don't even bother reading introductions of.
Here's more details on what these subjects are composed of; it's quite basic stuff: http://www.aqa.org.uk/subjects/ict-and-computer-science
Where did I learn how to use git and how to write Android applications? Certainly not at school -- I did it on the dime of some very generous employers that were hoping to woo me into working for them after I graduated. Students gossip about which employers are best -- if a co-op student isn't growing during their experience, then (as an employer) you're going to have a hell of a time retaining the kids when they graduate.
What did I learn in class? Algorithms, data structures, and other fundamentals that are required to grok (let alone answer) the kinds of questions that come up in interviews. Interesting stuff, but almost entirely tangential to industry skills.
The only reason Waterloo students post-graduation are "useful" in the workplace is because they've been in the workplace -- with almost two years of experience!
Erm, yes? In fact, the folks I know who made it into industry and graduate school openly hated people who had come into their workspaces without that knowledge.
It is simply not possible for teachers to be able to keep up to date with the latest flavours in industry"
Then why the hell are we paying as much as we are for tuition? Every professional programmer I know worth any salt spends at least 5-10 hours a week in continuing education of one form or another (even if it's just reading about the new JS whatever on HN).
"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 simple analogy will usually get the point across, and a simple disclaimer of "This is a better way of doing things, but don't worry about it" means your job of showing the door without getting sidetracked is complete.
~
The author mentions A-levels, so perhaps they aren't looking at college-level students, but even so that's no excuse for dumbing-down the subject matter.
That said, it is important to be able to explain these concepts without being technical--anyone who has dealt with piles of dishes understands stack semantics, anyone who has lived with other people in close proximity has a few intuitions about mutable state.
If you're doing CS education, you have a very small window of opportunity at the start of someone's career to teach them things that they're not necessarily going to pick up working in industry. You really need to think about what you can teach them that will allow them to be prepared for 30-40 year careers and whatever technological changes that brings.
I can assure you that tuition rates have very little to do with salaries for Computer Science professors.