Many people say that learning to code is like learning a new language. Foundationally this is true; however, this is only a portion of what makes a great programmer. To truly be a great programmer you have to understand how the computer is thinking. This requires a very analytical and curious mind. With computers, there is always a logical explanation to everything that happens. If there is an error, it’s likely due to miscommunication between the programmer and the computer or a misunderstanding of how the computer is executing a task it was given. A programmer’s job is less about writing code and more about being able to solve problems. Students need to learn the coding language, but they also need to be taught how to analyze the execution of code through hands on debugging.
As a student I had both positive and negative experiences. I was completely turned off of a course because of a professor I had in college. I received very low grades for something that was based off visual inspection subjectivity and less about tangible objectives. This has impacted me throughout my teaching as I strive to remove any amount of subjectivity from my grading. I am grateful that my professors in college did not hold our hands. The students were taught to think independently, solve problems and were encouraged to take risks. Even in failure there is lots to be learned.
As a professor of programming, my job is to make students self-sufficient and resourceful. They need to be able to think independently and debug code on their own. Holding a student’s hand can assist initially to get them through the early stages which can be overwhelming; however, as they progress through their education, they need to be weaned off any dependencies and instead taught to solve problems independently.
As a programmer, efficiency, clarity and organization of code is what made me successful. I emphasize these traits with students when teaching them to program. As a teacher, these same traits have flourished into strengths, although in different ways. I believe routine and stability are essential to students success. When we have unknowns in life it adds extra stress and doesn’t allow for proper allocation of time. Having a plan from the start that is well organized and thought out can help both the teacher and the students manage their time properly. That being said, as a teacher you also have to be analytical of your students and adapt to their needs as a whole. Not every class is the same and although something worked out well one year it may not work the same in subsequent years.
Explaining technical or theoretical concepts can often be hard to understand. As a student I found I would often phase out when being lectured for extended periods of time and I needed some sort of interaction or visual stimulation to stay focused. I understand this now as a teacher, just because you speak about something doesn’t mean you are teaching it. Teaching requires explanation combined with experimentation. You can read the instructions to a board game, but often times you never really understand it until you've played a run through. Analogies are incredibly important to me in this regard.
It’s of upmost importance to stay relevant with programming. I take great pride in being able to learn any new technology. Research and development is a high priority for me personally and the best part about teaching with technology is the fact that it allows me to become a lifelong learner.
In game development we complete a post-mortem at the end of a project. This is used to evaluate the positives and negatives to take away from the process to learn and improve for the future. I complete this activity with each of my courses which allows me to continuously improve upon both my teaching style and delivery. This has allowed me to adapt my classes to the needs of the students in addition to experimenting with my personal style for teaching to learn what does and doesn't work for me as a teacher.
My teaching philosophy very much pulls from my coding philosophy and the way I think in general. I’ve learned how a computer thinks; however, students’ minds are a lot more variable and complex. I strive to connect with the students and understand the way they process information to better deliver the content they need to digest. My analytical mind assists with this and allows me to focus on what the students need as learners. I am a lifelong learner and love every minute of it.
Throughout this course, students are presented with an overview of the video gaming industry. Through lecture and lab activities students discover many of the concepts involved in gaming such as types of video games, the roles of members of a gaming team, the game development life cycle and the technical components required to produce high quality video games. Other topics examined are the impact of playing video games on ones’ life, legal and ethical considerations, and professional opportunities that are available in the gaming industry.
In this course, students learn the fundamentals of a current programming language used in the Gaming Industry. Topics addressed include; standard software design methodologies, custom design of simple 2D games, and various programming techniques.Through the use of hands-on exercises, by means of C++ programming, students create and debug games which implement variables, functions, conditions, loops and classes.
In this course, students are taught intermediate programming concepts available through the use of C++. Students learn about bitwise operations, file streaming, exception handling, and string manipulation. Students are also introduced to recursive functions and learn how to solve programming problems recursively. Through lab and class activities students create projects which interact with a game controller and save/load data from text files.
This course introduces students to concepts of render programming through the use of shaders and graphics libraries. Throughout the course students utilize lab time and in class activities to explore the stages of the graphics pipeline, communication of data between the CPU and the GPU and Normal & UV data for the purpose of creating 3D objects within game worlds. The concept of converting 2D screen pixels to 3D scenes is explained preparing the students for a greater understanding of graphics programming and the render programmer role.
Throughout this course, students explore the concepts of networking and its uses within games. Through lecture and lab exercises, students will analyze the way network traffic is processed using sockets from one device to another. Students will discuss the use of different network topologies and its effectiveness for games based on their genre. Server architecture design for security and data integrity are emphasized when implementing client server communication through Remote Procedural Calls (RPC) using HTTP requests. Students use a current game engine to communicate from clients to a server and create a multiplayer game experience.
In this course students are formed into teams and must work together to ensure a solid prototype is produced, showcasing many of the skills acquired from previous courses in the program. Students prepare game design documents (GDD’s) and create playable prototypes to prove out their games design and functionality. Students set up automated build systems for their projects and work collaboratively using online documentation, project management and source control software. Students perform peer code reviews using web interface tools to collectively provide feedback to each other as well as maintain the coding & projects standards supplied. All work performed in this course is designed to emulate a real world game development studio. The hands on lab time provides the students with an opportunity to experience, and solve, the day to day team collaboration issues that arise in development.
In this course, students learn to work with various game console peripheral devices and how to establish proper Interfaces for users in games. The intent is to learn how to control various aspects of games through connected devices and design effective User Experiences. Students work with controllers and other emerging technologies to enhance users experiences within game worlds and create proper user interfaces for the appropriate application within games.
Students learned to use the Unreal Engine creating various games while learning key features of the engine such as Networking and Artificial Intelligence. Students Learn to program using a combinations of C++ and Blueprints within the Unreal Engine. String manipulation, Object Oriented Programming, Component Based Programming and modular architecture are emphasized.
In this course students continue to learn many functions and features of various operating systems with emphasis on Microsoft Windows and Linux operating systems, and are also introduced to networking fundamentals. Through the use of hands-on exercises using PC systems, the student carries out activities that emphasize the similarities and differences between these operating systems. Topics include hardware, software, the Graphical User Interface (GUI) and file and directory commands. Networking basics include networking terminology, TCP/IP settings and how local and wide area network resources are accessed. Network Address Translation (NAT) router usage is emphasized.
This core course in the second semester of the Computer Networking and Technical support program. This course is designed to teach the student the fundamental concepts of the Linux Operating System. The Introduction to Linux course will introduce the student to the essentials of Linux in terms basic Linux operation,
command line, configuration, and maintenance. The course will concentrate on operation, running, and maintenance of Linux.
Completed Programming mapping for the Game Programming Course in 2018.
Completed Program Review for the Game Development Technician Program for the period of 2013-2018.
Attended the Aligning & Building Curriculum program in May of 2017. Learned about VLO's CLO's EES's, Learning Plans and curriculum mapping.
Attended the Leadership Excellence in Academic Programming program in 2019. Learned about the Coordinator role, ways to be more efficient and the duties that a coordinator is responsible for handling.
Tools Developer for Eidos Montreal
James is an amazing professor, who is passionate about programming and gaming. His previous experiences gave him the opportunity to create lessons and activities that match the gaming industry needs. His commitment to his students is outstanding. He helped me a lot, not only improving my technical skills but motivating me to achieve my goals. I am very grateful for having the opportunity to learn from this professor.
Second Year Game Development Technician Student
James is a passionate, dutiful, and dedicated teacher. When organizing his teaching material he takes great care to address the diverse needs of his students while still challenging them and covering relevant game development concepts. He communicates with his students to ensure that he is meeting their learning needs. James also demonstrates excellent knowledge of the gaming industry is able to explain complex concepts in a way that students will understand. He goes above and beyond simply being a teacher by providing one-on-one help for his students whenever possible and by otherwise directing them to the resources they need to succeed.