The Coders Bucket List
Tags: beginners, career
Published: 2019-10-22 18:04:54

A bucket list is a list of things you ought to do before you [*kick the bucket*](https://en.wikipedia.org/wiki/Kick_the_bucket) and die. Here's a bucket list for every coder out there. Check it out and tackle them one at a time!

## Compile your own Linux Kernel
The linux kernel is the heart of the Linux operating system and is open source. Compile your own linux kernel to get a deeper understanding of how linux, open source software and the kernel itself work.

## Set up a Build and Deployment Pipeline
Set up your own pipeline to build and deploy your code. The pipeline should compile your code, create an artifact like a docker container and deploy it on a remote machine. You can build the pipeline in [Jenkins](https://jenkins.io/), [Gitlab CI](https://docs.gitlab.com/ee/ci/), [Travis CI](https://travis-ci.org/) or using [Github Actions](https://github.com/features/actions).

## Mentor a Junior Dev
Mentor a junior developer will teach both you and your mentee a lot. You can share your knowledge and give your mentee a great start in the job. You'll see that also you will benefit by looking at things from a different angle and explaining things you've been using and doing for quite some time.

## Install and run stuff on FreeBSD
Install a unix distribution like [FreeBSD](https://www.freebsd.org) on a machine and run some stuff on it. Real unixes are quite different from linux as you will notice. Yet unixes are great and very stable server operating systems.

## Give a Talk
Share experiences or knowledge with others by giving a talk. This talk can be for your team only, within your company of even at a conference. Think carefully about what you want to tell and how. Learning and practicing
to give a talk will greatly improve your communication skills.

## Contribute to Open Source
Contributing to an Open Source project that you like. You can contribute not only code but also documentation, translations or tests. Some projects have issues that are specially suited for newbies. E.g. in Spring these issues are tagged [ideal-for-contribution](https://github.com/spring-projects/spring-framework/labels/status%3A%20ideal-for-contribution).

## Give a Training
Give a training in our outside your company. Prepare the training yourself with background information and hands on practical excercises and tasks. If you can give the training more than once - even better. You'll experience
that every training is different and all participants will experience the training differently.

## Write a Compiler
Compilers is where program languages start. Write you own little compiler and you will gain lots of insights into the inner workings of programming languages.

## Learn a Functional Programming Language
Learning to program in a pure functional programming lanuage like [Haskell](https://www.haskell.org/) or [Elm](https://elm-lang.org/) will change the way you think about programming. So check it out even it won't become your primary language.

## Bring a Website to Production
Code a website using plain HTML and CSS and bring it to production. Register a domain name and make your website available under that domain. Even better use web server like [Apache](https://httpd.apache.org/), [nginx](https://www.nginx.com/) or [Caddy](https://caddyserver.com/) to serve the website.

## Develop a mobile app (and release it)
Develop your own mobile application for Android or iOS and release it in the app store. Make your app communicate with backend services and use device functionalities like geolocation via GPS.

## Learn to use vim and emacs
The classic text editors are [vim](https://www.vim.org/) and [emacs](https://www.gnu.org/software/emacs/). So take the time to learn basic text editing in both [vim](https://www.vim.org/) and [emacs](https://www.gnu.org/software/emacs/). Once mastered it's a skill you can use for the next 30 years. 

## Mess up Production real bad
When you develop production code it's only a matter of time. One day you will write code that messes up production. But don't you worry we've all been there and we all make mistakes. So fix it, learn from and grow from it.

## Fix Production on Pager Duty
You are on pager duty and shit happens. Maybe some hardware breaks down, a 3rd party service is not available any more or the configuration is messed up. There will be a day when you dig into the issue and find the root cause. Hang into it and fix production. Enjoy the feeling when everything is running smoothly again.

## Write a JavaScript Single Page Application
Single Page JavaScript Applications (SPAs) are one very important way to develop a web frontend. Write a JavaScript SPA application to get to know how SPAs are built and distributed. You can use a JavaScript framework like [Vue.js](https://vuejs.org/), [Angular](https://angular.io/) or [React](https://reactjs.org/) to get you started.

## Write a Server Rendered App
Building a web frontend as a server rendered app is a classic but still very valid approach to develop a web frontend. So write a server rendered web frontend in the language of your choice. For PHP you might use [Laravel](https://laravel.com/docs/5.8/blade), for Java [Spring Boot & MVC](https://spring.io/guides/gs/serving-web-content/) or [Buffalo](https://gobuffalo.io) for Go.

## Learn Shell Scripting
Shell scripting is quick way to script and automate tasks on any Linux and Unix machine. Learn to write a script for the [Bash](https://www.gnu.org/software/bash/) shell. Make use of classic tools for shell scripting like `awk`, `sed` or `cut`. If you want to top it off write your script in [vim](https://www.vim.org/) or [emacs](https://www.gnu.org/software/emacs/) (see above).

## Hack in a Capture the Flag Contest
Improve your security skills and learn how to hack in a capture the flag contest. Read all about it here:
{% post atan/what-is-ctf-and-how-to-get-started-3f04 %}