On 10/03/13 07:59, Rick T wrote:
The code below (server addresses Xed out for security) has been used on my
website for years, but it does seem to misbehave on rare occasions, so I have a
few questions on how I might improve it.
<snip>
The problem is that you have a program, but what you really want is
programming systems product [1, pp. 4-6]. You posted your program, but
where is the requirements specification? Design specification?
Programmer/ API/ ABI documentation? User documentation? System
administrator documentation? Test/ verification/ validation system,
documentation, and history? Configuration management/ build/ release
system, documentation, and history? Support/ issue tracking system,
documentation, and history? Etc..
Brooks estimates that creating a programming product requires three
times the effort required to create a program. A programming system
also requires three times the effort. A programming systems product
requires three times three, or nine, times the effort. All four
approaches produce different, and unequal, solutions (and programs).
Stated another way, the program is only 11% of a complete programming
systems product. But, people expect the quality realized by the other 89%.
For personal programming projects, it's very hard to get off the bottom
levels of CMM [2]/ CMMI [3]. Few programmers (myself included) have the
knowledge, skills, or disposition required for the other 89%, This is
where the "three great virtues of a programmer" [4, p. xxvii] will get
you into trouble. Perl and Verilog have convinced me of the value of
test-driven development, and Test::* make it easy. Perl gives me POD,
so I do some documentation (API/ABI at the least). I figured out how to
convert PNG diagrams into HTML for documentation. I use VirtualBox for
isolation and staging. Everything is in CVS. Everything is backed up/
archived daily, weekly, monthly, etc.. It's a struggle -- both doing
the work and forcing myself to do the work.
If you don't know how to put Perl code into reusable modules and write
test scripts, those are the next skills you should gain. See [5].
If you are set on computerized examinations for your students and
computerized result handling for yourself, there are several choices:
1. Fix N bugs in your program and continue as before. [4] and this
list can help.
2. Do all or part of the other 89%, fixing M bugs along the way. [1],
[4], [5], this list, and other lists can help.
3. Hire a service that claims to have already built the 100% solution.
Consider the consequences of a failure at each point of the system,
especially who it affects. I would not expect students to react well
when "the" computer jeopardizes their ability to take an exam or to have
their exam scored correctly. If your script (baby) pukes on you, well
isn't that cute?! ;-)
Also consider a mixed approach:
1. Old-fashioned paper and pencil quizzes, tests, homework, etc..
2. Computerized result handling.
The first doesn't have the convenience of "anyone can take a test
anytime, any place and the results are e-mailed to me". But, it also
doesn't have the cheating potential of "anyone can take a test anytime,
any place and the results are e-mailed to me". It's also simpler, more
reliable, and more durable, for a lot less effort. The second allows
you to scratch your programming itch (a spreadsheet could suffice).
HTH,
David
References:
[1] Frederick P. Brooks, Jr., 1995, "The Mythical Man-Month, Essays on
Software Engineering", anniversary e., Addison-Wesley, ISBN 0201835959.
[2] Wikipedia, "Capability Maturity Model",
http://en.wikipedia.org/wiki/Capability_Maturity_Model .
[3] Wikipedia, "Capability Maturity Model Integration",
http://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration .
[4] Tom Christiansen, brian d foy, and Larry Wall, 2012, "Programming
Perl" 4 e., O'Reilly Media, ISBN 9780596004927.
[5] Randal L. Schwarz, brian d foy, and Tom Phoenix, 2006, "Intermediate
Perl", 2 e., O'Reilly Media, ISBN 9780596102067.
--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/