Ask HN: Why do many CS graduates lack foundational knowledge?

Recently, I have started interviewing interns in their final semester for an internship and to my surprise I frequently encounter a lack in what I would call foundational computer science knowledge. I don't mean data structures and algorithms, but for example

* Database Systems (relational algebra, SQL)

* Concurrent Programming

* Network Programming

It seems most are exposed to them partially through project work but without the base knowledge.

Is this typical for CS undergraduate degrees because you get to pick your own classes?

386 points | by platzhirsch 403 days ago

193 comments

  • dathinab 402 days ago
    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).

    • screwturner68 402 days ago
      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.

      • janalsncm 402 days ago
        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

        • pnt12 402 days ago
          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!

          • janalsncm 400 days ago
            I don’t think OP is advocating teaching tech stacks. OP is advocating generalized software engineering vocational training.
        • retrocryptid 400 days ago
          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.

      • Clubber 402 days ago
        >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.

      • ghaff 402 days ago
        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.)

        • screwturner68 402 days ago
          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.
          • shagie 402 days ago
            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.

            • ghaff 402 days ago
              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.
              • shagie 402 days ago
                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.

          • ghaff 402 days ago
            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.
        • another-dave 402 days ago
          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.

      • barry-cotter 402 days ago
        > 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.

      • rchaud 402 days ago
        >> 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.

      • scarface74 402 days ago
        > 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?

      • retrocryptid 400 days ago
        "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.)

    • emilecantin 402 days ago
      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.

      • mkipper 402 days ago
        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.

        • GrumpyYoungMan 402 days ago
          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.
          • mkipper 402 days ago
            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.

      • shagie 402 days ago
        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."

    • nayuki 402 days ago
      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).

    • washadjeffmad 402 days ago
      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".

      • ghaff 402 days ago
        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.
    • tensor 402 days ago
      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.

      • paulrpotts 402 days ago
        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.
    • scarface74 402 days ago
      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.
    • tejohnso 402 days ago
      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.

  • WalterBright 403 days ago
    CS is about Computer Science, not programming. The foundational courses should be in math, physics, statistics, calculus, proofs, algorithms, complexity, type systems, theorems, computability, etc.

    Learning how to use SQL is more of a trade school course.

    I have a BS, Bachelor of Science. The foundational classes were math, math, math, math, and more math. There were no classes in how to operate a machine tool. I befriended the guy who ran the machine shop that built apparatus for the scientists, and he taught me how to run the machines. But that wasn't a class, it was just something I did on my own initiative.

    • bruce511 403 days ago
      >> Learning how to use SQL is more of a trade school course.

      While SQL the language is more "trade school", the original poster mentioned;

      >> Database Systems (relational algebra, SQL)

      Certainly I would expect a CS course to cover databases, in the sense of 3rd-normal-form etc, sorting, searching, indexing and so on. I wouldn't expect them to necessarily be proficient in any one database product, but I would expect them to understand different ways of storing data, and how to design a "data layout" based on good practices (again 3rd normal form etc).

      • WalterBright 403 days ago
        I learned the nuts and bolts of engineering on the job, and from reading the (absolutely delightful) Boeing design manuals, where they distilled the lore of how to design airliners in a series of manuals.

        But in my long career, I've never encountered anyone who learned math on the job.

        Math was my superpower at work.

        But since I was not a CS major, I never properly learned the academic side of CS. I run into this deficit now and then, and I'm not proud of it. Andrei Alexandrescu joined me on the D project, and had the academic chops, which was greatly appreciated by me.

        • tzs 403 days ago
          > But since I was not a CS major, I never properly learned the academic side of CS.

          Would you have been a CS major if that had been an option at Caltech?

          For everyone wondering why CS would not have been an option, at the time Walter was at Caltech they didn't offer CS as an undergraduate major. They did have a CS department which did offer some undergraduate CS classes but it only offered graduate degrees. Undergraduates interested in CS typically majored in math or physics or engineering and took the undergraduate CS courses in addition to the coursework of their major.

          I don't remember when they started offering an undergraduate CS degree. I think it was not too long after I graduated (class of '82), which was a couple years or so behind Walter.

          • WalterBright 403 days ago
            > Would you have been a CS major if that had been an option at Caltech?

            No. I wanted to design airplanes, jet engines, rockets, etc. I had a secondary interest in electronics, and a tertiary one in programming. I wasn't that interested in the academic side of computing.

            P.S. nice to see other techers here!

          • ghaff 402 days ago
            By way of context, at MIT (which I'm much more familiar with), there was effectively a CS major out of the School of Electrical Engineering and Computer Science, but there weren't PCs and computing was pretty much limited to Multics in the AI lab. (There was a mainframe with punch cards that you could get a limited account for using with the other branches of engineering. I took a Fortran course then I don't think I touched a computer for the rest of my time as an undergrad.)

            There wasn't widespread access to computers at MIT until Project Athena. So CS was historically mostly not hands on. And that's somewhere where CS was in the engineering school. At many schools, it was part of the math department.

            So, there's a strong academic tradition of CS being more about math than programming. Even the current CS intro course at MIT is mostly about algorithms and you're pretty much expected to pick up Python on your own.

        • vidanay 402 days ago
          > reading the (absolutely delightful) Boeing design manuals

          Authored by Dr. Jan Roskam perhaps?

      • bobthepanda 402 days ago
        Honestly, a lot of university curricula are, at best, out of date, since often academics are not necessarily incentivized to learn the latest and greatest of programming.

        I remember entering a Java course, where the professor specifically said to write Java 6, even though it was EOL and Java 8 had been out for a while, and you would get points knocked off if you used any "fancy" Java 8 stuff they didn't know.

        • bawolff 402 days ago
          Programming really hasn't changed much fundamentally in the last 20 years. I think its a good thing university doesn't chase the current trend. The knowledge would be quickly outdated. They should teach the stuff that isn't flavour of the week but common to everything.
          • alpaca128 402 days ago
            Some things do change, though, and courses which involve specific technologies should at least be up to date to a point where people aren't required to use Windows XP when every laptop runs Windows 10.
            • zerkten 402 days ago
              I kind of get what you mean, but you don't provide a good example. The first question is what are the specific technologies and why are they involved? If you take some outdated version of Java, this could be interpreted as teaching you to be a Swing developer, or how to apply Java for user interfaces and learning some fundamental design patterns.

              Whether it is the former or latter matters a lot. Oftentimes the people taking the course don't appreciate which it either which is problematic. In your example, someone could be given a really good desktop programming class on Win32 whether they used Windows XP or Windows 10. The success of this is orthogonal to the tools at hand really. It is what the professor and/or students make of it.

              • bobthepanda 402 days ago
                In general, I find that many fresh college folks (new hires and interns alike) struggle with Java streams. Streams and stream adjacent things like Optional remove a lot of tedium and footguns from older Java code styles, and unfortunately learning them tends to be a speed bump for anyone onboarding to the code base from college, because it’s just not covered, even in a Java algos course where I believe they’d be fairly relevant.
        • simplotek 402 days ago
          > even though it was EOL and Java 8 had been out for a while,

          What's wrong with that?

          You're supposed to cover the basics in intro to programming courses, and typically Java is not outright taught in college, and instead it's object-oriented programming using a random OO language, which more often than not is Java. Do you need to use Java20 to learn inheritance?

          Also, unless you expect to work exclusively on greenfield projects, the bulk of any developer work is maintaining legacy applications. I still see an awful lot of projects in java 8 and only a few in java 11. Insisting on the latest and greatest java release makes as much sense as pressing to cover Lombok or Kotlin.

          • alpaca128 402 days ago
            > Do you need to use Java20 to learn inheritance?

            Do you need to prohibit Java 20 to teach inheritance? Working with an outdated version as basis is fine, not accepting newer versions for no reason is something different imho.

            > I still see an awful lot of projects in java 8 and only a few in java 11.

            Sure, but that doesn't mean knowledge of newer features should be discouraged.

            • simplotek 402 days ago
              > Do you need to prohibit Java 20 to teach inheritance?

              Java20 did not introduced inheritance, nor did it introduced any OO concept. Java20 adds no value to those learning OO. If you're writing java code but are not using any Java20 feature, you are not writing Java20 code.

              > Working with an outdated version (...)

              It is not outdated. You are not using any feature. You're just succumbing to the misplaced belief that new means more value. It doesn't, specially when the only thing that you get is more complexity.

              > Sure, but that doesn't mean knowledge of newer features (...)

              Repeat after me: Java20 adds no OO feature. You do not have to use Java20 to learn OO. OO courses are not java courses. Do you understand this?

              • alpaca128 402 days ago
                > It is not outdated. [...] You're just succumbing to the misplaced belief that new means more value

                Sure, technically you can still teach HTML in Internet Explorer 6 and OOP in Java 7 or something, but that has no added benefit and is actually more difficult to set up nowadays. And you can't deny that old versions are outdated when they don't even receive security updates anymore.

                > the only thing that you get is more complexity.

                What part of OOP basics got more complex in Java? And why teach Java at all if simpler OOP languages exist? Not to mention that avoiding complexity can actually be counterproductive for teaching. As an example, I got more than 5 years of Java-focused programming education and afterwards I still didn't know what a classpath is and couldn't write a single line outside an IDE because nobody wanted to expose complicated stuff to the students. Instead of forbidding students from using a newer Java version one should focus on the actually important part.

            • layer8 402 days ago
              The reason is it creates extra work for the teachers (having to keep up with newer features, bigger diversity of solutions they receive) without much benefit regarding the substance of what they need to teach.

              Some universities choose a more “exotic” but more stable programming language for that reason (like SML or Scheme or Smalltalk), but then also get criticized because it’s not a major industry standard.

          • bobthepanda 402 days ago
            I mean, Java 8 had the lambdas and FP which I would argue are pretty important in modern Java.

            But like, that’s the rule. I took a web class in college and the professor was teaching how to use <i> and <b> tags, which are no longer supported as part of the standard. (Not to mention that these days it’s not really helpful.)

            • DrewADesign 402 days ago
              As an aside, they are once again part of the standard.

              https://webmasters.stackexchange.com/questions/27693/should-...

            • simplotek 402 days ago
              > I mean, Java 8 had the lambdas and FP which I would argue are pretty important in modern Java.

              What role do you believe lambdas and support for functional programming play in object-oriented programming courses?

              • bobthepanda 402 days ago
                I don’t just see this behavior in OOP style courses.

                Most algos classes would probably benefit from streams, and there are many of them being taught in Java for reasons unrelated to OOP. Universities often stick to one language for much of the programming curriculum.

              • jen20 402 days ago
                Aren’t lambdas implemented as objects with common interfaces in Java?
              • oriolid 402 days ago
                To prove two points: First that forcing objects everywhere makes things really complicated compared to FP, second that under the hood everything can be shoehorned to object model.
                • simplotek 402 days ago
                  > First that forcing objects everywhere makes things really complicated compared to FP

                  Pointless. They are OO courses, not FP courses. You have FP courses already covering that.

                  > second that under the hood everything can be shoehorned to object model.

                  You do not need lambdas or FP for that.

                  So, what's the point of lambdas and FP in a OO course?

                  • jen20 402 days ago
                    Frankly if you want to teach object oriented languages, you should be teaching Smalltalk or Objective C, not things derived from C++. Message passing is the defining feature of object orientation.

                    If the intent is actually to teach polymorphism and encapsulation, both of those can be done in raw C.

                    • oriolid 402 days ago
                      The question is then, why should object oriented languages be taught? It seems to me that for last 25 years or so the true object orientation has been a historical curiosity that inspired polymorphism and encapsulation and only interest for people who want to argue that this and that language aren't true object oriented languages.
                      • jen20 402 days ago
                        Indeed: I wouldn’t bother. Teach procedural and functional programming to undergrads as primary focuses.

                        However, polymorphism and encapsulation have existed for much longer than “OO” languages. What is stdout? Seems pretty polymorphic to me. How does one gain access[1] to a variable declared in a .c file that is not exposed via the header. That’s encapsulation…

                        [1]: there are of course ways, but they are often also true of private members of class instances too.

                        • oriolid 402 days ago
                          Good point. I was thinking about the C++/Java meaning of the words because that way of doing things has proved to be useful but they're not the only way indeed.
        • zelphirkalt 402 days ago
          Had a similar thing with a guy who taught Android programming and was stuck on Android 2, while Android 5 or so was out. He did not know about specifying button handlers in the XML of the view and all kinds of stuff. They did not manage to set up the IDE properly for the exam, so that logging and installing the written app on a phone did not work either. Got out of it with a bad grade, because he did not see his Android 2 shit in my solution.
          • nikau 402 days ago
            This is why courses should focus on fundamentals not flavour of the month stuff.

            Learn assembly, then learn C, then code up a small OS and learn semaphores and stacks and how a computer actually works.

      • daveslash 402 days ago
        My CS curriculum (15+ years ago) offered Databases as an upper-level elective. Another upper level elective was Compilers. Another was AI. There were other upper-level electives, and any student in the program had to take a few but not all of them. Any student in the program had the option to take the Database class, but not all did.
      • srcreigh 402 days ago
        In UWaterloo CS there's at least two database courses. One covering SQL/querying/normal forms, another looking at how DBs are implemented.

        They are not required courses. I agree with GP that DBs are not fundamental to CS in any way. It's trivial with other building blocks of CS though: predicate logic, algorithms, data structures. Set theory. Discrete math basics (also fundamental CS) gives lots of examples of normal forms (prime decomposition, mod p arithmetic, etc).

      • shusaku 402 days ago
        In the spirit of the above poster, I have to say as an undergrad we spent a lot of time on relational algebra rather than SQL, even though the latter is surely more practical.
      • platzhirsch 403 days ago
        Thank you, this is indeed what I meant and was covered by our curriculum in the third year. SQL was merely a practical example.
        • ilikehurdles 402 days ago
          SQL was probably only one semester’s course over a 4+ year college career. They probably continued to interact with SQL here and there in some other classes, but would rarely encounter needing more than cursory, googleable knowledge to get the job done.

          On top of all that, it’s likely their first (or close to first) time in an interview setting. Nerves have a way of making you forget a lot of things.

      • zerkten 402 days ago
        My CS undergrad in the UK circa 2001 covered the items you mentioned in the first course. The second course was similar to http://www.inf.unibz.it/~artale/DB2/db2-course.htm. With UK degrees there is limited ability for students to pick their own adventure and miss these when they choose a CS degree at a reasonable university.

        I personally don't agree with the purist approach that CS degrees should just be maths. There needs to be some minimal application at the very least and different universities will have different maths-CS-engineering boundaries based on how they've evolved.

        • WalterBright 402 days ago
          There is some overlap between programming and CS, sure. But Computer Science is more a branch of mathematics than programming.
      • SkyBelow 402 days ago
        I think this is an important point. Knowing how to specifically create a table in X flavor of SQL is something that a new grad can easily look up. Knowing when to consider normalizing data, why one would want to normalize, and why one wouldn't want to normalize, is more of what I would expect someone to learn in college. It isn't something that can be looked up using a quick google unless one already knows it and just forgotten the details.
      • peyton 403 days ago
        I don’t think top CS programs teach that. Maybe they’ll have a course on implementing databases.
    • herewulf 403 days ago
      It needs to be more like a trade school. The vast majority of jobs call for workers who can create and maintain programs that actually do things, not just theory.

      I've encountered far too many CS interns and grads who couldn't actually write reliable, non-spaghetti code. They also typically write commit messages that consist entirely of "Updated $THING" (no shit, I can see that from your diff), nothing about the why.

      My perspective may be slightly skewed from being called in as a consultant to fix the software these "computer scientists" have been hacking on, but I encountered a lot of these people when I was a undergrad student also.

      • WalterBright 403 days ago
        When hiring a newly minted undergrad, you should expect to need to do some mentoring on the nuts and bolts of programming. CS is not about lucid commit messages.

        If you want a trade school grad, hire one from a trade school. There's nothing wrong with that.

        I wouldn't hire a Caltech grad to fix my transmission, either. (I could fix your transmission, but AFAIK I was the only motorhead at Caltech, which was pretty disappointing.)

        • TheSpiceIsLife 403 days ago
          Where are the computer programming trade schools?

          TasTAFE offers a Cert III in Information and Communications Technology. This looks to be one third tech support, one third networking and server operations, and one third python / web / CSS. So not really much programming.

          A programming trade school to Mr would look like: four years on the job as an apprentice, full time, at some discounted pay rate.

          Two weeks four times a year at a training institution, away from the demands of the job, where theory and practice are taught.

          My trade certificate (metal fabrication) is a Cert III, my trade school included a fairly wide variety of subjects, both theory and practical.

          The employer would be required to give progressively more difficult tasks, and doing apprentice swaps with other businesses to cover industry experience if in-house doesn't provide opportunities for key requirements.

          Is anyone, anywhere doing that?

          I help train two apprentices every year here in metal fabrication. It's not that difficult, but few developing foetuses are borth wielding a welder. I mean the trade is not difficult, training people is hard.

          • exnihilo21 402 days ago
            Most Universities of Applied Sciences in the Netherlands, where you need to take 2 6 month apprenticeships before being allowed to graduate from a 4-year bachelor degree, and most courses are programming related.

            When finished you can continue for a master degree at a university, but have to take 1 year to get caught up on the theory you missed by not doing a bachelor degree on a university level.

          • WalterBright 402 days ago
            I'm sorry, I have no knowledge of current programming trade schools, other than the occasional blurb about "coding boot camps".
          • xorfish 402 days ago
            > Is anyone, anywhere doing that?

            You can do it in Switzerland:

            https://www.berufsberatung.ch/dyn/show/1900?id=7671

          • chris_wot 402 days ago
            If this is the Australian TAFE, it’s great but governments undervalue it and don’t fund it properly.
        • 908B64B197 402 days ago
          > If you want a trade school grad, hire one from a trade school. There's nothing wrong with that.

          If someone wants a person with good CS fundamentals and an idea of how to write code in a non-trivial codebase (so commit messages and an idea of concrete SQL and not just "I've proven this expression is correct but never ran it") they should look at Computer/Software Engineering programs, or at least select CS candidates from schools where the program incorporate real software development.

      • csomar 403 days ago
        > It needs to be more like a trade school. The vast majority of jobs call for workers who can create and maintain programs that actually do things, not just theory.

        These usually are the worst "programmers", in my experience. And I was one as I didn't go to CS school and was mostly self-taught. Lacking the basics of CS, you are just a code monkey.

        > I've encountered far too many CS interns and grads who couldn't actually write reliable, non-spaghetti code.

        An intern is an intern, I guess.

        > They also typically write commit messages that consist entirely of "Updated $THING" (no shit, I can see that from your diff), nothing about the why.

        You should have a an employee handbook and a coding style. Lazy people are everywhere, however.

        • wankle 402 days ago
          > These usually are the worst "programmers", in my experience. And I was one as I didn't go to CS school and was mostly self-taught. Lacking the basics of CS, you are just a code monkey.

          That's the type of condescending, discriminatory bias that having a degree affords, I guess.

          • layer8 402 days ago
            The GP just said he doesn’t have a degree.
            • wankle 402 days ago
              They used was several times, past tense, indicating they potentially do have a degree now; if not, their prose sounded snobbish to me either way, hence my comment.
      • vkk8 402 days ago
        Assuming the only purpose of universities is to serve the job market. I'd argue that the primary function of the university system is to transfer the collective human knowledge forward. The fact that some of it is sometimes needed in jobs is a secondary effect.

        But you're right that there should be schools that teach the practical programming skills. But it's the the trade schools that should be developed towards this goal, not universities.

        • re-thc 402 days ago
          University aim to serve the education market i.e. people that want to learn or assume they can get a job afterwards. They don't serve the employers or those that are looking to hire.

          Lots of degrees have no pathway to a job or career.

          • reillyse 402 days ago
            There is a huge divide between Europe and the US on this front. Because degrees are so expensive in the US the expectation is that you are going to pay for that with the shiny job you get as a result of the degree.

            In Europe where third level is far cheaper, it's more looked upon as continuing education. The way in the US people look at high school. Sure you'd like to get a job after, but it's really just a stepping stone to your career and not a huge financial investment that needs to be repayed.

            • re-thc 402 days ago
              Either way that doesn't mean it's made for "the job market". All it entails is you were sold a false premise just like how bootcamps promise of 6 figure salaries after a week of training...

              It's still made for those that want to be educated.

              • exnihilo21 402 days ago
                >Either way that doesn't mean it's made for "the job market".

                In the Netherlands the have, for example, the Hoger Beroep Onderwijs (HBO), which translates to Higher Professional Education. It is exactly tailored for the job market.

                • re-thc 402 days ago
                  > HBO

                  HBO sounds more like a vocational system that provides diplomas vs a bachelor degree in reference to universities in this discussion.

                  This type of system definitely exists in many places but I just assume it's out of scope as we're talking about in reference to CS graduates i.e. bachelor courses.

      • JCharante 402 days ago
        I disagree. Theory is harder to self learn whereas anybody can learn about putting together a CRUD app w/ React & Postgress. The students lack experience with the practical/applied side of CS because they lack the interest in it. Anyone else would have done side projects where they could have applied what they learned (my code got substantually better after I went to college).
      • screwturner68 402 days ago
        College does not need to be more like a trade school, that's what trade schools are for. If we need to churn out a gaggle of programmers the boot camp model has worked for years, Accenture used to push hundreds of college grads through their program in the 90's and out popped VB programmers. Now dozens of places provide the same service at a cost and in 12 short weeks you can become a "full stack" programmer. None of these people have a clue what is going on under the curtains but most run of the mill programmers don't need to know what is going on under the curtains. If you are interested in how things work and why they work that way going to a university and studying CS might will that need, but it involves a lot of math and other classes that you will likely never use in a workplace.

        This is just a simple misunderstanding of what college is for, expanding one's knowledge for the sake of expanding one's knowledge -being a good programmer is not the intent but it might be a by product.

        • WalterBright 402 days ago
          Interestingly, people who are great at CS math are not always very good at programming.
      • fsckboy 403 days ago
        did you study CS? not sure if you are criticizing CS students cuz "back in our day, we did CS in the snow, barefoot", or if you're criticizing the CS curriculum because you don't think it's necessary because you haven't needed it and they don't know what you know.
      • lmarcos 402 days ago
        > It needs to be more like a trade school. The vast majority of jobs call for workers who can create and maintain programs that actually do things, not just theory.

        Sure, but those things can be learned on the actual job. So after a few years, the CS student knows both the theory (because of uni) and the practice (because of work)... Whereas someone who only learnt the practical stuff, well, usually lacks the theoretical foundations.

        • hdhdhend 402 days ago
          > Sure, but those things can be learned on the actual job. So after a few years, the CS student knows both the theory

          So a CS degree is useless in industry. By the time you learn how to build things that work, you know how things work.

      • blacklion 402 days ago
        Other way around. Universities should train people who want to work in science/academia. Trade schools should train people who want to work in industry.

        Employers MUST NOT require university degree where trade school is sufficient (99% of positions in industry).

      • simplotek 402 days ago
        > It needs to be more like a trade school. The vast majority of jobs call for workers who can create and maintain programs that actually do things, not just theory.

        This bears repeating.

        It's important to learn how to deal with asynchronous and concurrent and parallel programming, but it's more important to have a firm grasp of message-passing and event-driven architectures.

        Rote learning the computational complexity of obscure algorithms no one uses does not hold a candle to knowing how to write clean and testable code, and design a component to accommodate changes.

        This computer science bullshit starts to feel a lot more like an exercise in ladder-pulling than actually prepare and assess an individual's ability to do meaningful work.

        • jart 402 days ago
          GPT4 can write clean and testable code. What it can't do are things like this:

              // rewrite this function so it's portable and doesn't use uint128_t
              uint64_t lemur64(void) {
                static uint128_t s = 2131259787901769494;
                return (s *= 15750249268501108917ull) >> 64;
              }
          
          In order to do that, you have to have a little computer scientist in you. Stuff like "asynchronous vs. concurrent vs. parallel programming" is the programming equivalent of a liberal arts degree. Who here will rise to meet my challenge? It's only doing a multiply and shift.
          • simplotek 402 days ago
            > GPT4 can write clean and testable code.

            Software developers aren't paid to write code. They are paid to deliver value.

            Your code delivers no value whatsoever. Many masters and PhD thesis are boiled down to a shareable library or even function call. You might feel clever for coming up with it or by knowing some trivia behind it, but ChatGPT can easily spit it out negating all the value you believe you were able to create.

            There is no value in something being hard. There is value in delivering value.

            • barnabee 391 days ago
              To paraphrase: hackers write code.

              We don’t do it because we’re paid for it[0]. If that’s your primary motivation maybe this is the wrong website.

              [0] sure, [too] many people are in tech primarily to make money, but it’s a bit sad.

            • jart 402 days ago
              And who identifies value? Is it the software developers? And why would the identifiers of value trust people who can't multiply and shift to be the ones responsible for delivering that value? That would be like Google hiring engineers who only got good because they're good at using Google. It would have been a better look if you had solved my challenge before using it as a platform.
              • KronisLV 402 days ago
                > And who identifies value?

                I'm fairly sure it's the people that pay our salaries and choose to keep us employed while we do whatever they need to, based on their perception of our output and how the needs of the customers/users are met.

                Will ChatGPT and other solutions like that be helpful with the complex, low level stuff? Perhaps, sometimes - depending on how explicit you'll be with your prompts, but more knowledge about what and how to ask will be necessary and even then good results aren't guaranteed per se.

                But will they help out a lot of developers with common, well known tasks and problems, for the majority of developers whose job consists of creating a few RESTful endpoints, maybe a database migration and hooking it up to React? I'm inclined to say yes a bit more confidently.

              • simplotek 402 days ago
                > And who identifies value?

                For starters, if you can't argue what is the value then none can fill in the void in your reasoning.

                Secondly, software developers have as part of their job description the task of finding solutions to problems. If they find solutions to problems that don't involve or require whatever trick you have in mind, that tells you what is it's value.

                Thirdly, did you ever saw any job advert explicitly requiring prior knowledge of any trick you have in mind? Or do you see ads for the ability to solve problems with a pre established software stack?

                > who can't multiply and shift t

                Tell me, how many open positions have you ever saw whose main ask was "can multiply and shift"? Zero.

                > That would be like Google hiring engineers who only got good because they're good at using Google.

                No, it would be like Google hiring people without any CS or IT degree who were good at software development but rejecting PhDs who had nothing to offer other than their little trivia on stuff no one cares about.

                You know, reality.

              • WalterBright 402 days ago
                > And who identifies value?

                The person paying for it with their own money.

            • lldt 401 days ago
              Hello simplotek,

              > Many masters and PhD thesis are boiled down to a shareable library or even function call.

              Oh wow... I have to ask, hast thou ever wondered _where_ the nicely-packaged shared library or function call implementation code came from in the first place?

              Thank you!

          • deanmen 402 days ago

                uint64_t lemur64(void) {
                  static uint64_t a = 2131259787901769494ull;
                  uint64_t b = 15750249268501108917ull;
            
                  uint64_t a_lo = a & 0x00000000ffffffffull;
                  uint64_t a_hi = a >> 32;
                  uint64_t b_lo = b & 0x00000000ffffffffull;
                  uint64_t b_hi = b >> 32;
            
                  uint64_t a_x_b_hi = a_hi * b_hi;
                  uint64_t a_x_b_mid = a_hi * b_lo;
                  uint64_t b_x_a_mid = b_hi * a_lo;
                  uint64_t a_x_b_lo = a_lo * b_lo;
            
                  uint64_t carry_bit = ((0x00000000ffffffffull & a_x_b_mid) +
                                    (0x00000000ffffffffull & b_x_a_mid) + (a_x_b_lo >> 32)) >>
                                   32;
            
                  uint64_t multhi =
                  a_x_b_hi + (a_x_b_mid >> 32) + (b_x_a_mid >> 32) + carry_bit;
            
                  return a = multhi;
                }
    • dgb23 402 days ago
      Relational algebra is math. SQL is a practical application of relational bags.

      There’s math and science behind concurrency and parallelism, and the coordination thereof.

      Network programming is a practical application of several parts, each of having foundations in math and science. From coding/decoding, to state machines. Wires are all about math and physics too.

      There’s more that is often left out. Specifically holistic systems and their research. Lisp, Smalltalk, Self etc. These systems reach into math, HCI, compilers, JITs…

      • simplotek 402 days ago
        > Relational algebra is math. SQL is a practical application of relational bags.

        How many database programmers do you know who ever did anything involving relational algebra when creating or tuning up a database?

        This point is specially pointless with the prevalence of ORM frameworks.

        > There’s math and science behind concurrency and parallelism, and the coordination thereof.

        Please find me the best example you can come up of what you see as math being put to practice in concurrent programming.

        > Network programming is a practical application of several parts (...)

        This is too much grasping at straws. Just show what you feel is the absolute best example.

        > There’s more that is often left out.

        There is nothing. You showed nothing as your best examples, and once you showed nothing you were left with nothing else to show.

        Enough with this silly "but it is math" nonsense. You can come up with a math formalization of an egg but that does not mean a degree in math will help you boil one. Enough with this nonsense.

        • roenxi 402 days ago
          > Enough with this silly "but it is math" nonsense. You can come up with a math formalization of an egg but that does not mean a degree in math will help you boil one. Enough with this nonsense.

          Formalising 3rd normal form and giving it a rigorous definition so that we can test if data is properly normalised is a big deal. Ditto having algorithms in concurrent systems that we can guarantee don't have logic bugs in them.

          If those things aren't math to you, then what are you willing to accept? Do you mean programmers have to sit down and draw an integral sign or it doesn't count? You're correct that doesn't happen, and you're probably setting yourself up to be steamrollered by someone who sees a well known pattern that the academics have been researching for years.

          The typical corporate database has big tracts that have been "designed" by someone doesn't appear to have thought very much about how to store data in an organised fashion. It raises the question of what fuzzy thoughts go through their brain since they are only interacting with a database because they have a need to store data in an organised fashion. Hopefully their thoughtlessness doesn't matter, but doing better than that is a low bar.

          • simplotek 402 days ago
            > Formalising 3rd normal form and giving it a rigorous definition so that we can test if data is properly normalised is a big deal.

            It isn't. Half the world already relies on ORM frameworks that barely require any input from the developer to setup relational databases, let alone knowledge on how to normalize them.

            On the rare occurrences a project feels that specialization on relational database design is relevant, more often than not it's far more useful to require expertise on specific RDBMS than trivia tricks.

            > If those things aren't math to you (...)

            You're missing the whole point. No one is arguing that you have math formalisms. The whole point is that those formalisms do not add any value at all. Don't you understand that?

            I mean, I can whip out a web app with multiple services running in the backend and with datastore using both DynamoDB and S3, and build a business around it. We can do this without ever knowing who Jack or Joe or Jim or Jose Cobb was, let alone what he wrote. What does it tell you?

            • roenxi 402 days ago
              > The whole point is that those formalisms do not add any value at all. Don't you understand that?

              I'm going to go a bit further than just not understanding, I'm actively disagreeing with you. Based on your arguments here, in a workplace I would advocate not letting you make any decisions about database schema.

              Sounds like the feeling might be mutual there though. Not saying you're bad at whatever it is you do; just I want to have to have schema designed by someone who has thought deeply about schema design. Databases usually outlive all the employees assembling it, can outlive an entire organisation and getting the design right can save days to months of work.

              The academics have got entire classes of bugs that they can demonstrate don't exist in normalised data, there are benefits to everyone coordinating around a standard shared view on how to lay out data and usually drifting away from the standard it turns out not to lead to real benefits long term. You can believe that is valueless or isn't math or whatever, but there is no point aggressively introducing opportunities for bugs when there is no reason for it. And to avoid doing that, the person making the decisions needs to understand the theory.

              • _gabe_ 402 days ago
                "Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious." -- Fred Brooks, The Mythical Man Month (1975)

                It's unfortunate that most people these days prefer unstructured blobs of json to formal relational databases. It's impossible to get up to speed in these types of environments because every time you think you "understand" the data, you find out about a random property that gets set in rare occurrences that throws off the whole relational model you intuitively built in your mind.

                • wankle 402 days ago
                  People who excel at theory usually don't do well in most programming positions. Perfectly normalized schemas do not hold up well in an operations heavy environment.
                  • _gabe_ 402 days ago
                    I'm not advocating for perfectly normalized schemas. There's a large gap from: perfectly normalized schema -> unstructured blob of json. I'm saying that most people nowadays prefer to not think at all about how their data looks and they'll add properties ad-hoc.

                    This also does not hold up well in an operations heavy environment. Like all things in programming, a well balanced approach is necessary. Some combination of formally structured data with some flexibility for future requirements is probably the best course of action here, but that's too much work for programmers these days.

            • seabird 402 days ago
              If you think an ORM somehow saves you from having to know how to make a normalized DB schema (even by intuitive means instead of formal ones), you've lost your mind. For most 9-5 developers just earning their paycheck, this train of thought can lead to absolutely fucking insane DB thrashing and data consistency problems. You might be getting away with it intuitively, but a lot of people won't, so keep it to yourself for your own sake.
        • oriolid 402 days ago
          > How many database programmers do you know who ever did anything involving relational algebra when creating or tuning up a database?

          ...and this explains why database designs are what they are. It's also why you don't learn SQL and if you do you never admit it: It condemns you to a lifetime of maintaining CRUDs written by people who don't understand relational algebra.

          • simplotek 402 days ago
            > ...and this explains why database designs are what they are.

            You mean good enough?

            • oriolid 402 days ago
              Good enough as in constant burden but not bad enough to fail the whole project.
              • simplotek 402 days ago
                > Good enough as in constant burden

                Are they, though? Or are you just trying to put up a strawman?

                Because I assure you plenty of highly reliable infrastructure is running 24-7 without the faintest concern over normalization.

                • oriolid 402 days ago
                  > Or are you just trying to put up a strawman?

                  Writing from personal experience. I can also assure you that a lot of this highly reliable infrastructure works only because a lot of tears and cursing that could have avoided if the designers had any idea what they were doing.

        • wankle 402 days ago
          Agree, I've programmed in various languages at various companies for three decades, do not have a degree and yet every point you made is 100% accurate and precise.
      • thrown123098 402 days ago
        >SQL is a practical application of relational bags.

        Apart from the fact it isn't; elements have specific order and that order matters.

        SQL is SQL, it's not relational algebra or whatever bastardization of it you can think up. In fact when it comes to SQL the only use relational algebra has is to tell you that anyone talking about it has never used SQL.

        • dgb23 402 days ago
          Your computer is also not a Turing Machine. The regex that you use is not really a regular language. Your functions and logic are not referentially transparent, because well, they have to run on a computer.

          But it's useful to learn the foundational mathematics of these things as there is a direct relationship between them.

          SQL has semantics that can be understood by relational algebra of relational bags. It's of course not a 1:1 translation, but the mathematical underpinnings are explained there. It's useful to learn the simpler, more abstract thinking tool in order to understand the concrete programming tool.

          • thrown123098 402 days ago
            My computer is very much a Turing machine since each time it runs out of disk space I can buy more disks. The fact you think a Turing machine has infinite memory rather than finite but arbitrarily large memory tells me all I need to know about the sorry state of your theoretical education.
            • rrobukef 402 days ago
              A Turing machine is a mathematical concept. It has, by definition, infinite memory. A computer is just a real machine that can do similar things as a Linear Bounded Automaton, a Turing machine's little brother who'll never do quite the same things.
              • thrown123098 402 days ago
                • rrobukef 402 days ago
                  There is a physical limit to the number of disks you can add to your CPU. There is a physical limit to the memory you can address in your CPU (48-bits). It is not arbitrarily large.

                  Also wrong for Turing Machines, it really is infinite. That's a big difference to arbitrarily large. The halting problem is undecidable for TM's but not for arbitrarily large (you'll need precise definitions though).

                  • thrown123098 402 days ago
                    It is left as an exercise to the reader to find a natural number which isn't arbitrarily large but calculable.
                    • rrobukef 402 days ago
                      The tape size needed for a Turing machine is incalculable. Here's a reference to a proof: https://scottaaronson.blog/?p=2725.

                      The machine with 7918-states, Z, stops (well, Z cannot be proven to run infinitly long) iff. ZFC is consistent. For this it needs a finite amount of space but we cannot calculate how much. If we could calculate an upper bound we've proven ZFC is consistent.

                      • thrown123098 401 days ago
                        Yes which is why the size if strictly finite but arbitrarily large.
            • bigbillheck 402 days ago
              > each time it runs out of disk space I can buy more disks.

              There's only so many that you can buy.

            • dgb23 402 days ago
              How much does an infinite amount of disk space cost?
              • oriolid 402 days ago
                Nothing, if it's your users who buy it instead of you.
              • thrown123098 402 days ago
                [flagged]
        • mabbo 402 days ago
          The developers who don't understand the relationship between relational algebra and SQL are the ones who end up confused why their query browned out prod.

          It's not exactly the same thing, but the underlying lessons and mental model matter.

          Of course, the move back towards nonrelational data stores these days may make the point moot.

          • wankle 402 days ago
            Three decades of programming in various languages and at various companies and today's discussion is the first time (after all those years writing SQL used by those applications) that I've seen the term "relational algebra". My queries run great in production at various companies right now, including many I guarantee are widely recognizable.
            • mabbo 402 days ago
              Sounds like you're working hard to defend your ego rather than seeing the opportunity to learn and improve yourself.

              You must be a delight to work with.

    • pjmlp 402 days ago
      That is US specific, I can assure you that without programming knowledge across several domains there is no graduation on many European universities.

      https://www.di.fct.unl.pt/en/education/integrated-master-com...

      https://tecnico.ulisboa.pt/en/education/courses/undergraduat...

      • ACS_Solver 402 days ago
        I got my computer science BS and MSc from two different EU universities and I found the programming aspects to be very secondary. Yes, you needed some programming to graduate but not nearly as much as math, and half of the programming you needed had little to do with real-world programming.

        In two undergrad courses, we programmed in an old language and a very outdated environment, the one the professor had used their entire career - and apparently that continued until the prof retired. The courses were about implementing algorithms, so the language didn't really matter, but I would say the course was probably a net negative from a software engineering perspective.

        We had a database course covering the mathematics in good detail. We learned the relational model, normal forms and such mathematically, with a little basic SQL at the end. That was great for understanding, as at the end of the course you'd be able to write out the actual maths performed by a query but it didn't really teach SQL.

        Multiple professors wrote typical "researcher code" - I don't necessarily want to say it's bad but it's very different from what you'd see as good industry code. Lots of global state, variable names with 1-2 letters, magic numbers. It's understandable why research code to be like that but it is much more fitting for an implementation of a research paper than for a software product.

        • pjmlp 402 days ago
          Of course I am unable to validate 100% of them, but the ones I had contact with, either in Portugal, or due to my research stay at CERN, I can assure having proper coding skills is essential for graduation.

          On my degree, database classes required both theory, as writing a full blown application in Oracle.

          Naturally like everything there are students that work around it, but then they aren't in position to complain about not learning.

      • nosianu 402 days ago
        At my German university in the late 1990s we did use a few programming languages - but all of them not for themselves but for demonstration. Modula 2 for introducing higher level concepts such as modules and OOP, VHDL for hardware, PHIGS for graphics (okay not a language), SQL of course, and some C and C++.

        We did not truly learn any of those though, it's just that they were used.

        The specific languages did not really matter, they were secondary, just some tools. One Theoretical CS professor used some really obscure thing whose name I forgot, really niche, again it was only used to demonstrate some theoretical aspects (provability I think).

        Most content was math and formal stuff. Some experiments and low-level stuff, like creating a sound directly from a chip (no computer), in assembler, as part of intro to hardware.

        I would have fekt pretty irritated and that I was wasting my time if we had had courses about learning programming languages (designing them, writing compilers etc., is another matter). This is something easily and better done on your own, learning the actual languages.

      • viraptor 402 days ago
        I know they're half-European now, but I've finished MComp in the UK and you could totally do the post-batchelor stuff with next to no programming.
      • NineStarPoint 402 days ago
        Neither of those are a pure Computer Science course, they are “and engineering” or “and informatics”. There are similar courses in the US that teach computer science alongside more practical skills.

        It’s ultimately a matter of the focus of the major and department.

        • pjmlp 402 days ago
          Yeah that is the thing, there is no pure Computer Science without coding, unless one goes to applied maths (at least in Portugal).
      • not_me_ever 402 days ago
        I have been teaching at european universities for 20+ years now.

        You can graduate without writing a single line of code, without having ever heard of SQL, and knowing nothing about math.

        If you do it right. Or is that "do it wrong"?

        • pjmlp 402 days ago
          I guess several of those universities are doing the credits accounting wrong.
      • titannet 402 days ago
        At my German university I could have graduated with next to no knowledge of programming and SQL and afaik the curriculum hasn't really changed.
    • richrichardsson 402 days ago
      > I have a BS, Bachelor of Science.

      Mildly off-topic, but is "BS" the usual shortening of this type of degree where you hail from? If it's United States I would be even more surprised that this would be the case, since who wants a "BS Degree"? In the UK at least we normally refer to them as BSc degrees and there's never really a need to expand.

      • bregma 402 days ago
        "BS" is the simplified American initialism for Baccalaureate Scientate. In most other English-speaking countries the acronym "B.Sc." is used. It's like the way they misspell "colour" and "labour". A cute affectation that we may well snicker about behind their collective backs but in the end it's meaningful and respectable and we move on.

        "CS" on the other hand is not short for "computer programmer job training" so I'm confused by the expectation of the original Ask HN question.

      • bdcravens 402 days ago
        Yes, that's the common abbreviation.
        • rawbert 402 days ago
          If it is, you should stop using it like that because it made even me, a non-english native, giggle.
          • rxhernandez 402 days ago
            There are at least a hundred million you would have to convince to stop using that abbreviation before it goes out of fashion in the US.
    • cmrdporcupine 402 days ago
      The relational data model is first order or propositional logic, and set theory. It's math & logic. It is intrinsic to computer science, since Codd's foundational papers.

      SQL itself is full of problems, but the foundations behind it are definitely not; database theory and database internals is one of the deepest domains of computer science, up there with operating systems. And dismissing this knowledge as "trade school course"work is... sad.

    • AnimalMuppet 402 days ago
      In the real world, though, 95% of those with CS degrees are going to work as software engineers, not as computer scientists. So what we really need is software engineering programs, and far fewer people in CS programs.

      We need, essentially, the divide between chemistry degrees and chemical engineering degrees. That hasn't happened yet for CS, but it needs to.

      And that's what the OP is asking for - people who have software engineering knowledge, not CS knowledge.

      • gedy 402 days ago
        Not quite the same as what you suggest, but I did a BS in Computer Engineering, and really enjoyed it compared to CS or EE. There were some software engineering and practical programming courses, but also included hardware design.

        Though I struggle with leet code quizzes so there's that..

    • 7952 402 days ago
      It is common in science to do experiments and learn lab skills to be able to do those experiments. Surely programming languages are just a way of doing practical work.
    • gosh400 401 days ago
      That sort of erroneous thinking (about SQL) was the reason Sun Microsystems (Java, NeWS, Sparc processors, etc), didn't have a Relational DBMS, and then had to buy MySQL for $1B, in order to make itself an attractive purchase (to save the company) - which Oracle then did for $7B.
    • mhh__ 402 days ago
      Databases aren't about SQL as much as a taste of distributed systems.
    • eurasiantiger 402 days ago
      Programming is just applied discrete mathematics.
      • Koshkin 402 days ago
        Sure. Just like making cars is applied classical mechanics.
    • hardware2win 402 days ago
      >CS is about Computer Science, not programming.

      Then why almost every semester has some heavy programming course?

      • zelphirkalt 402 days ago
        Heavily dependent on where you study.
    • raincole 402 days ago
      SQL is a trade school course? Do you think

      1) We should teach relational database purely from relational algebra without an practical example.

      or

      2) Relational database is a trade school course too.

      If 1), maybe it makes sense for in academic sense, but I personally would rather to work with an intern who doesn't know database at all than someone who knows a bit of relational algebra but not SQL.

      If 2), how about operation systems? Compiler? Networking? Are these all just implementation details and not belong to a CS cirriculum?

    • alxmng 403 days ago
      How is computer science not programming? The vast majority of CS research papers are about programming.
      • Galanwe 402 days ago
        > The vast majority of CS research papers are about programming.

        Hum, allow me to disagree strongly.

        Maybe the vast majority of those you read, but not overall. My experience is that most research papers look like math, or linguistic, etc, while the annexes show example use cases that relate to actual pragmatic applications.

        From my friends that did PhDs and regularly write research papers, here is what it looks like:

        - One of them works on detecting or bypassing virus signatures. The papers look like high level linguistic theorems to prove that some grammars respect some constraints. It's mainly algebra and language theory.

        - An other works on watermarks that can resist compression. These ones are 100% algebra and analysis. The applications on watermarking are only mentioned as possible use cases, and a proof of concept was done in his thesis.

        - One work on transactional memories. I don't think she even know herself how to program, her papers are hardcore math in some intricate vector space. She has no idea what transactional memories are used for, she's just interested in the underlying math problems to be solved.

      • alex_sf 403 days ago
        CS research papers are about programming in the same sense that physics papers are about rockets.
        • alxmng 403 days ago
          If the only thing you could do with physics was build rockets, then physics would be akin to rocket building. There is no such thing as computers without programming. That CS isn't about programming is such an absurd perspective. Even if you consider that some CS research is mostly focused on hardware, the vast majority of CS research is about software. The vast majority of CS research is about writing programs.
          • AYBABTME 403 days ago
            Algorithms without computers (in the "plastic box with CPU+memory" sense) are definitely a thing. Computers in the end, as we experience them everyday, are just one particularly manufacturable manifestation of Turing machines. A bunch of stuff in life and nature is amenable to algorithmic treatment. "Algorithms to live by" is one popular example of that aspect of computer science applied to life.

            Programming is just a way to write down a mechanism. A mechanical computer would be "programmed" quite differently than by writing code in a text editor.

            • alxmng 402 days ago
              Algorithms are programs. Computing is running an algorithm, the program. Computing is programming! The Turing machine was a theoretical concept created to prove things about whether we could program a machine to solve a certain class of problems.

              It was stated above that 'a function is effectively calculable if its values can be found by some purely mechanical process'. We may take this statement literally, understanding by a purely mechanical process one which could be carried out by a machine. It is possible to give a mathematical description, in a certain normal form, of the structures of these machines. The development of these ideas leads to the author's definition of a computable function, and to an identification of computability with effective calculability. It is not difficult, though somewhat laborious, to prove that these three definitions [the 3rd is the λ-calculus] are equivalent.

              — Turing (1939) in The Undecidable, p. 160

              Computer science is most definitely the science of programming machines (computers). It seems ridiculous to me to say CS is not the study of programming. Does CS involve other disciplines like math and physics? Yes. Of course. But it uses math and physics towards the end of programming a machine to carry out the programs.

              • dcow 402 days ago
                You’re making pretty strong claims and passing them off as fact. It doesn’t feel like a discussion and I think you’re harming the discourse.

                Let’s consult Wikipedia:

                Computer science is the study of computation, automation, and information.[1][2][3] Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (including the design and implementation of hardware and software).[4][5][6] Computer science is generally considered an academic discipline and distinct from computer programming which is considered to be a technical field.[7]

                It directly contradicts the narrative you’re peddling. Please, listen to people trying to explain the nuance to you and actually engage. Don’t just keep repeating the same misconception ad nauseam.

                • alxmng 402 days ago
                  Sure, let’s consult Wikipedia:

                  “A computer is a machine that can be programmed to carry out sequences of arithmetic or logical operations (computation) automatically”

                  “Computation is any type of arithmetic or non-arithmetic calculation that follows a well-defined model (e.g., an algorithm)” AKA a program.

                  So computation is executing a program. And computers are machines which execute programs.

                  Turing and the Church-Turing thesis define computability as whether something can be expressed as a program (an algorithm).

                  So computer science is about programming. The science of programming, programs, and the machines that run them.

                  • arethuza 402 days ago
                    Analogue computers can handle certain classes of problems very nicely and they don't follow "sequences of arithmetic or logical operations"?
                    • alxmng 402 days ago
                      Yes, analog computers are very interesting. Though they typically do include arithmetic operations. They were often programmed with patch bays and the program is the patch bay configuration. So the programming was still discrete.
                      • dcow 402 days ago
                        Wikipedia is literally telling you there’s a difference between the abstract study of the logic that underpins how we approach designing and programming computers, and the actual tools and processes used to do so, and you’re just ignoring it. IDK how else to help you.

                        Nobody is arguing that computers don't compute. Why are you stuck on that minutia?

              • Koshkin 402 days ago
                > Algorithms are programs.

                This is patently incorrect. An algorithm is an idea, whereas a program contains a concrete representation (implementation) of one or more algorithms executable on a computer.

          • grumpyprole 403 days ago
            > There is no such thing as computers without programming.

            "Programming" in industry has a very narrow definition though.

      • tylerchr 403 days ago
        Have you read a lot of biology papers? Are they all about operating microscopes?
        • alxmng 403 days ago
          We're not talking about biology. There is no such thing as computers without programming.
          • dcow 402 days ago
            Honestly your comments/behavior in this thread read as borderline sealioning. I’m not accusing you of it, just saying that it is so absurd it almost comes off that way.

            Computer Science is the study of how we design algorithms to process data. We do computer science using grammars that allow us to describe abstract operations on data. We categorize the different types of algorithmic solutions to problems. We study the limits of efficiency and prove things about the various classes of algorithmic problems and their solutions. We generally work with discrete structures and type systems (like our beloved lambda calculus, origin of the Y combinator).

            You can design algorithms without ever compiling a single piece of code just like you can add numbers without ever using a calculator. In computer science we talk about abstract syntax trees, higher order functions, context free and regular grammars, finite state automata, logic, and numbers. You can even get meta and modify your own algorithm’s data as part of the algorithm itself. All this happens independent of a particular instance of a physical machine.

            Programming means “issue instructions to a given instance of a machine so that it behaves a certain way”. We take all our theory and apply it to an electrical device that has a physical processor and fixed memory. We program a microchip by writing chains of instructions to its memory. We measure performance in cycles per second. When programming we talk about machine instructions, loadable images, calling conventions, binary interfaces, program counter, alignment, and words.

            TL;DR: just go read the Wikipedia page on Computer Science, it’s quite clear.

            https://en.wikipedia.org/wiki/Computer_science

          • bell-cot 402 days ago
          • WalterBright 403 days ago
            Try to prove your type system is sound without the academic math.
            • tayo42 403 days ago
              What is an unsound type system. Why and how is it relevant for programing?
              • WalterBright 403 days ago
                I can't give you a mathematical definition of it, but my intuitive one is that an unsound type system is a collection of kludges. It's relevant for programming because the language winds up with all kinds of ugly edge cases where things just don't line up right.

                With a sound type system, you can do things like compose a new type out of other types, and it will work consistently (not produce weird edge behaviors).

                For example, C's `void` type introduces anomalous behavior. A function returning `void` is not composable, e.g.:

                    void foo();
                    void v = foo();
                
                would work in a sound type system, but does not work in C. You'll see it in the compiler implementation because it's a special case that appears over and over.
                • Koshkin 402 days ago
                  Isn’t that why some other languages explicitly draw a distinction between a function and a procedure? I think ‘void’ was introduced in C to do the same thing, implicitly (because omitting the return type does not achieve that).
                  • WalterBright 402 days ago
                    Yes, but Wirth (Pascal's inventor) was an academic, which is why Pascal has a separate notion of functions and procedures. `void` is a hackish special case in the type system, and not just for function returns. It's unsound.
            • alxmng 403 days ago
              A type system is an aspect of programming. I would hope a CS course covers type systems.
              • WalterBright 403 days ago
                Proving something about a type system requires zero expertise in programming, debugging, git, Linux, C++, etc. And expertise in programming, debugging, etc., is of zero use in attempting to prove something about the type system.

                As has been pointed out to me several times by CS academics, I could stand taking a course in type theory. I have a good intuitive sense about it (likely from my math background), but have no idea how to prove something about it.

              • joshuamorton 403 days ago
                A type system is an aspect of a logical system. You can have typed boolean algebras, I don't think anyone programs in those though.

                A CS courseload certainly doesn't (and certainly not in the required selection of courses) cover soundness of a language. Even my theory-focused classload only covered automata up to proofs of regularity etc. This is, sort of, step 0 in soundness-proving methodologies, but it's only step zero.

                • alxmng 402 days ago
                  The purpose of a type system is to ensure the correctness of programs. That's what they are, that's why they were invented, that's why they were studied. That CS involves math doesn't change the fact that it's about programming.

                  The whole reason we want to prove a type system sound is so we can prove certain things about the programs that use that type system.

                  • joshuamorton 402 days ago
                    That's one use, yes, but it isn't the only use. And it's certainly not why they were invented

                    Typed lambda calculus was formalized before the first programmable computers, and it's relation to programming wasn't clarified for another 20+ years (and real type systems don't really start to appear in programming languages for another decade after that afaik).

                  • dcow 402 days ago
                    You need to learn some history. Or at least cite your claims.

                    We use type systems to help abstract patterns of data into logical constructs that can be reasoned about. They are logic systems with grammar that describes relationships between axioms and constructs.

                    Seriously, go read a textbook and then we can pick this discussion up. Wikipedia has a good overview.

                    https://en.m.wikipedia.org/wiki/Type_theory

                    • alxmng 402 days ago
                      Ah, yes. Type theory originates before programming. Type theory only has relevance to computers insofar as it’s used to prove things about programs. Type theory in the context of computing is about programming.

                      We don’t call set theory and category theory “computer science” unless it’s about programming computers.

                      • joshuamorton 402 days ago
                        No, I mean that's an application yes, but I'd still call Alonzo Church a computer scientist and his work theoretical computer science.

                        Much as how people who study computability are computer scientist, even though none of the asymptomatic improvements to matrix multiplication since 1990 are even remotely relevant to any kind of real-life program.

                  • Koshkin 402 days ago
                    This is a narrow view on types; for example, types also help the compiler to produce optimized code. In general, they assist reasoning about and understanding the program.
          • nbernard 403 days ago
            > There is no such thing as computers without programming.

            But there is computer science not applied to computers: Operations research for instance is basically a branch of CS: it is not about programming and it has applications in business, logistics, etc.

          • hnick 402 days ago
            Do you consider an ASIC a computer? How about a sufficiently large number of NAND gates, arranged a certain way? They can perform computation but are not programmable after the fact.

            My computer science degree covered a lot of topics that didn't require a computer, for example relational algebra, discrete mathematics, and introductory formal logic. Of course, the practical usages of these are often best done through a computer and programming, but it's not a requirement.

            In reality all computer science degrees I'm familiar with make an attempt to expose students to relevant programming languages, it's simply practical and students demand it, but the details of coding style, how to use git, or similar topics may not be relevant in a computer science degree. That stuff isn't so hard to learn if you have clear guidelines and they have some baseline amount of intelligence which is one thing a degree tries to validate.

            • alxmng 402 days ago
              An ASIC is a computer which runs a fixed program. Determining what the ASIC is supposed to do, and implementing it, is programming. People who design ASICs are programmers.

              A computer is a machine which runs programs (it computes). That's literally the practical and theoretical basis for computing. Instead of running the program in our heads, we have designed machines to do it for us.

              We can calculate SHA256 with a paper and pencil. But we created machines (computers) to compute for us, according to the instructions we give them (the program, the algorithm).

              • dcow 402 days ago
                Is calculating SHA256 using pencil and paper programming? Or computing?
          • fsckboy 403 days ago
            > There is no such thing as computers without programming.

            not sure what you mean by this, because there's no such thing as programming without computers. (actually, the first computers were invented before programmable computers were invented)

            • alxmng 402 days ago
              Computing is running a program. That's what computing is. An algorithm is a program. A computer is a machine that performs the algorithm, so we don't have to. The Turing machine computes the answer by running the instructions (the program, the algorithm).
              • dcow 402 days ago
                On what computer does the algorithm:

                    1. take two slices of bread,
                    2. apply peanut butter to one side of one slice, 
                    3. apply jelly to one side of the other slice, 
                    4. place the slices together with the coated sides touching, and
                    5. enjoy.
                
                run?
                • alxmng 402 days ago
                  Sure. What would the study of human behavior or algorithms that aren’t computable with computers be called? Surely not “computer science”…
                  • dcow 402 days ago
                    Humans are biological machines that can compute, no?

                    Or, you really don't think I can design a logical grammar to formally express the creation of a PB&J?

                    • fsckboy 402 days ago
                      more to the point, the universe is computational in nature, and humans are, at best, subroutines with a shitty ABI
                • illiarian 402 days ago
                  Obligatory PB & Jelly Exact Instructions Challenge video: https://youtu.be/cDA3_5982h8

                  The answer is: it runs on dad, poorly :)

    • jiriknesl 402 days ago
      I think exactly the opposite. 95% of people studying CompSci are going to work as developers, system administrators or IT managers.

      They should know systems programming, databases, operating systems, web app development, security, basic logic, data structures, algorithms, JavaScript, and some backend languages. Add some ability to interview users, design at least basic UI, organize tasks, release your product and monitor it.

      Math, physics, statistics, calculus, proofs, theorems, and computability should be the interest when you decide to pursue PhD. For someone who's going to build ERP systems in Java, Oracle ad Angular these things are completely useless. Most of the developers are like this.

  • glitchc 403 days ago
    The answer is simple: Those are typically optional topics in a CS curriculum. You might as well ask why an undergrad doesn't know compression algorithms, compilers, robotics, software reverse-engineering, cryptography, computer vision... All of the above are optional and will only be taken by those who are interested in them.

    The more important question is: Are you explicitly mentioning databases, concurrency and networks in your posting? If not, then it explains why candidates are not filtering themselves out.

    • platzhirsch 403 days ago
      This is insightful because in my degree those classes were mandatory as part of a three year degree.

      To answer your question: we don't. I have no expectation around this. Primarily asking for my own curiosity in terms of differences in CS degrees.

      • nicce 403 days ago
        Indeed, it depends on where you are studying.

        At some level, we had SQL and network programming in my degree, but only for that level that we knew it exists and how to do it in very basics. We did not have concurrent programming at all as mandatory course.

        The most of your deeper expertise comes from the project work here, and depending on which project you end up or choose, they might or might not include above.

      • jwagenet 403 days ago
        Software is not unique in that it has a high degree of specialization that cannot be touched on in a general education. Probably 90% of skills/knowledge in my non-software engineering career was not taught in my program and generously 5-10% more may have been taught in the most rigorous programs.
      • jpatt 402 days ago
        Not sure where you are based, but in the US I know a lot of schools shoot for the ABET accrediting guidelines[0]. They directly call out the areas you're asking about:

          Exposure to computer architecture and organization, information management, networking and communication, operating systems, and parallel and distributed computing.
        
        But they only require "exposure" to these concepts whereas algorithms, theory, programming languages, etc are required to be "substantial." Which matches with your perceptions:

          It seems most are exposed to them partially through project work but without the base knowledge.
        
        
        
        [0] https://www.abet.org/accreditation/accreditation-criteria/cr...
  • jakevoytko 403 days ago
    I think you're forgetting how computer science programs operate. You're listing a bunch of specialty skills that are likely covered once in a topic class and never again. You said "I don't mean data structures and algorithms," which excludes the actual foundational skill that they had to build on in every class, in addition to raw programming chops.

    Why don't they know database systems? They might have taken a database course for 4 months 3 years ago and never touched a database again because it's not a trade school. School just validates that you can learn a series of related skills over a few months when necessary.

    What's the last thing you started and dropped after a few months just before the pandemic? How comfortable would you be if you interviewed for a job exclusively on that skill?

    • sime2009 402 days ago
      The original complaint is that student aren't even getting the 4 month introduction to topics like databases and concurrency. Later on in their career they wander into them and don't even realise there exists large body of important theory and knowledge for things like databases and data modelling. They get then get into trouble and assume "Well, I guess programming is just hard". Similar story for concurrency. These people later on naively create systems which are full of concurrency problems and are then puzzled as to why sometimes it breaks for no clear reason.
    • gardenhedge 402 days ago
      This. I have 10 years experience. I might have done a successful project in Ruby in year 2 and maintained it for years 3,4,5 but haven't touched it since then.
  • urthor 402 days ago
    University interns are mostly 21 years old.

    21 year olds won't know very much of anything in general.

    A 21 year old 3rd year college intern is... 21 years old

    Three quarters of a four year computer science degree doesn't change the fact they're a 21 year old.

    Even in the topics they have covered, the knowledge won't be very deep.

    A true mental model of concurrent programming is not something easily obtained.

    Frankly, most 35 y/o engineers don't truly appreciate the intricacies of intra-thread concurrent algorithms, unless it's their specialized area.

    Frankly, most engineers in the industry are too lazy to learn SQL well.

    Lower your expectations of 21 year olds. Lower your expectations of the workforce in general. Hackernews is a self selecting community of tech works who study their job in their spare time as a hobby.

    Most people I've worked with go home and watch football after 5pm.

    • colinwilyb 402 days ago
      This is a really great answer.

      It's worth noting that if you're in the position of interviewing then you probably have 10+ /years/ of industry specific experience.

      The applicant's prior ten years included 2 years of covid prison, a fractured high school experience, and learning basic life skills.

      • piyh 402 days ago
        A semester long class is about 45 hours of learning. You learn in your first two weeks on the job than any one class will teach you.
        • skewp 402 days ago
          That's a terribly stupid way to think about it. For one, it's not like you take one class and you're done with school. For two, it's not like your "45 credit hour" class is literally just 45 hours of "learning". If it's a computer science or engineering class, you're likely going to have homework assignments and projects that will consume as much or more time than the face to face instruction.

          Also, usually what you're learning in class are the fundamentals that undergird what you need to know for software development in the job. The basic underpinnings and context to understand what you're learning those first two weeks on the job.

          And if you're going to be that dismissive about what you learn in a college course, I'll tell you most of what I learned the first two weeks on the job: how to use the specific IDE the team I was hired onto preferred, how to build their specific project (barely applicable outside the project), how to contact IT to get a ticket to get them to install the IDE because I didn't have permission to, how to use the timecard website to log my hours, where the people on my team prefer to go out for lunch, a few hours of HR sexual harassment and cybersecurity training, how to set up my 401k and medical benefits, etc. etc. Basically, nothing to do with "computer science" which is what the original post was about.

          • mangosteenjuice 402 days ago
            The amount in the credit hours includes homework and projects.
            • Izkata 402 days ago
              4 month semesters is about 17 weeks, which only accounts for a little over two and a half hours per week. That's less than the time in lectures in my college, and doesn't account for any homework or lab time.
        • justeleblanc 402 days ago
          > A semester long class is about 45 hours of learning.

          Assuming your semester is twelve weeks long (as is the case at my university), that's less than 4h/week. I'm guessing you're only counting lectures as learning. If you only go to lectures for learning and don't do any kind of work on your own, no tutorials, no office hours, no revising for exams, no practice exercises, no homework, no discussions with your peers, nothing... Yeah, you'll probably feel like your first two weeks at the job is a crash course. But I'd say you failed at taking advantage of learning at a university to its fullest.

          • Acceptance 402 days ago
            You are totally right, but I would add that even people who take advantage of university also still are only going have been able to hit very few subjects deeply by the 5th or 6th semester.

            They are still only 21 years old, and just literally haven't had as many afternoons to spend tinkering.

          • skeaker 402 days ago
            All of that together still hardly changes things. Even if we're very generous and say that you managed to spend an unrealistic 16 hours a week on one topic in university (unrealistic as you are rarely doing only one class in uni), that's still tiny compared to the mandatory 40 hour work week that you will have at a full time position.
          • msmenardi 402 days ago
            The difference is at a university you have to learn ~5 different subjects at once. On the job you only learn one. It's more of a "Breadth first" approach.
            • hinkley 402 days ago
              And have you seen tuition and housing costs?

              When I was in school mostly the poor kids and lower middle class had jobs, but I wonder if that's still the case.

            • cryptonector 402 days ago
              What you learn on the job is largely up to you. You can choose to focus narrowly on your job and learn nothing more. Or you can stick your fingers in more pies to learn much more.
        • Gadiguibou 402 days ago
          I'm currently in uni and most courses are 3-credits meaning 45 hours of lectures per semester + 90 hours of tutorials, assignments, and studying.

          Those 45 hours of lectures are usually condensed material with little to no time to practice. It's expected that you practice during the other 90 hours (and on your own time if you plan on having straight A's).

          While you may get more hands-on experience in a few months of working full-time, you usually learn much fewer concepts.

          • zdragnar 402 days ago
            All of those hours of practice are merely covering what was already gone over in lecture, only it is largely unguided, and you're not really expected to correct your mistakes and do it right once the assignment is graded and handed back to you.

            Once you get into a job, you're constantly revising past mistakes, doing new things and all the while you have coworkers who are helping you- they don't want to wait for you to make a mistake, they want to help you get it right the first time if you need the help.

            Uni courses rarely cover real-world knowledge that you will use on the job. Aside from some specialized jobs, most of what they teach you is either too low-level or mostly useful as background knowledge. So many practices aren't covered in college courses- even things as simple as version control have only recently started to become common.

            You're going to be learning a lot on the job, and at a decent job what you learn will make what you went through in college pale in comparison.

            • watwut 402 days ago
              > you're constantly revising past mistakes, doing new things and all the while you have coworkers who are helping you- they don't want to wait for you to make a mistake, they want to help you get it right the first time if you need the help.

              I genuinely don't think most of workplace actually reassemble this ideal. Sometimes you learn ... plenty of times you do something repetitive. Sometimes you don't even learn about own bugs (hello agile). And sometimes they give you great advice and plenty of time they just don't.

        • bakuninsbart 402 days ago
          Here in Europe a typical course could be 5 CP, equalling 150h of work. One semester should average you 30 CP or 900h of work.

          In CS, we regularly had courses worth 300h in a semester, fe. analysis, system architecture or software engineering.

          • fho 402 days ago
            And, to finish your calculations, 30CP/900h are basically a full time job.

            In practice, students start to complain once a course tries to enforce their full "hour contingent".

            • interactivecode 402 days ago
              indeed because the deadlines are rigid and the work load estimates are inaccurate.
              • fho 402 days ago
                We have this discussion basically every new semester, honestly it's tiring. On the one hand we _are_ removing more and more content from our courses, not because we want ease the load on the first year students, but because we have to catch a increasingly large portion of students up to speed on topics that should have been covered in school.

                Related: one of the faculties here recently announced the introduction of a threshold grade. If you were bad at school, you are not taken into consideration, even if there are available places.

        • hinkley 402 days ago
          I worked at NCSA while I was in college, and in theory I understood how special that was but in practice I'm still absorbing what that meant. Having a place on campus doing software R&D is better in some ways than an internship, because it can be titrated over a longer period of time. Most colleges don't seem to have something like that. I know I've heard of such things at MIT, Berkeley, University of Illinois, Stanford, maybe RPI and Johns Hopkins, but not a peep from most others. I don't know if that's a PR failure or an educational one.

          I had a couple coworkers who were in the same classes as me and as part of trying to improve my time management I'd ask them how long the homework took and would get ridiculous answers like 'an hour' (2+ week assignments usually take tens of hours). I couldn't tell if they were smarter than I thought, braggarts, or liars, but after I switched from a support role to a coding role, in the space of a semester I was doing my homework in 2-3 hours. Often those homework problems are just a bit harder than an interview question, but without practice you're improvising the whole thing and that's a lot of effort.

          Before we started talking about 10,000 hours, I already had a rule of thumb that your competency as a developer tends to ratchet up at 100 hours, and rather substantially around 1000 hours. An internship will definitely hit 100 hours, but 1000 is still easily achievable in a year. 10k hours might as well be an imaginary number. That's longer than they've been in school and so feels like an unreachable finish line. Demotivating for sure. 1k just means "work hard for a bit".

        • cratermoon 402 days ago
          Isn't that 45 hours just time sitting in class, listening to lectures? How much learning really happens then, vs study time outside of class, doing the assigned problems, completing assignments, etc?
          • hinkley 402 days ago
            I spent a lot of time in the computer lab waiting for my roommate to figure out that CS was not the degree for him. I got a pretty good census of the sorts of things that other classmates got stuck on, probably informs my strong feelings on the value of quality tools over just tools.

            There were certainly a lot of people who didn't really understand the question, and I couldn't really help them much without risking the poorly worded guidelines on what would earn you an expulsion, but there were a lot of people spending a lot of time banging their heads against typos and simple structural errors.

            I learned early on that the facts and tasks I biff on are often the things I remember the clearest later on, but also that most people are not like that. They remember the things that they got right easily on the test. I'd wager that for most of them, that time spent wrestling with the computer provided very little to no growth opportunities at all. 10 hours on a homework assignment might have yielded at most 90 minutes of actual progress.

          • sn9 402 days ago
            A good rule of thumb is to average 2-3 hours out of class studying for every hour spent in class.

            For the more difficult classes, that number can be even higher.

            So for a class that has 3 hours of lecture time per week, that's 9+ hours per week on that subject alone.

        • chinchilla2020 402 days ago
          You won't learn linear algebra or programming on the job. Those things need to be learned prior to working.

          On the job training only works for certain types of skills

          • hehdjdff 402 days ago
            That is not true. I learned linear algebra on the job as it became required. Just like everything else I’ve needed to learn.

            This whole “gaps” argument is just people who’ve bought into a system. People coming out of uni have “gaps” as well just different gaps… gaps rich kids have so it’s ok with Google.

          • sitzkrieg 402 days ago
            learned both of these on the job (2D rendering stuff)
        • zikduruqe 402 days ago
      • tmpz22 402 days ago
        > if you're in the position of interviewing then you probably have 10+ /years/ of industry specific experience

        That is optimistic

        • cableshaft 402 days ago
          Haha yeah. I've been tossed resume with fifteen minutes notice and told "we need you to be one of the interviewers" when I had much less experience than that. Of course that was at small companies and I was one of the more experienced people there.
    • jwmoz 402 days ago
      You know I used to be so busy with learning things when I was younger but now I've started watching football at the weekends. Finally experiencing the normie life :D
      • urthor 402 days ago
        Honestly, I've spent so much time learning computer science trivia. I truly enjoyed learning all that computer science knowledge in my spare time.

        Now I feel obliged to work even harder to make a few million dollars out of it before I'm 35.

        I spent so long just jamming my brain full of Vim shortcuts and functional programming theory...

        I need to make some money out of it.

        Hard to enjoy my hobbies when I'm in debt to the bank and my mortgage isn't paid.

        • eropple 402 days ago
          > Now I feel obliged to work even harder to make a few million dollars out of it before I'm 35.

          35-year-old here, with a similar box of CS knowledge floating around. Comfortably sub-million, but with a nice house and a couple dogs.

          You really aren't obliged, and you don't really need to "make some money" out of it. More money would be nice, don't get me wrong. But you said you learned it because you enjoyed it. Which I did, too. I got my money's worth out of the learning.

          You are not obligated to financialize everything you enjoy. It's super important to understand that.

          The mortgage anxiety--I get that too. YMMV, but for me, all it took was practice. I don't think about the mortgage on my house. I've owned it for about five years. The money goes out every month. I work on renovating a room or building some furniture or going for a walk with my dogs. It need not be a terrifying specter; it'll either get paid in due course or I'll die and won't have to worry about it.

          I think there are a lot of brains (and mine is definitely one) wired to make a bigger deal of things than necessary to provide a sense of direction and meaning, but this one is so abstract and so luck-based that, for me at least, it was deeply valuable to fight against it. I kicked it into the back of a closet, and for me it's a lot easier now to just live.

          Again, YMMV.

          • nightski 402 days ago
            With your career you are trading time for money. It makes complete sense to optimize that. Most of the professional work you do will not be what you would work on in your free time anyways, it’s work to make some other person rich.
            • eropple 402 days ago
              > It makes complete sense to optimize that.

              Maybe? Like--define optimize. VC-chasing (alluded to by the great-grandparent poster elsewhere in-thread) is almost certainly less optimized from an EV perspective.

              If it's one's dream, absolutely chase it--but it should not feel obligatory because you absolutely can have a lot of happiness now without precluding later happiness, too, if you so wish.

              • nightski 402 days ago
                I don't need to define optimize because it will be different from each person. It's up to each individual to decide what is optimal for them.

                Nor did I say one had to optimize. I just said it makes sense if someone chooses to do so.

            • RangerScience 402 days ago
              (IMHO) Balance comes from forces in opposition.

              If you're only trading time for money in your career, IMHO, you don't have a career, you only have a job.

              At the least you should also be trading your time for expertise, networking, and accomplishment, although I would also recommend some degree of self-actualization and everyday enjoyment (if you're in a position to seek for those).

              • letsdothisagain 402 days ago
                This ties back really well to the OP. The most important thing in interviewing is dividing people into these two categories. 10 years of experience clocking-in and clocking-out is no experience at all. I'll hire some kid who is a go-getter over that.

                Unfortunately in academia it only matters if you hit your grades, which are gamed to hell and back. So you really can't tell at a glance if an A student is going to be good or bad, I hired based on a transcript once and got burned so badly that I'll never do it again.

        • whiplash451 402 days ago
          Aiming to make a few millions (presumably in savings) before you are 35 is extremely ambitious and will most likely not happen. Why set yourself up with such a goal, and how do you know it will even correlate with happiness in the end?

          You are much better off developing a specialty that you enjoy. Money is a side-effect of happiness and persistence.

          • ilyt 402 days ago
            Frankly the answer is expensive hobbies and/or hobbies requiring space. And "Money doesn't buy happiness" is only said by people who have enough of it to not worry.

            Yeah "money is not everything" but I'd be able to do more things I like if I had house and spacious garage. But that's $$, $$$ if I also want to live in place with reasonable commute

            • eropple 402 days ago
              > but I'd be able to do more things I like if I had house and spacious garage. But that's $$, $$$ if I also want to live in place with reasonable commute

              My house is 2000 square feet. I have a recording studio and a wood shop and too many 3D printers. I am getting a garage permitted for another ~800 square feet. The place cost $480,000 four years ago and is around $620,000 now on Zillow. I am a fifteen minute walk from a train and can be in downtown Boston within the hour.

              There are ways to get what you want other than "be an extremely unlikely curve-breaker of a success". It frequently means "not being in San Francisco or New York", granted, but...you've got options.

              • burnished 402 days ago
                Are you really promoting your half a million dollar home lifestyle as the affordable and approachable way? And it appreciated how much over four years?

                Im glad for you but I don't think you are making the point you intended.

                • eropple 402 days ago
                  It is absolutely affordable—for a software engineer. Boston salaries aren’t SF, but you aren’t going to be hurting. Other folks? No, and that’s an entirely different problem we need to be solving. That’s why tomorrow night I’m going to a town meeting to argue in favor of a new 500-unit apartment building that my neighbors don’t like. (I bought this house to live in. Add more supply, bring down those prices!)

                  But I don’t expect the person to whom I replied to be concerned with individually solving it either, and so while I think we can solve our own problems while being mindful of our society’s, the latter didn’t seem appropriate here.

                  • letsdothisagain 402 days ago
                    Really? I'm in a similar situation outside of Vancouver and my house price doubled since I bought it. The salary we pay for the position that I used to purchase it went up maybe 10% in the meantime, while the financing costs went up by 100%.

                    You don't really need a graph to understand that change...

                    Good on you for fucking with the NIMBYs though, they're the reason house prices went up by an insane amount.

                    • eropple 402 days ago
                      I haven't been out that way in years but my understanding is that Vancouver is a SF-tier disaster though, no? Huge influx of semi-speculative money into real estate.

                      My house, on a 30-year, 10% down, if bought today at the Zillow valuation + my property taxes and insurance, would be about $3800/month. That is absolutely not nothing, but the same square footage in Alameda, CA--a better substitute in some ways, esp. re: transit--is in the $1mil to $1.25mil range, which would be more like $7500/month (if you could make the 10% down at all).

                      Given that staff+ compensation in the Boston area is pretty reliably north of $200K these days, these are much friendlier numbers. And again, Boston is still an expensive area! There's lots of places in the country that are cheaper. I use Boston as an example because even on the edge of the suburbs there's still decent-to-good public transit. Go just down the road to Providence, which has a thriving local scene of its own and is still on the commuter rail to Boston but otherwise kinda lacks local public transit, and you can get a house like mine that's roughly as walkable to the basics (restaurants, supermarkets, etc.) for like $380K. And if your job is in Boston you can still be at South Station in under an hour and a half of sitting on a train that, IMO, beats BART and CalTrain pretty solidly, let alone driving (which I've known a lot of people, historically, to do from Providence--and that seemed awful).

                      Me, I work mostly-remote, so I'm not tied to being here in the first place. I just like it here. But realizing that there are significant options is important.

            • wil421 402 days ago
              Average home price in the US is $375k. If you add a $100k-$200k to that price, a SE should be able to save and afford a house.

              My hobbies take up a lot of space so I understand what you want. We had to move out of an in town location to get the house we wanted. A 1,000sqft in town house the same size as our duplex rental wasn’t going to cut it.

              Luckily I was able to find jobs in an area 45 minutes away from downtown with virtual worker status (3-5 days a month in office max). I changed jobs and was able to find many other ones in the same area.

              • ohgodplsno 402 days ago
                Unfortunately, in a group made up of myself and Jeff Bezos, our average net worth is $90 billion. Jeff does a lot of work in that average though. In the same way, it's very possible this person is in an area where the cost of life is absurdly high and the actual price of homes where they are is not reflected in the average, due to the dream that software engineering is massively profitable, which increases the cost of life, which makes the need for a massive salary higher, which...
                • eropple 402 days ago
                  This phenomenon is real, and the best way to combat it is to Go Elsewhere. I'm still in a pretty expensive spot. But I'm very comfortable having somehow managed to never work for a big-tech-payin' big tech shop.

                  There's a lot of great places out there. Believing that we have to all cluster around a few cities is pretty bad for us.

                • wil421 402 days ago
                  Why are you living in the high COL area? There are more developers working outside of Big Tech/FANG/West Coast than inside.

                  The West Coast does have a higher employment of Software Developers per 1,000 people. Especially SF/San Jose. Texas seems to be increasing more than other areas outside of California and Washington.

                  https://www.bls.gov/oes/current/oes151252.htm#st

                • seanmcdirmid 402 days ago
                  This is why you don't want to live in Medina WA, to be compared with Jeff Bezos, Bill Gates, keeping up is tough.
            • eternalban 402 days ago
              > And "Money doesn't buy happiness"

              It doesn't. Money buys comfort, power, prestige, security, ..., but not happiness. A happy person is a happy person. An unhappy person is an unhappy person. It sucks in a way but from a different pov it is a wonderful equalizing fact of human experience (like the bliss of orgasm, available to poor and rich alike).

          • newjersey 402 days ago
            > Money is a side-effect of happiness and persistence.

            A million is a lot but my first reaction to your comment was this is something only wealthy people can afford to say. Especially in the US where we don’t have universal healthcare.

            Just typing this made me realize I need concrete, achievable goals though so I appreciate your comment. I am not the gp but this is something I expect a lot of us need to work on. Something like:

            1. What are my financial goals? 2. Is it realistic to have those goals? 3. How do I know if I am on track? If not, what can I do to correct my course?

            • Ntrails 402 days ago
              Personal views entirely...

              Money is largely a product of working, but broadly uncorrelated with time or effort. If you think this is untrue, try working a minimum wage job or two for a while. This shouldn't stop you working hard for returns. but it should offer a reality check.

              Money doesn't buy happiness, but it can remove stressors. However realistically this is linked to income-outgoings / debt. Earning a lot but being highly leveraged and living an expensive lifestyle ends up not being much less stressful.

              I may work until I'm 70. I may be dead before I'm 50. I don't want to be miserable today in order to live a mythical good life in the future. So I plan assuming the most important thing is being content day in day out.

              I guess I have a high discount rate. It's not obviously right!

              • xpe 402 days ago
                Using a discount rate is a decent start, but it is a vast simplification of how people think. If we want to make it a little more nuanced to capture more of the human condition, I would suggest:

                1. Allowing one's discount rate to vary with age.

                2. Varying the time horizon. Exponential decay probably doesn't map very well to how people think across different phases of life.

                For many people, their discounting may change roughly as follows:

                - When you first pop out, life is only the present.

                - When young, e.g. 2 or 3 years old, kids may want things very soon, within seconds, minutes, maybe hours.

                - Young'uns start to understand money. They might look towards saving for their first bicycle. Now time horizons look more like 1 to 12 months.

                - As people start to develop educational and professional goals, they allow more deferred gratification: preparing for their career or buying a house. This horizon might be around 1 - 10 years.

                - Somewhere in a career, people might start planning 5 - 50 years out, often for for kids and retirement.

                - As people approach their end of expected lifespan (or face a life threatening illness), they probably care a lot about:

                -- personally, living in the moment. This might mean checking off the bucket list as well as high quality relationships

                -- financially, allocating money away from themselves towards emphasizing long-term, inter-generational goals, like providing for their family or donating to charity. These goals have 20+ year horizons.

                - The ultra wealthy have the means to create charities with 50+ year time horizons via an endowment.

              • throwaway98797 402 days ago
                there’s a midwit meme here

                do things that are good

                ultimately no one knows when we will expire

                balance is hard and sometimes it’s nice to look back and say oh i worked so hard for nothing but the experience of working hard and that’s okay too

                we all end in the same place

                “nothing is good or bad, thinking makes it so”

          • jstummbillig 402 days ago
            Why would not achieving the goal correlate with happiness? Aiming for something high only is a problem, when you tie your happiness into getting there. I find the reaching alone very fulfilling.

            As a side note, finding and focusing on developing a speciality that I enjoy is a lot harder than making a lot of money. For me at least.

            • brabel 402 days ago
              Happiness is not something you achieve by fullfilling some dream. What counts is the day-by-day, or "the journey"... once you get there, trust me, it will just feel pretty empty after perhaps a day or two of excitement, and you'll just have to find a new "dream". Just enjoy the little things. Difficult to quantify but I bet that watching a football match where your team wins (if you're a football fan, and obviously through no action of your own other than just sitting there watching) makes you feel much happier (for a few hours) than any dream you could fullfill by your actual actions. Doesn't make sense, but yeah, humans don't make sense a lot.
              • urthor 402 days ago
                I mean, I really really do enjoy coding.

                It's just so fun to do something where knowing stuff actually changes people's lives every day.

                I'll be happy along the way regardless I'd say.

              • jstummbillig 402 days ago
                I (mostly) agree – which makes the reply somewhat confusing. Am I missing the contradiction or did you maybe misread my comment?
                • brabel 399 days ago
                  A comment doesnt' need to be a rebuttal. I was expanding on the topic.
            • coldtea 402 days ago
              >Why would not achieving the goal correlate with happiness?

              Because that's what usually happens with such "bet my life on it" goals on something that affects most of your daily efforts for years.

              This is not a "I'll learn to play guitar this year" kind of resolution.

          • andrepd 402 days ago
            With the outrageous tech salaries, if you live in a low CoL area, I don't know that saving a million or two by the time you're 35 is such an ambitious goal.

            And don't pretend your way is the only way of looking at things. "Money is not important" is something people say if they have a lot of money.

            • cloverich 402 days ago
              > "Money is not important" is something people say if they have a lot of money.

              Well if money was key to happiness, why would people with money say that? Wouldn't you expect the opposite? The reality is money helps with lots of things in life, but it's never more than a means to an end. You should always be striving to enjoy what you can in life as you go, because cultivating a happy life requires being present. Otherwise you'll blow right by the stuff around you, and by the time you get the money you were seeking you may be on an island. That's all people mean when they make that statement.

          • frognumber 402 days ago
            1) I constantly set ambitious goals for myself and fail. That doesn't make me less happy.

            2) Happiness isn't my goal in life. It's not a healthy goal either.

            • Thiez 402 days ago
              I'll bite: what do you consider healthy goals, and why isn't happiness amongst them?

              Not sure if you were going to go there, but lets skip the 'on a permanent heroine IV' interpretation of happiness.

              • throwaway98797 402 days ago
                not op

                but i aim for peace which isn’t joy

                i find pleasure to be destructive (sugar, sex, booze, drugs)

                so i’ve been aiming for peace which isn’t happiness but it is pleasant without causing me to crave more of it

                where joy or dopamine rush always makes me want moar

                • frognumber 401 days ago
                  My experience is similar but different.

                  Sugar, booze, drugs, video games, social media, television, etc. are destructive. Those are unnatural things which are engineered to give a dopamine rush. I've been healthier in periods of my life when I did. Going "clean" is stressful, but lands me in a healthier place. I can't usually do that because of family and social ties.

                  The odd item on your list is sex. Sex -- in the context of a permanent, stable relationship -- builds social bonds and helps emotionally regulated. Studies show that too.

                  • throwaway98797 401 days ago
                    the context there is important

                    in shorter term relationships it makes me want sugar booze drugs more

                    sometimes it’s like

                    oh this is “pleasure” why not get more

                    i hope that in a committed relationship it would be different

                    • frognumber 401 days ago
                      It's completely different.

                      I'm not going to generalize to anyone else, but for me:

                      - Casual sex is psychologically harmful.

                      - Regular sex with e.g. a spouse is healthy.

                      I find that it (1) Builds a close emotional bond. Conflicts don't seem so important. (2) Emotionally stabilizes me and makes stress go away.

                      As well as a number of additional positive effects. The older I grow, the more I agree with conservative, traditional cultures about sex: One lifetime partner is ideal. A small number or zero is okay. A large number is bad.

                      I'll mention: I'm not drifting conservative overall. Some places, I'm to the left of the left, some to the right of the right, some off-axis, and some at the center.

                • CrazyPyroLinux 402 days ago
                  I'm reminded of The Oatmeal comic https://theoatmeal.com/comics/unhappy

                  Also, stoicism.

                • Shaggy2000 402 days ago
                  I have been cultivating this mindset for 10 years. I'm into month 6 of semen retention now and finally have zero urges or frustration at this stage. I eat one meal of meat, eggs, butter a day. Have finally been able to isolate and clearly see the effect listening to music has on my dopamine and happiness (its very bad for it). All of my belongings fit into one suitcase and a backpack. I live in an apartment by the beach. My hobbies are simply short walks in the morning, emotional movies in the evening, programming and reading in quietness during the day alone. Eliminated playing videogames for the most part, Hobbies are reverse engineering and decompiliation modding of childhood N64 games, coding my rts game engine from scratch, coding my programmable bot platform im creating. Reading. Finally i reached that peace you know about. Would love to hear a few things about your routine and how you spend your time or be e-friends e___cr___@gmail.com replace the first ___ with nda and the second ___ with aig :)
                  • jwmoz 399 days ago
                    This sounds really depressing, you might be taking things a little too seriously.
              • frognumber 401 days ago
                I find setting "happiness" as an explicit goal reduces my happiness.

                A good book -- more mainstream than most of these comments -- is "Man's Search for Meaning" by Frankl. It has been listed as one of the ten most influential books in the US a few decades ago, although has fallen somewhat by the wayside in recent years. I believe the core thesis. It's worked well for me.

                Leading a meaningful and purposeful life, having good relationships, helping people, doing interesting things, learning, and growing tends to be a more effective path to emotional well-being than searching for happiness.

                To answer your question directly: My high-level goal is to leave the world a better place than I found it and to have a positive impact on the lives around me.

          • hluska 402 days ago
            I don’t understand the need/urge to shit all over someone’s dream. If you don’t agree, why not just leave it? What does anyone actually gain from your negativity??
            • coldtea 402 days ago
              Do you understand the need to give people realistic expectations, so even if they wish to proceed, at least they understand the chances, and not put all their eggs on something unlikely?

              Or everybody should be left to live oblivious to some statistical facts, lest they be hurt?

          • chinchilla2020 402 days ago
            Most SWEs at the majors are bringing in a few million prior to the 35. If you save your salary it should be pretty trivial.... but it's more a savings challenge than an income challenge due to lifestyle creep.
          • ClumsyPilot 402 days ago
            > few millions (presumably in savings) before you are 35 is extremely ambitious

            Depends on what happens to the economy.

            15% inflation for 10 years will make us all millionaires!

            • CrazyPyroLinux 402 days ago
              And then we can all go to McDonald's and order something off the million-dollar menu!
            • dagw 402 days ago
              15% inflation for 10 years will make us all millionaires!

              That's assuming wages keep up with inflation, which is something we're seeing very few signs of these days.

              • ClumsyPilot 402 days ago
                Well, there will be millionaires, and the ones who starved to death :)
          • urthor 402 days ago
            My circle of friends has three self made 8 digit millionaires in their 20s. I've honestly been slacking.

            I don't think I can do it in 1 year. 5 years is perfectly possible.

            We live in the golden age of computer science entrepreneurialism.

            Venture capital has never been easier to get. The low hanging fruit is largely still unpicked. And, with full remote, hard working highly capable talent has never been easier to hire (hire Europeans, they're overeducated and underpaid).

            IMO, not starting a business in the next 5 years would be remarkably foolish.

            Just have to write a 35 page business plan, get it reviewed by capable people, have a good idea, and execute.

            • coldtea 402 days ago
              >Venture capital has never been easier to get

              I think you've missed a lot of developments in the last year or so...

              >Just have to write a 35 page business plan, get it reviewed by capable people, have a good idea, and execute.

              Thousands of aspiring SV millionaires have done just that and their companies still got nowhere.

              Not to mention this sounds like the business version of "how to draw an owl" meme.

              • urthor 402 days ago
                Well, I think you write the 35 page business plan.

                Then if you can't impress people with your 35 page document, back to your day job.

                Getting excited about a subpar startup idea seems like the biggest point of failure.

                > I think you've missed a lot of developments in the last year or so...

                Trend vs business cycle.

                The long term trend is the world's accumulating vast stores of capital. And capital has to be deployed.

                Once the current business cycle is over, the capital saturation will mean Silicon Valley VC idiocy will resume.

            • JackFr 402 days ago
              > Just have to write a 35 page business plan, get it reviewed by capable people, have a good idea, and execute.

              Last word in that sentence doing a lot.

              • adhesive_wombat 402 days ago
                "Have a good idea" isn't exactly lounging around, either!
              • pdntspa 402 days ago
                Step 1: Collect underpants

                Step 2: ?????????

                Step 3: Profit!

                • HeyLaughingBoy 402 days ago
                  Depending on whose underpants they are, you may not need a Step 2...
            • screwturner68 402 days ago
              35 pages! I worked for an IPO where the CEO made the 40 under 40 from a business plan written on a napkin. The fact that you have something written on paper and hopefully not in crayon would have likely snagged you a $10MM valuation in SV a couple of months ago. Times have changed but I hope you are successful.
              • urthor 402 days ago
                Software industry is just so weird.

                iirc, graduates at Goldman and similar traditionally do/did a 20 page investment banking proposal every 2 days.

                They're filtering, so whenever they don't have enough real work, research and write a business proposal for some IB deal or whatever line of work.

                Essentially, they just research, write, then supervisor reviews, director reviews, nonstop.

                That's investment banking. Write dozens of proposals, pitch a couple to actual companies the partner thinks are good ideas.

                https://mergersandinquisitions.com/investment-banking-pitch-...

                https://www.10xebitda.com/investment-banking-presentations/

                And it works. They're usually quite good ideas (after all those drafts).

                Meanwhile, Silicon Valley funds ridiculous stupidity, because somehow technology startups just make that much money.

                I have no idea how Silicon Valley VC firms make any sort of return on capital.

              • coldtea 402 days ago
                >I worked for an IPO where the CEO made the 40 under 40 from a business plan written on a napkin

                Then it wasn't on the merits of the business plan, but the idea, niche, timing, connections, delivery, and several other factors besides...

                Millions can scrible some startup idea on a napkin. Getting a VC to take you seriously is another matter, even with a fully fleshed presentation, a prototype, and a well written and researched business plan.

                • adhesive_wombat 402 days ago
                  Yes, there's a reason there are "deck-writing bootcamps" and "pitch trainers" and other voodoo. VCs move at the centre of a feeding frenzy.
            • smcl 402 days ago
              If that's what will bring you happiness, then don't let anyone stop you. However I just want to give you a little nudge, to think about if you really have no time outside this pursuit of wealth to enjoy yourself. You're only young once :)
            • red-iron-pine 402 days ago
              > We live in the golden age of computer science entrepreneurialism.

              no we don't, not any more. the disruptors are now the ones to be disrupted, and they're trying awful hard to keep that from happening.

              like, sure there are still new businesses starting, that's true in a lot of fields. but SVB imploding is a fantastic sign as to what is truly happening to startup culture.

            • SketchySeaBeast 402 days ago
              > The low hanging fruit is largely still unpicked.

              Given that I'm not one to balk at writing 35 pages and an 8 digit bank account is relevant to my interests could you throw out a few of the low hanging fruit? I assume you won't be angry if I take one.

              • urthor 399 days ago
                Transparent algorithms, software defined private capital markets.

                The state of the globe's capital markets for a range of non-equity financial products is appalling.

                Forget cryptocurrency exchanges. The global financial tools available for bonds, futures, you name it, just about everything else is so appalling.

            • wombatpm 402 days ago
              Venture capital was never easier to get. Be careful, past performance is no guarantee of future results
        • yonaguska 402 days ago
          I've spent at least 30k on my hobbies over past 10 years, since graduating college. I still have a mortgage, I'm still in debt. But, my hobbies have given me something to enjoy outside of work. I love programming, but I consider myself lucky when my work and passions actually align. Sometimes I get to solve interesting problems. That's a luxury. But you know what is always there for me when I clock out? My family, and my hobbies. When the weather is nice, I can look forward to a motorcycle ride. I enjoy going to the gym, learning jiu jitsu, gardening, cooking, repairing things. Yes, it costs money. But, I'm in my 30s, in good shape, happy, and in debt. I see people that maxxed out their work life, and neglected their personal lives, and they tend to be miserable for one reason or another. Getting in shape and being active gets harder as you get older. Relationships take time and work as well. Money is not going to buy you a happy relationship, it's not going to buy you friends, and it's not going to buy you health. It absolutely helps, but it's not the priority. Work so that you can live well, not so that you can accumulate numbers.
        • racl101 402 days ago
          If I've learned anything over the years, is that technology moves so fast day to day that, that to keep up with absolutely everything all the time is a fool's errand.

          You need to pick an area that you really like and focus on it and I think the money will come when you improve and specialize your talents in that area.

          That area, of course, should preferably coincide with the jobs available in your area in order to make it easier on yourself, but nothing says you can't apply for remote jobs.

        • illys 398 days ago
          "Hard to enjoy my hobbies when I'm in debt to the bank and my mortgage isn't paid."

          You are young and worried for a mortgage to complete... and that prevents you to enjoy what you like in life?

          What will you say when you get older and have sick relatives, dying parents, troubled teenagers, health issues... and so on? Life is not about waiting for the end of the storm to be happy. It is about learning to danse in the rain.

          Be sad when it is time, manage crises when you have to... And collect and share as much joy as you can the rest of the time. No matter what, don't wait and enjoy your life!

        • xbar 402 days ago
          Aiming to make a few millions (presumably in savings) before you are 35 is extremely ambitious and overall, you will most likely greatly exceed your current expectations, but perhaps not on exactly the timeframe you set.

          Do not let anyone slow you down.

        • NovemberWhiskey 402 days ago
          >Honestly, I've spent so much time learning computer science trivia. I truly enjoyed learning all that computer science knowledge in my spare time. Now I feel obliged to work even harder to make a few million dollars out of it before I'm 35.

          Bad news: computer science knowledge has rapidly diminishing returns past a certain point in the real world.

        • hluska 402 days ago
          I respect your ambition and like your goal! Good work and best of fortune!! :)
        • stcroixx 402 days ago
          Sunk cost fallacy.
      • walthamstow 402 days ago
        Nothing quite turns the 'work' part of the brain off like a live sporting event.

        Fast-flowing games work better, soccer is particularly great because it has 2x 45 minutes of solid action. NFL has too many breaks where my brain can start thinking about other things.

        • urthor 402 days ago
          Gridiron games edited down to 45 minutes are one of humanity's greatest inventions.

          I say this as an Australian.

          Gridiron edited down so it's only back to back plays, no ads no stoppages, is the greatest sport on television.

          • red-iron-pine 402 days ago
            > no ads no stoppages

            lol good luck. if anything the amount of ads will only increase.

            it's why soccer (futbol) never became a thing in the US -- no channel on the planet is going to air 90 minutes without ads.

          • 1980phipsi 402 days ago
            Where you get that?
            • benji-york 402 days ago
              In the US it is available as part of the NFL+ service. A short summary can be seen at https://support.nfl.com/hc/en-us/articles/5403911854236-What...

              As an avid American Football fan, I agree; condensed replays are great, especially when you are interested in, but not deeply invested in a particular game (for those, I prefer to watch long-form).

        • ilyt 402 days ago
          Esports are like that for me, particularly Dota 2.
      • re-thc 402 days ago
        Congrats on learning football! It's all perspective.
      • racl101 402 days ago
        We all want to get to that point where we can watch football on weekends.
        • HeyLaughingBoy 402 days ago
          What's stopping you right now?
          • racl101 402 days ago
            I'm just talking generally that we'd all like to be there.
    • ilyt 402 days ago
      > Frankly, most 35 y/o engineers don't truly appreciate the intricacies of intra-thread concurrent algorithms, unless it's their specialized area.

      Frankly those who do would try to avoid it anyway unless it is truly the best/only solution to the problem.

      The best way to not have concurrency bugs is to have as little of it as possible. If I have a choice of making single job faster vs just running 64 jobs in parallel on CPU I'd pick the second every time I can because code will be simpler and less buggy every single time.

      • 698969 402 days ago
        > If I have a choice of making single job faster vs just running 64 jobs in parallel on CPU I'd pick the second every time I can because code will be simpler and less buggy every single time.

        I maybe misunderstanding what you're trying to say, don't you mean you'd pick the first one every time? Make the single job faster instead of introducing concurrency with 64 parallel jobs?

        • myrmidon 402 days ago
          I think he is arguing in favor of multiple concurrent processes ("single thread each"), instead of messing around with low-level threads + synchronization primitives (which would achieve a single fast process that uses multiple CPU cores by itself).
      • myrmidon 402 days ago
        Completely, 100% agree.

        I believe this also happens because often the most accessible/obvious form of concurrency is the super problematic "shared data by default" kind (C/C++/Java "Threads"), which is basically ASKING for trouble.

        Also programming education sometimes even reinforces this in a very harmful way from what I've seen. Telling a student about mutexes/semaphores/atomicity is actively harmful IMO if it is not accompanied by strong discouragement and actual practice in finding subtle race conditions.

        • kps 402 days ago
          Agreed. Many years of effort went into building TSAN because nobody can get shared-memory concurrency right, and whenever someone thinks they can get shared-memory concurrency right, TSAN comes along and proves them wrong. Concurrency needs the same rule of thumb as cryptography: do not try to roll your own.
          • galangalalgol 402 days ago
            Rust talks about fearless concurrency, and IME, if you avoid async await it does provide it, potentially at a cost of lovks or mutex that might not be strictly necessary for your actual use case. Actually IME async await isn't a problem either but I've read it can be an issue.

            In C++ the patterns I don't see bugs in is thread pools for processing large batches of heterogeneous data, and fine grained parallelism for stuff like vector and matrix operations. But in the latter case it is all library driven, and in the former, it is a really simple pattern.

            • ilyt 402 days ago
              Barely related rant but I think async/await type of concurrency is the worst of the bunch and outright malady on the code that infected the mass's brain by its proliferation in JS ecosystem. Even crude message passing leads to far cleaner code architecture.
            • kps 402 days ago
              Yes, these are alternatives to (and/or implemented on top of) shared-memory parallelism, and mostly much better to work with. To continue the cryptography analogy, it's using experts' cryptography libraries. Sometimes you do need to juggle the razor blades yourself (it's not actually turtles all the way down) but it shouldn't be done lightly.
        • Izkata 401 days ago
          > because often the most accessible/obvious form of concurrency

          I dunno, I reinvented message-passing concurrency with multiple processes before I knew the terminology or had any formal programming training. It came completely naturally and it was nearly a decade before I understood why people thought concurrency was difficult to get right.

      • AndrewKemendo 402 days ago
        Knowing that though only comes from having an understanding of the uses and limitations thereof
        • ilyt 402 days ago
          Yeah, it's way too easy to get some new knowledge then just use it everywhere you can because you want to play with your newly gained skill, instead of dozing it in only where it is beneficial. I've created many spaghettis because of that before I realized that.
      • elwell 402 days ago
        Or just use Clojure and slap a `p` on your `map` function.
      • ReflectedImage 402 days ago
        Rust is really good at this sort of thing.
    • LegoZombieKing 402 days ago
      As a 21 yr old, 3 years into my computer science degree, I (for the most part) agree.

      If I were just following the course material I wouldn’t expect too much from what you can learn from course work.

      I have even become slightly addicted to learning everything I can about building software. From reading (3 of Robert C. Martins books, and a few other popular ones from hacker news’ top 100 reads) and taking Udemy courses[0] in my free time.

      I also have been working at a small teacher resource website for the past few years, to get some on the job knowledge.

      Even then I still don’t feel like I’ve got the best understanding of SQL, networking or concurrency. I spent most of my time learning specific languages and practices and principles like Agile and spec docs. I’m working on building my own web app and have been creating a dev log for it[1], as well as building an arguably crappy personal website[2].

      [0] https://www.udemy.com/user/legozombieking/ [1] https://youtube.com/playlist?list=PLeFBzv7SGgs903uH6Mfm34J94... [2] https://www.cadleta.dev/

      • oska 402 days ago
        I don't mean to be rude here but hopefully as some useful feedback this whole comment reads like a 'humble brag'

        (But after saying that, congrats on the learning you've been doing)

        • LegoZombieKing 402 days ago
          Thanks, I mostly wanted to illustrate that there are some who fall into the age and education range mentioned that also spend time to teach themselves outside of class. My main point being that its difficult to attribute knowledge directly to an age and time spent in a degree path. However, I also fall in the subset that just seem to enjoy this type of learning, with probably too much time on their hands.
          • urthor 402 days ago
            The value of book learning/straight ordinary education is underrated in software.

            Software engineers consistently overvalue the benefits of "I need to be a crazy outlier," and consistently undervalue getting to bed on time, using a visual debugger, and "normal work habits."

            Still, gotta actually do the thing.

    • mewpmewp2 402 days ago
      Is lazy the right word? There are only so many things you can learn in this lifetime, you must prioritise well what you spend your time on. Many things make sense to learn well only if they are important for what you are doing.
      • cloverich 402 days ago
        For SQL I think it's fair. It's ubiquitous, generally standard and unchanging, and knowing it well takes less time than just about any other skill in you need in this field. It's been the primary data fetching language at the six companies I've worked at. Some things change fast and go out of fashion, but SQL is clearly not one of them. I studied ONE SQL book over ten years ago now, and it's 90% of what I've ever needed.
        • Damogran6 402 days ago
          SQL et al. were built to solve the problem 'how do I handle (possibly big) datasets'..._when_I_was_a_kid_, you had to learn in your programming language how to handle data and how to work with it. There was a lot of conversations on sorting techniques, how you laid data down on storage medium, etc.

          All that went away with SQL as the management was pushed down to the database. It freed the developer up to concentrate on the problem, rather than the hygiene.

          Likewise, I guess, the kids these days don't need to worry about the OSI model, subnetting, routing, TTL...

          I can complain that a cloud native Hello World application can be made with the end user knowing NOTHING about the underlying code to get it there, but that's just me being an old guy, shouting at a cloud.

          I look at what I know, and what the kids know, and recognize that each of these technologies was spoon-fed to me over decades. I didn't learn Linux, SQL, networking, GPU acceleration, Network Intrusion and Detection and how to manage it...all at once, when I was 21.

          • mike22 401 days ago
            It’s great to write carefree SQL, with the DB platform totally abstracted, until there’s a massive spike in query latency. Then hash joins vs nested loops and full table scans is useful knowledge which is a) mostly vendor specific b) requires a good prod-sized dataset to test on.
          • avgDev 402 days ago
            I mean you can only learn so much in school.

            I have been developing for 5 years now and I'm always finding a new neat thing even in SQL.

            Recently, had an issue with deadlocks, I learned about them in school(even did a presentation on it) but had to research how SQL handles them and how I can rectify the issue we were having. I really enjoy this part of the job. There is always something 'new' to learn, even if it existed for a while like SQL.

            • Damogran6 402 days ago
              Most of IT is a lake a mile wide and an inch deep...Sure, there's parts that you'll drown in, but you can get by with the inch deep stuff.

              It's not even a Jack-of-all-Trades thing, and I hate it. You're a Git away from building your startup and you've got no idea what libraries or dependencies it has, you just logged into AWS with a credit card and ran with it.

              (Not you, exactly, the 'Royal You')

      • jjk166 402 days ago
        I doubt too many people forgo learning SQL exclusively because they are too busy learning other, higher priority things. Most people have free time and still choose not to learn SQL. I had a teacher in highschool who referred to not doing things because they weren't really that important as being "legitimately lazy" which I feel is an apt description.
        • temp_account_32 402 days ago
          It's just that there's so much more exciting stuff to learn, like machine learning, game programming, latest shiny web framework of the month.

          If you're a person who likes being visually stimulated while learning, spending free time outside of work to learn how to query tables and design schemas is about as exciting as watching paint dry.

          • HPsquared 402 days ago
            It's exactly the sort of basic, ubiquitous thing that should be on the curriculum - especially if it's unpleasant to learn.
      • digitallyfree 402 days ago
        Also there is the balance (i.e. "go home and watch football after 5 p.m.") that the interns want as well. There are people who go do additional research and learning after class, but many don't. In the high-stress environment of CS or engineering school it's not easy to keep working in your little spare time, and I've seen burnout and loss of social opportunities occur to those that push too hard.
      • Ragnarork 402 days ago
        It's not the right word.

        I have never used and will (in the foreseeable future) not use SQL.

        I already have a ton of stuff on my plate that I need or want to learn, SQL is not one of them and I won't include it "just because". Right now it's absolutely useless to my skillset and not something that I have an interest with either. This might change, and then we'll see, but right now it's not even a thought.

        • cratermoon 402 days ago
          I'm pretty unhappy with my current job, but at least I can say I'm not expected to use my very limited and rusty knowledge of SQL. Working with relational databases is one of the least fun aspects of programming I've ever encountered. If a job interview heavily stresses SQL knowledge, I'm probably not a good fit for the position. Even if the position itself demands less SQL ability than the interview suggests, I take the questions as an implicit requirement for success. Also, if I end up in an interview where they delve more deeply into SQL than "when would you use and inner vs outer join", I've probably failed somewhere in screening for jobs I should interview for.
      • rpastuszak 402 days ago
        Lazy is almost never the right word: https://sonnet.io/posts/hummingbirds/
    • seneca 402 days ago
      Yeah, exactly this.

      Spend some time doing initial technical screen interviews. You'll quickly realize most people with years of industry experience have barely any clue what they're doing.

      Think about the average quality of engineer you've seen make it to a panel interview. Then realize the majority of applicants don't make it to a manager screen, and the majority of those screened don't make it to the panel. And a large percentage (varies by company) won't make it through the interview panel. If you're only thinking about people who are hired, you're even more distant.

      None of this is to insult people. This skill set is hard. It's just that if you work with competent engineers and spend your days in technical communities, you're in a bubble that tricks you into thinking most people in the industry are way more capable than they actually are.

      • warrenm 402 days ago
        As the old adage says, "Do you have 10 years of experience? Or 1 year of experience, 10 times?"
    • cryptonector 402 days ago
      That's a great answer. I would only add that the cognitive load of CS taken broadly is far greater than most 4-year CS curricula can hope to cover. I do think CS curricula could be significantly better, but they'd have to lighten up on liberal arts requirements to get there, and even then most undergrads 18-21 couldn't handle it. Add to that the sorts of things that software developers have to know that CS curricula won't bother covering, and the cognitive load of it all requires well over a decade to master, if not more. Plus the mastery of any one individual will greatly depend on what they've had to work with.

      Well-rounded computer scientists spend a lot of time reading papers (and docs and blogs and...) and a lot of time thinking about things. But that means having less time left over for being 10x engineers unless they're also 10x computer scientists.

    • kraig911 402 days ago
      As I've grown older myself I've grasped the whole 'horizon' of knowledge gathering in this field. We will never know enough to feel like we know enough. Better to call it a hobby than work related and try and enjoy some sportball I guess.
    • snarf21 402 days ago
      I agree that some of these expectations are a bit unreasonable. However, probably 90% of all software jobs require some basic knowledge about SQL, Javascript/HTML and/or system modeling (MVC, MVVM, etc.)

      I would never expect network programming and maybe by concurrent all OP really means is threads but hard to say. They should understand that computers are a multi-threaded environment even if they don't have experience implementing thread safe software.

    • starkd 402 days ago
      Its not just the age. Unless you have been studying/working with those topics within the last 6 mos or have accumulated a working habit in the area over many years, your working knowledge of any one topic is going to be quite superficial. Most need a space to re-introduce themselves to the topic to perform the relevant context switching required. The human mind forgets alot, but fortunately it is easier to re-learn as needed.
    • slackfan 402 days ago
      >21 year olds won't know very much of anything in general.

      Then that's a failing of whatever education system they were in, not of their age. Infantilizing 21 year olds even further, isn't doing them, or anybody else any favors.

      • warrenm 402 days ago
        It's not "infantilizing" to note that a 21-year-old can't know as much as a 31-year-old can

        It's basic physics

        (a 31-year-old may not know as much as a 21-year-old, but that's not [usually] because they can't know more)

        • tensor 402 days ago
          That a true but fairly pointless statement. Humans rarely optimize for learning to the extent that you would hit that hypothetical. It's really quite easy for a 21-year old to know the things the OP is talking about. But A) they don't care to know and B) our education system babies kids.

          We could be teaching all this stuff at a far younger age, and many countries do.

          • warrenm 402 days ago
            You can teach [almost] anything at a younger age

            But you can't teach it all

            Again - this is basic physics

        • pl4nty 402 days ago
          In the real world, this may not hold for niche knowledge streams (eg theoretical CS). 21-year-olds growing up in the 21st century can optimise far better than 31-year-olds, with far better availability of specialist knowledge from a much earlier age
          • warrenm 402 days ago
            ...presuming they know they want to ... maybe :)
        • slackfan 402 days ago
          Yes, but that's not what the OP said.
          • Apocryphon 402 days ago
            For decades, the standard line has been “you go to college to learn how to learn.” And high school and education leading up to it has been seen as preparation for college.

            Not to mention “college isn’t a trade school”, “if you want your CS program to teach you how to program, go to a boot camp”, and so on.

            • warrenm 402 days ago
              The "standard line" has been, "go to college so you can get a job"

              And that's what's chured out record levels of student debt, pointless degrees, and infantilized "adults"

              • Apocryphon 402 days ago
                That's the standard line from society of how college works in practice. But the colleges, nay universities, themselves have always been hesitant to become job-creation factories. They are not vocational schools.

                Meanwhile, vocational schools and community colleges in the U.S. are considered low-prestige by both industry employers and American society itself, despite less likely to result in high student debt and perhaps fewer pointless degrees.

                Just complete lack of coordination from different segments of society, and misaligned incentives across the board.

            • slackfan 402 days ago
              That's a very US-centric view, which really points out how terrible US schools really are.
              • Apocryphon 402 days ago
                It also points out how the tech industry, and perhaps other private sectors, has completely abdicated its responsibility in the proper training of its new workers. Which it used to do decades ago, but now has outsourced it to universities.
    • obelos 402 days ago
      “Back in my day...” when I was in my last term of CS undergrad work 25 years ago, I had already developed kernel modules (in a toy/research OS) to manage concurrency primitives, written several networked client and server programs and readily debug them with tcpdump, could explain the differences between the 7-layer OSI model and typical 4-layer protocol stack we actually use, could describe with examples several tiers of relational database normalization, and wrote a low-level hardware I/O kit for downloading Atari 2600 carts. This was all just stuff I'd learned and written for my class projects at my very mid-tier state university. It sounds like either the curriculum standards have changed over the years, or maybe the program was more advanced at the time than I gave it credit for?
      • FlyingSnake 402 days ago
        Everyone’s not like you Linus.

        /s

        • obelos 402 days ago
          Heh. I mean, I was an A student, but except for a handful of duds in the class, all of my peers produced this same kind and quantity of work. There were definitely some who were sharper than me. I did not think of myself as a particularly stand-out student in my class.
      • oska 402 days ago
        I'd agree that the 80s and 90s were probably a peak time for widespread but still rigorous computer science tertiary education (was certainly rigorous before then but not particularly widespread). At least in Western countries. The quality and rigour of CS education started heading downhill in the 2000s.
    • fuzzfactor 402 days ago
      Well in natural science it's more common than ever for a degree to have become a requirement over the decades for challenging positions where far more progress could be made by those having a lifetime of interest & study before they were old enough for higher education instead. There's only so many positions like that though, but these are key and have been failing to be adequately filled for decades now. It's been downhill ever since they started calling Personnel departments "Human Resources". Nomenclature which arose after all the layoffs from the Nixon recession, in response to employees actually being treated more expendable than ever, whilst relying only on paperwork filed with HR to judge those worthy of retaining their careers.

      Through time, regardless of what a performer can do, without an impressive file (by comparison to some known slackers already in the corp) they won't even be given a chance.

      These outstanding performers are getting harder to find since so many more people have a degree these days, even PhD's, and with all the average-to-below-average students now earning degrees and thus diluting the degreed talent pool.

      Plus more often than not the original need for enhanced credentials was purely bureaucratic, which can work OK to an extent in a well-run bureaucracy, but when you've got a key position where an average performer just will not do, it really doesn't help no matter how many degrees they have.

      Often you need someone who has put 4 years or less of effort into rapidly earning credentials better-than-average (at the expense of getting deep into the actual science), who will take that type of success into the workplace, having an advantage doing more of the same politically within the org.

      Other times, especially in science, you need someone who has had a lifetime of interest, to build upon that much more technical background, which could not be achieved in merely 4 years anyway, even by the same person.

      When you need a lifetime of progress you're going to get a lot more from a 21-year-old who didn't just start a few years earlier.

    • l0b0 402 days ago
      Even an MSc in CS won't get you very far. There's only so much time in the day, and only so much new stuff you can cram into people's heads in one go. Uni gave me a broad base, but the knowledge is ultimately extremely shallow. The exceptions all seemed to have grown up with parents who knew enough about computers to actually teach them, and they had a massive lead on the rest of the class in some subjects.
    • sanderjd 402 days ago
      I have, at times, appreciated the intricacies of intra-thread concurrent algorithms relevant to my work at the time, but I happily page that knowledge out when it's no longer being used, and will (painstakingly) page it back in when necessary. I think this is the only sane way to go about things. There are way too many "fundamentals" to maintain expertise in all of them all of the time.
    • dgs_sgd 402 days ago
      I think you're setting a bit of a low bar here. The poster mentioned they're in their final semester.

      If you're in your final semester of a formal CS education then you have almost certainly taken courses on all of the things the poster mentioned. I remember studying all of these things, at least at the introductory level, in the second last year of my university education.

    • Cthulhu_ 402 days ago
      Look up the CS courses followed, see if those skills are on there. And even then, take it with a grain of salt because in my personal experience, the list of "this is what we'll teach you" is often wrong.

      A lot of skills are acquired by experience and when needed; don't hire fresh graduates for foundational and theretical knowledge, hire for learning ability. Give them a take-home assignment where they have to show they know or can learn something new.

    • bpicolo 402 days ago
      The first two years of a CS degree also usually include primarily non-CS class requirements for a typical degree.
    • MetaApe 401 days ago
      I’ve been shouting this mantra at companies for a while now, most generally have an aversion to junior engineers and my main argument is “they are junior” which seems lost on many.
    • irrational 402 days ago
      > four year computer science degree

      But, not all four years were spent on CS. Usually 1+ of those years are spent on generals and dicking around trying to decide what to major in.

      • arethuza 402 days ago
        The 4 years I spent doing a CS degree at a Scottish university were all maths and CS - almost no "dicking around". Mind you this has the distinct disadvantage that if you get to uni and you realise that CS isn't your thing you had very few options.
    • icco 402 days ago
      This is also why you shouldn't take GPA or alma-mater into account when considering resumes. MIT grads are just as worthless as any other 21y old.
    • game_the0ry 402 days ago
      Agree. Srsly, the expectations on new grads is stupid high, for many professions, not just CS.

      And leetcode does not prove anything.

      • MuffinFlavored 402 days ago
        > Srsly, the expectations on new grads is stupid high

        Is part of this because not too long ago, Facebook + Google were basically giving the top new grads $175k signing bonuses to convince as much top tier talent to work for them as possible (and things of this nature)?

        • game_the0ry 400 days ago
          FAAANG unintentionally limited its own hiring pool by implementing leet code for their own hiring screens. They accidentally set the bar to high and the hiring process filtered people with a limited skill set that almost always had little relevance for the job they were hired for.

          This throttled the market as a whole, limiting supply of workers which drove up TC.

          The upside at least is that I can play that game too and optimize for it, and then reimplement the same practice which further limits the supply of labor and benefits my TC at the expense of the company I work for. Win.

    • sh4rks 402 days ago
      > Frankly, most 35 y/o engineers don't truly appreciate the intricacies of intra-thread concurrent algorithms

      You don't need to know the intricacies, just the foundational basics. Locks, blocking threads, deadlocks etc. Any half decent CS course will teach you these concepts.

      • lfowles 402 days ago
        If it only takes one course it shouldn't take long for them to get up to speed. Gauge their ability to learn rather than what they have learned.
      • sanderjd 402 days ago
        It is necessary to know such things exist, but expected that their details will be looked up when relevant. Some people write low level concurrent code all the time, and they need to be up on all those details all the time. But many people only do so intermittently, and they only need to be aware of the existence of tricky details in the space, and have the capacity to get up to speed on them.
      • jobs_throwaway 402 days ago
        Do you mean any half-decent concurrent programming CS course? Because your intro (or even intermediate) CS courses don't come anywhere close to broaching those topics, even at elite universities.

        The real issue IMO is that you can get a CS degree without taking a concurrent programming course

        • gardenhedge 402 days ago
          Why is that an issue? Most programmers won't need to do concurrent programming, right?
        • sh4rks 401 days ago
          Well this is news to me. Maybe things are different in the USA
          • jobs_throwaway 401 days ago
            how would an intro course even get into these topics? Like, is week 1 here's a variable and a for loop, week 2 pointers, week 3 here's a semaphore?
            • sh4rks 401 days ago
              Students aren't looking for internships after 3 weeks though. You usually start applying at the end of the year. By then, your CS course should have covered the very basics of concurrent programming.

              Maybe we have different definitions of "CS course"

      • HervalFreire 402 days ago
        Give me some examples of intricacies?
    • hn_rhea9394 402 days ago
      I never considered this perspective. I appreciate you ;)
    • copymoro 402 days ago
      > Most people I've worked with go home and watch football after 5pm.

      after 3 years of working as a programmer in the same company I understood why people do that. It's a sanity preservation mechanism.

      So then I burnt out and quit.

    • HervalFreire 402 days ago
      [flagged]
    • sgt 402 days ago
      [flagged]
      • SturgeonsLaw 402 days ago
        No, it's unacceptable. When people are not at work, they should be thinking about work, planning for it, and hell, still doing it, only unpaid.

        I say we shouldn't even have a distinction between work and home. We should set up dorms so that people don't have to leave the premises. Rent can just be taken out of their pay, talk about convenience! In fact, do they really need to get paid, when the company can provide all their needs? Isn't getting to do the work reward enough?

        • simplotek 402 days ago
          And once a company exec feels the need to embellish results by cutting salary expenses, those workers need to be the first to present resignation to avoid the extra cost to the company in salary, meetings and in paperwork.
        • Aeolun 402 days ago
          I think you are describing the animation industry in Japan :)
        • octopolus 402 days ago
          I should start demanding payment for taking a shower, I can’t believe I’ve been providing this service free of charge
          • JackFr 402 days ago
            If you would just be cleaner, showers wouldn’t even be necessary.

            I mean honestly it’s like debugging - for God’s sake just stop writing the bugs in the first place.

          • wholinator2 402 days ago
            Nobody wants paid for time spent in shower, we just wanna go home at night and be free to choose our activities and hobbies without being critiqued for having lives
        • rob74 402 days ago
          [flagged]
          • raspberry1337 402 days ago
            I don't think firing middle management, documenters and designers with no trackable productiveness and forcing people to work in their free time is the same thing ?
            • SketchySeaBeast 402 days ago
              Do you have evidence of this claim that it was only unproductive people?(Though I find your definition of who those people are is also suspect) I've read news of large parts of teams being fired, including gutting important groups like curation.
              • ohgodplsno 402 days ago
                Statistically, by firing entire teams, you're bound to catch a few unproductive people. The acutally productive ones that you fired can be filed under "side-effects of making the company lean".
            • mold_aid 402 days ago
              Weren't there reports last week of that dude literally creating a company town in Texas
      • mablopoule 402 days ago
        Be it family, hobbies, religion, other topics of interest, the scope of things to do in life is near-infinite.

        You could spend your evening honing your skills for a while, yes, but even then at some point you might feel tired of just spending all your time on computer-related stuff.

        Then you log on HN, like you did for the last decade or so, and see another "Ask HN: I don't feel passionate about coding anymore" post. It's okay buddy, passion will come back, or might not in a way that makes it okay, you just need a breather.

        Sorry, went on a bit of a tangent, cause I do agree with you in fact. I do expect my colleagues to meet a baseline of competency, one that usually only met by "doing your homework", and at the same time, I don't think it's reasonable to expect them to do it out of habit.

      • lionkor 402 days ago
        Yes, if you work on time youre not paid, youre a goofball.
        • echelon 402 days ago
          > Me working at checks clock 4:47 AM Sun--Monday morning.
          • ianmcgowan 402 days ago
            Technically, posting on hackernews is not working, unless "compiling" in which case carry on with the chair sword fight :_)
            • re-thc 402 days ago
              Perhaps they work in "marketing"?
              • echelon 402 days ago
                It's our job to know what the world is up to.
          • rytis 402 days ago
            why? are you paid to do that?
        • faeyanpiraat 402 days ago
          your ssl cert expired
          • rjbwork 402 days ago
            Fixing that would require working when he's not getting paid, and that would make him a goofball.
          • lionkor 402 days ago
            oh, thank you :) certbot doesnt work when not paid i guess
      • lynx23 402 days ago
        Yes, it is acceptable. Nobody is entitled to expect a coworker to work outside of payed hours. If you think you are entitled to that, I believe you should move to China or North Korea.

        Are you a founder, perhaps? Or just a toxic individual?

      • illiarian 402 days ago
        > Is this acceptable? Should we not expect more from our co-workers?

        You know there's life outside work, right?

        • qikInNdOutReply 402 days ago
          "Just work was his life!" the gravestone of a plowhorse awaits as final archievment.
      • dieselgate 402 days ago
        No we should not. If people want to do it that’s great but I’d rather watch football after hours with coworkers than work for free
      • maigret 402 days ago
        We should do both. Sometimes learn and read, often spend time with friends, family and hobby. It’s also fine to learn during the job. I find it sometimes refreshing to do fun side projects but for me it’s important for them not to be tight to a deadline, team discussion, quality expectations of others etc - everything which is expected at work. It’s an investment in myself that I sell to my employer with regularly increasing salary.
        • newaccount74 402 days ago
          > It’s an investment in myself that I sell to my employer with regularly increasing salary.

          I think this is a really important point!

          Of course it's acceptable to go home and watch soccer.

          But then you are relying on your employer to keep your skills current. Some employers will send you to a conference once a year, but I'm not sure that's enough.

          If you don't keep learning you'll realize that when you are 45 your skills are 20 years out of date.

          Considering how tech salaries exploded in the last decade, I think we're getting a fair deal for spending some of our free time learning.

          • DrewADesign 402 days ago
            Most jobs offer progression without the toil of deliberate study on your personal time. Good employers invest in their employees by allowing them to do gain skills while on the clock, be it through classes, independent study time, side projects, etc.

            It's also dangerous to willingly give this away based on the salaries during a boom. The expectation won't go away when the boom goes away... In fact, it will probably get worse.

          • scarface74 402 days ago
            I don’t spend my free time learning. Once I’m not learning useful resume building skills on my job, it’s time to change jobs.

            I’m not saying that I’ve never worked “overtime” to do what would have been 8 hours worth of work for someone who knows what they are doing.

      • legostormtroopr 402 days ago
        Is it acceptable? Yes

        Should we expect more? No.

        If you are lucky enough to work a job you love, work as long as you want - but no one is obligated to do more than they are contracted for.

      • davidgerard 402 days ago
        Personally, I'm increasingly a big fan of "fuck you, pay me."
      • matheusmoreira 402 days ago
        Of course it's acceptable. Expect more? Pay more.
      • culopatin 402 days ago
        Acceptable? By who? Who needs to accept it?
    • checkcircuits 402 days ago
      [flagged]
    • devwastaken 402 days ago
      This isn't the reason. 4years of work and they can't make software? It's not the age, it's the system. It's not about learning how to make software, it's an adult daycare.
      • sumtechguy 402 days ago
        Adult daycare is a bit harsh.

        But even 'back in the day' on my first job out of college as a freshly minted CS major. My boss looked at me and said 'today you start to learn to write software'. He was mildly joking with me but was also very serious. A CS degree does not mean you can write software. Even 25 years ago I graduated with people who only took the intro pascal class and nothing else. These were CS majors. I knew going out on that I was a 'green' and had no real practical coding skills. Those I learned very quickly on the job.

        I had all the fundamentals. The thing I was missing was writing software itself. Why testing is important. Why structure and readability is important. How to decompose the program into different systems. I am glad for the CS degree as those issues do pop up from time to time. Mostly though I am gluing this framework to that framework so someone can fill out a form and automate some paperwork system.

        • butlerm 402 days ago
          I would worry about any university that had a CS program like that. In a decent CS program you should be writing a compiler in your senior year.
          • sumtechguy 402 days ago
            I did exactly that. That does not teach you to write a good program. It shows you how to make a compiler in yacc and bison or whatever the current flavor is. A skill I have had need of very rarely. Most of the time you do not need to reinvent a whole grammar with parser to get your task done.

            For new devs I take on. I stress good code structure, testing, regression, QA, path testing, logical layout of architecture, end user requirements and delivery of code. I assume fundamentals. If they are missing them I get them on projects where they would learn particular ones.

        • HervalFreire 402 days ago
          Strange. The things you were "missing" were covered in my CS program.

          I learned very little on the job. It was mostly things outside the job.

    • EVa5I7bHFq9mnYK 402 days ago
      Steve Jobs was 21 years old when he co-founded Apple Computers. Bill Gates was 19 years old when he co-founded Microsoft, as was Mark Zuckerberg when he founded Facebook.
      • mold_aid 402 days ago
        I love the point in the thread when someone piously intones the Names of the Founders
        • EVa5I7bHFq9mnYK 401 days ago
          Just it irked me that the parent comment tried to paint all 21y olds as incapable idiots.
      • adhesive_wombat 402 days ago
        Bill Gates was in the 0.01% in terms of access to computing resources at the time: a Teletype 33 and time on a GE mainframe via his private school. There are 19 year olds and 19 year olds when it comes to bring set up for Big Things.
        • 908B64B197 402 days ago
          He also had access to Paul Allen, who mentored him and was a professional programmer. Same for Jobs who had access to Steve Wozniak, the engineer behind the Apple I and II.
        • Verdex 402 days ago
          I read about how Bill Gates made a significant contribution to the pancake sorting problem in 1979 (iirc). Apparently, his results were bleeding edge for something like 30 years until someone managed to get a result that was slightly better (~1%). A result that was accomplished with a lot of computer assistance.

          So, also exceptional in terms of wetware.

          • oska 402 days ago
            I strongly doubt that Gates made any significant contributions to computer science. So I'd appreciate a source to what you've claimed here.

            Gates had a 'genius' for ruthlessly exploiting a monopoly in business; apart from that there is nothing else exceptional about the man apart from being a thoroughly unlikeable and harmful person, in my view.

      • kragen 402 days ago
        none of the three of them knew about database systems, relational algebra, sql, or concurrent programming; zuck might have known things about network programming but he wrote fecebutt in php, he wasn't writing a tcp/ip stack or even invoking socket(), bind(), and listen()
      • fuzzfactor 402 days ago
        All three would have been better companies today, and along the way, if the founders would have been more mature.

        They just wouldn't have gotten as early of a start.

        Edit: Not my downvote. Corrective upvote in fact.

        • scarface74 402 days ago
          If the purpose of a for profit company is to make a profit and keep shareholders happy. How much “better” could Microsoft and Apple be than 2 of the top 5 most valuable companies in the US?
          • jjk166 402 days ago
            More profit and happier shareholders. Can you imagine what apple could have achieved if they didn't force Steve Jobs out for a decade?
            • scarface74 402 days ago
              It probably would have been in worse shape. SJ needed the time to mature.

              Don’t forget that as late as 1993, Apple was worth more than MS and it was going back and forth with HP to be the number one PC seller. Things started going south around the time of Windows 95 - only two years before he came back.

              • fuzzfactor 402 days ago
                Another corrective upvote.

                We can't all define "better" exactly the same way, but I think it can be agreed there were mistakes due to immaturity that would not have ocurred otherwise.

          • oska 402 days ago
            Your starting assumption is invalid.
            • scarface74 402 days ago
              So what do you think the purpose of a for profit public company is?
              • oska 402 days ago
                The goals the company was founded to meet.

                Profit is necessary to stay in business so it's important. But it can't be the only and exclusive goal. A company is just a structure to make things happen / collectively achieve things.

                • scarface74 402 days ago
                  The goal of every company for profit company is fact to make its investors money. Do you really think that any investor cared about anything besides making money?

                  Please don’t tell me that you believe in sone BS “mission statement” that companies spout? Did you also believe Google’s “Don’t be Evil” motto thru had for years?

                  • oska 402 days ago
                    You're pushing a harmful, cynical and ultimately nihilistic agenda here. I've seen the same line pushed many times since it became 'en vogue' in the 80s but ultimately dating back to an influential Milton Friedman paper published in the early 70s. I reject it but I frankly also find it tedious to argue against it because those pushing it usually remain ideologically (neoliberalism) wedded to it. But if you do actually want to have your thinking challenged, there are many serious essays that have been written to contest the 'maximizing shareholder value' line. One I pulled up just quickly challenges it through Peter Drucker's views on the purpose of business. Quoting that :

                    > Profit and profitability are absolute requirements. That is why even non-profit corporations must strive mightily for profitability. However, this does not mean that profit is the basic purpose of a business. Profitability really is an essential ingredient by itself which might be better spoken of in terms of an optimal, rather than a maximum size. In support of this thesis, Drucker noted that the primary test of any business is not the maximization of profit, but the achievement of sufficient profit to allow for the risks of the financial activity of the business, and thus to avoid catastrophic loss leading to failure. And we might add, achieve the success which would benefit both the business and society. So profit is necessary, but [not] the purpose of business.

                    https://www.hrexchangenetwork.com/hr-talent-management/colum...

                    • scarface74 402 days ago
                      What is “nihilistic” about it? Why do you think investors invest in a company? Why do you think founders create companies? Most tech companies don’t desire to be “lifestyle companies” where they just want to make enough of a profit to support themselves. Most are looking for an “exit” which is statistically going to be an acquisition.

                      For instance, out of all the companies that YC has invested in, less than a dozen have gone public.

                      And once you either accept outside funding, you are immediately at the mercy of the investors whose only goal is to make a profit.

                      And honestly what Drucker thinks is irrelevant. What’s relevant is what the owners of the companies want - either public or private companies.

                      What do you think the pension funds and mutual funds want when they own stock in a company? What do you want from your retirement accounts?

                  • fuzzfactor 400 days ago
                    >The goal of every company for profit company is fact to make its investors money.

                    Not every for-profit company has investors.

                    >Do you really think that any investor cared about anything besides making money?

                    Some of the most successful investors already have enough money and/or lucrative investments, and truly do care more about other things, sometimes even while executing their foundational money-making investments.

      • sneak 402 days ago
        I was older than 21 when I learned about survivorship bias.
      • rvba 402 days ago
        Most people are not geniuses though. Of course one should benchmark against the best, but those you listed some real outliers here.

        For start all 3 were from top Universities? Gates and Zuck were at Harvard, Jobs was I think at Reed and partially at Stanford. How many people graduate from there? How many graduates of top universities go straight to FAANG for those fat salaries? How many go to work at their rich parents' companies?

        Steve Jobs founded his company (with the genius Wozniak) at young age. Why would the theoretical "next Jobs" want to work at OPs company? The "next Jobs" (whoever they are) probably had already funded their own company. Also founders are outliers, since most new companies fail, you dont hear about those who tried and lost.

        Bill Gates knew how to program well enough to get BASIC by the time he dropped out. There are people like this nowadays too. But they wont work as a junior in OPs company, when they can be hired as a mid or even a senior. They probably did few internships since year one university, so they can go to FAANG and earn a ton of money, or they just get hired by the place where they did the first internship.

      • chinchilla2020 402 days ago
        These are founders, owners, not software engineers. We are talking about software engineers, which is an entirely different career path.
      • esrauch 402 days ago
        And Alex the Great conquered from Greece to India in his 20s. Doesn't mean random 20 year olds should expect to be able to now.
      • the_jeremy 402 days ago
        If you are offering billions of dollars, you have a chance at convincing the next Steve Jobs to interview at your company.
      • goodpoint 402 days ago
        ...and that has nothing to do with knowledge and everything to do with being born in the right family.
    • bfjsnsosns 402 days ago
      > Hackernews is a self selecting community of tech works who study their job in their spare time as a hobby.

      In a matter of days, I have seen similar comments about HN audience in HN comments. Is consuming HN really an added qualifying factor or is HN audience a little too full of themselves. I don't know if I can attribute anything but being a bit curious as a quality for being HN audience. I don't think it's true that HN is a self selecting community who study their job in their part time. I spend time on HN, I am in tech and used to spend a ton of time "studying my job in my spare time" when I was younger, as I get older and have a family, my priorities are different. In the recent time, I tend to spend time now spending time with family or learning how to ski or spend time with yard work instead of spending energy on the latest shiny framework/language every year. I still work on personal projects but as I grow older, I have other priorities and things I'd rather do as well. I just don't think I am better just because I read HN as opposed to reddit or Instagram or Whatsapp.

      • counttheforks 402 days ago
        The mere fact that you're interested in reading tech news means that you're somewhat more interested in tech than the average person (or even software developer). That's all.
      • uhtred 402 days ago
        [flagged]
    • ramraj07 402 days ago
      Mediocre 21 year olds don’t know much of anything. That’s the issue. Any beating heart able to pass whatever filter course they have to limit CS intake is a CS grad now. The best ones from top schools intern at the top companies so what you get is the middle of the CS pack. Which means their average IQ is likely below 100.

      I still remember, this stem cell professor, Irving weissman, giving a lecture and the introduction said he got his start in stem cells when he started doing some stem cell isolation, when he was 15, in school, in the 60s. So 21 year olds, if they’re good, should know a bit about the thing they spent 3 years studying. let’s not hide behind some weird watered down metric that they’re too young.

      • davemp 402 days ago
        This seems like a harmful way of thinking about people and development.

        There's only a limited amount of time in life to gain experience. A 15yr old's brain is quite literally not fully developed yet, expecting someone to have chosen and begun studying in their specialty then is ridiculous. Such an early start also not generally possible without the privilege of good mentorship. There's also reason universities historically wanted well rounded individuals and require general education classes--you'll end up stunted or miss opportunity for cross pollination otherwise.

      • spacecircle 402 days ago
        This guy wrote 2 paragraphs about how the average CS person has less than a 100 IQ in a condescending way… while at the same time demonstrating he doesn’t even have a high school level understanding of statistics. You should look deep into yourself and wonder why you’d say or think things like this. It’s one thing to be condescending, but another to also pair it with some statements that reveal how you’re actually the dumbass.
      • notdarkyet 402 days ago
        I think you really underestimate the intelligence of the average CS grad. No way the average iq is under 100. Even to get past the prereq's for a CS degree like calculus you are not going to find many under 100 (let alone going on to graduate)
      • cinntaile 402 days ago
        Sounds like you're seriously underestimating the middle of the CS pack.
      • kevviiinn 402 days ago
        People at 15 doing that kind of work are extreme outliers, I think your view on the range of human capability is skewed
      • trasz3 402 days ago
        Ah, yes, “normies can’t code”. It’s not a polite thing to say, even if (somewhat) true, and it’s also not very useful, given they are the vast majority of people.
    • curiousguy 402 days ago
      > Most people I've worked with go home and watch football after 5pm.

      Unfortunately, the job market is getting more and more competitive.

      Software engineers had easy in the last 10 years due to high demand, but things are changing now IMO.

      Automation and AI will make most basic programming jobs redundant. Combine with saturation of entry level programmer. Everyone will need to push harder to differentiate from others. Race to the bottom..

      • gloosx 402 days ago
        >Automation and AI will make most basic programming jobs redundant

        You are probably not an engineer, since you should understand GPT makes programming harder, not easier. You won't necessarily make something easier by making it more high-level. Following your logic, you could conclude introduction of C made Assembler engineers redundant or that introducing Python left C engineers without a job. This is not true, using GPT to code is leveraging a natural highest-level language for the job, which is certainly leading to trouble, because it's not the best tool for the job – people specifically invented new languages so it's easier to express the business algorithm, all the attempts to make coding look easier by making it more as natural language failed, and the thought of GPT would suddenly change something? It is naive and ignorant, doing code is a pure thought process and fingers have long learned to tap it out by heart with the usual syntax without falling for the trap of ambiguities and inconsistencies in natural language. You just can't build reliable things with the prose, you do it with stricter rules of expression in mind

        • mmargerum 402 days ago
          I stepped into a project at work to help out knowing almost no typescript and wrote angular http routines that just worked in a few hours with chatGPT. first we started with any and then we built out an interface and it helped me use the map function in http to build out a result array without any intermediate array creation.

          I 100% would not have written the code as well as it came out with gpt's help.

          • gloosx 402 days ago
            Of course, GPT remains the best (after real human teacher) learning/discovery tool available nowadays, so it summarised (luckily for you, not hallucinated this time) some information together to get your job done. However, one could use his tooling documentation manuals to get the same job done in the same amount of time without prior knowledge? A senior engineer would just do it as fast as his fingers can type without the need to learn it prior. Oh, also he will be able to maintain it!
          • manicennui 402 days ago
            Unless you are new to software engineering, this shouldn't take you more than a few hours with or without ChatGPT's help.
          • datpiff 402 days ago
            How would you have done with just google?
        • curiousguy 402 days ago
          > makes programming harder, not easier

          That’s exactly my point. The current scenario where someone can just go into a 3 months javascript bootcamp won’t be enough.

          In my team, there is a grad dev doing bare minimum work. He has no initiative and struggles to understand basic requirements. I need to break down the task so much that I’m almost doing the work. In a few years, with better tooling/copilot/gpt, I will be able to just “finish” the job myself, and this kind of dev is made redundant.

          Maybe this kind of dev is not common in FANG, but I met several, from small to big companies, in my over 10 years software engineer career.

          • Clubber 402 days ago
            >That’s exactly my point. The current scenario where someone can just go into a 3 months javascript bootcamp won’t be enough.

            Realistically 3 months of any bootcamp was never enough.

            >In my team, there is a grad dev doing bare minimum work. He has no initiative and struggles to understand basic requirements.

            This kind of person has been around all over my 25+ year career, starting in the dot boom. "You should get into programming because of the money!" This is the result. With programming, you have to have an almost unhealthy obsession with it to be successful. These people get weeded out during the crashes, in which we are in the midst of.

            FWIW, we have one of those too.

          • gloosx 401 days ago
            Your case sounds like this - we have an engineer assigned to our team, we don't like his performance, and we can't do anything about it. Kind of a dead end which is bad for business. I prefer strong teams which were assembled by team leaders and members, not by business. I think the biggest problem in tech hiring is who makes the hire, it's pure luck if you don't have a ton of comprehension in the field and just assign someone as a business owner. The second biggest problem is that the wrong people don't get churned in the first few weeks So hire ONE senior engineer who will get stuff done in a way you like, – let him do the rest of the team hires, give him the responsibility to fire those who don't fit in the first few weeks. Voila, you have a self-sustained, well-communicating, and motivated team of people who get stuff done in a way you like.
      • BurningPenguin 402 days ago
        > Automation and AI will make most basic programming jobs redundant.

        I kinda doubt that. You still need someone to act as a translator between user and machine.

        • atraac 402 days ago
          I find it that the people who say "AI will replace developers" are the same ones that were thinking that CMSes will replace the need for developers, then no/low-code will replace the need for developers. But no, users are too stupid to handle stuff. Best case scenario developers will automate the easiest and time consuming things like UI creations and boilerplate using those tools. Most companies I know that use CMSes still have devs changing every single bit of the page because they either customized it so heavily or they simply implemented it wrong. I haven't seen a single successfully low-code company yet(though that just might be me). The same will happen with ChatGPT. It will become a tool, professionals still will be needed to use it properly.
          • screwturner68 402 days ago
            Remember when "the cloud" was going to replace ops and on-prem and yet here was are 17 year since the release of AWS and we've only seen a 40% shift to the cloud and a massive need for ops people. Coders aren't going away they will just shift.
            • scarface74 402 days ago
              You’re literally off by a factor of 10. Andy Jassy himself said that only 4% of all IT spend is on any cloud provider.
        • jliptzin 402 days ago
          We talk to the machines so the users don’t have to. Can’t you people understand that??
        • curiousguy 402 days ago
          My comment was about entry level programming job.

          AI/automation will help more seniors developer to a point that most basic tasks can be done instantly and you don’t need to ask a junior dev to do it.

        • HPsquared 402 days ago
          LLMs have the potential to make that job a lot easier, so a larger pool of people are able to do it.
      • falcor84 402 days ago
        > Everyone will need to push harder to differentiate from others. Race to the bottom.

        That actually sounds to me like the opposite, i.e. "Race to the top", or just "a race".

        • jjk166 402 days ago
          It's a race to the bottom in terms of work-life balance/compensation - ie everyone is putting in more effort to stay at the same level of employment until the industry bottoms out and people can't realistically work any harder for any less.
          • falcor84 402 days ago
            It sounds to me that you're just describing the supply-demand curve of employment, i.e. capitalism as prescribed. Are you suggesting an alternative approach?
      • urthor 402 days ago
        I'd agree... for the 250k (or more, much much much more) Silicon Valley jobs.

        My university internship and first job was at an insurance company.

        Know who works less than employees in the insurance industry?

        Almost nobody. I don't think anyone I've ever met in my entire life worked less than people at my first tech job.

        • manicennui 402 days ago
          The phenomenon you are seeing is present at all large organizations. I promise you that there are thousands of people at Google who do very little.
        • smashface 402 days ago
          My first two internships were at an insurance company. Everyone was busy. Not saying your job wasn't what it was but I can't say it's representative of everything outside Silicon Valley.
      • chinchilla2020 402 days ago
        chatGPT isn't helping anyone write code unless they are writing the simplest school assignments.

        Actual programming is more complex and involves tons of non-code logic.

  • techwizrd 403 days ago
    You hit the nail on the head in your post—these are things _you_ consider foundational knowledge.

    I graduated with my Bachelors in CS in 2016, and those classes were optional senior electives. You were required to take a certain number as well as some required ones (i.e., Computer Architecture, Analysis of Algorithms). I chose to take Database Systems, Data Mining & Machine Learning, Robotics, Computer Vision, etc. as electives but not Concurrent Programming or Network Programming because I already felt comfortable with those topics. Others chose classes in topics like mobile application programming or programming language theory.

    Those topics may be foundational for you, but not for others.

    • urthor 402 days ago
      I'd argue that knowledge about concurrency, a model of CPU threading, and race conditions/data sharing between threads is foundational.

      Database transaction locks, data (form of race condition), SQL (declarative graph traversal combined with a simple projection), slightly derivative.

      Compilers and SQL are technically not the foundations IMO.

      Jumping/reading/evaluating/copying data, binary trees/log base 2 hierarchies, state machines, set theory, functional programming, Von Neumann model plus knowledge of multiple pipelines for integer adding are the basics.

      ...But, studying compilers and SQL is highly advised. Compiling code, and an understanding of database transactions locks are incredibly important practical skills.

      • zinclozenge 402 days ago
        In the US, the basic concurrency topics are covered in an OS class, which I believe is a mandatory part of the curriculum. But a course dedicated to it would definitely be an elective.
    • PossiblyKyle 402 days ago
      The most surprising part is ML being an elective course in 2016. ML is mandatory in my university, but DL is elective
  • sophiabits 402 days ago
    I think there's a tendency in our industry to forget just how hard it is to get decent at programming. All three of those topics you've listed are big, complicated, and hard to get right. I have coworkers today who struggle to write code that isn't susceptible to race conditions. Before you even get to concurrent programming, there are a thousand other things you need to learn beforehand.

    Interns / juniors have little to no practical experience, and practical experience is where you _really_ learn how to program.

    I think there is room for innovation in CS/SE education. Imo some sort of "code review" class where students analyze and report on a bit of code would do wonders for interns / juniors ability to onboard quickly into their first job. I've written about this in the past [1]

    [1] https://sophiabits.com/blog/the-one-change-id-make-to-se

    • throwaway2037 402 days ago

          "just how hard it is to get decent at programming"
      
      We can improve that with: "to get (and stay) decent". I'm getting older, and it is so hard to keep up with changes. The async (coroutine) revolution in several languages in the 5-10 years was one of the hardest hills to climb ("WTF? How do you debug this sh-t!?").

      Your comment makes me think about a blog post that I once read (I cannot find it now). Roughly, it was a list of things you need to learn as a computer programmer, but are not explicitly taught in classrooms.

      One nice example: What is "staging" in Git? Hell, I've used Git for years now, and that part of my mental model is _still_ fuzzy, but the model is good enough to do my job well. I cannot know everything crystal clear.

      I would the same for concurrent programming. Not looking down upon anybody, but the vast majority of programmers will never go deeper than: "Oh, just use a thread/worker pool with a runnable to do work." I've gone deeper, but blew off both my feet several times! (Hat tip to in/famous C++ quote.) And I only need to write concurrent code a couple times a year. I'm always rusty when I get back into it.

      • robertlagrant 402 days ago
        > One nice example: What is "staging" in Git? Hell, I've used Git for years now, and that part of my mental model is _still_ fuzzy, but the model is good enough to do my job well. I cannot know everything crystal clear.

        You may have heard this one before, but staging is just saying, on your local filesystem, of all the files I've changed in this repo since last commit, these are the files I want to add into my next commit. You mark them for this with `git add <filename`.

        (Slightly more detail: it doesn't need to be file-level; you can stage only certain changes within files if you like, using `git add -p <filename>`.)

    • bobthepanda 402 days ago
      I think it would be hard to do, in a way that wouldn't end up sometimes being "the blind leading the blind."

      I remember in university we had peer review for writing courses, yet that didn't really seem to elevate anybody's writing more than it had been before. The people who did well continued to do so and the people who did not also continued to do so.

      • sophiabits 402 days ago
        That's a fair point :) I was quite fortunate to have university professors with a decent bit of industry experience, and I /think/ they likely would have been up to the challenge but that's far from the norm.
  • simonsarris 402 days ago
    When I was a student representative on the Computer Science curriculum committee (over ten years ago now, at an engineering college, Rensselaer Polytechnic Institute) the concerns were not about how we can ensure students learn more about database systems or concurrent programming. They were solely based around an almost exasperated set of older professors who were shocked that new students didn't seem to know what they knew before, and were unable to handle the curriculum as it had been.

    For example several first year students not only had no familiarity with calculus, many were having a hard time with algebraic concepts. Concern was around finding some way to add a remedial math course before Calc 1. This pushed everything else out farther.

    CS grads may lack foundational knowledge simply because high school grads lack foundational knowledge. What it took to "pass" high school 30-50 years ago seems substantially more rigorous than today.

    The administration didn't care. They didn't even care if the students dropped out. Butts in seats = more money. That's it.

    • ben7799 402 days ago
      I went to Rensselaer as well, graduated 24 years ago. I am mostly shocked at the stuff it is obvious other schools are not interested in teaching these days in terms of core computer science curriculum.

      Maybe the issues around high school math are part of it, but this was kind of obvious in the 1990s as well, I remember sharing a cube as an intern with a graduate student at another well known school and they were taking graduate classes in the summer and were using the same book for a supposed graduate class that I had for a class my freshman year at RPI.

      I think RPI's core program requiring Data Structures & Analysis, Fundamentals of CS/Models of Computation, Programming Language Design, study of Grammars, etc.. is an outlier for undergraduate CS curriculum.

      It seems rare I come across someone who can analyze the complexity of an algorithm, check if something can be parsed by a Regular Expression, really understands recursive algorithms, etc.. unless they went to graduate school, and the industry doesn't seem to expect people to understand this stuff.

      But you can't necessarily generalize. Not all high schools are the same and they never were. And old professors at RPI are just mirroring the historical reputation of RPI as a tough school. In the past they probably just had more freedom to fail all those students out of the school.

    • thwayunion 402 days ago
      This is it -- colleges and universities are desperate for butts in seats ~> admissions standards slip ~> first year is remedial ~> lots of stuff gets dropped in later years.

      Another major consideration: "CS degree" is a misnomer in the US. We have thousands of colleges and universities that vary from "best in the world" the "literally fraudulent". I've even come across a few small colleges where the CS department is staffed entirely by people with a few years of industry experience and an MS, who likely wouldn't even clear the bar for a senior eng role.

      • ben7799 402 days ago
        This is definitely not a US problem either. Foreign CS degrees are extremely variable in their quality as well.
  • ohdannyboy 403 days ago
    Databases, network programming and concurrency (beyond basic constructs like mutexes) are not fundamental. SQL is certainly not fundamental to the major, that's a specialty only needed by a small percent of programmers.

    I would suggest looking at the CS departments page from whatever university you mainly recruit from to get an idea what the core of their program looks like.

    • cjohnson318 403 days ago
      SQL is a unique case. It's important enough that you should know the basics, but it's easy enough to learn that it doesn't really deserve a whole class, unless you're teaching students to build databases, which is definitely niche.

      I'm sure it's needed by a large percentage of programmers, but maybe that's my bias speaking.

      • 8note 403 days ago
        The relational algebra definitely fits into CS foundations, in terms of things like ACID and serializability etc.

        That was a fun course where I learnt horribly bad patterns like "your data forms a key so you should use that as your key instead of having a surrogate key"

        The prof was good at relational algebra, but not designing software

        • imtringued 402 days ago
          Composite natural keys sound cool in theory but really? Who wants to deal with that stuff?
      • ohdannyboy 403 days ago
        I totally understand looking for graduates that know SQL for certain positions, but it is a specialty not taught in any core class. You can absolutely know CS and entire areas of programming without it.

        I used SQL all the time in web dev but haven't touched it since going to college. I do embedded so it's just never been necessary.

        Now if this is a web dev or data related posting and students are coming in supposedly for this specialty then this ask HN is a little more understandable. Although perhaps poorly worded.

        • cjohnson318 402 days ago
          > I do embedded so it's just never been necessary.

          Oh that's cool! I've never worked on that side of things. I assumed SQLite was used in embedded stuff, but I guess not.

      • ben7799 402 days ago
        The way this was handled where I went to school the DB class was basically presented as a history of database technology class where the CS fundamentals behind how each type of database works, what it's weak points and strong points are, etc..

        SQL was then something that was a side thing in the class that you were supposed to pick up for one of the projects.

        We had to learn to normalize schemas in that class. I have yet to come across a team in my career where normalization was understood well enough to where it could be correctly matched to the architecture of the entire system.

        The other amazing takeaway was going through the historical failures of hierarchical & graph databases. Since I started working hierarchical databases have come back with tons of hype twice now (once in the late 90s, once in the late 2010s). Both times they failed exactly the same way as history would predict based on what happened in the 60s and 70s that led to the development of relational databases. Sometimes it seems like the industry hype train is completely unaware of computer science.

      • hnick 402 days ago
        The class I did was largely focused on relational algebra. So we learned the formal language of that (which I've largely forgotten) but did many practical exercises in SQL. I think it was valuable, since "thinking in sets" is something that people who only do linear algebra or algorithms might not be used to and so they carry a more linear problem-solving thought process with them.
    • imtringued 402 days ago
      You don't get a CS degree from my university if you don't know relational algebra and can translate relational algebra to SQL. It is far from a speciality, if anything, knowing SQL should be the norm.
  • alkonaut 402 days ago
    Databases and networks have very little to do with CS. I think the problem is that we confuse "Computer Sceience" with software and programming. Computer science is to programming as Physics is to mechanics of repairing a car. You are basically a car mechanic hiring an intern physics student and wondering why they don't know anything about timing belts.

    Perhaps the problem is that we train so many computer scientists to do programming, but that's the learn-on-the-job part I guess.

    I met version control and unit tests on the first day of my first real programming job, because I studied physics, math and computer science. And I'm still (by far) the go to person in the office for all matters related to plasmas or cosmology.

  • lordnacho 402 days ago
    I think the only thing you can really expect them to have done is DS&A plus a bunch of math.

    All the things you mention are fairly big topics, and not only that, you only really understand them by doing a bunch of coding over several years. You can get introduced to them in university, but a degree course is only so many topics and they all need an introduction. Chances are if a student has done these things it's superficially, in practicals that are similar to practicals in other sciences: you don't really understand it, you write it up, and then you don't rely on what you did for further studies.

    I studied a bunch of things at university, leaving without being particularly good at any of them. For instance I built a radio and a bridge in my first year on the engineering degree, but I couldn't just become an EE or civil engineer from that. I wrote a thesis about early WiFi for the business school, but that doesn't mean I could just be a product manager.

    Similarly, a student may have done a bit of joining tables in SQL, a bit of multithreading, and a bit of routing during practicals, but you wouldn't think they really understood any of those things in the way someone with a couple of years on the job would.

  • Mizoguchi 403 days ago
    I get co ops from first and second tier schools and they usually join lacking a lot of fundamentals of CS.

    However in my experience most of them pick things up relatively quickly and end up becoming good engineers and reliable team players.

    At a BSc level with no experience we should be looking for genuine curiosity, motivation and interest in learning and solving hard problems.

    Everything else can be taught.

    We have even expanded our program to include interns with degrees in other areas of science such as mathematics, physics, materials and mechanical engineering, some with very little programming experience, with great results.

    Our objective is always to hire them and retain them, so we do invest plenty of resources in training them well.

    • busterarm 403 days ago
      We almost exclusively hire new grads and have coops/interns from first tier schools. We kind of have this stupid bias against everyone else in our hiring process.

      These engineers all turn out to be okay but we don't end up with any new or advanced ideas out of this pool. We cargo cult every behavior that Google does because a few of our senior engineers were ex-early-Googlers.

      If feels like working with the blind. There's no interest from our engineering teams about new developments in the field and they don't even recognize when the work that they're doing is a fit for new patterns.

      99% of these people don't know what a CRDT is and don't recognize when they're accidentally building one. Once every six months or so someone will post on Slack about their eureka moment of just discovering what a Bloom filter is and how it might apply to long-lived problems that we have.

      To someone entirely from the practical/self-taught/trade side of things it's a kick in the teeth knowing what I bring to the table and how my org depends on me but doesn't respect me enough to hire other people with the same background.

  • dboreham 403 days ago
    Because it takes much more than an undergraduate degree to learn the field properly. If you find a graduate who is clueful that's probably because they've been hobby programming since age 12, or working in the summers somewhere they could get good experience.
  • notafraudster 402 days ago
    I did a CS degree 20 years ago. Databases, concurrent programming, and network programming were all 4th year electives (I took network, AI, and image processing personally). But something not being included in a core curriculum doesn't mean someone can't learn it.

    My curriculum was: Year 1: Intro Comp Sci / Year 2: 2 courses in Logic, 2 courses in data structures and algorithms / Year 3: 2 courses in processor design, 1 course in finite state automata, 1 course in parsers / Year 4: a course in ethics, a course in team programming (which covered UML and version control), and two electives.

    I believe a major was 14 courses so I'm missing one, or it may have been it was three electives. I didn't take databases because I was already a paid sysadmin before I started college and mostly at the time database courses were just ten tedious weeks of normalization crap.

    Also, treat your interns better. The reason to hire interns is because you plan to devote some of your resources to help them in their professional development. Stop asking what you can get out of your interns and start asking how you can best give something to them.

    • onezeronine 402 days ago
      I once hired two interns from an old startup of mine in 2017 who were on the verge of quitting CS because they found out that maybe it is not the course for them. I told them that CS teaches fundamentals, but real life programming work teaches you how to write good code.

      I got them to work on an internal tool using Node and Vue.js for 2 months. They were good programmers overall.

      After their internship ended and completed the requirements for college, I received a personal letter from them thanking me for the knowledge and support they got from me. Apparently, I lost the letter after closing our startup after a year. But I vividly remember the gratitude I got from them.

      What I learn is that internship is a two-way street. You learn how to communicate with them effectively at their level and they learn from you in writing software.

  • kypro 402 days ago
    When I learnt CS in university in my opinion 99% of them were unemployable after graduating. They simply didn't have the depth or hands on experience to build or understanding anything of any complexity.

    This may be different in different universities and it may have changed today, but the tests we took were largely about remembering lecture talking points and being able to regurgitate them with or without any real understanding.

    For example, you might learn a bit about relational databases, but your understanding will be limited to the talking points of the lecture. Eg, you might get question to explain the use of primary keys, but if you were asked them how you might design a relational database for some data with normalized tables they'd have no idea, because they'd never have actually put the talking points into use.

    It upset me because by the time I had finished university I had launched two startups and worked professionally as a developer for 3 years. I was consistently helping students with practical exercises while at uni given I was one of the most capable on the course, but none of my experience really helped me in the tests because I discovered so little of it was about practical understanding, and mostly just an extended English exam tested mostly on writing ability and being able to regurgitate talking points in lecture slides.

    It's not that the students weren't smart or capable individuals, its just that the course didn't incentivise obtaining depth of knowledge in what was taught so no one did.

    • Clubber 402 days ago
      >When I learnt CS in university in my opinion 99% of them were unemployable after graduating.

      I was fortunate to get my degree where I did. In our RDBMS course, the mid-term and final was to build a fairly sophisticated model based on a set of written (in English not code) requirements.

      In our senior two semester class (I forgot the name), we had to design and spec out an application first semester using Microsoft project (I'm old) and in the second semester, we had to build it and demo it to the class the last few weeks.

    • trinsic2 402 days ago
      That's been my experience as well working with interns. It's like they teach a lot of theoretical stuff but no practicalities. Kind of pointless to even go to school if you don't learn practicalities IMHO.
  • SamoyedFurFluff 403 days ago
    I wouldn’t consider network programming to be foundational to all computer science, tbh. Are these interns expected to be writing their own sockets? Similarly, are the intern projects involving writing out the operational trees of your sql? I would consider these to be great if the intern knew of these things but I wouldn’t expect an intern to be functional in any of it. (I would put kernel writing, compiler programming, security, mobile development, etc. in the same category. If they know some and it applies to the intern project cool, but I brought an intern on expecting them to be worse than useless lol. The goal is to get them towards useful for when the company hires them.)
  • MattGaiser 403 days ago
    As an undergrad, my priority was learning what was most frequently on interviews and what most jobs cared about. None of this fit the bill.

    SQL? Yes. Database theory? Have never discussed it beyond "what is an index"? So I never looked at that topic again.

    Concurrent programming? Never dealt with it outside of courses and jobs that care about it mention it, so I self selected out. So I never looked at that topic again after the course.

    Network programming? Took a course in it, but outside of a few devops use cases, I have never had any reason to recall that knowledge. I just memorized 5 versions of that test and went in to it with that.

    My advice to my undergrad self would be to basically abandon anything that is not fun projects (so you get familiar with the languages themselves), hackathons (so you have culture fit), and leetcode.

    I can't imagine the average ROI on learning these things is great.

  • friendzis 403 days ago
    It's money and competition. First, universities/colleges want to maximize their profits and that means maximum number of students at minimum cost. Unless the whole schtick of a particular university is "superior quality" it usually makes financial sense to not offer highest possible quality and rather increase throughput.

    Second, I don't know what part of the world you are in, but usually formal education courses have certain requirements to them, roughly x1 hours of social, x2 hours of humanities and so on. Then there are basic prerequisites like math. In the end, the final number of hours for subject is not that high as it would seem at first glance.

    Finally, there is competition among education providers and their "tiers". Universities/colleges compete not only among themselves, but against codecamps too. The premise of code camp is to help somewhat computer literate people memorize a bunch of text macros that yield certain result on the screen. Colleges must adapt to compete, dropping the quality floor even lower.

    In the end, unless you have graduates from "general" college/university you can expect that deep foundational understanding will be replaced with quick factoids on how to produce certain result in certain specific context without understanding said context or even being aware of said context.

    Greybeards looked the same at "us", by the way.

    • ActorNightly 403 days ago
      Its definitely money, but its not really competition, and more of a scam.

      Universities have no vested interest in education of students - their money comes most often from government loans at the time of attendance. Once the student graduates, they have their money, they don't care how successful the graduate is in the industry.

      As such, if you ever want to see massive education reform, all that needs to happen is make the state colleges run their own bank system and give out education loans, instead of the government adjacent banks. You would see massive changes overnight.

      • havblue 402 days ago
        "they don't care how successful the graduate is in the industry."

        Is this really the case for software development/ engineering? I would think having lots of lackluster applicants would tank undergrad rankings for us news, that having successful career fairs and starting salaries are in fact a priority. (Granted, these universities care more about research.)

        • wccrawford 402 days ago
          So many people don't check those things before going to college that it effectively doesn't matter. The best colleges will get more applicants than they can handle, and everyone who is rejected will go to other colleges. You'd have to be really, really bad to get a reputation for failing your students.

          And the institution doesn't care, but many of the teachers do care, so they do what they can to help the students.

          Also, they cook the books. I went to a college that supposedly had a high 90% placement rate. But what they actually counted is if the person had a job soon after they graduated, no matter what field it was in. Because most people who had to pay those tuition prices needed to be earning money to pay them back already, they took whatever job they could.

          I called them on it and they claimed that I was refusing to follow their advice and that's why I couldn't get a job in the industry. In reality, they were just horrifically bad at job searches. The interviews they sent me to were for horrible companies, and even then I didn't even get a second interview.

          They claimed it was because I refused to follow their advice of hand-writing a note to give to the secretary to give to give to the interviewer. I informed them that seeing my handwriting was a massive turn-off, but that continued to be the career counselor's excuse as to why I couldn't get a job.

          My dad ended up going in and yelling at both the counselor and the head of the head of the school, which changed their attitude considerably. They were still completely ineffectual, though.

        • friendzis 402 days ago
          IME, yes.

          Career fairs are reflective of general job market. As long as companies do see career fairs as a viable recruitment path they do participate, even if for the sole reason of poaching "the best". Companies do not really care (at least as first-order effect. Of course there are second-order considerations) whether the grey mass is sub-par or completely unemployable. On the other hand, as long as an institution is not notorious for producing unemployable graduates they also do not really care (again, as first order effect) whether the lowest rated classmates are merely slightly below average or "complete morons".

      • friendzis 402 days ago
        > but its not really competition

        Why not? It's a zero-sum game as in the number of students in a given year is +/- fixed. I see it as a competition to attract students to apply AND eventually graduate

  • hardware2win 402 days ago
    Concurrent programming is a topic that many actual SEs struggle with, do not expect students to be proficient with it

    Also what network programming means to you?

    Basic networking knowledge or actually writing low lvl network code?

    Besides that: higher edu institutions suck, unless it is something like top3 then do not expect a lot just because it is a degree, everything is up to the person.

  • arcade79 402 days ago
    What's shocking to me is how little practical exposure folks get during University. People go through University without knowing what an RFC is. During my time, I had three or so really interesting courses. One on algorithms. Another one on networking. A third where we wrote our own OS from scratch.

    The rest were mostly fluff. Interesting fluff, and good background material, but very little useful stuff.

    The interesting things were available through student societies, and if you managed to get to work at the University's IT department.

  • okaram 402 days ago
    The main problem is that what you call foundational knowledge is different from what the next person does, and the union of all the 'foundational' knowledge is way bigger than a CS major in the USA.

    Your typical liberal arts degree has 4 years; about 2 of them are dedicated to liberal arts, or core education, and two years to the major, so you only have, say 16 classes for a CS major. Of those, say 4 are math, 4 are the intro programming sequence, and 3 are the architecture sequence (circuits, architecture, and operating systems), so you only have 5 or so classes, for your foundational classes and cool electives.

    What normally happens is that, depending on uni and student, students will take some of them, but not all of what you call foundational knowledge. And the same with what the next person wants ;). Your foundational knowledge doesn't include AI, Data Science, cloud, mobile , graphics, UI, ...

  • magicloop 402 days ago
    At the education stage, it is better to optimise for core learning/theory (e.g. mathematical foundations), with a bit of practical stuff thrown in, and then as you go further along, introduce longer projects (more practical work e.g Network Programming) and at the end of the education have "enough" practical experience to make the transition to work (the majority taking this path) where you continue to build the practical experience.

    Learning more theory later on is still possible but those are more like financial investments that give lower yields over longer time periods. So they are best done "early" in your personal development.

    In terms of interviewing interns, just find out what they do know, and judge the best one on a balance of talent, knowledge and people skills. They will do you proud. No need to have a set expectation against specific skills unless that is the core domain they'll be working on.

  • paradite 403 days ago
    I finished my CS degree in a top CS university in terms of ranking.

    I never took any database modules, I am entirely self-taught on SQL and MongoDB through some side projects.

    I never took any concurrent programming courses (not interested).

    I only took one network course and quickly forgot everything except there are 7 layers in OSI model (or is it 5?)

    Needless to say, I never needed any of those knowledge in my work as a frontend engineer. Even if it is needed somehow, I could just fire up MDN/Wikipedia or ChatGPT and ask.

    What I did take are a lot of software engineering and AI modules, and I found them to be more useful or interesting.

    • dgb23 402 days ago
      Frontend could benefit much from graphics programming, related math, dynamic systems and from HCI. Those are three enormous topics, which a rich history.

      Network programming, concurrency and distributed systems are literal force multipliers. Super impactful fields.

      But yes, regardless of what people choose to learn in university. There’s always a much more than can and should be learned after.

  • reso 402 days ago
    Honestly, I'll be that guy and say there is a genuine quality difference between CS schools. I went to one that is generally seen as top 5, and when I was studying for my undergrad courses, I would regularly find course notes from grad programs at other schools that were covering the same material.

    This might be especially true for theory/fundamentals. It's easy to skip that stuff if your program's focus is on immediate job-readiness training.

  • CalRobert 402 days ago
    Question - where do you learn?

    I actually would love to know more about network programming. Specifically, "how do I go from electrons wiggling in a wire (or radio waves in air) to the TCP stack"

    I have had hints of this - the OSI model, wireshark, etc but when it comes to figuring out the nitty gritty of networks I feel like I'm stabbing around in the dark. How should I configure my networks on AWS? What's the best way to get VPC's talking to each other safely?

    At an interview with a former (excellent) boss I was doing an exercise and set up a REST API. He said one simple thing - "ok, but why HTTP?" and suddenly my very, very faint memories of netcat came to mind and I ended up making it ~10 times faster but just putting bare messages on TCP instead of using HTTP. (I'd have used a low overhead protocol in a production situation). But I want that sort of idea to come naturally.

    Should I just take the AWS cert courses or is there a better way? I want to have more than just "uhh netstat -peanut and grep for stuff" to figure things out.

    Similar, how do the internals of linux work? I can generally get what I need to do, done, but I only knew to check load average after a colleague mentioned it.

    Everything I've learned is top-down; I think I'd like to learn bottom-up.

    • mikevin 402 days ago
      This might be a bit extreme but if you really want to learn bottom-up I would suggest nand2tetris https://www.nand2tetris.org/ It's not about networking but it's a good way to understand the picture from electrons wiggling to a basic computer. It involves all the layers below Linux basically and a little bit of overlap. I'm not sure how much it will help in your network programming goals but it's not that hard to do and helped me a lot with fundamentals and knowing which parts of a system are responsible for what.

      For more direct help I believe Beej's guide to network programming is greatly recommended https://beej.us/guide/bgnet/

  • _huayra_ 402 days ago
    As someone who has TAed a wide variety of undergrad (mostly systems / OS) classes and mentored new-grad hires and interns, my observation is that universities are under tremendous pressure to prepare graduates with "go-to-market" skills, and deprioritize fundamental classes and concepts.

    To put it this way: I'm just about a decade out from when I finished my BS degree, and my CS courses were (in order):

    1. A SICP-based intro course using Scheme. I loved this course!

    2. A data structures course using Java

    3. A machine structures / light hardware design (just to understand pipelines, caching, etc) in C and assembly

    4. Now pick whatever CS area you want to study

    I mentored a new grad from my uni who is just graduated, so is 10 years younger than me roughly. This curriculum was changed to:

    1. Same SICP-ish course, but using Python

    2. Data structures was cut shorter to make room for ML

    3. C++ course to build some kind of "distributed system" (but no discussion of the fundamentals of how the ABI works, for example)

    I had to explain very basic things to this guy (e.g. what the stack was, basic gdb usage), who was otherwise very bright.

    That's not to say "the kids these days are all dumb!", as I have TAed some classes where some of the students were far better hackers / coders than I was, but I just think the funnel towards skills and technology that have Proper Nouns that can be put on the resume is an unfortunate pressure being placed on universities these days.

  • HDThoreaun 403 days ago
    I agree that those are foundational topics and having graduated from a top 10 CS program can tell you that they were all optional. There were many grads who didn't have knowledge of concurrent programming at all which always struck me as a bit odd,
  • shahbaby 403 days ago
    Your question already hints at the answer.

    The "foundation" depends on the context. Your process may be different but many companies will consider D&A as foundational knowledge as it is the closest thing we have so far to a standardized measure.

  • DeathArrow 402 days ago
    >Is this typical for CS undergraduate degrees because you get to pick your own classes?

    In my country you get to pick just a small percent of classes and the foundational ones are mandatory for anyone.

    >Database Systems (relational algebra, SQL)

    We did shitload courses on databases in both undergraduate and graduate programs. Not my favorite but they were useful. There's now way to not deal with databases as a programmer.

    > Concurrent Programming

    Did that and parallel programming, too.

    > Network programming

    Did that as a subset of Operating systems course, where we had to tackle many aspects uf Linux systems programming

    We did a lot of other courses that were at least just as important. Algorithms, Data structures, 3D programming, Testing (forgot how the course was called), Formal Languages and automata, Data mining, ML, AI, Digital circuits, Cryptography, Big data, Cloud, Complexity, Web, Semantic Web etc.

    I don't know about CS graduates, but I've seen with 5 to 10 years of experience lacking basic skills such as commonly used sort algorithms and time complexity. Their justification was in lines of: "I know JS and TypeScript and React and I don't need anything else".

  • paulrpotts 402 days ago
    These things aren't necessarily considered Computer Science per se. Database systems generally are, which would include some projects on database design and optimization, but those things could be elective and not required for a major. A graduate's understanding of concurrency might be largely theoretical - I'd expect them to at least heard of mutexes, semaphores, etc., but how much they have used these tools in realistic programs and not just toys, not just to solve the Dining Philosophers' problem, probably varies hugely. As network programming was in its infancy when I got my undergraduate degree I can't really speak to it, but I suspect a similar split between academic topics and practical programming is at play.
  • nvarsj 402 days ago
    Perfectly normal... undergrad CS focuses on theory over engineering. I think graduate work tends to touch more on the engineering side, but typically new grads will learn engineering on the job. This is how I did it, and from books (Code Complete, etc.).

    I still remember being asked ridiculous questions about design patterns and UML as a new grad. Stuff that is never taught in a typical CS degree - but interviewers seemed aghast I didn't know them. I still remember one saying "but you didn't learn design patterns?!".

    I think the only things you should expect from new grads is ability to code, basic understanding of computer architecture, and possibly data structures / algorithms.

  • anta40 402 days ago
    Got a CS degree from an Indonesian university In my campus (at least 2 decades ago), database system, concurrent programming, and network programming were mandatory courses.

    We learnt the fundamental concepts plus do some programming, e.g for database: relational model, normalisation etc and coding in Java/PHP with Postgres/Oracle.

    Our curriculum is pretty generic, and most of the alumni work in the industries as software engineer, IT consultant, startup founder, etc. Not many do academic work.

    I'm not saying that all of us understand the basic concepts well, though. Some maybe only read a bit of theory and spend more focus on writing apps, instead.

  • danbala 403 days ago
    for some, 'compiler construction' would count as foundational skill. But realistically nowadays it is a skill that is neither necessary, nor all that helpful in a typical day as SWE. There was a very narrow sliver of time (maybe 95-05) where this was a skill you'd be using outside of your CS class. While I do agree with your basic sentiment of 'CS doesn't teach the same things as 20 years ago', I don't think that's necessarily a bad thing. Those who like to dig to that level will do so on their own (just like not everybody likes to study analytical topology).
  • Optimal_Persona 402 days ago
    IME running IT and data reporting for a social service nonprofit, students/grads of local (SF Bay) CS/data programs who apply seem exposed mostly/only to shiny new tools not developed by Microsoft. IRL you still will have to kludge together unholy amalgams of (non-tidy) CSVs, Excel and Google sheets, schema-less SQL dumps from someone else's RDBMS of unknown dialect, JSON and XML files, Word doc tables that are someone's clever "data management system", and more Access, DBF and FoxPro files than you might imagine. It's 10x more PITA working in healthcare where if the product or cloud service won't sign a HIPAA Business Associate Agreement there's no point looking at it.

    I've had UCB/Cal State students say things like "Why would I ever need to interact Excel when there's X?" - uh if your boss or execs use it! I recall the "Hadoop big data expert" who couldn't figure out how to do a VLOOKUP during an open-browser interview, or folks ready to graduate from a data bootcamp who couldn't give even one example of how they could distinguish between plausible and accurate data. Also if any local programs teach students about the ascendancy/utility of PowerShell for anything IT/cloud/admin/DevOps-related it's not trickled down to recent applicants.

  • kapitanjakc 403 days ago
    A degree is not at all any basis of skills. It just is a ballpark estimate of what a person might know.

    I've been doing interview of freshers since long.

    Sometimes they'll know a lot of things, sometimes they can't tell a computer apart from a file cabinet.

    One can't predict what a person knows based on their degree, yes it does give you a general idea but that's not the case each time.

    Moreover, there are various other factors that you should consider while doing the interview, if they are freshers, like they might be nervous, they might have travelled long and came to the place, many many factors.

  • Simon_O_Rourke 402 days ago
    I went to an old school college, where the emphasis was on learning over, you know, going out to get a job afterwards. Studied hardware, processor design, machine code, OO-design, C then after that Java, statistics calculus etc.

    Looking back on it now, a lot of the courses could have been replaced with something a bit more practical, e.g., how to use Git. But strangely, some of the larger team projects made all sorts of assumptions around being able to code, knowing about networks and networking etc. which were never explicitly taught in the course.

  • arenaninja 402 days ago
    I've come into contact with students at different levels of their university degree... between freshmen and junior (but almost senior) and I'm baffled by what I hear.

    No concept of processes, no idea about any data structures, intimidated by everything. They've studied C/C#/Python in a class but can't remember anything about it. It's really a lack of passion and interest and it's endemic I think. People study CS because they've heard it pays well.

    I fully expect these people to become my managers!

    • seanmcdirmid 402 days ago
      > I fully expect these people to become my managers!

      They have better social skills than the CS students of the 1990s, so this is a really good bet.

  • jillesvangurp 402 days ago
    I learned a few things about all of that in university, nearly 30 years ago. I then forgot most of it. And then learned it properly on the job. A lot of computer science education is a bit academic until you actually need it. You won't need all of it. And when you do, you'll find you will need to read up on it properly to learn the basics.

    For example, my concurrency course involved a lot of formal methods and temporal logic. Because the teachers were doing research in that area. In retrospect, this was all a bit academic and not very practical. This stuff does not map very well to the real world when you are actually trying to solve some concurrency issues. But enough of it stuck that I was able to read up on this when I needed to.

    And of course, some of that academic stuff actually works out in the real world once in a while. E.g. the java.concurrent package is a straight integration of a framework that came out of the academic world and very nicely done. Great stuff and I still remember pulling that in as a separate maven dependency before that was integrated.

    I think of university more as a place where you learn to learn new things rather than as a place where you actually learn a lot of things. Mostly becoming a good software engineer is basically an apprenticeship. I was lucky with my early gigs and I learned a lot on the job from more senior people. I've worked with lots of people with either no degree or a non computer science degree as well. It's fine as long as they can learn new things.

  • jldugger 403 days ago
    > Is this typical for CS undergraduate degrees because you get to pick your own classes?

    Do an experiment: pick a handful of intern applicant resumes, look at their degree and then look at what the uni requires to get that degree. In the US, you will find often that there are ABET accredited and non-accreddited versions of the same degree. What you are looking at is commonly required for ABET but often avoided when possible. Or in the case of one person, I've found that the college they claim to have studied at doesn't have any such degree program.

    Reminds me of a conversation with a new hire that was re-orged onto my team, and a machine learning engineer on another team. She said "Ah, you are lucky to join his team this way; they are all the people who took those hard classes like Operating Systems and said 'more please' instead of quickly dropping the course. Their interview process is very hard."

    It's also worth remembering that the US BS program is not like Germany's old Diplom system. It's not 2 years of gen ed then 3 years of only computer science. It's 4 years total and entirely possible for a student to study SQL for one semester two years ago and never touch it again as part of coursework, if they took databases early and don't have a school job.

  • esalman 403 days ago
    A lot of the comments opine that these are not fundamentals and they are right.

    My impression is that the philosophy of CS curriculum at most places is to keep the barrier of entry low. That's why bootcamps are a thing, and my fellow CS grads are excited about ChatGPT being able to write code. On the other hand, there is a growing shortage of electrical engineers because the level of gatekeeping is too high.

    I am an electrical engineer myself and I have working knowledge of all the things you mentioned.

  • cloudsec9 401 days ago
    Okay, so let me reach back to when I graduated many moons ago.

    I think I had one course on "parallel"(concurrent) programming. I had exactly zero courses on SQL or relational algebra, although we did write a basic database. I had one course that MIGHT have touched on a bit of network programming.

    So, academically, I would have had little or none of what you are considering is "foundational" CS knowledge.

    I actually did learn SQL during a job I did during school, and I was fascinated with race conditions and mutexes so knew a fair bit about the theory of concurrency. And I loved learning about all kinds of protocols, like SMTP and Telnet and FTP, so I knew quite a bit about networking.

    I think the disconnect here isn't that "students don't learn the fundamentals", it's that you think the fundamentals are what they need to "do work" on day 1. Back in the day, University was supposed to train you to THINK in your field, and so things like data structures and algorithms, yes.

    And, I have to say, it has done well for me. I started as a C/C++ programmer, then moved to Java, worked in PHP and have now been writing a lot of Python. I've helped with C#, Visual Basic and a number of other languages.

    And if tomorrow I need to use Go, or Rust, or $whateverLanguageOfTheWeek it is, I'll be able to. I understand what can make a program run fast or like a dog.

    If someone can do all of the work through 3/4 years of university, they should be able to learn and do a large variety of tasks.

    Nowadays, it might be that a CS program requires some or even all of the courses you mention in their study. But do you expect someone who took this for 1 of perhaps 20 courses to be an expert at them?

  • warrenm 402 days ago
    You seem to be overlapping your experience (hobbies, class structure 20 years ago when you went to school, which school you went to, how you focused your electives, etc) with what "colleges teach"

    There are lots of "foundational knowledge" materials out there you can pick from the realm of "CS" - there's a theoretical track, practical track, grad school track, "just enough CS to be CS while I have fun doing other stuff" track ...

    If it's vital [to you] that an intern (which, most often, is defined as someone you'll only have for a few weeks or months and who is distinctly still in school) have all that "foundational knowledge", then put it in the job posting :)

    Most internships I've ever seen have far fewer requirements (because the company is going to do some amount of training for the interns during their tenure). They're more along the lines of:

    - Jr majoring in <degree> with minimum <GPA>

    And ... that's it

    I knew "a lot" coming out of high school - more than ended up being covered in pretty much every [core] class I took over the next couple years

    Didn't make me at 20 comparable to someone who'd been doing the work professionally for a decade or more :)

  • jedberg 402 days ago
    Nothing you've listed is foundational. It's all stuff new college hires should be learning at their first job through mentorship of senior staff.
  • devwastaken 402 days ago
    You're interviewing students who have written more papers than code. Put a spot up on handshake, and interview those that have some projects on their resume.

    Be aware that university today is largely unaffordable to most. I don't mean that as in "it's expensive". I mean that literally most people don't qualify for federal student loans, and cannot afford the payments on private loans. Yes you have to pay on private loans as you go to school. Those payments based on a percentage. Which has obviously massively increased since 10 years ago. Schools don't have jobs for students that are not in "financial need" (parents income). Therefore you have to work a job unrelated to your field just to go to school.

    Good engineers find out quickly that university is much more about the fed paying itself at your expense. The system is corrupted by politics (the blue kind) with accreditation clearly influenced by whomever sits in the chair. It's not about merit, it's a gravy train for gov workers.

    Look elsewhere for employment.

  • lionkor 402 days ago
    Some in my uni (im graduating soon) will also complete their CS bachelors, but they have chosen very different specializations. Im in Germany, so its a University, and your mileage may vary in the US, as there are different freedoms in choosing classes there than here afaik.

    I chose the "traditional" stuff, like operating systems, compilers, did my databases course with a lot of interest, embedded, and then wrote some software in my free time (beammp.com's server, which is a game server for a multiplayer game, lots of concurrency and network stuff), and other side projects, a lot of stuff from scratch, and a good lot of open source contrib.

    A lot of my peers don't do their own side projects, and if they do, its a website or something ontop of layers of abstraction (like a CRUD app in TS).

    A different subset of my peers chose specializations in which they barely need to know what a variable is, such as security related courses which are more law than CS (e.g. forensics), some who go for "fullstack" webdev almost exclusively (no interaction with hardware, DBs only through abstractions with no sql in sight, abstractions of abstractions and a lot of copy paste).

    The few of my peers who are interested in CS to the degree that they enjoy learning the foundational things share my view, and I often talk to them about this topic.

    I dont mean to be dismissive of those other disciplines - they are valid and the depth of knowledge that can be acquired about, say, TS, is not something im questioning.

    To me, its just not that CS-y to write html, I feel that close to the hardware is where the programmers with the degrees should be. In my experience as a webdev you get outpriced by third world country developers very easily, and thats a tough spot. Not so much in, say, robotics.

    • jdthedisciple 402 days ago
      Agreed, making another CRUD app in React is not really CS.

      But then again that's just where most of the money is. And I don't think some Indian remote developers are a threat when it comes to any serious employer in the west: The code quality you get for those 15$/h is often crap and the communication sucks. Not to mention they can always just decide to be fed up with you and run with the 100'000s of Rupees they already got, when things get hard.

  • sho_hn 402 days ago
    None of these are "computer science fundamentals", they're software engineering fundamentals. Computer science != engineering and programming.

    Engineering is a craft you learn under the tutelage of peers and masters, i.e. at work or perhaps in a community (e.g. open source). That is what you should expect to provide to your interns. They're not cheaper, fully-formed labor.

  • bane 402 days ago
    I think this is a great question. When I graduated way back in the day, CS was surging as a major but was still very much emerging from the Mathematics department. We were encouraged to take electives in software engineering and other "adjacent" fields, mostly in order to better understand what CS was and what it wasn't. The kinds of fundamentals referred to here were absolutely considered minimums at the boring state school I went to. By the time we graduated, we were expected to know this stuff so well that one of the required classes had us build a basic unix-like OS from scratch, which included many of these kinds of fundamentals in the guts of the project.

    Since then, I perceive that CS programs have come under immense industry pressure to crank out software engineers and not computer scientists. The need for real computer science is not very large as a percentage in the entire computing/software industry. And generally once a funky CS problem is solved, it gets encoded into software and then reused by software engineers over and over.

    I think this has forced CS departments to start directing some of the curriculum towards software engineering rather than CS -- resulting in students who are more diluted in the fundamentals, but who also aren't great software engineers.

    I also think that some departments are also now trying to figure out how to support the massive growth in the kinds of computer science theory needed to support the emerging data science/machine learning/deep learning/etc. fields. When I graduated GPUs were still relatively new and we simply didn't learn those until later MS programs. Now I couldn't see somebody graduating undergrad without knowing some basics on how GPUs work on the hardware and software side, and understand the data structures and computations required to work with the new classes of models emerging in the field.

  • rolenthedeep 402 days ago
    I wouldn't expect any intern to be thoroughly familiar with those topics. Each one is an entirely different specialization that goes extremely deep.

    If you need someone to write a network stack and a concurrent database system, you don't need an intern, you need an engineer.

    Interns are generally students. Sometimes they're still in school. If they had skills in these kinds of deep topics, they would be applying for full time engineering roles, not internships.

    People apply to internships because they lack experience and skills. It's your job to mentor them and expose them to these kinds of specialized roles so that they can decide in what direction to start their career. Interns come to you to learn and gain experience they couldn't otherwise.

    Interns aren't workers, they're apprentices. Once you treat them that way, you'll have a much more rewarding relationship. They're there for you to teach, not to do an engineer's job for a fraction of the pay.

  • jasoneckert 402 days ago
    Extracurricularly, I coach startups. I work with a lot of university grads who have completed, at minimum, a 4-year undergrad comp sci degree (most have completed grad school), and my experience is a bit different.

    Nearly all of them are strong in the areas of design and software engineering principles. They are also strong in SQL, the Git/GitHub ecosystem, and at least one language/framework. And they know just enough about infrastructure to use a simple CI/CD pipeline. But anything beyond that infrastructure-wise (networks, security, tiered architecture, IaC, services, PaaS, etc.) is foreign territory for them because it isn't covered during a typical undergrad program.

    Now this is perfectly OK in my opinion because I provide that for them initially and teach them many of those concepts while coaching their projects. There is limited time in any undergrad program, and I'd rather universities spend that time focusing on what they are currently focusing on because that is a foundation I can work with.

  • linguae 403 days ago
    Databases and networking were optional topics at my undergraduate institution, Cal Poly San Luis Obispo, where many of its CS grads went on to have successful software engineering careers in Silicon Valley. As for concurrency, we had a few required courses (computer architecture, systems programming, operating systems) where we learned about multi-threading and IPC. In fact, one of my assignments for my systems programming course (CSC 357 in Fall 2007) was to write two HTTP servers: one using POSIX threads and another using fork and IPC. This assignment actually helped me land an internship with Lockheed Martin, who was looking for someone with experience with writing multi-threaded code.

    In general, however, fresh CS grads from even good universities need to be onboarded on software tools and certain types of systems when they have their first software engineering jobs. For example, many college students don’t know git. Basic sysadmin and more advanced Unix command line skills are also generally not taught.

  • platzhirsch 402 days ago
    I should clarify, that I don't interview interns on those topics, nor do I expect them to be proficient in them either. I wasn't either at that time. It came up a couple of times that I started to wonder if there is generally a difference in your average computer science degree when comparing the US and Europe. All these answers are incredibly interesting, so thank you!

    Personally, I still think that you should be exposed to those for a computer science degree. Here is why:

    1. Universities have, and maybe always have, evolved to meet the demands of the labor market and most jobs will touch on those topics in one way or the other.

    2. Generally, you need to persist data, whether it's on a drive, in a data store and so on. Having heard of different data stores and maybe differences in query languages, seems very relevant. This doesn't mean you know how to write your own database.

    3. Which processor these days does not have more than one core? Even in languages like Python or Ruby, data races can result in subtle bugs. Having some idea around that maybe access to shared resources needs to be protected is useful.

    4. Whether it's writing code in microservice architecture or integrating an API, we make network requests. Having an idea how this might look different, for HTTP, TCP or UDP provides a lot of context to make better decisions.

    To me the idea of a formal degree, is some level of exposure, so that even when you have never touched those things years later, you have some reference in your head to start looking it up and refreshing your memory.

    I also agree, that a computer science degree doesn't mean you become a software engineer and so it might not make sense to force everyone to take those classes, but then again, see point 1. Alternatively, which classes would be more suited or a viable alternative to those if you have to make a choice?

    • calf 402 days ago
      The common connection between programming for databases, for networks, and for multithreads/cores/processors is that all of them are about concurrency at different levels of abstraction.

      So American CS curricula do emphasize teaching concurrency as a theme, as well as expose students to all levels of HW/SW abstraction (architecture, OS, networks, etc.). It's just that there's less emphasis on the specific trends because those are expected to change over time anyways. Also, CS is diverse, you wouldn't necessarily expect a quantum computing student or an AI student to know industrial level practices for concurrent programming.

  • lloydatkinson 402 days ago
    Just wanted to add my experience as someone in the UK that graduated at a UK university.

    The various software engineering modules I had were pretty lacking and flawed in their teaching and I could tell that at the time and even now with several years on industry experience I still believe they are lacking foundational areas especially the ones you identified.

    For example:

    - Databases were barely taught or even used. We had some fairly poorly put together “web” module that covered PHP, a tiny bit of SQL, no HTML, CSS, JS.

    - Networking module was “here is a Cisco CLI, setup RIP following these instructions, congratulations you are now network experts”. I think we covered NAT in one module.

    It seems to be a deeper issue too. I remember that the vast majority of people in the software engineering modules couldn’t not just write code - they’d never even so much as attempted it.

    This was in other modules too - a majority didn’t know what operating systems were beyond “what, there’s things other than windows?” all the way to being for all intents and purposes tech illiterate.

    To the point I remember a second year teaching another second year what copy and pasting is.

    This was around 2012-2015.

    So I don’t know where the blame likes really, I think it’s all an amalgamation of:

    - Clear lack of interest or passion about anything in their degree of study (why the hell sign up for it then, with so many people doing that?)

    - Completely failed tech or STEM education

    - Total failure to vet applications to the university

    - Whatever STEM GCSE or A levels they had gained clearly not being up to scratch

    - Some modules being so dumbed down as to be meaningless or something you couldn’t gain equivalent learning from googling for a few days

  • fooker 403 days ago
    I agree that a working knowledge of these topics is foundational.

    I have noticed that undergrad CS curriculums in most places are shying away from making practical skills part of mandatory courses.

    Sure, theoretical underpinnings are ‘more’ foundational. But unless you know how to use these (and similar) tools, there is simply not much motivation to understand the theory naturally.

    • WalterBright 403 days ago
      > there is simply not much motivation to understand the theory naturally

      If you don't want to understand the theory, what's the point in going to college?

      • imtringued 402 days ago
        Relational algebra is the theory part...
  • VLM 402 days ago
    The three topics you propose are hard to teach, maybe hardest. You have to shove the entire thing in the head at once to do much of any of it. By entire thing I mean architecture, coding, unit testing, exception handling, and especially debugging. You can't leave one out and have a successful assignment.

    Lets compare with a graphic library; you can learn the DrawRectangle API without learning the DrawLine API.

    Not so with Concurrent. Some kids won't understand the debugger (if any LOL) Some kids will get stuck at coding. Some kids will have weird conceptual hangups. All the kids need to learn all of it all at once. Its a big chunk.

    Same problem with Network. Pre-reqs are seen my uni admin as a way to restrict tuition income, LOL. You can't assume the kids are up to the level of a Net+ cert or even an A+ cert. Its a big chunk all at once. See above, you "probably" can't do network "correctly" unless you async it. Does the class system even have a pre-req that includes the concept of a TCP/UDP network port? Its just a HUGE topic to inject all at once.

    When people say DB they are usually unclear. I took a senior level DB class and learned Codd-Normal forms and all that which makes SQL query writing pretty easy. The problem is your interns aren't graduated seniors yet and they probably eliminated that class from the curriculum because "No-SQL movement" or whatever new hotness caused a distraction. I think you'd be a better logical thinker about organization of data if you know your Codd-Normal forms or have at least been exposed to the general concept. But other kids want to learn mobile app dev or frontend or whatever new hotness.

    Finally a lot of uni work is filtering. Must be smart enough to learn up to this level even if you never use diffeqs again. So the kids you're interviewing don't know anything useful, but they're smart enough to learn, and it'll turn out OK, probably.

  • zjp 402 days ago
    If you were interviewing me as a junior I wouldn't have known any of it, but because I was about to take the classes that cover that stuff as electives in my senior year, not because my CS program was deficient. Remember that the college junior you're interviewing probably only has 75% of the knowledge they will eventually have.
  • smugma 402 days ago
    I graduated 20+ years ago from a top EE/CS program. I took a database course but we literally spent one week on SQL. The other 14 weeks were understanding more fundamentals (including relational algebra) of DBMS’, and the projects were all based on building and extending a B+ tree.

    There was some depth but it wasn’t geared towards praxis. It was much more geared towards “base knowledge”, and the curriculum looks much the same today. SICP is still popular.

    I happened to take a networking class where we learned sockets, but most people didn’t.

    The core upper division CS classes were: OS, algorithms, compilers. Then people may take DB, graphics, networking, more algorithms, UX, “software engineering”, or maybe some HW classes.

    Another thing to consider is where you’re recruiting from. Berkeley/Stanford/MIT will be somewhat similar but San Jose St or other state school will be much more focused on teaching python, SQL, C++, etc.

  • jkingsbery 402 days ago
    This was a while ago now, but my undergrad requirements consisted of: (1) data structures and algorithms, (2) computer architecture, (3) advanced algorithms, (4) computational theory, (5) programming languages, and (6) a few electives (discrete math was also a requirement). To complete my electives I took a couple classes in AI/ML and a class in compilers. I went to a small liberal arts school for undergrad, so there was no database class offered, and I don't remember a class specifically in networking (although a little bit of networking was covered in an OS elective that was offered). I did get all 3 areas you mentioned in grad school though.

    This all is to say: as a matter of curriculum design maybe we can train future software engineers better, but when presented with an individual candidate consider not only what the candidate knows now but also that person's ability to learn.

  • rfrey 402 days ago
    My kid is in university now, and I tell him to read the textbook chapters or online references the prof gives in advance of the class. It won't necessarily make sense, and he shouldn't spend hours untangling it - read it, do the best you can, prepare 90 minutes for a 1 hour class.

    Even if it doesn't sink in while reading - and it probably won't - it will make the lecture make so much more sense. You'll learn much faster than you would without the preparation.

    In my view, those classes and the education in general have exactly the same role with respect to your first job. They won't sink in fully during those four months, but they will provide context for the experiences in your first job and allow you to gain experience much faster.

    In other words, view that new graduate as somebody who hasn't covered the material in class yet, but has done some reading to prepare.

  • kyawzazaw 403 days ago
    * Database Systems (relational algebra, SQL) * Concurrent Programming * Network Programming

    These are not required courses in the CS curriculum of most schools in the US. Elective yes, but at some smaller schools, these are not even options.

    Have you checked out the degree map of some of the schools? (Even the most well known ones) And you will see it.

  • DontchaKnowit 402 days ago
    Couple things :

    1) different colleges have wildy different expectations and learnibg material. I went to a very small school with a high waulity cs education. I was amazed by my friends that went to bigger schools, id often have to study 3x more than them for the same grade, and their course material was basically constantly 1 semester lagging.

    2) youre interviewing juniors. Major concepts in CS really started to "click" for me and my cohort towards the end of junior year. I think this is about when you have enough exposure to really start to grok big fundamental topics

    3) a lot of students do not learn the fubdamentals and just hobble along to get the degree. I couldnt believe some of the shit my friends didnt know after getting the same degree as I did. Stuff like they still didnt understand pointers, couldnt explain tcp vs udp, etc.

  • neilv 402 days ago
    If their prep was focused on FAANG-style Leetcode Interview, I'd guess they were pretty upset when you asked them other things.

    But they're not upset when some interviewer tells them to do Leetcode whiteboard performance art, for pieces they've hopefully memorized but will pretend to be approaching for the first time, as a hazing ritual, and the interviewer, briefly feeling in a position of power normally denied them, says, "I want to see how you think", as if the interviewer can actually discern that.

    People are accustomed to having their ducks lined up for them, and they just have to do the things they were told, and then they get the big paycheck, and they get to be the one hazing the new pledges. You're not playing along with the system.

  • OJFord 402 days ago
    > I frequently encounter a lack in what I would call foundational computer science knowledge.

    And your list isn't at all what I expected it to be, all pretty practical 'application' stuff. I think that's largely the 'problem'.

    > Is this typical for CS undergraduate degrees because you get to pick your own classes?

    I don't think it makes much difference who chose them (student or programme director) - they'll be different at different institutions (or among students at the same institution) and not all of them will line up with your own education or opinion of what it should be.

    If you absolutely need those things, then make it clearer in the job description. If you don't, then why not ask what they have studied (or most enjoyed, or whatever) and ask questions about those areas?

  • dmak 403 days ago
    For DB systems, I had to specifically choose this as a deep course and dived into creating a database from scratch.

    I would argue those are specialized areas, not base knowledge. Moreover, what kind of questions are you asking? It is more likely that you have a misaligned assessment of an undergraduates knowledge.

  • recursive 402 days ago
    I've been in the industry for a couple of decades. I still don't understand network programming. My knowledge of concurrency is limited. I learned database systems on the job.

    That's with an undergraduate degree. Some programs don't cover these things, or they are optional.

  • jdlyga 402 days ago
    My personal experience: Many of these topics are electives. Database Systems, Concurrent Programming, and Network Programming were all topics that were covered in classes that are not part of the core curriculum. I found the same to be true in graduate school since it's more specialized.

    Personally, I definitely lacked knowledge of a few things when I graduated from undergrad (2008)

    * Source Control. This wasn't as commonplace back in 2008.

    * Linear Algebra. This wasn't a required class, but I took it after I graduated and proved to be invaluable.

    * Concurrency. I ended up learning this myself, since this was only very lightly touched on.

    No one is going to be familiar with everything when they're fresh out of undergrad. But usually you have at least some specialty (mine was 3D graphics at the time).

  • throway23432 403 days ago
    Why are you not looking at all majors?

    Some of the best I've had were from math, physics, philosophy, EE, & drama.

  • fzingle 402 days ago
    This article about the state of general computer knowledge of university students might shed some light on things: https://www.theverge.com/22684730/students-file-folder-direc...

    Not only do students come into university (and sometimes even into CS) not knowing what a file system is, many of them have a total lack of interest in learning what is perceived by them to be pointless.

    I'd argue it is going to be pretty difficult to engage with any of those foundational topics if you aren't willing to engage with the basic metaphor of most operating systems, files and directories.

  • jcranmer 403 days ago
    The typical core CS curriculum that all CS students are required to take stops around introductory computer architecture and data structures/algorithms. All of the more advanced courses are generally elective courses that students can choose to take (or maybe a requirement that you take 2 or 3 of N courses as a 'breadth' requirement).

    None of the courses you listed I would expect of all CS students in an undergraduate degree, and quite frankly, databases is something I would explicitly expect few CS students to have taken (the only branch I'd expect to be less popular to take would be specialization into numerical modelling, although that's more because I expect the people taking such courses to be science majors and not CS majors).

  • 908B64B197 402 days ago
    > in their final semester for an internship

    Honest question here: what's the location and comp like?

    Keep in mind some students will end up with 3 internships during their undergrads, and many will end up interning twice at the same place. Why should they jump ship to your company?

    I recall a story someone told me a while ago. Software business that did local CoL/prevailing wages. Hired an intern one summer that was just running around in circles around the other, more senior devs. Useless to say they loved him and the next summer they tried to get him back, even offering a signing bonus for an internship (something they considered unheard of) but he was already at a large search engine company down in the Bay. You can guess the comp was probably already 3x what his previous job was offering. Of course, he wouldn't return.

    There's a whole class of engineers were completely invisible to most companies, even if they are in the same "local market" [0][1] (Some use the term "dark matter devs" but I know it has another meaning [2]). These guys tend to fly under the radar quite a bit. If you are in a tier 2 market or company, your chances of attracting one are close to nil. Because they are extremely valuable, they don't interview a lot and tend to hop between companies where they know people (or get fast tracked internally).

    FAANG companies have internship pipelines, with bonus for returning interns. These guys are off the market years before they even graduate.

    [0] https://blog.pragmaticengineer.com/software-engineering-sala...

    [1] http://danluu.com/bimodal-compensation/

    [2] https://www.hanselman.com/blog/dark-matter-developers-the-un...

  • blacklion 402 days ago
    Maybe, because you try to hire programmers (engineers at best, craftsmen in typical situation), but you interview (future) computer scientists?

    Computer Science is about, you know, science. Not craft or engineering. Typical programmer's work is craft.

    You will not hire metallurgist, who trained to develop new sorts of steels, to work in machinist shop.

    Yes, big corporations could have research departments, where computer scientists are needed, every big player has one. Most of programmers work is not.

    It is problem in our craft: requirement for university degree for simplest positions. It is wrong. You try to hire people who are overqualified in one areas (which is not needed for this positions anyway!) and underqualified in needed skills. Because they were trained for OTHER work!

    • Aozora7 402 days ago
      >Because they were trained for OTHER work!

      Not by choice though.

      Vast majority of people who get CS degrees don't want to be computer scientists. They want to do programming work, so they get a CS degree because that's the degree employers require. They don't even know that said degree won't focus on what they actually want to learn.

      And it's not like they have better choices. There are no programming trade schools. Bootcamps seem to have the right idea in principle, but implementations are often questionable, and most employers won't consider bootcamp graduates.

      • blacklion 402 days ago
        >Not by choice though.

        Yep, I agree with that.

        But I think, that way to go is to make trade schools & relax employment requirements, not change CS curriculum.

        Left craft to craftsmen, engineering to engineers and science to scientists.

        BTW, Electrical Engineering always be "Engineering", not "Science" degree, even if it is studied in universities.

  • PaulHoule 402 days ago
    My take is that the average upper level CS course (compilers, operating systems) doesn't really leave the average student on a solid footing in the area.

    What you really get out of CS education is not a lot of crystalized knowledge but an awareness of the shape of the literature. I used to joke that I could get through any interview with "look it up in the hashtable" and "look it up in the literature". If you're aware that something exists in the literature and know how to look it up you can get it done. For instance I wouldn't trust anybody (including myself or ChatGPT) to code up a binary search correctly out of memory, but I would look it up in a (recent) algorithms book.

  • worldsavior 402 days ago
    Computer Science is science. Knowing what tools to use to program is not important, it's easy for a cs graduate.

    What's important is how they think and how much knowledge they have. No one cares if you use the terminal or you're still using windows for programming.

  • debarshri 402 days ago
    After interviewing alot of candidates, we notices that lot of them where good at solving leetcode like problems but did not understand real world problem. And thats ok I think. You are not supposed to know these things from get go.

    Lot of the course work is around mathematics, data, machine learning, compilers and that is something that got them excited too.

    A take home test really works well in this setup as they can research on these concepts and try to solve it if they are really motivated. However this does not scale.

    We test them on how fast they can learning things, how motivated a candidate is, how driven and ambitious the candidate is. If the grad is really good, these concepts can be picked up pretty fast from the peers.

  • kleiba 402 days ago
    I got my CS degree back in the early 2000s from one of the most renouned CS schools in my country. Back then, there was only a single class where a computer was needed to do the weekly exercises, all other classes from the first to the last semester were theorems and proofs done with pen and paper. And that class was an elective, I could have passed without taking it.

    Likewise, I could have taken a database class but I wasn't interested.

    I did take the programming class, though. Theorems, proofs, pen, paper.

    Obviously, my university's CS department came out of the math tradition of CS, not the engineering tradition. That doesn't mean I didn't take a hardware design class, though.

  • porknubbins 403 days ago
    Everyone should know how to query a DB, but network programming seems to me like a niche within a niche (systems programming). I have done tutorials on writing TCP or doing a server in C but never came anywhere close to writing that stuff in practice.
    • throwaway8689 403 days ago
      But what do you call a query? I've seen joins described as 'advanced' in some places.
      • porknubbins 402 days ago
        I was thinking a basic SELECT X FROM Y WHERE Z Sql query that can be learned in a day by someone familiar with programming. I don’t know enough to know what qualifies as advanced.
        • throwaway8689 396 days ago
          That's fair enough if your job is in front end or whatever and you just need to use a table or view that someone else built for you.

          I comment I read somewhere was that SQL goes from basic to advanced with nothing in between. It's a slippery slope of course: you start writing your own query and then you figure a more sophisticated query would be helpful and pretty soon you're having to care about optimisation and indexes.

  • retrocryptid 400 days ago
    Apropos of nothing, both Pedagogy of the Oppressed and Small is Beautiful may be interesting reads if you're pondering the questions of modern education and its relation to industry.

    https://en.m.wikipedia.org/wiki/Pedagogy_of_the_Oppressed

    https://en.m.wikipedia.org/wiki/Small_Is_Beautiful

  • 8note 403 days ago
    Networks and databases are both memorization heavy, while concurrency really needs 3 courses in a row to really get it.

    People forget the memorization after taking the final exam, and it takes some dedicated interest to take that many similar courses in a row.

  • oytis 402 days ago
    There are all practical skills/knowledge, not foundational computer science, which is data structures and algorithms as you said. You best learn databases, networks etc. in the practice, not through lectures and exercises (unless you're building a custom database or your own network stack, then you need people with theoretical foundation on that).

    So basically it's the old problem of juniors that in order to have a chance to get experience they need to have experience. If I was in a position of hiring graduates, I would focus on how well they master the true fundamentals, and let them pick up the practical details in the job.

  • aloukissas 402 days ago
    I had the same question when I was a TA for junior (3rd year) CS classes at UCSD, coming from an undergrad in Greece. I talked with a lot of my students and I was shocked to learn that only half of their courses were in CS. The rest were very "breath" courses, many unrelated to engineering altogether. Contrast that with my undergrad experience (which is also pretty typical for many non-US undergrad programs), where _all_ of the courses are engineering-related: math, physics, compilers, OS, etc. Perhaps there's merit to breath vs depth, but I have only experienced one side of the equation.
  • lowvolt_EE 402 days ago
    I'm an engineering undergrad not CS as a disclaimer but I'd say my degree gave me the fundamentals to learn things well. I only know SQL because I did an internship in second year where I needed to create a database and return queries all on my own. I had not even used git at the time, strong programming and math knowledge but that's it. I was able to do it all myself with my senior just sending me documentation and suggestions, then monthly check ins.

    There are also a decent amount of electives though, I have a strong networking and IP knowledge because I picked networking courses in my final year

  • tibbon 402 days ago
    I don't have a CS degree, but I did teach at a prominent boot camp for several years. Folks often complain that people out of boot camp don't have foundational knowledge too. Aside from the fact that it would take more than 12 weeks to do that, another contributing reason is the management/administrators there want to push shiny topics instead of fundamentals. How many JavaScript frameworks can they shove in a short time is more important to them, so graduates can stuff their resumes with React and D3 than them knowing wtf an array actually is, or how to manipulate it.
  • hardwaregeek 402 days ago
    Also, if you're interviewing current university seniors, you're interviewing people whose CS education got hit hard by COVID. They probably spent the first two years of their college experience remote, then the next two years in hybrid sometimes-remote purgatory. It's a little understandable that they wouldn't have the strongest background.

    In a lot of cases those areas are also covered solely by electives, so unless the student was lucky enough to take those classes, or they happen to spend their free time reading about these topics, they won't know them.

  • matheusmoreira 402 days ago
    Why should they care about such things when they can get paid just fine without them? I've met employed developers who couldn't tell me what an HTTP cookie was and they're pretty successful today. Perhaps not caring about stuff is an advantage that allows you to focus on the ugly money-making bits of the software. Personally I enjoy thinking about how that library that everyone takes for granted works under the hood a lot more than building applications for a living. Apparently there's no money in that so I made it my hobby instead.
  • al_be_back 402 days ago
    TBH these days, even if the CS curriculum doesn't require an undergrad to cover the above, there's plenty of rich material online (youtube etc) that cover these fundamentals - so in my view, you'd have to work hard to avoid knowing about them if you're serious about a career in this industry.

    heck, even a decent-sized side-project would quickly expose one to DBS intricacies , computing tasks in parallel or across networks of computers.

    I don't see how a more stringent CS curriculums would help here - the market is often ahead of academia in this respect (computing).

  • _trackno5 402 days ago
    I think it varies a lot from university to university (plus they are very young people).

    But generally, since moving to Europe, I see that a lot of new grads don’t have that foundational knowledge as you mention. I’ve even had other colleagues complain that university recruiting was terrible because people had zero idea about things like operating systems. My feeling is that unis started targeting skills that were required in the job market instead of foundational knowledge.

    In contrast, my uni was very “systems” focused and didn’t really focus on skills employers were looking for at the time.

  • balr0g 401 days ago
    My guess is that the amount of money being shoveled into CS programs through amazon, the B&M Gates Foundation, and Meta research are shifting the focus of a cs degree away from understanding how computers work and towards how to simply program applications. This is reflected in the proliferation of using Java throughout the entire curriculum in multiple school, a language that allows the engineer to ignore the low level implications of what they are writing.
  • Prcmaker 402 days ago
    I see similar in a lot of engineering fields, and people often complain that students don't learn a b or c. I've noticed that a lot of things get skipped over in a degree because they're no longer critical (engineering drawing), assumed you can pick it up anyway (CAD), or some other reason. When it comes down to it, these fields have grown so much in what they could cover, that they can't possibly cover everything. Even to give a foundational knowledge of the whole field has become impractical in a four year degree.
  • jcarrano 402 days ago
    So many of the answers here revolve around whether the the school will teach the subjects or the students will take it. Is that all there is to education? So one is only supposed to learn what is taught in a course?

    I'd expect that if a CS student has a passion for what they do they will try to learn topics beyond the curriculum. Doing the bare minimum has a name: mediocrity. Maybe that is what you are seeing.

    Other comments mention that students come unprepared and thus introductory courses need to be more/longer. I think that too is true.

  • stcroixx 402 days ago
    I thought programming was outside the scope of CS - you know, they're the theory guys and programming is implementation. I've worked as a developer for 25 years and have never even heard of relational algebra. Also only use concurrency at the language level as an absolute last resort - if there is a performance issue, I can usually solve it in a way that is simpler by splitting the program up. I've hired 2/3 of my interns for the summer and wouldn't expect any of them to know this stuff.
  • musingsole 403 days ago
    CS programs are designed with broad input from a wide assortment of interest groups -- specific industries or companies or whatever. Different universities tend to emphasize the "foundations" of the industries physically nearby. Sometimes this is done intentionally to create a pipeline of labor to large companies that need it -- more often it's subconscious osmosis.

    There's a bell curve to aptitude and drive to learn. The curriculum at any university reflects the intersection of that median in the student body with a social narrative.

  • seereadhack 402 days ago
    Interesting question.

    OP – what do you think this dynamic you have noticed would have to do with the folks picking their classes? Could it be more related to, say, your notion of what constitutes topical knowledge, or indeed, how to measure it?

    What are you interviewing for? Examples of your dialogue might help but the power of reasoning from first principles, ELI5 comprehension, window management continues to increase over time while the value of mastering specific content remains very context dependent.

  • heywherelogingo 402 days ago
    There used to be barriers to entry into tech - eg no internet, no github - you had to trawl the newsagents for magazines, buy them, spend your weekend typing out code listings, then debugging all the misprints. Enthusiasts only. Nowadays, tech is just another job, non-enthusiasts welcome. University quality varies considerably, and many degrees cater to the just-another-job crowd - the degree is really just a java degree, minimum required get-a-job skills.
  • anonu 402 days ago
    FWIW, I don't think this is specific to CS. I've noticed similar patterns interviewing Master's degree candidates in other math/science disciplines. It begs the question what are these schools teaching kids? It could be that what you (or me) consider foundational is actually not... Which in turn means that interviewing tactics may need to change to evaluate candidates on their ability to learn or execute - as opposed to what they actually know.
  • j45 402 days ago
    Not all CS programs are the same. Not all CS programs teach real world skills, or even entry level skills.

    There is usually a gap of 1-3 years for university curriculum to be approved to update. Some of the above topics above might be just one course, or one chapter of one course, or a few pages of a chapter.

    As you know, in that time things can completely change in both established and new areas of knowledge.

    Learning how to learn is something that's the most important for a CS grad to learn from themselves.

  • theelous3 402 days ago
    > Database Systems (relational algebra, SQL)

    Comp sci students don't typically deal with a lot of real data, and the requirements around data that shape how it's structured in the real world. They definitely do not deal much with scaling dbs, or concurrent access, or anything you might find in the typical distributed systems that make up IRL.

    > Concurrent Programming

    Same for the same reasons above. They usually just have to do some simple things with simple systems on a local level.

    > Network Programming

    Same again.

  • _jdzr 402 days ago
    I've seen a number of these posts of the years and the goal post of "foundational knowledge" seems to change frequently... Do you want algorithms? Do you want networking? Do you want embedded? Do you want SQL?

    Frankly you can't have it all.

    What I see successful companies do is invest in uni programs so they have a stake on what the students learn. Take for example the UT Inventors Program.

    This has been a problem for a while. Hopefully this provides some extra context.

  • yawboakye 402 days ago
    it appears your definition/expectation of fundamental knowledge has changed. what was considered fundamental when, for example alan kay was a university graduate, which was a very small set of indeed fundamental concepts. the topics you list: relational algebra, concurrent programming, network programming aren't fundamental—they are at a higher level and so require specialization. fundamentals of computing are still taught, or so i hope.
  • paxys 402 days ago
    In a typical CS program in the US those topics are senior year electives, and students are expected to pick and choose the ones that interest them. There is also a very wide range of options – from common ones like databases and networking to robotics, bioinformatics, ML, web development, HCI and lots more.

    So in general you cannot expect the typical college senior to know any particular one of these advanced topics. The baseline is still data structures and algorithms.

  • bdowling 403 days ago
    > Is this typical for CS undergraduate degrees because you get to pick your own classes?

    Yes. For example, here's MIT's computer science and engineering degree requirements. After math and basic programming and engineering fundamentals, it's all electives.

    http://catalog.mit.edu/degree-charts/computer-science-engine...

  • hoofhearted 402 days ago
    I have a new grad who is shadowing me at work. Not surprisingly, he wasn’t taught any of the foundational fundamentals of full stack development lol.

    Day one, we started with Gang of Four, the 25 class design patterns, and what an MVC is. Then we are leading into SOLID, and I’ll push him into mastering Dependency Injection and Unit testing.

    I feel like his college professor or something lol, and I’m still so surprised that programmers aren’t taught the ABC’s in school.

    • hgsgm 402 days ago
      None of that is relevant to CS. All of that is stuff to learn on the job, if at all. It's a very 1990s list of topics that are barely relevant now.
      • hoofhearted 402 days ago
        So you’re saying that understanding a State design pattern is irrelevant today?

        When I am teaching a newbie how to build a modern frontend using React, and Redux for state management, how would I describe what Redux is at the core without mentioning a state pattern or one way data binding?

      • hoofhearted 402 days ago
        Also, was unit testing a thing in the 1990’s?

        SOLID is a fundamental principle in TDD and AGILE development lol. Again, how can one master Jest frontend testing without properly understanding Dependency Injection first?

  • jrochkind1 402 days ago
    I didn't learn any of those things in my CS undergrad degree over 20 years ago, so this isn't some kind of "kids these days" thing, I don't think.

    Rather, none of those things are in fact foundational to the field of "Computer Science" -- it's not a programming/software engineering program or apprenticeship. For better or worse (and you clearly think worse!).

    OP, I'm guessing you do not have a CS degree?

  • Scubabear68 402 days ago
    I think a good argument could be made that CS programs are too science oriented and too foundational in nature.

    Most developers probably do not need data structures, OS, compiler type courses, but instead would benefit from higher level, engineering type courses that reflect modern application design and development.

    Note: I am 3 decades out of school, and there have been some moves in this direction I can see from interviewing juniors. But not enough.

  • Fiahil 402 days ago
    I'm closing on my 50th interview since the start of the year, and 3/4 of them were junior SWE or internship positions.

    I encountered the same lack of foundational computer science knowledge, but -here 's the twist- mostly from American students.

    The best candidates I ever interviewed came from (in no particular order) : the Technical University of Munich, 42/Epita/Epitech, and the École Polytechnique Fédérale de Lausanne.

  • stonemetal12 402 days ago
    Do they not know or are they bad at interviewing? Twenty years out of college and I still remember my first interview (it was that bad). Where I went to college Databases was an elective, but I did take it. Interviewer asked a real softball "What is a Join?", I froze and couldn't answer it.

    Needless to say I didn't get that job. I still do poorly at interviews, but I have gotten a little better.

  • lucidguppy 402 days ago
    Pair program with your graduate candidates. Do they work well with you? Are they flexible? Do they have mastery of typing and editing code? If yes - then hire them.

    Don't hire people based off programming riddles.

    Don't hire people because they know an SQL join - hire people who can come up to speed with SQL in a reasonable amount of time.

    Industry has a responsibility to teach good coding practices. That's just the way it is.

  • bigbillheck 402 days ago
    There are only 4 years in the typical US undergraduate curriculum, half of which is spent in breadth not depth, but the amount of 'foundational knowledge' needed keeps growing. 'Concurrent programming' certainly wasn't part of my education in the long-ago time, and the other two were electives (one of which I took, the other of which I did not).
  • adastra22 403 days ago
    Those aren’t foundational computer science knowledge.
  • losgefahren 402 days ago
    it's a combination of reasons outlined in this thread.

    primarily, it is your expectation that advanced low-level knowledge of these topics is "fundamental" to being a modern programmer. today, you can get along just fine without knowing them.

    additionally, most cs graduates are simply taking the class as their major, and it is not their great underlying passion or hobby. where you or i spend our spare time reading about how chess.com balances load or the changelog of the new postgres point release, most students will simply be doing something else.

    i took a few introductory cs classes at my university. we were taught to use IDEs and were only given a cursory explanation of the shell. i would consider proficient use of a shell to be foundational knowledge, but in an era where all your files exist within a gui and the only shell you ever need to touch pops up at the bottom of vscode, it can be largely avoided.

    most students don't feel the need to go beyond the bare minimum to graduate, so they don't.

  • a-dub 402 days ago
    > Is this typical for CS undergraduate degrees because you get to pick your own classes?

    probably. although these were all topics that i taught myself through books and practice anyhow.

    there are great resources for learning these topics these days, many of which are even free.

    maybe try asking them how they focused their studies and try to suss out if they're willing to fill any gaps they may have.

  • cookieperson 402 days ago
    The irony is, even if you have those things you can talk to someone else who says "why do so many cs grads not have a background in unix tools, compilers, and reading ASM". Knowing everything about "foundational knowledge" in CD is a somewhat tall order, especially if you don't use some of it for 5years after learning it.
  • stevefan1999 403 days ago
    Because college nowadays are optimized for grades. It is a natural decision to eventually focus on grade only in a zero-sum environment like colleges.

    Also, it is a very good example of Goodhart's Law: https://en.m.wikipedia.org/wiki/Goodhart%27s_law

  • spfzero 402 days ago
    One thing is that the CS curriculum at better schools is not "job-skill" focused. At least in the early years it is fundamental theory of computing and languages. How to solve problems with numerical methods and algorithms. OS and compiler stuff. Along with all sorts of other math, science, and humanities courses.
  • hayst4ck 402 days ago
    It is very hard to answer your question without knowing what college you are interviewing students from.

    Doing a post final semester internship sounds kind of weird to me, so I would suspect you are European?

    There is somewhat of a divide between computer science and engineering. Computer science tends to mean all math and algorithms. Engineering is closer to what you listed.

  • Rapzid 402 days ago
    What do you mean by base knowledge? Queuing theory is what comes to mind when mentioning CS and networking together. Concurrency theory and models?

    Why would you expect interns to have deep understanding of these topics? What required courses would they have learned about these topics in?

    Why don't you already know not to expect this knowledge from candidates?

  • brightball 402 days ago
    Coming out of my CS program I didn't know much about concurrent programming because it was 2002 and people still thought of Beowulf Clusters for concurrency back then. I'd expect today to be different.

    We were taught SQL heavily.

    Network programming like packet switching, etc was something we didn't get into until grad school though.

  • throwawaysalome 402 days ago
    Switch interview roles, and the recent graduates would say the same about your "foundational knowledge."
  • sanderjd 402 days ago
    Do they lack familiarity with those subjects, or do they lack expertise? Understand programs just aren't long enough for much expertise to be developed. But they should solve the "know what you don't know" problem, and provide tools for deepening expertise when needed.
  • EliRivers 402 days ago
    "I frequently encounter a lack in what I would call foundational computer science knowledge."

    I was being paid to write code for over 15 years before I needed to interact with a database or know anything about a network. What you would call foundational knowledge others would call niche.

  • jbverschoor 402 days ago
    Because the curriculum is not good enough. It's way too small, and they have no exposure to the actual material other than 1 semester of theory.

    And because some people say they did CS, while in fact they did some related study. No experience = no knowledge.

    It's not just people who just finished their study.

  • cratermoon 402 days ago
    Counter question: why do interviewing and hiring managers seem to lack foundational knowledge about management? I don't mean the stuff they teach in business school, I mean empathy, relationship-building, self-awareness, empowering others, critical thinking.
  • zelphirkalt 402 days ago
    Unfortunately programming itself is only a small part of many CS degrees. If students don't do it on their own, chances are they have not done much of it at all, even less network programming or concurrent programming. Databases I see higher chances at least.
  • trinsic2 402 days ago
    Wow! these are some really low quality responses.

    I have been thinking the same thing. I am training an CS Student in computer operation fundamentals and it appears that collages do not teach practicalities of computing. I can only assume it's for cost/time reasons.

  • throw_m239339 402 days ago
    That's what an internship after a CS education is for, to learn that about the practical stuff. If you want people with deep knowledge in these areas, don't hire interns. You're looking for qualified workers with experience, not interns.
  • fundad 402 days ago
    It seems like it is typical and you need to screen for Database Systems, Concurrent Programming and Network Programming.

    I've seen postings even require you have authored OSS and you provide a repo link. I guess you end up with fewer candidates or none.

  • Apreche 402 days ago
    I got a CS degree in the earth ‘00. None of those things were taught. I had to learn them in elective classes or just on my own. All the required CS classes were about programming, data structures, algorithms, languages, grammars, CS theory, etc.
  • wolpoli 403 days ago
    None of these were required in my CS program. Were those required courses in your CS program?
  • RyeCombinator 402 days ago
    I think the crux of the issue is as part of hiring, we expect folks to memorize knowledge from school. What I personally try to look for is candidates with the aptitude to learn quickly and apply that knowledge to solve problems.
  • spyremeown 402 days ago
    You are confusing "expertise" with "foundational knowledge". Databases, concurrency programming and network programming are all outside the realm of CS. They're specializations of Software Engineering.
  • nradov 402 days ago
    A Computer Science degree is not a vocational training program. It is not intended to teach job skills. Students might pick up some of those skills along the way but it's more incidental than an intensional focus.
  • AdrianB1 402 days ago
    1. Some of these are not in the curriculum of some(most) colleges 2. Most people are average; average people are not meeting your expectations, that means you have wrong expectations or you are looking in the wrong place.
  • 12345hn6789 402 days ago
    None of those are foundation knowledge. Computability theory, algorithms, systems programming, complexity theory, discrete math, programming language design. Those encompass a foundation vs your hyper specialized examples.
  • fatso784 402 days ago
    Honestly, I wouldn’t consider these domains “foundational” for undergrads —data structures and algorithms and programming and complexity, but database SQL queries? Maybe the issue is what you’re calling foundational here.
  • birdymcbird 403 days ago
    maybe you can describe specific example? topics hinted here are broad.

    concurrent programming for example also not taught same always. myself in school learned about concurrency like threads and mutex theory but “really” learned first time on job.

  • sailorganymede 403 days ago
    CS Grad here. The focus is mostly on algorithms and math, because they underpin everything we gotta work with afterwards. One may argue that this is fundamental, and everything listed is an application what we learn.
  • p0w3n3d 402 days ago
    - linux basics - sockets basics - routing basics It seems that new graduates are better/faster than me in high level programming, i.e. spring, annotations etc. but don't understand the inner workings
  • ipunchghosts 402 days ago
    I never took any of these classes for my CS undergrad. I took mostly signal and image processing electives. Nothing you learn in the classes you mentioned, i couldnt learn in a weekend from a textbook.
  • masteruvpuppetz 402 days ago
    If I've learnt anything in life.. it is one word.. Apprenticeship with a condition that older ppl would show (not teach) you real-life scenarios and responsibility is to improve what we're doing.
  • whiplash451 402 days ago
    The problem is that « foundational knowledge » has extended in footprint as CS as evolved as a field.

    I do not think it is reasonable at this point to expect a candidate to have basic knowledge about _all_ the areas of CS.

  • markus_zhang 402 days ago
    For interns I only have two requirements:

    - You can write a basic program with loop/branch/etc. structure. Nice if you know a bit about recursion (fibo), Nicer if done side projects of any kind;

    - You are eager to learn

  • htrp 402 days ago
    https://missing.csail.mit.edu/

    MIT has an extra online class teaching their CS grads the basics of software development.

  • nextlevelwizard 402 days ago
    I dont know. Why do I need to know this shit? What are you working on? Are you sure this isnt just “stuff I am familiar with” list and you are confusing it to actually foundational stuff?
  • porbelm 402 days ago
    Data structures and algorithms IS computer science. The other things you mention are on top of that again. IMO. But I know CS now is apparently not what it was in the 90's and 00's
  • slackfan 402 days ago
    For the people I interview for positions having a CS degree actually will bias me against them. CS degrees are great for academia, they are absolute garbage for anything real-world.
  • TylerE 402 days ago
    Times change. When I was taking CS classes circa 2000 the greybeards then were complaining about us not memorizing ascii tables and the like. Always something, and get off my lawn...
  • kristopolous 403 days ago
    4 years isn't long enough for all these things + everything else you didn't list. It sounds like a long time but it just isn't enough.

    Look for competency, not knowledge

  • diffeomorphism 403 days ago
    This might come across as rude, but shouldn't you have asked these questions before interviewing people? As the interviewer it is kinda your job to know this.
  • hgsgm 402 days ago
    When you phrase it more simoly as "Why don't my interns know all the real-business things they are supposed to learn during internships?"

    The answer is obvious.

  • gofreddygo 402 days ago
    Because foundational knowledge does not pass resume filters.

    A "typical" CS student cannot care about all this and also jump hoops to land a job.

  • agilob 402 days ago
    Well, I worked with a software architect who didn't know database have anything else to offer except SELECT, UPDATE, INSERT, DELETE.
  • KrugerDunnings 403 days ago
    This noob is asking about foundational knowledge not knowing that even in mathematics there is no total ordering of axioms and theorems.
  • chris_wot 402 days ago
    At Curtin University in Australia, they don’t teach relational algebra because industry groups said nobody needs it. Absolute idiocy.
  • arduinomancer 402 days ago
    Not everyone who does CS becomes a web dev

    For example in my current programming job I don’t do anything involving networking or databases

  • cjbgkagh 402 days ago
    I sat next to two sophomore (2nd year) UC Berkeley CS undergrads on a flight, I asked them their favorite programming languages and got JavaScript and Python. I asked them if they liked any type-safe languages and they responded by asking “what’s type-safe.” WTF is going on Berkeley - how is that even possible? Are they seriously lowering the bar that far in order to cash in on the huge increase of demand?
  • textread 403 days ago

      Garbage In, Garbage Out.
    The motivations of the average freshman picking CS major has changed over time.
  • codemusings 402 days ago
    > * Database Systems (relational algebra, SQL)

    Because a lot of companies have moved on to NoSQL databases and key value stores.

    > * Concurrent Programming

    Because many languages use lightweight threads (fibers, coroutines, etc.) now that don't involve context switching.

    > * Network Programming

    Because these days barely any company does anything beyond web requests and nobody implements these from scratch. No DNS lookups, no ACKs, no manual buffer writing and reading, no marshalling, etc.

    • sime2009 402 days ago
      > Because a lot of companies have moved on to NoSQL databases and key value stores.

      The value of learning database systems is learning how to model and represent data. All entirely relevant to NoSQL and key value stores.

      > Because many languages use lightweight threads (fibers, coroutines, etc.) now that don't involve context switching

      Concurrent programming is everywhere. It is not just something that has to do with threads. Even a simple CRUD app with a React front-end and DB back-end is a concurrent system. If your ever used a Promise or async/await in JS, you're dealing with concurrency.

      > barely any company does anything beyond web requests

      You still need the basics and at least an understand of what DNS is, what a firewall is, etc.

      No one here is saying that graduates need to have mastered all of these different areas. But they should at least be able to recognise them when they hit problem later on in their careers. I've worked with junior web developers in the past who had no idea that they're working with a concurrent system.

  • hawthornio 403 days ago
    At my school (OSU) in the undergraduate CS program databases and networks were required but parallel was optional
  • uhtred 402 days ago
    Ah, internships. That oh so American way of company owners exploiting young people. Lots of work for no pay!!
  • tristor 402 days ago
    Frankly, because most CS graduates don't actually care about CS. This was even the case when I was in college nearly two decades ago. After the 90s, CS programs grew very quickly at pretty much every institution across the US, because CS programs were a great way for the school to make money and for students to get jobs that made good money, which is the primary motivator for most of the people involved. My experience in college was most of the instructors were not all that gifted in the topics they were teaching, and the rest of the students just wanted the paper so they could get the job so they could get paid, hardly anyone at any layer of the CS program were actually interested in computers.

    I doubt that this situation has changed much in the intervening time, if anything it's likely gotten significantly worse. So, it stands to reason that most CS graduates actually don't care about programming, computers, computer science, or anything related, but see this as a pathway to get ahead in life via a decent paying office job that has a high probability of remote work in their lifetime. There were 3 people (including myself) out of around 450 people in the CS program I attended that seemed to actually care about knowing how computers really worked, and all three of us went on to have pretty lucrative careers, I have no idea how the other 347 people ended up, because I didn't associate more than required with folks who thought college was mostly about getting black out drunk and still getting the paper at the end of the experience.

    At least for me, my observation has been that the folks who actually cared all did quite well, and these were often the folks who actually put in the effort to do internships and co-ops or contributed to open source software during their time in college. If you are concerned with the skills of intern candidates, I'd suggest either things have degraded far beyond expectations from a few decades ago, or alternatively they have strong skills in areas of CS that you aren't looking at. I know a lot more about at least one topic than anyone I meet, and I presume anyone I meet knows a lot more about at least one topic than I do. CS has become a much broader field in the time since I was in college, and it's very reasonable to believe that students now who care deeply about CS also care about different things than I did. I spent a lot of time messing with network programming and getting interested in information security, these days I imagine someone might be more interested in things like optimizing web-assembly or building cross-platform applications using react-native, and learning these more "front-end" things deeply, vs focusing on systems programming concepts. For many people, the browser basically is their operating system.

  • RockyMcNuts 402 days ago
    Computer Science is no more about computers than astronomy is about telescopes. - Edsger W. Dijkstra
  • squirtlebonflow 402 days ago
    They didn't teach us any of those concepts. That's programming, not computer science.
  • zzzzzzzza 403 days ago
    when you say like concourrent/network programming do you expect them to be able to use async functions and make http requests, or do you expect them to have read all the works of leslie lamport XD (second is probably more like masters or specialization level i would say)
    • platzhirsch 403 days ago
      Something in-between with a slight preference on the latter. Once you understand the general concepts, you will hopefully be able to map them to concrete implementations depending on the programming language.
  • nkjnlknlk 402 days ago
    I've interviewed senior engineers who don't know any of that (or DS & A) either.
  • dhosek 402 days ago
    I remember interviewing a recent CS grad who couldn’t write a simple recursive function.
  • ReflectedImage 402 days ago
    Because it's the responibility of their first jobs to teach them that stuff.
  • pxc 402 days ago
    I didn't study any of those things in my computer science program.

    Databases didn't fit into my schedule because I was also studying philosophy and mathematics, and I focused my electives on areas where there was a lot of overlap between at least two of those subjects: graph theory, abstract algebra, formal logic, formal semantics, philosophy of language, philosophy of science, compilers, formal languages & automata, programming paradigms (comparative survey of functional, logic, and object-oriented programming), etc.

    I don't think network programming and concurrent programming were even offered at my school, but I did implement networked multiplayer on a TRPG that I implemented in my OOP class, one of the few CS courses I had where we had relatively long group projects assigned. I have no idea if it was any good from a network programming perspective, but that part of our game worked reliably.

    I think those topics you mention would be more central to the curriculum of a software engineering degree (which was not offered at my school).

  • shae 401 days ago
    Because we haven't taught them yet.

    Allocate time to teach others around you.

  • reportgunner 402 days ago
    Perhaps because the teachers don't have much knowledge about this ?
  • politician 402 days ago
    Many universities cram unrelated filler courses into the first year.
  • jwmoz 402 days ago
    Quality of education. The university I went to was terrible.
  • CalChris 402 days ago
    A final semester student is not a full stack engineer.
  • jd24 402 days ago
    there are plenty of talented new engineers with the knowledge you listed, but you need increase the salary if you want to attract them
  • ajay-d 402 days ago
    You don't learn to drive by reading a book.
  • coldtea 402 days ago
    It's typical for all degrees, not just CS.
  • bobleeswagger 402 days ago
    Now ask yourself what that is doing to the industry at scale... It's not surprising to me that academia has become a series of contrived hoops to jump through.
  • anaphor 402 days ago
    Because they all cheated on their coursework and got graded on a curve for exams. Source: I was a TA for an intro CS course.
  • SamReidHughes 402 days ago
    The more general reason is that half of CS graduates are dumbfucks who don't even grok the stuff in the core curriculum.
  • throwayyy479087 402 days ago
    Many are lying about degrees
  • erlkonig 402 days ago
    Each of your 3 foundational knowledge points will never be used by certain branches of computing. There are scenarios where none of them will be used, so it's hard to truly call them foundational. Filesystems are a key discipline you left out, for example, but it, too, isn't quite foundational.

    The foundations are things like (this list should not be read as being comprehensive):

    * Formalized languages

    * The implementation, all the way down to the hardware, underneath those languages and how to bridge between them (this is far too frequently omitted unless it comes up in some 1 hour credit C course - and lately we're seeing C replaced with C++ courses trying to pretend to be abstract, making them pretty pointless to teach at all)

    * Algorithms

    * Complexity, Big-O notation or equivalent, computatibility in general, and mapping underlying algorithms to different problems

    * The reality of just how different an implemented language and platform is from the abstract idea of one - limitations on sizes, errors, failures, etc, all the things that complicate the lives of a theorist trying to do real work

    I'm especially annoyed by the C++ classes - said language is a massive cognitive load to inflict on students, and a huge, vocational distraction from the theory and concepts a degree SHOULD be teaching. A better course spread would be some machine language, C, LISP, Smalltalk, some (modern version of a) goal oriented language like Prolog or KL/1, something with intrinsic multiprocessing support, and one that is essentially distributed, and so on. Languages that demonstrate the breadth of what a language can encompass, rather than grinding students into the bottomless pit that C++ has become.

    I do agree that these all are relevant: databases (by implementing one, with attention to ACID, but with a lot of assumptions about reliability given and highlighted), concurrency (both with a language that does it intrinsically, and in one that doesn't), and network programming (at least three totally different approaches here: intrinsic to a cluster environment, intrinsic to the language, and implemented via libraries like in C). However, these ideas are not each important enough to count as core.

    The point of a non-vocational, classical degree is to be able to understand the field and to be able to create tools - including new ones. The higher the degree, the more important it becomes to be able to extend the field. The objectives (in part) of a classical degree are what I've described, with the goal of producing synthesists and creators within the field of computer science.

    In the vocational education, the grads will hit the ground ready to write code using existing libraries and tools, perfect to drop into some project underway to use what they've learned to tie everything together. But they'll be pretty naïve when it comes to creating them, and generally unaware of ideas that fit the tasks better and just need to be pulled in. Have them learn whatever language is the current fad for a couple of years, and train them in all the current things. But they'll have a harder time as the tools shift underfoot.

    Some things bridge both the classic and the vocational. Source code control, for one (UTexas CS basically requires knowing git, for example), all the tools' varieties we take for granted to share work, google, communicate, and try to make AI write our homework or job assignments. But the classes for git should be quite different in a vocational versus classical curriculum.

    Basically, given what I've heard from former students at various places (and I taught for a decade myself) I see many colleges leaning towards teaching a vocational CS curriculum and pretending it's classical, and this damages the field overall. At the same time, I've seen overly theoretical degrees in CS that I think are also a problem, in a different way, if the students were led to believe they'd be able to actually create software when they were done.

    The most pathological example I've seen is a professor at the University of Texas who was trying to teach his students IPC using C and Unix as the demonstration environment (essentially a classical lesson). However, since the professor's awareness of the implementation was too limited, he was using examples with the wrong paradigm - FIFO pipes - instead of sockets. The result being that the examples only worked for processes with a shared parent proc. This undercut the objective so badly that the students were missing the point of IPC, since they could have had a single process produce essentially the same results as the example, and were getting no payoff from the FIFO aspect. The professor's limited vocational grounding was producing students who were failing to understand both the practical AND theoretical.

    So it's not just a case of a poor curriculum poorly serving the students, the professors themselves are suffering from the problem of being too polarized between theory and practice. The problem needs to be viewed as endemic in some colleges and I'm not sure anyone's really talking about it enough.

  • b20000 403 days ago
    they are too busy grinding leetcode to get ready
  • robomartin 402 days ago
    While I don't disagree with your perspective on this, I think it is fair to say that the practice of CS has become broad and granular to the point where it is impossible to teach it all. There's a massive difference between becoming a software engineer 30 or 40 years ago and now. To state the obvious, most of what we do today did not exist back then.

    The three bodies of knowledge you list (DB's, Concurrent and Network programming) are not mainstream at all. Someone can go through an entire career in software engineering and never touch any of these areas except for, perhaps, superficially through libraries, etc.

    Is, it, then, fair to judge recent CS grads based on a test of these skills?

    Again, while I agree with the general sentiment that the average CS graduate has serious gaps in knowledge, skills and experience, I have to temper my thinking.

    I am not sure it is fair to use such skills tests as a metric any more than giving someone 60 minutes to complete 60 Calculus problems is a measure of their understanding of the topic, their ability to apply it and learn what they don't know.

    That last part, to me, is the most important thing I try to learn about someone in an interview. I could not care less what they know today. The basics have to be there, of course. Past that, I need to understand how their mind works, if they are adaptable and what their approach to learning and applying something they don't know looks like.

    Some examples of the stunts I will pull:

    - Implement something in LISP, Forth or APL, knowing they don't know the languages. I want to see how they react and solve that problem. No, not the code challenge, the matter of being asked to do something they don't have a clue how to approach.

    - Write an FPGA module in VHDL when they have never used anything other than Verilog.

    - Design a multi-failure tolerant circuit when they have never done such a thing

    - Explain how to design an electrical DDR4 interface (again, knowing they have never done it).

    - Expanding on that, explain how to design an SDRAM memory controller from scratch

    Etc.

    This isn't at all about looking for the correct or perfect answers. In my 40 years in engineering I can probably say 75% to 90% of what I have worked on has had an element of "How the hell do I do this?". You want people who are able to deal with that, adapt and deliver. Engineering is constantly evolving, what someone learned in school, at some point, becomes irrelevant.

    When I went to engineering school FPGA's, the internet and digital circuits running in the GHz range did not exist. I had to learn all of that, and more, as life and career progressed.

    I think the right paradigm and metric is to evaluate the person rather than the contents of the mental database they happen to have stored at that point in their journey.

  • goshcoding 402 days ago
    [dead]
  • brwck 402 days ago
    Neither Database Systems, Concurrent Programming nor Network Programming are foundational knowledge for CS. They are good knowledge to have for a specialized programming job, but not foundational computer science.

    It's like asking why someone with a degree in theoretical physics cannot fix my car.

    The real question is why so many people with CS degrees don't know what CS is really about.

  • dev_0 403 days ago
    [dead]
  • copymoro 402 days ago
    because contemporary corporate dominated academic institutions are labor manufacture not education centers.
  • breakingrules 402 days ago
    dropouts learned this because they love it. CS degrees learned enough to get the big salary they heard about.

    your choice.