Introduction to Computer Science

Publish Date

This article can serve as a brochure during your journey to pursue computer Science. Should there be any flaws, please inform the author.

This article might suffer from regional differences since it is tailored toward Taiwanese.

1. What do we learn in CS?

When talking about comp sci, many people think they are highly pertinent to programming. However, that is simply not the case. Computer science places more emphasis on math, logics and paradigms. Relatively, programming only takes a small portion of it when it comes to implementation.

1.1 Math Knowledge

Since computer science is a branch of applied math, it is not difficult to see that comp sci requires extensive math knowledge. At first, discrete math, a field that focuses on quantized qualities, would be taught, in which we would first learn about number theory, which only researches theories related to Z\mathbb{Z}. Since many of these theories were elegantly written, even Mr. Carl Friedrich Gauss said "Mathematics is the queen of the sciences—and number theory is the queen of mathematics."

Subsequently, theories would be introduced in a specific order -- from narrow to broad. For instance, graph theory is taught after group theory, and category theory is taught after graph theory.

Needless to say, algorithms and data structures would also be taught, including graph traversal, simulation, which can enable us to solve problems like traveling salesman problem and Josephus problem. Aside from discrete math, comp sci also requires vast knowledge in calculus, which would be used in fields like DSP (Digital Signal Processing.)

1.2 Computer Mechanism

While it might clash with your preconceived opinion, computer science also has to learn about how computers work in depth, though less detailed than computer engineering. Everything ranged from the von Neumann architecture to VHDLs is crucial as they act as cornerstones for a great programmer who thinks in a low-level manner. This skill directly benefits the learning of assembly later on.

1.3 Programming

At first, we would be introduced to the C programming language. Notably, C is the most low-level high-level language, so it does bear a lot of educational value on its own. Then assembly would slap us in the face... Universities often teach about Intel x86_64 ISA, but some are observed to teach about RISC-V and ARM as well. Lastly, if you are passionate about math, you must be extremely satisfied by λ\lambda calculus. It is also the foundation of functional programming; in fact, λ\lambda calculus is one of the earliest programming languages ever created!

2. Future Prospect

Some parts below were cited from 公職王.

To summation, computer science has many occupation opportunities. As more and more kaleidoscopic technologies spring up, it's not hard to see that there would be even more chances!

3. How to git gud?

Be focused and disciplined. Always preview and contemplate all the time. There are a multitude of resources coming in various forms including videos, books and papers. For beginners, you can read Structure and Interpretation of Computer Programs. The book is straightforward and introduces you to the world of functional programming. Talking about math, you can read baby rudin and Discrete Math by Richard Johnsonbaugh. Solving problems can enhance your knowledge in DSA, but beware, solving problems does not guarantee abilities to write scalable and maintainable codes, which have to be cultivated by long-term cooperation with fellow programmers.

Happy Hacking!

(」・ω・)」うー!(/・ω・)/

4. Useful Tools

These are some tools I prefer to use ranging from software to hardware.

4.1 Neovim

While some people might be upset by my choice since they think Vi and Vim are enough, I still like the neat features of neovim. You can take a look at my dotfiles to see how I configure it. I personally dislike autocompletion since it distracts me from actual work. Vim-like editors benefit from the fact that your hands seldom leave your keyboard, rendering you more productive.

4.2 Tmux

I personally use Hyprland whenever I'm in a Linux environment, but sometimes, tmux is also useful when you can't use tiling manager. You can also use it via SSH, and it supports detaching and reattaching.

4.3 GNU Collection

GNU software is stable and robust.

4.4 Peripherals

Keebs and monitors.

5. Legendary Figures

These are all my subjective opinions.

5.1 Richard Matthew Stallman (RMS)

The creator of Free Software Movement, Stallman has been fighting for FOSS (Free and Open Source Software) for decades. One of the awe-inspiring achievements he has done was the founding of GNU -- the amalgamation of FOSS, including operation systems and libraries. The Linux kernel that Linus Tarvold developed was then merged into the project, becoming GNU/Linux or GNU+Linux.

5.2 Linus Tarvold

The author and the main developer of the Linux kernel project. It was meant as a FOSS version of UNIX, but accidentally became the most popular open source kernel in the world. To this date, Linux is still one of the most sought-after choices for programmers. From my viewpoint, I think the most admiring thing he's done is not the fact that he made in linux, but the fact that he's been consistently checking pull requests for over twenty decades in the Linux kernel lore, which testifies his stunning perseverance and enthusiasm.

Should you want to see Linus Tarvold roasting people in action, go to Linux Kernel Lore. Please proceed with caution! Filing a PR without getting roasted by Linus is a medal to be worn with pride. ξ( ✿ > ◡❛)