July 6, 2015

Finishing personal projects

A new idea or project always seems to come to mind, sometimes during the middle of another project. The new idea or concept in my mind always forces me to follow a set of stages to understand or flesh out the idea. Which in turn, causes me to put aside my current project for a bit.. which when the previous project is forgotten.

So when a new idea pops in my mind while doing something random throughout my day, I generally will write it down in my notes with a related link or something else that got me to that train of thought. This generally helps me get back in my mind the same thought process for further inspection and possible development.

The problem generally occurs when I come up with an idea while in the middle of a project and I feel the need to rush out the idea into a product or a functional process as soon as possible. This may derive from a fast moving market that a good idea can quickly help you shine as a developer or maybe I just have programming-attention-disorder. But mostly, I think that I like to see something come about from an idea or concept that I had. The process of being able to envision the final product at the beginning phase of a new idea and then attempting to develop it.

Granted it is not always a good idea to look so far ahead that you skip some steps to get there, or do them hastily that they end up biting you in the ass later. Which can happen if you don’t plan some things out at least a little bit.

Looking far ahead can be a good thing though. It can help you predict future problems you may encounter later on and attempt to solve or avoid them in the first place. My issue is when I layout a few pieces of a project and then jump straight into coding. It turns out that often I am able to make smart decisions with certain aspects of the development process, but at other points, I get too far with a poor development choice. Then I end up having to reevaluate the project and do some rewriting or I have to devise a work around, both of which are a waste of time when I could have planned out the process beforehand.

Most recently I have started development on a simple messaging-based Android application. I had a simple idea and this time, I forced myself to layout certain features that I wanted to implement and what services that I wanted to interface with. It has been quite a smooth journey so far. The only issues that I have encountered have been ones regarding my lack of knowledge in Android development, or learning some of the services such as Firebase that I am using on the back-end.

Another issue that seems to impede a projects further development is my gradual lack of interest, or a peaked interest in another idea. In my case, this also may come about because most of my amateur projects are not very complex and therefore fairly simplistic to development. I also tend to read a lot of articles about general technology and computer science related topics. In doing so, I find that I want to implement something that I read about or maybe I have a new idea that I would like to try out with a new API. This tends to get me off track from a current project if I have one at the time.

Now, I do still believe if it is a small project, it can be good to get a break from any other current project at hand. For instance, while working on my Android application, I came across this article. In it, the author describes a simple virtual machine that could compile a very basic ISA with a static array as a stack all in a little bit of C. Just finishing up a computer systems class last semester at University, I was intrigued and decided to do the same thing but with Rust instead.

(Aside) Rust is a new systems programming language created by the Mozilla team (rust-lang). I have found its development and programing language design choices to be very interesting so I decided to take a dip and test the waters with this simple VM implementation. You can see the finished product here: devincarr/sim.

Overall, I was able to get back to the larger project at hand after I was done with this little experiment, thankfully. One of the things that I think helped me get back on track was that I have planned out small little incremental stages for the Android application instead of viewing the whole project as a large application that needs to be completed. I limited myself to provide incremental changes and applying little features here and there which has helped keep the project fun and enjoyable every time I open up Android Studio. Hopefully soon I can get around to leaving Alpha stage with enough features that I feel that it is a functional product ready to see a larger viewer base and begin the human bug testing phase, or Beta as some may call it.