A problem with Computer Science education, at present
The approach of giving students "little" problems, and rewarding students who are able to "solve" the problem as rapidly as possible with a high grade, teaches an "anti-pattern": hack your way as fast as possible to any program that can solve the problem you have been assigned.
A skilled software engineer does not approach a "customer" (which customer might actually be his boss, or a marketing executive, etc.) request in that way at all: instead, given X has been requested by "the customer," a skilled software engineer resists fulfilling the request as fast as possible, and instead begins to think:
A skilled software engineer does not approach a "customer" (which customer might actually be his boss, or a marketing executive, etc.) request in that way at all: instead, given X has been requested by "the customer," a skilled software engineer resists fulfilling the request as fast as possible, and instead begins to think:
- Is it really necessary to program anything at all to fulfill this request? Perhaps some existing capability in the system actually already satisfies the customer request, if only the customer is educated on how to properly use that capability.
- Is the request so hard to fulfill, and its fulfillment of such marginal value, that the customer should just be advised, "You don't really want us to program this: it will cost too much."
- Is the request one that can be met by simply installing some third-party library or a commercially available application? If so, it would be wasteful for the developer to write a program to fulfill it.
- If it turns out that, after considering all the above points, there really is some in-house programming necessary to satisfy the customer request:
- Are there likely to be similar requests in the pipeline, so that it will be useful to program a generic capability rather than simply one that fulfills the current request?
- How can the code to fulfill this request be made an integral part of a coherent software system, rather than simply being an isolated chunk of code?
The "solve this isolated problem as fast as possible to receive an A" method of giving CS students "actual" work to do does not teaching them anything at all about how to address the real-world software engineering questions listed above.
Given the semester-oriented nature of modern university education, I don't think there is an easy solution to this problem. But at least keeping the above points in students' minds, even if we have to assign "mini-problems," might help.
Given the semester-oriented nature of modern university education, I don't think there is an easy solution to this problem. But at least keeping the above points in students' minds, even if we have to assign "mini-problems," might help.
Comments
Post a Comment