1-3 years of experience
Concerned about your lack of experience? Learn More...
Employment Type:
Full time
Job Category:
Software Development
Software Engineer
(This job is no longer available)
Stanford University | Stanford, CA
Grad Date

Not sure what types of jobs you are interested in?

Explore Jobs
Based on Your Education

Follow This Company

Job Description

Software Engineer , 4P3 , FTE , Exempt , 2 Year Fixed Term

School of Engineering, Department of Bioengineering

The Bioengineering Department in the School of Engineering seeks a Software Engineer to join its team. The Software Engineer reports to the PI: Kwabena Boahen.

The Brains in Silicon Laboratory of Dr. Kwabena Boahen, located at Stanford University in the Department of Bioengineering, is designing neuromorphic chips to decode neural signals into motor commands for fully implantable neuroprostheses and multichip neuromorphic systems to endow machines with cognitive abilities, together with software infrastructure to test, configure, and interact with these unconventional embedded computing platforms in real-time. These projects are funded by the National Institutes of Health and the Office of Naval Research.

We seek to hire an accomplished software engineer with expertise in algorithms, graph theory, and embedded or scientific computing. The focus of this position is to map spiking neural networks, specified in easy-to-understand Python scripts, on to our custom hardware platforms that can emulate millions of neurons in real time. Doing so will require learning and understanding the hardware's features and limitations, developing neural-network to hardware mapping algorithms in C , and refining the network specification language to make it more intuitive for end users. The candidate will lead a team including two software engineers focusing on real-time interaction and on automated testing. Achieving seamless software-hardware interoperation will require creativity in providing an elegant interface, teamwork in improving the existing system architecture, and smartly deciding when and where performance is critical to perform optimizations.

We desire a person with a powerful desire to build neuromorphic systems for use by others and a strong drive to facilitate their development and deployment. The successful candidate will lead a team of three software engineers (including the candidate) working closely with the PI to refine and realize his vision for this innovative technology.


Primary function of this position is to improve the software infrastructure (written in C ) that maps Python code on to our custom neuromorphic hardware, and enhance system functionality to better leverage the features of the hardware. This requires professional software engineering, algorithms, and scientific or embedded computing expertise.

Optimizing and building on software infrastructure to enhance the experience of using neuromorphic chips developed in the lab. This will involve working closely with the PI and other software and hardware engineers at Stanford and its collaborating institutions worldwide.
Gaining a solid understanding of neuromorphic hardware through literature and documentation reviews, collaboration with lab memebers and studying and creating neural networks mapped onto neuromorphic hardware designed in the lab.
Designing and developing network-mapping algorithms and code that leverage additional features of existing and new hardware in a manner that provides network scalability, bandwidth efficiency and system stability..
Profiling code to uncover performance bottlenecks and refine or revise the software architecture to address them.
Generating and conveying new ideas, extending and modifying specifications, and communicating results to faculty and staff, orally and in writing.
Leading a team of software engineers to implement real-time interactive applications (i.e., GUI-based visualization and control) and APIs that enable end-users and developers to create and maintain a neural network's organization on neuromorphic chips as well as visualize neural activity the hardware is generating.
Leading a team of software engineers to implement automated test suites to verify and validate at unit, integration and system levels.
Leading the production of validated, verified codebase that is employed by staff and advanced students for lab research.
Leading the deployment, training and documentation of new and existing software products that enable the use of existing and future neuromorphic hardware developed at Stanford. Education & Experience

A BS in Computer Science (or related discipline) and at least two to three years experience as a software engineer is required. A MS in Computer Science (or related discipline) is preferred. Excellent C coding skills are required. Experience architecting and writing large software programs and a background in scientific or embedded computing are strong pluses. Excellent oral and written communication skills are essential for this collaborative project.


The following areas of expertise are all relevant to developing neuromorphic systems, and experience in any or all of them is considered a strong plus.

Strong understanding of software architecture to create sophisticated network mapping heuristics, expand and maintain existing code, and develop strong automated testing to assure modelers of a validated system.
Experience using industry-standard tools for software design, testing, and optimization. Experience working in a collaborative software engineering position with contributed code totaling over 10,000 lines.
Familiarity with compilers or other graph-based optimization code.
4Good grasp of basic neurobiology and neural network models.
Excellent written and oral communication skills.

Critical Competencies

The candidate needs to have experience in software engineering and must create an innovative approach that complements the neuromorphic system's hardware architecture. Examples:

In comparing two numerical algorithms that solve the same problem, the candidate notices a disagreement. The candidate needs to carefully research why this happened, addressing the problem from many different angles: problem with the code, problem with the low-level computational function used, or an idiosyncrasy with the hardware.
After completing a component and testing it, some of the users report a loss of speed or variation in results of the new version compared to the original. The candidate must be able to fully explain and quantify what happened, solve the problem if software-related, or suggest changes to the firmware if necessary.
The candidate is expected lead the project's software thrust and must therefore be able to generate innovative software engineering solutions, and convey his or her ideas clearly and convincingly to other members of the team.

Needs to develop a complete understanding of neuromorphic hardware's architecture to come up with proactive solutions that cut to the heart of the problem.
Needs to exhibit good judgment and strong independence in making technical decisions, such as when to use existing open-source code and when to develop new code, when to trade elegance for speed, when to seek a general solution, and when to develop a "good enough for now" solution.
Needs to be able to understand when a decision could impact others and discuss with the team when appropriate.
Must carefully design a sufficiently broad test-set that will address correctness within the software, and correctness in translating to hardware. The lab currently has a significant amount of communal knowledge of the hardware capabilities, and this should be put in a more rigorous automated test framework to expose both software and hardware failures.
The candidate needs to make astute technical decisions that deliver the high level of functionality and performance required for the team to meet its goal of emulating millions of spiking neurons. Examples:

A particular API design can provide better performance but would be more difficult for others to use. The trade-offs must be carefully evaluated and the choice weighted correctly. Opinions of others should be actively sought to achieve a broader perspective.
Neuromorphic systems are expected to evolve over time. The candidate should be capable of creating software that targets the current hardware while not making architectural decisions that severely limit future use.
User experience will be greatly enhanced if the candidate is successful in improving integration of the neuromorphic system's software and hardware. By making it easy for neuroscientists to simulate large-scale spiking neural networks and neuroengineers to implement implantable prosthetic chips and endow machines with cognitive abilities, the candidate will play a critical role in achieving the Brian in Silicon Lab's goal of advancing Neuroscience, Medicine and Engineering.

The candidate will be expected to give presentations on his or her vision for neuromorphic systems to team members, faculty, and users on an on-going basis; to participate in meetings and discussions among a core group on a weekly basis; to interact with engineers, postdocs, and graduate students on a daily basis; and to facilitate adoption of neuromorphic systems by investigators in bioengineering and neurobiology within the Clark Center and beyond.

Other Requirements

Position required to work during normal business hours
Successfully pass a background check (Criminal, Education, and Employment Verification).

Stanford University is an affirmative action, equal opportunity employer. Thank you for your interest!

About Stanford University

Stanford Engineering has been at the forefront of innovation for nearly a century, creating pivotal technologies that have transformed the worlds of information technology, communications, health care, energy, business and beyond. The school’s faculty, students and alumni have established thousands of companies and laid the technological and business foundations for Silicon Valley. Today, the school continues to seek solutions to important global problems and educate leaders who will make the world a better place.