← Back to context

Comment by arcanemachiner

17 hours ago

I don't think there is such a thing as "software engineering fundamentals", as the fundamentals differ based on the type of software you want to make.

Do you want to make websites, or work on embedded systems?

Do you need to squeeze every OK ounce of performance out of the machine running your code, or is developer velocity more important to you?

Will your code run on a single machine, or does it need to be networked/distributed?

The thing you want to make determines what the fundamentals will look like for that area of study. There isn't enough time to learn the fundamentals of everything needed to make good software across all domains. And even if there was, you would be wasting time learning all the principles that don't apply to 99% of things you would be working on at a given moment.

There are tons of core principles that can be learned that largely apply across fields.

One prime example, single source of truth for data/concepts. To be violated only when performance is meaningfully improved (denormalized databases). But when you do so, you should definitely recognize you're opening up out of sync issues for that performance gain.

Though for the majority of code, there is no performance benefit to adding multiple sources of truth. Yet it's the most common error I see re: quality.

The sad thing is that software engineering fundamentals and best practices never became widespread or widely taught in school prior to LLMs