Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Від світчера — до офера у FAANG за 5 років. Як я пройшла співбесіду в Facebook

Усі статті, обговорення, новини для початківців — в одному місці. Підписуйтеся на телеграм-канал!

Всім привіт. Мене звати Ольга, я — Software Engineer. Протягом останнього року працюю у компанії Meta (Facebook) з релокейтом зі Львова у Лондон.

У цій статті розкажу про свій шлях від зміни професії до отримання оферу. Стаття може бути цікава тим, хто сумнівається, чи варто світчитись в IT, а також тим, хто цікавиться етапами проходження інтерв’ю у Big Tech компанії.

Навчання і вибір професії. Persistence is the key

У ранні шкільні роки у мене не було явного нахилу до точних наук, як його не було і до гуманітарних. Коли мені в кінці четвертого класу задали задачку на вступі у гімназійний клас «Один кінь перебігає поле за 15 хвилин. За скільки хвилин пробіжить поле упряжка з трьох коней?», я чесно відповіла «За 45». У гімназійний клас мене таки взяли. Пошкодували, напевно...

Далі особливих нахилів теж не спостерігалось, допоки сусідка по парті не зайняла призове місце на одній з математичних олімпіад району. Всі так її вітали і пишались, що я вирішила, що теж так хочу. Почала з виконання домашніх завдань, потім додаткових завдань, а потім вже і я вигравала олімпіади.

При виборі професії серйозно розглядались два варіанти: прикладна математика та механіко-математичний факультет. Але, оскільки комп’ютера в сім’ї не було і не планувалось, з тодішніми доходами, то вибір було зроблено на користь останнього.

Завдяки знанням, здобутим в тому ж гімназійному класу і рідній школі, навчання проходило з ентузіазмом та на диво легко. Природно, закінчилось це все вступом в аспірантуру, захистом дисертації та роботою в Львівському національному університеті ім. Івана Франка протягом 8 років.

Зміна професії. Never give up

У зв’язку з незалежними від мене обставинами, на кшталт укрупнення університетів та зменшення кількості студентів, робота в університеті ніяк не могла набути постійного характеру. Тому було прийнято рішення перейти в IT. Тим більше сусід мене давно до цього спонукав, наводячи переваги у вигляді хорошої оплати праці та широких можливостей. Тобто думка жевріла вже давно.

Перше, що я зробила — записалась на курси англійської мови, щоб актуалізувати знання та покращити саме розмовну мову. Це було правильне рішення, оскільки згодом, під час самих ІТ-курсів, часу на англійську вже не вистачало б.

В ті часи популярною опцією було вступити на курси в EPAM або Softserve на той чи інший напрям. Курси були безкоштовні, проте вимагали проходження кількох раундів тестів та інтерв’ю, тому певний рівень знань був необхідним для вступу. Вибір було зроблено на користь .net, оскільки той же сусід міг би мене підстрахувати і допомогти порадами.

За два місяці самонавчання, переглянувши одну-дві книги по .net, пройшовши кілька уроків на codeacademy по HTML, CSS та javascript, я гордо пішла вступати на курси в Softserve. І з тріском провалила перший же етап.

Сусід співчутливо і обережно запропонував спробувати піти на курси QA, мовляв, мало б бути легше вступити. Але не на ту напали. Спортивний інтерес і природна впертість не дозволили здатись, і після ще двох місяців самонавчання я таки вступила на курси в EPAM.

Навчання на курсах та перша робота. Believe in yourself

Заняття відбувалися 2-3 рази на тиждень увечері. Конкурувати потрібно було зі вчорашніми студентами, які все ж таки знали більше. І деколи говорили незрозумілою мовою та абревіатурами. Довелось надолужувати, не подаючи вигляду.

Курс був поділений на дві частини. Перша частина стосувалась більше нутрощів .net, основним завданням було по закінченню створити гру на Windows Forms. Друга частина була присвячена веброзробці та взаємодії з браузером. Після першої частини ми складали проміжний іспит, за результатами якого та за оцінками протягом курсу формувався рейтинг. Кращих студентів обіцяли рекомендувати на роботу одразу ж, без проходження другої частини курсу.
Готуючись до іспиту, основною думкою було «Аби не вигнали». А завершилось все тим, що я зайняла перше місце в рейтингу та була рекомендована на позицію trainee. Маленька перемога над собою відбулась!

Сovid 2019. Be careful what you wish for

Змінивши кілька компаній та опинившись у Nasdaq, я напівжартома відповідала (коли запитували), що це — ідеальна компанія, і я звідти зі своєї волі не піду, а зустрічатиму в ній свою пенсію. Сидячи на карантині, рекрутерам на лінкедіні не відписувала, а якщо вже дуже допікали, то відповідала, що якщо матимете пропозиції з Microsoft, Google aбо Facebook, то пишіть, бо все інше мене не цікавить і я своєї зони комфорту просто так не полишу.
І ось, ні сіло ні впало, постукав до мене рекрутер від Facebook, з інформацією, що відбувається набір у Лондоні і чи не бажаю я спробувати свої сили. Я не сильно горіла бажанням (пенсію ж чекала), але робити вечорами на карантині було нічого, тому вирішила прийняти челендж, щиро будучи переконаною, що не пройду і першого етапу. Бо ж статті на DOU чи на інших ресурсах наводили жахи алгоритмами, місяцями підготовки та ледь не звільненням з роботи, щоб кваліфіковано підготуватись до співбесіди у FAANG. Ну, це ж точно не про мене, я ж звичайна людина, а не вундеркінд з амбіціями.

Підготовка та етапи інтерв’ю

To accomplish something important, two things are needed: a plan, and not quite enough time.

Перший етап: phone screen з рекрутером. 26.05.2020

До цього етапу я взагалі не готувалась, бо очікувала стандартних питань про досвід роботи, проєкти та технології. Все так і було, але далі, несподівано, пішли питання про average time complexity i worst case для деяких структур даних, а також — в якому випадку досягається worst case scenario. Здивувало, але проблем не виникло, на щастя з O-символікою все було просто, завдяки математичній освіті.

Ну, що ж, нутром чую, що screen пройшов добре. Думаю, скоро призначить технічний phone screen, а я ні сном ні духом в оцих ваших літкодах. Так і сталось: рекрутерка спитала, коли я можу пройти перший технічний скринінг, а я ж поняття не мала, скільки я можу просити часу і при цьому не виглядати непристойно. Попросила три тижні (наївно, правда ж?).

Оскільки до цього з олімпіадним програмуванням, як і з літкодом, справи я не мала, то було зрозуміло, що легко не буде. Вирішила скласти план. Коли працюю, коли їм, коли літкоджу, а коли сплю. Кожного дня після роботи по 2-4 години, вихідні майже повністю. І так три тижні. Придбала преміум-літкод підписку на місяць, бо ж розраховувала не пройти перше інтерв’ю, то нащо мені надовше?

Перший технічний скринінг. 18.06.2020

На цей момент я розв’язала близько 100 задач. Розподіл десь 60Е-35M-5H. Смішно і страшно.

Ну що ж, включаю відео, руки трусяться, позоритись не хочеться, але відступати нема куди. Інтерв’юер привітний, що трохи заспокоїло. Задав дві задачки medium рівня. Перша була взагалі на мій улюблений патерн, додала впевненості, а одну з варіацій другої я під час тренувань ну ніяк не могла закодити, постійно щось не працювало. А тут, мабуть, з переляку, таки закодила.

Сиджу кілька днів після інтерв’ю, чекаю відгуку. Підозрюю, що пахне смаженим, бо ж ніби все пройшло добре. І таки через два дні рекрутер каже, що все ок, запрошуємо на онсайт, який в часи ковіду проводиться онлайн, тож нікуди не треба їхати.

Онсайт. 20-21.07.2020

Ну все, думаю, приплили... Нащо воно мені треба було... Спокійно ж жила собі, не тужила. А тепер знов все наново. Ну, але ми не здаємося.

Купила вже річну підписку на літкод, на всяк випадок, підписку на educative для систем дизайну — і вперед. З тим же темпом підготовки і намаганням втиснути в себе максимально нової інформації в короткий період. Інколи чесно хотілось здатись і закинути це все.

Але якось дотягнула до онсайту. Зроблено 150 задач. Розподіл 79Е-60М-11H.

First coding interview. Задали 2 medium задачки. Першу зробила з фолоуап корнер-кейсом, про який сама не здогадалась. У другій — не до кінця встигла заімплементити проміжний метод. Тобто, не ідеально, але і не критично. Фідбек: +, ±.

Second coding interview. Першу задачку рівня easy зробила легко, другу medium — не дуже. Неоптимальний підхід розказала, а оптимальний не закодила, бо треба було реалізовувати min heap, хоча розказала, як має працювати. Ну, от так, не без труднощів і з висловами на кшталт «assume we have this method» те інтерв’ю і закінчилось. Можна дати чесну оцінку, що medium задача не зроблена. Фідбек: +, -+.

Sysdem Design interview. Дуже стандартне вебзавдання. Всі уточнюючі питання задала, далі почала малювати то все на дошці, а інтерв’юер вимкнув звук і мовчить, тільки підсміхається. А я все хвилювалась, чому ж так, невже я зовсім якісь дурниці розказую? Так я й балакала 45 хв. В кінці таки він спитав, що от якби треба було А, а не Б, то як би помінялась імплементація? Відповіддю був фактично зовсім інший дизайн, про який я теж була в курсі, але повністю розказати, звісно, вже не було часу. Але основні моменти навела. Фідбек був потім, що це було outstanding, stellar і ще багато епітетів.

Behavioural interview. Зараз можу сказати, що це було єдине інтерв’ю, до якого я фактично була не готова. Так, я пригадала історії з професійного життя. І про конфлікти, і про висновки, і про погані дні, і про хороші, і про досягнення та провали, найкращий та найгірший день і далі за списком. Але, як виявилось, вміння їх презентувати — це окремий скіл. Інтерв’юер залишився незадоволеним. Фідбек був щось на зразок «або я не мала достатньої відповідальності на попередніх проєктах, або не вміла її презентувати».

Behavioural follow up interview. Завдяки непоганим кодинг-сесіям та ідеальному систем-дизайну, рекрутер запропонував мені пройти ще одне біхевіорал з іншим інтерв’юером. І якщо при попередній розмові я прямо відчувала, як мене розкладають по поличках і хочуть почути, як моїми здобутками користувались тисячі людей, то зараз розмова пішла дуже легко, я навіть не помітила, як минули 45 хв.

Далі, через три тижні був фідбек про успішне проходження всіх етапів, і одразу запропонована команда, до якої я можу приєднатись.

Підготовка до інтерв’ю зайняла у мене 3-4 години після роботи кожного дня і майже всі вихідні протягом 2 місяців. До follow up біхевіорал я вже не готувалась, пішла як є, з тими самими історіями.

Meta, London, IC5

Офер на Facebook я отримала через 5 років після того, як отримала першу роботу в IT.
Скоро буде рік, як я працюю на Meta в Лондоні. Зони комфорту на горизонті ще не видно, але челенджів — хоч відбавляй. Втім, ріст і прокачка скілів — неймовірні, але про вже тема окремої історії.

P.S. Дякую сусідці по парті за мотивацію, сусіду за настанови (своє віскі він вже отримав) та, звісно ж, трьом коням у полі, з яких все і почалось :)

👍ПодобаєтьсяСподобалось61
До обраногоВ обраному6
LinkedIn

Найкращі коментарі пропустити

Випускниця фізико-математичного класу,
механіко-математичного факультету, кандидат фізико-математичних наук іншим вайтішникам: «Я змогла в літкод та влаштувалася в МААНГи, то чому ви не зможете?»

Це все прекрасно і ви величезна молодець. Але заголовок вводить в оману та навіть тхне клікбейтом. Ви не світчер. У вас був надпотужний освітній бекграунд академічного рівня. Олімпіади, мехмат, аспірантура. Звісно, що ви лускали той літкод, як горішки. У вас вочевидь саме той склад мислення, що потрібне для, вибачте, задрочування літкоду. Ви тих задачок за свою академічну діяльність вирішили тисячі. Але справжні світчери — гуманітарії чи люди робочих професій — так не зможуть. Не давайте їм хибної надії.

Назва трохи вводить в оману, це не той світчинг, який мається на увазі зазвичай.
Коли розповідають саксес сторi з світчингу то починається з офіціанта і закінчується розробником гугла.
У вас скоріше еволюція, мех-мат, олімпіадниця, робота за спеціальністю 8 років, IT-курси — перша в списку, все логічно.
Загалом вітаю!

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Какие-то у вас дифы скучные, в Лондоне есть что-нибудь более интересное чем UDFs? Может инфра какая-нибудь?

Оце топчик-коментар))) Та є і інфра, але її треба вибирати на етапі вибору команд, якщо лежить душа

Всегда можно сделать hackomonth, конечно если смотреть в эту сторону.

Як на мене, найважчий етап інтерв’ю у FAANG це отримати запрошення на те інтерв’ю ... а коли в тебе PhD з математики, то ймовірність того, що до тебе постукаються FAANG рекрутери дуже висока ...

коли активно хайрять, то зовсiм нi

Мабуть, залежить від везіння ... бо навіть у 2021, коли хайрили всіх підряд, з фангів мені написав тільки Амазон з пропозицією релокації в Сіетл. Але мені вже було пофіг, бо я сидів в Маямі з грін картою, пив текілу і працював на ремоуті ...

в ті ситі часи рекрутери мети писали усім. Прибутки на фоні ковіду росли, у Цукерберга були наполеонівські плани найняти 100к розробників для метавсесвіту

Я думаю все ж залежить від локації. Коли я був в Україні, то мені ні разу не написали із MAANG. Коли опинився в Канаді (до війни), то за рік десь 10-15 листів від Амазонка і Мета. На кінець цього року вже сам заради цікавості подався в Гугл і о диво відповіли на наступний день🤷‍♂️ Так що трохи везіння і локація

