As I read over my posting from late last week and thought about this situation a bit more, I kept coming back to the term I used in the title of this posting - skills portability. I believe that application development teams will be challenged increasingly to be able to move, quickly, from project to project and from application source code base to source code base with ease, precision, and speed. In such an environment, teams and individuals will need to be multi-lingual (programming languages), multi-platform, and multi-environment savvy. These teams will have to switch from environment to environment to perform their designated tasks. In this way, these teams will have to be able to adapt their skills to different environments, thus requiring portable skills or the virtue of skills portability.
How is this possible? Does the current computer engineering or computer science curriculum emphasize such skills development? Is there a set of educational materials or exercises that will hone such skills? I think that the answers to these questions lie not in the specific courses that students take, but in the ways in which the courses are taught, the tools and environments used for projects and homework during the classes, and the emphasis on tool usage that is made both during education and on-the-job training that takes place during internships and in a permanent position.
There seems to be something of a quantum gap between "heavy tool users" (those that rely heavily on the capabilities of an integrated development environment (IDE), build automation tools, and emulation/test environments) and "command-line users" (those that are masters of arcane commands such as 'ls', 'mv', 'find', 'grep', 'make', and so on). For a person to move from one of those environments to the other is quite an effort. Everything is different. Seemingly simple tasks turn into hours of drudgery or Internet searching to find the answer. Even moving between different command-line environments can be a challenge. Commands are different, options are different, and editor styles and features vary widely.
Moving between different platforms, languages, and environments when using an IDE, however, seems to be quite a bit easier - even if the IDE is different from one the user has used in the past. A user of and IDE is already familiar with the need to "hunt around" through the menu bar or context menus to find an appropriate task. Users expect fly-over help and visual cues to guide them in "doing the right thing". In this way, I have found that users of IDEs wind up being able to transfer their skills between multiple languages, platforms, and runtime environments much more quickly and effectively than those who are experts in the particular command-line tools of the particular platforms that they are used to using.
In summary, for skills portability, I encourage teams and individuals to take that quantum leap into learning and using an integrated development environment (IDE). It will be painfully slow for the first several uses. But you will make back that investment in time saved, precision, and the ability to apply your skills to a wider platform and runtime environment set that otherwise possible.