About Me
Josh Cooper - Game Developer / C++ Programmer
Howdy! I’m just a guy holding a BS in Computer Science from the University Of British Columbia, and two college diplomas from NBCC. In college I studied electronic game design, and information technology, and a whole lot more in university.
My experience is spread over 20 some years, 4 professional projects, and roughly 25 personal, academic, and FOSS projects. Projects varied and ranging from Unity and Unreal Engine games, CLI utilities, psychology tools, medical imaging software, and back to the realm of gaming with various mods in the form of scripts and plugins.
I commenced my journey in the era of DOS and Sierra Entertainment. I fell in love with gaming experiences playing King’s Quest VI: Heir Today, Gone Tomorrow (1992). I fell in love again (read: became obsessed) with Diablo (1996) from Blizzard North. My development journey began in the early 2000’s with my early experiences with the scripting capabilities of the GoldSrc engine (Half-Life; though my experience was first in 007: Nightfire). A few years later I began playing around with level design for Counter Strike: Source.
When I reached high school I began actively trying to learn programming. The online resources in 2002 were less than ideal for me to learn from at age 14. So, I looked to books to try and bridge the gaps in my understanding of C/C++ programming. While I wouldn’t properly start learning C++ development until long after high school in 2013, it was a mere two years later (2004) that I began to learn Visual Basic and then Java. Later in 2013 I took to C++ like a moth to a flame. In 2013 I had college instructors, VS2013, and a functional C++11 implementation. It wouldn’t be another 4 or 5 years before I started learning CMake, but that’s a story for another time.
Looking for my CV?
My Skills - Now available in defined arbitrarily form!
Programming90%
Software Architecture80%
Debugging69%
Adapting/Learning73%
In my journey through programming, I've faced challenges head-on and embraced opportunities to learn and grow. From my early days grappling with basic concepts to handling complex projects with confidence, I've continually pushed myself to improve.
Over time, I've built a solid foundation of skills and problem-solving abilities. Through hands-on experience and ongoing learning, I've developed proficiency in various programming languages and techniques.
Today, I approach programming with a blend of experience and enthusiasm. I enjoy the process of solving problems and am always eager to take on new challenges and expand my expertise.
In problem-solving, I prioritize software architecture, laying a strong foundation for scalable solutions. Throughout implementation, I remain open to future requirements, ensuring flexibility and adaptability.
When considering potential future needs, I assess the cost of implementation and necessary refactoring, prioritizing pragmatic accommodations while balancing time constraints.
In summary, my approach to software architecture centers on foresight, flexibility, and pragmatism, enabling the creation of adaptable systems that meet current and future needs efficiently.
Debugging is difficult by nature. "..If you write code as cleverly as possible, you are, by definition, not smart enough to debug it."
-Brian Kernighan
There are many tricks I know, and many I don't. I know when to inspect blocks of memory, or objects, or merely variables. Resorting to logs can be useful at times, particularly when you're dealing with complex systems. A good programmer knows where to look, or how to find out if he or she doesn't.