7 ms·
I need to defend theory of computer science here, it seems. Please note that this computer science, not computer engineering. The idea of automata, regular lang
by bollu 6y ago
I need to defend theory of computer science here, it seems. Please note that this computer science, not computer engineering. The idea of automata, regular languages, turing machines, and whatnot inform some of the most fundamental results of computer science.
At least in the fields where I work [compilers, formal verification], all of the above theory is common parlance. Everyone working on this stuff knows all of the above theory, since it forms the bedrock of a large part of what we do and how we think about the world. Knowing the complexity of the algorithms we use, the languages we parse, issues of decidability, etc. all crop up. That's because it's science, not engineering. GATE is meant as an entrance exam to pursue a graduate degree in computer science.
The fact that one does not need this during their day job is, dare I say it, irrelevant. This feels to me like people complaining that number theory is completely useless in the 19th century; Indeed it was... until it wasn't, and we needed cryptography.
This stuff is useful right now in a 'how to think about the world' kind of way. Knowing the power differences between automata, transducers, push down automata, and turing machines is critical in disparate applications involving formal verification. The difference in power of these different representations impacts what we can "do" with them. The knowledge of this hierarchy fundamentally shapes how I view the world.
- dazhbog 6y agoSome people are more inclined to theoretical concepts, some people are more practical. Both have an understanding on how things work and/or an intuition, either by studying theoretical concepts or via practical, hands on experience. My issue with this, and this is mostly my own personal opinion, is not whether or not this subject is important and that we need to defend it, but whether teaching it to students of that level is the 'right' thing. Imagine a student that doesnt even know how to program yet, doesn't know any algorithms, or higher level paradigms, heck doesnt even know any computer architecture stuff yet, but has to go through this block of theory and get examined on it.. Is it the right move to motivate more people into this field?
- bachmeier 6y ago> My issue with this, and this is mostly my own personal opinion, is not whether or not this subject is important and that we need to defend it, but whether teaching it to students of that level is the 'right' thing. Teaching it to which students? If someone enrolls in a computer science class, it's reasonable to teach them computer science. If instead they want a mechanical introduction to programming, CS probably isn't the right material.
- cycrutchfield 6y agoYeah! And why come we gots to teach kid how to plus and minus if theys just gonna be a plummer?
- zelphirkalt 6y agoI think you are not addressing the point, which the GP tried to make. It's not about teaching or not teaching, but about the time when stuff is taught. Surely all these things have their time and place. Perhaps there are gentler introductions to some of these topics available?
- Jtsummers 6y agoIf you can't teach theoretical computer science to undergraduate computer science students, you will have to shift it to the graduate level. Which means you won't really every have anyone earning a true masters in computer science because they'll need so much grounding to be able to complete the work they won't have time to do anything novel.
- tzs 6y agoYou aren't being serious, but that was once actually a fairly widespread sentiment. In colonial times in America, for instance, arithmetic was generally not taught in elementary school. It was something you would learn on the job if needed. Amusingly, when it did start getting routinely taught at the end of the 18th century there were complaints from businessmen to the school boards that the methods taught in school were producing students totally unprepared for business. For more on this, see the essay "What is Mathematics For?" by Underwood Dudley from the May 2010 Notices of the AMS [1]. (A more accurate title, he notes in the first paragraph, would be "What is mathematics education for?"). He makes some interesting points about the usual justifications that elementary and high school math are useful in your career are not really accurate. [1] http://www.ams.org/notices/201005/rtx100500608p.pdf http://www.ams.org/notices/201005/rtx100500608p.pdf
- foepys 6y agoIf you want people to write mostly CRUD apps, sure. If you want people to develop programming languages, algorithms, models etc., not really. Computer Science is a subfield of math and trying to "lure" people into the field with flashy graphics and instant gratification will only frustrate them when it gets to the basics. In theory you can complete a Computer Science degree without ever programming a physical computer. To complete my Masters in CS I only had to take an introductionary course for Java, everything else programming related was optional.
- czbond 6y agoAgree. I loved the theoretical side of CompSci (automata, programming language at the meta level, algorithms). Practical was boring to me and I lost interest in the day to day (7 hours of typing in an IDE!? joy). The problems of the practical are a let down if you start theoretical. Can you handle 1M concurrent in Go to replace a java load distributor? Sure! Crud apps..... oh brain hurts will never finish.
- sigstoat 6y ago> Both have an understanding on how things work and/or an intuition, either by studying theoretical concepts or via practical, hands on experience. hands on experience with regular expressions manages to fail a lot of people with practical problems. https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454 https://stackoverflow.com/questions/1732348/regex-match-open...
- ookdatnog 6y agoThere are schools which just teach you programming and computer skills and do a good job at it. But companies will still prefer candidates with computer science degrees, or even outright require a CS degree, even for simple programming jobs that really don't need one. The degree is used as no more than an intelligence filter. This relegates anyone who has a practically oriented degree to being regarded as a second class programmer, the perception being that you would have studied CS instead if you had the ability. This completely sucks for practically inclined people who are forced to trudge through a theoretical degree that doesn't interest them, and where 90% of the material they will never use, just to prove that they're smart enough. They then tend to blame academia for being out of touch, ivory tower, etc. But academia is not at fault here, they are teaching what they claim to teach: computer science. There are good pratically minded degrees which prepare you just fine for the average programming job, it's employers who constantly signal that they value CS degrees more.
- scarface74 6y agoBut companies will still prefer candidates with computer science degrees, or even outright require a CS degree, even for simple programming jobs that really don't need one. I haven’t seen any corporate dev jobs that care about formal computer science during an interview. I only see that from BigTech and BigTech wannabes that think they need “smart people” (tm).
- Vervious 6y ago> whether teaching it to students of that level is the 'right' thing I strongly doubt that any university or educator is teaching so much theory of computation to any level of computer science student who will not be focused on theory of computation. Notice that the OP's video seems targeted towards incoming CS theory Masters/PhD students who will explicitly be working on CS theory and doing research.
- vbtemp 6y agoA lot of people give theory a lot of crap. But that's normally because they are not comfortable with the material. If you are comfortable with the material, you see applications for it all over the place, and use it all the time. Sure, you don't have to ground your system in some kind of formal model (you can just code-til-it-works), but when you do I've found it always ends up as a far simpler and more resilient product. It's kind of like people who complain that math is useless in school and you'll never need it. Sure, if you never really master it, you'll never be able to use it, so you'll make things kinda work in ways that don't strictly require it, and then conclude it's useless. Meanwhile, if you are familiar with it, your prospects are broader, you may have to use it, and you'll see how it was absolutely relevant and important to know...
- chmod775 6y agoI found it also helps with the hardest problem in software development: naming things. Without knowledge of the theory it can be hard to come up with a descriptive name for some data structure/algorithm you created to solve your problem. With some knowledge of the theory you can more easily put a name to what you have created, making it easier for other people to understand and giving them something to Google if they're unfamiliar.
- m463 6y agoBut loop variables are always i, j and k.
- anthk 6y agoExcept in EE.
- noir_lord 6y agon for me for a long time but that’s BASIC showing through. > It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.” - Edsger Dijkstra
- jfkebwjsbx 6y agoEeh... automata, languages (of all kinds, not just regular), grammars, complexity, etc. are used in computer engineering all the time. If a computer engineering degree does not have those, then it is a pretty bad one.
- jacquesm 6y agoOne of the best books I ever read was a book that implemented a large number of algorithms in Pascal. This served me well both when implementing things as well as when studying papers about algorithms. The gap between theory and practice in computer science is as small as it gets across many domains.
- ookdatnog 6y agoI empathise with people who go to college to study computer science, mainly with the intent of eventually landing a well-paid programming job, who are then frustrated when they have to learn actual computer science topics instead of just learning to program. But their anger is usually directed at the wrong institution. The problem doesn't lie with academia teaching the wrong things, it lies with companies requiring CS degrees for simple programming jobs. They treat the theoretical computer science material as nothing more than a raw intelligence/perseverance filter.
- m463 6y agoWe spent entirely too much time on O(this) and O(that) But that's the stuff that sort of stood up to the test of time. Also really helpful was symbolic logic, which actually was not a computer science course. The most interesting computer science topics to me in school were the different computer languages -- but very few of them survived the test of time.
- vkou 6y agoIn my bachelor's degree, I spent two weeks of one course, tops on O(this) and O(that). I suppose I spent two courses studying computational complexity, but reducing it to O(this) and O(that) does not quite do it justice.
- learc83 6y agoI use CS theory all the time in my professional career. Automata, was the most useful class I took (the 2nd most useful was Programming Language Concepts).
- bsder 6y ago> The fact that one does not need this during their day job is, dare I say it, irrelevant. I disagree for some of the fundamental things. Binary arithmetic is fundamental. The number of times I have seen people using addition for logical-or and being confounded by bugs astounds me. I don't expect you to be able to do stupid bit tricks. However you must know how to use and,or,xor,not for masking and you must understand what integer overflow/underflow is. State machines are fundamental. I'll go so far as to say that if you don't know how to do state machines, you don't really know how to program. You simply have no framework for understanding things like protocols, sequencing, concurrency, etc. Data structures are fundamental. Sure, I can boil it down to "75% of the time use a hash table; 25% of the time use a vector; .001% of the time use something else". But you won't know when you shouldn't use something. These are things I see all the time in programmers who I would expect to know better. These also seem to be things that "programming" course often slack on--they're hard to teach and hard to learn. It requires work from both sides to communicate the concepts.
- bollu 6y agoI agree; My personal view is that it's fundamental to know these ideas, just as one can't be a physicist without knowing a decent chunk of mathematics. On the other hand, it seems that biology majors seem to "get by" [as far as I can tell] without needing to learn much math. Perhaps one can argue that it's better if they learnt more math. But we can't argue that the profession of being a doctor seems to work without them knowing too much math. It's unclear to me, where in the extremely broad spectrum of jobs known as "programmer" [writing code for the space shuttle v/s bringing up an android app] where the need for mathematics ends. So I hesitate to make blanket statements about this. What I will never hesitate to defend is the utility of these ideas of theoretical CS/mathematics for all computer scientists and scientist-adjacent folks.
- Abishek_Muthian 6y agoI'm seeing 'Computer Science knowledge is not necessary to be a better programmer' statements more often nowadays, even from those who have CS degree(Degree != Education). Here's one example, who is in Kaggle 1% - https://twitter.com/bhutanisanyam1/status/1209000881548480512 https://twitter.com/bhutanisanyam1/status/120900088154848051....
- deleted 6y ago[deleted]