DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones AWS Cloud
by AWS Developer Relations
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones
AWS Cloud
by AWS Developer Relations
The Latest "Software Integration: The Intersection of APIs, Microservices, and Cloud-Based Systems" Trend Report
Get the report

Programmer, know thy tools!

Mateusz Haligowski user avatar by
Mateusz Haligowski
·
Sep. 08, 14 · Interview
Like (2)
Save
Tweet
Share
42.79K Views

Join the DZone community and get the full member experience.

Join For Free

Being a programmer has undergone a lot of changes in a couple of recent years. The Agile Manifesto and the raise of the Software Craftsmanship changed the way a programmer thinks about his work. The process of creating software became more customer-centric, with accent put on ability to change quicky. This led to the importance of crafting quality code.

There was and still is some discussion on treating programming as a craft, with voices of such gurus as Martin Fowler or Uncle Bob Martin among others. Nevertheless, I still believe that just as any other professional should know his or her tools, programmers have their toolkits which they should be familiar with and continously improve in them. Can you imagine a carpenter who cannot use a hammer properly or a surgeon who is not really comfortable with a scalpel?

Keyboard

We're writing a ton in our careers. I don't mean only the code itself, but also code-surrounding activities like documentation. Finally, with more customer- and quality-oriented approach to programming you find yourself writing lots of minor pieces, like email exchange with the customer, comments on the code review etc.

Why on earth do I see so many software developers not touch typing? As typing on the keyboard is the most low-level skill required to do our job, I can hardly understand programmers who waste their time on finding the right keys and still making some mistakes. Typos are understable as long as you fix them immediately, but writing the whole paragraph and looking for the mistakes right after is a tremendous waste of time.

Do yourself some good and take some touch-typing lessons. They are usually free, and each lesson takes about 15 minutes. The progress you make then is worth the effort. I personally recommend Ratatype, with its easy-to-understand interface. The good thing is the ability to take simple speed test, so after you are done with the course, you can still measure your progress.

When talking about the keyboard, you should still remember about the appropriate hardware. I've seen people using some shiny and colourful keyboards, but guess what? They are horrible when it comes to typing. When you are using a laptop, you should still think of an external keyboard, even though some of the modern laptops have decent ones (Mac Book Pro, for instance). A good choice seem to be the mechanical keyboards (here's the guide), but I am just getting myself one.

IDE

Development environment is the most obvious software utility that a programmer uses. We've come a long way from using punchcards to productivity beasts like Visual Studio or IntelliJ IDEA. With the power, comes the level of complexity though. You can still use your IDE as a mere editing tool, but it's just like using a $2000 chef's knife to only cut your bread in the morning.

Once you decide to use one particular IDE for programming, be sure to know it well. Most of thems have a very efficient set of extensions that increase your productivity. I'm speaking here of: * keyboard shortcuts, so you don't have to use mouse * snippets, so you don't have to write the same code over and over * refactoring utilities, so you can make your code better with less effort

Any professional should know his tool well. Limit the use of mouse by using keyboard shortcuts, leverage the code assistant, use previously prepared snippets and templates, and refactor using the option provided. Not only will that improve your code quality, but also decrease the time you spend on writing a particular feature.

Then, one may ask what is the IDE that should use. The answer usualy is: the one that suits you well. Java IDEs (namely IntelliJ and Eclipse) are the most advanced I have seen, but that often comes with a price of performance. On the other side you have text power editors like vim or Emacs. From what you can find on screencasts, each one of them can be used with equal efficiency once mastered enough.

Libraries

Usually any programming language comes with a rich set of features and a standard library so that you can start having fun right away. But when a language gets more mature, the better ecosystem around it arises, along with accompanying tools and libraries.

Coming from the Java world, it is hard to imagine any greenfield project without JUnit, AssertJ and Guava. I just know that the tools are going to be used by me in most of the projects I participate in.

Obviously, this does not apply to Java only. The bottom line is that a developer should know what are the tools offered by the language, and by "tools" I mean testing libraries, utilities, web frameworks and database, among others. The more you know, the better.

Other tools

Being a programmer doesn't consist of programming only. The honorable mentions that you need to know are:

Git (and/or other SCMs)

You don't start a new project without creating a repository first nowadays. Even though simple for a basic usage, git (and other SCMs as well) offers lots of other features. You should be able to merge with solving the conficts, know the branching schemes, stashing, etc.

Command line

It's probably the reincarnation of "don't use the mouse" thing. Just learn to use your command line, whether it is the Windows cmd (why would you use it, though?), Unix-standard bash, Unix-hipster zsh or Windows-hipster cygwin. Embrace the power of your operating system at the tips of your fingers.

Automation software

There are literally thousands of options to automate and optimize your work. AutoHotKey for Windows, AppleScript for Mac, and surely a hundreds on Linux. Automate your dull tasks and concentrate on what's really worth.

To sum up: be a professional and know your tools. Don't waste your time on using the tools you work with in unefficient way. Always try to improve your workflow.

Programmer (hardware)

Published at DZone with permission of Mateusz Haligowski. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • How To Build a Spring Boot GraalVM Image
  • Getting a Private SSL Certificate Free of Cost
  • Top 5 Data Streaming Trends for 2023
  • What Is Advertised Kafka Address?

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: