| I'm absolutely shocked that people are okay with this. One of the biggest problems I've found with recent graduates is that the programs they've come from have been nothing more than trade schools for Java and PHP developers, and most of them lack even the basic underlying knowledge of things like algorithms, paradigms and how to make efficient code. This is not Computer Science, this is basic programming and is no better than what you'd get from the numerous video lectures on the web. In short, employable skills are best left to employers, and academic subjects are best left to academia. If it were my choice I'd make Computer Science a purely theoretical course from the outset. If these kids don't have a background in Math give it to them so that they can read through the likes of Introduction to Algorithms and TAOCP with no issue. Don't even let them touch code unless it's to illustrate a theoretical aspect of CS. Once they've got a solid year of CS behind them and they're all of a sufficient standard in the theoretical aspects of CS then they can be introduced to programming. However, I'd steer clear of the employable languages and force them into Python, Lisp, Haskell, Prolog, R and co to reenforce the theoretical background. Of course, you need these graduates to be employable, so why not offer a course titled "Internship" during the second year? Let them spend a few days each week working in a real company with real developers that can teach them real skills? I graduated from a modest CS programme and thanks to my numerous internships I was offered interviews left right and centre. I learned more about programming in an eight week internship then I did in an entire year at university, despite most of my second year being about learning to program, and because I had real world experience in employable languages the university didn't cover like C# I walked into a job while others in my class with better grades struggled. You get the idea. Please stop turning academia into a trade school and teach these kids real CS. If you want them to be employable offer a mandatory course where students have to work in a real business and are forced to pick up programming from people that actually know what they are doing. |
Real-world experience can not be overvalued. That being said, I'm still working with the parameters in my original post. Small. Liberal Arts. College. This isn't a huge program, I've consistently had between 12 and 20 students in the major, of all grade levels and wide differences in skill levels, experience, exposure, and mathematical prowess.
I know it may be hard for others to understand what my student landscape looks like, but after more than a decade, I feel I understand them. But a year of strictly theoretical CS, and I'm looking at 2 to 7 students in the major, and filling out my teaching schedule with writing classes.
Looking at a newly built house, you see that all levels of craftsmanship have been employed. If every contractor is a framer, because it's the fundamentals of building, your interiors look pretty basic, and let's not even mention plumbing made out of lumber!
What I'm trying to say is that I've tried my own version of CS snobbery and highmindedness, and it isn't working. I'm looking to design a computing major that isn't producing only framers.
I appreciate your input, please reread this post and my original post, and try to put yourself in my position, then send me some more suggestions!!