Godbolt (CS61C should probably have a Godbolt lab.) Coursera Fundamentals of Parallelism on Intel Architecture Emphasize STL, Boost, OpenMP, MPI, NUMPY, containers, ...
>CS 61C
Why do you guys refer to topics/branches of CS by course name at your higher edu institution?
Can you give some examples of where computer science academic theory helped in software engineering?
1. Unix was cutting edge OS theory and gave birth to the microcomputer industry. 2. AWS was cutting edge distributed systems theory and gave birth to cloud computing. 3. Renaissance Technology was cutting edge algorithms theory and gave birth to quantitative hedge funds. Some people innovate for a living.
Never heard RenTec described that way, the only information that seems to be out there is that they use much simpler algorithmic techniques than people imagine, mainly just linear regression. Whatever unique insight they have, it's more likely to be based on pure mathematics than cutting edge algorithms theory. Also, they were not the first quant fund.
for a non-cs major with a quantitative background such as math or physics, would it be more prudent to study algorithms or gain actual programming skills in order to secure a job prior to graduation?
of course, actual programming skills are necessary, but it seems they can be learned after securing an offer.
This isn't a bad list of topics about data structures, algorithms, and software fundamentals, but let's not pretend that computer science has anything to do with most software engineering roles. I studied computer science, and in 30 years, I've hardly used any of it. There were a few jobs where some of the statistics and math were helpful, but in my long career, I've seen very little overlap between computer science…
Before we lend your comment any credence, do you mind listing the projects you've worked on? Groundbreaking software engineering projects that advance the state-of-the-art, like Google's Map-Reduce-based scaling architecture back in the day, or ones that provide some non-trivial edge or advantage, like the tight integration of hardware and software in iPhones (and the resulting responsiveness and battery life), or on…
Well, the premise that computer science is needed to be an effective software engineer comes from the original link (and the way interviews are structured). We cannot blame
caymanjim for the premise, can we?
Your work doesn't depend on operating systems, databases, network communications and data structures? I can go on.
Not as much as it depends on human communications, organization, self-management, etc. Most technical challenges in my experience end up being reduced to word problems. All of the stuff you mentioned is probably 10% of it. You can be bad at the 10% if you're great at the 90%.
My experience is that if everybody who took part in the development of software at enterprises would have studied CS, 90% of the word problems would be gone. Most problems arise from the fact that actors underestimate or not understand the complexities that lie in software systems.
I have no experience in the field and I would like to quickly get in it. I want to dive in with experience and I’m trying to figure out what things would get me there quicker if someone wanted to tutor me at work. What would you say are the things in your experience that are most useful to be able to contribute in a development team?
I'd say the ability to solve a real problem in the programming language of your choice is a minimum criteria to call yourself a programmer. Getting there would require a basic understanding of that language, data structures generally, many problems revolve around databases or REST APIs so learn how to use those, I'd also throw in version control and how to write unit tests.
Let us use machines and mechanical engineer as an analogy. These days, you don't need to be a mechanical engineer to operate 'most' machines. Will being a mechanical engineer help if the machine breaks down? Yes. Will there be some machines that only a computer engineer could operate? Yes. Will there be come cases where being a mechanical engineer make you a better machine operator? Yes. But do you need to be a mecha…
So funnily enough, my bachelor's was in mechanical engineering and I'm currently pursuing a master's in computer science after having worked in industry for a few years. While I think I agree with your point, I'm going to nitpick on your analogy. A mechanical engineer will probably not be called upon to operate any particular mechanical device. They will be called upon to either design or maintain it, both of which w…
I think we are in general agreement. While self taught developers have been around from the beginning, until a few years ago, most companies wanted only those with a CS degree regardless of what they were to actually do. DB admin - CS Degree; maintain a Wordpress site - CS degree; write ML algorithms from scratch - CS degree.
It is changing now. Don't get me wrong; I see the value in
CS knowledge having spent a lot of time learning it though never for any degree. All I am saying is that we need to recognize that a job requires a specific skill set and theoretical CS may not be it.
I also don't have a CS degree and am self-taught. And I very much agree with you that many CS concepts have quite a practical impact. Some of them more on the side of approach and selecting the right tech/solution, but some have a more hands-on practical use. - State machines: completely agree. I use them especially in the context of user facing stuff, like GUIs, animations and so on. In fact I would even argue that…
> Relational algebra Seriously? Currently working through my second databases course, I still can't help translating all of the relational algebra nonsense into proto-SQL in order to make sense of it. I was already working on large-ish business applications and databases for a few years before the first course and I didn't even know RA existed. Now it just gets in the way. Not to mention relational expressions or wha…
For me the experience was different. I also knew SQL before, but after learning RA I first was slightly disappointed that SQL wasn’t as clean. But conceptually they’re the same.
I think the interesting Aha moment was the realization that SQL is syntax on top of a mathematical concept. Before I was distracted by the practice of reading and writing stuff to disk with it, if that makes sense.
From scanning through the course outline, the big omission is learning about distributed systems, and industry leading implementations of common tools. At big tech companies, you typically have to work at a much larger scale. A solution that works, won’t necessarily work at 10x, 100x, 1000x the scale. You often need to use technologies architected differently than a monolithic Web App. I would recommend learning more…