Крута історія. Вітаю!

Вітаю — this journey is 1% finished :)
А коментарі нагадали анекдот про качечку

С дуру можно и ***ц сломать)
Чередуйте отдых и работу грамотно и все у вас получится.

Интересная статья. После почитывания блайнда создалось впечатление, что там должно быть минимум 4 раунда кодинга и задачи уровня hard/medium-hard, а тут как-то и 2 раунда всего и задачи вменяемые, это из-за того что европейский опыт или как-то связанно с позицией или там упрощенный хайринг ивент какой-то?

В Меті зазвичай дві задачі рівня мідіум-ізі, але треба їх закодити за 45 хвилин інтерью. Це з чіт-чет, швидким інтодакшн про себе, інтервьюер дав умову задачі, встигнути спитати чи розказати про корнер-кейси, закодити, а потім протестувати або розказати, як воно працює.

Еще ж человек под диверсити попадает ;)
Вообще женщина с кандидатской уже вин, не так уж много их в ФААНГ чтоб не брали.

одному мені здається, що маючи PhD з математики йти в trainee — це якось занадто?

одному мені здається, що маючи PhD з математики йти в trainee — це якось занадто?

Вас не удивляло, что в 90-х доктора наук шли на рынок торговать кросовками? Научная степень не конвертируется напрямую в профессиональный и финансовый успех, а вот начало новой карьеры в сфере, где финансовый потолок достигает миллионов долларов в год — конвертируется.

Кстати, на моей прошлой работе я постоянно собеседовал людей, у которых в резюме PhD (штатовских универов), но во-первых, они существенно лучших качеств на собеседовании не демонстрировали, во-вторых, даже те, у кого был PhD в релевантных сферах (типа Computer Science, Data Analysis и т.п.), на проверку оказывалось, что они занимались чем-то заурядным под надзором профессоров, и когда просишь рассказать, там что-то тривиальное типа «нужно было собрать данные с тысячи серверов и залить их в csv файл, чтоб дальше его кто-то обработал».

ні, не дивувало, тому що поза совковими НДІ спеціалісти були не потрібні
науковий ступінь З МАТЕМАТИКИ чи близької дисципліни має конвертуватись в 1-2 бонусних walkover levels, інакше «технічність» сфери взагалі під питанням. Аналітичні, дослідницькі і інтелектуальні здібності точно мають бути неабиякі, для лоу-левел формошльопства дійсно такі люди не підійдуть

ні, не дивувало, тому що поза совковими НДІ спеціалісти були не потрібні

А кто говорит вам, что за пределами украинских НИИ эти специалисты нужны?

науковий ступінь З МАТЕМАТИКИ чи близької дисципліни має конвертуватись в 1-2 бонусних walkover levels

Если бы был должен, рынок бы это порешал, но как видите, в реальности phd по математике не имеет никакого бонуса.

от я цьому і дивуюсь, і шукаю собі логічні пояснення, чому людина з клепкою в голові починає з того ж левела, як і сферичний гуманітарій, в галузі, яка постулює свою «технічність»

Ты или заходишь в индустрию с низов и поднимаешься до верху, или ждешь, как Джонни, что тебе кто-то приедет и даст офер на 500 тысяч потому что тебе кажется, что начинать с низов недостойно.

не розумію пасивну агресію і приписування мені того, що я не заявляв (про 500 тисяч і «недостойно»)
я просто рефлексую і шукаю для себе відповідь, не треба так накручувати себе

Под «ты» я обращаюсь к условному собеседнику для демонстрации определенной точки зрения, которая условно применима к нему, не принимайте лично.

500 тысяч

Ох уж эта мифическая цифра в 500 тыс.
Если задуматься, то 500 тыс дают всего 1000 кастомеров, которые платят тебе по 50 баксов в месяц (это 600 тыс в год).

Но, как говорится, есть ньюанс.

Первый, там где тысяча кастомеров, может оказаться и 2 тыс кастомеров и 3 тыс и 5 тыс, всеголишь после удачной рекламной компании, сделав иксы твоим доходам.

Второй, даже если ты просто раскачал бизнесс до фаанговской зарплаты и вдруг решил «уволится», бизнесс с таким доходом у тебя купят за 5-6м. А в фаанге сколько дают при увольнении, тыщ пийсят ?

Третий, и пожалуй главное, ты постоянно карапкаешся по длинной скучной лестнице, на которой реализуешь чужую, но не свою (если конечно не считать ипотечный дом) мечту.

Если задуматься, то 500 тыс дают всего 1000 кастомеров, которые платят тебе по 50 баксов в месяц (это 600 тыс в год).

www.youtube.com/watch?v=8kmUjJlNr88

має конвертуватись в 1-2 бонусних walkover levels, інакше «технічність» сфери взагалі під питанням

А якого дідька воно має конвертуватись в 1-2 бонусних левела?

В мене колега-американець навпаки говорив, що PhD, яких наймають на позиції програмістів, а не в рісьорч, то найгірші програмісти. Поки випускник с бакалавром чи навіть без диплома 3-5 років задр*тить літкоди, best practices, distributed system & system design типовий PhD займається науковою роботою. І код, який вони часто пишуть, то навіть не г*внокод, а образа г*внокоду, бо в своїй роботі в них ціль щось підрахувати, перевірити гіпотезу і т.д. і код взагалі не maintainable.

Якщо PhD працює не в рісьорч і не в сфері, в якій беспосередньо проводив дослідження (наприклад досліджував покращення ефективності distributed database systems і працює він DynamoDB), то його заслуги мало релевантні щодо його посади Software Engineer і давати йому 1-2 бонусних левела немає за що.

Кстати, на моей прошлой работе я постоянно собеседовал людей, у которых в резюме PhD (штатовских универов), но во-первых, они существенно лучших качеств на собеседовании не демонстрировали, во-вторых, даже те, у кого был PhD в релевантных сферах (типа Computer Science, Data Analysis и т.п.)

Згадав про двох колег у Штатах з PhD, зірок щось не хапали, по FAANG’ам не були, перебиваються сіньорською роботою уже багато років.
На попередньому стартапі, де кофаундери покинули топовий універ, і парочка працівників теж покинула, народ навіть стєбався, що у всьому світі PhD — це круто, а у Долині — покинути універ — це круто (being drop-out is badge of honor and a requirement to work here).

А от хто здивував внєзапно на одному ентерпрайзі, це 60+ сікх, з сивою бородою, у тюрбані, все, як релігія заповідає. Я скептично ставився (мол, старікам тут нє мєсто), а він через деякий час після кількох мітінгів засів і вродив допоміжну тулзєнь. Я чогось не очікував, що він кодер, думав, що він тільки секюріті полісі у клауді прописує.

В мене був перхід на .net і javascript. Можу сказати впевнено — ні, не занадто... можливо, після року інтенсивного навчання, коли ти і те бачив і се. Але після кількох місяців — повірте, не занадто. Дуже багато всього, що ти бачиш вперше, навіть якщо в тебе пхд. Так, я могла порахувати поверхневий інтеграл, чи знайти статистичні оцінки випадкової величини, а от продебажити джаваскріпт в f12 не могла.

Так, якщо йти в ресерч чи в data science, а не в веб, то пхд пригодилося б. Чому я туди не пішла — це вже інше питання. Тому пхд — це тренування мозку і якісь неявні переваги, які дозволяють швидше прогресувати, але прогресувати все одно треба з нуля а не з левела ап.

Знову ж таки, це лише моє враження. Якби я витратила більше часу на підготовку, то може стартувала б і не з нуля, але який тоді сенс? Все одно витрачений час той самий — або на навчання або на трейні-джуніор. Заради справедливості, трейні я була лише 1 місяць

я ж про це і кажу! чому не ресерч і дата, як ви кажете? там би більше знадобились ті скілли/практики, опановані на пхд і перед ним

ні, зовсім не так, а тому що легше в суміжну сферу із суміжними вміннями вриватись, ніж в ту, в якій нема «спільних запчастин»

Авторка — круто, молодець. Особливо круто, що за 5 років доросла і пройшла одразу на синьйора в Мету.

Заголовок і частина про світчера трохи клікбейт. За багато років роботи в айті більшість айтішників закінчували не факультети програмування, а мехмат, прикладну математику, фізику, радіофізику тощо і ніхто не вважав себе світчером. Інша справа, що більшість починали працювати в айті вже на старших курсах універу.

Авторка з її credentials (мехмат, PhD) взагалі могла б в де-небудь в рісьорч працювати, в тій же Meta, Facebook про що більшість айтішників можуть тільки мріяти.

Подвезли новый сезон от Уточки.

— Конееечно, ты в мехмате диссертацию писала...

Я не пойму почему тут все думают что доктора наук это сверхлюди?
Доктор наук это обычный человек который написал диссертацию на какую-то тему, по остальным тема его знания могут быть хуже чем обычного выпускника универа, так как он закончил универ уже минимум лет 5 назад, и половину программы уже забыл.
Даже если он и преподает, то он знает только один предмет идеально, да и то, на уровне опять то же универской программы.
Я понимаю еще если диссертация была по распределенным системам, архитектуре, облакам, или алгоритамам(Литкоду). И автор реально во всем разбирался, а не писал чисто что бы защититься. Это реально поможет пройти интервью в FAANG, или даже на реальном проекте. Но 99% диссертаций эта какая-то оторванная от реальной жизни около-математическая фигня. И много кто их пишет чисто формально, что бы удовлетворить всем требованиям, а не что бы разобраться в теме, и еще что-то свое реально полезное изобрести(Например создание REST это была диссертация одного чувака).

Я не пойму почему тут все думают что доктора наук это сверхлюди?

Тут думають що сверхлюди це всі професії крім ІТшників. 4 років сидіння на тому самому ІТ не пройшло безслідно.

Да, мне многие разработчики доказывали, что в не IT любой может легко 3k$ получать, а на некоторых профессиях и 10k$. А они бедные несчастные.

Сверхлюди не в плані грошей а в плані користі для суспільства. Хто такий ІТшник нав’язаного тим самим ІТ? Це безхребетний раб, смузіхльоб який розробляє нікому непотрібні сайтики і сервіси, лох і днище, якому має бути соромно признаватися що працює в ІТ а не працює якимось крановщиком, електриком чи вчителем в крайньому разі.

Нє, я не спорю, такі також є, особливо в криптоіндустрії де взагалі багато проектів створюються лише для того зібрати грошей з народу. Але ж не треба по ним про всю індустрію судити.

Десь так і є. Дисертація — це така ж праця, як і будь яка інша робота. Часом нудна, часом по вечорах, і переважно в тебе нічого не виходить в отих от всіх доведеннях.

І так, в тій математиці, яка не прикладна, реальних задач мало. Це все теорія, яка колись може і знайде якесь застосування в прикладній задачі, а може і ні. Найімовірніше, знайде застосування у іншій теоретичній задачі іншого науковця.

У меня жена преподавала и кандидат.
Нефига не знают они идеально. Просто вспоминают перед лекцией.
Можно подумать, что вы что-то идеально знаете. Люди они такие, если не надо постоянно держать в голове, не держат.
А предмет в одном и том же месте читается в лучшем случае три раза подряд раз в год. Смысл его держать в голове?

А дисертация — то же, что и курсовая. Только на максималках. Больше чеклистов и с большим количеством людей надо договрится.

Дуже цікаво і надихаюче.
Тут пишуть про бекграунд, після якого мало б бути все зовсім легко)
Але я бачу тут величезну працю, здібності і неймовірну кількість часу на навчання. І ще й офігенну його ефективність, дисципліну, вміння обирати правильну тактику і інструменти для навчання, сміливість і явну цікавість до роботи.
Не знаю нащо все зводити до бекграунду.
Ви умнічка, і історія дуже класна. То не бекграунд зміг, хоча і допоміг, а ви.
Цікавої роботи вам!
І дякую, мене ви точно надихнули, не на фаанг, але закинутий літкод відкрити захотілось.

Литкод без фаанга решительно лишен смысла.
Да и для фаанга годится в большинстве случаев чтобы пройти интервью.

Літкод корисний для себе, щоб розібратись в алгоритмах та структурах даних. Мені ці знання вже кілька разів пригодились на проекті, тому я радий, що витратив кілька місяців за літкод

Ключевой вопрос — сколько раз за год пригождается и как коррелирует с ЗП

Не говоритиму за всіх, але з ЗП корелюється в моєму випадку гарно. Вище середнього рейтингу, якщо вірити статистиці доу. Можливо мені просто пощастило і літкод тут непричетний.
Чи пригодиться часто — тут залежить від проекту, але скоріше за все вам не доведеться на кожному проекті робити обхід графу

Граф точно не многим видать.
Особенно на фронте.
А повлияло или нет на ЗП коррелирует с «пригодилось ли на собесе или нет»

А я і не на фронті дякувати Богу)

Ну ок)
Делать с ним то мало чего приходится)
Видать скорее имелось ввиду манипуляции, а не созерцание)

Не знаю. Я как бы в алгоритмах и структурах нормально, работаю кучу лет. Но литкод у меня вызвает только впечатление «нафига?».
Нет, ну правда, зачем мне может в реальной жизни пригодится очередное свойство простых чисел или особенность деления целых чисел? Все числа либо деньги, либо вещественные.
зы у меня вообще в 90% прецентиле и литкод на это никак не влиял.

Літкод це не лише властивість простих чисел чи особливості ділення. Там багато задач на графи, дерева, стек і тому подібні структури даних. Так, в більшості випадків воно не дуже пригодиться, бо це все реалізовано, але можна зустріти схожу задачу на реальному проекті і використати правильний підхід, який дасть приріст в перфоменсі

Угу. И шо, вы строили графы или деревья на основной работе?
Я бы честно по рукам дал человеку, который на проекте просто так решит дерево построить вместо использования написанных.

