The story start when I have difficulty when I was working inside one of our class in college. It is a collaborative class that all kind of experts work on the same project, and of course for game development students we decide to make a AR game.

Well, the dream always big and great, but when it get into reality it always not going to be fun, especially when you are making a game and work in the game industry. Game is a hard thing to work on , both on the programming side and the art side. All members in the group will just get stressful every day and every week. Plus when you know that you are the only programmer in the team, I think this could be really stressful. I would just admit I stress out the first day of class despite I already have some experience using the game engine Unity.

Because for whole semester I was so stressful, so I did not remember much what I did for the class in details. In fact, I did everything except the art for the project. It was fun and I did learn three things from this class.

  • Never repeat yourself. (Duplicate code)
  • Design Patterns.
  • New technology is dangerous.

Never repeat yourself, and the duplicate code is a significant part to be a good programmer Because duplicate code will cause copy and paste everywhere around the place. In architecture wise, copy and pasting the code everywhere is not a good structure and it could cause an issue if the program gets huge enough that you could not maintain the whole software. I am not saying I made the duplicate on this project, but what does annoying me is that I have nearly created everything the same over and over again in each project I have made from scratch. For instance, a scene manager could probably create for all kind of game because what kind of game does not need to switch a scene? Even a bad game will still need to switch scene from menu to gameplay.

Design Patterns is the key for extreme programming and maintainability for software architecture. Prevent duplicate code is also the topic include from the design patterns. I would recommand people read ‘Head First Design Pattern’ that are written by Eric Freeman and Elisabth Robson. The example code was written in Java and as everyone knows that Java is a good programming language when people need to explain OOP concepts.

Otherwise, there is another option book ‘Design Patterns’ written by a bunch of good C++ programmers, for people who feel more comfortable with using C++ than using Java.

At this time, one of my instructor [Billy Garban](https://www.linkedin.com/in/billylemonzest/) from Academy of Art University suggests me to watch [Handmade Hero](https://www.youtube.com/user/handmadeheroarchive) series that host by [Casey Muratori](https://twitter.com/cmuratori) . I have watched a few episodes what make me impressive is how he can teach people in such a way that everyone could understand, including me. I like when he talks about what makes him special is his productivity to the company. (I will discuss a bit more 'productivity' in another post.) This changes me think differently instead of just thinking about algorithm and data structure. What makes you different than other programmers?

Then I realize, being productive is important and advance as a programmer. Then I figure out that how to make myself productive as much as possible is to write your own tool. The reason is simple, the majority of people that are not programmer might think of the most time programmer did is to type the program itself, but I believe this is a huge mistake. In fact, the time spending on thinking is way more than time spent on actually typing. So writing your own tool is saving your time when you think.

Here is a list of some frameworks or libraries that I have created for my own use during my college years. All of them have a different purpose, and some of them were written in various programming language. These are also the evidence that these tools did save me a lot of time when doing my school work. Think back in the past, when I start the project from scratch I nearly will have to keep my eyes on the project all the time. But I after I have made my framework ‘JCSUnity’ I hardly dot not have to do any school work anymore.

JCSCos2x

JCSLOVELua

JCSPyGm_Lib

JCSUnity