Teach frameworks in school.
English language classes teach the five-paragraph essay, math classes teach proof structure, and marketing classes teach inventive techniques for lying. (Kidding.) But I have yet to see a single CS professor teach any kind of framework, let alone any actual architectural/design patterns beyond some vague mumbling about separating your middleware.
This is a problem. Teaching the tools without teaching technique, ignoring the vast majority of progress made in development practices to date, is tantamount to having an intern build a cargo plane using balsa and a model of the Wright flyer for reference. It's flagrantly irresponsible.
I'm a web developer, for context, and a relatively young one at that. Just about to finish extracting a BS degree from this university. Like many of my peers, I picked up the bulk of my knowledge online - started with liberally-applied tables on Bravehost (which apparently is still around), hacked out the basics of CRUD by reading php.net, etc etc. But it wasn't until I started in on the Zend framework that the quality of my code started to seriously improve. Sure, I had already developed a relatively consistent coding style, but the structure of my software still wasn't anything transcendent, and "code reuse" still meant sifting through phpclasses.org. Using a framework meant that I could learn by example, at the pace of my own discovery. This is something that academia has totally failed to provide.
Obviously, I can speak only of my own experience. I've taken development courses at both the Illinois Institute of Technology and UW Superior. While I've been occasionally surprised at the caliber of the faculty at both universities, and while both will provide the aspiring developer with a solid grounding in CS fundamentals, they do little to nothing to prepare the student for actual, real-world development done well.
The emphasis here is important. Sure, my capstone project at UWS involves creating a tiered web application. Yes, we were told how the stack should probably be separated. But making the students start from nothing ensures that the final product will only be as good as the students' sum efforts, and their efforts alone. This is pointless, and a waste of the students' time. We are capable of more. We can build a functional product faster by using PHP rather than C, sure, but we can build a better product by allowing ourselves one more abstraction out of the gate: a framework.
In talking with my professors, it seems that the hesitation in bringing such demons into play (besides the fact that they just don't know them) lies in the initial opacity of the system. Run rails new
, and what do you get? Skeletons! No guts that the students can read, line by line, and somehow assimilate in one gradual pass. This is nonsense. You don't learn to drive a car by pouring over blueprints for the powertrain. Understanding the mechanics will help you improve your mileage and preserve your investment, sure, but that's not where you start.
I'm not suggesting we ignore the language fundamentals and throw the 101 students straight into MVC (or what have you). I am suggesting that we merge the two.
A programming course starts with printf("Hello world");
, and it should. It's not impenetrable to the uninitiated, and in teaching it we assume that their brains can wrap around a function call without first having deep understanding of what a function is. My point is that there's little difference between this, and starting one level higher. Now, we see echo("Hello world");
, but it's given context - this code is a "view", and it talks to the user. The fundamentals may still be taught with equal efficacy, but now they are accompanied by structure, something that the students can pick up gradually as a concept integral to development, and not just a good idea to tack on towards the end.
(I should probably clear some ambiguity here before I get any flack for it. There is a distinction to be made between computer science, such as it is, and software development. The pure CS (read: math) that I got out of my degree is great, and in retrospect I should have focused more on it, but I entered college with the idea that I was going to build tools that were going to help people. It took far too much time for me to discover that this wasn't going to happen within the confines of academia. Perhaps this is a greater problem than the one I've been railing on about here - the total lack of any declared distinction between academic and applied computer science. Other schools may be better with this, but I know I'm not the only one who was screwed by IIT on this point.)
Ultimately, my concern is with the potential of students. There's a reason why calculus is introduced in high school now instead of being sequestered away in college - when given the proper support over time, kids can handle it. And by acquiring a deeper understanding of mathematics earlier on, they are that much better equipped to make progress faster. Wasted time is just sad, especially when students have no idea there's a better way.
So - teach frameworks in school. Do everyone a favor.
Last updated
Was this helpful?