Так, в нас на проекті є графові звʼязки і довелось писати BFS вручну для обрахунку шляху

Ну и? Сколько раз за сколько лет?
А то как бы мне тоже приходилося преобразование фурье делать над голосовыми данными. Вопрос в том, что всего два раза за 20+лет.
а, выпускник 20го года. Вопрос снимается.

Зараз дуже багато де один з етапів інтерв‘ю — це whiteboard exercise. Не обов‘язково у фаанги, але і у хедж фонди, банки, інші компанії.

Інше питання, чи знадобляться ці навички для повсякденної роботи. Але для проходження інтерв‘ю це вже швидше must have

Дякую! Такі коментарі теж надихають!

Світчерка в сіньйори. Ну круто-ж. Вітаю!

Вітаю, незважаючи на відносну «простоту» підготовки з вашим бекграундом, пророблена дуже велика робота!
Два питання:
1. Наскільки зрозумів, ви маєте PhD з математики. Наскільки це було аргументом при співбесіді? Там взагалі знають про вашу ступінь?
2. Маючи PhD з математики, для вас реально не знайшлося більш кращої/відповіднішої роботи ніж фіксити легасі на пхп? Ви просили переводу на щось цікавіше?

Мабуть синдром iмпостора. Так, на деякi вакансiï (усяке нове та незрозумiле) фтанги прямо вказують, що PhD буде офiгеним плюсом, треба набратися трошки наглостi.

Привіт, Денис!

1. Можливо, мій PHD додав мені поінтів при пошуку кандидата на лінкедіні, десь у фільтрах. Можливо, при інших рівних умовах, він мені допоміг отримати оффер, теоретично це могло бути тим, що відрізняє кандидата від інших, які подібно пройшли співбесіду. Але мене не питали при співбесідах, що ж там було в моїй дисертації і яка задача вирішувалась? Думаю, наявність PHD це одна з неявних характеристик того, що кандидат може адаптовуватись, читати доки і досягати результату.

2. На «щось цікавіше» був інший процес найму. Наприклад, на data science в них інший процес, в рісерч теж окремо подаватись. Але, оскільки, я не розраховувала отримати офер, то пішла по звичайному процесу для Software Engineer. Тепер фіксаю легасі на пхп)) Цікаві задачі теж є, з ухилом в data science, але NDA, тому не розкажу.

А им и не надо. Я вам раскажу, причем тут PHd.
Кстати, MS тоже котируется.
У них, когда они с клиентом(аутсорсеры) либо с другими менеджерами за бюджет(не аутсорсеры) общаются есть метрика, типа вот в этой тиме есть два PHd и три MS, и вообще они все минимум BS.А дальше трава не рости, им вообще пофигу в какой области у вас PHd или MS. А если в тиме ещи и основатель какого-то стартапа, что был на слуху — вообще атас.
А вы еще и divеrsity команды улучшаете.
Современное IT все больше про метрики и все меньше про скилы.
Я всего один раз слышал, что наняли PhD на работу связанную с его работой.

С таким бэкграундом чтобы попасть в фаанг достаточно было синтаксис языка просмотреть по диагонали)

Дякую за історію! і привіт з Лондонського каштану)

в мене схожий маршрут був, тільки старт з сільської школи через економічний вуз, трішки роботи рекрутером, а потім вже світч в фронт енд і також 5 років, але на 4 рівень

Привіт з каштану) вітаю, теж маршрут не дуже по прямій лініії! Пінгани мене в ТГ, хоч буду знати хто прочитав)

60Е-35M-5H

Камон, это хороший результат. Тут 99% столько не решит.

26E-25M-5H
Легкі задачі — там більше код писати, ніж продумувати як зробити

Легкі задачі — там більше код писати, ніж продумувати як зробити

тут на форумі є люди, які не те що написати reverse list не змогли, а чужий код з поясненнями на відео не зрозуміли
dou.ua/...​rums/topic/31632/#2042401

🥴
Мабуть вони мітять в менеджери департаменту чи ще кудись.
Щоб більше ніколи не писати цей огидний код. Хоча, насправді, вони його писати й не починали...

Ще помітив, що коли був на всеукраїнських Олімпіадах, то краще йшли задачі на графи, аніж зараз, і різну хитру геометрію.
Проте зараз DP краще, і тоді ще взагалі не знав що є структура черга, тому інколи по часу не вкладався в задачах.

До речi так, проста задача на реверс списку може розгортатися на безлiч фолловапiв, де тупо iде ддос кiлькiстю змiнних, якi потрiбно тримати в головi

Поделись секретом, откуда ты эти ссылки берешь? Где-то ведешь секретный архив годноты? Поделись сразу всем, а не выдавай по одной ссылке.

Поделись секретом, откуда ты эти ссылки берешь?

сторінку засейвав колись, бо трігернуло спогади
отут у 24-му топіку викладав раніше
dou.ua/...​rums/topic/28593/#2120505
======
5) thread про Reverse List dou.ua/...​rums/topic/31632/#2042401 спочатку порвав на запчасті своїм високомір’ям, потім я порефлексував і згадав 2007 рік.
Паралельногрупник закликав мене і колегу на попити пивка і поділитися досвідом.
Він їздив у Москву на днях і там Microsoft проводив hiring event у Штати.
Його там питали... правильно..., як зробити Reverse List.
«во грузять» — подумали ми з колегою і синхронно це сказали вслух.
Благо, у нас не було того гонору, як у треді, ми читали Джоеля Спольскі («которий нє с Польскі, а с Массачуссетса» © Punk), і прочіх цікаво пишучих чуваків.
«Там не потрібні люди, котрі готові бібліотеки юзають, там потрібні люди, котрі при потребі напишуть ці бібліотеки» — такий був лейтмотив статей.
Ще із запам’ятавшогося у ті далекі роки була приблизно така фраза переказана колегою із якогось Гуглового відео про датацентри
— Ми кажемо не «якщо у нас з ладу вийде вінчестер», а «КОЛИ у нас з ладу вийде вінчестер», бо при наших масштабах і статистиці поломки вінчестерів — це невідворотня подія.
======

Где-то ведешь секретный архив годноты? Поделись сразу всем, а не выдавай по одной ссылке.

веду, частина в голові, частина у на вінчі, ділюся, коли момент підходящий, усі на карандаше у мене :-)

И такого багажа сейчас скорее всего не хватит

Блєск й ніщєта українського айті. ПХД в точних науках йде в манкікодери. Прєлєсно блять, прєлесно...

А там думаете другой кодинг?)))

Думаю есть разный)
Учитывая потенциальный спектр решаемых задач.
Но и формошлепства хватает.
Скорее — шанс выцепить нетривиальную задачу существенно выше чем на рядовой шлюпке(где максимум что светит — запилить Инфинити скролл)

Ну тут жеж тест писала Людина, яку звільнили з МЕТА (здається), що він там займався якоюсь специфічною низькорівневою роботою, так що тепер не вистачає загального досвіду.

І це теж правда. За рік скіли розвинулись, особливо soft skills ги. А всі технічні навички дуже специфічні і кастомізовані під фб і дуже малоймовірно, що їх можна буде десь використати. З іншого боку, страх перед яимочь новим повністю відсутній. Тепер мені абсолютно все одно на чому доведеться писати. Можу додавати окрему стрічку в резюме — ability to read docs 😂

абсолютно все одно на чому доведеться писати

Ну зазвичай жеж не мова створює проблеми (стандартну бібліотеку якої з екземплами і туторіалом можна почитати), а що саме намагалися зробити автори поточної архітектури.

Так, але погодьтесь, що переважно люди шукають вакансії на тій мові, з якою знайомі. Або, наприклад, якщо в переліку скілів є половина тих, з якими людина не знайома, то ж є якийсь страх, що можна не справитись або не виправдати очікувань?

От це відчуття начисто в мене вбито. Бо дуже часто доводиться працювати з тим, що бачиш вперше. І під «вперше» я маю на увазі не кусок коду, а підхід, кастомну тулзу (це просто біль), метрику, мл модель ітд, які ще й написані хто на датасвармі, хто на хаскелі а хто на чому. А щоб це запустити, то ще треба доків начитатись і до колег сходити за порадою.

І це не кубернетіс, на якому раз щось зробив — і вже знаєш, це кожен раз щось інше.

Так, але погодьтесь, що переважно люди шукають вакансії на тій мові, з якою знайомі. Або, наприклад, якщо в переліку скілів є половина тих, з якими людина не знайома, то ж є якийсь страх, що можна не справитись або не виправдати очікувань?

Так само й рекрутери парсять кандидатів за навичками та досвідом з тих самих міркувань.

кастомну тулзу (це просто біль), метрику, мл модель ітд, які ще й написані хто на датасвармі, хто на хаскелі а хто на чому.

теж чув про таке ув великих компаніях і частково зіткнувся сам на поточному проекті.

Ну так поведай нам какой там кодинг

ПХД в точних науках

отримує в нас мало не мінімалку, ще й періодично ходить у відпустку за свій рахунок, бо грошей на відділ не вистачає.

Ну я теж КФМН й дуже добре знаю що це таке ще в 80-90. Але йти на манкікодинг (а в Лондоні ФБ це манкікодинг) це занадто. Ну пішла б до якогось ХФТ то 70-100 зі старту й повага з бонусом 50-60 штук, а йти пхпісткою будучі тру КФМН, ну то жесть.

так з часом, як буде бажання, роботу можна поміняти. а всі ці «ктулху фхтагни» хороші тим, що по-перше мають налагоджений механізм перевозу людей (всі ці візи й інше бюрократичне барахло), а по-друге, дають дуже непоганий рядок в резюме.

Так в ФБ в Лондоні десь такі зарплати і є — 100 база і 50 на рік акцій ще й бонус зверху. Все у фунтах.

Не кажи, манкікодинг якийсь, одне діло в Епамі працювати у Львові десь чи на кафедрі за рубчик з копійкою, яка там Мета у Лондоні.

О, бачу колегу! Так точно описали ситуацію)

О, бачу колегу!

так і є :) я з тих що ніяк не можуть відпустити науку з кінцями, все ще намагаюся на чвертьставки в інституті теорфізики щось теорфізити, тож знаю ситуацію з середини... викликає в мене жахливе відчуття безвиходу.

Розумію.... Але коли мене запропонували перевести на чверть ставки — я і звільнилась)

Блєск й ніщєта українського айті

Будь-ласка поправив:
Блєск і ніщета Земного (в сенсі планети) ІТ. Бо така сама штука трапляється навіть в Швейцарія, в замовника в конторі більшість після PhD йшли в індустрію в смислі в ІТ.

А чи є перспективи для .Net-чиків у FAANG? Чи потрібно буде змінювати стек?

Основний стек — це Php i React.js, за рік я трохи попрацювала з Python та Haskel. Є і інші мови, загалом стек залежить від команди, але .net я не знайшла, коли вибирала команду.

.NET-чиков за мелкий прайс нанимают в Microsoft в наказание за то, что те не сели в свое время и не выучили Java.

Не справедливо, учитывая что .NET это Java, улучшения до уровня Scala, и имеющая 99% фич Scala 3, которая у джавистов считаеться языком для умных. И которую типа не все джависты могут ослиись.

Мне уже даже .NET надоел немного, самому даже хочется на другом языке пописать.
Я даже на досуге Scala и Python выучил. Так что это для меня не трагедия.

Ну как будет на него оффер на 500k, буду учить. А пока я не слышал что бы в FAANG его юзали.

Зачем тебе про это слышать, если можно с гораздо большим удовольствием упиваться своими мечтами о том, как тебя будут звать куда-то работать принципалом за 500К только потому что ты где-то прошел курсы и тебе уже должны?

Ну ты уже с 500k оффером или пока ждешь, когда свет включат?

Те, кто пытаются ввести в своей конторе Rust совершают одну и ту же ошибку: они заставляют людей идти и читать rustbook. Люди охуевают, ничего не понимают, продуктивность падает, выгорание, депрессия, суицид.

Правильный способ введения Rust: говоришь что вводишь Haskel и OCaml. Люди еще больше охуевают, ничего не понимает, падает продуктивность.
Через две недели говоришь: ну хорошо, уговорили, давайте делать Rust, отправляешь их читать rustbook. Люди смотрят, говорят «вот заебись, здесь все логично и понятно, можно кодить. Можно было с этого начинать?»

Правильный способ введения Rust:

його не існує, це якесь помєшатєльство, це Z-реваншизм C+±ників 90-х і початку 2000-х

вот когда TIOBE-index покажет Rust в топ-1, тогда і поговорім
...
ви сєйчас здєсь -> жопа

Пока ты смотрешь рейтинги и шаришь мемы про то какой сложный borrow checker, в big tech целые подразделения идут all-in на Rust для функционального кода. И они пилят вещи, которые работают в фундаменте сегодняшних информационных технологий, это не стартапы из трех человек, делающих crud.

Тебе про это, ясное дело, не напишут на medium.

А когда Rust гипотетически доползет до топ-1, это будет знаком что с него давно надо было слезать, так как бороться за хлеб с 99% остальными работниками айтишного труда — занятие не очень умное.

Пока ты смотрешь рейтинги

З чого ти взяв, що я дивлюся рейтинги???
Це навіть рейтингів не треба дивитися, щоб
1) знати, що воно на дні
2) не лізти в це, пардон, гуано.

Це мова з синтаксисом, що викликає різкий головний біль, як я уже писав — Z-реваншизм C++ -ників 90-х і початку 2000-х. Вони впітали молоко Страуструпа, потім Меєрса і Александреску, мова стала простішою і їм стало скучно, вони знайшли свою нішу у Rust
(Писав раніше теж тут — dou.ua/...​rums/topic/28593/#1951798 )
Інші теж писали своє враження — dou.ua/...​rums/topic/31632/#2042740.
В общем, просто — іліті не нра, треба сложно, ібо ми іліта.

Мейнстрімною мова не стане, у неї вузька ніша — бути кросс-платформленним Assembler. Колись кросс-платформленним Аssembler була стара-добра C-шечка, але звісно, що її похоронило там недоліки того, що це Assembler — пиши куда хочу в пам’яті, плутай int і pointer, імплементуй HArray :-)

