Alright, I’ll admit it… Even for a placeholder name on a side project it’s pretty terrible, right? Well, my apologies. So, if you made it to this post you might be wondering what ProjectXyz is and why I started it up. From a high level, I started working on ProjectXyz so that I could have a hobby programming project to tinker with and I figured I’d blog about my adventures in bringing it all together. I plan on making this a mini-series documenting some of the things I’m learning or experimenting with, so this will serve as the intro to the series.
Before we get too far, here’s the link to the GitHub site: https://github.com/ncosentino/ProjectXyz
Why Have a Side Project?
Here’s the main thing I want to talk about in part 1 of this series: Why should you have a side project?
From my experiences in high school and university, I found that having a side project that I could code in was probably the best way that I could continue to learn. It’s a low stress activity that encourages you to be highly creative. You can involve as many other people as you want, or work on it completely solo so that you can minimize external stress and maximize your own creativity. It’s your project, so you have the freedom to do what you want.
I leveraged various small side projects to learn things like how sockets work or how I’d try and structure a multi-tier application. I was able to work on refactoring large amounts of code and learn how to use source control to my advantage. Was there a design pattern I wanted to learn about implementing? Great! Then I could try and find a way to incorporate it into my projects. The goal was always about trying to implement new things and not about cutting corners to try and deliver something to an end user.
Once I started work full-time, I gave up on my programming side projects. I started up this blog which has been fun and I try to take on as much work for my career as I can because I actually enjoy my job… But I stopped coding my own hobby projects. I’ve found that I’m missing out on two major things as a result of that:
- The ability to experiment with patterns, technologies, and frameworks
- The ability to get really creative and try out completely new things
Work has been a great opportunity to learn, but it’s learning out of necessity. Myself or my team will hit blocks and we have to work together to try and overcome them. It doesn’t give me the opportunity to go completely into left field to try something new out. Having a side project gives me a bit of freedom to try and learn all sorts of really neat things.
So… Why ProjectXyz?
Okay, well, if you mean why the name… Then I don’t have a great answer. I wanted to start coding but I didn’t want to waste time thinking about a name. I’ll think of something better later, I promise.
Otherwise, you might be wondering why I decided to build ProjectXyz to be what it is (or, what it will be). ProjectXyz is the back end (i.e. not the pretty graphical part) for a role playing game, and I’ve played around with this kind of thing before. I like playing games like this, and I’ve had a lot of fun trying to create a game like this in the past. As a result, I can really focus on what I’m building and not trying to figure out what to build. I’m not pouring energy into wondering “how do I solve this great big popular problem with this piece of software?”, but instead I can just get as creative as I’d like. It’s not about “What does the customer want?”, but instead, I can ask “What do I want to make?”.
The things I’m looking to try out with ProjectXyz (to start with, at least) are:
- More LINQ usage
- Coding by interfaces
- API design
- Dependency injection and IoC
- Maybe I’ll look into Autofac?
- TDD and coded test designs
- Moq for mocking my classes
- … GitHub! To make some publicly visible code.
As I work through ProjectXyz, I’ll write more posts on the various things I’m learning as I go! Check out the GitHub page and drop some comments!
(The second post in this series is here)
This Post Has 3 Comments
Working on real projects used by real people will really make your programming skills tuned.
I agree with you on this. I think there’s a lot to learn from working on projects where your user base is creating priorities for what you should build. It’s incredibly important to have something like this so that you learn how to prioritize what you’re building and learn how to deliver useful software. However, I get a lot of this experience by having a career as a software developer shipping software to real users.
On the flip side, I also think that by constantly trying to keep up with demands of a user base that it’s easy to to miss out on plenty of other things. With this series, I’m going to be exploring why it’s not only important to have your real-life useful software to work on, but also to have something as a hobby to experiment with. Just to re-phrase, I think that having the opportunity to work on something open-ended in addition to something that solves problems for real users will allow me to grow my programming skills in different areas.
Thanks for stopping in, and thank you for your perspective!
Pingback: ProjectXyz: Enforcing Interfaces (Part 2) - Dev Leader Dev Leader