Readit News logoReadit News
Posted by u/dev_0 3 years ago
Ask HN: Working as a software engineer for 5 years, I've forgotten all CS stuff
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?

bbarn · 3 years ago
Normal, yes.

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.

xeromal · 3 years ago
Yup, I can't tell you what 6th normal form is anymore, but I can tell you if a database looks poorly designed or not. lol
justbaker · 3 years ago
Which of those helps day to day? I’m always going to say the latter lol
dfinninger · 3 years ago
I was trained in EE, and I’ve been surprised at how many times I’ve reached for Karnaugh Maps while coding. It’s really helped simplify some gnarly conditions I’ve come across.

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.

dev_0 · 3 years ago
But you don't know what you are studying is important or not until you are confronted with a real world problem
rramadass · 3 years ago
That is not how "Education" works.
justbaker · 3 years ago
I always think self taught is a better pathway. You gain more experience making mistakes and learning from them that way. You also pick up more “best practices” by learning how shitty your bad practices of the past were.
kixpanganiban · 3 years ago
As you progress in your software engineering career, the level of abstraction of the knowledge you use on a daily basis gets higher and higher. The academic CS concepts underpin everything, but rarely do you need to go below a few levels of abstraction to solve problems in the real-world (at least in most non-cutting edge jobs).

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.

Rounin · 3 years ago
In some specializations of programming, you're going to need a lot of those things. For instance, working with game engines, scientific simulations, image or signal processing, finance, or simply making the base software and libraries that other people use, can involve a lot of CS.

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.

DennisP · 3 years ago
I was surprised to see database normalization in OP's list. Working at a modest-size company, database normalization was something I dealt with all the time. It was up to the devs to do table design, if you didn't normalize you'd end up with a mess.
fjfbsufhdvfy · 3 years ago
I've never seen someone even mention the word normalization when working with databases, but the knowledge is useful to intuitively design more sensible tables. Perhaps many people don't realize they are doing it?
thom · 3 years ago
I find the most useful thing about CS knowledge (and especially algorithms & data structures) is having a hunch for the shape of a problem and knowing what to google for. It can save a lot of thinking and stave off performance problems before they occur. But you’re there to deliver business value and it’s only right that those concerns should dominate. That doesn’t mean you won’t have “this database is completely unmanageable and we can’t add new features fast enough” or “this complicated request is incredibly slow and customers are angry” moments that your knowledge can solve though.
dev_0 · 3 years ago
Exactly what I am doing. The job is still technical but not so academic
rufius · 3 years ago
The thing most folks don’t realize is that Computer Science isn’t Software Engineering. They’re related but distinct.

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.

jasonm23 · 3 years ago
The lightbulb moment for me was when I read this definition of software engineering:

Software Engineering = Programming + people + time.

npteljes · 3 years ago
It's normal. And the point weren't to always recall those specific pieces of knowledge, it was to get you to understand those concepts once. Once you did, understanding similar concepts will be easier, you will be able to spot more intricate patterns. Your intuition will be better in situations, where you spot or create things seemingly out of nowhere.
datavirtue · 3 years ago
Exactly. I can not remember all of the isolation levels for each type of database engine but I know what can go wrong and that my application has to be somewhat aware of them. I have to research each particular engines' isolation level against my application requirements every time. Yet, I manage to forget the behavior of the common ones readily despite having studied them in-depth numerous times.
jongjong · 3 years ago
I tend to be a somewhat slow learner but once I've learned something, I seem to remember it forever (I only lose a little bit of detail).

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.

quickthrower2 · 3 years ago
That sounds like unusually good memory, almost like Michael Ross level. Make good use of that!
jongjong · 3 years ago
My ability to learn and remember stuff seems to be related to how interesting (how valuable) I find the information. The reason why I'm a slow learner is that I find it hard to remember things when I can't see their utility value. It takes a while to understand the full utility value of something.

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

vishnugupta · 3 years ago
Yes, totally normal. If you want to brush up on that knowledge it won't take much time either; maybe couple of weeks and you'll be able to recollect.

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...