9 ms·
I remember one of the first realizations I made as an undergrad was that CS != code. I think this book does a good job of removing the two from the beginning, a
by elldoubleyew 6y ago
I remember one of the first realizations I made as an undergrad was that CS != code. I think this book does a good job of removing the two from the beginning, and it would have been useful for me to have instruction like this when I started learning.
Later on I realized that most jobs that ask for a CS degree don't actually have you doing any computer science. More often you are glueing together tools or writing a bunch of boring business logic for some specific application at best. At worst you are maintaining an old monolith trying to figure out someones logic from 15 years ago.
Having a CS background in most software jobs is useful in the same way having a chemistry background is useful to someone working as a nurse. Sure there will be situations where that knowledge might help you make a connection more quickly, but you're sure as hell not a chemist.
- coldpie 6y agoYeah I wish this distinction was better communicated. I wouldn't have wasted four years and thousands of dollars on a CS degree if I'd known it wouldn't make me a better programmer. Going to college is one of the biggest regrets I have in my life.
- otachack 6y agoIf it's any reassurance, I believe CS degrees do make us better programmers than those without them. At the least, we picked up concepts that "just programmers" would have had to learn on the side. As for the whole school cost, that's a different story, but we landed in a lucrative field where we can pay off the debt, compared to a ton of others that have no hope to without a career pivot.
- coldpie 6y ago> I believe CS degrees do make us better programmers than those without them Maybe, but I can't really think of much that I learned in college that I have ever used since then. Everything a typical programmer does can be learned with just a textbook and/or the Internet. Beyond that, it's just years of practice and continual improvement, which you won't get in school. All the CS classes I took (DFAs, state machines, Turing machines, programming language theory) were a complete waste of time for a programmer, and the actual useful stuff (programming courses, systems architecture, networking) I picked up in my free time in middle/high school. I'm sure it's all great stuff if you want to be a computer scientist, but I didn't and don't. I think the only classes I took in school that I consider useful and that would have been challenging to pick up on my own were the coding theory[1] and intro to crypto classes. That's pretty poor showing for four years and a ton of cash. [1] Not programming, but number theory stuff, basis for cryptography https://en.wikipedia.org/wiki/Coding_theory https://en.wikipedia.org/wiki/Coding_theory
- IdiocyInAction 6y agoI personally think the most relevant courses I took were an OS course (I don't write operating systems, but knowing how they work can be very important) and algorithms come up rarely, but still sometimes. I also had a networking course that I definitely benefited from. Generally, I am quite pleased with my education.
- Kalium 6y ago> Everything a typical programmer does can be learned with just a textbook and/or the Internet. You are absolutely right. Literally every single thing a programmer does, every bit of information they use, and every other thing they might use or need to know can be found beyond the ivory tower. It's all there. In fact, often the problem is less getting information and more figuring out what information is relevant. Is it possible that some people may find value in a structured educational process? One that has already organized and worked out how to teach the fundamentals? I suspect that many people, pointed at the internet in general, may experience some difficulty in figuring out what to study and in what order. As for material, I've personally found DFAs, FSMs, algorithmic analysis, and an understanding of computer architecture to be valuable to my career. I found a lot of basic theory useless, until I encountered cryptography that required me to understand a lot of theory to grasp fully. Obviously, personal mileage can, does, and will vary greatly.
- coldpie 6y agoI think we largely agree. Perhaps what's needed is for employers to stop requesting CS degrees for programming jobs, and instead have some kind of programming certification process, and accompanying courses to prep one for that certification. Then we can dispense with the theory that is useless for 90% of programmers, and stop making CS lecturers teach C++.
- Kalium 6y agoWhat specific skills do you think should be tested for in this certification process that you imagine? It's been my experience that a CS degree is used as a certification for a broad array of fundamental skills. A lot of theory is, as you say, useless most of the time. But sometimes it can be important to have a grasp of how hash algorithms work under the hood. Though how well this degree-as-certification idea actually works is open to debate. I've definitely seen it fail. It's been my experience that it's rarely obvious to people operating in ignorance when a grasp of theory would make a big difference. This can make it challenging to fall back on the model of looking up information as needed.
- jclos 6y agoIf your CS degree didn't make you a better programmer you should specifically be mad at your university more than about the distinction between CS and software engineering. A well-rounded CS degree will absolutely make you a better programmer, but it won't make you a good programmer. The only thing that can do that is doing actual programming.
- coldpie 6y agoYeah totally possible my university sucked (University of Minnesota in the late 2000s). One of my professors thought 0x1 stood for "0 and then a bunch of stuff that doesn't matter and then 1". I stopped attending his classes.
- cbdumas 6y ago> At worst you are maintaining an old monolith trying to figure out someones logic from 15 years ago. Can you imagine what it will be like 15 years from now, when we're trying to maintain someone's microservices with their logic smeared out across dozens of distributed API calls, storage backends, and code bases?
- einpoklum 6y agoThat in itself will not be a terrible problem. If it's well-documented at the macro an micro level, and if those micro-services are coded according to the "principle of least astonishment" - it will likely be easier than some million-line code silo. B-U-T... All those if's probably don't hold. Good luck, future code monkeys!
- BossingAround 6y ago> If it's well-documented Well-documented is the biggest lie of any project. Unless you document it that is, in which case it's the only well-documented project.
- esmi 6y agoMy code is perfectly documented. I just choose to write my documentation in c++. :)
- Koshkin 6y agoSure... It’s just that C++ is not the best language to write documentation in.
- BossingAround 6y agoAh, I might be mistaken... The biggest lie might not be "it's well documented," but "it's self documenting" :))
- watwut 6y agoIf million-line code silo is well-documented at the macro an micro level and coded according to the "principle of least astonishment", it will be easy to maintain too.
- paxys 6y agoThis is pretty standard in every field out there. If you want to learn how to do a specific job you go to trade school, do an apprenticeship or really just get a foot in and learn on the job. University education is for theory and research.
- avmich 6y ago> University education is for theory and research. There are two immediate counter-arguments to this. First, you don't go to the university to learn how to do something which you're going to do at a job, but you go there to get education, and that's quite useful for both professors and practitioners alike. Getting education is a wider idea; it's a mind training to deal with variety of problems, including lack of education, in any area. Second, sometimes you're reminded that there is nothing more practical than a good theory. Ken Thompson's regex matching engine is one of illustrations of the concept; but in general, many things you learn at a workplace are specific and temporary (adjusted to current conditions) while many things you learn in university are permanent and general, even though they can look differently in different applications.
- bregma 6y agoVery little of what I learned at university was taught in classrooms.
- jclos 6y agoUniversity education is pretty much what you put into it. If you sit and wait for knowledge to be spoonfed you will get theory and research, because that's the only thing that can be learned that way. If you take a more active part in your education you will absolutely get a lot more than theory and research. For example I teach databases and one of my first year tutees comes to my office hours and asks me for advice implementing the database part of a website he is working on. He is the only one who bothers coming so I spend an hour every week whiteboarding database design and optimisation with him, and explaining how to design the architecture of his app. Another one comes to me on a regular basis and seeks my advice on machine learning (my field of research), and I give him guided readings and advice on adding some light ML in a game he is working on. Both of them will get a lot more of their education than theory and research, because they understand that what they are paying for isn't a weekly one man show of some dude standing on a podium and talking for a couple of hours, it's access to expertise.
- acbart 6y agoOne of my hypotheses is that it's incredibly difficult (and relatively rare) to be able to turn non-programmers into Computer Scientists. It's much easier to turn programmers into Computer Scientists. The conventional model of trying to turn non-programmers into programmers at the same time as you turn them into Computer Scientists is not very effective.
- Koshkin 6y ago> turn programmers into Computer Scientists It's almost like trying to turn a carnivore into a vegetarian - not impossible, but the taste of warm flesh may be hard to forget.
- BossingAround 6y ago> it's incredibly difficult (and relatively rare) to be able to turn non-programmers into Computer Scientists Yet the premise is the vast majority of jobs don't need a computer scientist. They need a programmer who can understand a complex code base and explain why is it taking so long to display user's birthday on the settings page [1] [1] https://www.youtube.com/watch?v=y8OnoxKotPQ https://www.youtube.com/watch?v=y8OnoxKotPQ
- duxup 6y agoI had a non traditional education and worked with a lot of CS grads. I think their education helped them all tremendously and I'm pretty jealous that they got that opportunity, and we had a lot of conversations like: CS Guy: Yeah well TCP windowing should work like <insert something here>, so why does this not work? Me: Yeah I think I know what you're saying but when you put everything all together ... TCP doesn't work that way. Here, I'll show you how you fix this problem, why you never use this configuration again, and ... you explain to me some of those fancy words you used ... It was a good combo.
- GuiA 6y agoI don’t get this mindset. Even when writing a trivial app, basic CS knowledge is relevant all the time when it comes to modeling your data, manipulating it; oftentimes knowing a bit of mathematical formalisms lets you express things in much more direct ways. Similarly, computer architecture basics let you quickly estimate the plausibility of various features, etc. If you’re a programmer who doesn’t know any CS at all, you probably have a lot of room to improve. Kind of like a chef who only uses frozen foods and then doesn’t understand why things taste weird.
- bregma 6y agoIt's a classic observation bias. If you're a programmer who doesn't know any CS, you are likely unaware of what you don't know. Googling for what you don't know is remarkably unuseful.
- mangodrunk 6y agoI think when someone says the following: > More often you are glueing together tools or writing a bunch of boring business logic for some specific application at best. That explains their mindset. They are not doing much of anything that would require CS (or maybe they picked up enough and don't want to label it as CS for whatever reason). I agree with you, this mindset is not good for our industry. It's fine that there are jobs out there that require a programmer who doesn't have much theory/background, but the mindset that CS is somehow not needed for our industry is just wrong. If only there was more focus on theory and building a good foundation for us then maybe we wouldn't have all the problems that we have now (who knows though).
- manfredo 6y agoThis is highly dependent on the institution. At many universities Computer Science is mostly coding, save for specific algorithms or theory courses. Sure, these classes often have you coding a compiler, operating system, or software router - things you'll rarely if ever do in a job - but it's also about getting a good amount of coding experience under your belt.
- AnimalMuppet 6y agoCS != software engineering, too. Like your chemistry example. There's chemistry, and then there's chemical engineering. Chemists worry about the properties of atoms and molecules, and reactions that move from one state to another, and about the energy differences in reactions. Chemical engineers worry about how to efficiently make the stuff in multi-ton quantities without blowing up the city. It's related, but it's really a different set of concerns. In the same way, CS worries about the efficiency of algorithms, and about what things particular language features make easier or harder to express. Software engineering worries about how to efficiently construct and maintain larger programs that adequately do what is needed. [1][2] The thing is, almost everyone who graduates with a CS degree is going to be employed as a software engineer, not as a computer scientist. I fear that their education is mostly preparing them for the wrong thing. ----- [1] Or perhaps, "construct less inefficiently" - there's inefficiency no matter how well you do it, but you have to control the amount of that, or it will destroy you. [2] Note that I said that they "adequately do what is needed", rather than bug-free. Larger programs are never bug free.[3] [3] Well, almost never. You can get there with formal verification, if you have a bug-free specification, and if the formal verification covers every relevant category of bug. But that's really difficult to do, and we're back at the "less inefficiently" issue.
- M5x7wI3CmbEem10 6y agowhat should software engineers focus on learning then? should they avoid typical subjects such as operating systems & compilers? src: http://teachyourselfcs.com http://teachyourselfcs.com
- peter_d_sherman 6y agoWhat do you believe that you do not know? Focus on learning that thing first; it will lead to other areas of things you don't know, which will lead to others... Socrates said it best, "The true knowledge consists of knowing that one knows nothing". But that being said, there are a ton of interesting areas with respect to computers and programming. Pick one or pick several, keep an open mind, try to learn from whatever source you can (Books, classes, articles on the web, self-experimentation, etc.). It doesn't matter where you start... just start! <g> Also, if one book/class/teacher/article is too difficult -- find a simpler one, or one that simplifies the topic, and learn from that one first! Then, Lather, Rinse, Repeat, and eventually you'll have 12 PhD.'s, like most normal people who are computer/programming enthusiasts(!), ...or you'll become a reclusive crackpot like myself! <g> (Shakespeare: "Much learning doth make thee mad!"... well, that's what happened to me! <g>) Anyway, wishing you well in your quest!
- racl101 6y agoI'd argue a lot of the jobs, if not most, that are asking for comp sci majors are actually asking for code monkeys.
- DeathArrow 6y ago>More often you are glueing together tools or writing a bunch of boring business logic for some specific application at best. At worst you are maintaining an old monolith trying to figure out someones logic from 15 years ago. I did that. But I also started many new software projects. And CS education helped. If you don't want to get stuck in maintaining old crap, you don't have to. You can change jobs. You can change type of projects you work on. I did. I did game programming for lots of years and grew bored and tired of it and now I am doing web apps which I enjoy doing for the time being.