Fang's Developer Den
Introduction
"Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers."Alan Perlis
There once was a master programmer who wrote unstructured programs. A novice programmer, seeking to imitate him, also began to write unstructured programs. When the novice asked the master to evaluate his progress, the master criticized him for writing unstructured programs, saying: "What is appropriate for the master is not appropriate for the novice. You must understand the Tao before transcending structure."Geoffrey James, "The Tao of Programming"
Top 20 replies by Programmers to Testers when their programs don't work 20. "That's weird..." 19. "It's never done that before." 18. "It worked yesterday." 17. "How is that possible?" 16. "It must be a hardware problem." 15. "What did you type in wrong to get it to crash?" 14. "There is something funky in your data." 13. "I haven't touched that module in weeks!" 12. "You must have the wrong version." 11. "It's just some unlucky coincidence." 10. "I can't test everything!" 9. "THIS can't be the source of THAT." 8. "It works, but it hasn't been tested." 7. "Somebody must have changed my code." 6. "Did you check for a virus on your system?" 5. "Even though it doesn't work, how does it feel? 4. "You can't use that version on your system." 3. "Why do you want to do it that way?" 2. "Where were you when the program blew up?" 1. "It works on my machine."
Editors
vi vim
Languages and Compilers
C++ awk
UNIX Tools
sh sed (GNU version) awk grep lex, flex yacc, bison
Build Tools
GNU make automake autoconf libtool (NEW: 2.2 released March, 2008!) home of the GNU Autobook, online manual, download POSIX make standard specsGNU Make
Tips (favorite options): pass -j# to parallelize jobs, an absolute must for multiprocessors, have sufficient RAM ready though pass -k to "keep going" continuing as far as possible with errors pass -r to turn off implicit and built-in rules, speeding up make algorithm (15% to 35% from experience) pass -d for debugging: detailed trace of algorithm execution For maximal compatibility, avoid GNU-specific features: %-pattern rules, function macros VPATH build: build in directory separate from source for 1) multiple configurations sharing same source 2) preventing accidental modifications polluting of source 3) simplifying cleaning build files, reduces source clutter 4) helps if makefile is configure-generated
Documentation
doxygen -- source documentation texinfo -- converts single .texi source to .info, DVI, PDF, PS, HTML
Revision Control
CVS Subversion (SVN) git Trac bugzilla
Compiler-writer tools
catalog.compilertools.net -- tons of stuff
Integrated Development Enviroments
vi vim -- vi improved
Articles
Teach Yourself Programming in Ten Years, by Peter Norvig
Links
The Graphing Calculator Story I will not throw paper airplanes in class The CommentatorEssays
Beware the GUI Builder
[back to Open Source] [back to main]