So.. it transpires that I have a friend who studied Physics at Imperial College, and as a part of that, was taught how to use C++ “As a tool to help with computational physics”. - His words, not mine.
As a result, he has no explicit knowledge of some of the finer points of C++ programming, no idea how a binary search algorithm works, why you’d use a Deque and when you’d use a Vector.
This is because he was taught C++ by the Physics department, rather than by Computer Science or Engineering.
I learnt C/C++ and Java at University too, but fortunately, the actual teaching was handled by the Department of Engineering. Which meant they took a far more holistic view, rather than just teaching the applications of any given language to the subject at hand.
I think the application-specific mechanism of teaching is wrong. Mostly wrong when you try and get a job in a non-directly related field, and find (in his case, during an interview) that you’ve no idea what a Bubblesort is, or why a Quicksort is preferable. Similarly, no concept of Big O notation, or computational efficiency.
I don’t know how you could expect to be a versatile programmer without knowledge of how to make your programs efficient, and not zap all the memory from a running system.
One of the long-known and much commented on facts is that so few institutions teach “modern” software engineering, or for that matter, skills to survive in a digital age. I more mean things like how Distributed Version Control works, and why it’s better than ‘helloworld.c.bak’, rather than “How to use Facebook for fun and profit”.
I don’t think it’s great to use myself as an example here, because I picked up a large proportion of my code skill before university, and I was already using Source Control whilst writing code at school. It was Visual SourceSafe, but still, better than nothing.
I’d like to see a course alongside “Programming 101” called something like “Programming Methodologies 101” where the topics covered would be:
- Source Control.
- TDD.
- Agile.
- XP.
- Waterfall.
- How to write documentation.
Programming Methodologies 102:
- REST APIs
- Continuous Integration.
- Configuration Management.
This is the kind of thing that General Assembly do actually teach, and there’s also CodeSchool with their Try Git free course, and also their Try R course.
I think it’s needlessly arrogant of university departments to handle the teaching of a language within their own department, such as Physics teaching “C++ For Physicists” rather than handing the students over to the Engineering/CS departments so that they can get a good, holistic, overall course in C++, which will make them better programmers in the long run, no matter what job they eventually end up in. It’s all about transferrable skill.
When you start university, the job you wind up doing won’t exist yet.
Which is why transferrable skill is the only way forward.
Because otherwise you’re just training somebody for an anachronistic career path.