в big tech целые подразделения идут all-in на Rust для функционального кода

Ой, я вас умоляю, був я big tech, а ті, хто поза big tech носилися із Haskell, чи ще чимось подібним, видряпували на бересті — «оно, контора з FAANG юзає нашу мову». Вияснялося, що це півтора полудурка для якихось потреб заюзали цю мову і воно потім unsupportable, а чуваки пішли далі свою геніальність по світу нести.

У старі часи я ще надихався статтями Пола Грема про функціональні мови програмування, і т.д., і як вони запиляли Viaweb на Lisp
www.paulgraham.com/avg.html

А потім проходять роки, і виясняється, що той продукт переписали кху ям на C++, ібо нєфіг вимахуватися
wiki.c2.com/?BeatingTheAverages
«Paul Graham said Yahoo! Stores relaunched in C++ in Jan 2003.

current engineers didn’t understand Lisp and were too afraid to learn it.
...
I believe the pointy-headed bosses were the driving force in the port. When I worked at Yahoo, management were nervous about the software being written in Lisp because they thought it would be hard to find programmers who knew it. Not so much that they couldn’t find any, I think, but that because it was a comparatively rare skill, management would have less leverage over the hackers. When skills are not a commodity, employees aren’t hot-swappable.»

Я не знаю что ты пытаешься почерпнуть из мемуаров пенсионеров. Уже кагбы пора свои писать.

Я не знаю что ты пытаешься почерпнуть из мемуаров пенсионеров.

Блд, чувак, я був про тебе кращої думки, а ти якусь піонерію включаєш, ніби Семухін твій аккаунт вкрав.

Та Екклезіаст казав кілька тисячоліть тому
«9 Що було, воно й буде, і що робилося, буде робитись воно, і немає нічого нового під сонцем!...

10 Буває таке, що про нього говорять: Дивись, це нове! Та воно вже було від віків, що були перед нами!»

Це все й софта і розрозбки софта стосується. Для мого покоління у другій половині 90-х було чудом така штука, як VmWare. А пізніше виявилося, що це давним давно було на IBM System/360 у 1963-му році.
Чи оновлення документації при розробці OS/360, описана у книжці «Міфічний людино-місяць» — тоді група людей апдейтила доки, друкувала їх (фізично), і зранку у девелоперів на столах були свіжі книжки з свіжою докою.
Усі абстракції можна почерпнути у мемуарах і не займатися перевинаходженнях велосипедів.
Я шкодую, що у мене нема всього часу світу, щоб прочитати різноманітні мемуари.

Чи ще ось ця стаття 2007 року (15 років тому, як вчора), про те, щоб не паритися з оптимізацією, залізо наздожене
www.joelonsoftware.com/...​09/18/strategy-letter-vi

Але для комп’ютерних ігор треба вже і зараз :-)
парочка статей про Michael Abrash
blog.codinghorror.com/...​hing-as-the-fastest-code

blog.codinghorror.com/...​en-to-like-heroic-coding

Уже кагбы пора свои писать.

:-)
24-й топік і 7-8-й є
поза ДОУ — у мене є своє коло спілкування, з ким я розшарюю більше.

Блд, чувак, я був про тебе кращої думки, а ти якусь піонерію включаєш, ніби Семухін твій аккаунт вкрав.

Не было желания писать что-то умное чуваку, который решил, что нужно в цивилизованном обществе намекать, что опонент имеет связь с Z свастикой.

Це все й софта і розрозбки софта стосується.

Может касаться а может и не касаться. Ты ишешь патерны там, где их может и не быть, и скорее всего нет. И находишь потому, что хочешь найти.

Для мого покоління у другій половині 90-х було чудом така штука, як VmWare. А пізніше виявилося, що це давним давно було на IBM System/360 у 1963-му році.

Для твоего поколения во второй половине 90-х туалетная бумага тоже была чудом, а потом оказалось, что она в штатах давно была в 63-м году.

Не было желания писать что-то умное чуваку, который решил, что нужно в цивилизованном обществе намекать, что опонент имеет связь с Z свастикой.

я в наступний раз буду теги сарказм наліво і направо розставляти для тебе

Может касаться а может и не касаться. Ты ишешь патерны там, где их может и не быть, и скорее всего нет. И находишь потому, что хочешь найти.

ні, вони просто є
так само, як і зараз купу паттернів і взаємозв’язків у людській поведінці розколупали через хімію мозку

Для твоего поколения во второй половине 90-х туалетная бумага тоже была чудом, а потом оказалось, что она в штатах давно была в 63-м году.

1. Нє, для мого покоління були жарти у 80-х по тєлєку про людей з бубліками рулонів туалетного паперу на шиї, бо їм вдалося закупитися
2. «в цивилизованном обществе» сам зводиш діалог до піонерї і примітивізму

Когда rust будет safety critical compliant, тогда и поговорим :-)
А пока что да, на нем удобно писать разный тулинг, ядро какое то
Он таки ловит ряд ошибок (массивы, поинтеры)
Но это можно интегрировать и в С++ сначала фреймворком, но я вангую скоро фичи раста поползут в стандарт С++. Что и докажет, что языки-форки это обкатка новых парадигм и фич сначала на молодняке, а затем интеграция в языки для папиков.

но я вангую скоро фичи раста поползут в стандарт С++

Если поползут, то это будет приговор для раста.
Есть Си подобный синтаксис, на котором выросли 90% программистов в мире.
И есть раст, со своим уникальным шифтовым синтаксисом и желанием всех переучить.
Вывод очевиден.

И есть раст, со своим уникальным шифтовым синтаксисом

глядіть усі на неймовірний фокус — я залайкав комментар DNA Exp

Но это можно интегрировать и в С++ сначала фреймворком

Если что-то можно запилить фреймворком, это бы уже запилили и оно бы лежало где-то на гитхабе. И если б оно в итоге реально работало, им бы широко пользовались.

но я вангую скоро фичи раста поползут в стандарт С++.

Вот когда, тогда и поговорим :)

Ну и на высоких левелах Microsoft тоже нормально платит:
www.levels.fyi/...​el=Principal Engineer (V

Джони, вместо того, чтоб копаться по каким-то сайтам, надо смотреть что у тебя написано в offer letter.

Я одновременно в руках держал несколько оферов, в т.ч. из MSFT, и MSFT был самый низкий TC. Это при том что рекрутер MSFT немножко офигел и включил в TC стоимость бенефитов, надеясь что я не замечу. Я заметил.

І як, сильно далі Java за .net продвинулась? Співвідношення кількості спеціалістів до вакансій приблизно таке саме, зарплати приблизно такі самі, легасі більше, мова програмування гірша і старіша, розвивається повільніше.

Тут не понял прикол, .NET реально более продвинутый чем Java по всем параметрам, и был на протяжении всех 20-ти лет существования.

Уві но перформанс все еще не дотягивает до джави.

Так это скорее к рантайму c компилятором/интерпритатором вопросы, хотя детский сад «кто круче Java или C#» - весьма забавен.

FAANGам пофіг який стек, аби мозги працювали в потрібному руслі. Якщо є голова і досвід, за 2 тижні перейдеш на новий стек. Стек це лише мова і інструменти. А ось база у всіх загальна.

Ось на щось концептуально інше переходити буде важче, скажімо із backend на frontend, чи з імперативних інструментів на функціональні.

а 2 тижні перейдеш на новий стек.

Ага, особенно с какого-то PHP, или Node.js где нет потоков, сборки мусорва, и управления памятью, на язык где это есть.

Ну ти б ще з асемблера на джаву якусь приклад привів )

На ассемблере уже никто не пишет, а на всяких «игрушечных» языках без многопоточности, и асинхронности, дженериков, и тп, типа Python, Ruby, JavaScript, PHP, больше половины разработчиков пишет.
Да, я знаю потоки в некоторых из этих языков есть, но их не юзают, а создают отдельные экземпляры приложения.
И у многие из них тонкости .NET даже спустя год понять не могут, и пишут на них с багами мнгопоточности, и памяти, а если про асинхронность с многопоточностью говорить, то тут вообще мрак. Поэтому мне смешно читать про 2 недели.
2 недели это возможно еще с .NET на Java или наоборот.

Вообще в PHP и Nodejs есть и потоки, управление памятью, и сборка мусора.

Многопоточность в Node.js?) И как там создать поток? А как их синхронизировать по аналогии с lock в .NET?
А как выделить мегабайт памяти в стеке? А как в куче? А как за кучей?
А как вызвать сборку мусора?(понятно что она есть, но ей нельзя управлять).
В других языках из списка потоки есть, но в Web API обычно не юзаються, а создаются отдельные экземпляры приложения, на каждый поток. Поэтому многие разработчики даже и не знают что они есть.

Многопоточность в C#? И как там гарантировать отсутствие data race на уровне самого языка? Как убедиться, что досутп к глобальным переменным возможен только с принудительной синхронизацией? Как проверить, является ли тип потокобезопасным или нет по аналогии с Send/Sync в Rust?

Управление памятью? А как там детерминированно удалить объект из памяти? Как обстоят дела с поддержкой альтернативных реализаций кучи? Как запретить аллокации если код выполняется на embedded device?

Многопоточность в C#? И как там гарантировать отсутствие data race на уровне самого языка? Как убедиться, что досутп к глобальным переменным возможен только с принудительной синхронизацией? Как проверить, является ли тип потокобезопасным или нет по аналогии с Send/Sync в Rust?

Управление памятью? А как там детерминированно удалить объект из памяти? Как обстоят дела с поддержкой альтернативных реализаций кучи? Как запретить аллокации если код выполняется на embedded device?

Подозреваю что многое из этого можно реализовать в пулах, с всякими fixed стейтментами. Там где хочется почувствовать себя раст джедаем всегда есть форточка unsafe где можешь хоть биты в регистры писать.
Но сразу скажу, что самые толковые многопоточные решения строятся на принципах shared nothing или близкие к этому. Иногда lock free. Все остальное — дроч для растоманов, в котором под 30% времени проц будет тратить на переключение контекстов и обьекты синхронизации. Про дебаг этой лапши, которая просто может вести себя по разному на разных моделях процессоров и всплесков гравитационных волн от слияния квазаров на другом конце вселенной, просто умолчу. Нехай щастить, как говорится.

Там где хочется почувствовать себя раст джедаем всегда есть форточка unsafe где можешь хоть биты в регистры писать.

Там, где хочется почувствовать себя раст джедаем, есть proc macro и generic associated types, а не usnafe.

Но сразу скажу, что самые толковые многопоточные решения строятся на принципах shared nothing или близкие к этому. Иногда lock free. Все остальное — дроч для растоманов, в котором под 30% времени проц будет тратить на переключение контекстов и обьекты синхронизации. Про дебаг этой лапши, которая просто может вести себя по разному на разных моделях процессоров и всплесков гравитационных волн от слияния квазаров на другом конце вселенной, просто умолчу. Нехай щастить, как говорится.

Проблема в том, что единственный способ реализовать «share nothing» в .NET — это вместо запуска нескольких потоков запускать несколько разных процессов. Но тогда возникает нескромный вопрос, зачем там вообще нужен System.Threading.*

это вместо запуска нескольких потоков запускать несколько разных процессов

Что-то я не уловил мысль.
А чем System.Thread не угодил ?
Это вроде как чистый эквивалент standalone thread из Win32 api, в отличии от Task где несколько потоков может шарить один и тотже тред из пула в целях экономии ресурсов ОСи

Так при многопоточности и так под капотом шарится «физический» поток. Например, у тебя проц на 4 ядра, а ты создаешь 100 тредов и запускаешь их одновременно, по факту у тебя только несколько тредов работают реально parallel, остальные ждут своей очереди.

Ты не можешь в .NET гарантировать, что какой-то объект не шарится между потоками небезопасным способом. System.Threading позволяет запустить поток, да, но дальше там начинается дикий запад, усиленный тем фактом, что даже куча встроенных в .NET class library структур имеют неопределенное поведение, если шарятся между потоками.

Вот если запустить два разных процеса, то по крайней мере есть гарантия, что процесы не могут полезть в память друг друга.

Ты не можешь в .NET гарантировать, что какой-то объект не шарится между потоками небезопасным способом. System.Threading позволяет запустить поток, да, но дальше там начинается дикий запад, усиленный тем фактом, что даже куча встроенных в .NET class library структур имеют неопределенное поведение, если шарятся между потоками.

Вот если запустить два разных процеса, то по крайней мере есть гарантия, что процесы не могут полезть в память друг друга.

Забавное обьяснение. Создавать процессы вместо тредов потому что
«кто-то загадочный может полезть в твой тред и записать переменную без твоего ведома».
Я предлагаю развить эту идею. Кто-то загадочный может полезть к твоему процессу и поменять файл от которого зависит твой процесс. Получается слишком небезопасно. Нужно отказаться не только от тредов, но и от процессов. И запускать только по одному потоку на каждой физически выделенной машине. Ну или для бедных — виртуализация. А для слишком бедных, которые носят по четыре крестика на пузе — раст.

Я сегодня добрый, поэтому объясню подробнее.

Когда мне приходит в руки code review, написанный на C# джуном с тремя днями опыта работы, я могу не глядя на этот код замерджить его, будучи почти на 100% уверенным, что там нет проблем с управлением памятью. Там могут остаться косяки, связанные с вызовом dispose / использованием блока using, но это косметически дефекты, не влияющие на фундаментальную работу приложения.

Но я не могут быть уверен на 100%, что там нет проблем, связанных с неправильным использованием многопоточности. По той простой причине что .NET/C# не предоставляет никаких встроенных инструментов для их обнаружения. Когда я вижу код типа

this.parent.is_locked = false

я не знаю, этот код корректный или нет, если я не знаю, сколько потоков и как используют твой класс, как они синхронизируют доступ, если не видишь определения полей this.parent и parent.locked и т.п. Т.е. без полного аудита кода я не могу даже судить о корректности одной строчки. Как так, ну ведь Tasks же наверняка решают эту проблему? Нет, Tasks эту проблему вообще не решают никак, проблема не с тем как и где потоки запускаются, проблема в том, что доступ к любому полю любого класса возможен из любого потока и предотвратить это можно только жестким аудитом кода и минимизацией использования многопоточности (отказаться от нее вообще нельзя, ибо финализаторы выполняются в отдельных потоках, даже если ты потоки не запускаешь). Пичальбида.

Есть несколько языков, где эту проблему решили.
В ноде, где общая память серьезно лимитирована и не позволяет ничего накосячить. В эрланге, где общение между потоками строго регламентировано. В расте, где присутствует свободная потоковая модель с общей памятью, но корректность обращения к общим данным контролируется с помощью системы типов, котоаря позволяет декларативно на этапе компиляции проверить корректность обращения к общим данным..

Ты можешь шутить, но запуск разных процессов .NET приложений — это один из единственных способов иметь корректно работающее приложение, которые может получать преимущества параллелизма и многих ядер, при этом не полагаясь на то, что какой-то разработчик где-то не накосячил и не забыл вставить lock.

Общие файлы тоже могут быть проблемой. Если их немного, это относительно легко контролировать и обеспечить безопасность. Если же их много и к ним возможен рандомный неопределенный досутп — таки да, будут те же проблемы и надо будет использовать более продвинутые менахимы изоляции.

this.parent.is_locked = false

Что это за дивная конструкция. Откуда это взято ? Почему не каноничный lock(this.parent) ?

какой-то разработчик где-то не накосячил и не забыл вставить lock.

Что значит накосячил ? Ты пишешь или однопоточное приложение или многопоточное, с соответствующими обьектами синхронизации, локами для тредов, спинерами для тасков.

Слушай. Я задам всего один простой вопрос. На .NET можно создать надежное многопоточное приложение или нет ?

Если можно, то о чем тут спор ?
А если нет — может ты в MS баг репорт запостишь и миллион дотнетчиков, которые каждый день в каждой пятой строчке кода пишут async await и task поголовно перейдут на раст.

this.parent.is_locked = false
Что это за дивная конструкция. Откуда это взято ? Почему не каноничный lock(this.parent) ?

Не обращай внимания на названия переменных. Если тебя «is_locked» смущает и наводит на странные выводы, пусть будет

this.parent.is_banned = false;
Слушай. Я задам всего один простой вопрос. На .NET можно создать надежное многопоточное приложение или нет?

На .NET, взяв lock(my_object) можно гарантировать, что никакой другой поток в то же время не будет работать с этим же объектом, не взяв на него lock?

А если нет — может ты в MS баг репорт запостишь и миллион дотнетчиков, которые каждый день в каждой пятой строчке кода пишут async await и task поголовно перейдут на раст.

www.itnews.com.au/...​-c-cant-quit-crimp-528376
www.zdnet.com/...​nguage-for-secure-coding

На .NET, взяв lock(my_object) можно гарантировать, что никакой другой поток в то же время не будет работать с этим же объектом, не взяв на него lock?

Да, у каждого обьекта есть синк рут вокруг которого можно построить синхронизацию.

            var s = new StringBuilder();

            var t1 = new Thread(() => {
                lock (s) {
                    while (true)
                    {
                        Console.WriteLine(s);
                        Thread.Sleep(1000);
                    }
                   
                }    
            });

            var t2 = new Thread(() => {
                while (true) {
                    Thread.Sleep(1000);
                    s.Append("x");
                }
            });

            t1.Start();
            t2.Start();

            t1.Join();
            t2.Join();

Что выдаст этот код?

Баг выдаст, ты

lock (s)

забыл написать во втором треде.

Тебе вообще не кажется странной ситуация, делать намерено баг в коде и удивлятся что код работает с багом ?

Как же так, ты ж писал, что

Вопрос:

На .NET, взяв lock(my_object) можно гарантировать, что никакой другой поток в то же время не будет работать с этим же объектом, не взяв на него lock?

Ответ:

Да

Оказывается, гарантировать нельзя, нужно таки делать аудит кода и надеяться, что никаких косяков не пропустишь.

Оказывается, гарантировать нельзя, нужно таки делать аудит кода

Какой еще аудит кода ?
Ты бы еще написал
MyClass obj = null;
obj.Func();
и сделал круглые глаза что тебя дот нет не ударил по рукам на этапе компиляции.
Напиши нормальный код, не такой как пишут джуны.
И будет тебе счастье.

Мы можем вместе прийти к выводу, что ты согласен с тем, что .NET/C# дает возможности для написания потокобезопасных приложений, но никак не предотвращает написание непотокобезопасных приложений?

но никак не предотвращает написание непотокобезопасных приложений?

Это утвердждение не верно. Как минимум при работе с юай, в самом очевидном месте, сыпит эксепшинами что контролы нельзя менять из паралельных тредов. Нужно использовать Invoke. Возможно это работает не абсолютно везде, мало ли в мире чудес, но точно не тянет на «никак не предотвращает»

Ну и твою цитату я бы переписал.

Мы можем вместе прийти к выводу, что ты согласен с тем, что Rust дает возможности для написания потокобезопасных приложений, но никак не предотвращает написание непотокобезопасных приложений?

Потому что я думаю при твоих талантах ты найдешь как умышленно доламать и Раст в многопоточность, как только что доламал си шарп забыв про локи.

PS: А вообще рано тебе еще Артемка в процессор, рано.
Вот представляешь, выгнали в следующем году еще 5 тыщ девелоперов с фаанга. Оставили лучших из лучших, тех кто перерешал всю площадь литкода в квадрате. И тут, назначают тебе ответственную задачу Писать юай для новой операционки на новом процессоре. И ты такой, ну лохи, ну юай в одном треде, ну ктож так делает. И начинаешь писать мнопоточный юай ... И тут выясняется, что не все девелоперы в твоей комманде посещают церковь по воскресеньям, а некоторые так и вовсе не крещенные. Грешники вообщем. Ну ты понял .... п*да проекту. Такие дела. Такие дела.

Как минимум при работе с юай, в самом очевидном месте, сыпит эксепшинами что контролы нельзя менять из паралельных тредов. Нужно использовать Invoke.

Так это баг или фича? Почему они не пробрасывают все через Invoke по дефолту, если они сами знают когда ты в нужном потоке, а когда нет?

Возможно это работает не абсолютно везде, мало ли в мире чудес

Мягко говоря немного низкая планка качества, когда мы говорим о корректности работы программы.

Я не понял зачем ты UI притянул, многопоточность не сошлась на UI.

Потому что я думаю при твоих талантах ты найдешь как умышленно доламать и Раст в многопоточность, как только что доламал си шарп забыв про локи.

В safe Rust не найду, смекаешь?

Так это баг или фича? Почему они не пробрасывают все через Invoke по дефолту, если они сами знают когда ты в нужном потоке, а когда нет?

Возможно и фича. Потому что инвок стоит денег. И когда ты его явно вызываешь из другого потока, ты видишь где может подтормаживать и у тебя появляется мысль, всетаки вклинить апдейт контрола в основной поток. Чаще всего это получается.

Возможно и фича. Потому что инвок стоит денег. И когда ты его явно вызываешь из другого потока, ты видишь где может подтормаживать и у тебя появляется мысль, всетаки вклинить апдейт контрола в основной поток. Чаще всего это получается.

Обычно количество обновление в UI минимально и проброска между потоками не повлечет к проблемам с производительностью.

Там, где надо обновлять много, там и в основном UI потоке не все так гладко (смотреть, например, зачем ввели BeginUpdate/EndUpdate -social.msdn.microsoft.com/...​pdate?forum=csharpgeneral) и нужно применять дополнительные средства, когда много вещей обновляется — этот механизм можно было расшарить на всю библиотеку Windows Forms

О чем спор вообще? Этот голимый WinFoms, WFP, UWP и тп уже давно никто не юзает, уже нет давно никакого Desktop UI на .NET с одним UI потоком.
Весь UI давно в веб и на SPA, на Angular, React и тп.
Или если надо Desktop то на каком-то Electron(тот есть на том же JS и HTML).
Может WinFoms с одним потоком и был ошибкой, но это блин уже далекое-далекое прошлое, по нему судить о .NET 7 2022-го года как-то глупо.
Насчет lock вообще, lock это зло, тем более из коробки, как в Python такая фигня будет блокировать обьект при каждом обращении, и твое приложение фактически станет однопоточным.
Для задач многопоточности нормальные люди давно юзают Actor Model, и ее реализацию в виде Task Data Flow в .NET. И immutable коллекции и объекты.
В кратце, вместо блокировки 100 потоков которые ждут входа в lock ты просто отправляешь сообщение в очередь, которую будет читать выполнять один поток, и менять свое состояние, к которому есть доступ только у него.
Этим патерном можно заменить все lock и их аналоги.
А в immutable collection/object могут читать сотни потоков одновременно, без проблем, что идеально для всякого кеша.
Одна из причин почему в Python потоки никто не юзает, как раз вот такая вот блокировка по умолчанию, которую ты хочешь, которая превращает приложение в одно поточное.
P.S. И ты .NET опять с Python спутал, я ни разу не слышал что бы в .NET который содержит все возможные фичи многопоточности создавали процессы вместо потоков, как в Python, Ruby, PHP, и Node.js.

В кратце, вместо блокировки 100 потоков которые ждут входа в lock ты просто отправляешь сообщение в очередь,

Тоесть в очереди обьектов синхронизации нет ?
Или каким образом разруливается ситуация когда один еще не дописал, а второй уже хочет читать. В очереди один элемент.

Насчет lock вообще, lock это зло, тем более из коробки, как в Python такая фигня будет блокировать обьект при каждом обращении, и твое приложение фактически станет
однопоточным.

В многопоточном приложении есть критическии секции. Обычно потоки строят так что 99% времени они звнимаются своими делами и только при входе в критическую секцию требуют лок на ресурс, например, чтобы изменить атомарно значение пары переменных или 1% времени.
Этот 1% времени не делает из многопоточных приложений однопоточные.

Я уверен под капотом новый елемент в очередь ложат так:
public static float Interlocked.CompareExchange (ref float location1, float value, float comparand);

Interlocked.CompareExchange(lastItem.next, newItem, null)
Т.е:
if (lastItem.next == null)
{
lastItem.next = newIteml;
}
Это выполняется атомарно, без блокировке потоков, на уровне процессора.
Точнее там:
while(!Interlocked.CompareExchange(lastItem.next, newItem, null) {
lastItem = lastItem.next;
}

Это лок фри алгоритм. Он вообще на while может подвиснуть и в холостую крутится. Особенно когда как ты написал в вводных 100 потоков, будет ровно таже ситуация что и с лок. Один будет продвигаться, остальные даже не ждать а жрать в холостом цикле процессор.

Явно одно маленькое lock-free присвоение будет быстрее чем переключение контекста потоков с инвалидацией кеша процессора и кучей других операций.

Один будет продвигаться, остальные даже не ждать а жрать в холостом цикле процессор.

Ну так это не серебренная пуля, а просто способ как положить один элемент в очередь, без блокировки потоков. Если у тебя 100 потоков ждет, то просто пиши условно порцию элементов из 10-100-1000 и потом Thread.Sleep().
Что бы другие записали.
Но вообще такая ситуация это уже лютый быдлокод.

Явно одно маленькое lock-free присвоение будет быстрее чем переключение контекста потоков с инвалидацией кеша процессора и кучей других операций.

Везде есть ньюансы и лок фри их имеет предостаточно, это не серебряная пуля. Особенно на твоих вводных в озвученных 100 потоков, когда один продвигается. Остальные крутят процессор в холостую.

Ну так это не серебренная пуля, а просто способ как положить один элемент в очередь, без блокировки потоков. Если у тебя 100 потоков ждет, то просто пиши условно порцию элементов из 10-100-1000 и потом Thread.Sleep().
Что бы другие записали.
Но вообще такая ситуация это уже лютый быдлокод.

Это не быдлокод, потому что батчами всегда быстрее писать чем по одному. Лучше будешь попадать в конвеер процессора.

это не серебряная пуля.

Ты меня вообще читаешь? я же сам пишу:

Ну так это не серебренная пуля, а просто способ как положить один элемент в очередь, без блокировки потоков.
потому что батчами всегда быстрее писать чем по одному.

А еще быстрее сохранить батч в отдельной колекции, и передать на нее ссылку одной атомарной операцией. Что я и предлагаю.
Ты спросил как добавлять элементы в очередь без болкировки?
Вот я и ответил. Сам по себе он не серебряая пуля, просто способ передать данные актору без блокировки.
А акторы в целом, уже серебрянная пуля.

Можешь мне скинуть пример задачи, Artyom Krivokrisenko, ты тоже, которую на твой взгляд акторами никак не решишь, а только через lock можно, я ее сделаю, и сравним производительно варианта с lock и с актерами.
Только давайте что-то более менее из реального проекта, а не чисто синтетическую с Литкода.

Хотя какой Thread.Sleep()?
в Web API условно 8/16/32 потока обрабатывают запросы, и каждый ложит одно сообщение в очередь, и обрабатывают следующий запрос. А потом один поток будет их обрабатывать.
Ситуация когда один поток пишет 1000 сообщений, а 100 потоков его ждут, это уже быдлокод, и надо все переписывать. Как я и сделал на реальном проекте, вместо 100 потоков которые друг-друга блокируют, 16 акторов которые работают 99% времени без блокировок.

Хотя какой Thread.Sleep()?
в Web API условно 8/16/32 потока обрабатывают запросы, и каждый ложит одно сообщение в очередь, и обрабатывают следующий запрос. А потом один поток будет их обрабатывать.
Ситуация когда один поток пишет 1000 сообщений, а 100 потоков его ждут, это уже быдлокод, и надо все переписывать. Как я и сделал на реальном проекте, вместо 100 потоков которые друг-друга блокируют, 16 акторов которые работают 99% времени без блокировок.

Ну молодец. Но всетаки про прогрессбары в приложении ты не ответил.

Я работаю больше с бекенд, там прогресс баров нет, а SLA ответа любого роута у нас 3 секунды, если что-то долго считает, есть многоуровневый кешь.
Пока нет не одного метода, который выполнялся дольше чем 0.5 сек. Никаких прогресс-баров нет.

который выполнялся дольше чем 0.5 сек.

Здесь не понятно, ты жалуешся или хвастаешся.
Это нагрузка на сервер всего 2 условных юзера в секунду. Брошенный на произвол судьбы сервер доу и то, наверное, запросов 50 в секунду тянет.
Если твой чудо эндпоинт не пересчитывает квартальный отчеты за прошлую пятилетку, то у меня для тебя плохие новости.

Там у меня Serverless с автоскейлингом, что 2 юзера, что 20к будет одинаковая скорость. Узкое место база как и на любом нормальном проекте, которая у меня тоже Serverless с автоскейлингом. Но логично что ендпоинт с несколькими тяжелыми запросами все равно будут выполняться 500мс миниимум, а не 10 мс.

В многопоточном приложении есть критическии секции.

Это прошлый век, так любой написать может. Надо писать без блокировок вообще, что сложнее, но реально.
Потому что нет гарантии что твои потоки 99% не будут ждать входа в lock.

Надо писать без блокировок вообще, что сложнее, но реально.

Ага, настолько сложнее, что ты уже с двух попыток не можешь правильно написать :)

Первый пример был упрошенный, схематический, бесконечный цикл с:

Interlocked.CompareExchange

Нормальным людям, которые его раньше не видели взрывает мозг.

Нормальным людям, которые его раньше не видели взрывает мозг.

Он и процессору взорвет мозг. Потому что хорошим тоном в лок фри, если у тебя не получилось захватить лок, нужно отдать управление процессору чтото типа Sleep(1). А та херня что ты написал, в вытесняющей многозадачности может просто попытаться прокрутить вхолостую миллиард циклов так и не отдав управление операционке, чтоба она выделила время другому потоку, который должен завершить работу и отдать лок.

управление процессору чтото типа Sleep(1)

Я знаю, но тут нет захвата потоков вообще.
Это атомарная операция, как int a = b;
Есть SpinLock про который ты пишешь, но это не он. Тут вообще нет блокировки потоков, тут вызов атомарного присваивания с проверкой. Процессор его выполнит как одну операцию.
Ты тут не ждешь освобождения критической секции, а пролистываешь элементы которые успели записать в очередь другие потоки, так же атомарно.

Я знаю, но тут нет захвата потоков вообще.
Это атомарная операция, как int a = b;

Тебе нужно немного повторить матчасть и узнать что такое вытесняющая многозадачность. Самые основы как работают ОСи. В вытесняющей многозадачности, каждый тянет одеяло на себя и пустой цикл будет тянуть одеяло успешней всего, все остальные будут молча ждать. А поскольку заблоченый поток физически не может завершится, не отдав управление, именно поэтому ты должен явно отдать управление операционке, чтобы она выделила такты процессора на другой поток, который наконец сможет снять лок.

Это не вечный цикл, в 99.99% случаем он пролистает 2-3 элемента, которые успели записать за 0.0001 мс пока выполнялась строчка кода, и запишет ровно 1 элемент, и все.
Еще раз, это не SpinLock.

// Тут мы уже берем последний элемен.
1) var last = Queue.last;
// Но если вдруг, какого-то фига, другие потоки успели положить в очередь 1-2 элемента после того, как у нас выполнилась строчка 1 но до строчки 3.
То мы их пролистаем:
2) while(!Interlocked.CompareExchange(lastItem.next, newItem, null) {
3) lastItem = lastItem.next;
}

/ Тут мы уже берем последний элемен.
1) var last = Queue.last;
// Но если вдруг, какого-то фига, другие потоки успели положить в очередь 1-2 элемента после того, как у нас выполнилась строчка 1 но до строчки 3.
То мы их пролистаем:
2) while(!Interlocked.CompareExchange(lastItem.next, newItem, null) {
3) lastItem = lastItem.next;
}

habr.com/ru/post/195770

Читай, повелитель 100 потоков в локфри

Ещё одним недостатком синхронизации является слабая масштабируемость. При возрастании числа потоков синхронизированный доступ к данным становится узким местом программы; зачастую при увеличении степени параллельности вместо пропорционального увеличения производительности мы получаем её ухудшение в условиях большой нагрузки (high contention).

Так я предлагаю с такой конструкцией не юзать потоков больше чем ядра процессора * 2.
В этом же и смысл, актеров, ты создаешь 8 актеров на 8 ядер процессора, и они 99% времени работают.
А не 100 потоков 99% которые друг-друга блокируют.

При возрастании числа потоков синхронизированный доступ к данным становится узким местом программы

Для этого актеров и придумали, что бы не надо было ничего синхронизировать.

Так я предлагаю с такой конструкцией не юзать потоков больше чем ядра процессора * 2.
В этом же и смысл, актеров, ты создаешь 8 актеров на 8 ядер процессора, и они 99% времени работают.
А не 100 потоков 99% которые друг-друга блокируют.

Ну ты просто капитан очевидность, который повторил то что я написал в самом начале

В многопоточном приложении есть критическии секции. Обычно потоки строят так что 99% времени они звнимаются своими делами и только при входе в критическую секцию требуют лок на ресурс, например, чтобы изменить атомарно значение пары переменных или 1% времени.
Этот 1% времени не делает из многопоточных приложений однопоточные.

А теперь, если пораскинуть мозгами, если речь о 1% процессорного времени в критической секции, то абсолютно всеравно там стоял лок, спиннер, или какой нибудь CAS. Поздарвляю счастливого победителия, который выиграл одну миллисекунду. Я спать.

Я про то, что там где блокировка точно будет занимать 1% вымени, можешь через lock, а там где больше, лучше юзать актеров.

Ну вообще да, это сложнее чем через lock, и тем более безопасный обькет, но там всего 2 патерна, которые надо раз выучить и понять, и будешь писать без проблем.

Писать ты будешь без проблем, а вот как оно будет работать — большой вопрос, мягко говоря.

Без троллинга вам обоим советую почтитать:
www.bookovka.ua/...​ektivnogo-proektirov.html
Очень крутая книга.

ага, поначитаются своих паттернов и суют их куда ни попадя как silver bullet :)

ага, поначитаются своих паттернов и суют их куда ни попадя

«по подъездам»

Если ты приходишь к выводу, что тебе надо immutable объекты и акторы, то запуск разных процесов и общение через IPC очереди то что доктор прописал.

Да нет же, акторы разных уровней бывают, есть межпроцессорное (стратегические условно), а есть те, что заменяют lock и твои само-блокируемые обьекты(тактические).
Это как раз для решения твоей проблемы.
Джун не сможет поменять состояние одновременно из нескольких потоков. Если оно внутри актера, и его нельзя менять из вне, а можно только отправлять сообщения на изменения, и читать.

Джун не сможет поменять состояние одновременно из нескольких потоков. Если оно внутри актера, и его нельзя менять из вне, а можно только отправлять сообщения на изменения, и читать.

Покажи код, который можно запустить, я тебе покажу как джун его сломает.

public class Actor {
int State {get; private set;}
// движок Task DataFlow получает сообщения, сохраняет
в очередь, и передает их в Add, вызывая Add в одном потоке.
void Add(int value) {
State += value;
}
}

Весь код, чтоб я его мог запустить

Тут .NET 7 Top-Level Statement(без Main) Console App, Ломай:

using System.Threading.Tasks.Dataflow;

var actor = new Actor();
await actor.Action.SendAsync(2);
await actor.Action.SendAsync(2);

actor.Action.Complete();
await actor.Action.Completion.WaitAsync(new CancellationToken());

// State Будет = 4
Console.WriteLine($"\n State = {actor.State}");
Console.ReadLine();
public class Actor
{

int state;
public int State { get { return state; } }

public Actor() {
Action = new (x =>
this.state = this.state + x
);

}

public ActionBlock Action { get;}

}

Тут .NET 7 Top-Level Statement(без Main) Console App, Ломай:

Я установил последнюю Visual Studio 2022, создал новый консольный проект под .NET 7, вставил твой код и он не компилируется.

А что за ошибка? У меня все работало, создал сейчас еще один проект, и скопипастел туда, и тоже работает.
P.S.
await actor.Action.SendAsync(2);
Вызывай из разных потоков, можешь 100 потоков создать для эмуляции параллельных запросов в API, что бы они все типа вызывали этот метод и меняли состояние.
Или реальное API с Jmeter если не леньки.

1)

learn.microsoft.com/...​ctionblock-1?view=net-7.0

ActionBlock имеет обобщенный параметр типа TInput, у тебя он не указан

2)

learn.microsoft.com/...​low-itargetblock((-0))-0

SendAsync принимает 2 аргумента, ты передаешь один.

Я вижу ты .NET забыл уже, первый аргумент с this, это сам класс на котором мы вызываем метод, у расширяющего метода.
Во втором случае автовыведение типа по аргументам. Все как в супер-сложном языке будущего Scala прям.
Вот рабочий код онлайн, dotnetfiddle.net/uOy6XM

Я хз, вставил в Visual Studio, оно мне выдало ошибки, про котоыре я написал. Там надо какую-то специальную версию C# указывать? Я не помню чтоб он мог выводить типы дженериков в свойствах/полях, это в какой версии завезли?

C .NET 5.
Мой код работает на .NET 6 без изменений, а на .NET 5 надо просто main создать:
dotnetfiddle.net/s5wkRY
А на 3.1 уже не будет работать, надо тип дженерика указать.
Оно и на .NET Framework 4.5 будет работать если тип дженерика указать, и убрать интерполяцию строк. Правда там
System.Threading.Tasks.Dataflow это отдельный NuGet пакет.

Visual Studio

Наконецто, стал на путь истинный.

Вот что тебе джун напишет:

using System.Threading.Tasks.Dataflow;

var actor = new Actor();
for (int i = 0; i < 1000000; i++) {
    await actor.Action.SendAsync(2);
    await actor.Action2.SendAsync(2);

}



actor.Action.Complete();
await actor.Action.Completion.WaitAsync(new CancellationToken());

// State Будет = 4
Console.WriteLine($"\n State = {actor.State}");
Console.ReadLine();
public class Actor
{

    int state;
    public int State { get { return state; } }

    public Actor()
    {
        Action = new(x =>
        this.state = this.state + x
        );
        Action2 = new(x => this.state = this.state - x);

    }

    public ActionBlock<int> Action { get; }
    public ActionBlock<int> Action2 { get; }

}

Запускаем:

State = -54298

Я вообще-то надеялся, что будет пример как сложный объект передается между акторами, там было бы больше возможности накосячить, тут немножко банальнее, но все равно пример того как тремя невинными строчками поиметь data race.

using System.Threading.Tasks.Dataflow;

var actor = new Actor();
for (int i = 0; i < 1000000; i++) {
    await actor.Action.SendAsync(2);
    await actor.Action2.SendAsync(2);

}

actor.Action.Complete();
await actor.Action.Completion.WaitAsync(new CancellationToken());

// State Будет = 4
Console.WriteLine($"\n State = {actor.State}");
Console.ReadLine();
public class Actor
{

    int state;
    public int State { get { return state; } }

    public Actor()
    {
        Action = new(x =>
        this.state = this.state + x
        );
        Action2 = new(x => this.state = this.state - x);

    }

    public ActionBlock<int> Action { get; }
    public ActionBlock<int> Action2 { get; }

}

Както мало кода для передачи инта.
Можно было и побольше.

Да нет же, акторы разных уровней бывают, есть межпроцессорное (стратегические условно), а есть те, что заменяют lock и твои само-блокируемые обьекты(тактические).
Это как раз для решения твоей проблемы.
Джун не сможет поменять состояние одновременно из нескольких потоков. Если оно внутри актера, и его нельзя менять из вне, а можно только отправлять сообщения на изменения, и читать.

Ахаха. Читаю это, а перед глазами флешбеки с прогрессбарами. И крутятся и крутятся кружатся ...
Скажи честно, сколько в твоей приложухе прогрессбаров ?
Не поверю что ниодного. Там даже с тремя пользователями уже должен быть бегунок.

Я не пишут UI на .NET. А через этот патерн я ускорял сервисы написанные фанговцами через lock в 50 раз.
Почему оно будет тормозить, если тут нет блокировки потоков вообще? То есть проц 100% времени выполняет реальные задачи, а не чего-то ждет.

проблема в том, что доступ к любому полю любого класса возможен из любого потока и предотвратить это можно только жестким аудитом кода

Точно точно ?

Updating a UI thread from a non-UI thread
Often, worker threads are used to perform some background work that involves gathering data to be displayed in an application’s user interface. However. most GUI (graphical user interface) application frameworks for .NET, such as Windows Forms and Windows Presentation Foundation (WPF), let you access GUI objects only from the thread that creates and manages the UI (the Main or UI thread). An InvalidOperationException is thrown when you try to access a UI element from a thread other than the UI thread. The text of the exception message is shown in the following table.

An InvalidOperationException is thrown when you try to access a UI element from a thread other than the UI thread.

Ок, а что вот этот код выдает?

        private void Form1_Load(object sender, EventArgs e)
        {
            Button button = new Button();
            button.Text = "Hello";
            this.Controls.Add(button);

            Thread t = new Thread(() => {
                Thread.Sleep(1000);
                button.ImageIndex = 10;
                MessageBox.Show("All good");
            });
            t.Start();
           
        }

Причем заметь, никто даже не удосужился задокументировать, какие свойства можно менять вызывать из других потоков, а какие нет:

Нельзя: learn.microsoft.com/...​ows-forms-buttonbase-text

Можно: learn.microsoft.com/...​rms-buttonbase-imageindex

Это баг или фича? Почему вообще весь дотнеотвский UI нужно «сериализировать» в одном потоке и не пущать из других? Если в .NET с многопоточностью все так збс, что мешало сделать нормальную UI библиотеку, с которой можно работать из разных потоков без костылей?

private void Form1_Load(object sender, EventArgs e)
{
Button button = new Button();
button.Text = «Hello»;
this.Controls.Add(button);

Thread t = new Thread(() => {
Thread.Sleep(1000);
button.ImageIndex = 10;
MessageBox.Show("All good«);
});
t.Start();

}

Я не уверен что этот код вообще корректен. У тебя кнопка зависла в воздухе. Нигде не отрисовывается, нигде не зарегестрирована на форме и не является частью контейнера. Парент у нее пустой.

Почему вообще весь дотнеотвский UI нужно «сериализировать» в одном потоке и не пущать из других? Если в .NET с многопоточностью все так збс, что мешало сделать нормальную UI библиотеку, с которой можно работать из разных потоков без костылей?

А это, как говорится, не литкодом единым.
Задачка на систем дизайн. Что было бы, если бы тебе поручили такую важную задачу, как прорисовка интерфейса.
Я знаю как минимум несколько языков, где так сделано и не знаю языков, где сделано иначе (хотя, конечно, за все языки и платформы ручатся не могу).

Я не уверен

Ото ж. Не зная броду не суйся в воду.

У тебя кнопка зависла в воздухе, точней локальная переменная. Не зарегестрирована гдето в форме, не является частью контейнера, нигде не отрисовывается и парент у нее пустой.

Это вообще-то textbook способ добавления новых контролов на форму, работает с 2001 года. У тебя visual studio есть, запускай и смотри.

Это вообще-то textbook
Ото ж. Не зная броду не суйся в воду.

Спасибо, повеселил

Там вообщето вопрос был. Почему за UI отвечает один тред.
И на это есть ответ. Но вопрос конечно сложный, проще бегать по кругу и сокрушаться почему без лока не работает многопоточность.

Подожди, ты начал с того что

Вообще в PHP и Nodejs есть и потоки, управление памятью, и сборка мусора.

Причем тут Rust vs .NET?
Логично блин что в Rust больше низкоуровневых фич чем в .NET будет, иначе бы его и не создавали.

Ты спросил:

Многопоточность в Node.js?) И как там создать поток? А как их синхронизировать по аналогии с lock в .NET?

Ты намекаешь, что в ноде нет многопоточности только потому, что там нет какой-то фичи из C#? Я просто показываю, что кто-то другой может тебе намекнуть, что в C# нет многопоточности потмоу что там нет какой-то фичи из раста, смекаешь?

В Node.js нет потоков ВООБЩЕ, это же главный мем был 5-7 лет назад, и главная особенность за которую ее обсырали дотнетчики, джависты, скалисты, и сишники. Как ты об этом можешь не знать, и доказывать что потоки есть, непонятно.
Это же 2+2 в мире разработки.
Толку от твоих 1000 решенных задач на Литкоде, если ты не знаешь что в Node.js и самом JavaScript вообще нет потоков.

В Node.js нет потоков ВООБЩЕ, это же главный мем был 5-7 лет назад

Ты не интересовался что за эти 7 лет в мире случилось?

А що там за «мусор» в пехепе, якщо всі ресурси звільняються одразу після закінчення виконання скрипта?

Since the missile will explode when it hits its target or at the end of its flight, the ultimate in garbage collection is performed without programmer intervention.

для .Net-чиків немає перспектив в цьому світі.

А яку мову програмування ви вибрали для coding interview? Напевне, не С#?

Вибрала саме C#. У мене було два варіанти — С# або javascript, тож вибір був очевидний

Це все прекрасно і ви величезна молодець. Але заголовок вводить в оману та навіть тхне клікбейтом. Ви не світчер. У вас був надпотужний освітній бекграунд академічного рівня. Олімпіади, мехмат, аспірантура. Звісно, що ви лускали той літкод, як горішки. У вас вочевидь саме той склад мислення, що потрібне для, вибачте, задрочування літкоду. Ви тих задачок за свою академічну діяльність вирішили тисячі. Але справжні світчери — гуманітарії чи люди робочих професій — так не зможуть. Не давайте їм хибної надії.

Дякую за коментар.

Ніколи не думала про заголовок у такому руслі, але не заперечую, що у в мене була краща ситуація, ніж в багатьох, завдяки математичній освіті.

З іншого боку, я не кажу, що це легко, і не закликаю нікого світчатись, це лише мій шлях при моїх вхідних даних.

гуманітарії чи люди робочих професій — так не зможуть.

Честно, достали. Пошел спрашивать знакомого спортсмена = уже 5 лет как программиста с 6к зп...

6k це значно менше ніж платять у фейсбуці

фейсбук же не в сша
ну і на що не погодишся аби на доу похизуватися

Голерные 6к, как будет в фаанге — пришлите апдейт :-)

Оля, дякую за статтю, думаю вона надихне багатьох пробувати свої сили в топ компанії!

Мрію що в перспективі 5 років один з FAANG відкриє офіс у Львові, і такі люди як ви матимуть вибір щоб жити, працювати, витрачати, платити податки в Україні!

FAANG в долині > FAANG в решті штатів > FAANG в західній Європі > FAANG в Польщі > FAANG в Україні

Resignation notification period:
FAANG в західній Європі > FAANG в Польщі > FAANG в Україні > FAANG в решті штатів ...

Пофиг на этот периуд, если в том украинском Lyft ЗП в 10 раз ниже чем в Lyft США.
То есть ты за месяц можешь заработать как за год.

Плюс немає акцій, бонусів, плюшок по типу безкоштовних ресторанів в самому офісі що тобі не треба тратити час і гроші на готовку, нормальної страховки на всю сім’ю. Не говорячи вже про те що будеш сидіти в якомусь легасі чи розробляти другосортні продукти. Єдиний плюс що легше буде влаштуватися в американський офіс.

Есть страховка, за 15к грн в год, так как медицина у нас и так бесплатная типа)

ще мабуть і фоп
тобто контрактор
тобто не співробітник

Важно не то, сколько ты зарабатываешь, важно соотношение доходы-расходы, то есть, сколько у тебя остается после всех трат.

FAANG в західній Європі > FAANG в Польщі > FAANG в Україні > FAANG в решті штатів ...

As for the company’s severance package, Zuckerberg laid out some of the details, which include:

16 weeks of base pay plus two additional weeks for every year of service
A payout for all remaining PTO
RSU vesting through Nov. 15
Six months of health insurance coverage for employees and their families
Three months of career support with an external vendor, including early access to job leads
Immigration support for workers here on a visa

Прикольно. А я думав, що там так, як у Твіттері.

twitter.com/...​tatus/1588671155766194176
Everyone exited was offered 3 months of severance, which is 50% more than legally required.

В других источниках пишут, что не все так однозначно.

Ну и плюс «50% more than legally required» — это очень низкая планка чтоб ей гордиться.

Уже и инвест няни предлагали, дия сасити сделали и защиту от маски шоу обеспечили — а фаанги все не идут.
Ну что ж такое, все этим фаангам не так!)

Сейчас после победы будет план маршала, и на этот раз придут 100%.

Не зараз, а «після перемоги» і план залежить від влади. Ніхто не знає, яка буде влада через 10 років

Угу, план то сразу пофиксит экзистенциальные проблемы типа ОАСК

Хочеться в це вірити! Після перемоги!

Випускниця фізико-математичного класу,
механіко-математичного факультету, кандидат фізико-математичних наук іншим вайтішникам: «Я змогла в літкод та влаштувалася в МААНГи, то чому ви не зможете?»

главное не здаваццо и верить в себя ))

А ведь и правда чем они хуже? Ну нет такой базы, да — потратят больше времени на литкод. Будто в Фаанге одни PhD сидят

Час це якраз і є найцінніший ресурс. Витратять значно більше часу, настільки більше, що й забудуть, як вирішувати ті задачі, що навчилися вирішувати на початку. А потім не вистачить часу на інтерв’ю, щоб вирішити задачу важкого рівня за 45 хвилин інтерв’ю. Заради справедливості, автор спершу багато часу витратила на вивчення математики, перш ніж розвинула свій мозок до такого рівня, щоб зв кілька тижнів навчитися літкодити. Тож сумарний час підготовки у неї більший ніж у типового вайтішника, що встиг сповна насолодитися життям, поки знавці точних наук вчили математику. Ну і, звісно, в такий період часу як автор типовий вайтішник не вкладеться — встигнути навчитися вирішувати задачі літкоду за період часу від запрошення на співбесіду до самої співбесіди.
Саме тому я й повторюю ледь не у кожній темі, що є великий сенс у навчанні в фізико-математичних ліцеях з топ-20 рейтингу ЗНО. Все одно час у школі витрачається, то навіщо даремно штани протирати, краще вже витратити цей час на те, щоб розвинути мозок.

що є великий сенс у навчанні в фізико-математичних ліцеях з топ-20 рейтингу ЗНО.

Якщо є вiдповiдно налаштований мозок та воно заходить, то так. Якщо нi — можна вилетiти i це не найгiрший вариант.

Все говорит о том что доки(статью) надо читать)
А не верить заголовкам

Ну так факультет физики и математики, а не Литкода и Систем-дизайна.
У нее шансы были такие же как и у нас.

Тільки вона літкод навчилася вирішувати за кілька тижнів у позаробочий час, а ми з Вами ні. Мабуть через те що фізика з математикою гарно тренують мозок.

Ну ты сейчас не грузиком работаешь, а код пишешь, по идее у тебя еще более натренированный мозг на написания кода, чем у доктора наук, который не строчки кода в жизни не написал.

В мене іноді складається враження, що мозок тренується не конкретно на написання коду, а взагалі. І найбільший вклад у становлення тренованості мозку дають якраз юні роки, проведені в школі та університеті. Таке враження в мене складається після прочитання статей про людей, які зробили значний внесок в розвиток ІТ. Нещодавно була така стаття тут на доу про одного із співавторів канонічної книги з вивчення мови С.
Щось подібне є і в спорті. Хто почав тренуватися після, грубо кажучи, 30 років, ніколи не матиме тих же спортивних результатів, як у того, хто регулярно тренується з дитинства. При цьому якийсь майстер спорту з важкої атлетики чи спортивної гімнастики, потренувавшись кілька місяців, переможе в клітці того, хто почав займатися mma у віці 30 років і тренувався кілька років, тому що розвинув свої м’язи в юному віці, коли розвиток іде найшвидшими темпами.
А мозок в цьому плані мало відрізняється від м’язів, мозок також найінтенсивніше розвивається в юному віці.

Цілком підтримую. Не впевнена щодо розумових здібностей, але в спорті — все точно саме так, як ви описали.

Мабуть через те що фізика з математикою гарно тренують мозок.

Или потому, что вечерами и целые выходные она задротила, а не на доу тусила

Да ты попробуй хоть пару задач решить, изи уровня, например, ничего там военного нет, но элемент удачи на интервью присутствует, да.

Ну гаразд, визнаю, все написане мною про те що літкод+робота це лише для випускників фізмат ліцеїв з топ 20 рейтингу ЗНО, бо в них мозок краще натренований, це насправді для прикриття моєї власної ліні. І не починаю вирішувати літкод я не через те, що вважаю, що мій мозок не витримає навантаження робота+літкод, а через те, що спершу подивлюся телевізора, потім доу почитаю, а потім же щось і по роботі зробити треба, а тут уже і вечір, пора готуватися до сну.

Так easy в більшості випадків фігня, вже medium відчуваєш інший рівень, мовчу про hard.

Ту фразу, що ви взяли в лапки, ніби цитату, авторка не писала. А якщо вже й приводити якесь «summary» поста, то можна взятии першу її частину. Так, змогла, так, влаштувалася. Це факти.

А тепер я від себе напишу, чому більшість таки не зможе. Всі люди різні, це нормально. Хтось розумніший і працьовитіший, хтось інший має розвинений «емоціональний інтелект» і легше встановлює соціальні контакт. В школі хтось сидить над збірниками задач Сканаві, їздить по олімпіадам, а хтось влаштовує вечірки і рахує фоловерів в соціальних мережах. Авторка вже з дитинства інвестувала в розвиток знань і інтелекту, в той час як її однолітки розважалися і взагалі використовували голову в основному щоб їсти. Тож закономірно, що авторка змогла. Не треба на неї за це ображатися і писати з пасивною агресією завуальовані претензії. Якщо вам чомусь це неприємно, то може справа не в авторці?

Ви трішки не так зрозуміли коментар Святослава ... «ат слова савсєм» )))

В школі хтось сидить над збірниками задач Сканаві, їздить по олімпіадам, а хтось влаштовує вечірки і рахує фоловерів в соціальних мережах. Авторка вже з дитинства інвестувала в розвиток знань і інтелекту, в той час як її однолітки розважалися і взагалі використовували голову в основному щоб їсти.

Саме це я і мав на увазі.

Саме тому я й повторюю ледь не у кожній темі, що є великий сенс у навчанні в фізико-математичних ліцеях з топ-20 рейтингу ЗНО. Все одно час у школі витрачається, то навіщо даремно штани протирати, краще вже витратити цей час на те, щоб розвинути мозок.

Обычному слесарю ставить на себе крест? Спасибо. Она смогла и любой слесарь сможет. Без сарказма, нужно желание и все.

Одного бажання буде недостатньо. Потрібно буде дуже багато часу, значно більше, ніж знадобилося автору від отримання запрошення на співбесіду до фейсбука до отримання запрошення на роботу у фейсбуці.

Ставить — нет.
Реально оценивать ситуацию — да.

А что такого? Есть люди мозг тренируют, держат себя в тонусе, автора ж не уравнение Шредингера просили решить на интервью.

Оля, ти молодець) Гарний шлях👍

ура молодець!) сподіваюсь, як наберешся досвіду в фб то перейдеш в якусь гарну компанію, яка less evil :)

Назва трохи вводить в оману, це не той світчинг, який мається на увазі зазвичай.
Коли розповідають саксес сторi з світчингу то починається з офіціанта і закінчується розробником гугла.
У вас скоріше еволюція, мех-мат, олімпіадниця, робота за спеціальністю 8 років, IT-курси — перша в списку, все логічно.
Загалом вітаю!

З інтелектуальної точки зору, після мехмату Гугл це скоріше деградація :)

А мета то взагалі моральне падіння.

Заголовок «Моє моральне падіння» був би точно клікбейтом )))

Ага, а народ би одразу бухтіти почав, що назва вводить в оману, і це не те «моральне падіння», про яке вони тут хотіли почитати.
Якщо серйозно, гарна історія, удачі вам з Метою.

Да, после 5к грн в месяц, 1 000 000 грн в месяц чистыми это деградация.

Вітаю!
===

Бо ж статті на DOU чи на інших ресурсах наводили жахи алгоритмами, місяцями підготовки

і потім :-)

Оскільки до цього з олімпіадним програмуванням, як і з літкодом, справи я не мала, то було зрозуміло, що легко не буде. Вирішила скласти план. Коли працюю, коли їм, коли літкоджу, а коли сплю. Кожного дня після роботи по 2-4 години, вихідні майже повністю. І так три тижні.

...

Підготовка до інтерв’ю зайняла у мене 3-4 години після роботи кожного дня і майже всі вихідні протягом 2 місяців.

Не пудріть людям мозги ))
Маючи PhD працювати разрабом це схоже на даунгрейд.
І з вашим бекграундом той літкод для вас це дитячий садочок

Чекаю на таку саксесс сторі:
в школі (середній) учився як всі (на тройки)
потім вчився в сємєйно-строітельном на економіке теж на тройкі
потом побачив зарплати в Айті взяв себе в рукі пройшов літкод за місяць і працюю в фаангє))

Чекаю на таку саксесс сторі:

Уже є. Тільки там на ФААНГ а ЕРАМ. І не взяли а уже уволили.

таку саксесс сторі:
в школі (середній) учився як всі (на тройки)

знаю таку : він поїхав працювати в білорусь ;) не фаанг, на щастя

Жди мою саксес стори через год, учился на одни двойки, был самым рекордным двойником за 30 лет(по словам класного руководителя). Стал 8+к принципалом в Украине(уже), а потом 500к приниципалом в FAANG.

— John Kelly, когда уже будет твоя сакцес стори про 500К принципала в FAANG?
— Хатико ждал и ты подождешь.

Илья, сколько можно? Ты уже который год грозишься порешать задачки на фанг а воз и ныне там :-)))))

Так я же не просто прорастанию, я развивался в направлении архитекта, достиг можно сказать максимального уровня в Украине, потом возвращал долги за квартиру, и сейчас подкоплю денег пару месяцев, возьму сабатикал, и буду готовиться на FAANG.

потом возвращал долги за квартиру

Підозрюю, Ви маєте на увазі, що в цей час не могли дозволити собі звільнитися, щоб отримати час на вирішування літкодних задачок.
Це я і намагаюся пояснити. Нам з Вами, щоб навчитися літкодити на рівні, необхідному для успішного проходження маангівських інтерв’ю, потрібно кілька місяців вільного від роботи часу, інакше нашому з Вами мозку буде дуже важко впоратися з навантаженням — робота+літкод. А от люди, які з юності натренувалися напружувати мозок математикою, можуть літкодити «без відриву від виробництва», бо в них мозок краще адаптований до розумових навантажень, ніж у нас з Вами. Адже така адаптація значно легше здобувається саме замолоду, під час навчання в школі та університеті.

Нам з Вами, щоб навчитися літкодити на рівні, необхідному для успішного проходження маангівських інтерв’ю, потрібно кілька місяців вільного від роботи часу, інакше нашому з Вами мозку буде дуже важко впоратися з навантаженням — робота+літкод. А от люди, які з юності натренувалися напружувати мозок математикою, можуть літкодити «без відриву від виробництва», бо в них мозок краще адаптований до розумових навантажень, ніж у нас з Вами. Адже така адаптація значно легше здобувається саме замолоду, під час навчання в школі та університеті.

Брєд. Я у своєму топіку про 24 онсайти писав, що готувався по вечорам, при full-time роботі. Якщо не хочеться, і нема потреби (comfort zone), то знайдуться відмазки не робити.

Тру. Навiть намагатися набирати прямо у ïх дебiльному редакторi не обов’язково. Я так роблю периодично, але Coderpad, який використовують багато контор, в принципi нiчо так, жити можна.

Ну а я от зі Святославом згоден, коли добре попрацюєшь на роботі то від літкоду вже тошнить в вечері і навпаки — вранці літкод пару годин і потім уже не можеш добре перформити, тільки говнофікси.

Ну от вранцi на роботi 1-2 лiткоди — норм)

В рабочее время, вместо ютубчика, как вариант.

Ну а я от зі Святославом згоден, коли добре попрацюєшь на роботі то від літкоду вже тошнить в вечері

Я на новій роботі примусово після 6-ї вечора встаю із-за столу, вирубаю робочий комп. Вечеряю, розрухуюся, потім займаюся своїм хоббі (не програмуванням), потім ще одним хоббі — зачепила мене одна програмерська задачка, на пару із знайомим оптимізуємо, цікава розминка.

Коли я працюю після 6-ї десь до 9-10 вечора, навіть, якщо пре, і виходить, то на наступний день виявляється, що у тому запалі я отримав
1) головний біль зранку
2) вся та мура нахрін не була потрібна, бо я не врахував а) б), в) ...

Отже, краще не доходити до тієї межі по роботі, і лишати час на провітрення мозків і на leetcode (при потребі).

В мене склалося враження, що Ваш топік про 24 онсайти, а також наступний, про 7-8 онсайтів, якраз доводить правильність моєї думки. Мені навіть здається, що до ідеї взяти відпустку для літкодингу Джона якраз підштовхнув ваш топік, хоча тут можу і помилятися.
Спробую пояснити, чому в мене склалося таке враження. В обох топіках Ви згадували про вигорання — як на мене, не в останню чергу вигорання викликане великим розумовим навантаженням — робота плюс літкод. В другому топіку події розгорталися не так драматично — мені здається що завдяки трьохмісячній відпустці за власний рахунок. Ну і зараз важко відтворити всю хронологію подій з першого топіку, тож поправте мене, якщо я не правий — мені здалося, що в першому топіку ви зрештою отримали вистражданий офер після того як звільнилися і перестали займатися і роботою і літкодом одночасно.

як на мене, не в останню чергу вигорання викликане великим розумовим навантаженням

вигорання наступає не від важкої роботи, а від тупої бардачної роботи, яку ти не контролюєш

Burnout
It’s a common misconception that burnouts come from hard work.
Burnout comes from a felt loss of control and/or impact.
Remember that you can burn out employees (or yourself) with little to no work.
klinger.io/posts/managing-people-

ви зрештою отримали вистражданий офер після того як звільнилися і перестали займатися і роботою і літкодом одночасно

ні

dou.ua/...​rums/topic/28593/#1690449
===
велика конкуренція, +100к студентів нових, що пішли в комп‘ютерні технології і кодінг bootcamp, у результаті мої розмазані і не сфокусовані xx років досвіду по тучі проектів і компаній програють людям, що один-два роки сфокусовано валять в одну тему і підготовку до проходження кодінгових інтерв‘ю

личка@FAANG — на співбесіді очікують, що до них прийшов мегамозг і ганяють відповідно

негативний настрой до попередньої контори, у Штатах таке не прівєццтвується

негативне загяуюче коло стресу від серії невдач
===

негативізм

«Також, під кінець уже співбесідувального циклу до мене дійшло нарешті прочитане у книжці „Americans at Work“ і я переглянув свою поведінку на співбесідах»
dou.ua/...​rums/topic/28593/#1690771

Дякую за детальне роз’яснення. Схоже, що я дійсно помилився, написавши, що розв’язування задач літкоду після робочого дня або перед робочим днем значно складніше для людей, які не загартували свій мозок математикою, навчаючись у фізико-математичному ліцеї.

Литкод и все подобные вещи сложны тем, кто в принципе не использует свой мозг для самостоятельного «решения» проблем, с которыми не знаком.

Если ты привык смотреть курсы на ютубе, попивая смузи, и работаешь в основном копруя код с stackoverflow в свой текстовый редактор и пиля CRUD спинным мозгом, твой мозг не будет заточен для решения литкодовских задач.

Такому мозгу будет трудно работать с задачей, решения которой он заранее не знает, он не умеет этого делать, ему хочется взять готовое решение из своей памяти, а еще лучше скопипастить откуда-то, ему не хочется думать и создавтаь что-то новое.
Даже осознание того факта, что есть эта задача, которая на самом деле простая, но он не может ее решить, будет достаточно, чтоб посчитать все это занятие слишком сложным и достойным только полных задротов и ноулайферов и пойти еще накатить смузи и почитать ДОУ.

Если твой мозг привык работать в таких неконмфортных для других условиях, причем не важно в какой именно сфере — даже решение банальных школьных геометрических задач типа «докажите что эти две линии перпендикулярны», то психологически работать с литкодом проще. Твой мозг просто понимает, что есть какие-то исходные данные (условие задачи), из них, используя аналитический аппарат и базовые знания строятся новые конструкции, те, которые не помогают, отсекаются, те, котоыре помогают, развиваются дальше пока не будет решена задача. Также мозг будет понимать когда знаний уже не хватает и их надо идти искать в книгах, а когда все еще збс и можно дойти до решения самому.

Для этого не обязательно было решать что-то в лицее. Условно, ты не можешь решать литкод не потому, что ты не пошел в математический лицей 10 лет назад, а потом что сегодня сидишь на ДОУ и попиваешь смузи, а не решаешь литкод.

Когда-то на философии рассказывали, что есть индуктивное и есть дедуктивное мышление.

Дедуктивное — это решать литкод, ковыряясь в известных фромулах и подходах.

Индуктивное — это ходить по лесу и надеяться, что получишь просветление вместе с пониманием правильной архитектуры под требования заказчика.

И вот если ты качаешь решение алгоритмов на время (которых там вроде 20 типов всего на литкоде), то этот кач глушит интуицию по архитектуре. А если ты качаешь медленную интуицию — то не сможешь быстро решать задачки.

В результате есть проекты, писанные олимпиадниками, при этом — нечитаемые. Писатель — не читатель, ему надо быстро решить задачку.

А есть проекты KISS. Premature optimization is the source of all evil.

Нам з Вами, щоб навчитися літкодити на рівні, необхідному для успішного проходження маангівських інтерв’ю, потрібно кілька місяців вільного від роботи часу, інакше нашому з Вами мозку буде дуже важко впоратися з навантаженням — робота+літкод. А от люди, які з юності натренувалися напружувати мозок математикою, можуть літкодити «без відриву від виробництва», бо в них мозок краще адаптований до розумових навантажень, ніж у нас з Вами. Адже така адаптація значно легше здобувається саме замолоду, під час навчання в школі та університеті.

і ще згадалося

dou.ua/...​rticles/google-interview
===
Я был вендором в Google в Mountain View на протяжении полутора лет. Там же было несколько гуглеров, которые тоже были вендорами до этого. Конечно, мозг постоянно подсказывал, что они «другие», что они «умнее-лучше-круче», чем я. А мой удел — быть вендором. Я даже один раз попробовал решить задачку на LeetCode. Осилить я смог 5-ю easy задачку, которая получилась на 120 строк кода и в результате так и не прошла тесты. На это ушло 5 часов прекрасного субботнего калифорнийского дня. Я окончательно понял, что вот всем вокруг «дано», а мне нет.
===

достиг можно сказать максимального уровня в Украине,

- с чего ты взял?

Стал 8+к принципалом

Тру-суксесс стори — это если на 8+к мидлом или недосиньором.

Жди мою саксес стори через год, учился на одни двойки, был самым рекордным двойником за 30 лет(по словам класного руководителя). Стал 8+к принципалом в Украине(уже), а потом 500к приниципалом в FAANG.

А от не розумію, чому ти не розумієш, що твої знання тонкощів .Net — от FAANG зовсім ні надо.
У старі часи до мене стукали із контори Illumina (вони зокрема роблять чіп для DNA sequencing, і прочій biotech), так от їм треба було .Net-програміста у Долині. Ну, я би зміг світчнутися на .Net, але що далі з ним робити у Долині?
Так от із твоєю спеціалізацією — вона там у FAANG ну нафіг не потрібна. Тобі треба набивати базу leetcode, system design, behavioral скіллів для проходження інтерв’ю, або/і шукати контори, яким потрібна твоя вузька спеціалізація. Може, може якщо вони у якійсь вузькій ніші, і там свій специфічний легасі-стек .Net, то там тебе треба буде.

Стал двойником принципала? Дя, 8 синьорам дают, так что не понти.

Маючи PhD працювати разрабом це схоже на даунгрейд.

Хаха, тобто треба було йти на пів ставки викладачем в універ?) 4000 грн мрже й було б.
Попасти в ФААНГ без профільної освіти це без перебільшення досягнення яке 99% укр девів не світить

Олю, привіт )

Привіт! Оце так зустріч) Де ж іще, як не тут))

Чудова стаття! Дякую автору за нагадування, що persistence is the key to success.

Дякую за відгук)

Підписатись на коментарі