Memory Tools Engineer
Santa Clara Valley (Cupertino) , California , United States
Software and Services
Posted: Oct 19, 2020
Weekly Hours: 40
Role Number: 200191107
The Performance Tools team is looking for developers with a passion for memory and resource optimization to enhance, adapt, and innovate in creating tools for the next generation of software and hardware on Apple's platforms. Memory is an important and limited shared resource, making intelligent, developer-friendly tools critical for identifying optimization opportunities. Core responsibilities include working with Apple performance optimization engineers, Swift and Objective-C runtime teams, and frameworks teams to introspect memory usage across Apple's ecosystem. Apple's Developer Tools group provides the tools that allow dreamers, makers, and shapers to design, write, build, debug, profile, and deploy software for iOS, macOS, tvOS, and watchOS. Tools development is a uniquely rewarding area as the software's users are other developers, and it's an opportunity to influence and improve the productivity of developers all across the world who make life-changing ideas a reality. The Performance Tools team primarily focuses on creating profiling and optimization tools, using runtime analysis techniques to instrument and introspect software to understand and improve it. The team is responsible for tools such as Instruments, Xcode's Memory Graph Debugger, command-line analysis tools like `heap`, `sample`, and `atos`, and runtime libraries that improve the built-in debugging experience on Apple's platforms. Tools for analyzing app behavior, improving responsiveness, and minimizing power/memory consumption are critical to making great user experiences across Apple's platforms.
- macOS or iOS development experience
- Excellent verbal and written communication skills
- Expertise in C, proficiency in Swift and/or Objective-C
- Strong problem solving and debugging skills with lldb, gdb, or other interactive tools
- Software profiling and optimization background
- Experience implementing or improving development tools highly desirable
We are looking for developers who are passionate about making software better! Core interests should include areas such as profiling, optimization, reverse engineering, debugging, summarizing large datasets, and data visualization to effectively describe complex systems. You should have an interest in all levels of the system with the ability to combine OS concepts like virtual memory usage and page faults to language-level tools such as heap closures and runtime reflection. With every new technology, framework, or product there's a need for tools that can expose important underlying system behaviors. As a result, it's key that you have a strong passion for learning! You'll need to work effectively with Apple teams of different engineering disciplines, anticipate problems early, and communicate expertise clearly. You should be able to drive development projects independently, collaborating with other teams to innovate in solving engineering challenges, and iteratively developing solutions to complex problems. Responsibilities/Opportunities:
Innovate and improve the usefulness of Apple's core memory analysis tools
Acquire a deep knowledge of the layout of VM, heap, and runtime data structures on Apple platforms
Present your work to developers across Apple or in larger forums like WWDC
Help investigate the impact of upcoming technologies on Apple's platforms and operating systems
Develop strategies for detecting memory regressions in continuous integration systems
Apply graph theory and UX design to real-world memory tools!
Education & Experience
Bachelor of Science in Computer Science, or equivalent experience.
- Experience with mach, C++, and binary analysis tools is a plus.
- If possible, we'd love to see an example of your relevant work, such as a personal project or open source contribution.
- If you believe you have relevant skills which are not listed on this posting, please share that information via a Cover Letter.