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?
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.
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.
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.
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.
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.
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.