Welcome to the inaugural post of my new blog. In short, this post, and all that follows will be about programming. Well, mostly that I think. More specifically, it will be about learning new programming skills. Even more specifically, it will be about learning how to build a RESTful web app and working with the Django web framework for Python. At least at first. I’m sure I’ll move on to new topics soon enough. I’m usually studying several different subjects at once, and I’m sure I’ll want to write about some of them at some point.
I’m not new to programming, but I have never done anything for the web. As an electrical engineer, most of the tools I work with are low level, or at best, for the desktop. Mostly we concern ourselves with making LEDs blink. Publishing things to the web is just not something that lands on my plate often. But I want to get better at it, and delve into it more.
There are already a lot of blogs, a lot of really great blogs, covering everything about programming and Python, and they are a great source of information. I am not aiming to add much to that pool of knowledge; how could I? Instead, I’m looking to offer a source of commiseration. I’m going to do my best to update my progress and thoughts on my learning and project every week in the hopes that somebody out there finds a kindred spirit or a touch of relief in finding out that they’re not the only one. And maybe, just maybe, one day I’ll write a post that teaches somebody something. But let’s not get ahead of ourselves.
I also need to add that this post was written some time ago, and just recently revised before being published. I started working with Django some time ago and would chip away at it here and there. I would take vacation days and just work on it. But, as so often happens to side projects, it started to languish. I would resurrect it from time to time and work on it more, but it was mostly back-burnered. The project has taken a lot longer than I expected largely due to getting caught up in other hobbies, as well as having a hard time working all day and coming home and working some more. I love programming, but I have a lot of other activities I enjoy, so tacking on two more hours of development at the end of the day was a struggle for me a lot of the time.
Anyway, I’ve tried to revise this post, but if the tone seems a little weird, now you have some idea why. I promise I’ll be more coherent in the future.
About my project
So, the best way to learn is by doing. Sometimes. And so, I’m working with my friend Michael (who’s name was changed from Michael to protect him) on building a SaaS project. In brief, the project is intended to be a marriage between my love of tabletop RPGs and technical projects (in this case web development).
One sentence summary: We are building a web app that will provide a number of tools and random generators that will reduce the prep time for all the overworked gamemasters in the world significantly each week. In return, they will give us money. All their money! Muahahaha…wait no. Michael informs me it will only be some money. Color me disappointed.
So that’s the dream anyway.
To begin with, we’re looking at creating an NPC (Non Player Character) generator for the Pathfinder roleplaying system. These are the various supporting characters a person running a game might use to flesh out their stories, and sometimes they need stats for those characters. The problem? Making those characters can become a major pain. It can be time consuming and complicated, and as the game gets more advanced, the work to create those characters grows.
Our goal is to remove that pain point. The idea is that while the characters will be randomly generated, the character creation algorithm will make coherent decisions so that while the generated characters might be odd, and poorly optimized, they won’t be useless and should be both unique and interesting.
The difficulty in building this is that making characters in Pathfinder is based around a set of rules that are then bent, broken or ignored as the characters advance in power. Basically, it’s a system defined by exceptions to the rules. This makes it a pain to try and write generalized algorithms that aren’t full of conditionals and carve-outs.
Why Python and Django?
I’ll keep this pretty short. We chose Python because it is a language I wanted to learn, and it has a lot of general usefulness for me professionally, and frankly, is just a great language. While the project has languished some over time, I have been using Python at work routinely for various things, like task automation and testing, and have pretty much fallen in love with it.
Once the decision to use Python was made it was pretty much a choice between Django and Flask. A good case can be made for either, so we elected to go with the one with a cooler name (sorry Flask, good but not good enough). In all seriousness, Django has a strong community, good release cycle, a lot of built in functionality and good online docs. But I won’t pretend it wasn’t a fairly arbitrary decision. We were both noobs as far as Python is concerned when the project was first started, and we had to pick one, so we did.
There’s also a bunch of other stuff we’re using that I know nothing about. That’s Michael’s domain. I should probably mention that he’s a web developer already, of the PHP persuasion. One of my short term project goals is to get up to speed with what he’s been doing. Once I get there, I’ll talk more about that portion of the technology stack.
About me
I guess it’s probably a good idea to share some information about myself. Out here, on the the Internet. For all of you lovely people.
Let’s start at the beginning. I was born in a small city by the name of Portland, Maine and…Nah, just kidding. But a little bit about me for context: I’m an electrical engineer with a minor in computer science. I also hold a writing degree (well, Media Studies with a writing concentration if you’re nitpicking), and am a native, and recent expatriate, of Maine, or the least known province of Canada as far as most are probably concerned. I moved to Raleigh a few weeks ago, as of the time I’ve published this, and have been settling in to my new (much warmer!) city.
In Maine, I worked at a semiconductor company and an industrial automation company. Both were old guard companies where I got to work with some great people and work on some interesting projects, but ultimately neither of them was quite what I was looking for. The same goes for the employment climate in Maine.
Now I’m in Raleigh. I’m still looking for work, and while I’ve got the freedom that comes with being unemployed, I figure it’s time to start working on my project again and bring some of these ideas to fruition, including putting up this site. Writing is a long lost love of mine, and I’d love to make it part of my weekly (though probably not daily) routine again.
Getting a little personal: I feel like I’m at another one of those crossroads you come to in life. There are a lot of ways to jump, and the easy one is rarely the one you should take. There are opportunities for electrical engineers in my new home city, but there are a lot of opportunities for software developers, and if I’m being honest, I find software to be far more interesting work. Engineering is great, but it also comes with a lot of tedious tasks. I don’t know that I’ve ever enjoyed doing layout reviews or Bill of Materials reviews. But they’re so crucially important that you can’t afford to give them anything other than your full attention.
I’d like to shift course in my career at this point, but so far I’ve been having a bit of a tough time. There’s more competition in this market, I don’t have a social network yet and on paper there are a lot more people who look better than me. I think I’ve got good programming chops, but the challenge right now is just getting people to talk to me. So I need to prove myself, and I can’t think of a better way than having something to show.
So here I am, living in a new city, looking for a job and no other major demands on my time. I need a way to convince people I’m worth talking to, and I’ve got what I think is a good project idea. There’s nothing for it but to begin…again.
Here we go.