We’ve tried to limit our list to computer science topics that we feel every practicing software engineer should know. Most people tend to benefit from having some professional experience before diving too deep into CS theory. The most significant “pre-requisites” in our opinion are: computer architecture before operating systems or databases, and networking and operating systems before distributed systems.