Seth Bunce 2008-05-01 The Right Tool For the Job In this context the tool is a programming language and the job is the problem to be solved. Everyone knows this rule and how to apply it. The problem is not that people don't know the rule. Writing a paper about the rule will not further clarify the rule for anyone. Focusing on what the right tool for the job is is missing the point. Often the ideal right tool is not the practical right tool. The safe assumption will be made that all the tools in your shed are Turing Complete meaning they're all equally capable of computing any computable problem. The assumption will also be made that the problem is computable. These assumptions are so basic they're almost not worth stating but they do happen to be in direct contradiction to the idea of Linguistic Determinism as it's applied to programming languages. As such the idea of Linguistic Determinism will be considered wrong and will not be addressed further. There's a humorous saying that works for any programming language, "A good X programmer can program X in any language". This is not meant as a complement, it's meant to be ironic and to describe a "good" (meaning bad) programmer who refuses to adapt his thought process to take full advantage of the language he's working in. Programming languages encourage you to change how you think about solving problems in that particular languages offer easier ways of solving certain problems. This could be called shaping thought but that would be obfuscation of a very simple idea. The idea is that given two ways of solving a problem, both of which yield identical results, the easier way will naturally be chosen. The same idea applies between languages. For example, assume you had someone who was equally knowledgeable in two radically different languages. If you told this person to solve the same problem in each of the two languages they would naturally choose the easiest way in each language. However, the two solutions they come up with could be different. Pragmatically, picking the right tool isn't so clear cut. Choosing the right tool is not a function of the capability of the tool to solve a given problem, it's a function of your knowledge of the tool with respect to it's ability to solve a given problem. Meaning, if you don't know how to use the ideal right tool then perhaps a non-ideal tool is right for you. The solution, if you want to call it that, is to learn more languages. If you have more tools to select from then you're more likely to have a tool that is ideal to the problem.