I really have to disagree with the disparagement of vim/scp at the beginning. It's a bit slower to start if you begin with command-line tools, but the dividends payed out by learning the standard command-line utilities are huge. Learning the command-line utilities means you have the tool-set to build your own tool-set; since it's a lot easier to using CLI tools as building blocks for larger tools. At both of the last…
> I think CS curricula should have a class that focuses specifically on these issues, on the matter of how do you actually write software?
Are you really opposed to "a class" on writing software being included in CS curricula? CS courses have plenty of writing software.