Editor: Athens University of Economics TOOLS OF THE TRADE and Business, [email protected]

Software Development Tooling Information, Opinion, Guidelines, and Tools

Diomidis Spinellis and Stephanos Androutsellis-Theotokis

THIS COLUMN MARKS the end of a 10- tional guidelines, often in a “Best Prac- year period over which the Tools of the tices” section. The titles appearing at Trade department has been appearing in the gure’s center end with the issue and IEEE Software. As of the next issue, its volume number in which the column editor will be writing a department nearer appeared. to the magazine’s front page, so it seemed Figure 2 associates speci indica- like a good opportunity to summarize tive tools with corresponding elements what this column has presented over the (such as “Continuous integration”). years. This was done by rst organizing Search the Web for the names of a few the material into a mind map and then tools appearing together, and you’ll nd laying out the results in the two gures comparisons, extensive lists, and more that appear in the following pages. Both related material. Not all tools appearing gures also appear on the column’s blog in the gure were mentioned in the col- (www.spinellis.gr/tools) with hyperlinks umns, and many tools deserving a listing to each column’s text and in a format that are missing. Nevertheless, if none of the can be printed as a poster. tools in a speci c category rings a bell, Figure 1 categorizes the major points read the corresponding column to see of each column into information, opin- how you can bene t from them. , and prescriptive guidelines. The Back in 2005, the rst column in this information and opinion elements are series lamented our industry’s under- grouped into eight broad themes: design, spending on tool development. Ten years writing code, building, tooling, opera- and 60 installments later, it seems that tions, working with others, professional the rst column was overly pessimistic. Post your comments online advancement, and software process. We’re blessed with many powerful tools by visiting the column’s blog: The presented guidelines add debug- that can enhance our work’s quality and www.spinellis.gr/tools ging, performance, and avoiding errors our own productivity. The real challenge into the mix. Many columns offer addi- is getting to use them.

0740-7459/14/$31.00 © 2014 IEEE NOVEMBER/DECEMBER 2014 | IEEE SOFTWARE 21

s6too.indd 21 10/3/14 1:41 PM TOOLS OF THE TRADE

Tools of the Trade: A Ten-Year Recap

Dear Editor 22(2) Information & Opinion Inventive Tool Use to Comprehend Big Code 25(5) Guidelines The Way We Program 25(4) Code Documentation 27(4) Start with the Most Dif­cult Part 26(2) Effective code editing Getting the Most Out of the Web 28(1) Start with the most difcult part Follow style guidelines Writing code How to understand code elytS edoC 28(2) Commenting guidelines Refactoring on the Cheap 29(1) Check error returns Systems Software 30(3) Use simple interfaces Ef­cient use of the Web Writing code Tool Writing: A Forgotten Art? 22(4) Invest in deploying Refactoring on the cheap The Tools at Hand 22(1) and learning tools Tooling How to write Working with Unix Tools 22(6) Use at text-based les systems software Sometimes the Old Ways Are Best 25(6) Beware of vendor lock-in The importance of identi­ers Drawing Tools 26(3) Avoid friction Virtualize Me 29(5) Unix tools Contribute to open Professional Developing in the Cloud 31(2) source software advancement Declarative drawing Tool Building on the Shoulders of Others 26(1) Be polite Working Virtualization Using and Abusing XML 25(2) with others Cloud-based tools Project Asset Portability 23(1) Start bottom-up Build on the The Tools We Use 24(4) Work top-down Tooling shoulders of others The Frictionless Development Look at the generated code Environment Scorecard 30(6) XML Bespoke Infrastructures 31(1) Place code and data breakpoints Need for high-level tools The Gatekeeper's Guide, or How to Kill a Tool 23(6) Use remote debugging Debugging Bespoke infrastructures Open Source and Professional Advancement 23(5) Perform post-mortem debugging Tools require Job Security 26(5) Add logging statements management support Version Control Systems 22(5) Compare differences Professional Unmaintainable code 29(3) advancement won't get you job security Basic Etiquette of Technical Communication 26(6) Run under a proler Debuggers and Logging Frameworks 23(3) Use tracing tools Working Version control systems Performance with others Etiquette of technical Differential Debugging 30(5) Consider main-memory communication I Spy 24(2) approaches Build tools Software Builders 25(3) Building Use a high-level language Continuous integration Continuous Integration and Its Tools 31(3) Utilize options Domain-speci­c Farewell to Disks 27(6) languages Bug Busters 23(2) Perform static analysis Abstraction Software Tracks 27(2) Use assertions Avoiding A Pedagogical Framework for errors Variation Domain-Speci­c Languages 26(4) Set library ags Modularity Choosing a Programming Language 23(4) Introduce types It's About Time to Take Javascript (More) Seriously 27(3) Use domain-specic languages Declarative approaches Abstraction and Variation 24(5) Design Structure around Reuse and open On Paper 24(6) extensible architectures source components Easy parallelism Silver Bullets and Other Mysteries 24(3) Build process support Lessons from Space 28(6) Choose appropriate Scripting languages The Importance of Being Declarative 30(1) programming languages Rational metaprogramming Cracking Software Reuse 24(1) Draw on paper Code portability Choosing an Open Source License 27(1) Scrap unmaintainable code Choosing and Using Open Source Components 28(3) Keep code that works Software Agility drivers Package Management Systems 29(2) Design process Testing APIs, Libraries, and Code 29(6) Go for 80% UML, Everywhere 27(5) Leave safety margins Deployment advice Faking It 28(5) Standardize on UML System con­guration management tools Java Makes Scripting Languages Irrelevant? 22(3) Preserve architectural properties Operations Rational Metaprogramming 25(1) Virtualization Maintain backward compatibility Service Portability: Goodies vs. the Hair Shirt 30(4) orchestration tools Agility Drivers 28(4) Software Perform code and design reviews process First, Do No Harm 31(5) Don't Install Software by Hand 29(4) Virtualize Me 29(5) Service Orchestration with Rundeck 31(4)

