Summer means that time off work are coming closer and closer for some of us! In my off time I enjoy using extra time on learning and reading. Today, I will share with you some tips for topics that I enjoy, that you could look into if you want to look at something new.
If you want more relaxing summer reading, there are other blog posts you can check out. Maybe you want to read a biography about a person in the tech industry? Or maybe science fiction is more your thing? There are many more recommendations in many different genres available in the books-tag, ranging from what was previously mentioned to personal finance.
NB! Article contains Amazon affiliate links, which means I earn commissions on qualifying purchases..
I'm currently learning Rust myself, and aim to use it to replace C and C++ in many cases. At first glance, Rust seems a bit high level, but it is not really. You have to think of memory and how it is allocated a bit more than you would in higher level languages. This is done through the memory model centered around ownership. Through this model, the goal is to avoid many of the memory issues that are currently found in a lot of performance critical code written in C and C++ (including memory issues relating to concurrency!). There are even talk about the Linux kernel introducing some Rust code in the future. Sounds interesting? Fireship has this 100 second intro to Rust that explains it better than I will! If you want a longer intro that introduces you to the language and explains how these issues are solved, then Carol Nichols has this awesome talk on how Rust is designed to be the language for the next 40 years. Rust also has many utilities you are familiar with in higher level languages like type inference, closures (like lambdas), higher order functions (map, filter, reduce etc.), generics and more! The combination of all of this makes the language very interesting in my view! It also uses LLVM, so expect great support for many different platforms.
What resources are good for learning Rust? I can only speak for the ones I'm currently using, as I'm very new to Rust myself.
- Book: The Rust Programming Language. This book covers Rust 2018, and gives a clear introduction.
- Interactive exercises: Rustlings. Rustlings provide interactive exercies you solve directly by fixing issues or implementing parts of Rust code. So far so good! Not yet finished, but I think these exercises complement the book in a good way. They make it very easy to experiment with Rust before you get any cool project ideas yourself :)
- Finding Rust resources: Awesome Rust. This is a curated list of applications, guides, crates (Rust libraries) etc.
- Reading and experimenting with Rust code: There are many Rust projects around. Some of my favorites include the bat command line application (as well as the other applications from sharkdp on github), and mos (language server protocol and debug adapter protocol server for the MOS 6502 processor). There is also a crate for writing GameBoy Advance applications in Rust I think is really cool!
DevOps: Improve your command line expertise
Learning the command line (unix shell aka bash) better can be a very useful skill, not just for using your machine more effectively, but for many tasks we relate to the DevOps label as well. These include creating containers, debugging containers, various Kubernetes operations, handling cloud infrastructure (e.g, Azure CLI) and more! Even if you just train yourself to read commands and shell scripts better, you will be able to understand more of what is written online relating to the aforementioned topics.
What can you do to improve your skills? This depends a lot on your current skill set.
- Complete beginner or find the command line scary? You should probably start with an article that summarizes the most important concepts, like the one I wrote. Still feel like the command line is super scary? There are people who have made learning it a game!
- Already know the basics? Maybe you want to check out various other command line tools to try? Maybe you can find a new one to add to your tool set. I've written several posts about command line tools on this blog.
- Feel familiar with command lines and want to learn something that uses that knowledge! There are a lot of technologies you can learn about where your command line knowledge, and general linux/unix knowledge, comes in handy. If you are not familiar with containers like the ones you run with Docker, that is a great starting point. It is also the starting point for a lot of other skills, as containers are heavily used in cloud services. Learning to use Kubernetes, and how it can improve your application deployment is another one which builds upon your container knowledge. Resources include my own repo from a talk I did, and Jeff Geerlings video series. Other suggestions include learning about Ansible, and/or making containers with it. Like you see, there are a ton of things you can do with command line and linux/unix systems knowledge. Think of any more? Feel free to share them in the comments!
No matter your skill level, you can also find useful information in "Awesome shell/bash" lists like this one.
Retro computing: Wolfenstein 3D engine
This may be weird, but I have always been very fascinated with Id Software in their hayday. Games like Wolfenstein 3D, Doom and Quake provided great 3D FPS experiences that innovated the genre. Wizardry by John Carmack in the engines are part of that, and that is probably why he is one of my greatest heroes. While I could have selected any of the classic Id Software game engines, I think Wolfenstein 3D is a good place to start. While the 3D engines are more complex in later games, the Wolfenstein 3D engine has a lot of clever tricks with very simple "3D rendering" using simple 2D based techniques. If you need to refresh your math, primarily trigonometry knowledge, it is far easier starting here than in the later entries.
A few years ago, Fabien Sanglard released a book detailing the Wolfenstein 3D engine. In it you will understand the hardware at the time, the ray casting rendering algorithm used, a bit of history and more!
Resources to look into:
- Source code
- Wolf4SDL. Same source code, but made portable using SDL. This means that the 386 Assembly and other Intel 386 specifics are replaced with portable code. Might be easier to read for some people.
- Fabien Sanglard also have several articles on his blog that provide an interesting read! My favorite being the walkthrough of the fizzle fade algorithm. There are also articles on compiling the source code the classic way, and a quick discussion on Wolfenstein 3D for iPhone/iOS.
If history is more your thing, and you want to learn more about Id Software, then the book Masters of Doom is recommended!