This job might no longer be available.

Senior Programmer (Generalist)

Ubisoft
Singapore, Singapore
3 months ago

Apply

Job Description

Company Profile
Ubisoft Singapore opened its doors on July 2008 and is the 18th Ubisoft internal development studio. The studio comprises a core team of Ubisoft veterans as well as a fast growing development team - ranging from recent graduates to industry professionals.

In the short span of seven years, the full-fledged development studio has already been involved in the production of some major titles such as Assassin’s Creed Brotherhood, Assassin’s Creed Revelations, Assassin’s Creed 2, Assassin’s Creed 3, Assassin’s Creed IV – Black Flag, Assassin’s Creed Rogue, Assassin’s Creed Unity, Assassin’s Creed Syndicate, Ghost Recon Online, Ghost Recon Phantoms, Prince of Persia: the Forgotten Sands and created independently Teenage Mutant Ninja Turtles: Turtles in Time Re-Shelled on Xbox Live Arcade and Playstation Network.

With the focus of creating and developing new high-profile AAA game titles, the expansion of the studio is expected to be rapid as it strives towards its goal of becoming 300-people strong in the years to come.

Role Summary
The Senior Programmer supervises some parts of the engine, as defined by the Lead, and makes propositions concerning the choice of specific engine modules. He/she can validate specific engine features and contribute to enhancing their performance and the game quality. He/she also coaches less experienced programmers.

Responsibilities & Requirements
Analysis
• Has good knowledge of the language used by the development team, object-oriented development (most likely C++). Produces robust meta programming solutions.
• Relevant experience working on AAA titles, current and next-gen consoles
• Is able to identify problems in the engine or middleware, and propose technical solutions or improvements.
• Evaluates and compares engine or middleware strengths and weaknesses.
• Is able to identify problems in the engine or middleware, and propose technical solutions or improvements.
• Evaluates and compares engine or middleware strengths and weaknesses.
• Analyzes requests and raises flags, foresees potential issues, proposes different options.
• Is able to use reverse engineering when documentation is lacking in order to understand the purpose of a piece of code.
• Modifies (cleans up) existing code to improve its design, structure, and/or clarity without changing the external behaviour.
• Is able to research and experiment with unconventional techniques and new approaches to contribute to technology advances for his project or studio.

Software Design
• Has a practical approach to software design (does not get lost in paradigms) and plays an important role in team software design reviews.
• Keeps code efficiency in mind from the start and choose optimal solution based on the available information.
• Uses data modeling to structure and organize data.
• Uses templates & design patterns appropriately.
• Designs modules or components to be integrated in a complex system.
• Is consulted on major software design decisions for the project.

Implementation
• Participates in the definition of coding standards & methods used on the team.
• Has strong knowledge of the advanced features of the software development environment and associated tools (i.e. Visual Studio, Perforce...).
• Has strong knowledge of the strengths, weaknesses and limitations associated with the different platforms.
• Is able to integrate large-scale modules or components (could be from other projects) while minimizing the impact on the rest of the programming team.
• Encourages technology sharing across projects.
• Determines when refactoring is necessary and / or appropriate and knows how to do it well.
• Performs code reviews for peers (detects errors, design flaws).

Debugging
• Is comfortable with debugging unfamiliar code.
• Debugs using assembly / memory
• Is able to debug without the use of debug info, trace memory overwrites (ex: can use PIX snapshots for debugging, can debug problems related to multithreading access).
• Uses unconventional solutions when needed to solve difficult problems.
• Uses Performance Analysis tools to determine areas that need optimization (profiling).
• Is able to write custom tools for memory; CPU load profiling etc.
• Uses cutting-edge technologies at low level (Assembler, SPU for PS3) to make optimizations.

Additional Information

To all recruitment agencies: Ubisoft does not accept agency resumes. Please do not forward resumes to our jobs alias, Ubisoft employees or any other company location. Ubisoft is not responsible for any fees related to unsolicited resumes

More jobs at Ubisoft