The Busch and Pereira laboratories at the Salk Institute for Biological Studies are seeking a Scientific Programmer I to be an integral member of the research lab focused on cutting-edge research in computational biology through the development and application of machine learning models, using computer vision and deep learning. Example applications include pose tracking for the quantification plant phenotyping for bioengineering efforts to combat climate change. The Scientific Programmer I will work in the lab and interact directly with faculty, student/postdoctoral researchers, and technical staff both to provide technical support and to contribute to scientific discussions. The Scientific Programmer I will work alongside researchers to design and implement machine learning systems, provide expertise in algorithm development and optimization, and maintain codebases for research software. The Scientific Programmer I will assist researchers with the management of scientific data by analyzing, designing, developing, coding, testing, debugging, and managing scientific computing infrastructure such as virtual servers, database servers, operating systems, scientific software packages, applications, and software development environments. Works individually or in a team environment to design, implement, and support novel software tools, cloud-based systems for scientific data analyses and reporting. May provide computational support of scientific projects. May also conduct applied research and develop novel methods to enhance the institute's computational infrastructure. Review researcher's needs and requests and develop proposed solutions for system enhancements based on requirements. Participate in the development of and ensure adherence to project schedules and milestones. Break down project requirements in programming sequence by analyzing requirements; prepare a workflow chart and diagram using knowledge of computer capabilities, subject matter, programming language, and logic. Builds and codes software patches, applications, and/or modules using languages such as C, C++, Python, Matlab, and web frameworks Creates detailed test cases and documents all programming and systems changes to include flowcharts, layouts, diagrams, charts, code comments, and revision dates. Prepares operating instructions, compiles documentation of program development, and analyzes system capabilities to resolve questions of program intent, output requirements, input data acquisition, programming techniques, and controls. May build add-on modules using API's and application program language. Document and publish software and tutorials on project website.
The ideal candidate will have a strong background in software engineering and sufficient familiarity with academic research to translate academic research code into production quality, stable and documented code. Candidates will be expected to demonstrate their research software engineering skill set by implementing a solution to a coding exercise representative of the types of tasks they will encounter in this role.
- Provide technical expertise and guidance for improving the performance and quality of research software code bases.
- Develop graphical interfaces and/or application programming interfaces (APIs) for machine learning models and data processing pipelines.
- Lead and co-lead the design and construction of increasingly complex research software systems using modern DevOps and MLOps practices.
- Review and respond to software engineering inquiries during research planning.
- Maintain knowledge of current and future software development tools and techniques, programming languages, and high-performance computing.
- Implementing new functionality in existing software packages.
- Testing new software that is developed.
- Refactoring code to improve efficiency and modularity.
- Keeping up with industry best practices for software engineering, as well as new tooling and infrastructure.
Researcher Support (15%)
- Develop documentation and tutorials for existing and new software tools, including preparing screenshots, videos, and interactive notebooks.
- Document existing codebases to meet style guidelines, including enforcement of static typing, docstring formats and inline examples.
- Provide support for users, including answering issues, troubleshooting, and developing patches or additional documentation.
- Presenting results and current progress in lab meetings and to colleagues.
- Contributing to writing of scientific papers.
- Presenting work at industry and academic conferences.
- Proficiency in programming languages used for numerical and scientific computing: Python, and C/C++.
- Experience with modern DevOps practices: version control, unit testing, CI/CD.
- Basic experience with machine learning, deep learning, computer vision.
- Basic experience with web and cloud development (backend preferred).
- Ability to learn new systems beyond area of core knowledge.
- Experience with MLOps or infrastructure and tooling for ML practitioners.
- Experience with data science applications.
- Experience with GPU or concurrent programming experience on workstations and computational clusters.
- Experience with frontend programming experience (web or desktop graphical interfaces).
- Experience in an academic research environment.
- Bachelor’s degree in a relevant discipline (Computer Science, Statistics, Bioinformatics, Engineering, Neuroscience, or a related field with strong computational emphasis etc.), and one year of related experience, or an equivalent combination of combined relevant education and research or software engineering experience.
- Advanced degree in a related field. Online courseware or university-level coursework in software engineering, deep learning, computer vision or DevOps/MLOps.
SKILLS AND ABILITIES
- Demonstrated ability to program effectively in one or more languages.
- Ability to write readable, well-organized code that can be utilized or extended by other individuals.
- Ability to organize complex software repositories and datasets.
- Ability to debug, diagnose problems, and implement fixes for complex software.
- Highly organized, effective at multitasking, adept at juggling changing priorities.
- Proven ability to work both independently and also as part of a collaborative team.
- Excellent communication skills, both oral and written.
- Strong interpersonal skills, including tact, diplomacy, and flexibility.
- Demonstrated ability to interact effectively with diverse groups.
- Demonstrated skill in establishing and maintaining effective working relationships with personnel at all levels.
- Ability to read scientific literature and implement methods described in papers.
- Ability to perform statistical analysis of large datasets.
SPECIAL CONDITIONS OF EMPLOYMENT
- Must be willing to work in an animal-related research environment.
- Satisfactory completion of the Institute’s background investigation.
- Must be willing to sign a confidentiality agreement.
PHYSICAL REQUIREMENTS/MENTAL ACTIVITIES/ENVIRONMENTAL CONDITIONS
This position will be constantly adjusting focus, grasping, hearing, keying, seeing, sitting, talking, analyzing, calculating, communicating, reasoning, reading, writing and working inside.