The Building Block of CS: Logic, Mathematics & Creative Thinking
This is just a summary of Computer Science as I have experienced it at the University of Edinburgh for the past four years. Now, I am in my final year (fifth year, masters year) and my conclusion of CS is that it is based on these knowledge:
- Logic. Three types of logic I saw throughout my studies:
- Propositional logic
- Predicate logic
- Temporal logic
- Linear Algebra
- Discrete Mathematics
- Creative thinking
CS is made easy in my opinion if one has a depth understanding of these building blocks. A thorough arguments for this statement will be presented on another post. However, notice that I have skipped programming from the building blocks. The reasons are that programming can be explained using logic, mathematics (discrete mathematics) and creative thinking.
Studying CS was a natural choice for me because of the creative freedom. But my mother wanted me to study medicine. As a very creative and logical person, I reasoned that medicine was not appropriate because at the time my perception of medicine was that knowledge was focused towards organisms biology and there were no rooms for creativity. This to me was very limiting. Secondly, I was scared of blood.
I knew I will study CS, though I did not have a complete understanding for what it was. Wikipedia provides an answer to this. So, I chose courses that answer the fundamental questions: what is CS?
I had the following courses:
Logic; Object-Oriented Programming in Java; Data and Analysis (I loved this course); Industriel Management; Calculus and its Applications; Functional Programming in Haskell (Haskell is my favourite programming language);
Processing Formal and Natural Languages (this course was one of the reasons why I developed interest in Natural Language Processing.); Algorithms, Data Structures, Learning (was introduced to Machine Learning); Computer Systems; Software Engineering; Discrete Mathematics and Mathematical Reasoning (I consider this to be the most crucial course in CS, especially with regards to proofs)
Compiling Techniques; Computer Science Large Practical (project we did: link); Computer Hardware; Computer Security; Database Systems; Foundations of Natural Language Processing (I really enjoyed this class.); Introduction to Theoretical Computer Science (Great course, got introduced to abstract concepts such as Satisfiability, complexity, NP-Complete); Introductory Applied Machine Learning; Operating Systems; Professional Issues;System Design Project
Agent Based Systems ( I really love this course but it was lacking a lot of practical. However, what I have gained from this course is so valuable especially with regards to A.I. games that I have been developing as a side project); Algorithms and Data Structures; Computer Graphics ; Dissertation; Machine Learning and Pattern Recognition (I really love this course. And the lecture is very good at explaining concepts); Software Design and Modeling
Fifth Year (Masters)
BioInformatics; Human-Computer Interaction; Image and Vision Computing; Robotics and Sensory Motor Control; Natural Language Understanding; Dissertation.
My courses ranged from all the spectrum of CS. This lead me to observe the following pattern:
- Problems and Solutions.
- CS deals with problems and solutions in different types of environments. For example, in Computer Architecture, I read about cache (fast memory near the Central Processing Unit (CPU) ) and the reasons why they were created: minimizing the latency between the CPU and the accessibility of memory from the RAM.
But here comes my argument: what tool is best known to capture the scope of a problem? Yes, Logic! Logic is a tool that describes a system by decomposing it into its building blocks and providing inference rules to compose compounds. Most of the systems studied in CS have been described using logic (proposition, predicate, and temporal logic).
After you know the constraints and scope of the problem, creative thinking is used in order to find a solution. This is because describing problems using logic gives you the capability to understand the constraints and consequences of the problems. And creative thinking to me is finding ways that satisfy those constraints and mitigate consequences i.e. a solution in a nutshell.
However, the solution itself might not be efficient, this is where Mathematics becomes very important. Mathematics provides the tool for analysing the efficiency of your solution. Or it plays a major role to develop models for particular set of problems.
In my upcoming posts for CS, I will be illustrating how these building blocks in CS helps me analyse complex systems.
Logic, Mathematics and Creative Thinking intermix equal CS.
OR in other words: Logic, Mathematics and Creative Thinking are the RGB of CS.