Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

CS is Computer Science not software development or programming or computer engineering.

People/companies commonly treating both the same is IMHO one of the major problems of the current industry.

None of the topic you mentioned are fundamental to CS.

They are fundamentals of software development.

Wrt. to computer science they are at most specializations and even then what you might do in a science context of them might differ largely to what you would need to use them for production focused software development. Through they do contain some fundamentals like, e.g. set theory in relational databases and graph theory in network programming and concurrent programming.

You can (rightfully) have a master of computer sience _without having ever written a single line of code_. And going back ~20years that wasn't even that uncommon.

Now today a lot of universities have realized that this mismatch causes problems and are also teaching the fundamentals of software developments additionally to the fundamentals of computer science. Additionally of lot of computer science today requires the use of tooling which requires some programming and SQL.

Still what the "fundamentals of software development" are is a much less clear topic then the "fundamentals of computer science" (and even there people disagree all the time). And for example "relational databases/SQL" is one of the thing people can strongly disagree on weather its foundational to software development or not (anymore).



College is not a trade school, it was never meant to train you for a job with rare exceptions like medical professionals and they have a lengthy apprentice program. I can get a CS/CE degree without ever stepping into an actual office, why would you expect me to know a job I've never done?

I may be showing my age but there was a time where companies had new hire programs and OJT where entry level workers could learn the job and learn the job the way the company wants you to learn it. Now there seems to be an expectation that every fresher should have a decade of experience under their belt and know the ins an outs of a job they've never done or at best did for a few week/months as an intern/college hire. This is just another example of companies living on the cheap and pushing the onus training new workers from the company on to the worker. In my opinion it's stupid and short sited.


All of this makes sense if you only pay attention to what universities say they are instead of how they function in society. Functionally, companies and students treat university as some combination of trade school and expensive credentialing system. A bachelor’s degree is both a signifier and predictor of class. They are expensive, and every office job requires one at a minimum.

The vast majority of CS students aren’t interested in the minutia of theory, they’re interested in reliably getting a job in a field that will let them have a family. And schools know it too, which is why a degree can command and justify a six figure cost. All of the saccharine scholarly platitudes aside, the cost of learning about Homer or first year calculus keeps going up every year.

Forcing students to pay for their own vocational training isn’t stupid and short sighted at all. It’s a form of industry-wide tacit collusion [1] and it’s working.

[1] https://en.m.wikipedia.org/wiki/Tacit_collusion


I think it's very short sighted: tech stacks come and go, you can't find people who know all the ones you picked. People who know their foundations and have applied them to practice (no matter the tech stack) will be better prepared.

That's why boot camps haven't really taken off: most students can reproduce what they learned but will struggle growing up. They learned the tech before the theory!


I don’t think OP is advocating teaching tech stacks. OP is advocating generalized software engineering vocational training.


I've been thinking this for at least a decade and thought I was going crazy. Thx for verifying there are others thinking similar "crazy" thoughts.

I wasn't going insane, I was just going Marxist. (Which sounds like an insult, but isn't.)

More specifically, it seems that you can easily get a load of cash for your startup if you're a Stanford CS grad. Then you grow up, have a couple of liquidity events and put some of your cash in a VC fund managed by a college pal. Then you get asked to listen to a few pitches from young kids and you spend the hour talking about fun times on the quad and in Terman hall. And you vote to give them some cash 'cause they seem like nice kids.

Don't get me wrong. I'm as committed to perpetuating classiest stereotypes as the next guy. But it all seems a bit financially and socially incestuous.


>College is not a trade school, it was never meant to train you for a job with rare exceptions like medical professionals and they have a lengthy apprentice program. I can get a CS/CE degree without ever stepping into an actual office, why would you expect me to know a job I've never done?

I agree with your sentiment. This was true for a while, but it isn't anymore. Companies would hire you just because you had a college degree, because it showed you were capable of learning. Once they stopped that and required particular degrees, it became a trade school.


It's also the outcome of a system where, in many/most cases, the expectation is that a new hire will have moved on by 2-3 years. And, yes, that's driven to some degree by compensation but ICs historically also didn't expect anything like FAANG compensation and even most executives had very middling compensation by Big Tech standards. (My starting salary as a product manager at a major computer company in the mid-80s with two grad degrees was about $100K in today's dollars.)

If someone is probably going to head somewhere else in a couple years it might make sense to put them through a one week orientation but probably not a 6 month class.)


