7 ms·
> ridiculous amount of math and math proofs ... [vs.] a course designed to teach programming and programming concepts Math, big-O, and proofs are programming c
by feoren 5y ago
> ridiculous amount of math and math proofs ... [vs.] a course designed to teach programming and programming concepts
Math, big-O, and proofs are programming concepts. If you want a shallow understanding of whatever programming languages and frameworks are in vogue this year so you can be handed down constrained requirements in a code mill where you are evaluated on how many lines of code you write per day, take a coding bootcamp. But know that after a few years your skills will be out of date and you will have a hard time keeping up with the field. If you want to solve hard problems that haven't been solved before, pay attention to that math and those proofs. I'm honestly just sick of people complaining about CS degrees for not spending enough time teaching React JS or Ruby on Rails. CS degrees are for people who want to solve problems that are actually hard and new.
Seriously, do we ever hear physics majors complaining that they have to learn all this math that they're never going to use, in order to study the foundational cosmology of the universe? Why don't they just show me how to work the damn telescope!?
- peterangular 5y agoThis is exactly why I think the distinction between computer science and computer engineering is incredibly important.
- chaosite 5y agoYeah, Computer Engineering is that twilight area between Computer Science and Electrical Engineering where you care that your algorithm is PSPACE-complete but also need to know how it's affected by parasitic capacitance, right?
- anfilt 5y agoLol made me laugh, that is one way to say it.
- anfilt 5y agoI went to school for computer engineering. It's a hybrid of EE and CS. It's not a not a programming only degree.
- connectsnk 5y ago>If you want to solve hard problems that haven't been solved before, pay attention to that math and those proofs. You are right that these people will have a hard time later. What also needs to be understood is that paying attention to something in which you have no curiosity is hard. I never paid attention to Maths / Stats / Probability and now I am having a hard time trying to learn machine learning / AI. But now my curiosity for these technologies is dialled up all the way to 9 and in my free time, I am relearning all these concepts I missed. And what I have discovered is that these concepts were easy. The university presentation of it was done without any motivation. It took a useful and easy subject of math and made it hard.
- ivansavz 5y ago> the university presentation of it was done without any motivation. It took a useful and easy subject of math and made it hard. Amen! I like the way you have worded this. In particular for first-year math courses, they are super useful and should be seen as "basic science literacy" and much more people should have access to this knowledge (not just people who take 3-4 years of courses in a STEM major). I've been working on products to make this happen. Links in profile. The "basic science literacy" I can see everyone benefitting from (in particular devs): (1) math modelling skills from high school math functions, (2) vectors because EVERYTHING, (3) PHYS101 (mechanics) for the predictions-using-models skills, (4) CALC for understanding concepts of rates of change and accumulations, (5) PROB because important building blocks for modelling data, and (6) STATS so you learn how to infer model parameters from data. It's not a coincidence the above list of 6 are part of most UGRAD degrees (either in first or second year). These are the basic tools that everyone benefits form knowing. I am really enjoying the "unbundling" that is happening of the basic science literacy teaching and the credentialism.
- sizzle 5y agoVery articulate, explained what has been on my mind for a while. Boot campers need to level up their learning to compete in the future.
- urthor 5y agoHow often do proofs come up in industry though? Usually I find proofs are what you bring in the consultant for. I'm not going to hand on heart vouch for anything like that as a generalist. Combinatrics, Big O and set theory absolutely. Everyone is far better off with those.
- mcguire 5y agoComputer programming is applied formal logic. No, really, it is. I'm completely serious.
- hnfong 5y agoYou can reassert this tautological statement all you want, but when AI-assisted programming tools start compiling pseudo-natural-language into C++, you'd better accept the fact that either: 1. The definition has no bearing to what's happening in the real world, or 2. "Computer programming" ceases to exist as a productive activity and you need to invent a new name for AI-assisted programming.
- mcguire 5y agoBut that is part of the point: there is no programming tool to compile natural language into code. Instead, a programmer has to convert the natural language into a formal language that a compiler can deal with. You know all those nifty refactoring tools? They're treating the program as a construct in a formal language---they can make specific changes without altering the meaning. Oh, and there is nothing tautological about it, at least as far as most programmers seem to work.
- hnfong 5y ago> no programming tool to compile natural language into code Pretty sure you missed a couple news articles recently... https://news.ycombinator.com/item?id=30179549 https://news.ycombinator.com/item?id=30179549 https://news.ycombinator.com/item?id=27676266 https://news.ycombinator.com/item?id=27676266 They're not exactly reliable, but you probably could say the same for the earliest compilers (from programming languages to asm/machine code). I'm not saying they will definitely be usable in the short term future, but that future is probably coming sooner or later, and I don't think a fragile definition (programming==="applied formal logic") is worth reiterating over and over again as if it were some fundamental truth.
- hnfong 5y agoI'm not saying you're wrong, but... I'm just sick of narratives like yours that basically encourages "pure maths people" taking over "computer science" departments and pretending that their work has "real world applications" on the one hand, taking advantage of the tech boom in recent years, and on the other hand claim that CS degrees are only for research purposes and you industry people asking for job relevant training can bugger off. It's a really narrow mindset to put math specifically on a pedestal. A lot of hard problems with computers don't involve heavy pure math. A lot of those problems get categorized as "software engineering" and as such it is often claimed not relevant for "computer science". But given the importance of software in today's world, academic institutions seem woefully disinterested in setting up "software engineering departments", and woefully disinterested in promoting "software engineering" degrees as an alternative to the typical CS degree as a entry ticket towards a software engineering career. You must learn this (mostly) useless skill to do enter a profession that where you're probably not going to use the skill. It's classic gatekeeping. You might argue that research universities are not supposed to be vocational colleges, but that's a hypocritical lie too -- they basically have to be, otherwise they'd be out of an important source of funding (tuition). The existence of bootcamps are evidence that these fancy "math" people pretending to be computer scientists are basically incapable of teaching anything useful to people wanting to learn to program computers. If bootcamps are so trivial, why couldn't universities offer (for example) summer courses that do the same thing? We're not talking about CS majors here -- we're talking about non-CS non-math majors who might want to learn more about programming. Is it reasonable to force feed them CS type pure math as well ? (read the parent posts again -- Quote: 'I went to the University of Waterloo and took a "Intro to CS for non-math students" course.' Physics majors are called physics majors, not "telescope science" majors. If there's a "telescope science" department I expect them to teach, in addition to theoretical physics, practical courses on how to operate telescopes. My not so humble opinion is that CS departments are a misnomer, but they kept the name because CS degrees are popular, the field is flush with research moneys, and they're happily eating the profits from the software engineering cake while having their math cake too. The pure math specialists in CS departments churn out starry-eyed students who in turn perpetuate the myth that CS is (only) math, and the impression that hard problems in software engineering is not a worthy intellectual endeavor for a research university. This attitude is going to hurt us in the long term. No amount of strawman arguments about ReactJS bootcamps is going to change this fact. Those bootcamps are evidence of a total failure of academic institutions to actually do research on and teach software engineering. ------ In case it matters, I learned all those Big-O and algorithms shit in high school, and I'm not criticizing it based on ignorance of what they are and how useful they are. If anything, those concepts are too trivial to deserve so much "screen time" in the curriculum. I have friends who work in CS departments and publishes on FOCS (you know what it is, right?) etc. I'm reasonably informed about what I'm talking about, and I'm aware that many CS researchers just happen to like to research on math-ish topics (which is of course not their fault). But what I'm trying to say is that there is a fundamental, institutional problem with people snobbishly brushing off real world software engineering problems as if they are somewhat inferior. Get off the high horse already. You don't really need to learn the concepts of limits of sequences to infinity to count 3 nested for loops and know that maybe it will be slow for large inputs. Math will actually not tell you how slow it will be -- FYI sizes under 100 is usually acceptable for O(n^3). Claiming that "trust me, this math thing is so much more fundamental" is a really poor excuse for teaching (mostly) irrelevant concepts while pretending the degree is relevant to industry. And yes, I don't have a CS degree because I already saw through this bullshit 20 years ago when I was in high school. I made sure to learn the stuff I needed to know and skipped the kool-aid. Got a degree in law (it's an undergraduate degree here), and surprise, I actually learned a few things about law -- and they didn't shove pointless math down my throat. I mean, if they wanted to, they could model precedents as an directed acyclic graph and make a couple theorems out of it, right?
- thrwy_ywrht 5y ago>But know that after a few years your skills will be out of date and you will have a hard time keeping up with the field This totally depends on what type of engineer you want to be. It's quite possible to be very successful, have a great career and make a ton of money as a software engineer without ever tackling problems that are "hard" or "new".
- throwawaynay 5y agoMath is math, not programming. No it's not about react or ror. It's about solving actual real life problems. 99% people don't do CS to do academical research, but to work on life change products(and that's more likely to come from user research and fast prototyping, than from theoretically perfect fundamental research). Some people build millions dollars software products, solving real life problems, without having a clue what big-O, quadratic functions, or even a lot of actual theoretical programming concepts are. And I personally know a bunch of those people. Some people know almost everything there is know about CS theory and never build anything useful to anyone. Physics have literally nothing to do with CS or SWE. I think this is just pointless elitism.
- mechanical_bear 5y agoExactly! Computer Science is the study of computation, not the study of programming. Sometimes we use computers and programming in order to better understand computation. Just like Biology is the study of Life, not the study of how to use a microscope better.
- kuang_eleven 5y agoInterestingly, I think I am as close to an example of your last point as you are going to get. I was a Physics major, and nearly all of my classes were focused only on the strongly theoretical part of physics. When I then joined a research team in experimental cosmology, I did lament that I never got any real instruction on research methodology, relevant statistics, etc. It's surprisingly how little actual fundamental, theoretical Physics you need to know to do Physics! I'm not saying it's not important, the point of being a Physics major is not only to train you to be a researcher, but for the sake of the knowledge itself. It's very similar to CS in that regard; almost none of formal CS is useful when doing software engineering, and when it is useful, the skills are in knowing to recognize a problem and how to research it, just like Physics!
- sjtindell 5y agoThanks for the input, a great example.
- otikik 5y agoThe two alternatives that you are presenting (flavour-of-the -week JavaScript versus multiple semesters of Big O notation) are just the two extremes of a wide spectrum. What you call “shallow”, others might see as “practical”. It’s possible that this person has chosen study path that isn’t the right one for them. That’s a tricky spot to be in especially in these times. I suggest a little more empathy, and a little less venting.
- bdlowery 5y agoI love spending so much time doing Big O analysis! Great use of my time! I’m sure I’ll need to know semesters worth of Big O Analysis for my job. Oh… I just need to know the basics? Damn, such a great use of my time. CS degree in a nutshell.
- fivea 5y ago> Math, big-O, and proofs are programming concepts. If you want a shallow understanding of whatever (...) take a coding bootcamp. But know that after a few years your skills will be out of date and you will have a hard time keeping up with the field. I'm sorry to break it to you, but your personal belief on the virtues of ivory tower feats doesn't hold any water in the real world. At all. The most important competency, by far, is being able to onboard. Whether it is onto projects, frameworks, programming languages, architectures... Being able to jump in and get up to speed and fix things and implement features is what matters. No one cares at all if you know an algorithm by heart. Plenty of critical services are built upon crude O(n²) brute force implementations that are good enough, and no one bothers to waste 5mins to even switch the underlying container. You're talking about a field where premature optimization is recognized as one of the worst and most fertile sources of problems. And who exactly is behind this problem? Precisely these short-sighted theorists, who believe big O musings has critical importance when it has close to none beyond superficial analysis of "should I use an array, a linked list, or a hash set"? I know people with a boot camp and experience with a framework who landed jobs in FANGs, and I know PhDs in computer science that can recite inconceivable algorithms who can't get a job in the industry. How do you explain that, if waxing lirically about computer science is supposedly so critical?
- derefr 5y ago> CS degrees are for people who want to solve problems that are actually hard and new. No; not any more than theoretical-physics degrees are for people who want to solve "hard and new" automotive-engineering or pharmacology problems. That there exist lessons from a given academic discipline that have practical application within a given profession, does not mean that you need to become an academic of that discipline (i.e. someone who can advance the state of the art in that discipline — which is what "getting a degree in X" means, if you're doing it right) in order to become a professional in said profession; or even to advance the state of the art of the profession (rather than of the associated academic discipline.) In schools for professional (rather than academic) disciplines — e.g. medical schools, law schools, trade schools, etc. — the lessons from academia with relevant practical application to your field are taught together with the more practical material. For example, in learning to be an optometrist, you learn optics. That's physics! But it's only a certain part of physics, and it's presented through the lens (heh) of the problem domain that you care about. Coding boot camps are shit, I'll agree. Software Engineering programs aren't. I'll take a professional Software Engineer over an academic Computer Scientist any day — especially to have on my team when working on entirely-novel problems. The professional has been taught the problem space, whereas the academic only knows the solution space. It's a lot easier to have a professional read a few books and papers to learn about the solution-space relevant to solving their problem; than it is to fix an academic's lack of appreciation of the constraints imposed by the problem being solved.
- hedora 5y agoThe problem space changes every few years, though. What does the career progression of these "professional Software Engineers" with no understanding of the solution space look like? Do you just fire them each time the problem space changes? What about tech debt? Are they writing shovelware or something? Over time, as requirements drift, how do they even know their stuff is way off of being a reasonable solution?
- derefr 5y agoI think you've misunderstood the terms I used. By "problem domain" I mean the things that impose constraints — for a structural engineer, that'd be e.g. building materials, soil, weather, etc. The things that have tolerances. By "solution domain" I mean the space of human ingenuity that we can apply in our designs, in order to make something possible that wouldn't be possible with a naive approach. For a structural engineer, that's things like "suspension-bridge cabling" (more general principle: tensegrity) and, I dunno, "flying buttresses." The problem domain of building software — the parts that impose constraints — are things like what factors lead to robustness (or lack thereof) of a language runtime under production load; programming-language error-rate as a function of language-syntax UX design; evidence-driven software project scope analysis; the trade-offs involved in attempting to scale a process horizontally vs. vertically; the effects of state on ability to scale; etc. Someone who understands these things knows how to engineer software, the same as someone who understands material tolerances knows how to engineer a structure. If they only know that, then they can't draw you a building (that'd be an architect) — but they can take that architect's blueprint, and tell you whether the building described by it will fall over, and whether there's any simple thing you can do to solve that, or whether you need to draw a different building. But note that you learn the solution space naturally, over time, as you're exposed to the solutions people use in the field. A machinist will learn the tools of their trade as they run into them in the shop, and as other machinists demonstrate them, and as books refer to them, and as job-lots demand them. None of this requires academic rigor. It's just learning on your feet. A SWEng might not be aware of the academic result proving some more-optimal data structure exists for something. Just like a machinist might not be aware of a not-yet-commercialized maser CNC lathe. But they don't need to be, either. Very rarely does solving novel problems require novel tools. You can build the part you want to build with the machines you already have in your shop, and maybe one new one you buy off eBay. You can write the code you want to write with your not-so-optimal data structures, and maybe one new one you find in an ecosystem library. Every once in a while, getting things done might require you read a journal paper written by an academic. But let's be very clear: it doesn't take a degree in some field, to be able to read — and make use of! — journal papers from that field. We've got educational vloggers — people who perform on camera for a living — operationalizing stuff they saw in journal papers all the time! If they can do it, a professional in an adjacent field to the academic discipline can certainly do it.
- warent 5y agoIt's a packaging / communication problem. "Computer science" is a term that no longer fits the mental model of the general population's idea. Basically nobody is thinking "Computers? Of course! You mean the lambda calculus, Turing machines, how these theories relate." Most People are thinking about about the internet, websites, games, apps, robots, and so forth. Indeed one can build all these things without any concept of how busy a beaver really is. Then you have a smaller subset of people who (allegedly) understood what "computer science" is from the outset, and they turn their nose up at anyone who misunderstood what this "Computer science" was. Even worse, they often feel somehow superior. How dare you be ignorant? Practicality and value: these things can exist outside the realm of dense theory. Anyone who says otherwise is trying to feel better about the years and/or money spent on a very challenging and painful degree.
- Alan_Dillman 5y agoThis. It has really split into two domains, but the terminology is often muddled. It is like the difference between a person who pours concrete foundations, and a person optimizing concrete formulas. Society needs both, but the skill sets are different.
- xeromal 5y agoYup, I took CS and had to go through all the rigors that entailed, but I really ended up being a construction worker. I don't mind! Really! But I think if I could do it all over again, I'd take a software engineering BS degree where most of my time was spent engineering solid software. I did take design patterns classes and such in college, but imagine taking 200,300, and 400 level design patterns classes and learning how to architect scalable systems in the cloud or on-prem. Of course there would be programming classes too, but I think there's some room for a program that I'm imagining. Boot camps don't cover the engineering and architecture parts so it would be somewhere between a bootcamp and a CS degree where you're writing operating systems and big endean and Big O notation
- feoren 5y agoExcept society doesn't actually need both "people who can solve new and interesting problems in an automated way using computers" and "people who build only easy, normal, routine, well-understood solutions to known problems using computers", because the latter is called compilers.
- ajsnigrutin 5y agoYep, I look at this as a builder vs an engineer. A lot of modern entry-level programming is the same as builder-work... take a brick, take some cement, spread the cement, put the brick in the right place, and in the corners, cut a brick to size. Yes, sure, we need a lot of those people doing random programming jobs too. But, if you want to build something bigger than a doghouse, you also need a lot of math and calculations, before you even touch the first shovel, to calculate if the whole project is even theoretically feasable. Stuff that works in low scale, sometimes breaks horribly, with larger amounts of data, and i'm not talking facebook scale, but going from 10 to 500 users. If you want to go higher, things become even more broken for someone who just "lays bricks", and a lot more thought and math is needed to make things actually work (and scale).
- heavyset_go 5y agoI know it's en vogue to shit on boot camp students, at one point I did as well, but my experience with working with such students is that after a few years, they are on par with their peers who studied CS in college. Yes, they probably won't work in research roles or roles that require heavy math skills, but when it comes to your typical software engineering role, they're fine. Also, runtime analysis isn't that difficult of a skill to pick up.
- pessimizer 5y agoI don't know that they're shitting on bootcamp students. I've taught people how to program who later became productive working programmers. I couldn't have taught someone all the stuff I learned in CS. It would have taken forever and I'm not smart enough. I do hope the people who wrote the low-level libraries that the people I taught use went through a CS program, though. Runtime analysis isn't that difficult of a skill to pick up if you have a decent university-level math background. You can be a productive programmer without that.
- overkalix 5y agoAmen brother.
- ALittleLight 5y agoIf someone is studying physics to become a physicist they would be a fool to complain about learning all that math. If someone is learning physics to be a telescope operator then it seems like they have a reasonable complaint.