155 karma · joined February 25, 2013
Just my humble opinion..
If you have that kind of passion for software development, you'll do fine, regardless of your original degree (or lack thereof). Having said that, I'm skeptical of the value of a MS in CS without a BS in CS. In my MS program, the assumption was that you had the basics - algorithms, data structures, language theory, basic hardware design & logic, compiler design. You can certainly gain that knowledge with enough reading on your own, or taking some courses at a local community college to get the basics.
Language design has come a long way since the early 80's. His concerns back then were a programming language that would retain the performance of 'C' on most hardware and be straightforward to generate from 'C' code due to re-use of the 'C' syntax (the early C++ systems relied on converters that translated C++ to 'C'). Over time compilers were created to generate machine code straight from C++. When 4k was a lot of RAM, it made sense to focus on this; it still does if you're developing embedded software with very limited hardware. (FWIW, I've written software in C++ since 1990).
I'd argue hard that today, in most cases, and in particular in web applications, the issue is developer productivity. Today we're focusing more on expressing solutions in code that are much closer to the way that we think. Whether it's Ruby, F#, Scala, or Javascript, the tools we're using allow for more powerful solutions in far less code and complexity than C++.
Let the flames begin..
I find many of the interview puzzles that people have posted on the Web that they've encountered at the Big Name companies as often a bit silly. Having said that, asking software developers to implement a solution to a common programming problem - "navigating a tree using recursion", etc. is perfectly reasonable. I've found more than a few software devs who have great looking resumes but who have no idea what recursion is, what a tree is used for as a data structure, etc. And I consider this the basic, easy, 1st year undergrad type stuff.
If there's an undercurrent to all of the comments here, it's that we still don't really have a good way to sift through the good from the really-not-so-good developers quickly. The programming tests and puzzles are a proxy for this and they only work so far - some people like to think through issues more before coding, or tend to freeze under this on-the-spot pressure. Doesn't mean that they aren't a good, competent developer you'd want on your team; my experience is that the guys who blurt out very quick answers can sometimes write the worst code.
The better option when estimating is using a system that builds on relative comparisons between work items. We use "points" on a sliding scale. Not only does estimating get much more accurate - "We think that enhancement is about 2x as big as the one we just finished", but the estimation process is quicker.
What brings the point estimation system back to calendar time measures is mapping it to how many of those points of work are typically accomplished in a fixed amount of time - basically typical throughput. Knowing that throughout number, it's a quick calc to figure out how long it will take to complete the work. The throughput number also takes into account all of the little things that go on during the day that no one ever remembers to account for - restroom breaks, emails, phone calls, chit-chats with co-workers, etc.
I've never worked on a project that estimated things with the absolute (days, weeks, months, years) scale that was accurate and didn't require death-marches at the end. Conversely, I haven't worked on a relatively estimated project (points) that has been late or required anything like a death march to complete.
The other issue we don't have to face is any governmental enforcement of building codes (yet). When you install wiring in a building, you can't just run it however might be "cool" or "new". There are a variety of rules, that come from best practices developed over many years, that are followed. Imagine if before a client or a customer would accept a finished app if it had to pass inspection by a 3rd party for compliance with these "codes". I think we'd see a lot of the current state of development fall away pretty quickly. The newbies who won't take time to learn their craft, or quickly jump from new toy to new toy without learning any very well would be under pressure to change or leave the field.