The Highs and Lows of Side Projects
andrewdumont.me
andrewdumont.me
So needless to say, I am a big fan of side-projects. My experience is that I attack them with an enthusiasm that's rarely present when I am doing scheduled work. Often the momentum that that gives can get them to the point where they have enough substance to be wrestled over the finishing line relatively easily.
(Of course that experience won't translate directly to the kind of work you living from.)
Details of my dissertation here if anyone's interested: http://www.miketaylor.org.uk/dino/pubs/#diss
By the time I started by 3rd year, the fallout from bsdiff -- a new algorithm from matching with mismatches and applications to file synchronization -- was enough that I went to my supervisor and said "so, err, I got a bit side tracked, but I'm wondering if I've just done a thesis worth of research".
These side projects are mostly fun, or the fleshing out of an idea. But I really don't undertake any that would take a ton of time or effort - unless I'm really, really interested in the solution (it hasn't been done or a better perspective on an old idea, etc). This way I don't spend a ton of time - maybe a week of a few hours here and there - to launch it.
Most of this is due to my day job(full time job). And so lack of motivation or loosing interest was because of the less time I could devote to it.But I still do not agree on :
"a lack of commitment to one thing is just as productive as doing nothing at all."
When you work on side projects you learn new things or you practice old things which makes you perfect. So keep doing something is always better than nothing. Because of these unfinished side projects I was able to learn python, machine learning, data mining, django and so many other tools and technologies which I would have never learned as these are not related to my day job(all java).
So I would still vote for keep doing side projects whether or not you finish it you have something learned in the process.
Personally, I've found that when I do multiple large projects at once, I sacrifice performance on each. There is a tradeoff in what you learn, but I'm not sure it's an equal tradeoff.
I'd agree with this statement completely. Everything I've built that I'm proud of has always been something where I took my time, had a clear vision, drafted out exactly what I wanted and then didn't just take it on as "just a side project" but when needed, forced myself to see it through to the end.
I think he has some really good points about side projects in general. I think we (or at least myself) can tend to view them as things like hey let me build a framework so I know how to do it, without any clear goals in mind (besides the vague one). Then you do it for a while and afterwards maybe you have learned maybe not, maybe you just give up because you never have the time, and then you wasted the 4 hours you spent starting the project. This is more for myself, but I think when I get an idea now or want to make a side project, I'm going to force myself to sit down, spend the half hour and write down a clear set of goals that I want to achieve, and only after this start.
If your goal is to build a finished product, yes, this is absolutely true. But if you choose ambitious projects beyond your current expertise, bringing the project anywhere beyond the planning stage will be a valuable experience for the purpose of learning.
Me and most people I know just have side projects for the fun of it. Why do we need strict metrics and goals?
My side projects are like yours; I dabbled for some time with machine learning and AI, despite being under-educated and under-brained. And though my projects never really succeeded I sure did learn a lot, and some of that familiarity helps with (and helped me get) my current job. The rewards were the fun of messing around and trying to understand something, and I didn't need a metric or goal for that.
- Cutting planned features/Prioritized
- Stay simple
- This is a side project, a side project, a side project
- [important] Making sure it can run with a very minimum time and money forever so it won't just die (hence using GAE, no domain yet).
- Allocate no more than 1-2 hours a day
I'm assuming most visitors are interested in their hometeam's games rather than the league at large.
I don't know who the visitors are but I'd like to fix the actual "game-time" (normalized to UTC, then convert to visitor's local time) and to add TV schedules as well (USA, Canada, Intl) first before doing other things.
For now, people can bookmark the URL to their favourite team, e.g.: http://nbaschedules.appspot.com/heat.html
Having said that, my app is 100% static pages :) (may change in the future).
There's a JS library out there that can help me to achieve time normalization.
You currently have the games as <home team> vs <away team>, it would be clearer if it were <away team> at <home team> (with the time zone indicated, preferably eastern time).
My plan was to UTC-ed all the time and present them to the visitor based on their local timezone (so no need to convert PST, EST, or even worse for international visitors).
But the concept of <away team> at <home team> is definitely better! Thanks a lot!
So I guess I'm basically agreeing with the author. If you want to build a salable product, then focus and do it. But if your really just screwing around because this stuff is neat and it's what you like to do, then call it a hobby and don't worry about it. At least that's what I'm trying to convince myself to do.
Staying simple had helped to get it shipped.
Edit: if anyone's interested, here it is. https://play.google.com/store/apps/details?id=com.mhillsyste...
Sometimes a side project really is just a side project. You do it, you're proud of it, and you move on. I love those kinds of projects.
I started my side project in about 1993. I lost it completely[1] some time around 2000 and decided to rewrite it starting in 2008. Since then I'm still only 20% of the way through it (I probably got to 60% before).
Right now it's dropped way down the priority list below: wife, 2 year old daughter, full-time job, part-time degree (now complete!) and startup (that will hopefully take over from full-time job some time in the future).
1. Long story, I had a backup but the primary and backup were destroyed independently within hours of each other such was my luck.
Rather than implement a LOGO interpreter I wanted to do it a slightly different way to learn some useful stuff along the way, so I decided to implement robots as a program running on a virtual CPU. I designed an instruction set and corresponding assembly language, wrote a processing engine that could run multiple robot programs at once, wrote an assembler to go from assembly to compiled robots. Next on my list was a compiler that would do LOGO -> robot assembly.
There was a strong ARM/RISC influence to the instruction set/assembly language as I'd been using Acorn Archimedes machines at college in the early 90's.
I then built a control system on top of the game engine that would run all of the robots against each other in all combinations and provide a league table of which robot came out best. The end goal was to stick it all on a website and allow people to submit their own robots and see where they came in the league table. They'd also be a discussion forum on programming tips/tricks, and for people to write compilers that would take other languages as produce appropriate assembly language.
I definitely learned a lot whilst doing it first time. One of the assignments in my first year at University (Comp Sci) was to design an instruction set for a basic CPU that would be able to be programmed to perform a certain bunch of tasks. It's quite easy when you've got programming experience in Z80, 6502, 68000, x86 and ARM, and you've designed/implemented at least one of your own already.
Other things I remember that were useful were writing my own PRNG (there was an instruction to get a random number) so that I could have individual PRNGs for each robot (and the game engine) all derived from a single 'game' seed number which made each game (with random starting positions) deterministic and repeatable.
Creating a two-stage assembler (thanks to years of typing "FOR loop% = 0 TO 3 STEP 3", "[ OPT %loop", etc), compiler design (for LOGO -> assembly), maths for doing intersection of two lines, intersection of a line and a circle, integer instructions, floating point instructions (and implementing this in a portable way), etc.
In '94 I'd hacked both an X GUI and a linux SVGAlib interface onto it so you could watch the games play out. Later on I'd even came up with a dissertation proposal that used it as a fitness function for robots created by genetic algorithms but decided against it after discussion with the tutor (no less than Dr Noel Sharkey who later sat as a judge on the UK TV version of Robot Wars).
I may finish it one day, and 10 people may remember the game and be interested in writing robots for it, but that bit doesn't matter one bit. It's my side project and I kind of enjoy doing it (or even just thinking about it) probably more than the feeling I'd get if it was finished and done.
Nothing is uploaded at the moment (I'll start to add things once I've cleaned it up and sorted it out) but I've created a github repository for it https://github.com/alexkus/robotarena if anyone wants to watch it and keep an eye on the (slow) progress.