DjangoCon Europe 2019: Does this run in linear time? A case for algorithmics

Writeup of the DjangoCon Europe 2019 talk »Does this run in linear time? A case for algorithmics« by Iulia Avram

Iulia Avram: A Python developer and fangirl, who only recently joined the Software Development community, yet feels like she's found her place.

Why

Algorithms are great mental exercise. Keeping sharp is important, and solving algorithmic problems is one way of doing so. It also helps you understand problems better, and it breaks a dangerous habit of routine. Solving algorithmic problems also improves your code design – not by forcing you to solve things in C, but by helping you get in the habit of thinking up clever new solutions. It might remind you why you fell in love with programming for the first time, even. It's also going to make you write prettier code, and help you spot patterns in problems that you might have solved earlier.

It's also interesting to see how runtime develops, even for some fairly small values of N.

Try to think of learning algorithms as a social duty. A lack of understanding leads to a lack of trust. Being able to understand and explain simple and complex algorithms to other people can close this gap.

How

Sources

There are many ways go get into this. CodeForces, HackerRank, LeetCode are all good, and other resources are ProjectEuler, CoeChef, Sphere online judge, topcoder, and daily coding problem.

And don't disregard books – especially the Introduction to Algorithms (Cormen/Leiserson/Rivest/Stein) can be very helpful.

Upsolving

Start with a point system – most pages rate their problems, so you should start at the bottom and work your way up.

And/or take all problems from one category and try to solve them, which will give you a very focused approach, and teach you about one type of problem in-depth.

Keep track of progress

Having some overview over the amount of problems you have solved – amount is a questionable metric, but it's better than none. Maybe ratings work better for you, maybe they don't – and do not focus overly much on this.

Compete

Compete just for fun. Even if you have no aim of winning, it's good for you as an incentive. Plus, it will be fun. There is code jam, hackercup, hash code, and codewars.

Gamify everything

Lots of websites have badges, or rankings, or other measures of success. Set your own game parameters, they don't have to relate to official challenges!