LN 5: programming_skill
Download
Report
Transcript LN 5: programming_skill
CS 201
Computer Systems Programming
Chapter 5
“System Programmer Skills”
Herbert G. Mayer, PSU CS
Status 10/8/2012
1
Syllabus
Programming Practice
System Programmer
Software Development Practices
Software Complexity
Interesting Experiences
What Can Be Programmed?
What Cannot Be Programmed?
Algorithm
Defensive Programming
References
2
Programming Practice
General programmer attributes:
Critical thinker, uses good judgment; what’s new?
Creative ideas, about algorithms, computing
Open to others’ ideas; i.e. great mind
Humble , according to E. Dijkstra [1]
Practicing and mastering a craft:
Programmer reads, analyzes, improves programs
Designs programs, i.e. SW solutions to computable problems
Practices, reviews, corrects, refines programming process
Experience and high skill:
Knows how to design, implement, document, test, validate, improve,
maintain, judge complex software
Mastery:
Advances state of the art of SW development to higher level
Designs, implements cooperatively –real jobs are not solvable by 1
engineer, except if you are Linus Torvalds designing Linux
3
System Programmer
An effective system programmer is an experienced
SW engineer, who masters a suitable programming
language L very well: necessary condition
Such a language L allows visibility of, access to, lowlevel target machine and to OS resources
Possible languages L are C, C++, assembler
Knows target machine thoroughly
Understands which operating system calls can be
expressed in L to manage system resources
Can combine system calls to low-level machine from
L, with overall goal of effective machine use
4
Good Judgment comes from Experience,
and
Experience comes from Bad Judgment
provided that you are smart, since:
only a CS genius learns from the mistakes from others
the smart CS student learns from her own mistakes
a dumb person –not studying CS -- never learns, instead repeats errors
5
Software Development Practices
Software of real value should be:
Functional
Correct
Reliable
Efficient
Easily readable, see C. A. R. Hoare [4]
Re-Usable
Extendible, AKA open-ended
Maintainable
Complete; exceptions are documented clearly!
Does such SW exist? Then why don’t we see & touch it all
the time? Ever touch an OS that locks up, freezes, slows
down excessively? It is called Windows
6
Software Complexity
Common complexity measures: Chomsky language
classifications, after Noam Chomsky:
FSA, deterministic, nondeterministic
Context-free
Push-down automaton
Recursive (Not the prog language feature!)
Recursively enumerable
Listed from easy to complex
See later lecture on language complexity, program
complexity
7
Interesting Experiences - Herb
•
I literally re-typed one page (~50 lines) of Pascal-like code to
finally render SW functional; mystery never solved why the
re-typed, identical program worked
•
Designed and coded some days and nights w. almost no
sleep and food, and crafted ~2,000 lines of highly functional
C++ code for Ada Case Statement in Ada compiler; worked!
Until years later I observed an error on Case Statement
implementation!
•
SDSU colleague left 1 page of pseudo-code for Symbolic
Differentiation on a department copy machine intuitively
great, comprehensible, beautiful; stolen with pride
•
Positive feedback about almost religious credo to: not trust
your own SW; but to check instead! (Catch your
assumptions! Best to make few assumptions)
8
What Can Be Programmed?
• Algorithms; see [2]
• Guideline for what can be programmed: Church
Thesis [6]: “any algorithmically computable
function can be programmed and executed on a
regular computer.” I.e. you can express it as a C++
program
• What is “Computable?
•
see Alonzo Church’s Lambda Calculus
•
or Alan Turing’s hypothetical “Turing Machine”
• Yet some problems remain very hard to solve
programmatically, even though they are
computable
9
What Cannot be Programmed?
Code to become a a perfect System Programmer?
There is no methodical, algorithmic way
But there are ways Don’t give up! It includes learning, practicing, thinking
Design SW to win lottery?
Unless unbounded time and all permutations allowed! Then you lose money
Natural language translator?
Yes, very aware of automated translation tools! And I use them! Like Babel
Fish, Google translators, etc.
If it were possible, how then could the typical human ambiguities be avoided?
Decryption of any encrypted code?
May require too much time to render result interesting
Hence some states impose limitations on encryption complexity (128 bits)
Medical diagnosis
Yet great steps achieved to automate some diagnostic steps
Mainly to save time; final diagnosis generally left to MD
Judicial judgment
Oregon DMV services!
10
Algorithm, see [2]
Markov (1954)
Algorithm is … an exact prescription, defining a computational
process, leading from various initial data to the desired result
Minsky (1967)
Algorithm is a synonym for “effective procedure”
Donald Knuth (1968)
A precisely defined sequence of finite steps to compute a result from given
inputs and initial values –paraphrased by HGM
Stone (1972)
Algorithm is a set of rules that precisely defines a sequence of operations
such that each rule is effective and definite and that the sequence
terminates in (very) finite time
Berlinsky (2000)
Algorithm is a finite procedure, written in a fixed symbolic vocabulary,
governed by precise instructions, moving in discrete steps, 1, 2, 3, . . .,
whose execution requires no insight, cleverness, intuition, intelligence, or
perspicuity, and that sooner or later comes to an end
11
Defensive Programming
Automation
Some aspects of programming can be automated
Many web interfaces to users/customers are automated, some are mainly
clerical
How many times did you have to retype correct web-page information
because 1 item further down was misspelled?
Learning: simple things can be automated, but even for those: Use good
programming principles, consistency, documentation, common sense
Focus
Programming the remaining portion, the hard problems, is a challenge
So automate what can and should be, and “manually” program the rest
See Richard Sites, main designer of Alpha processor [5]: “I rather write
programs that write programs than write programs!”
Future
Programmers will have great job security for some time to come
But like in all professions: The good ones will be in demand to craft new
works; others write web interfaces that clear out after 1 typo!
12
Defensive Programming
Don’t trust your interface; verify even if checks seem unnecessary!
The defined interface dictates your SW inputs, and specifies the
output your SW is to generate
Verify the accuracy of input, even your own
Generate messages where applicable and beneficial
May not work for embedded SW, space mission 200 Mio miles from
home; but appropriate default action may be meaningful
Don’t trust yourself; check instead!
Your “other” SW may generate your other inputs
And even you may make errors: check, verify, report, mistrust
Make “reports” of suspicious logic conditional, via #ifdef or
similar mechanism
Don’t be complacent; consider future enhancements!
Today your SW works perfectly for the given specification
Tomorrow the specification will change, and you need to adapt your
SW to modified requirements: Write maintainable SW
13
References
1.
The Humble Programmer:
http://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.ht
ml
2.
Algorithm Definitions:
http://en.wikipedia.org/wiki/Algorithm_characterizations
3.
Solvability:
http://www.cs.nott.ac.uk/~nxk/TEACHING/G53COM/G53COMLecture8.
pdf
4.
C. A. R. Hoare’s comment on readability:
http://www.eecs.berkeley.edu/~necula/cs263/handouts/hoarehints.pdf
5.
Dr Richard Sites’ phrase even on sweatshirt:
http://www.cafepress.com/+id_rather_write_programs_hooded_sweat
shirt,63975143
6.
Church-Turing Thesis: http://plato.stanford.edu/entries/church-turing/
7.
Linux design: http://www.livinginternet.com/i/iw_unix_gnulinux.htm
8.
Words of wisdom: http://www.cs.yale.edu/quotes.html
14