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 . 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 calculus. It is also the foundation of functional programming; in fact, calculus is one of the earliest programming languages ever created!
2. Future Prospect
Some parts below were cited from 公職王.
-
Programmer: The most general term for somebody who not only writes programs but also coordinates their team, steering it toward to right direction. They must have strong esprit de corps and a sense of responsibility.
-
Computer Systems Analyst: Computer systems analysts analyze crucial mechanisms such as DevOps and robustness in software and systems with their years of experience.
-
Game Developer: While sounding like making a game, game developers in large studios only work on designated parts; nevertheless, indie developers can work on their games at their disposal, maintaining their own pace.
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.
- GNU Compiler Collection: GCC is a pretty useful product. It contains linkers, archivers and compilers.
- GDB: A convenient debugger on the x86_64 platform. It can be used to sniff call stacks and memory heaps.
- GNU Coreutils: Some useful functions including transpiling assembly.
4.4 Peripherals
Keebs and monitors.
- Tex Shinobi: Tex Shinobi is a mechanical keyboard with an aspect ratio of 1:1. It has a built-in hand tray.
- HHKB Layout: HHKB layout keyboards are smaller and easier to type on. I currently use HHKB Hybrid Type-S. It takes some time to adapt to, though.
- 21:9 Monitors: This aspect ratio is golden, not as stretched as 31:9 and not as narrow as 16:9. I'm still yearning for the date when 21:9 4K OLED comes...
- A4 Grid Papers: For math problems and daydreaming only.
- Pental Smash: A series of mechanical pens that feel like gliding through clouds when using them to write.
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. ξ( ✿ > ◡❛)