The Only Three Classes That Mattered from My College Degree
developing.dev
developing.dev
I also submit that you are more likely to find yourself pigeonholed into writing REST endpoints for the bulk of your career, and turn into one of those jaded programmers who complains about how they're not solving interesting problems.
And if you care about excellence, consider the following. No matter how hard you study, you'll sooner or later find yourself competing against someone who's studied as hard as you, and also loves what they're doing.
Besides you pay a lot of money to higher education to get a job. If you want to learn, just read a book or something.
Which profession? Working at the digital factory where you write REST endpoints all day? Maybe. But then why even go to university?
Or are you talking about the kind of software engineering where you are working on problems that actually require some deep knowledge?
And either way, why not pursue the kind of profession where you earn a living and have an intrinsic interest in the subject matter?
id like to go back to school as mature adult, to expesnive, ill just watch youtube and read books to satisfy my curiosities lol
I personally value languages (dead and modern), poetry, history, philosophy etc. and spend more time with them than coding, publishing articles, living my whole adult life in other countries to have more language practice... but I wouldn't pretend they've helped me professionally.
Now of course, many times students or even instructors missappreciate a course. Many of us pine at SICP no longer being used in CompSci courses - when its self justifying vitality and insight is an obvious boon to all involved! In response to you:
I submit that many aren't in the right place in life or simply have differing goals and life paths and literally want to be pigeonholed into writing REST endpoints. Any philosophy, deeper consideration of what software or computer science are etc. is besides the point and they simply want to provide for their families. Once having reached a certain point, they are happy.
You and me may both find that tragic and misguided in light of the rapidly changing workplace (not to speak of AI), but we are different people. A larger variety of educational goals at various establishments could go a long way.
Fair, but then why bother with university? It's certainly cheaper (and likely faster) to get an entry-level dev job and grind l33tcode, since -- as you claim -- university classes aren't bringing a whole lot of value.
If you think the degree is important for some other reason, and if you insist on having a narrow financial view of higher ed, then we're left wondering why you wouldn't maximize your investment. For example, you could pursue a career in a field that pays well and that you find stimulating.
If you're on a student's budget and cash is so tight you have to share a bedroom - do you want to learn to ballroom dance at $250 per credit hour?
For me, demanding from higher education to teach you how to do your job is like some people complaining that school should teach you how to do taxes, fill tax forms, etc. I mean, who is going to be the wise if universities teach you to be a white collar, and school teaches you to do taxes?
If your ideas aren't clear, your writing won't be clear either.
It was like fireworks went off in my head. The realization that unclear writing (prose or code) was a signal that something was missing in my mental model, that there is a continuous feedback loop between the work I'm setting down and the ideas that I'm refining, became the foundation of all the work I've done since, from system design, to troubleshooting problems, to exploring my internal self.
That kind of clarity, where I knew the thing I was learning was going to be important was rare even in technical courses from my chosen field. But a lot of classes that felt "useless" at the time turned out to have important effects, seen only in hindsight.
But you still need to learn a lot about some subject if you want to use it professionally.
I am not a job, I am a well-rounded human being with interests and relationships and who happens to exchange my labour for tokens that allow me to acquire goods and services.
• Draw the full system
• Split into parts
• Build a free-body diagram of all parts
• Build an equation for every point of interest. For statics, the sum of all forces is zero and the sum of all "torques" is zero. Start here every time.
• Identify all "knowns" and put them in one place.
• Identify all "unknowns" and group them in a second place.
• DO NOT PROCEED UNTIL # of equations = # of unknowns! If this isn't true, you need to think harder about what equations are missing, start making assumptions, or change the points of interest (e.g. from method of joints to method of sections).
• Be prepared to defend your assumptions (gravity, friction, mounts, reference frame, material properties)
• Make sure all signs "match" and make sense.
• Solve, step-by-step, equation-by-equation.
• Make sure all units match and make sense.
• Sometimes ignore intuition. Parts that look like tension can be compression and vice versa. (If you need an example, those "impossible floating tables" can confuse a lot of people's intuition about force equilibrium.)
• All work should be clearly organized and clearly marked---especially the answer, with proper units.
... and as a bonus ...
• You can't push a rope.
You're equally likely to need this sort of knowledge when writing software for non-technical users (say in finance), and when you write dev tools, linters, checkers, fixers, etc.
If you're doing anything web-related or even vaguely server-client, you're at a huge disadvantage if you didn't have a good networks course. You'll likely be stuck in a loop of half-knowledge and cargo culting. I had a terrible network course, skipped on deep diving into networking for years (I worked in embedded; SPI, I2C, RS-232/422 and CAN were all I needed), and only relatively recently figured out how much I had missed.
I see the author mentioned operating systems as a second-tier course. I find it to be the differentiator (that, and C++ knowledge) when it comes to any serious project, especially understanding of processes, threads, IPC, and such.
Databases are very easy to learn on your own, and are generally easy to learn, even the theoretical aspect (relational algebra, b-trees,...).
Most of the time, and in most shitty universities (the majority of universities everywhere if we're honest with ourselves), for most courses, you're better off picking a couple of good books on whatever subject (classics are classics for a reason) and just learning. That + OCW from MIT, Stanford, Harvard for assignments for practice. The best courses in my university blatantly stole materials from MIT and Stanford.
> If you don't learn about grammars, lexers, parsers, ASTs,... you're at a huge disadvantage in many situations.
Can you get an example? I don't recall a time where I used this knowledge in the last 5 years as a systems generalist in big tech.
Your predecessors had zero regard for C programming best practices, leaving you with a pile of supremely brittle code that just barely works, but you have to tiptoe around it in silk gloves whenever you want to modify it in any way, because of unreasonable standards on ownership, calling conventions, concurrency, whatever. They might have had a reason in the beginning, but now it took over creating a monster that no regular programmer can work on. They didn't think that the code will ever need to be multithreaded. This is no environment for a sane person. A young, inexperienced fool would suggest to rewrite it from scratch. You know better. The whole business logic of a working, profitable business is imprisoned in this pile of shit, and yet it's too far gone to continue forward with it. Nobody understands all the silly rules of engagement with the codebase. You decide to: 1) break everything into chunks, 2) write extensive unit tests, 3) use automated tools to fix the whole codebase yourself to some sane standard. Some of the automation can be just grep + xargs + sed, some is much more complex. Regex replacements are unreasonably efficient, but not omnipotent. The only sane way to fix 40k LOC at a time is to write tools that operate on the AST, find toxic patterns and smartly replace them. This takes dozens of iterations, but you can always roll back with git. You're not transforming the code incrementally, you're writing a transformer. Eventually, your fixers are good enough that they fix 95% of the issues, you fix the rest manually. Your company can now hire any old mediocre C dev off the street, and this dev can productively contribute to the rejuvinated codebase. The company no longer needs psychics, regular C devs will do. If they stray from the path, the newly set up CI with dozens of custom clang-tidy plugins swiftly puts them back in their place.
Your company is in a highly regulated space that has insane coding standards. There are (shitty) compliance tools that cost >$100k a year for your team. You're able to replicate 80% of the functionality of the tools, fix some issues and generate compliance reports from the code on this in ~8 months. Slap on some CI, and the bean counters don't even have to do anything but download the latest PDF report.
Do you literally mean 1) C++, 2) just a lower level language with control over those or 3) reading the relevant libraries or system code implementing IPC etc. (isn't it in C not C++?)?
Another great measure is knowledge of (Linux) systems programming, this also tends to weed out people with inferior understanding of, you know, programming and deploying software on actual computers. The interfaces here are obviously in C.
There are many things that aren't congruent with C++ ability, such as general functional programming ability, or hiring for JS frontend or Erlang roles and such, but for most industry jobs, it's a useful determinator.
I don't know any good C++ programmers that aren't great and all-rounded overall developers. I can't say the same for any other language or technology.
Having diverse skills and an open mind is what differentiates someone who's going to be a technician their whole life (and lose their jobs once fresher meat or a recession comes around) and someone who's going to adapt to the nooks and crannies of life's progression.
You’re implying that the only knowledge this person has, period, is those three courses, and that’s absurd. While working, they would have ostensibly already picked up enough knowledge and skills to be able to readily compete with those dozens of new graduates who have might not yet had relevant work experience.
Just because someone didn’t get much out of their college education does not mean they don’t have “diverse skills and an open mind”.
At some point I took a look what classes an actual cs degree needs. Like half of it was gen ed stuff. Which i took a lot of(liberal arts lol), I was good there. Then there was a ton of advanced math which I already barely got through or decided probably isn't relevant to most jobs unless i want to work with graphics. in hindsight I think i was right on that call
At that point there really isn't that many classes left to fill a degree. One or two classes of fundamental cs topics like ds and algorithms, which is all free online to learn. an OS class, db class networking class and some elective cs fun stuff. Degree felt less necessary and more like a checkbox. i learned it all on my own, think i did alright.
But many shaped how I think k about all of those,memory layouts, complexity analysis, statistics, discrete math, crypotgraphy.
Maybe I am deluding myself into valuing something I spend a lot of time on, maybe picking out those bits I use day-to-day and just learning them would make me a worse e gineer.
Overall, I find conclusions of the Form "I only directly use X" often unconvincing, because some people I had this discussion with could not recall they actually did learned something in college, which they claimed was never covered. (again, my memory might be the faulty one...)
Still, I think I could cut out at least half of the classes which I'm confident didn't matter and still have similar thinking.
You are not wrong to say this, but you are actually highlighting a more serious problem about this field than you give credit too.
There are many subject matter classes that one should be aware of. The lack of focus on security and good coding practices outside of OWASP Top 10, is startling. I had to specifically opt for those classes because it was not required for the piece of paper that grants you easy entry into a Software Engineering job.
In hindsight, I wish I'd taken more history, economics, philosophy, and the like, but I was pretty narrowly focused coming out of high school, alas.
I'm convinced today you could become a better engineer with 1 years of self directed and focused online learning, for a fraction of the cost (even free). Also, although the credentials of a good school are nothing to scoff at, simply being good at leetcode (and maybe a small portfolio of personal projects) goes a long way to getting you a job. It's definitely more time efficient.
This isn't to say that a College degree is worthless, but it is not a job training tool, and the sooner that people realize that the better. I would love to see a world where software development is treated more like some of the trades. Rather than insisting that all applicants have a BS in Computer Science or equivalent, we should hire promising kids fresh out of High School (Or college) and fund their 1 year education in programming + apprenticeship. I feel like that would lead to a healthier industry as a whole, and bring a lot more highly talented individuals into the world of programming.
And no, web dev bootcamps are not what I'm talking about. They are closer to my ideal than a college, but they have a lot of other problems that keep them from being useful in general.
That's just some of the superficial tools "lab skills" of churning out code.
Software engineering (for real, when it has to be effective over time) is a larger and more difficult space.
I think the three courses this person is talking about are all about passing a FAANG-like "coding interview" that is targeted at new college grads with no industry experience.
LLMs will now gladly launder open source software into churning out code, much faster than a new grad, and will even (statistically, emergently) apply more software engineering practice than these classes will teach you to do.
I am a big fan of what college can bring, to the interested student. But that stuff is hard to test for and often isn't what employers are interviewing for. (And when they do, they often lump it under "culture fit", which is too often used to exclude people based on their prejudices.)
E.g., I had classes in computer architecture and had to write microcode to implement IEEE754 on an IBM/360. Do I ever use that in real life? Obviously not. Did it make me understand a bit better how CPUs work? Yes. Would it be useful for people who want to make a career in hardware? Certainly.
If your goal is to get a job, then you’re not going to prioritize ”[valuing] education”, you’re going to prioritize the things needed to get that job.
The problem isn’t that the OP doesn’t value education; that’s not even a problem, it’s entirely a personal choice. Some people just don’t value that, and it’s ok.
The actual problem is that employers require a 4 year degree which means that everyone wanting that job now has to do a 4 year degree whether they’re want to or not. And that degree is never going to be tailored to those just wanting a job; that’s what trade schools are for.
But I have an idea how the world works, can understand my electricity bill and realize how biased are any numbers presented to the public.
I can buy a coffee in Spain and Germany without using English.
I lerned to love French Middle Ages.
This article is simply sad.
Is this a parody account designed to get us enraged?
(2^N)-1 makes more sense, since it is 0 for N=0.