Normal Computing
Software Engineer, Terminal Interface
Автоматический пересказ вакансии на русском. Полный текст на языке оригинала и форма отклика — на сайте работодателя.
Инженер, который возьмёт на себя терминальное приложение Normal CLI — продукт для AI-ассистированной верификации в полупроводниковой отрасли. Отвечает за информационную архитектуру, интерактивность и кроссплатформенное поведение TUI, а также за локальный session-клиент и его API.
Задачи
- Владеть терминальным приложением: информационная архитектура и взаимодействие — команды, навигация, ввод и редактирование, потоковый вывод, прогресс, ревью, прерывание, восстановление, пустые состояния и ошибки
- Обеспечивать корректное и быстрое поведение на разных платформах: терминалы, шеллы, мультиплексоры, удалённые сессии, macOS, Linux, Windows и WSL, неанглийский ввод и IME
- Развивать локальный session-клиент и участвовать в формировании интерфейса структурированных событий, который он потребляет
- Определять стандарты для контрибьюторов: паттерны команд, пикеров, прогресса, вывода и ревью
- Обеспечивать отзывчивость под нагрузкой: стриминг, отмена, конкурентность и поведение event loop для длительных процессов
- Поддерживать целостность продукта между поверхностями: общая терминология, состояние, аутентификация и переходы между терминалом и остальным EDA-продуктом
- Развивать архитектуру большого Textual-приложения в сторону переиспользуемых компонентов и чёткого разделения UI, доменной логики и runtime
- Обеспечивать покрытие snapshot- и visual-regression тестами, упаковку, установку, self-update и тесты для безопасного изменения интерактивного приложения
Требования
- 4+ года опыта в software engineering, включая значительный опыт разработки и поддержки интерактивного терминального приложения, TUI или сопоставимо насыщенного локального клиента
- Опыт работы с существующей кодовой базой и её улучшения без поломки работающего
- Понимание сложностей терминального ПО: клавиатурный и текстовый ввод, производительность рендеринга, неоднородные возможности терминалов, обработка процессов и сигналов, различия между платформами
- Сильные инженерные фундаментальные знания; приложение написано на Python и Textual, но глубина и инженерное суждение важнее опыта с ними
- Опыт event-driven или асинхронных приложений: стриминг данных, локальные процессы, отмена, конкурентность, персистентность и восстановление после частичных сбоев
- Высокая планка к деталям интерфейса: дефолты, сообщения об ошибках, пустые состояния, формулировки
- Умение отлаживать сквозь границы — от нажатия клавиши в эмуляторе терминала через приложение до runtime
- Опыт тестирования интерактивного ПО и понимание, какое поведение стоит фиксировать
- Комфорт в работе с исследователями и доменными экспертами, способность освоить незнакомую техническую область
- Прагматичное суждение о том, когда инвестировать в долговечную абстракцию, а когда выпустить простое решение
Условия
- Работа в applied AI компании, создающей фундаментальные hardware и software решения для полупроводниковой индустрии и AI-инфраструктуры
- Команда распределена между New York City, San Francisco, London, Copenhagen и Pangyo
- Позиция в product engineering команде, которая также строит desktop workbench, web-продукт и agent orchestration
- Equal Opportunity Employer: инклюзивная среда для всех сотрудников
- Возможность запросить разумные accommodations для людей с инвалидностью
Навыки
- Python
- Textual
- Rich
- prompt-toolkit
- curses
- Bubble Tea
- Ratatui
- Ink
- PTY
- terminal emulation
- multiplexers
- SSH
- tmux
- WSL
- Electron
- visual regression testing
- IME
- internationalization
- self-update systems
- EDA