5 ms·
An important thing that articles like these miss when talking about the "fundamentals of computer science" is that a CS degree doesn't actually teach you of lot
by whiteboarder 11y ago
An important thing that articles like these miss when talking about the "fundamentals of computer science" is that a CS degree doesn't actually teach you of lot of the necessary fundamentals that people use in the real world.
For example, what about the fundamental of building a website, or building an app?
I'm not arguing that "colleges should teach students rails or X technology that will be outdated in 2 year".
I'm saying that colleges do not teach you a lot fundamental computer science concepts, such as "How do I design a scaleable rest API/website". Or "how do I use a MVC framework (regardless of which MVC framework it is)", or "What design decisions do I need to make when building a mobile app".
These are all very important concepts, that I use in my day to day job, and they have NOTHING to do with "learning hip technology X". These are problem solving fundamentals that colleges don't teach!
- jpmoral 11y agoThe concepts you mention are fundamental and important to web and mobile programming, but a lot less fundamental to CS. Programming != CS, and that's fine. We need CS to push the boundaries of what we know and can do, and we need programming for the day-to-day work. The trick is knowing what the overlap is for the position you need filled.
- davnicwil 11y ago> Programming != CS, and that's fine Can't agree more. When I took my first job after graduating with a CS degree, I often complained that my degree hadn't taught me really anything useful about how to program with real teams, building real things to real timescales. Some years later my opinion changed. Of course my CS degree didn't teach me these things, but nor should it have. It was partly a foundation in the principles behind programming, partly an education in how to think about problem solving on a fundamental, quite abstract level. The things I gained from it provided a great base from which to learn how to write software in industry, and whether I realise it consciously or not, everything I have learned and continue to learn is augmented with the knowledge of the fundamentals behind it, which is really, really valuable. My opinion, and I'm more than willing to be challenged on this by anyone with counter-examples, is that learning to write software in industry, with teams, huge-scale systems, bosses, and deadlines, can only be done on the job. It's not something that can be simulated in a university, and indeed one actually never stops learning even once in industry. Things that are helpful on the job can only really be learned the hard way, by doing the job, failing, and seeing that a better way exists for next time, in a similar situation. There's never such a thing as 'the right way', only 'the right way for this situation' - and there are too many permutations and edge cases on what that could mean to be taught in a structured way in a degree. Therefore I don't think universities should be in the business of even trying to accomplish this. They should be in the business of producing graduates who are able to learn professional programming with a broad and deep knowledge of the fundamentals as a base, which is a very valuable thing. I think what the GP is describing is more like an apprenticeship than a degree, and who knows, maybe that (combined with at least some study of the most directly-related fundamentals) could be one future path for learning programming as a young school-leaver, in lieu of going to university. Perhaps a four-year apprentice would be quicker out of the blocks in their first 'real job' than a 4-year CS degree grad, and perhaps that's a much better, more economically viable way to train new programmers for standard, forms over data style web development or application development work. My point is teaching to the job is a completely separate thing from learning the mathematical and logical underpinnings of CS from nearly first-principles, and should be approached as such. Let a CS degree be a CS degree, don't try to morph it into a programming apprenticeship.
- Volundr 11y agoWhat if I told you the fundamentals to building a website, a mobile app, and a desktop app were all the same? Because frankly, from my perspective, there's not much that's different. The same general techniques that work in any of the above will help you in any other. I'd hate to see a class like "MVC Frameworks" replace Databases or Operating Systems. I've never had anyone struggle to pick up MVC design in less than a few weeks, but writing an effective non-trivial database query? Definitely. Especially if it involves designing indexes to support it. A class like databases that covers the internals of how a database does it's job goes a long way in this regard. Classes like Distributed Systems and Parallel Programming give you the fundamentals on how to build a scalable system, be it a website or a large scale physics simulation. Frankly, the main piece I think they fall down on, testing, isn't even on your list, and some universities are working on that. I'm certainly not saying that a CS degree is the only path to being a developer. Heck, one of our devs is an Economics major hired as an analyst who just too sufficient interest in what we do to join the team. It seems like so many of the "fundamentals" being brought up here are "how to solve computing problems that are essentially the same as mine" instead of "how to solve computing problems". Maybe I'm just spoiled by the local university, but I've never had even an intern unable to make a meaningful contribution to our iOS app in the first couple weeks, having never seen Objective-C or iOS development before, so I don't think their lack of exposure is hurting them.
- gwright 11y agoYour comment, and many others, seem to make an unstated assumption that CS programs are all alike. To your point that a "CS degree doesn't actually teach you... [about] building a website, or building an app", I can only say that any number of classes that were part of my 1987 degree (Rochester Institute of Technology) are directly applicable: -- fundamentals of computer graphics -- data management (btrees, isam files...) -- networking and client/server programming -- analysis of algorithms (performance and optimization) -- discrete math (boolean logic, binary math, octal/decimal number systems) My degree gave me the tools to understand computing concepts and that has served me quite well even though most of the tools, languages, and hardware that I use today didn't even exist when I was in college.