Since when I was 16 I tried to learn “everything” about computer science. I was an enthusiast boy with huge ambitions, I know 🙂 Anyway learn everything implies you to know what “everything” means. Computer science is a wide field. Goes from math to physics, from languages to software development and is young, mostly unknown and rapidly evolving.

I searched for years for a well done “map” of computer science, something able to describe the structure of discipline and give the right place to each single element related to computer science and I failed, this map dosen’t exists yet. People tried to describe it using different taxonomy but none of these do it properly.

Some attempts:

So I did it by myself starting with knowledge I had and trying to derive “The Map” using a bottom-up approach. It took several years and at the end I came to a sentence:

Computer Science is an Implementation of a set of logical-mathematical algorithms made using a descriptive language which run on a physical environment.

This sentence should describe every “object” related to computer science. There are four main elements:

  • Implementations,
  • Algorithms,
  • Languages
  • Physical environment.

Implementation is software. You can classify it by abstraction level (firmware, kernels, driver, middleware, softwares, distributed softwares) and inside each level by category.

Algorithms are the logical approach to the problem. You can classify it by complexity and than by kind (descriptive for data structure, deterministic, not deterministic, probabilistic, parallels, quantum, infinite)

Languages are used to describe the algorithms. You can classify by abstraction from the physical level (transmission codes, protocols, assembly, compiled, semi-compiled, interpreted, metalanguages).

Physical environment is the hardware. You can classify it by the complexity of the implemented logic (combinatorial, sequential, programmed and microprogrammed, complex, distributed).

Each of these “aspect” can be enumerated and every “object” related to computer science can be described using these four variables, a quadruplet (Physical environment, Language, Algorithm, Software).

Some examples:

  • The Ruby programming language is:
    (complex, interpreted, [middleware|software], *)
    an interpreted language which run on a complex electronic environment (CPU + RAM) done to write middleware or softwares implementing any kind of algorithm.
  • An Apple iPhone is:
    (complex, compiled, *, *)
    a bunch of every kind of software (from firmware, to remote services) mostly made using a compiled language (objective-c) which run on a complex environment (the iPhone hardware) implementing mostly any kind of algorithm and data structure.
  • Mobile apps are
    (complex, [compiled, semicompiled, interpreted], [middleware|software], *)
    they run on complex hardware (smartphones), are made using objective-c, java, javascript or similar languages and are software or client for a bigger application.
  • Amazon Cloud is
    (distribuited, *, distribuited software, *)
    distribuited software who run on a distribuited hardware using from simple protocols to scripting language to implement algorithms.
  • The “quicksort” is
    (programmed, *, *, deterministic)
    a deterministic algorithm implementable on a programmed system.

I know, in real life this “index” is completely worthless. Anyway while I were building it I discovered many different things and many connection I hadn’t imagined before and now my knowledge has a strong ordered base.