FIGURE 1. Major points of each Tools of the Trade column. The information and opinion elements are grouped into eight broad themes: design, writing code, building, tooling, operations, working with others, professional advancement, and software process.

Acknowledgments The column editor gratefully acknowl- nos Christidis, Al Davis, Theodore Dou- Mark Murray, George V. Neville-Neil, edges the support of the following people, nas, Julian Elischer, Ruslan Ermilov, Ioannis Nikolaou, Panos Papadopoulos, who have contributed informal reviews Martin Fowler, Marios Fragkoulis, Jian- , Wes Peters, Nancy Pou- and insightful feedback over the past 10 nis Georgiadis, Robert Glass, Dimitris loudi, Vassilis Prevelakis, Linda Rising, years: Yiorgos Adamopoulos, Achilleas Glezos, Georgios Gousios, Junio C. Ha- Greg Schueler, Hellen C. Sharp, Dag- Anagnostopoulos, Dimitris Andreadis, mano, Poul-Henning Kamp, Panagiotis Erling Smørgrav, Henry Spencer, Kostas Phillip G. Armour, Giovanni Asproni, Kanavos, Vassilios Karakoidas, Isidor Stroggylos, Alexandra Vassiliou, Rob- Steve Berczuk, Grady Booch, Christian Kouvelas, George Kyriazis, Panagiotis ert N.M. Watson, Greg Wilson, Rebecca Brueffer, Wilko Bulte, Bryan Cantrill, Louridas, Christos KK Loverdos, Dimi- Wirfs-Brock, Alexios Zavras, and George Damianos Chatziantoniou, Konstanti- tris Mitropoulos, Marcel Moolenaar, M. Zouganelis. In addition, the column

22 IEEE SOFTWARE | WWW.COMPUTER.ORG/SOFTWARE | @IEEESOFTWARE

s6too.indd 22 10/3/14 1:41 PM TOOLS OF THE TRADE

Before you start coding (Information, Opinion, Guidelines) Draw on paper Reuse and open source components Easy parallelism XML Declarative drawing

- Paper Licenses: Package management systems: Language-based: Unix tools: Libraries: - XMLStarlet Graphviz - pic - netpbm - R Project: - Pencil - Apache - RPM - CPAN - CTAN - OpenMP - Clojure - Shell pipelines - ATLAS - xgawk . dot - gnuplot - PGF/TikZ . ggplot2 - Eraser - BSD - packages - MacPorts - MiKTeX - Scala - R/parallel - GNU parallel - Framewave - xsltproc . neato - GMT - ImageMagick . graphics - Color markers - GPL - Maven - - - Haskell - Erlang - xargs -P - Intel IPP . circo - UMLGraph - D3.js - Highlighters - LGPL - - CRAN - F# - sgsh - NAG Library for SMP . twopi - Inkscape - processing.org - MIT - FreeBSD Ports - NuGet - -j - QtConcurrent

Tools you want to be aware of

Unix tools Cloud-based tools (one from each category)

