Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Can improve productivity, reliability, simplicity and comprehensibility by an order of magnitude Strongly influenced by previous experience
Experienced programmers in a language can be up to 30% more productive than nonexperienced ones Experience can take as much as three years to get
End of the wave: bug-free compilers and environments, several alternative tools, powerful environments, good documentation, integrated tools, availability of courses and experts. Beginning of wave: buggy compilers and environments, few choices, primitive environments, poor documentation, lack of integration, inexperienced community pioneers in the wild.
Programmers should make good use of paradigm, language and environment, but... Programmers should program into the language, and not in the language (see next slides):
Programming in the language: language filters and determines patterns of reasoning about problem and its solutions
Programmer
Problem
Language
Programming into the language: programmer analyses problem based on their personal skills and techniques, and then makes good use of language to implement solution
Programmer
Problem
Language
Coding
How much design will be done before coding, and how much will be done just in time? Are conventions defined for names, comments and layout?
Coding (cont):
Handling of error conditions Security issues Conventions for class interfaces Standards applicable to reused code How much to consider performance while coding
Coding (cont):
Positioning on the technology wave Programming in the language versus programming into the language Integration procedure specific steps a programmer must go through before checking code into the master sources
Teamwork:
Teamwork:
Pair programming, individual programming, or some other policy? Will programmers write test cases for their code before writing the code itself? Will programmers write unit tests for their code regardless of whether they write them first or last?
Quality assurance:
Will programmers step through their code in the debugger before they check it in? Will programmers integration-test their code before they check it in? Will programmers review or inspect each others code?
Tools:
Have you selected a revision control tool? Have you selected language, language version, and compiler version? Have you selected a framework such as J2EE or Microsoft .NET or explicitly decided not to use a framework? Have you decided whether to allow use of nonstandard language features? Have you identified and acquired other tools you will be using editor, refactoring tool, debugger, test framework, syntax checker, and so on?
Design challenges
Wicked problem (H. Rittel and M. Webber, 1973): can only be clearly defined by being solved. Consequently, optimised solution can only be achieved by solving problem once, learning from experience, throwing solution away and solving problem again.
Design challenges
When is design good enough? How detailed should it be? How formal? How just-in-time? When is it finished?
Design challenges
Design is about tradeoffs and priorities under constraints Design is nondeterministic Design is heuristic Design is emergent