Re:Ask HN: What is the advantage of a formal CS degree for ...
by hga on Sunday April 18, 2010 @08:02AM
(#1274720)
Maybe ... there's still a big difference between a manager/leader who can do the tech involved and one who can't. Earning the respect of those underneath you and being able to really understand what they are doing (or most of what they're doing) is important.
Let's put it this way, if two of your programmers are recommencing different approaches and O(whatever) is relevant, you'd best know that and why! (And yes, seriously, I've seen one major software client/server project fail due to a new manager coming from a single user CD-ROM application environment and just not being able to grok scaling, which is after all inescapable for almost all modern interesting projects today). Doing 6.001/SICP plus following up on a few things in it you find interesting might be all the CS foundation you really need, though (well, you should study some systems stuff including security as well).
But your point about Software Engineering is well taken; only so much of that is taught in a normal CS curriculum, it's something that needs serious independent study (something I myself started doing a few months into my first programming experience (in high school) and never stopped). Read with attention to detail the 20th anniversary edition of The Mythical Man Month, The Pragmatic Programmer, Peopleware, the Antipatterns book, something that looks relevant by Gerald Weinberg and a methodology book (I prefer The Unified Software Development Process or, now, look for the latest iteration of it (but I suspect you need at least one experienced programmer to make it work), or you could go explicitly agile) and then go from there.
(Even Weinberg ancient classic The Psychology of Computer Programming is still somewhat relevant: I still use the anecdote about two people or teams working on a card reading module. One had a slow one that worked, the other was more ambitious but just couldn't get their version to work. When the latter challenged the former on speed, the former said, "Well, if it doesn't have to work I can make our version really fast." :-)
Let's put it this way, if two of your programmers are recommencing different approaches and O(whatever) is relevant, you'd best know that and why! (And yes, seriously, I've seen one major software client/server project fail due to a new manager coming from a single user CD-ROM application environment and just not being able to grok scaling, which is after all inescapable for almost all modern interesting projects today). Doing 6.001/SICP plus following up on a few things in it you find interesting might be all the CS foundation you really need, though (well, you should study some systems stuff including security as well).
But your point about Software Engineering is well taken; only so much of that is taught in a normal CS curriculum, it's something that needs serious independent study (something I myself started doing a few months into my first programming experience (in high school) and never stopped). Read with attention to detail the 20th anniversary edition of The Mythical Man Month, The Pragmatic Programmer, Peopleware, the Antipatterns book, something that looks relevant by Gerald Weinberg and a methodology book (I prefer The Unified Software Development Process or, now, look for the latest iteration of it (but I suspect you need at least one experienced programmer to make it work), or you could go explicitly agile) and then go from there.
(Even Weinberg ancient classic The Psychology of Computer Programming is still somewhat relevant: I still use the anecdote about two people or teams working on a card reading module. One had a slow one that worked, the other was more ambitious but just couldn't get their version to work. When the latter challenged the former on speed, the former said, "Well, if it doesn't have to work I can make our version really fast." :-)