In the post, I set out to test a hypothesis that the majority of computer science schools in Ontario were not teaching these best practices, focusing instead on the "worst practices" that are contributing to the industry's significant problem in meeting targets like cost, scope, schedule and satisfaction - something I collectively refer to as "BDUF/waterfall" or "Big Design Up Front / waterfall" processes, which define the prevailing view of how software should be developed.
I tested the hypothesis by performing a rough comparative analysis of the course calendars from each school - in much the same way a prospective student might when shopping around for a school to attend. Unsurprisingly, I found my hypothesis held true with only four Ontario schools out of sixteen teaching best practices courses.
A Review of Canadian CompSci Schools
Naturally, I wanted to extend this analysis to the rest of Canada, so I set about gathering and sifting through twenty-five course calendars for schools from the Pacific to the Atlantic. Below is the summary of my findings (click to enlarge). As with the previous review, my raw research notes can be found via a shared Google Notebook I've created.
As with the previous iteration, this table illustrates three significant points of comparison between the schools:
With respect to the first point, cells are highlighted in orange, with contiguous "blocks" aggregated together with a border to indicate multiple practices that are taught in a single course - there are some clarifications for certain schools that I'll explain below. With respect to the second point, cells are highlighted in blue.
I've also added two new comparison columns to break down the summaries: Object Oriented Design / UML, to indicate those courses that are definitive in the discipline, and Requirements Engineering to highlight this "bad practice", which I previously assimilated as part of BDUF/waterfall.
Highlights
As with the Ontario analysis, best practices aren't a uniform part of computer science curriculums across Canada:
Exemplary Schools
As with Ontario, there are a few schools in Canada that stand out from the miasma with some top-notch offerings that others would do well to emulate - if you or someone you know is interested in taking Computer Science, these are schools to include in your shortlist:
University of Alberta @ Edmonton
University of Calgary
University of Manitoba
McGill - Quebec
Honourable Mentions
University of British Columbia
Bishop's University - Quebec
Memorial University - Newfoundland & Labrador
Acadia University - Nova Scotia
Personal Software Process
A few schools in my analysis have been promoting Watts Humphrey's PSP as part of their software engineering stream. Far from being about personal development as a developer or a better way to manage small projects, PSS is a forerunner component to Team Software Process and the Capability Maturity Model (CMM), each of which emphasize the notion of coercing agile tenets within a heavy process framework. I recommend avoiding any PSP offering as its adoption is near zero in the industry and is predicated on the notion of increased up-front planning yielding a better product without a customer feedback loop.
Conclusions
Across both the Ontario and Canadian school analyses, while a complete offering of best practices is still not supported by the majority of computer science departments, the ones that do are leading the way with some top-notch efforts which go a significant way toward putting the lie to the naysayers who often trumpet that these efforts "can't be done" and "don't believe" in their worth.
Unfortunately, the majority view of BDUF/waterfall practices continues to hold sway and degree required courses vary wildly without consistency, rhyme or reason: Some departments require six software engineering courses, others two and still yet others none. In terms of best practice courses, the number drops dramatically with the norm being zero.
As with the Ontario analysis, there are a myriad of potential reasons for these discrepancies which can be attributed to each school setting their own curriculum. While this is their prerogative, it's unfortunate that there isn't even an accepted baseline to work against that promotes best practices.
Additionally, the same discrepancy between "computer science" and "software engineering" stratifies who's required to learn best practices - and this doesn't help graduates at all.
In sum, there's still more work to be done to promote best practices that can be affected by business (who can demand it from schools) and by students themselves to pressure their departments to improve their offerings. I've listed four schools who can serve as a starting point - I'd love to see four more join the list in four years!
Let me know your thoughts and observations.
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.