Computer Science
Study of ==computation, automation, and information==. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (including the design and implementation of computer hardware and computer software). Computer science is generally considered an academic discipline and distinct from computer programming which is considered to be a technical field. Algorithms and Data Structures are central to computer science.
— Wikipedia
The fundamental concern of computer science is determining what can and cannot be automated.
I think knowing computer science help to write effective and scalable code (goal of good programmer, which I want to be). I described how I learn computer science here.
Computer science connect theory (computation, automation, information) with real world practice (software and hardware). In Russian, it’s known as Информа́тика.
Computer science closely related to computer programming.
In computer science central role plays ==algorithms and data structures==.
Core concepts in computer science
Core computer science concepts from Wikipedia 1.
The theory of computation helping to create theoretical models (abstract models) of how computers work (computation) and understanding the types of problems (general classes of problems) these computers can solve. So it’s about creating abstract computing models and understand which general classes of problems these models can solve.
Cryptography and computer security fields is needed to study (and practice) how prevent security vulnerabilities and how to communicate securely (secure data transmission).
Computer graphics and computational geometry address the generation of images.
Programming language theory considers different ways to describe computational processes. Different programming languages can implement computational processes in different ways and can be used to solve different classes of problems.
Database theory concerns the management of repositories of data. For example, you have a bunch of messy data (desktop shortcuts), and you can organize them in some structures (group, sort, etc.) to manage them more effectively.
Human–computer interaction investigates the interfaces through which humans and computers interact. There many UI specialists, which usually haven’t developing software skills, but they know how to create effective UI.
Software engineering focuses on the design and principles behind developing software. And usually software engineers solving problems in real world with requirements from customers.
There are many areas (complex systems), which investigate the principles and design in their own area. Main areas are: operating systems, computer network and embedded systems.
What describes Computer Architecture?
Computer architecture describes the construction of
computer components and computer-operated equipment (Input, Output, CPU, RAM).
Goal of Artificial intelligence?
Artificial intelligence and machine learning aim to
synthesize goal-orientated processes such as problem-solving, decision-making,
environmental adaptation, planning and learning found in humans and animals.
In other words replicate humans and animals processes/behavior.
Within artificial intelligence, computer vision aims to understand and process image and video data, while natural language processing aims to understand and process textual and linguistic data.
The Turing Award is generally recognized as the highest distinction in computer science.
Learning path
I place here all my learning resources related to computer programming, here is no strict grouping, but I’m trying to keep it organized by priority.
To understand custom bullet list types check my notation note.
Active sources:
- Wengrow - Data structures and algorithms
- LeetCode - research and solve problems.
- Jay Vs. Leetcode
- Code Interview University
High-level
- algorithm
- big O notation
- computational complexity
- Asymptotic analysis
- data structure
- More Knowledge
- linear search
- binary search
- Bitwise operations
- sorting algorithm
- selection sort
- insertion sort
- heapsort
- quicksort
- mergesort
- Even More Knowledge
-
NP, NP-Complete and Approximation Algorithms
-
How computers process a program
-
Processes and Threads
-
String searching & manipulations
-
Endianness
-
Networking
Optional Extra Topics & Resources
- System Design, Scalability, Data Handling
- Additional Learning
- compiler
- Emacs and Neovim
- Unix commands
- information theory
- Parity & Hamming Code
- Entropy
- cryptography
- Compression
- computer security
- garbage collection
- concurency and parallel computing
- Messaging, Serialization, and Queueing Systems
- A*
- Fast Fourier Transform
- Bloom Filter
- HyperLogLog
- Locality-Sensitive Hashing
- van Emde Boas Trees
- Augmented Data Structures
- Skip lists
- Network Flows
- Disjoint Sets & Union Find
- Math for Fast Processing
- Treap
- Linear Programming
- Geometry, Convex hull
- Discrete math
Inbox
-
Cracking the Coding Interview
-
Aziz and Lee and Prakash-Elements of Programming Interviews
-
Dewdney - The New Turing Omnibus
-
Bentley - Programming Pearls
-
Dromey - How to Solve It by Computer
-
is looping through an array easier on the memory than a long recursion
-
Cormen et al - Introduction to algorithms, read and take notes.
-
❗ Реализация алгоритма Дейкстры на Python — Записки преподавателя, html archive
-
LeetCode, research a topic
-
Visualising data structures and algorithms through animation
-
The Last Algorithms Course You’ll Need. I’m planning to use it as verification of Wengrow book.
-
Flake - The computational beauty of nature
-
Competitive Programmer’s Handbook
-
Christian - Algorithms to Live By
-
Laaksonen - Olimpiadnoie proghrammirovaniie
-
The Man Who Revolutionized Computer Science With Math - YouTube
-
Hopcroft et al - Introduction to automata theory languages and computation
-
OpenCourseWare - Introduction to Computer Science and Programming in Python
-
OpenCourseWare - Introduction to Computer Science and Programming
-
Problem Solving with Algorithms and Data Structures using Python
-
Continually updated, interactive, and test-driven coding challenges, with Anki flashcards.