Recent Posts:

Table of Contents:

Skills

Last updated 25/07/2024

The purpose of this article, is to give a realistic overview of the knowledge I've picked up over the years in various areas.

Languages

First I'll go over the programming languages that I've used extensively. Although many languages are yet to appear here, I never shy away from learning a new one, and really as long as you've learnt one from a given paradigm, learning others is straightforward. I've chosen to list the languages in the order that I got introduced to them at university, although I was familiar with some later entries already before university.

F#

F# is a language that got introduced to me at my first university course "Programming and Problem Solving" (PoP). While learning a functional language as my first university language wasn't easy, I came into it more prepared than most as I had at least done some programming in the past that I was able to draw parallels to. By now (as of summer 2024), F# is one of my favorite languages, I've fallen in love with functional programming as a whole and I think F# does it impressively well. It strikes a bit of a middle-ground, with access to imperative and object oriented features should you need them, but has an excellent functional programming experience at its core.

Python

Python was the second language I ever started learning, way before university. Back then it was an amazing introduction to programming, as it is very easy to get something up and running fast. By now, I've become a massive advocate for compiled statically typed languages, so the interpreted dynamic typing that python implements leaves a bit of a sour taste for me. However it's undeniable that python is one of the best languages out there for quickly putting an idea into action, and for that I gotta give it props.

C#

I got introduced to C# as part of the university course "Software Development" (SU). This course was meant to be an introduction to professional software development workflow and object oriented programming. With that of course followed cult-like indoctrination in the ways of the Gang of 4, agile development and SOLID principles. Ultimately I felt it was a solid (pun intended) introduction to OOP, and allowed me to appreciate the strenghts (polymorphism, interfaces), but also to understand the negatives (bloat, inheritance).

C

I always heard that every developer should at some point get into C and finish a project with it, just to get a better understanding of all the memory management, pointer arithmetic etc. that is often abstracted away in modern languages. As such I was really looking forward to diving into C when I realized I had the "Computer Systems" (CompSys) course coming up. The course was one of the most surprisingly interesting courses I've had so far. They perfectly tailored the different syllabus areas (concurrency, networking, machine code, etc) into the assignments, such that we were always working on interesting software that related to each area (Making servers communicate, complex mutex locking, RISC-V simulator).

Javascript

Ah javascript.. the worst of all worlds. Javascript was the first programming language I ever touched, back when I was making a browser based collection game that I'm sure will be overviewed by a blog post at some point. I never used javacript or typescript at a very non-trivial level, so I will hold off ultimate judgement until that day comes. But the language goes against everything I appreciate, I would be hard pressed to even go as far as to say types are a "suggestion" to this language, they're more like a desperate pleading. I've never had a good experience trying to get my LSP to help me when writing JS software, it always seems to have even less of a clue about the types of my variables than I have.

SQL

While SQL isn't a programming language, it felt fitting to include it in this section. I got introduced to and worked with SQL for the first time during the course "Database and Information Systems" (DIS). My group made a LoLdle esque website for magic cards. I gained a deep appreciation for the power that the relatively simple instruction set that SQL provides.

Haskell

I started learning Haskell by myself in my spare time, out of interest in functional languages and compiler design. I'm learning it by following the free Real World Haskell book. I absolutely adore this language and all the principles it abides by. As of now (summer 2024) it's definitely my favorite language. I try to use Haskell for any case that I can possibly justify using it for.

C++ (Current learning priority)

I'm currently in the midst of learning C++ as preparation for the course "Introduction to Computer Graphics" (Grafik) that I'm taking next semester. I don't know much about it other than the fact that it seems most people think its gotten really bloated, but ultimately it's used in a lot of industry and is well worth learning.

Tangential Languages

Lua

I've written lua at a cursory level while configuring my neovim configuration.

Paradigms

In this section, I'll outline my experience in various programming paradigms, as well as my opinions on them.

Imperative

You can never go wrong with imperative programming, and it's everywhere. Due to these two factors it's definitely the paradigm that I've written the most code in. I feel very comfortable making imperative programs, as I'm sure most developers do.

Functional

Philosophically I love functional programming, and love to be within the paradigm when I get the chance to. It's by far my favorite programming paradigm, but probably the paradigm that I've spent the second most time in.

Object Oriented

Object oriented programming is the paradigm that I have the least experience in. I think it's great for structurally mapping out problems, but I often find it needlessly complicates software and turns into an overdeveloped abstraction hell.

Operating Systems

Windows

Like most people I grew up on Windows. After starting at university, we got introduced to windows subsystem for linux (WSL), and I noticed that I was spending an awful lot of time trying to force my windows machine to act like a UNIX system instead of just switching to one...

Linux

...Finally in February 2024 I decided to bite the bullet, installed Arch Linux as soon as winter break hit, and a week of non-stop problem solving and configuration ensued, I never looked back. By now my daily driver is an Arch Linux machine running a suckless custom configuration of DWM, dmenu, st and neovim for programming.

Compiler Design

I've gained a good understanding of compiler design, lexing (finite automata), parsing (LL(1) parsing), interpreting, type checking and compiler optimizations through university course projects and personal interest. During one course, we expanded upon and improved a partly finished interpreter and compiler for a course specific functional programming language.

Low Level Knowledge

Through university courses I gained an appreciation and understanding of the inner workings of computer hardware and operating systems. I've looked at the layered network model, avoiding deadlocks in concurrent software, optimizing programs in accordance with cache sizes, knowing memory layout well enough to make use of temporal and spatial locality. I also worked with RISC-V, both writing programs in it directly, but also writing a C based RISC-V simulator that takes a RISC-V instruction file and interprets each intstruction by parsing the instruction integer and executing accordingly.

Algorithms & Data Structures

During university I of course did multiple courses relating to the analysis of algorithms and data structures. That means time complexity notation, amortized analysis and proving invariants.

Version Control

I've always only used git for version control. I back up all of my notes in a git repository, all my linux configuration is stored in a git repository, any personal projects are immediately tracked using git. My PC could burn down and I could be back up and running on a new PC like nothing happened within a few days.

Math

In terms of math experience, almost half of all the courses I took during my bachelor's degree were mainly about math. From that I got extensive experience in bachelor level calculus, linear algebra, probability and statistics.

Zupreme

Table of Contents: