And... why it isn't always the best...
Perl developers will tell you that, it is hard to learn, but once you learn it is hard to go back. I find that with lots of tools, and here is the list...
But wait... why not the best ?
It is very hard to move between tools and learn tools. You can not learn them all. And even if you can, you won't be an expert in any.
I think that learning a new tool each year is a minimum. But choosing can still be hard.
So here is my list... the ones I think you should consider. And remember it is the list I have experience with. Time permitting I will add my To Consider list - those things I don't have experience with but need to.
It doesn't matter what... it is worth learning the command line. Everything is faster, more powerful, each tool works with each other.
Try something simple like, "cp image.png output/YourProgram/". Now it returns no directory, so you type "mkdir -p output/YourProgram" - then you just hit up arrow twice and enter. Try repeating anything you have done in the past with a GUI !
Things work nicely together though. I find I go to the gui file manager when I want to visualize and rename file, especially large lists like managing movies.
Learn SQL. Don't wrap it. If you want to do just CRUD then you don't really need SQL database, but if you want a relational database, SQL is your friend.
It was not unusual to write queries that were 4+ pages long,
These days MySQL has improved so much, especially thanks to InnoDB that it is close enough for most projects I work on, and if I work with a developer that prefers MySQL I don't argue.
Use a site like  to compare the features.
My general guide would be:
- Simple local databases, or unrelated sets of data - SQLite
- High availability, High speed, mostly simple data quereis, lots of updates - MySQL
- High data integrity, complex relationships, complex queries - PostgreSQL
This is a massive oversimplification.
Need to read/write or manipulate XML - XSL really is the easiest way. If you are doing just basic reads, try XPath.
One reason that learning XSL is a good idea is that it is a declaritive language, which is worth learning.
It is amazing how often you can reuse techniques which are standard in one language are useful in another.
RE, although part of many languages today, are their own language. You need to learn them to take advantage of them, and you will find you can process text so much easier.
The true portable language. If you are doing any embedded programming, I think you should consider C++ first.
Sometimes things should be simple. Sometimes things should just work.
Simple things should be simple, Hard things should be possible.
GIT is the most advanced version control system I have used. It blows away any other system. Almost every other system I have used (commercial ones I won't mention; RCS, CVS, Subversion) have made the hard things either very hard (merge, branch, cherry pick, change commit, bisect, ...) or completely impossible.
GIT has made the hard things relatively easy.
BUT... it has made the easy things hard. Not sure how to solve that dilemma.
There are some great IDEs.
Some tools you should learn because they are everywhere. Some new make tools are excellent, and you should use and consider them, but learn Make.
- Rules - at least a basic set of converting one extension to another
- General formatting - you have to use tabs
- Dealing with lists of files - e.g. how to convert *.svg to *.png, or more complicated
The why not
Here is some arguments why it is not worth learning the best tool.