#100DaysOfCode: Julia Edition

#100DaysOfCode: Julia Edition

If you've been on Twitter recently and have followed someone in tech, chances are you have encountered #100DaysOfCode mentioned at least once. I'm taking him up on the challenge and I'll be coding 100 days in Julia starting April 12th, 2021.

Backstory

100 Days of Code got started by Alex Kallaway who wanted to build a new habit and learn a new skill but found it difficult to stick to his goals after long days at work. He publicly committed himself to code at least one hour a day on 100 consecutive days. He identified a course on Free Code Camp as something he wanted to work through.

Rules

The original rules are as follows:

  • Code at least 1 hour per day for 100 consecutive days
  • Tweet about progress every day
  • Push code to Github every day
  • Time spent in tutorials, online courses does not count towards the time spent coding

These rules feel easy enough but are not very compatible with family life and work & life balance so I'm making two adjustments.

  • Take the weekends off
  • Code at least 45 minutes per day on 100 consecutive weekdays

This means my challenge will take me exactly 20 weeks and puts the end of the challenge to August 27th, 2021.

Goals

I want to approach this challenge with a purpose. When I was working on my PhD I inherited a project from previous members of my lab. It was an evolutionary algorithm workbench called EvA2 - a GUI application written in Java. EvA2 features over 50 different global, combinatorial and multi-objective optimization algorithms, a whole suite of test functions and tools to plot results and obtain statistics of your optimization runs.

EvA2 - Evolutionary Algorithm Workbench

I'm currently in a phase where I want to reconnect to my research but do it in a more modern environment. Reactive notebooks with Pluto.jl, animated plots in Plots.jl and an existing community of ML researchers and scientific folks in the Julia community are enticing.

My goals will be as follows:

  • Build a small library of research problems for global and multi-objective optimization
  • Implement a state-of-the-art Differential Evolution optimizer
  • Implement a state-of-the-art Particle Swarm optimizer
  • Build interactive notebooks to visualise the inner workings of the above optimizers
  • (Optional) Dive into neural networks

It's not that those algorithms haven't been implemented in Julia, quite the contrary actually, with Optim.jl and Evolutionary.jl there already exist great optimization packages in the Julia ecosystem. However, it never hurts to explore your own ways and maybe, just maybe, find a better way that helps push the needle a littler further.