Software Engineer Handbook
  • πŸ‘‹Welcome to this handbook
  • Level 0 : Non-technical considerations
    • How to manage your time effectively
    • How to prepare for job interviews #1 : Digital Presence
    • How to prepare for job interviews #2 : At the interview
  • Level 1 : Computer Science
    • Intro: Why computer science is critical
    • Algorithms & Data structures Handbook
      • Algorithms & Data structures Handbook
      • Sorting Algorithms
      • Data Structures ADTs Implementation (In Go)
      • Techniques for Solving Data Structures Problems
    • Computer Organization and Architecture
    • Operating Systems
    • Database systems
  • Level 2 : System Design
    • Step 1 : Analysis
    • Step 2 : Digging deeper into data modeling
    • Step 3 : High-Level component design
    • Step 4: Low-Level / Detailed Design system
      • Clients
      • Application Servers
      • Databases
      • Security
      • Distributed Systems with Microservices
  • Level 4: Productivity Handbook for Software Engineers
    • How I use Fig
    • Command line tools
    • Develop on the cloud
  • Extra
  • Leadership
    • Processes
    • Poeple
    • Delivery
    • Transitioning to a new role
    • Resources I like
Powered by GitBook
On this page
  • Computer Science "has nothing to do with my job" argument
  • Computer Science as a discipline
  1. Level 1 : Computer Science

Intro: Why computer science is critical

PreviousLevel 1 : Computer ScienceNextAlgorithms & Data structures Handbook

Last updated 2 years ago

Computer Science "has nothing to do with my job" argument

  • You may not encounter computer science directly in your day-to-day work but it's for sure the the most important factor of becoming a talented software engineer, let's define talent IMO

    • A talented software engineer, has a non-linear positive effect to any organization (you can't predict his output based on the inputs), he understands machines very well and he can move faster between professions, technologies, and industries. A lot of promising talents can do much more but they are limited just because their skills in CS is limited, so it's better to have a strong foundation to break any learning boundary in the future.

  • Computer science is critical for understanding how technology works and how to compare two different technologies (what is the difference between a container and a VM? Or bare-metal VM vs Guest VM? What about the cost of an actual Java thread for RAM and CPU context switch cost compared to a Go routine? How databases management systems implement their indexes data structures differently?)

  • Everything will seems harder to understand if you always learning abstracted skills in a black box environment

Computer Science as a discipline

Computer science in a high-level overview it's concerned with the theory + software + hardware studies of computing

In a deeper level however, we could divide it into subfields such as

  • Algorithms & Data Structures

  • Computer Architecture & Organization

  • Operating Systems

  • Software Engineering

  • AI and robotics

  • Bioinformatics

  • Networking

  • Programming Languages

  • Databases

  • Graphics

  • Human-Computer Interaction

It’s a good idea to gain this overview, so whenever you have the time you could directly go and learn about a certain subfield πŸ‘

The Law of Leaky AbstractionsJoel on Software
Logo