Skip to content
View Scarletsang's full-sized avatar

Highlights

  • Pro

Block or report Scarletsang

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Scarletsang/README.md

Hei Yiu, Tsang

I am an artist and a programmer. I aim to create long-lasting systems that help people to think creatively. Such systems include but are not limited to software, writings, installations, workshops, and communities. This is a repository that documents my journey to make computer systems.

I see code as literature that helps programmers understand a complex system. In this repository, you can find a lot of projects that are meant to be educational, in which I wrote about the design/architecture of the program in README.md, as well as an extensive amount of comments in the header files (C and C++ projects). For an experienced coder, these writings might be considered unnecessary, but for less experienced coders, I hope these writings can give them new ideas to structure their programs.

I am currently studying at 42 Heilbronn, looking for a software development internship in Germany.

My journey

My first two programming languages were Lisp and Haskell. They taught me to reason programs using functions and types. Typeclass enables generic functions that only accept types with certain traits; algebraic data types compose different types to form new types; monad encourages composing functions and transforming data easily. Although I found these languages hard to use practically, I see how concise code can be to describe objects and actions. I am a fan of functional programming.

Later, I started writing websites in Javascript, and Ruby in the backend. I felt content because I could build visual programs with ease. I also learned to design user interfaces and create different user experiences according to the website's needs. However, I found it very hard to maintain and refactor code whenever I needed to add features. "Why can't I write code in Javascript as clean as in Haskell?" I questioned myself, and since then I constantly think of functional programming even when I do object-oriented programming. To translate the ideas in functional programming to object-oriented programming, I studied design patterns in hopes of bringing structured and refactorable code to writing Javascript. The patterns did not help me immediately, but they did give me some inspiration to write scalable JavaScript code.

In 2022 October, I started studying programming (mainly in C and C++) at 42 Heilbronn. C feels like a blank sheet of paper, with very simple syntax yet very powerful. It is here that I finally see how deploying design patterns gives structure to my project. I also found object-oriented programming useful in C: I see each struct as the data members of an object, and some functions acting as the methods of the object. Of course, there is no lambda in C, but I can design functions that can nicely chain together well, still a functional programmer at heart :). I also incorporate RAII design (from C++) and ownership of data (inspired by Rust) when I write C code.

Now I am writing C++ code, and I hope to learn Rust in the future.

Links

Notes for each project in 42 Heilbronn

Pinned Loading

  1. minishell minishell Public

    A partial implementation of Bash

    C 1

  2. miniRT miniRT Public

    A raytacing engine written in C

    C 1

  3. Dorker Dorker Public

    Running commands inside a dockerized linux environment with zero setup

    Shell 31 1

  4. fractol fractol Public

    An interactive graphic program that shows fractols.

    C

  5. pocimas_visuales_website pocimas_visuales_website Public

    A website for a virtual art performance.

    JavaScript

  6. web_serv web_serv Public

    Forked from Sangyao42/web_serv

    C++