Isn't that more of a reflection of the company and not the worker? Why would a worker stay when they can make significantly more at another company? If companies wanted to retain their workers you'd think they'd do a better job but it's been shown over and over and over again that if you want to earn a market rate wage you need to find a different job -finding a new employee is expensive, much more expensive than retaining that same employee but being penny wise and pound foolish seems to be how compensation works.


The amount that a Big Tech company could afford to pay a new employee is often more than the cost for a regular company to hire a trained employee again.

And hiring a trained worker is overall less expensive than hiring an untrained worker who takes a year to get up to speed and then leaves for greener pa$ture$.

What's more, if you have a brain drain of experienced people leaving for Big Tech, hiring an untrained worker who is able to make messes that won't be cleaned up is sometimes even more expensive than the wages paid to the employee.

The result of this is that after a few rounds of people leaving management is faced with two options. Either contract projects out as the standard approach rather than having software developers on staff or move to "we're only hiring experienced people with all of these qualifications" so that on the job training isn't necessary.

While some will also say "raise your wages to be competitive with Big Tech" - that isn't always practical or able to be justified for budgeting based on the revenue of the company.

The overall industry appears to be bimodal with "Big Tech" and "everyone else". Any employee who can move from "everyone else" to "Big Tech" can out compete any wage offered by "everyone else" (and in boom times this was a much easier prospect).

With that consideration, it was often very poor ROI for any company in the "everyone else" portion of the industry to offer training.


I don't know if it's actually bimodal to the degree that, say, law is. But I have seen the dynamic where, if someone at a smaller company gets an offer from, say, Facebook, the response of the company is to basically shrug and move on.


Probably not to the degree that law is bimodal, but there's certainly a different distribution of salaries in the big tech and venture capital companies than there is in "everywhere else".

