3 ms·
Well really the issue is that the field needs to be split. I too once thought my CS undergrad was worthless because it was all this theory and no practice (at
by Xichekolas 17y ago
Well really the issue is that the field needs to be split.
I too once thought my CS undergrad was worthless because it was all this theory and no practice (at least not practice at inheriting bad code, improving it, and leaving good code to someone else). But really the problem was that I went into CS thinking I was going to get a degree in Software Engineering. They are in fact very different things, and should be different degrees in my opinion.
Just like there is a different degree for Math and Accounting, or Architecture and Architectural Engineering, there is a pretty big gap between CS and Software Engineering. Of course they have things in common, and could share many introductory classes, but separating them would make it more clear up front what you are getting yourself into, and make it more clear at the end what you actually learned.
That said, I'm glad that separation hadn't happened when I was an undergrad. I went into college thinking that I wanted to be a Software Engineer, and was fairly disappointed to 'waste all my time' on this theory stuff. But now, a few years after graduating, I find the theory much more engaging, and am going back to grad school for more of it. If I had had the option of a Software Engineering degree when I started, I might never have discovered the fun that is CS.
- scott_s 17y agoI agree, but I'm not sure if the field of Software Engineering is ready yet for us to split the degrees. For example, see the ACM's position from 2000 on licensing Software Engineers: http://www.cs.wm.edu/~coppit/csci690-spring2004/papers/selep_main.pdf http://www.cs.wm.edu/~coppit/csci690-spring2004/papers/selep...
- Xichekolas 17y agoProbably true. As others have pointed out, the best way to learn this stuff is to do it, hopefully with a mentor to speed you along. If you are going to learn that way, you might as well earn a paycheck at a company rather than paying tuition to a University. If you were setting up a Software Engineering degree, one good route might be to partner with some local company. They get cheap work, and the students get real world experience and access to mentors (senior people at the company) to rapidly improve their abilities. Courses would probably center around languages and classes of tools (Introduction to Source Control Management, Introduction to Automated Testing), and, like Architecture, lots and lots of studio time.
- ja27 17y agoIt's getting closer. The "body of knowledge" today is substantially improved over 2000. Just look how far design patterns have come in that time. End-user expectations are also climbing higher, especially for enterprise customers that have been burned by failed projects.
- jseliger 17y agoJoel Spolsky has also argued for this: "I think the solution would be to create a programming-intensive BFA in Software Development--a Julliard for programmers. Such a program would consist of a practical studio requirement developing significant works of software on teams with very experienced teachers, with a sprinkling of liberal arts classes for balance. It would be a huge magnet to the talented high school kids who love programming, but can't get excited about proving theorums. When I said BFA, Bachelor of Fine Arts, I meant it: software development is an art, and the existing Computer Science education, where you're expected to learn a few things about NP completeness and Quicksort is singularly inadequate to training students how to develop software." See more here: http://www.joelonsoftware.com/items/2008/01/08.html http://www.joelonsoftware.com/items/2008/01/08.html
- ja27 17y agoExactly. I see "Computer Science" degrees being used for 3 distinct purposes. First is what I consider the primary use for a CS degree: researching the science of computing. This includes all the specialties, from AI to Algorithms to Databases to whatever, but it's different than the next two. A true CS major should primarily be a research scientist but possibly a software architect. Chances are good that a BS CS isn't that employable in that role and would require graduate school for more depth. Then there's software engineers that specialize in designing and delivering software. There's certainly some overlap with the CS degree coursework. Then there are computer programmers that just write code. These don't need a 4-year degree. They could be trained at junior colleges or even modern trade schools. So if I compare that three-fold path to electronics, the CS degree is closer to a degree in physics, the software engineering degree is closer to a EE degree, and the computer programmer went to soldering school (or was trained on a wave solder machine). EE students take physics classes, but then branch off into "applied physics" specialties.
- timwiseman 17y agoI entirely agree. One thing to add though: Then there are computer programmers that just write code. These don't need a 4-year degree. They could be trained at junior colleges or even modern trade schools. This already happens. Lots of junior colleges and specialized trade schools will teach this. I also know several good programmers that are entirely self taught (or similarly, taught by a mentor). Personally, I transitioned to software design after getting a degree in math. It is certainly a related field, but I made the jump through self study of the practical aspects and picking up a couple of certifications just to help with HR.
- aidenn0 17y agoThe danger here is the temptation to neglect some of the CS things that are important. Analysis of algorithms is one of those things that is super important, yet it requires some discrete math and theory of computation. Strangely enough, the classes that were most useful to me now as a developer were the more theory oriented ones. The "real-world" type classes were all either out-of-date or just too ivory tower to apply.