6 ms·
Those things aren't taught in CS programs as the majority of companies don't need those skills. Most want application development such-as a web or iOS app devel
by cobookman 8y ago
Those things aren't taught in CS programs as the majority of companies don't need those skills. Most want application development such-as a web or iOS app developer.
However Computer Engineering programs teach those concepts as the focus is on low power micro controllers.
- stcredzero 8y agoThose things aren't taught in CS programs as the majority of companies don't need those skills. Most want application development such-as a web or iOS app developer. This sort of thing is very relevant for someone writing an application or a server process. Programmers who can write their own compiler are much better C and C++ programmers, because they have relevant background. Programmers who understand the low level stuff can write faster code when it's important, and they know better where to look when optimizing. Since when has our "field" become so flubby that we're now eschewing the notion of background knowledge? Are you telling me that we are churning out Comp Sci grads who couldn't write their own low level libraries or compilers? Tech people should have at least a working knowledge of how their own tools work, to the extent that if civilization fell, they could have a good chance of recreating primitive versions of those things. However Computer Engineering programs teach those concepts as the focus is on low power micro controllers. Also relevant to high performance code. Also relevant to game engines. Also relevant to interfacing servers with legacy code. Also relevant to technology like WASM. Whoever decided to relegate stuff like that to Computer Engineering seems guilty of the same ignorance I see in these recent students.
- ovao 8y agoThe question becomes: to what extent does acumen for writing a compiler overlap with the acumen for writing reliable code productively? I think, generally speaking, the overlap in a Venn diagram of that would actually be relatively small.
- WalterBright 8y agoPeople don't tolerate compiler bugs very well. I'd say there's quite a bit of overlap.
- lsc 8y ago>People don't tolerate compiler bugs very well. I'd say there's quite a bit of overlap. I don't see how your first point is related to the second. The goal for most webapps is to get something that works most of the time. Most software engineers simply don't need to worry about their third nine, much less their fourth
- ovao 8y agoI think you're arguing that without good compiler authors, a typical application developer would be inherently unproductive. Which is true — compilers are necessary tools, and it's necessary that they be good. But what I was suggesting is that one does not need to be capable of being both a compiler author and an application developer (if, for the sake of discussion, we avoid any semantic arguments and treat these as generally different things) to be of good value. I don't know how to, say, write a proper lexer, or write any assembly worth any salt at all, but I can write what I consider to be good, reliable application code at a reasonable level of productivity.
- lsc 8y ago>Programmers who can write their own compiler are much better C and C++ programmers, because they have relevant background. Sure, sure. But how many companies care about that sort of thing? C is rather my best language, and as far as I can tell, that helps me out as a sysadmin, but I need to be good at some EMCAscript based framework if I want a higher-paying Software Engineering job, at least outside of the embedded space (and I'm not that good at C. Also, most of the embedded types I know don't get paid SWE level salaries.)
- cobookman 8y agoIn school I had to make my own assembler & emulator in C. I learned more about Software Engineering doing that than any other assignment. I'd also mention I've never had to write an Assembler or Emulator in my work nor have the majority of my peers have had to do that.
- stcredzero 8y ago> but I need to be good at some EMCAscript based framework if I want a higher-paying Software Engineering job Then I should hope you know enough VM-fu to be able to optimize a JavaScript application.
- askl56 8y ago> Since when has our "field" become so flubby that we're now eschewing the notion of background knowledge? I think the issue is more that the skillset follows the money. If you are a top web developer who can work in adtech/fintech/e-commerce and contract then you will make far more money doing that than you ever would in pure systems engineering. It's not so much that background knowledge is fluff, moreso that their focus is probably a lot more scattered than it used to be, and their background knowledge is perhaps in other places.
- Kiro 8y agoYou are completely wrong. The stuff you're talking about is completely irrelevant for 90% of the jobs. Step out of your bubble.
- jacobsenscott 8y agoMy school's primary languages were C and C++, and a smattering of java because it was just getting popular. Certainly the low level understanding that comes from writing a lot of code in those languages is helpful. But the imperative/procedural mindset that it drills into you leads to some really terrible application code, and it takes a lot of exposure to higher level languages to break out of that mindset. It took me years. Switching to ruby was like starting from scratch. By all means hire a C++ programmer to write your web app. They'll be able to debug your performance issues ricky tick. But also be prepared for some heinous procedural js/ruby/php/clojure/elixer/whatever.
- justwalt 8y agoWhat kinds of mistakes would someone who fits this description make?
- jacobsenscott 8y agoDeeply nested if/else logic, very long functions. Imperative logic that could be better written by higher level constructs like function composition, complicating code with micro-performance hacks, etc. In general inflexible code. Of course not all of this is because I leaned C first. A lot of it was simply due to being a new programmer. But this kind of code is more prevalent in general in the C world. Just browse some opensource C projects. I believe a lot of this stems from the "systems programming" mindset that goes along with learning C and C++. The requirements are very precise and well known, and don't change often. There is often a fairly precise "right answer" for how to do something where the "right answer" is some combination of performance metrics. Compilers are like that, file systems are like that, tcp/ip stacks are like that, etc. The programming boundaries tend to be very bright. The "systems programming" mindset is a liability when writing business apps where a sales person can blow up every assumption and design decision and boundry in one day. The "right answer" is not clear, and not easily measured. The "right answer" has more to do with writing code that is flexible and easy to change. That is hard to measure and a totally different way of thinking.
- 8y ago
- HuggableSquare 8y agoI'm just going to throw in my experience here as someone who never went to college but currently writes software for a living. I do mainly frontend web development with EmberJS, and occasionally work on our backend which is also JS, and I've been doing that for a little over 2 years now. I never went to college and so a lot of the stuff you guys have been talking about in this thread goes right over my head. I've never written a compiler, the last time I wrote any C++ was high school, and I would so easily fail a lot of these interviews if those were the questions being asked. With all of that said, I think I do a good job at what I do without all of that knowledge. The industry is increasingly heading towards web/app dev in a lot of positions as other people mentioned, and I think it's very elitist to judge people for not knowing everything you do, even if you think it's important. The fact that this industry is becoming so open to so many people is amazing. Me being able to find a good job without a college degree just because of my knowledge of computers is what I love about tech. I think mindsets like yours are what help drive people away from it because they think they need a ton of knowledge to get an entry-level job, and that's just simply not true. I don't want to sound like I'm accusing you of being malicious, I just wanted to share my point of view as someone who is relatively new to the industry and never went to college and doesn't have the knowledge that you are suggesting is very relevant. Maybe it is relevant and I just haven't figured that out yet, but from where I'm sitting that feels like something that could be taught instead of a hard and fast rule for hiring.
- stcredzero 8y agoI never went to college and so a lot of the stuff you guys have been talking about in this thread goes right over my head...I think it's very elitist to judge people for not knowing everything you do, even if you think it's important. Fair enough. However, if someone did go to college, they should at least know what they know, and know what they don't know. If someone is applying to a job with a 3.75 GPA where they might be doing some C++ and they go into an interview and try to tell you that a null pointer takes up no data, they haven't been well served by their education. They should at least know what they don't know, and not waste everybody's time. However, you should know that these things are important. There are levels of knowledge deeper than being just a user of something. I think mindsets like yours are what help drive people away from it because they think they need a ton of knowledge to get an entry-level job, and that's just simply not true. So a generalist Comp Sci degree just needs to shrink into Web Development because of your feelings? Look, Web Development is a fine job, but it's not the same as a generalist field of knowledge like Comp Sci. Should mechanics expect that a Physics degree only be limited to their knowledge because of their feelings? They're applying Physics, after all. (Warning: don't you go and denigrate mechanics! That would be elitist.) The very fact that you can have a job in tech without a Comp Sci degree isn't a justification for the dumbing down of Comp Sci. It shows that it happened needlessly! Maybe it is relevant and I just haven't figured that out yet, but from where I'm sitting that feels like something that could be taught instead of a hard and fast rule for hiring. Let's say you discovered an interviewee thought that a 404 meant the request never made it to the server. Let's say they also got a 4.0 GPA at some Web Development coding academy with a great reputation. Wouldn't you at least be scratching your head? These are things that used to be taught in a Computer Science degree. Now they aren't taught, and companies are going to have to teach new graduate hires this stuff that people used to take multiple semesters to learn? It also used to be that Freshmen in college were expected to know how to conjugate verbs and compose grammatically correct sentences. Now TAs (I used to be one) are expected to teach these things to Freshmen. How is this not a decline in standards?
- andreareina 8y agoA Computer Science program that doesn't teach cycle detection is a bad Computer Science program. It might still be a good engineering program. I enrolled in a CS program as a self-taught programmer specifically because I wanted a better grounding in the theoretical foundations.