Invest in your own toolset
After trade school, a mechanic needs to obtain their own set of tools. Garages only provide big equipment, such as lifts. Mechanics bring tools that they prefer/can afford to put in their toolbox.
Likewise, software development shops do not dictate required tools to engineers. Both occupations defer the tool selection to the workers. These workers must settle between obtaining quality tools and paying affordable prices. This carte blanche custom promotes mastery of tools that are pervasive throught a career.
Some tools endure
The lifspan of applicability varies amongst different tools. Some are brief trends while others linger for decades. It is wise to strive for mastery of matured tools. They have proven their value, and will endure long enough for users to reach an expert level.
This article describes 10 software programs that all developers should master. They are free, applicable to many jobs, and maintained by mature open source projects. Striving to master these tools will pay off over an entire career.
Here is my shortlist of tools:
Mechanics rely on the wrench to adjust and fasten many things. Like wrenches, vi enables quick refinement of components.
Vi is a text editor. Most *nix boxes have vi installed. A vi user can edit files notwithstanding the box's configuration. Most text editors require additional installation which is sometimes out of scope.
Additionally, vi has a reputation of making text editing breathtakingly efficient. Because of this, many developers, including myself, use vim ( vi iMproved ) as their day to day editor.
Knowing basic vi commands saves time and frustration when using an alien machine. At a minimum, learn to insert text, save/quit, and move around.
- beginner: Complete the first quarter of
$ vitutorwithin a terminal.
- yannesposito wrote the best vim overview post I have ever seen. It covers everything you need to know
- intermediate: Practical Vim: Edit Text at the Speed of Thought (Pragmatic Programmers)
Oil keeps tools and parts lubricated and reduces friction. Regular Expressions serve the same purpose for software developers.
Regular Expressions, or regexes, are a sophisticated method for pattern matching. Regex is supported in most tools and programming languages. Advanced usage of many tools involves the application of regexes.
Regexes improve code quality, and speed up debugging.
Debugging combines finding problems and solving them.
Regex mastery enables brisk detection of code blocks, thus decreasing work time.
In code, regexes are commonly used to determine string format.
For example, the regex:
^\$?[0-9,]+(\.[0-9]+)?$, matches any valid US currency.
- Regular Expressions Cookbook is explicative, but slow for beginners.
- Section 4.2 in Textmate: Power Editing for the Mac did a better job at explaining regexes.
- (in vi)
:h usr_27.txt, is great to remember because its extensive, and vi can always be accessed.
Basic GNU Tools
A mechanic's toolbox contains various types of hand tools. Some are versitile, while others have niche uses. GNU Tools fufill a similar function for developers.
GNU Tools are often more performant than solutions in proprietary IDEs, or hand made scripts. They are free, and the source code is publicly available. This makes GNU Tools stable, performant, available and reliable.
Most simple tasks can be performed with just a chain of GNU commands. Each GNU command handles a specific task very well. Many of these small tasks can be combined to complete a larger task.
The following example outputs word frequency of a file:
$ cat filename | tr ' ' '\n' | sort | uniq -ci | sort ... 2 mode 3 prefix 3 the
With some practice, command like this can be easily created. Here are the steps: grab the file; print each word on a single line; alphabetically sort the lines; combine and count duplicates; sort by count
- All developers must own Unix Power Tools
- In the beginning there was the command line.
- Taco Bell Programming
- Read man pages, you will be surprised at the breadth of certain commands (e.g. man find; man curl; man grep)
Jacks hoist up vehicles, so they can be inspected from all angles. Similarly, bash lets developers view code from different vantage points.
Bash is part of the GNU project, but is so paramount that it deserves its own section. The Bash shell proxies between users and commands ( e.g. GNU Tools). Bash experts perform tasks swiftly and painlessly.
There are many alternatives shells out there. However, bash's differentiating feature is its prevailence on most *nix distributions. As such, all developers benefit from knowing bash even if they use another shell on their machine.
- The Bash Cookbook teaches both basic and advanced features.
- "Best JS Resource Ever" ~ Paul Pucciarelli
> Air compressors serve many purposes for mechanics. > They fill tires, clean working areas, and can power tools like air drills. > Emacs serves many puposes for developers.
Emacs is not a text editor, it is a LISP interprater that houses a text editing mode. Emacs has many other modes that make it useful including: project management mode, emulation ( consoles, REPLS, vi)...
> OBD Interface Scanners read diagnostics of a vehicle. > SQL can take readings on an application's data.
Modern applications generally use SQL databases to house a major portion of data. I have seen senior level developers join a team, and begin contributing immediately. They ramp up business context by poking around the SQL database. This knowledge enables them to contribute to big picture conversations.
There are many flavors of SQL databases, but all comprehend vanilla SQL. They differ only in implementation of exotic features. With a strong foundation in SQL, learning any dialect will be a breeze.
> A lever amplifies an input force to provide a greater output force. > Markdown lets developers get greater output (HTML) from basically writing plain text.
Markdown is simple, but it packs a mean productivity punch. Jekyll uses it to render blog posts (see how my blog runs). It is also terse enough to quickly decorate an email (check out MarkdownHere for Chrome).
Amazing speed gains come when writing documentation in Markdown. Its syntax makes it painless to quickly produce documentation. Thats why Github offers it for README files.
- Markdown Tutorial is an interactive site that teaches markdown.
- The Github Tutorial is how I learned Markdown.
> Clamps hold loose components in place. > Tmux clamps terminal sessions, so developers can multitask or return to a session later.
Tmux is a modern incarnation of the GNU Screen program.
- It can improve the stability, and increase the execution speed of workflows.
- It enables visualization of problems in a new way.
- It is easy to install, and works on most *nix platforms.
Tmux can manage multiple sessions at the same time. Within each session, any number of windows can be created. Windows can also be split into both vertical and horizontal panes. Tmux can be controlled by scripts, and automate repetitive workflow tasks.
- Read my article for an in depth description of tmux.
- Pragmatic Programming - Tmux that takes about two weeks to read / get up to speed ( this is how I learned tmux )
- My videos will let you start using tmux immediately, and gradually show more features as time goes on.
> Mechanics plan and analyze their next move with a tape measure. > R enables developers to plan by analyzing reference data.
R is a non-gui, lightweight, free version of Microsoft Excel. Despite its high learning curve, R is powerful and terse.
In just a few commands, R can crunch professional level statistics. R does the heavy lifting, and abstracts mathematical calculations. R simplifies statistics down to analyzing results.
I monitor stats about my working habits with R. I have many random data points that I collect periodically, and let R conjure up some comparisons for me. This is a simple use, but R can do much more sophisticated statistics.
- A great general into to R: The Art of R Programming: A Tour of Statistical Software Design
- I always like cookbooks: R Cookbook (O'Reilly Cookbooks)
- My general reference, since I do a lot of graphs: R Graph Cookbook
Focusing on fundamental skills creates a latticework in which one can develop throughout their career. Recent college grads will plump up their resume, and strengthen their foundational skills. Veterans can always learn new tricks that will make them work more productively.
It can take up to 10 years to become an expert at something.
The (Beatles) had been playing in clubs since 1957. Ten years before Sgt. Pepper’s, their first critically successful album.
And obviously, even masters always have more to learn.
Please feel free to comment on other skills you think are foundational for developers.