Python task manager from scratch, part 0: Introduction

Why I'm writing this: short version

Empirically, a lot of people can go from not knowing how to program to knowing Rails or Django. That's great. But at least some of these learners might be better served by learning different patterns. If you can keep introductory Rails in your head, you can keep this in your head.

A Rails app can do a whole lot that our app can't. But our software will have its advantages. It will be software I actually want to build; perhaps you will too. And it will give me the chance to discuss some badly under-discussed topics in software engineering. These topics are truly important in the discipline and also accessible to a thoughtful beginner.

Put another way: Django, Rails, and the like offer a certain ability to get things done in exchange for a certain up-front effort investment. As the industry and its tools progress, I suspect that:

  1. The same time investment can be used more and more effectively learning what the framework provides more directly and generally, without learning the framework itself.
  2. Values and incentives around software sustainability will favor managing dependencies in ways that are easier to accomplish without a framework.

Even if that's wrong, I think that at least some readers will find this approach more fun and instructive than eating the Django elephant.

Why I'm writing this: longer version

When I learned poker, Tournament Poker For Advanced Players ("TPFAP") taught me a lot. One thing it taught me was the distinction between teaching to the generally uninitiated and teaching to the specifically uninitiated. TPFAP assumes the reader is generally intelligent and proficient at poker, but might not know the first thing about tournament-specific poker.

Some readers found it strange that a book "for advanced players" included some elementary odds calculations. The book was written, though, when even an experienced poker player might never played a tournament, and there was very little quantitatively sophisticated poker material available.

I think about TPFAP often when I read my email and read programming literature, so much of which assumes that the reader who doesn't know (e.g.) Python has very little familiarity with any other technical domain.

Here we'll try to code up a task manager from scratch. (I've tried a ton of task managers, and many of them are excellent, but none is quite the one I want, and isn't it great that we can use computers to build the things we want?) When I say "from scratch" I mean it: I'll do my best to make this accessible to someone who has never written a line of Python before.

I will not, however, assume that the reader is technically unsophisticated.

I won't start with a list of Python data types, with long instructions about installing an IDE, or with category theory. Others explain those things better than I do (I'll link out where appropriate), and knowing all the fundamentals is simply not a prerequisite to doing useful stuff as a programmer. Modern programming is complicated enough that nobody knows all the fundamentals, anyway.

(How can you have confidence in what you make if you don't know the fundamentals? With solid, modern software practices, which we'll learn along the way. Stay tuned. Again, I'm assuming that you may or may not know much about Python or programming yet, but that you are willing and able to learn the skills of a modern discipline.)


Home page