If someone got an offer from Facebook and puts it on the table, there is no way to compete with that as anything other than another big tech company. There's no way that say... Jack's Links ( https://jobs.smartrecruiters.com/JackLinksProteinSnacks/7439... ) can compete with working at a big tech company.

This also goes for interviewing. I've seen new grads (back in the boomier times) say "I have an offer with {big tech co}" part way through the interview and say "ok" and stop the process since there's really no point in going on - the smaller shop better uses their time interviewing other candidates that may accept.


Like many systems, it's something of a self-perpetuating cycle--combined with an environment where many large tech companies can and will pay almost arbitrarily large amounts to hire people away from another company. I'm pretty sure that, if you're a mechanical engineer or a developer at General Motors, you aren't going to double your salary by going to Ford.


To be honest I'd say that it's driven much, much more by compensation rather than that being some additional element. Leaving aside FAANG levels of compensation, places pay staff the minimum they can get away with and don't raise existing staff's compensation unless absolutely forced to.

If you could somehow anonymously go through your company's hiring process you'd be offered more as a new joiner for your skills and experience than someone already there, which is bizarre set-up (even though any new joiner has to spend time ramping up & existing staff have a great level of instituional knowledge).

So companies have created a system where if you want to get a fair market rate, you _have to_ move every 2-3 years. I know a lot of people who stay put in spite of this, as they don't like the friction/effort of interviewing & are comfortable/like colleagues etc. If places paid market rate to existing staff, I'd imagine their churn would plummet.


> College is not a trade school, it was never meant to train you for a job with rare exceptions like medical professionals and they have a lengthy apprentice program.

The University of Bologna, the first university, had faculties of law, medicine and theology. That’s a trade school for lawyers, notaries, physicians and priests. While university has always been an alien place for anyone not of the bourgeoisie or higher it’s always been mostly about getting a good job afterwards. There were never enough people whose family had enough money to support them doing anything or nothing to support that many scholars. College is and always has been in large part about getting its graduates good jobs. Saying it’s not a trade school is primarily about snobbery. One of the ways it makes its graduates suitable for those jobs is by teaching them the habitus of university men (and nowadays women) so that they can’t be mistaken for the kind of people who do go to a trade school.


>> there was a time where companies had new hire programs and OJT where entry level workers could learn the job and learn the job the way the company wants you to learn it.

Wasn't this also a time when people could expect to stay at the same company for 10+ years? Things are different now as total compensation is linked to how your options package is doing. People don't stay at jobs where their options aren't likely to be worth much.


> I may be showing my age but there was a time where companies had new hire programs and OJT where entry level workers could learn the job and learn the job the way the company wants you to learn it.

Why as a hiring manager would I waste time with a junior dev that does “negative work” knowing that by the time they get productive they would leave instead of poaching a former junior dev from another company?


"You can always tell an MIT man. But you can never tell him much."

(More a comment on how some pedagogical methodologies constrain us and less on whether college CS programs are or aren't trade schools.)


On the opposite end, my degree was in computer engineering... We studied everything from circuits (analog & digital) to networks; even going into CPU design (we had to add an instruction to a MIPS CPU). It didn't make me an expert on any of these fields, but I know enough to know where to start digging if I need to specialize.

OP needs to hire Computer Engineering grads, not Computer Science grads.


As someone with a CE/EE degree, I don't really agree.

Like you said, that background does have a lot of benefits. But the downside is that a CE grad typically spends less time doing "software" work than a CS grad. When a CE student is taking courses on circuit design, FPGAs, and CPU architectures, a CS student might be taking courses about databases and concurrency. I don't think I touched SQL or a multithreaded program in a university course. Those were all "high level" things that CS students focused on.

This isn't meant as a knock on CE grads -- I just don't think it's wise to suggest them as the solution to OP's problem since they have their own set of "blind spots" to deal with.


I'd say digital logic and computer architecture teaches pretty immediate lessons about tackling concurrency? Every gate and transistor is operating in parallel and it's up to the engineer to arrange things so that race conditions don't occur and valid results are available when the next clock edge arrives.


Sure, but I don’t think that’s necessarily helpful in the context the OP is describing. If you bring up concurrency in a software engineering interview, you’re probably hoping the candidate can speak to different synchronization techniques, their pros/cons, how to implement them and how to use them.

Anyone who can figure out timing in a complex digital circuit can learn how threads and mutexes and message queues work, but there’s a good chance a CE grad would not be able to speak to those topics very well compared to a CS grad.

Again, this isn’t a criticism of CE. I just doubt OP would have their socks blown off in the areas they mentioned if they started interviewing engineering students.


At one time, the CS degree was that.

My CS degree had digital logic (far too many hours working on Mentor Graphics), machine language programming (from Professor Larus of SPIM fame), compilers (from Professor Fischer), databases (from Professor DeWitt), and networking (from Professor Landweber).

Many classes were cross listed with the engineering department. The ECE degree was much more focused on the "designing a computer" rather than "writing software".

The difficult part there is that some degrees are "build hardware", some are "write software", others are "study the science", and others are "a survey of all things"... and others are "just enough in the business school to write html and do JavaScript."


You are right. The OP's examples of networking, SQL, etc. are NOT the foundations of computer science. I know as I did my undergrad in actual foundational CS theory.

Here are the foundations of computer science: Sets, Boolean algebra, integers, strings, functions, logic circuits, iteration, recursion, proof by induction, loop invariants, automata, regular expressions, context-free languages, Turing machines, computability, asymptotic complexity, data structures, algorithms, NP-completeness, models, formal logic systems, operational semantics.

But to agree with the OP, a lot of CS graduates may not have learned or have forgotten the mathematical underpinnings of CS. A typical bad "CS" education would be some hodge-podge of algorithm design, hand-wavy analysis, and teaching specific technologies/tools (e.g. CSS, NoSQL).


I wonder if where OP is from, engineering and physics only exist as minors available to mathematics majors?

With the rising popularity of tangential fields, we've taken to calling it 'computation science' to help delineate from disciplines that rely on the application of technologies built using CS that run on "computers".


For some reason, I was looking at the degrees offered by my undergrad. I see a significant number of the STEM degrees now have variant that is essentially X with computers.


Relational algebra is absolutely fundamental CS. In fact no real system even implements it as it's formally specified.

Also, all of the topics that the OP mentions are areas of study in CS there are entire CS conferences dedicated to them. Your comment reads as some really strange and arbitrary gatekeeping around what CS means.


It's "fundamental CS," sure, if what you mean by that is: only a very small number of the people who actually design, implement, build, optimize, and debug databases know anything about it at all, have read the foundational texts, use the terminology of relational algebra, or contribute papers or research in the field.


People aren’t getting thousands in debt to be a “better citizen of the world”. They are doing so because they haven’t found a way to get over their addiction to food and shelter and college should help them earn money to support their addiction.


I've noticed Software Engineering is becoming more common as a post secondary school education offering. Perhaps this would be more appropriate for most people.

Also helps work toward justifying the "software engineer" title that many non qualifying people like to use.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: