Comments 291
Если покажется интересным — дополню переводом некоторых из самых популярных комментариев к этому посту (с Quora).
Partially practically done. ;)
Если он пишет, «я часто веду себя как козел» — так может потому и не взяли?
Хотя надо ли нанимать звезд, даже если они те еще звездюки — насколько помню, тоже отдельная тема для холивара.
Все еще хуже, он пишет "I am often a dick", постеснялся переводить дословно ;)
На самом деле — там есть хорошие комментарии, в том числе и от гугловцев. Смысл такой: "возможно надо было подавать на product manager-а, а не инженера программиста. Потому что SE Гуглу нужны именно с понятиями".
Тема №1: должен ли программист знать алгоритмику.
Ответ (важно: мой личный, я не могу говорить за компанию): программист — да.
Никто не знает, чем придётся заниматься завтра, какой язык использовать и в какой код лезть. В гугле очень открытая внутренняя среда, и возможность править есть всего и вся, и зачастую, если не хочешь терять кучу времени, быстрее самому поправить, чем эскалировать в ответственную команду. Да блин, это еще и интереснее!
Так вот, если ты без понимания базы — легко наломать дров. Ооо, до гугл ая видел какие радостные вещи народ тянет в прод, вплоть до О(n3) ибо «да оно и так быстро». Ага. Только на тесте 1000 зверьков, а в проде 1000к зверьков. Откат, по шапке, разбираться. Особенно радовало когда взрывалось на праздниках (в обычный день ветку трогали раз или два за день, никто не замечал особо).
Если есть жесткая структура менеджер=>техлид=>тимлид=>куратор=>кодер, и ревью жесткое всеми в цепочке для каждого изменения — тогда да, можно брать на кодера кого угодно, и такие места вылавливать и использовать для обучения кодера.
Но при широкой свободе и небольших одноранговых командах — это просто невозможно, некому отслеживать. А в масштабах гугла, использование O(n2) вместо O(n*log(n)) очень и очень быстро выливается огромные затраты. Несоизмеримо большие, нежели зарплата одного программиста.
Я не HR и не провожу собеседования, но если мне вдруг станет не лень и начну их проводить — это точно будет поводом оценить кандидата как не дотягивающего до требуемого уровня.
Руководитель продукта — не обязан. Если не технический, конечно.
Тема №2: Googliness.
См.мой предыдущий пост. В целом, ((вздох) опять же напоминаю: исключительно моё личное мнение), дестабилизирующие элементы не рекомендуются в командах. А так как одиночки не нужны большой компании (люди смерты, причем, что хуже, внезапно смертны) — все в командах. А значит, нет смысла его брать — смесь двух звездунов в одном месте — гремучая и разносит всё вокруг, а звездуна и адекватного человека — уничтожает адекватного человека и остаётся опять одиночка. Ну и кому это надо?
Понятие «мемори лик» совем не то, что вы себе думаете. Утечка памяти — это не освобождаемая ни при каких обстоятельствах (кроме завершения процесса) память. у хрома, как ни странно, таковых нет. есть кеши (которые есть у всех), которые зачастую пожирают столько памяти, сколько найдут — ибо это один из самых эффективных способов ускорить многие вещи.
Юзер-кейс какой? график «загрузка памяти» низкий, или как?
Про «падать»… фокс у меня падает регулярно (правда, 53й кажись, давно не обновлял), ИЕ тоже несколько раз валил (пользуюсь крайне редко).
После помирания 12й оперы хром основной браузер — не упал у меня ни разу еще пока. Но тут как обычно, всегда можно найти способ, был бы софт. Главное — шлите репорты! Всегда легче лечить найденный баг, а не просто возмущения в воздух.
Потерять данные легко можно и после закрытия дескриптора, если не сделать fsync. А если делать fsync на каждый чих, то всё встанет колом. «man eat-my-data» — вещь, позволяющая чудеснейшим образом ускорять очень многие программы.
можно подробнее — какие конкретно полезные вещи были потеряны и в каком сценарии?
У меня стоит с десяток разнообразных плагинов, но падает огнелис в одном единственном случае — при открытии слишком большой страницы, на которой ещё есть весомые картинки. Либо если ленту новостей какого-либо ресурса скроллить пару часиков, читая посты, хотя это примерно то же самое. Причём, ввиду редкости кейса, такое происходило достаточно давно, сейчас падает ещё реже, может даже починили.
P.S. Win 7 x64, Firefox v.57.0.2 (64-бит), 8 Гб RAM.
Какой-то редкий сценарий, для меня так и вовсе невозможный: у меня на ноуте одна карта. А можно полюбопытствовать, зачем их может понадобиться переключать?
Открыть в Лисе свыше 256 вкладок.
PS а на скольки вкладках падает Хром?
Зачем вы это помните?
Значит у меня свыше 512 вкладок. Потому что на каком-то числе вкладок Лиса крашится, не знаю на каком :)
Как итог — переключаюсь очень быстро.
Зачем?
— «о кино» (википедия по актерам, кинопоиск, раздачи сериалов и т.д.)
— о БМВ (ремонт, ремонт, ремонт… ремонт и еще раз ремонт)
— о быте (от замены труб/унитаза до «продвинутой глажки»)
— о кухне (100500 блюд, обсуждения по выборам кухонной утвари)
- и конечно, о работе (WebSockets, Vue, Java, ORM, WebDriver, Photoshop, PHP, ....., ассинхронный код)
А на столе (большой, письменный, классический) стоит стац (на нем стоит лампа), мониторы висят на кронштейне, лежит клавиатура с подсветкой, мышь, лежит мягкая тряпочка (на ней лежит трубка), мониторные наушники на голове, рядом стакан с соком.
Как итог — переключаюсь очень быстро
Быстро?
Современные десктопные браузеры давно уже от мобильных заразились сбрасыванием неактивных страниц в никуда и их загрузкой заново при возврате.
Может кто знает как это отключить
А Хром просто не дает открывать столько из-за багофичи UI — у него нет прокрутки табов, так что больше нескольких десятков их не открыть.
Да, прокрастинация, всё такое, и сейчас рабочий объём — не более 200 табов, но суть не в этом.
Процесс с флэшем может и падал…
Впрочем, фф 56.0 32 бита, 2 окна, 10 табов, ровно 1 процесс.
хто его знает отчего, но вот так вот. адблок по-моему только усугубляет.
p.s.: кто нынче лучший адблок для фокса? (раз уж обновляю лиса, так и плагин по-лучше воткнуть...)
P.S. На скрине гораздо больше активных вкладок.
$ top -b -n 1 -p 5820 |tail -2
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5820 playnet 20 0 16,036g 6,530g 53820 R 39,9 42,5 3256:20 firefox
Это ProcMon, если что, он уж точно всё показывает.
Главное — шлите репорты! Всегда легче лечить найденный баг, а не просто возмущения в воздух.
Я QA. Java. Пишу AST. Код сильнейшим образом завязан на стандарты работы с браузерами. Дописал асинхронную мультипоточную многопроцессную версию двигателя. Пытаюсь запустить. Хрен мне.
Пишу багрепорты гуглу. Мне, внезапно, очень оперативно отвечают. Просят прологгировать дополнительно некоторые вещи. Потом просят мой код. Потом приходит ответ — «Chrome и его разработчики знают о том, что так должно работать по спекам W3C, но мы не умеем это делать. Сожалеем. В будущем мы конечно постараемся обеспечить поддержку».
FF — завелось с пол-пинка.
А ссылка на баг-репорт есть?
Очень интересно почитать ответ от Гугла «мы не умеем».
Найти смог только через свою почту линк с публичной частью:
bugs.chromium.org/p/chromedriver/issues/detail?id=2157#c6
Для ленивых:
Thank you for providing the details and the log file.
From the log files I see you have used a customized JAVA API, particularly for HttpCommandExecutor. You were using W3C dialect of WebDriver protocol in your code and Chromedriver 2.33 at this moment doesn't support W3C dialect.
In a future releases of Chromedriver the W3C will be supported.
В свою защиту могу сказать, что мой проект не основной, для фирмы — это вспомогательный софт. Однако без которого мы не можем нормально обеспечить качество уже своего ПО.
А теперь представьте картину: близится завершение года, была сделана так давно желанная модернизация платформы тестирования. Влита куча сил и средств. Сделано все без косяков, т.е. как того требует спецификация, и тут выясняется, что это до сих пор не поддерживается Blink/WebKit — движком! Ну а крайний конечно же я для всех вокруг. И мне же вставляют черенок в зад только за то, что кто-то хрен знает сколько времени не может сделать как нужно.
Ибо эта модель в том же FF поддерживается более года как.
Ну и да, я все же QA — увы, с чем я только не сталкивался в плане отклонения от спек в Chrome. Пока не написал им, они и тени (box-shadow) не рисовали как нужно. Баг тянулся то ли с 2012-го, то ли с 2013-го. А закрыли лишь в том году, после моего репорта.
Причем когда гуглил (как отрисовать тени у таблицы (да, UI я так же занимаюсь)), то stackoverflow мне давал варианты, от которых волосы на попе зашевелятся (если они там есть).
и тут выясняется, что это до сих пор не поддерживается Blink/WebKit
и тут выясняется, что вы до сих пор не поддерживаете самый распространённый движок. Fixed. ССЗБ.
Хром когда-нибудь таки сможет эволюционировать до того, что уже реализовано у меня, и, что требуется от него W3C спеками. Так что это правило не работает, когда речь идет о технологиях «завтрашнего дня»… для хрома разумеется, ибо лиса это уже умеет много месяцев как.
Просто смотрите, ситуация то какая?
Имеем рабочий свой софт, что жрет тонну ресурсов и тормозит. Сильно негативно для бизнеса. Бизнес таки за несколько лет дал разрешение «снести к херам» и «сделать быструю/эффективную реализацию». На это не каждый день дают ресурсы. Это раз в 3-5 лет такая возможность. Я и сделал максимально-производительно. И это уже не мои проблемы, что софт от мирового бренда больше года не может уметь работать с этим.
Это же хром себя позиционирует как «легкий и самый быстрый». Тогда почему не используют более быстрые решения? Почему с ними они не могут работать? Это риторические вопросы.
Это же хром себя позиционирует как «легкий и самый быстрый». Тогда почему не используют более быстрые решения? Почему с ними они не могут работать? Это риторические вопросы.Почему риторические? Ответ ведь на них прост: потому что никто, в том числе и вы, не позаботился тем, чтобы поддержать эти «быстрые решения».
В конце-концов Chromium — проект с открытыми исходниками, хотите, чтобы он поддержал что-то не тогда, когда у разработчиков ручки дойдут, а «прям сейчас» — шлите патчи.
Это ваша проблема, что ваш софт не работает с одним из самых распространённых браузеров. Как бы надо снимать розовые очки и тестировать. Хром виноват, что вы этого не сделали?
Двойные стандарты в действии
Никаких двойных стандартов.
Орали на IE, орём на Chrome и сейчас.
Только работать все равно как-то надо было и тогда и сейчас. Поэтому ищем костыли, фиксим, поддерживаем браузеры и надеемся что в будущем браузеры получше станут а костыли поубавятся.
Орать, что не работает — орите. Писать софт, а потом возмущаться — ССЗБ.
Писать софт
Только есть один нюанс — не соблюдение правил!
Ладно бы я написал криворуко, тогда реально ССЗБ.
Но! Нарушил не я — не мои проблемы.
Гуглу надо, чтобы он был самым-самым? Так пусть и работает он для этого, а не я. Мне он за это не платит. И это в его интересах сохранять лидерство. Пусть тогда и софт пишет лучше. По правилам!
Багрепорт я написал, информацию донес, меня услышали — долг выполнен.
Но! Нарушил не я — не мои проблемыСерьёзно? А если завтра W3C всё переиграет и правила вдруг станут совместимы с тем, что сделал Гугл, а не с тем, что написали вы — это будут ваши проблемы? Или нет?
Давайте по порядку.
- Вы совершенно сознательно под лозунгом «а зачем мне поддерживать отсталые технологии?» выбрали технологию для которой утверждённых правил игры ещё нет (последняя версия датирована, на минуточку, 21 декабря 2017 года — и это ещё не рализ).
- Зная о том, что вы используете технологию, для которой нет не только полностью совместимых реализаций, но даже утверждённой спецификации вы не проверили как и что работает в версии для самого распространённого браузера
- И после этого вы начинаете вопить о том, что кто-то кому-то чего-то должен
Извините, но так дела не делаются. Я понимаю если бы речь шла о чём-то, что стандартизовано и реализовано 10 лет назад, но bleeding edge — он потому и bleeding, что его использование — чревато.
Отвечая на ваш (и не только лично ваш) вопрос — да, если W3C переделает что-то капитально, тогда уже виноват буду я.
Я от чего отталкиваюсь, ведь эти люди, это не рептилоиды с Марса, нет, вовсе нет. Этот консорциум состоит из представителей в том числе и Google, MS, Mozilla. Т.е. владельцы браузеров, их инженеры, там вполне «сидят и принимают решения».
Я почему выше сказал, что вопросы риторические?
Потому что верю в «светлое» — при прочих равных стараюсь сводить вероятностную причину к наиболее оправданной.
Так и тут, я понимаю, что мы не роботы. Ваше (кажется) утверждение, что приняли реализацию Mozilla, а в Google надо все теперь переделывать, мне понравилась. Т.е. такая гипотеза многое объясняет (и прощает).
Проверку своего движка смог сделать только когда он был почти собран. Да, я рассторился, но опять же, не вижу причин переделывать на устаревшую модель и тратить кучу ресурсов, учитывая что последние 3-4 месяца гугл как раз планомерно доводит поддержку нужного (я по коммитам драйвера вижу).
Так что все, уже отбомбило и в целом я спокоен.
Гневаюсь только от комментариев «ССЗБ», ибо человек меня пытается «научить» не смотреть в правила, если это «мешает». А простите, тогда вообще зачем правила, если в порядке вещей будет на них забивать и делать «все иначе»?
UPD: И да, вот еще один момент, не я владелец организации. Ведь так? Только IT-инженер. И вот, допустим, я перестану делать «как предписано», а начну делать «как хочет кто-то». Потрачу бюджет и время. А оно не взлетит. При сравнении этих двух ситуаций во второй буду виноват 100% я, а оно мне надо? Так что нет, написали в правилах, я все сделал по ним и не взлетело? Вина не моя. Хватит с меня черенков.
Значит движок написан сильно так себе, если на ранних этапах нельзя было проверить базовые функции во всех целевых браузерах. Я пишу под андроид и когда встаёт задача реализовать некую фичу, которая зависит от платформы, то стараюсь найти все граничные случаи сразу. На андроидах, начиная от 4.х
То, что оно не взлетело — ваша и только ваша вина. Вы не проверили, поддерживают ли все браузеры то, что вы хотите. Орать про правила, когда всем известно, что они нарушаются — бессмысленно.
Ммм, если ваша цель — переложить на кого-то виину и лапки поднять, то всё логично. Если ваша цель — получить работающее ПО, то нет, это нифига не логично. Я бы ссаной метлой погнал чувака, который рассказывает, что он всё сделал правильно, а этот гуглхром не умеет работать с его кодом. Цель — получить работающее ПО.
Инструкция есть? Есть. Сделал по ней? Сделал. Не работает? Не мои проблемы! Так и только так. И пофиг что-там думает пустоголовый руководитель — есть нормальные фирмы. К примеру, одна «очень известная страховая Европы» (куда меня брали) — им гораздо видней, чем вам, какая у меня квалификация.
Почему не там сейчас? Потому что со старого места сманить не смогли — у меня и тут руководитель не бездарь. Узнал причину, расстроился, но сказал «хорошо, значит ждем, когда они там у себя все починят».
Ибо «мануалы/инструкции/контракты» — все, что «задокументировано», оно всегда важней любого самодурства. Без разницы от итогов. Ибо за нарушение уже «договоров» — вот за это «суды/санкции/и т.д.».
Инструкция есть? Есть. Сделал по ней? Сделал. Не работает? Не мои проблемы! Так и только так. И пофиг что-там думает пустоголовый руководитель
лукавите?
уверен, что если бы такой контракт был у робота — уволили бы даже робота
В нормальном мире, если не совпадает инструкция с реальным поведением — виноват автор «того, к чему инструкция», либо «автор инструкции». Но не тот, кто следует инструкции.
Или вы считаете, что собирать самолеты, делать операцию, рассчитывать топливную смесь надо не по инструкции?!
Вам уже неоднократно указывали, что в частном случае, который Вы приводите как проблему — "договоренность" Вы видите там, где Вам ее не обещали.
Но причина Вашей боли находится уровнем выше. Я намекал на то, что для выполнения инструкций у нас уже есть компьютер, человек нужен, чтобы их создавать. Придерживаясь здравого смысла и опыта, часто зафиксированных в виде практик и договоренностей, конечно. Если Skerrigan не компьютер, то он автор инструкций, следовательно надо что-то делать.
По поводу увольняют… Снова не тот уровень. Бизнес увольняет только по одной причине — бесполезность (или вредность в экстремуме). На самовольстве или, чаще, более мягком его варианте — умении принимать самостоятельные решения — построены не только героические рассказы, но и ежедневная работа всех творческих профессий.
По поводу самолетов — проектируют люди, собирать, уверен, скоро станет дешевле роботами. По поводу рассчета топливной смеси не уверен, что иммется в виду, но я бы предпочел рассчет автоматом, а не человеком, у которого, как Вы знаете, на вкус и цвет…
Ну а хирург… поверьте, хирурги могут очень сильно обидеться, если Вы им такое заявите...
Или вы считаете, что собирать самолеты, делать операцию, рассчитывать топливную смесь надо не по инструкции?!Не знаю насчёт топливных смесей, но знаю насчёт хирургов и самолётов (так получилось что у меня оба родителя этим занимались). Отработав всё «строго по инструкции» можно как угробить человека и запороть самолёт — легко. С человеком — там вообще всё сложно, недаром хируги такие деньги получают, а с самолётом попроще: засунув в двигатель ротор с максимальным допусков в статор с минимальным — вы скорее всего просто-напросто работоспособную конструкцию не получите. Её либо заклинит, либо в попытке таки заставить всё это взлететь вы сточите лопатки настолько что у вас ресурс упадёт процентов на 20.
И да, как верно тут уже заметили, кой-какие вещи уже в обоих случаях уже можно делать строго по инструкции — что означает, что в этих местах держать человека (тем более — высокооплачиваемого человека) более не нужно и можно поставить робота.
Пока не написал им, они и тени (box-shadow) не рисовали как нужно. Баг тянулся то ли с 2012-го, то ли с 2013-го. А закрыли лишь в том году, после моего репорта.Вот за это — вам можно только спасибо сказать.
Причем когда гуглил (как отрисовать тени у таблицы (да, UI я так же занимаюсь)), то stackoverflow мне давал варианты, от которых волосы на попе зашевелятся (если они там есть).К сожалению 99% разработчиков либо вообще не создают багрепорты, либо создают багрепорты, где описывают не требования спецификаций, а свои, ничем не обоснованные, хотелки.
Потому одного создания багрепорта через crbug.com, увы, недостаточно: чтобы пробиться через естественным образом возникающую «защитную реакцию» нужно достаточно много усилий.
Вот за это — вам можно только спасибо сказать.
К сожалению… блин, я бы с радостью этим вообще не занимался.
Но наш продукт, это CMS-комбайн, от блогов, до магазинов на нем написано. И для продукта не допустимо, чтобы что-то рисовалось не так. И когда такие проблемы возникают (рисуется что-то плохо, не так, как дизайнеры задумывают… или что-то не работает), то всегда пинают меня. Все и всегда. Что наши разработчики, что «головной отдел» «забугром».
Мне очень больно.
Как итог — за годы проведенной работы, у меня проф-деформация. Ломаю все, до чего дотянусь. Банкоматы ломал. Счет в банке ломал. Машину сломал. И т.д. Порой так, что ну очень хитрожопые баги вскрываются.
Из недавнего:
если совместить новую версию драйвера с патчем от Yandex, в определенном порядке, то ломаются java проекты. А если сделать сборку иначе, то не ломаются.
Надо бы и Яндексу «передать весточку».
Так я и думал. "мы не умеем это делать" оказалось вашей чересчур вольной интерпретацией.
Именно поэтому важно подкреплять пруфлинками рассказы в духе "общался с разработчиками гугла, а они там не очень", чтобы можно было посмотреть и посудить самому.
Пояснения тут: habrahabr.ru/post/345756/#comment_10590812
Я вижу, что имплементация Chromedriver отстает от актуального стандарта. А причем здесь разворот деревьев и компетенция программистов?
Вы ожидаете от них, что кто-то будут овертаймить по ночам, чтобы запилить необходимую вам фичу в продукте, за который вы Гуглу ничего не платите?
А причем здесь разворот деревьев и компетенция программистов?
Не при чем. Если внимательно прочтете ветку, то сможете увидеть с чего все началось:
— был тезис «нашел баг, отправь баг-репорт»
— я на этот тезис написал свой комментарий о «неудачном опыте».
Отсюда и пошел суб-тред.
Вы ожидаете от них, что кто-то будут овертаймить по ночам, чтобы запилить необходимую вам фичу в продукте, за который вы Гуглу ничего не платите?
Это мощная отмазка. Под неё можно подвести почти любые «причина-следствие». Гугл обязан. Ровно, как и все остальные, держать свой софт в актуальном состоянии.
И вообще, чего это сразу делать меня тираном, что требует овертайма по ночам?
Вы ведь не в курсе чем местный "
У них есть обязанность выпускать драйвер. Этот драйвер имеет значение планетарного масштаба. Ибо он для всего человечества предназначен. Ровно как и драйвер от мозиллы. Так что вы не правы, мы платим гуглу за этот драйвер.
Ибо не будет нормального драйвера -> не будет нормального уровня качества веб-сервисов (под самый популярный браузер) -> это в первую очередь в интересах гугла иметь нормальные тулзы. Иначе под хромом будет вакханалия, а не работа веб-сервисов.
Мне тоже знакомо это чувство, когда создаешь баг-репорт, а он висит годами с низким приоритетом и приходится писать костыли на своей стороне.
А еще я часто бываю с другой стороны, когда заводится много баг-репортов на мой проект. Приходится расставлять приоритеты, которые не всем нравятся, но нельзя же все и сразу.
Однако демотивироваться и переставать репортить баги не стоит. Когда баг зарепорчен, разработчики хотя бы в курсе, что он есть, и когда-нибудь до него доберутся. А если другие люди столкнутся с той же проблемой, то смогут его заплюсовать, подняв его в очереди на имплементацию.
А, простите, своей попой, увы, нет — ибо в данном случае «стучат по мне», если я не обеспечиваю нужный контроль качества. И когда за подобное «стучат» скоро как 5 лет к ряду (да, в марте будет 5 лет, как я работаю все там же QA), то как-то слишком агрессивным становишься в подобных ситуациях (хорошо, что вы меня не видели в момент ответа гугла — я чуть в стену не запустил свой монитор… у меня очень знатно горело).
Перечитываю этот тред и складывается ощущение, что я просто «выдрессированная собака»… надо что-то делать с этим в своей жизни.
Жизнь она такая. Когда меня так накрывает — я иду и чиню сам.
Когда могу — пушу в апстрим. Когда апстрима нет — обидно, но не выходит. Пару патчей digium отказался принимать — так пришлось заморозить и изолировать кусок, и накладывать патч внутри на каждый свежий секурбилд
Это всё же не Старая бобрая 11.49, но уже и на хлеб мажется, и на вкус терпимо.
Не пробовали подаваться в Гугл? С врагом эффективнее всего бороться изнутри.
- Меня лично заинтересовало, что он не знал про деревья\графы и смог написать Homebrew. И очень интересует, знает ли он о них теперь (думаю да).
- Мой опыт — если отравитель, после двух бесед, не признает наличия яда — тянуть нельзя, приходится прощаться.
Вполне допускаю, что не знал терминологии — ну так блин, задавать вопросы же можно! Я точно на собеседовании задавал тонну уточняющих вопросов, просто чтоб понять о чем идёт речь, я на русском-то не всегда знаю терминологию, а уж английские термины и подавно не все.
Вообще, собеседование ведётся чтоб смотреть как человек думает над решением задачи. К слову, что-то мне не верится, что задача была «инвертируйте двоичное дерево».
2. А если признаёт сразу, но поведение не меняется? К слову, поведение поведению рознь. Вообще, имхо, умение адаптации поведения важнее, для хорошей командной игры. Даже вечные ангелы могут задостать :D
- Я верю, что он не лукавит и технологии позволяют сваять простое, но нужное, на первых этапах карьеры. И по той же причине уверен, что теперь он знает гораздо больше и мог бы пойти в Гугл, если бы не устроился в Apple.
- Конечно я имел в виду признание, как процесс, а не словесный результат. Один из показателей процесса, кстати, наличие вопросов. С теми, кто не умеет задавать вопросы — тоже приходилось прощаться, увы. Успокаивает, что за 25 лет таких случаев по 2 каждого. Иначе надо было бы увольнять из наставников самого себя и насовсем, а не эти четыре конкретных раза.
- Но статья, кстати, кроме личного момента (мне скоро предстоит процесс устройства на работу, впервые в жизни), интересует как маркер — многие ли считают, что профессионал должен думать не только об алгоритмах, но и о пользователях
В гугле для этого есть NALSD (Non-Abstract Large Scale Design) шаг, где требуется именно спроектировать решение для задачи. Прекрасно показывает о чем и как думает человек, отталкивается ли от «что делаем» или пытается приткнуть всеми силами «как»
P.S. Табличка над дверью в отдел автоматизации: Мы увеличиваем производительность труда
А в чем собственно проблема? Открыл Кормэна, открыл Сейджвика — посмотрел и сделал. А по структурам данных есть шпаргалка по большим О. Тем более:
А) Как показывает… гхм… личный опыт: Бодрые ответы на собеседовании про алгоритмы и большие О потом никак не коррелируют с их применением. Также тащат не самые оптимальные алгоритмы
Б) Вообще эти асимптотические оценки вычислительной сложности мягко говоря бывают писаны вилами по воде. Те же хэш-таблицы обещают операции за константное время, но как правило в Волшебной Стране Розовых Понни, в реальности же наихудший случай О(n) наступает куда чаще чем хотелось бы.
В) Ну и да. Это все будут разговоры о заезженных алгоритмах, но мне кажется что программистов обычно набирают не для того что бы они переписывали стандартные библиотеки. Мне всегда казалось что программистам платят деньги за новые программы и алгоритмы. Ну вот в моем, например, случае итоговая сложность порядка О(n^6) это еще хорошо и большое достижение — ну вот такой вот мерзкий класс задач, так что разницу между деревьями и хэш-таблицами никто и не заметят (вообще заметят, только многомерные деревья, только хардкор).
А так то да. Знание теории вещь конечно необходимое, но к заучиванию теорминимума это отношение не имеет
При этом даже знающие могут начать попытки интегрировать по разрывной фукнции.
Просто где знающий _может_ налажать, незнающий _точно_ налажает.
Ну я думаю формальное знание интеграла не является достаточным условием спасения от того что решение разойдется.
А самое главное — Вы никак не проверите: Знает он или не знает с помощью листочка и ручки за 15 минут.
Тем более интегралов много, а численных способов еще больше: Чего спрашивать то надо? Я вот и не вспомню формулу Симпсона — она мне просто не нужна, у меня последнее время сплошное Монте-Карло, а формулу трапеций мне кажется практически любой сможет вывести на обывательском уровне.
Ну т.е. глубину Вы никак проверить не сможете, в лучшем случае только по верхам пройтись сможете, но это ничего не гарантирует.
Ну мне кажется, что разрывные функции должны как минимум быть интегрируемыми по Лебегу, даже такие, как функция Дирихле, например, а некоторые из них вполне себе будут интегрируемы по Риману на сегменте. Но вообще IRL все задачи невыпуклые, а все функции разрывные, так что в любом случае будет грустно и все будут лажать :-)
Ну и важно помнить, что результаты телефонного и скрининга ХРом доступны, так что не стоит думать, что если кандидат заявляет что знает как устроен GCC изнутри, и на телефонном интервью это подтвердил, то на очном его будут просить найти ошибку в сортировке пузырьком.
Если честно я уже чего только не видел, особенно на этих многоуровневых собеседованиях. На люки, например, натыкался несколько на точно, при этом я видел в живую треугольные люки :-) Гномы какие-то попадались, просили возвести 2 в 32 степени, мыши какие-то.
Или например после долгого скрининга по всяким регуляризациям в методах оптимизации или там хитрым вопросам по ML, на следующем этапе всплывали ВНЕЗАПНО например контейнеры C++ или еще какая фигня (например, потому что такое было в нескольких местах, и внезапно потому что… ну потому что внезапно).
Так шо я даже хз. Я уже перестал понимать логику современного рекрутинга.
Это все косяки менеджмента, причем ползучие.
Например давно-давно был у меня пространный случай: Меня 2 часа опрашивали по книги Рихтера, т.е.
1) Да реально последовательно перебирали оглавление книги. Зачем? Почему именно Рихтер?
2)Да. Вообще я шел не на .NET погроммиста. Шел я на того, кого обычно называют Algorithm Engineer. ИМХО тут все же должны быть акцент явно не на вопросы по конкретной технологии, конкретного языка.
3) Потом уже, я случайно наткнулся на собеседовавшего в LinkedIn: Забавно, но на тот момент это было первое его место работы, причем работал там он меньше года, вообще чувак оказался заметно младше, но уже Сениор, но вскоре ушел, причем он вообще за все это время нигде больше года не задерживался и везде Сениор.
Вообще это все странно выглядит, вот прям все: Скороспелые сениоры сразу после универа, текучка (ну вот не отпускают просто так ведущих сотрудников), странные собеседования. При этом конторы вообще-то не Рога и Копыта
Тот самый случай, который я называю прощёлком ХРов
Организации рождаются и умирают за 1 год в огромном количестве.
За год можно выйти на хороший уровень, но начинают многие с джунов и оутсорса, так как не разбираются в предметной области, а только в маркетинге.
Джун за пол года идет вверх, штат растет, джун переходит в разряд сеньеров и берет на работу более обученных программистов (хотя бы своего уровня). Вот и всё. Нет тут прощелкивания, быстрый рост и то, что ты первый на этом месте.
Вообще на тему рекрутинга мериканцы исписали тонны макулатуры в научных журналах.
Я даже по памяти попытаюсь вспомнить, какие методы самые надежные:
1) Тест на IQ или GMA,
2) Тест на лояльность (как бы грустно это не было, но это так)
3) Выполнение практических тестовых задач
4) Структурированное интервью
В общем умение по памяти на литрчке записать алгоритм Дейкстры сюда не входит, хотя его и можно впихнуть в структурированное интервью, вот только корреляция эффективности работы и успешность в прохождении теста на IQ будет все равно выше, а он как известно не требует наличия специальных знаний: Кружочки, квадратики, циферки да буковки.
Тут просто надо уяснить, что вопросы про бинарные деревья не более чем тест на эрудицию и хорошую память — это конечно навыки полезные, также как и умение разбивать головой бутылки и решать на скорость олимпиадные задачки, но далеко не ключевые.
Меня когда напрягают "прособеседовать" — то я принимаю решение исключительно по выполнению тестовых домашних заданий, которые отправляю еще до того как увижу человека вживую. Собственно у нас в конторе это итак основной подход (по крайней мере в моем департаменте).
А спрашивать определение ппроизводной или чем отличается стринг от стирнгбилдера человека с диплом и опытом работы как-то стремно это ИМХО, вроде как не на экзамене в университете/на курсах. Я бы сказал, что даже неэтично.
Задача — нащупать границу знаний (максимально быстро выйти за пределы эрудиции) и заставить думать. Причем (что для меня было самым сложным на собесе) — думать вслух. Это позволяет и корректировать быстро мелочи, чтоб не терять время, и усложнять/углублять когда понимаешь, что всё слишком просто.
А. Ну да. Есть такой подход. Тут только вопрос как правильно задачки формулировать.
Вот когда мне представлялась возможность подбирать людей — всегда ходил по пути наименьшего сопротивления — если для погромистов, то это набор задачек на обход графа, кластеризацию или даже преобразование Фурье, которые надо реализовать в задании (дистанционно) где на вход программы подается А, а на выходе получается В, а дальше как хотите — полная свобода действий. Например, достаточно стандартная задача для программиста, который учился именно на программиста: Найти кратчайший путь из точки А в точку В. Ну понятное дело обычно там идут алгоритмы Дейкстры, алгоритм Ли и А*. Но вот присылали, например, реализацию с использование Q-learning или например с возможностью использовать разные метрики: Евклидовое расстояние или манхэтенноское. Ну и да, стиль программирования и оформление кода не менее важен.
Для не совсем погромистов — ну там другие люди примерно по тому же принципу составляли, собственно я так сам и устраивался: Решал тестовые задачи.
Есть еще один кстати момент. Много раз доводилось работать с людьми, которые, мягко говоря… эээ… интроверты. В общем устные беседы таким людям даются тяжело, хотя вообще-то они оказываются крутыми специалистами
Тест на IQ или GMA,
А что нового (по сравнению с остальными пунктами) покажет тест на IQ кроме способности решать тесты на IQ?
Помимо этого, есть еще такие неприятные вещи как:
1) Кэш процессора — он вообще-то не резиновый, так что, например, для того же метода цепочек это может оказаться бутылочным горлышком
2) Плохое распределение ссылок в памяти.
В общем да, с памятью у них проблемы, иногда это критично.
Ну а собственно, «хорошие» хэш-функции, которые нас должны спасать от коллизий — тоже не бесплатные. Можно, конечно, исхитрятся, разменивая память на скорость, это вот прям целая специалаьная олимпиада: кто напишет самую быструю хэш-таблицу, но в случае если:
1) время выполнения критично, ну т.е. даже вероятность в 0.001% что случится неприятный момент и операция займет в N раз больше времени уже не канает.
2) порядок имеет значение
3) природа, т.е. количество и распределения поступающих данных хз какая и иих еще надо постоянно вставлять/удалять
то хэш-таблицы использовать неприемлемо, есть куда более замечательные деревья, которые всегда дают O(N*logN).
Можете привести хоть один пример наступления худшего случая?
Кроме намеренных DoS-атак через хеш-коллизии, про них я уже слышал, как и про то как от них защищаться.
И кроме заведомо плохих хеш-функция вида "поксорим все поля".
Выше целый класс задач указан где хэш-таблицы в принципе себя плохо чувствуют, могу повториться: а) Любые приложения работающие в реальном времени, б) если и количестве информации ничего не известно наперед и требуется неограниченная масштабируемость.
Вы же сами один из примеров и привели. А знайте как дэдосят, например, абоненты сотовой связи — уууу, это их нормальный режим работы.
Или например, для collision detected в физическом движке какого-нибудь несчастного платформера будут использоваться именно деревья, но можете извратиться и попробовать обойтись хэш-таблицами. В QTCustomPlot тоже используются для хранения именно красно-черные деревья (хотя для таких задач еще и порядок будет иметь значение, но не всегда), а у компонент от Dundas (эти занимаются Business Intelligence) во всю используются те же деревья и skip list. Интересно, почему?
Xor, не-xor: Любая хэш-функция плохая, если заведомо наперед НЕ известен весь набор ключей. Вот когда известен, вот тогда да, тогда хэширование может стать идеальным :-) Любые условия с накладываемыми ограничениями на память тоже плохие. Хэш-таблицы это хорошо, когда у вас здоровенный массив простых данных к которым обращения не такие уж и частые и
Все еще жду конкретных проблем хеш-таблиц, а не общих слов и ссылок на авторитеты.
Вообще-то нет, можно и без упорядоченного набора обойтись, просто вы наверное никогда не слышали про Spatial hashing — это кстати куда тривиальнее чем работать с деревьями.
Проблемы хэш-таблиц вроде бы уже передавали. Куда уж конкретнее? Хотите увидеть вживую — попадете к нам, подпишете NDA и увидите.
И да. Гугловские проекты явно не пример вылизанного и максимально оптимизированного кода. Про Хром тут уже в принципе отписались.
2) Откуда уверенность, что он с командой не сработается?
Ну если у вас большой бюджет, компания с именем, хороший интересный продукт, да еще и локация хорошая — то вы вполне имеете право вообще просить все, пока люди к вам приходят. Но таких компаний немного и тогда нужо быть попроще.
Гугл, как работодатель, может нанимать кого-угодно.
А в масштабах гугла, использование O(n2) вместо O(n*log(n)) очень и очень быстро выливается огромные затраты. Несоизмеримо большие, нежели зарплата одного программиста.
И в Гугле не нужно работать.
Такое происходит очень часто. Программисты занимают автоматизацией, которая дает огромный рычаг усиления.
Именно потому программистам и зарплаты можно платить куда как больше чем сотрудникам менее эффективного ручного труда.
Но именно и поэтому налететь на косяк стоимостью в годовой доход и программисту и админу очень легко. И не только в Гугле
эх промазал, это ответ в ветку выше
Думаю, что тут намек был на другое — человек, признающийся в том, что он может быть козлом — скорее всего достаточно адекватный человек, все-таки. Ну и по тексту видно, по карьере, косвенно.
Можно же пройти собеседование еще раз, теперь уже успешно, в чем проблема-то :)
Учиться всё равно надо всю жизнь, иначе загниёшь и устареешь…
Поэтому сложно сказать «давно ничего не делает», так как точно — делает.
С другой стороны, с точки зрения open source, большая часть того что я видел открытого от гугла не очень-то удобно для мелких масштабов и для одиночек.
просто потому, что внутри используется то, что хорошо на больших числах.
Известно же, что простые решения — очень просты, но с масштабом рост стоимости поддержки тоже большой. Вообще, стоимость от масштаба (q) — X+A*q. У простых решений X малюсенький, а A значительнный но не убойно.
В какой-то момент проще выкинуть и написать новое, с учетом масштаба — стоимость такого решения большая, но стоимость поддержки ниже. При этом X уже большой, но A значительно (на порядки зачастую) ниже. Это становится выгодно только по достижении некой точки размера. С некоего размера приходится делать еще более сложную систему, где X еще больше, но в сумме это выгодно. Даже с учетом переделки — выгодно.
Просто многие остаются на уровне, когда простых решений достаточно, любое следующее не просто избыточно — а убойно.
Для себя я понял пользу protobuf только в гугле. До гугла примерялся много раз, и каждый раз отказывался именно из-за огромной стоимости входа. Банальный json (позже bson) обошелся дешевле, даже с учетом граблей, от которых уберёг был протобаф.
И да, послушных кодеров я вообще не видел. У всех есть своё мнение, и делают то, что надо, а не то, что сказали. Разумеется, возможно это только у нас рай и оазис такой, но почему-то другие не попадались.
Мало того, что гугл насильно отобрал у меня возможность использовать удобный для меня софт, так еще и не дает разработчикам API, чтобы переписать его, если он не подходит под какие-то гугловые требования. Или он насильно заставляет меня использовать только свой обрезанный софт?
При этом в самом гугле навигация без интернет не работает — это получается, что у меня online only автомобиль? А если я выезжаю в регионы, где очень плохо с покрытием — весь android auto превращается в тыкву?
Скажите, что это за (*#*@?
В моей машине раньше было нечто на WinCE — тоже возможности сменить не было, кроме такого геморроя с такими проблемами, что проще жевать что дают.
В последних машинах арендованых видел штук 6 разных оболочек, понятия не имею как работают, но только по сути в Mini Clubman было что-то действительно удобное, и что реально работало.
По описанию с www.android.com/auto — это просто удобный доступ к дефолтным приложениям на телеофне через магнитолу. Да, не 100% покрытие нужд всех людей, но городские мегаполисы точно покрыты. Мне было бы крайне удобно — я, несмотря на магнитолу, часто телефон держу с гуглокартами на держателе где-нибудь.
Со стороны мне это выглядит как MVP, причем где M это уже medium :D
Развивать есть куда.
А вот это подсказывает, что вообще API есть, и свои приложения вполне можно делать:
developer.android.com/training/auto/index.html
Какой софт вы хотите переписать?
Вот читайте по ссылке:
www.sygic.com/blog/2016/sygic-car-navigation-for-android-auto-and-apple-car-play
Google Maps — это совершенно ужасная программа для навигации, там нет базовых функций (от полноценного offline до предупреждения о скоростных ограничениях). Гугл заставил полтора года (!) меня ждать, пока, наконец, появится waze (в жуткой альфа), но это опять таки — online only программа.
В Москве то она не удобна, а в российской глухомани — так и вообще бесполезна.
Шлю гуглу просто лучи поноса за такую подставу — и собираюсь менять машину на то, где ничего от гугла не будет совсем.
Ну я не патриотичен — по новосибирску и сибири я ездил на навителе и яндексе, а не гугле в любом случае :)
Покурил форумы и факи, это реально какой-то прощёлк мощный. Странно, если честно. После праздников пойду поищу и внутри побампаю фичреквесты на нормальный оффлайн.
Но спасибо, учту. Если попадётся с AA в ближайшее время машина — даже не буду тратить время на соединение.
Google Maps — это совершенно ужасная программа для навигации, там нет базовых функций (от полноценного offline
А вот поиск через AA интерфейс — не работает.
Через энное место, в общем, что даёт надежду на скорую доделку. Но я пока поостерегусь пользоваться.
а на цюрих-мюнхен я накачал оффлайн карт, и всё равно заблудился :DDD выбирался по запаху и указателям.
с тех пор, впрочем, обзавёлся турсимкой с дешёвым тарифом и проблемы пропали. наличие онлайна имеет слишком много плюсов, чтоб искуственно себя ограничивать там, где связь фактически всё таки есть.
О чем речь, если на трассе Москва-Рига есть области вообще без покрытия.
При этом я прекрасно езжу с offline картами (тот же Sygic, впрочем есть и Навител и вообще растровые карты для глухих мест). Но гугл решил, что мне нужно пострадать, ради его, гугла, прибылей, заодно он, пользуясь монопольным положением — запретил доступ в android auto для всех разработчиков навигации.
Скажите, как после этого я должен относиться к гуглу? Или мне нужно не ездить туда, где нет онлайн?!
Online only car — это худший кошмар, какой я мог только представить.
Не просто удалённый экран (коих ВиМТ), а конкретный продукт.
Реализация его на текущий момент сделана так, как покрывает потребности достаточно большой части клиентов, и более того — пожалуй, самых массовых.
Логично, что первые версии будут сфокусированы на том, чтобы обеспечить наилучший UX для них. Когда элп выпускала телефон даже без 3G — что-то адроидофоновладельцы над ними смеялись, но телефоны вполне успешно продавались и были популярны.
Так и тут. 3G появится, и оффлайн навигация появится нормальная. Гугл не «решил сделать онлайн-онли», гугл _пока_ реализовал только «онлайн-онли».
Когда элп выпускала телефон даже без 3G — что-то адроидофоновладельцы над ними смеялисьАндроидовладельцы над ними не смеялись ибо их тогда не было ещё. Смеялись владельцы телефонов на Symbian'е, Windows Mobile и прочих всяких Blackberry.
Ну и где они теперь?
Гугл совместно с производителями авто выпустил online only автомобиль.
Про это нужно кричать на каждом углу — «думайте заранее, что покупаете!». Ибо никаких сроков от гугла нет. А учитывая, сколько они обещали waze (свой же продукт) — можно предположить, что речь идет о сроках в много лет, явно большим, чем многие пользуются новым автомобилем.
Причем google даже не обещает, что это появится.
Причем google даже не обещает, что это появится.Гугл вообще в принципе мало когда мало что обещает. Ибо планы могут поменяться, а обещания потом будут припоминать годами.
Только в исключительных случаях, когда это считается очень важным.
Тогда тоже предсказания разнились от «этим никто пользоваться не будет» до «мобильные сети лягут, не выдержав нагрузки».
Прошло 10 лет — и никого больше не удивляет что смартфон просто-напросто требует подключения к сети, в противном случае становясь практически неработоспособным.
Я думаю тут та же самая ситуация: Гугл вполне сознательно не хочет делать жизнь легче для тех, кто хочет избежать подключения автомобиля к сети.
Исходя из того, что наличие постоянного подключения оккроет дорогу многим другим вещам в будущем.
Шаг достаточно рискованный, но мне кажется время действительно пришло.
Google lock — то когда ты завязан на одного вендора. А wap/html — это не vendor lock никоим образов.
Собственно я никогда и не страдал особо по WAP сайтам, хотя в интернет с телефона хожу с 2003 года.
Гугл просто нужно нагибать по антимонопольной статье через ЕС и все будет хорошо. Процесс уже пошел.
Вы в один присест собрались за 36 часов 3600 километров проехать? И по пути ни одного вай-фая? И туристической симки нет? И заранее маршрут не прокладывали? В общем, надуманная проблема.
Заранее маршрут, конечно же, не прокладывается — ведь цель не просто доехать, но и получить fun — т.е. поездить по окрестностям, отклониться от маршрута, не на работе же.
До появления android auto — я просто заливал в китайский навигатор offline карты и спокойно ехал, не думая о том, что мне срочно нужен online для того, чтобы просто доехать до нужного места. При этом навигатор пиликал мне, когда я превышал разрешенную скорость, предупреждал о камерах, имел всегда доступную базу по ближайшим заправкам (offline).
А теперь я всего этого лишен, потому что для кого-то ездить от wifi до wifi — нормальная ситуация. Про туристические сим-карты в местах без покрытия я вообще молчу. Раньше прекрасно ездили по растровым картам, но гугл решил, что человек без интернета — неполноценен…
навигатор пиликал мне, когда я превышал разрешенную скорость, предупреждал о камерах, имел всегда доступную базу по ближайшим заправкам (offline).То есть, вы на знаки не смотрите? И если камеры нет, то несётесь? И круиз-контроль/ограничение скорости не включаете?
Если я упустил внезапно появившийся за деревьями знак (кто ездил по России — то знает) — и все, получай штраф?
Самое главное — без гугла все работает именно так. Гугл считает, что мне это не нужно. Вот такие гении там работают.
Зачем мне платить за обрезанный огрызок от гугла? Следующий автомобиль будет без него.
Вы уж врите, но не завирайтесь. Ни на одной машине, нигде и никогда я не видел встроенных навигаторов, позволявших в них что-то, что производитель не предусмотрел, заливать. Хоть 20 лет назад, хоть 10, хоть сейчас.
То, что производители автомобилей решили подписать договор и выпустить «новое поколение» не на основе TomTom'а, а на основе Google Maps — может быть и их ошибка, но Гугл тут причём? Это был выбор производителей авто.
Вам бы не во вранье меня обвинять, а немного кругозор расширить. Тем более, что я не помню ни одной online only системы навигации ни в одном автомобиле.
Что касается гугла — сейчас ограничения зависят напрямую от него, а вовсе не от производителей авто. Но т.к. он давно превратился в корпорацию зла, то надежды нет.
Раньше я никогда не думал, что буду выбирать автомобиль по главному критерию — отсутствию google lock.
Теперь знаю, что это именно то, что мне нужно.
Полтора года оказалось достаточно, чтобы я понял — это не мое, а все приведенные тут советы — не работают.
Причем тут Вы — мне вообще не понятно.
Голосовой поиск вроде не работает при этомА у гугла хоть что-то голосовое в офлайне работает? Я не знаю, не пользовался.
А навигацией с Google Maps и My Maps пользуюсь лет 5 уже по всему миру. Даже когда офлайна там ещё не было — прокладываешь маршрут, а потом интернет уже не нужен.
уже лет 15 пользуюсь offline навигаторами и не очень понимаю, почему я должен отказываться от удобного сервисаНе понял. Заставляет кто-то?
Поняли?
Поняли?Нет, не поняли. Вы так говорите, как будто вы можете взять какой-нибудь BMW 2010го года выпуска или Тойоту 2012го, залить в их встроенный навигатор свою прошивку (ничего не взламывая и не перепаивая) и спокойно ездить. А Гугл вас этой возможности лишил.
Ну, можете так и было, я не большой спец по всроенным автогавигаторам.
Не подскажите пяток моделей с подобной возможностью?
Нельзя нужную область скачать для оффлайнКому нужную? Мне? Можно, постоянно так делаю.
Вы сами пробовали это для более-менее крупных областей?Сто раз. Регионы, типа Каталонии туда целиком влазят со всеми городами и городишками. Можно и всю страну скачать в несколько приёмов.
Например я хочу скачать оффлайн карту всей Грузии. Попробуйте? :)))90% Грузии влазит в одну область для скачивания. Так что ВСЯ Грузия влезет в две области. Месяц назад я так и скачал её (опять же — на всякий случай, у меня давно международная симка с местными тарифами в каждой стране). Накачать можно сколько угодно областей. Вы ведь не пытались разобраться с приложение дольше пары минут, год назад да?
Опять же — вы такой продвинутый, постоянно по европам ездите, а интернет вам там в поездках не нужен ни для чего, получается?
По поводу offline: в полученной карте не будет POI, она будет ограничена сроком жизни в месяц, размер storage для карт имеет ограничение — поэтому при увеличении zoom теряются локальные детали, например — имена улиц.
Это какой-то ад, который решается одним простым движением — выкидывается google maps и все становится снова хорошо и удобно.
Вообще креативность, способность принимать решения, умение брать на себя ответственность и исполнительность — совершенно разные и слабо зависимые плоскости.
Не обязательно быть говнюком чтоб генерить креатив.
Наверное, потому что не берут?
А то что-то я теряюсь. Одни говорят что в гугле заставляют народ работать по 70 часов в неделю, другие пишут что народ чуть ли не выгоняют домой на выходные пинками. Вы вот пишете что работают «отсюда и до обеда».
При этом приезжавшие из гугла инженеры тупо вникали, говорили — «да, мы опять налажали», после чего радостно ехали пить пиво. Им было совершенно пофиг, чем все закончится. Обычные исполнители.
Вообще менеджмент же есть как раз за этим, если не справляются — перераспределить усилия, заменить людей, раздать люлей…
Еще помню, прошло где-то полтора года, пока сотрудники гугла в штатах не выучили географию Россию и перестали слать нам письма, предназначенные для совсем другой компании в Питере…
С проекта я сбежал, потому что так нельзя…
We need to go deeper!
Просто потому, что уйти никогда не поздно; и хорошо знаю как на местах может в болоте потонуть что угодно. По этой же причине предпочитал работать фрилансером со стороны, а не быть в штате.
Сейчас мне сложно смотреть со стороны — работы много, времени мало. Поэтому очень интересно что происходит там, до куда дотянуться нет обычных причин и возможностей.
Тем более — снаружи внутренняя структура гугла совершенно не прозрачна.
Хоть и открыта коммуникация внутри, на многие пограничные вещи NDA блюдётся даже внутри компании.
Намного интереснее, как сообщество оценивает отдельных программистов изза их публичности. Как говорит сам Ховелл его пакетный менеджер сделан довольно плохо.
Сегодня по инструкциям в интернете любой при должной целеустремленности может сколотить какую-то программу.
Так же можно выпускать цифровую музыку не зная нотной записи. Но в оркестр тебя не возьмут. Буд у тебя хоть десят миллионов подписчиков на ютубе.
И еще одна мысль. С одной стороны крупные корпорации делают все чтобы сделать разработку более доступной для широкого круга людей. С другой стороны когда ты идешь устраиваться тебе задают вопросы ответы на которые тебе никогда не были нужны чтобы разрабатывать. Какой-то двойной стандарт получается?
P.S. Почему-то напомнило интервью с Ryan Dahl (создатель Node.js).
жесть какой я неуч,
И я. Но при этом после уточняющего вопроса "что это за операция" точно смогу её реализовать. И для разных механизмов представления этого самого дерева.
То же сбалансированное дерево представленное линейным массивом — очень вкусная задача для реализации. Хорошо покажет как человек умеет проверять граничные условия (вообще имхо главное зло программистов-комбинаторов).
Это worst OS ever. Впечатление что код писали первокурсники набранные по ЛГБТ-квотам. Заметьте, я говорю «писали код», а не «проектировали», потому что проектированием там не пахнет. Любой человек с опытом написания больших проектов, напишет лучше, рили.
Api экстремально говняное. Более того, оно часто меняется. В итоге мы имеем по несколько говняных апи в разных версиях. Т.е. можно написать фичу, а через версию андроида узнать, что она отламалось, и нужно юзать другое апи с другими костылями. Без костылей вообще ничего не попишешь.
Глобальные косяки в проектировании, тащатся с первых версий и не исправляются в принципе. Конечно, лучше новую кривую апишку добавить. Эти ребята даже язык не смогли выбрать для проекта, пока андроид написан на джаве, он так и будет тормозить. И не надо мне говорить «джава не тормозит» или «новые андроиды не тормозят», на практике это не так. Когда на 8 ядрах и нескольких гигах RAM звонилка открывается 0.5 сек, это не «не тормозит», а беспредел, на таком железе иначе как мгновенно быть не должно.
Идем дальше, вещи типа GooglePlayServices написаны запредельно говняно. То что в ios делается в 2 строки, тут делается в файл полный костылей и асинхроннного глючного говна.
NDK это просто высер и одновременно плевок в лицо разработчикам под платформу. Из всего апи корректно работает 20%, остальное в той или иной мере не работает или просто недоделано. Есть баги которые не фиксятся с первых версий. Не буду говорить о том, что значительная часть рабочих фичей по части поддержки C++ сделана вообше сторонним разработчиком(спасибо ему за это). И опять же не надо говорить что они думали что «все приложения\игры будут написана на джаве и нативный код ненужон». Сам факт того что они так мыслят, говорит об отсутствии квалификации.
Далее, тулсет. Android Studio — глючное, тормозное ужасное говно. Gradle — вообще ночной кошмар. Такой же тормозной как и студия. За время за которое ant собирал проект, gradle даже запуститься не успевает(Знаете как они пытаются это пофиксить? Запускают демон чтобы не запускатать каждый gradle раз. Overmind). Ужасный, нелогичный, инопланентый синтаксис. Оказывается раньше это был более-менее нормальный язык groovy(Если конечно считать нормальным делать тормозной скриптовый язык на и без того тормозной джаве), но потом туда добавили сахарку и писать на нем даже с документацией проблематично. Haskell понятнее.
Мусор, в каждый проект gradle добавляет кучу мусорных файлов, просто уйму. Про частые обновления которые ломают сборку я промолчу. В свое время я не знал про offline режим, и как-то открыв проект через месяц обнаружил его несобирающимся, хотя ничего не менял. Это беспредел.
Так к чему я это все. Из всего вышесказанного, можно сделать вывод что общий уровень квалификации работников гугла экстремально низкий. Так же основной упор на собеседованиях идет на малоприменимые на практике математические задачи, что ведет к отрицательному отборку, в итоге в гугл попадают студенты-первокурсники, задрочившие сборник олимпиадных задач, имеющие большое самомонение(как же, в гугле же работают), но с отсутствующей квалификацией. Так же в компании сущетсвуют ЛГБТ-квоты, когда нанимают сотрудников не потому что они хорошие специалисты, а потому что они путают мальчиков с девочками.
Так что вопрос вынесенный в заголовок вообше смысла не имеет. Для трудоустройства в гугл, важнее с кем ты спишь и на сколько хорошо ты решаешь олимпиадные задачки, а не на сколько хороший ты разработчик.
Справедливости ради отмечу, что инвертировать бинарное дерево изи задача. Заметтье, если бы Макс Хауэлл спал с мужиками, повода для этой статьи бы не было.
Как и сама нокия…
Только в лице HMD Global. Вроде бы.
Подразделения же, которое занималось телефонами в Nokia и всё разработки — канули в лету. Всё. С концами.
Можно ли при этом говорить «Нокия жива»? Я не знаю, если честно…
А то, что загнулся один из побочных для нее бизнесов — ну так бывает, ничего страшного.
Nokia Networks — это очень успешно существующая компания, с огромными прибылями, оборудованием и услугами которой опосредованно пользуются большинство из тех, кто присутствует на форуме.Ну так с этим никто и не спорит.
А то, что загнулся один из побочных для нее бизнесов — ну так бывает, ничего страшного.Не было у неё никогда «побочного бизнеса» никакого. И сама Nokia Networks не была подразделением Nokia до 2013 года.
Вот когда материнская компания, для которой телефоны, всё-таки, были основным видом деятельности, «просрала все полимеры» — она выкупила у Сименса свою долю и для неё прозводство телефонов до того приносившее прибыли и близко не сравнимые с с тем, что получала Nokia Networks (за первое десятилейтие у подразделения Mobile Solutions, которое занималось смртфонами, не было ни одного убыточного квартала) стало «побочным».
Хотя тут, конечно, вопрос, когда оно стало «побочным» бизесом… видимо в феврале 2011го. По крайней мере до 2011го у мобильного подразделения Nokia не было ни одного убыточного квартала, а после — не было уже ни одного прибыльного.
Под своим брендом Nokia выпустила телефон только в 1989 году.
Так что по меньшей мере в 2006 именно производство телефонов считалось основной деятельностью компании.
В 2013м, видя, что «телефоны — фьсьо» — они переиграли обратно.
Потому я и говорю — что сложно всё. В конце-концов когда-то Nokia, ничего кроме галош не выпускала, а сегодня — шины выпускает с прибылью, так что можно сказать, что у них всё хорошо…
Сейчас Nokia Network обслуживает сети по всей России (например: www.cnews.ru/news/line/2017-03-07_nokia_i_vympelkom_podpisali_5letnij_kontrakt), и избавившись от телефонов живет вполне уверенно, прикупив заодно Alcatel-Lucent.
Я как раз про мобильное подразделение и говорю.
Из мобилок сравниваю с iOS, после Android ощущение что ее проектировали инженеры с 20 летним опытом(Я думаю это и не далеко от истины), а не макаки-первокурсники.
Впечатление что код писали первокурсники набранные по ЛГБТ-квотам
Оч смешно, забрал себе в копилку
немного в защиту андроид…
- вы синтасис objective-c видели, это груви то инопланитянский?
- Градл достаточно гибкий. Можно во время сборки запрашивать пароль от ключа подписи из консоли или даже окошка с полем ввода. Вообще вы почти не ограничены. У вас полноценный скрипатовый язык и любыми либами на jvm
об xcode
- В ios все делается через xcode. Формат описания проекта почти машинный. Огромный xml файлы, которые xcode генерит. На билдсервере все нужно делать через ui или юзать сторонние скрипты тулзы на ruby. В андроид можно просто из консоли поправить читаемый gradle конфиг.
- ios sdk монолитный. Нельзя скачать отдельные части
- xcode нельзя поставить из консоли
- нужно поплясать с бубном, чтобы иметь 2 версии xcode
- Проблемы с подписями. Можно юзать фастлайн, но не спасает от обновлений икскода. В андроид просто нет таких проблем, указываешь путь к ключу, пароль и всё!.
- Фактически нет системы зависимостей. Можно руками подключать либы из ui xcode. или юзать cocoapods, который автоматизирует редактирование проектных файлов. но и это боль. В андроид достаточно кинуть jar-ник(в 2017 никто так не делает) или указать зависимость и она удовлетворится. Опять же можно динамически создавать список зависимостей.
От ЛГБТ-первокурсников есть большая польза, необязательно в программировании, но есть, ЕВПОЧЯ. Правда, среди всех моих знакомых ЛГБТ-первокурсников ни один не пошёл бы в гугл, их стихия — это индустрия красоты, моды и тому подобное.
Я не понимаю, зачем пользоваться gradle. Хоть это и сборщик по умолчанию, maven гораздо привычнее для мира java.
Но, в конце концов, должен ли был Гугл нанять меня? Да, конечно да.… Я умею создавать действительно клевые вещи, может не идеальные, но людям они по-настоящему нравятся. Несомненно, несомненно Гуглу это могло бы пригодиться.
Нет нет и нет, ну где же ты khim, нервно брызгающий слюной на трибуну, по которой ты еще секунду назад бил тапкой, приговаривая — "Не место тебе супостат окаянный среди людей иди формулки в excel пиши или шкурки для wordpress ковыряй" ?!
7 собеседований, не хило так то, если не турнули с первого то это уже не плохо.
Зная немного об отборе в Гугл, меня удивляет что его спросили только о простой инвертации деревьев. Я бы ожидал что то вроде математического доказательства что инвертирование не оказывает влияния на свойства бинарного дерева как ацикличного орграфа. И сладеньким в виде реализации на доске поиска в Scapegoat tree
. А то ведь без этого никак, работая в команде поддержки AngularJs
.
Какие факты я имею в виду?
- Андроид не был разработан инженерами Гугла (статья в Wikipedia чуть ли не начинается с фразы Изначально разрабатывалась компанией Android, Inc., которую затем купила Google)
- Андроид был создан человеком в чём-то черезвычайно похожим на Макса Хауэлла
- Очень долгое время Андроид был «государством в государстве» — исходя из декларируемого Максом Хауэллом принципа.
- Анди ушёл и Макса не взяли примерно после того, как руководству Гугла всё это надоело и они сказали «больше Андроид не будет „государством в государстве“ и к нему и к его разработчикам будут предъявляться такие же требования, как и ко всем остальным» — после чего косяки потихоньку начали исправлять.
А теперь, держа в голову основу: Андроид создан не гуглерами, но людьми с подходом Я часто веду себя как козел, со мной часто трудно, я часто плаваю в компьютерных науках, но… Но… Я умею создавать действительно клевые вещи, может не идеальные, но людям они по-настоящему нравятся — перечитайте ответ ещё раз.
P.S. В конечном итоге Макса взяли на должность где его знания и опыт по созданию клевых вещей, может не идеальных, но людям они по-настоящему нравящихся несомненно пригодится — Swift таки получит пакетный менеджер — и избежал попадания в компанию, где его будут «бить по рукам» (очень многие вещи, которые в своё время делала Android team сейчас бы никто не разрешил делать).
P.P.S. Я, кстати, не говорю о том, что Анди или Макс — плохие, нехорошие люди. Вовсе нет! Но умение создавать «вещи, которые людям нравятся» и умение «делать всё так, как надо» — это сильно разные вещи! Если вы умеете первое — то не факт, что вам стоит устраиваться на позицию, где нужно второе… а на практике так уж получается, что эти два навыка очень часто входят в конфликт. Иначе бы только таких людей бы все и набирали…
Вы наверное приболели, ибо тон у вас сменился кардинально с:
Ну как бы это. Это типичный случай ситуации «кто на что учился».
Вы можете заниматься высокоинтеллектуальной деятельностью типа натягивания шаблонов на CMS типа Drupal'а. Или создания формочек в 1С или Excel'е. Тогда вам этот «армейский тупняк» действительно не нужен.
на
Я, кстати, не говорю о том, что Анди или Макс — плохие, нехорошие люди. Вовсе нет! Но умение создавать «вещи, которые людям нравятся» и умение «делать всё так, как надо» — это сильно разные вещи! Если вы умеете первое — то не факт, что вам стоит устраиваться на позицию, где нужно второе… а на практике так уж получается, что эти два навыка очень часто входят в конфликт.
Заметьте, это просто заметка.
Заметьте — даже Макс, даже в этой статье — говорит, если кратко: да, я некачественный программист и не умею писать хороший код, но зато — я умею делать нечто другое… и именно поэтому меня нужно взять на работу.
Он, в некотором роде, прав — но это не значит, что его нужно брать на работу программистом.
Человек же, который искренне считает, что незнание и неумение работать с алгоритмами — это вообще не проблема для разработчика… если человек искренне считает, что знание алгоритмов сортировки — это «армейский тупняк», то… ну тут я даже не знаю, что делать… это клиника.
Программист это тот кто связывает сущности.Вне Гугла — да.
Необходимость создавать новые — возникает достаточно редко.Но ведь возникает иногда. Догадайтесь — где работают люди, создающие эти сущности?
Но просто связывальщиков крупные компании не любят.Почему не любят? Любят. И Гугл даже любит, как ни странно. Просто это другая должность. Вот, например.
Проблема в тех, кто и технологий не знает и в алгоритмах плавает — но тут уже вопрос: а вы точно ни инжениринговую должность претендуете, не PMную?
А Вы всегда считаете PM начальником? Я себе в PM назначал в основном девушек — оказывались самыми не зазнающимися, организованными и ответственными. Ох. Прошу прощения — это я про Project Manager. Но очевидно, что в продакт менеджеры попадают не самые мало знающие в программировании, а именно умеющие лучше всех видеть процесс со стороны. Со сторон.
Но, в конце концов, должен ли был Гугл нанять меня? Да, конечно да
Почему он считает, что гугл что-то кому-то должен?
Видимо, потому, что ему кто-то что-то должен по его мнению.
Я вообще не понимаю, почему кто-то считает, что может решать за того, кто деньги платит, за что именно ему должны платить.
В оригинале "But ultimately, should Google have hired me?" Это имеет конотацию "Стоило ли Гуглу нанять меня?"
Терпеть не могу вопросы про двоичные деревья, но в данной ситуации я был на стороне гугла.
Во-первых, Гугл заранее предупреждает, о чем будет интервью и что в нем будут задачи на алгоритмы и структуры данных. Это указывается как в письме, так и во многих туториалах от самого гугла.
То есть если человек не знает о двоичных деревьях, это значит он вообще не готовился к интервью, от слова совсем.
А во-вторых, когда я проходил интервью в гугле, мне уже на этапе phone screen задавали такие задачи (например, нестандартные алгоритмы работы с графами), по сравнению с которыми инверсия двоичного дерева это детский лепет.
Логично ли, что Гугл отклонил кандидатуру Макса Хауэлла, автора Homebrew, за неумение инвертировать двоичные деревья?