Один из вопросов, которые я часто задаю на собеседованиях, - это разработка библиотеки обработки логов:
Вам нужно написать библиотеку для обработки логов в следующем формате:
метка_времени<TAB>сообщение
Библиотека будет передана другой команде для дальнейшей поддержки и улучшений, поэтому поддерживаемость и расширяемость являются самыми важными требованиями.
Библиотека должна поддерживать следующие операции “из коробки”:
фильтрация
подсчет
гистограммы
Первоначальная версия также включала некоторые языковые и фоновые особенности, которые я никогда не включаю в свою оценку, потому что считаю, что они ставят кандидата в положение, когда ему нужно угадать мои ожидания.
Один из вопросов, который я действительно люблю задавать во время кодовых собеседований, звучит так:
Дан непрерывный поток слов, словарь на диске и стоимость чтения с диска, создайте потоковый процессор, который возвращает true, когда слово существует в словаре, при этом минимизируя затраты на чтение с диска.
Пример:
Недавно читал несколько технических дизайнов и заметил распространенную ошибку при написании пользовательских историй и требований — предположение решения. В предположении решения, для меня основная проблема в том, что, когда я включаю часть решения в требования, это ограничивает мою способность к инновациям, так как я ограчиен решением из требований. Во многих случаях я наблюдал улучшение своих дизайнов, когда сосредотачивался на том, что нужно клиенту, а не на выполнении требований, связанных с моим первым и, возможно, не самым удачным решением.
Интересно наблюдать, как любое начинание, где внимание является одним из ключевых метрик или драйверов, независимо от размера компании, оказывается в том же самом “адовом котле” жажды внимания и оптимизации под него. Даже небольшие одноавторские блоги, которые учат нас быть лучшей версией себя, инженером или чем-то ещё, подвержены этому. Многие из них, которыми я пользовался, со временем стали для меня “энергетическими вампирами”, постоянно требующими моего внимания.
“Энергетический вампир” — это человек, после общения с которым вы чувствуете себя опустошённым как эмоционально, так и умственно. Это не клинический термин, а скорее разговорный ярлык, который описывает тип личности, истощающей вашу энергию. И это не так уж загадочно, как может показаться.
Каждое интервью я провожу для старших инженеров-программистов в Amazon. В этих интервью я задаю более-менее одни и те же вопросы. Один из них предполагает добавление логики кэширования для улучшения результатов. Я заметил, что кандидаты часто совершают две ошибки, которые мешают им выделиться как профессионалам:
Они не знают или не обсуждают условия, при которых кэш работает наилучшим образом. В частности, как распределение частоты запросов влияет на производительность кэша.
Они не знают стандартную библиотеку выбранного ими языка программирования.
В этой статье мы попытаемся разобраться с этими проблемами.
Та же самая Joscha Bach: Life, Intelligence, Consciousness, AI & the Future of Humans | Lex Fridman Podcast #392 подкаст, о котором я упоминал в предыдущем посте AI, люди, деревья и грибы: одно и то же программное обеспечение, разное оборудование, вызвала другую цепочку мыслей. Йошка говорил о том, как наши нейроны всегда работают, используя доступные здесь и сейчас данные. Этого достаточно для построения сложных систем, таких как человеческий мозг. Работая вместе, нейроны формируют части, ответственные за память, обработку изображений, шины данных и т.д. Но в конечном итоге каждый из них индивидуально работает только с данными, предоставленными другими нейронами. Аналогичным образом нейронные сети в GPT представляют собой просто перемножение матриц, соединенных друг с другом, образуя память, внимание, генерацию и т.д.
Изучение идеи о том, что все живые существа обладают духом или способностью работать с нейро-сигналами.
Недавно я слушал Joscha Bach: Life, Intelligence, Consciousness, AI & the Future of Humans | Lex Fridman Podcast #392, где Йосча и Лекс обсуждали различные идеи о сознании, неврологии и ИИ. В какой-то момент они заговорили о способности всех типов клеток обрабатывать нейро-сигналы. Ключевое отличие заключается в том, что нейроны могут обрабатывать данные гораздо быстрее, на больших расстояниях и взаимодействовать с большим количеством соседей одновременно.
Всё началось давно. В школе я увлекался киберпанком, читал и смотрел про хакеров, виртуальную реальность и т.д. Нейромант, Джонни Мнемоник от Уильяма Гибсона, Лабиринт отражений от Сергея Лукьяненко, Матрица и Газонокосильщик были моими любимыми книгами и фильмами. Затем я забыл об этом, пока не произошел взрыв генеративного ИИ и… несколько серий Рика и Морти. В одной серии Морти играет в VR-игру, где он начинает жизнь с новорожденного без воспоминаний о жизни вне игры и живет целую жизнь, пока не умирает в возрасте 60-80 лет. В другой серии он застревает в игре, где его сознание раздроблено на части, действующие как целый мир независимых агентов.
Amazon известен своей культурой письма, с которой я познакомился позже в своей карьере. Чем больше я писал, тем легче было применять подобный подход к другим аспектам разработки программного обеспечения.
Введение
Когда я пришел в Amazon, я перешел из компании с совершенно другой культурой, особенно в плане письма и процессов разработки. Изначально мое отношение к ориентированной на письмо культуре Amazon было скептическим. Однако на протяжении следующих семи лет я постепенно принял и совершенствовал стиль письма Amazon.
В последние несколько лет компании пытаются всё подключить к Интернету, от дверных звонков и фотокамер, до машин. И с этим есть несколько проблем.
В наше время каждый маленький кусочек технологии пытается быть подключенным к интернету. Обычно это предлагается большими, а не такими уж большими компаниями как некий вид удобства, чтобы вы могли контролировать всё отовсюду. Такой подход имеет свои плюсы, но и минусы тоже. Блестящее технологическое будущее, полностью подключенное к сети, не кажется мне таким привлекательным, как нам говорят.