Job Wekesa Nyongesa is a software engineer with over 8 years in the industry and a passion for web technologies. His work experience ranges from startups to Fortune 500 companies.
I am proficient in Java, C++, JavaScript, C#, Ruby and Python. Of these programming languages, I feel most comfortable working with Java, C# and C++. In my previous role, I worked mainly with Java to create applications that worked across multiple platforms. I also used C++ to develop a new operating system that worked with the applications I engineered. Using C#, I was able to improve my productivity when developing web-based apps and software.
A previous employer tasked me with creating an internal online learning and training program for employees. The purpose of the program was to make sure all employees received proper training on certain topics, including customer service, compliance with legal requirements and workplace ethics. I began by researching other similar training systems to figure out what worked and what didn’t. Next, I used Java to code a simple program, which I then used to upload training courses.
After testing the simplified program, I added elements to make it more engaging to employees, such as games and interactive quizzes. This program was well-received by the employees of the organization, and their customer service success rates increased by 25% after all team members took the required course.
There was a project where we were tasked with reworking the browser client application. It used an imperative, object-oriented approach with many of the custom controls getting much of their functionality from a growing inheritance hierarchy. We took this as an opportunity to shift to a more declarative approach. After the conversion, we saw a dramatic decline in state-related bugs as we were no longer manually updating the interface in response to events. This had previously been the most common type of user-reported bug.
We did, however, have to make adjustments in a few key places. In more dynamic, performancesensitive portions of the application, the caching mechanisms we implemented to prevent excessive recalculation were becoming overly complex. We simplified this by switching back to an imperative approach to updating the component.
For gaming projects, my level state and player character are generally implemented as singletons. For enemy creation, I’ll use a factory that will produce differing enemies based on some inputs. Additionally, the bullets being fired by the character will be implemented in an object pool to avoid performance hits from excessive instantiation and garbage collection. If the game is more complex, I may switch to a compositional model such as Entity-ComponentSystem. The system functions would then leverage dependency injection to better separate concerns and increase testability of the game logic.