Can contribute simultaneously to different projects.
Is capable to work simultaneously in different projects with little impact due to context switching. Uses it to its advantage in order to utilise dead times and or blocks in projects.
Efficient in time management and task prioritising.
Can work towards set milestones and targets and pursues them. It regularly achieves targets and will promptly identify deviations acting accordingly to correct them.
Assists in the design of libraries and or applications.
Can extent high level designs further in granularity of details satisfying specifications. Will likely pass them to more junior members of the team and supervise its development.
Implements and extends code reflecting the requirements and following the design given. Proficient at one language and capable of writing quality code in different languages. (No bugs)
Commercial/industrial proven experience has given him/her the necessary knowledge to write reliable, fault tolerant and efficient code. Has processed lessons-learnt through his/her career and has built a solid base of knowledge that places him/her in a comfortable position when delivering code into production environments.
Writes production quality robust code and understands interaction, races and emergence. (No bugs)
Visualises his/her code as part of a larger system, not in isolation, and considers and controls complex non-linear effects from the code in the solution.
Is comfortable with parallelisation and asynchronous flow. (No bugs)
Can design parallel code, asynchronous flows and synchronisation. Has control over it and can apply it where necessary to improve performance, concurrency and or user’s product experience.
Is aware of and controls memory and resources use when writing code, thinking in the solution as a whole.
Visualises his/her code in interaction with hardware and network limitations, not in isolation, and considers and controls the use of resources with the objective to optimise the execution in the production environment.
Identifies and solves logical problems and can define/map business logic to algorithms and functions robustly.
Can identify knowledge gaps in more junior developers and will actively try to fill them and or indirectly motivate the peer to work on them. Oversees their progress and motivates them to continue growing. Identify performance problems in more junior developer and helps the peer to overcome them.
Understands data structures and can design them for general uses. Masters serialisation of data for perpetuation and transport.
Understands and employs Unit testing when necessary.
Is comfortable writing unit tests in its own code or in someone else code. Can proof without loss of generality a given unit.
Is comfortable with compilers and linkers.
Understands compilers and linkers and can solve/debug building problems easily (eg. Dependencies, recursive dependency, etc).
Understands document structures of solutions.
Can design efficient document structures for new solutions written in different languages. Optimises versioning in repository, creates easily understandable (by third parties) structures.
Knowledge & Skills
The post holder should have relevant qualifications in computer science.
As a snapshot, we are interested in the following technologies
- Object Oriented (class and prototype based), Event-Driven, Imperative, Procedural & Declarative programming paradigms
- Dependency injection.
- Have a good understanding of unit testing.
- Data structure design, modelling and representation. Information metrics, graphs and trees and algorithms. Data perpetuation and transport.
- MySQL and MSSQL
- Windows, Linux and Unix OS. Windows desktop UI programming
- Be familiar with Jira, Confluence, Mantis, Git, CVS
- Be familiar with MVC programming for desktop and web.
- Frameworks: .NET, Mono, QT, Laravel, AngularJS, Sencha, Ext JS
- Asynchronous processing and parallelisation.
- Revision control and issue tracking.
- Waterfall, agile and lean development.
**Good verbal and written communications skills are necessary. Having previous experience of dealing with clinical safety would be highly advantageous**
Problems addressed involve the interpretation of cases and evaluation of requirements, requiring constant interaction with colleagues across Departments. There is a requirement to devise solutions involving some originality, drawing both on procedures and acquired knowledge and skills, mostly in response to demands of others.