It’s hard to find a book that explains software engineering as “a cohesive whole” because software engineering isn’t cohesive. It’s a grab-bag of various fields that have never been well-organized.
I’d sort the words you listed into the following classes:
Of these five categories, the only one that could be called “cohesive” is data structures and algorithms. This is a branch of mathematics. There’s dozens of introductory textbooks on the subject. Pick any one you like and skim it. You can skip the example code entirely.
Of these five categories, the only one that’s truly “universal” to software development is the concept of libraries. A software library is a bit of code someone else wrote. So instead of having to write software to do X you can issue a command to software someone else wrote that does X. Getting a feel for libraries does require writing real code, but you don’t have to write much because libraries are all about leveraging code other people wrote. The best way to learn how libraries work is to copy someone else’s Python or JavaScript script. All those import statements at the top are libraries. To learn about APIs or microservices you should write (read: copy) someone else’s script that interacts with one.
It’s hard to find a good book on deployment because the whole field was transformed recently with the launch of AWS and its clones Azure and Google Cloud. The field continues to change rapidly. Anything you learn about it will go rapidly out-of-date. If you want your knowledge to endure you should start with the broader history of severs and networking. In particular, you should find a book on how the Internet is architected (and maybe a little something on Unix Systems, like Chapter 2 of The Art of Unix Programming). Both would give you an solid idea of how the Internet works without writing any code. This will put the jargon you know into context.
Security the least cohesive of any sub-field of software development. It is the ultimate grab-bag of exploits and counter-defenses. There is no foundation. It’s turtles all the way down. The best way to get a feel for security is to read some blogs like Schneier on Security and Krebs on Security. You can look up individual exploits like SQL injection when you need to know what they are.
Optimization is almost as incohesive as security. Basically, multithreading and distributed systems are hard. Optimization is a set of tricks to get around this difficulty—except this time they require a deeper understanding of computer science. In general, optimization is the hardest sub-field to understand without a foundation in computer science. The most important trick is “functional code”, something difficult to understand without writing code yourself. However, many bits such as caching and the application of GPUs can be understood without knowledge of how to code.
Don’t be too intimidated. Half of professional software engineers don’t understand half of these subjects half as well as they’d like.
These bits of humor, philosophy and documentation might help build an intuitive general understanding of software development better than any explicit book on the subject.
I minor detour here. I have a sense this is semi done already with all the shared classes and foundation classes but has the software industry ever attempted to replicate something along the lines of a Dewey Decimal System for the software libraries?
Yes. The shared classes and foundation classes are called “standard libraries”. Collections of non-standard libraries are called “repositories”. Repositories usually accessed via a “package manager”. Repositories tend to be system-specific or language-specific. Here are some of the more popular repositories.
It’s hard to find a book that explains software engineering as “a cohesive whole” because software engineering isn’t cohesive. It’s a grab-bag of various fields that have never been well-organized.
I’d sort the words you listed into the following classes:
Data structures and algorithms: linked lists
Libraries: APIs, microservices
Deployment: CI/CD, AWS, dockerize
Security: SQL injection
Optimization: multithreaded program, vectorized code
Of these five categories, the only one that could be called “cohesive” is data structures and algorithms. This is a branch of mathematics. There’s dozens of introductory textbooks on the subject. Pick any one you like and skim it. You can skip the example code entirely.
Of these five categories, the only one that’s truly “universal” to software development is the concept of libraries. A software library is a bit of code someone else wrote. So instead of having to write software to do X you can issue a command to software someone else wrote that does X. Getting a feel for libraries does require writing real code, but you don’t have to write much because libraries are all about leveraging code other people wrote. The best way to learn how libraries work is to copy someone else’s Python or JavaScript script. All those
import
statements at the top are libraries. To learn about APIs or microservices you should write (read: copy) someone else’s script that interacts with one.It’s hard to find a good book on deployment because the whole field was transformed recently with the launch of AWS and its clones Azure and Google Cloud. The field continues to change rapidly. Anything you learn about it will go rapidly out-of-date. If you want your knowledge to endure you should start with the broader history of severs and networking. In particular, you should find a book on how the Internet is architected (and maybe a little something on Unix Systems, like Chapter 2 of The Art of Unix Programming). Both would give you an solid idea of how the Internet works without writing any code. This will put the jargon you know into context.
Security the least cohesive of any sub-field of software development. It is the ultimate grab-bag of exploits and counter-defenses. There is no foundation. It’s turtles all the way down. The best way to get a feel for security is to read some blogs like Schneier on Security and Krebs on Security. You can look up individual exploits like SQL injection when you need to know what they are.
Optimization is almost as incohesive as security. Basically, multithreading and distributed systems are hard. Optimization is a set of tricks to get around this difficulty—except this time they require a deeper understanding of computer science. In general, optimization is the hardest sub-field to understand without a foundation in computer science. The most important trick is “functional code”, something difficult to understand without writing code yourself. However, many bits such as caching and the application of GPUs can be understood without knowledge of how to code.
Don’t be too intimidated. Half of professional software engineers don’t understand half of these subjects half as well as they’d like.
These bits of humor, philosophy and documentation might help build an intuitive general understanding of software development better than any explicit book on the subject.
Paul Graham’s essays on software development.
Git From the Bottom Up
The Story of Mel
List of Free Programming Books
I minor detour here. I have a sense this is semi done already with all the shared classes and foundation classes but has the software industry ever attempted to replicate something along the lines of a Dewey Decimal System for the software libraries?
Yes. The shared classes and foundation classes are called “standard libraries”. Collections of non-standard libraries are called “repositories”. Repositories usually accessed via a “package manager”. Repositories tend to be system-specific or language-specific. Here are some of the more popular repositories.
Python Package Index
Linux: Ubuntu, Arch, Debian
node.js
Conda combines several of these specific repositories into a mega package manager like you describe.