I have a Bachelor of CS. But after working for 5 years, I can't remember these CS stuffs like Computer Organization, OS theories, Database normalization. What occupies my mind is delivering the feature to meet business goals and Kubernetes stuffs.
Is this normal? Or I need to work harder to learn them again?
The nice thing about forgotten knowledge is that it's much easier to jog the memory and get it back than to learn it from nothing. You likely still use a lot of the fundamental concepts without realizing it.
I am someone who came from a non-traditional, self-taught path ~25 years ago. I did get some formal schooling in electronics, which you'd think was useless, but I can think of a few times solid digital logic understanding has served me well in the past, for example. On the other side of that, I designed some shitty databases early in my career! Understanding normalization could have saved me a lot of headaches when I was new.
Each time I’ve forgotten how to construct them and use them from scratch, but a five minute skim of some grad student’s PowerPoint was all I needed to get right back into it.
For example, to build a web app the level of abstraction your job requires is probably on the level of web frameworks and API's. Now and then you'd need to understand the web protocols. Rarely would you need to write software involving the low level transport mechanisms. Rarely would you inspect packets yourself and perform verification and decoding through pen and paper. Even rarer still would you need to use maths to design the signaling procedures between hardware components. Point being that it's normal to now know off-hand all the lower level CS stuff, but you recognize the patterns, and in the rare occasion you need to actually access all that information you wouldn't be at a complete loss.
In larger corporations, the programming is often much higher level, and consists more of stringing together libraries and frameworks and entire systems so that they fulfill a business purpose. Even simple programs can take hundreds of megabytes of memory and have tens or hundreds of dependencies beyond anyone's control.
If you want to keep practicing your algorithm skills, you might try something like https://projecteuler.net/ , which is very mathy, or https://checkio.org/ , which is a bit more user-friendly, and get some practice there. As for OS theory, there are always open-source operating systems one can contribute to, though I suspect many of them would consume a lot of a person's time.
Software Engineering is a lot of the day to day work you do as software engineer. It’s more about people, process, execution. In reality, most problems you’ll encounter in day to day software engineering won’t be CS problems. Lots of CRUD-shaped apps of varying forms and sizes.
Occasionally, you’ll get a real CS shaped problem and those are fun.
As others say - refreshers worked well since you’ve already learned the material. Find some interesting books or ideas to explore and they’ll come back.
Software Engineering = Programming + people + time.
I remember most of the stuff from university 10 years ago including the brand and model of the microcontroller I programmed (ATMEL ATMEGA8-16PU) and the names of the I/O registers on that chip, the name of the program I used to program it with (AVR Studio). I also remember most stuff I learned in Discrete Mathematics, pretty much every ADT (Abstract Data Type) I learned about in my Algorithms and Data Structures class and I remember pretty much everything I learned in Machine Learning (decision trees with minimax algorithm, alpha-beta pruning, heuristic functions, Artificial Neural Networks, step functions, sigmoid functions, backpropagation algorithm)... Time and space complexity...
Except for time and space complexity and ADTs, I haven't really used the other stuff.
On the flip side, sometimes I don't even notice (much less remember) certain things. When I'm visiting a new city with someone else, I never seem to be able to remember how to get back to the starting point - I recognize almost none of the streets or landmarks on the way back (aside from a few particularly interesting ones). My mind just delegates the full responsibility of finding the way back to the other person. It's not a problem if I'm visiting a city alone though.
Dead Comment
The thing though is most of the thing we (at least I) learned are outdated by at least 10 years. So if you want to learn how things work out in the field I suggest reading about actual implementation. For instance this book is terrific about Linux OS [1], and this is a classic on concurrent programming [2], this one about MySQL [3] and so on.
[1] https://www.amazon.com/Linux-Kernel-Development-Robert-Love/...
[2] https://www.amazon.com/Art-Multiprocessor-Programming-Mauric...
[3] https://www.amazon.in/Understanding-MySQL-Internals-Discover...