Python is gaining importance at CERN, and the areas of application are expanding from mere scripting to developing user interfaces and server-side code, and from numerical analysis to big data analysis and machine learning.
You will join:
- The Beams Department (BE), responsible for the beam generation, acceleration, diagnostics, controls and performance optimization for the LHC and its injector accelerators.
- The Controls Group (CO), responsible for developing the controls infrastructure used to operate these particle accelerators 24 hours a day.
- The Applications Section (APS), a dynamic and quality-oriented agile team of engineers, responsible for the mission-critical user interfaces and server-side applications used by the accelerator physicists and operators. (https://be-dep-co.web.cern.ch/content/aps-applications).
As a Software Engineer in the APS Section, you will promote Python in the accelerator community, providing excellent tools and encouraging best practices. In particular, you will:
- Specify the Python distribution and recommended third party libraries that the system administrators will install on all supported Linux platforms.
- Select and customize a coherent suite of DevOps tools for Python (e.g. dependency management, building/packaging, a package repository, testing and CI/CD, deployment, monitoring, etc.).
- Design and develop first-class Python bindings to the Accelerator Controls system, using REST or gRPC, or native bindings to existing C/C++ libraries.
- Collaborate with the different user communities and elaborate best practices on how to use Python to develop controls applications for the CERN Control Centre, and how to use Python for scientific computing, big data analysis and machine learning.
- Develop common components and libraries in support of the above use cases.
- Help new users to become productive by recommending suitable online training material, and complementing it with CERN-specific guidelines and documentation.
- Contribute your developments back to the open source community.
- Mentor more junior software engineers who will help you tackle the above tasks.
- Proven experience working in a software engineering position and mentoring a small team.
- Proven experience with modern software engineering, applying quality assurance techniques and DevOps practices.
- Extensive professional development experience using Python 3 and its ecosystem.
- Good professional development experience with C and C++ on Linux, using GCC or Clang/LLVM.
The following are considered an asset but not mandatory:
- Experience with Java, the Gradle build system and Maven repositories.
- Experience of UNIX systems programming and operating systems concepts.
- Experience with statistical data analysis, big data analytics and machine learning and related frameworks, e.g. scikit-learn, TensorFlow and Spark.
- Active participation in open source projects, with accepted contributions.
- Development of application software in Python and C++.
- Knowledge of programming techniques and languages both for application software and scientific/big data computing.
- Knowledge and application of software life-cycle tools and procedures including DevOps.
- Testing, diagnosing and optimization of software.
- Communicating effectively: expressing opinions, ideas and suggestions with conviction and in a logical/structured manner; keeping to the point; delivering presentations in a structured and clear way; adjusting style and content to the audience; responding calmly and confidently to questions.
- Building relationships: relating well to all people regardless of category/level within the Organization; showing a sincere interest in the concerns and perspectives of others.
- Achieving results: driving work / projects along and seeing them through to their conclusion; delivering prompt and efficient service taking into account customer needs.
- Demonstrating flexibility: readily absorbing new techniques and working practices; proposing new or improved ways of working Instigating and promoting change as an opportunity for organisational development.
- Spoken and written English with the ability to draw-up technical documentation and to make oral presentations.
- Knowledge of French or the willingness to acquire it rapidly would be an advantage.