- ar - grep - strings Version control: Localization: Email: Issue tracking, project Collaborative editing: Payment processing: Continuous integration: Bulk email campaigns: - awk - head - tail - - Pootle - Gmail management, & collaboration: - Etherpad - Braintree - Bamboo - CampaignMonitor - comm - jar - - GitHub - Transifex - Outlook.com -Asana - Google Docs - Chargify - Cloudbees - Mailchimp - cut - javap - uniq Remote application - WebTranslateIt - Yahoo! Mail -Basecamp - Stypi - PayPal - Codeship - mailgun - dd - jot - wc monitoring: Real-time communication: work: -FogBugz - Microsoft Of ce 365 - Stripe Deployment servers: - Sendgrid - diff - less - wget -BugSense - Google Hangouts - Conuence -GitHub File sharing: Store fronts: - AWS A/B testing: - dumpbin - more - xargs -Crittercism - Grove.io - Bitbucket - - Box - Store - Google App Engine - Optimizely - fgrep - nm - yes -Exceptional - HipChat - GitHub -Pivotal Tracker - DropBox - - Heroku IT support: - nd - sed - Cygwin -New Relic - Skype Programming: - - Google Drive - Windows Store - Microsoft Azure - Desk.com - fmt - sort - Outwit -Sentry - sqwiggle - Cloud9 - - SkyDrive - Nodejitsu - Helpscout - VS Cloud -YouTrack - Rackspace - Zendesk

Writing code and building it Effective code Ef cient use How to write Scripting Continuous editing of the Web How to understand code systems software languages Build tools integration

- vim - - Eclipse Java Browsing - Source Insight - Tracing tools - select - JavaScript - Ant - Jenkins - Emacs - (Stack Over ow) Perspective - UMLGraph - Prolers - poll - - make - TeamCity - Your IDE - Google - Understand C++ - Debugger - Printouts - readv / writev - Python - Maven - Bamboo - Delicious - etags - Enterprise Architect - mmap - Ruby - CloudBees - Wikipedia - Rational Rose - Logging - Travis CI

Debugging & improving your code Add logging Perform code and Compare Refactoring on statements Perform static analysis design reviews Use tracing tools differences the cheap

- syslog - CheckStyle - FindBugs - ITS4 - Pylint - Crucible - APIS32 - ktrace - JConsole - md5sum - Edit - replace - util.logging - Clang - Flawnder - JLint - RATS - Differential () - Application - ltrace - truss - dumpbin - sed -i - log4j - Coverity Code - Frama-C - Lint4J - Rational - Gerrit Verier - NProf - valgrind - nm - nd | sed | sh - Boost.Log Advisor - FxCop - PC-Lint AppScan - Kiln - DTrace - strace - Wireshark - md5sum - print - devAdvantage - HP Fortify - PMD - Splint - Review Board - EJP - SystemTap - ldd - ESC/Java2 - Intel - PVS-Studio - Rietveld - gcov - tcpdump - diff - Eclipse Codan Inspector - gprof - TracePlus - git bisect

Operations Working with others System con guration Service Virtualization management tools orchestration Version control systems

- Vagrant - Xen - AWS EC2 - Ansible - Puppet - Capistrano - MCollective - BitKeeper - Darcs - Subversion - Docker - KVM - Boxen - Salt - Fabric - Rundeck - ClearCase - - Vault - VMware - QEMU - Chef - Func - Git - Monotone - Visual SourceSafe - VirtualBox - SUSE Studio - CFEngine - Knife - Bazaar -

FIGURE 2. Themes and tools. Not all tools appearing in the gure were mentioned in the columns, and many tools deserving a listing are missing.

would not have been possible without the it through their terms as the magazine’s STEPHANOS ANDROUTSELLIS- dedication and support of the IEEE Com- editor in chief. THEOTOKIS studied at Imperial College Lon- puter Society staff, in particular, Brian don, Johns Hopkins University, and the Athens is a professor in the Brannon, Brooke Miner, Crystal Shif, DIOMIDIS SPINELLIS University of Economics and Business. He is a Department of Management Science and Tech- Jennifer Stout, Dale Strok, Dennis Tay- software engineer. lor, and Jennie Zhu-Mai. Finally, the edi- nology at the Athens University of Economics tor wholeheartedly thanks Warren Harri- and Business and the author of the books Code See www.computer.org/software son for providing him the opportunity to Reading and Code Quality: The Open Source Per- -multimedia for multimedia write this column, as well as Hakan Er- spective (Addison-Wesley, 2003, 2006). Contact content related to this article. dogmus and Forrest Schull for supporting him at [email protected].

NOVEMBER/DECEMBER 2014 | IEEE SOFTWARE 23

s6too.indd 23 10/3/14 1:41 PM