GithubHelp home page GithubHelp logo

libcpp's Introduction

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

libcpp's People

Contributors

scaletsang avatar scarletsang avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.