====== Эффективный программинг ====== ===== Linux/bash ===== * navigate with pushd , popd * drag objects from Nautilus to terminal * use vars denis@denishp2-ub:/$ a='cd /etc' denis@denishp2-ub:/$ echo $a cd /etc denis@denishp2-ub:/$ $a denis@denishp2-ub:/etc$ * use ''~/.bash_aliases'' (create if doesn't exist) alias robo='cd ~/PrjEclipse/jroboplc' * use Groovy as alternative to bash * use Ruby as alternative to bash Useful findings: * find and replace text in group of files: find . -type f -exec sed -i "s/old_text/new_text/g" {} \; ===== Automation ===== * Gant (build tool) http://gant.codehaus.org/ * Gradle (build tool) http://www.gradle.org/ * Selenium (web applications testing) ===== Codewriting ===== * plenty of short methods against few huge ones. Three lines of code for a method doesn't take much time to figure out what that method does. If you put lots of comments into your method it is a sign to split it up. * FindBugs - static analysis tool (java) * PMD - source analysis tool (java) * Panopticode - bunch of analysis tools (java) * Cuberture - static analysis (java/groovy) ===== Points ===== * Prefer typing over mousing. * Take the time to learn all the hidden keyboard shortcuts of your universe. * For any symmetric operation on multiple lines of text, find a pattern and record a macro. * Don’t type the same commands over and over again. * Spend a little time each day to make every day more productive. * Replace file hierarchies with search. * Don’t spend time doing by hand what you can automate. * Performing simple, repetitive tasks squanders your concentration. * Timebox speculative development. * Use virtualization to canonicalize dependencies for your projects. * Out-of-date documentation is worse than none because it is actively misleading. * Always keep “living” documentation. * Whiteboard + digital camera trumps a CASE tool. * Repetition is the single most diminishing force in software development. * Testing is the engineering rigor of software development. * Refactor comments to methods. * Static analysis tools represent cheap verification. * Don’t create global variables, even the object kind. * YAGNI - “YOU AIN’T GONNA NEED IT” * Don’t pay complexity tax unless you absolutely must. * Maximize work on essential complexity; kill accidental complexity. * Don’t pay complexity tax unless you absolutely must. * Encapsulate all implementation details away from public methods. * Find your perfect editor and learn it inside and out. * Good knowledge of regular expressions can save orders of magnitude of effort. * Use a “real” scripting language for automation chores. * Keep knowledge as plain text ===== Books ===== * "The Mythical Man-Month" * Hunt and Thomas’s "The Pragmatic Programmer" (Addison-Wesley) * Beck’s "Smalltalk Best Practice Patterns" (Prentice Hall)