Это старая версия документа.
Эффективный программинг
Linux/bash
- navigate with pushd <path>, 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" {} \;<\code> ===== Eclipse ===== * use shortcuts list (Ctrl+Shift+L) * use Key Promoter plugin. Help-Install New Software -> http://update.mousefeed.com/ * cool shortcuts:<code> Ctrl-Shift-T Goto to class (use capitals) Ctrl-Shift-R Goto to file Ctrl-O Symbol list Ctrl-J Incremental search Ctrl-E Recently edited files Alt-Shift-L Introduce variable Alt-Shift-Up Escalating selection
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)