Евгений Елчев

Евгений Елчев

Неделя
Jun 14, 2021 → Jun 20, 2021
Темы
Хобби
Собеседования
Преподавание
Индустрия

Архив недели @tygeddar

Понедельник


Автор недели - Евгений JonFir Елчев (@tygeddar), крашу кнопки в ios приложении @vkontakte, учу людей входить в it, делаю яблочную @Podlodkacrew

Расписание я не придумал, но можно сделать что то типа такого: пн: Компьютерные игры вт: Фантастические программисты и где они обитают ср: Собеседования чт: Куда идти преподавать и зачем пт: Существует ли идиеальный код сб: Пет проекты как хобби вс: Что нибудь придумаю

День 1. В общем то, сегодня выходной, я отвез семью на дачу и хотел тюленить целый день, но твиты сами себя не напишут. По этому поговорю про что нибудь отвлеченное, хобби отлично заходит. А какое хобби лучше всего подходит для человека из IT? Конечно компьютерные игры

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

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

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

Вообще я не то что бы эксперт в играх, по этому просто расскажу про те игры с которыми я сталкивался, какие из них мне понравились, а какие не очень и почему)

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

Первой игрой которую в которую я поиграл была "Разведчики космоса"
notion image

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

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

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

Может быть по этому я до сих пор плохо играю в платформеры, когда мои сверстники наматывали сотни часов в марио и черного плаща я играл в прятки и читал книги((

Следующей игрой в которую я на самом деле поиграл это была doom. И это конечно был прорыв. Это не какой то там марио, который просто бежит и прыгает. У тебя тут и монстры, и оружие, и даже три измерения в 2d)

В общем это была топовая игрушка, если вам хотелось просто пострелять по монстрам. Я правда странно на нее отреагировал, мне было страшно в нее играть (возраст 10 лет), но я боялся не монстров, а заблудится. Не знаю почему, но мне было жутко сложно ориентироваться.

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

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

В современном мире, многие игры расчитаны на казуалов, имеют настройку сложности, и сделали читы не нужными. Но в моем детстве, artmoney и chemax были мастхев)

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

Это была настоящая мотивация быстрее печатать, быстрее решать задачки, что в конце запустить странную пиксельную игру, где вооружившись плетью и еще чем то (крестом что ли) нужно было мочить вампиров, это была "Vampire Killer"

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

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

Но компьютер мне купили, а игры не купили. Правда, тыжепрограммист с маминой работы прокачал мне комп, поставив туда офис, винамп, вирар, залив музычки и конечно же игр. Я как сейчас помню тот пак. Half-life Аллоды 2

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

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

А вот half-life кончено была топчик, какая графика, сюжет, монтировка и враги. В нее я тоже наигрался достаточно много. Но все равно не оценил по достоинству.

И тут я у друга на sony playstation увидел игру которая на самом деле открыла для меня мир. Это была Dune. Игра где не надо было уворачиваться от ударов, стрелять, лечиться, искать патроны и бродить по коридорам.

Она захватила меня своей RTS механикой. Механиков в которой думать было важнее чем быстро разворачиваться и точнее стрелять. Я очень много времени тогда провел у друга.

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

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

В итоге я так плотно подсел на этот жанр что прошел red alert 2, dune 2000, Earth 2160, Ground Control, Warhammer 40 000, rise of legends, stronghold, start craft 1,2, warcraft 3. блин, наверное я не упомню всех rts в которые я играл.

Конечно я не обошел стороной Need For Speed. Шикарная серия игр, для того что бы отдохнуть под драйвовую музку и крутые тачки. Это не симулятор гонок, а именно что аркада. Так что главное что было в этих играх это атмосфера и драйв. Неплохо заряжало энергией.

Ладно, давайте перейдем к самой главной в моей жизни категории игр - mmo. Для тех кто не в курсе, это массовые многопользовательские игры. Игры где ты не просто играешь, а играешь с другими людьми.

На самом деле синглы увлекают меня не часто. И сначала моим любимым видом игр были кооперативы с друзьями по локальной сети. Тут опять хорошо заходят rts, в них почти всегда есть кооператив. И вот однажды я искал в своей городской сети сервер star craft, а нашел WoW

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

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

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

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

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

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

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

Короче ММО это такая жизнь, где у тебя всегда всех хорошо и не бывает роковых ошибок и в целом можно чилить.

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

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

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

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

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

И вот наблюдать, за этой оравой, находить что же у каждого получается лучше чем у другого, находить ребят которым можно делегировать часть менеджмента, проводить быстрые 1-1 прямо посреди битвы, это все про WoW, ну и про нашу с вами работу)

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

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

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

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

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

Под добиться я имею ввиду какие то простые вещи, например победу над босом или на арене в битве с другими игроками.

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

Знаете этих ребят которые говорят "Зачем мне этот язык, я и на своем все могу написать", "Кому нужно ФП если его не применить в реальной работе" или "Зачем мне знать как работает сборка мусора, если она просто работает"? Так вот это не про них)

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

Блин, понятия не имел что столько напишу, а еще писать и писать. Начинаем закругляться. Вторая категория mmo это сессионки, что то вроде cs или dota.

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

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

Что очень сильно способствует выбросам дофамина, и вы практически становитесь дофаминовым наркоманом. Мне не страшно, потому что я и так дофаминовый наркоман. Кстати в dota/league of legends я очень много наиграл, больше чем во что либо)

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

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

Обычные шутер в моих глазах тоже однообразны. Нужно чем то их преправить. Например хорошим сюжетом, или какими нибудь способностями. Так мне очень понравились time shift и анчартед.

Обожаю devil my cry за дикий драйв, где еще можно так смачно крошить демонов под рок?

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

В итоге я прошел еще и dead cells и curse of dead gods. В обоих кайфанул.

Ну и зафиналим подборку экзами от сони. Они конечно в большинстве случаев шикарны. GOW, Horizon, Ratchet, SpiderMan (MM), Uncharted, Infamous. проходил с большим удовольствие.

На этом пожалуй все, завтра поговорим о других вещах.

🔥Тред #1

Вторник


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

Есть куча различных классификаций разработчиков: - джун/мидл/синьор - кодер/программист/инженер - рок звезда/бюрократ/эксперементатор/.. По сути их объединяет только одно, они все бесполезные и каждый их понимает по своему.

Я не буду устраивать революцию, и обещать наконец то во всем это разобраться, просто добавлю еще одну классификацию - свою. Зачем? Чисто по фану. Ну может быть из моих рассуждение кто нибудь сделает какие нибудь выводы. В любом случае если вы с чем то не согласны - пишите!

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

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

Если кто не в курсе, это такие уверенные пользователи пк, они pc собрать могут и сеть просую протянуть и сервер 1с какой то пиратский поднять, и софт ставить/обновлять. Короче они редко обладают какими то прямо профессиональными навыками.

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

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

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

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

Почему нормально так работать? Ну основы они рассказать вполне могут и очень не плохо. Это тоже кто то должен делать. Как правило это именно преподаватели. Люди которым нравится преподавать, а не программировать. Очень полезны для погружение в программирование.

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

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

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

Ему по большему счету все равно на чем писать, но пишет на том же на чем начал 40 лет назад. Не интересуется ни алгоритмами, ни архитектурой, ни новыми инструментами. Ему хватает делфи/java/c++ который может сохранить/прочитать/обсчитать данные, а потом сформировать отчет.

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

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

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

Четвертый тип - web мастер. Занимают тем что создают небольшие веб порталы, лендинги и стандартные интернеты магазины. Знают немного php, js, html, css. Но больше они конечно знаю wordpress, bitrix, тильду, кучу плагинов, бирж тем, дизайнеров фрилансеров,

всякие seo оптимизации, как настраивать таргетированую рекламу и не редко как продавать свои услуги. Работают в небольших веб студиях или на фрилансе.

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

Зачем этим заниматься? За тем, что такой веб мастер может единолично запустить бизнес с нуля. Я такие случаи знаю и это довольно интересные ощущения. По сути, клиент понятия не имел что ему делать, пока ты не пришел и не настроил ему конвейер из клиентов.

Ну и денег можно получать довольно много если хорошо продавать свои услуги. Больше чем одну козулю в месяц.

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

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

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

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

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

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

Тут у тебя есть простор, как в выборе технологий, так и в выбор задач. Сегодня можео внедрять ML, завтра VR, после завтра работать с камерой, потом с блютузом, потом с кафкой, в общем вы поняли.

Шестой тип - программист прикладной, командный. Встречаются повсеместно от обычных галер до больших корпораций.

Эти ребята как имеют специализацию (фронтенд, ios, android, php и тд). развиваются по роадмапу компании, если он есть, или перед собесами при смене работы. Знают все основные моменты необходимые для работы в их стеке и немного сверху.

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

По разным причинам этот тип не спешит расти. Но в целом за приемлемую зарплату, напишут приемлемый код. Почему это нормально? Во-первых потому что не всем быть великими, кнопки тоже кто то красить должен.

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

Тип седьмой - программист узко специализированный. Работает как правило в корпорациях. Когда то он вписался в решение какой то редкой, но важной проблемы и вот теперь шарит в ней аки боженька.

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

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

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

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

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

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

Тип девятый - программист мифический тот самый. Я его так и не встретил, по этому где он обитает не скажу, но где бы он не был, он просто бог программирования. Знает основы основ, и высокоуровневые штучки.

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

По утрам за завтраком он комитит в в свои опенсорс проекты, которую используют все ведущие компании мира.

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

🔥Тред #2
Изумительный тред про виды программистов. Узнал в одном из них себя) twitter.com/itunderhood/st…
В последнем надеюсь) twitter.com/mad_electron/s…

Среда


День 3. Всем привет! будем говорить про одну из самых холиварных тем - собеседованиях.

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

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

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

Когда ты собеседуешь все по другому. На тебе ответственность. Ты можешь нанять человека с которым будет не комфортно работать. Можешь наоборот не нанять хорошего специалиста. Можешь оставить не верное впечатление о компании. В общем это сложно)

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

И так какие виды и этапы собеседований я знаю: - Экзамена, где задается огромное количество технических вопросов. - Разговор по душам, где в формате беседы нужно ненавязчиво узнать опыт кандидата - Белая доска, где кандидат пытается что то написать без помощи гугла и ide

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

Если я что то упустил, пишите в реплаях)

Начнем с тестового задания, так как оно дается еще до собеседования. Для компании это хороший способ посмотреть как кандидат пишет код не в стрессовой ситуации, а у себя дома. Казалось бы ситуация win-win, и компании хорошо и кандидат показывает навык не под давлением.

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

Он все эти вещи всовывает, может он их и потом везде всовывать будет. К тому что тестовые делать никто не любит, они отнимают время и вот это вот все. И самая экзотическая проблема, ты никогда не можешь быть уверен что ТЗ выполнил именно кандидат.

И если вы сейчас подумали что кейс, когда тестовое делает кто то другой, очень редкий, то вы ошибаетесь. В ИТ сейчас есть деньги и много людей пойдут на все что угодно, лишь бы эти деньги получить.

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

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

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

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

Человек мог комитить туда 5 лет назад и с тех пор сильно вырости. Или мог делать в свободное время и не концентрироваться на хорошем коде. В общем опять одни вопросы и никаких ответов.

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

Звучит вроде бы не плохо. Но на самом деле тут тоже полно нюансов. На простые вопросы скорее всего отвечать будет большенство, не нанимать же каждого. На более сложные вопросы, можно что не ответит никто.

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

В итоге что ты точно можешь сказать после такого собеседования? - Программирует ли в принципе кандидат. - Готовился ли он к собеседованию. - Интересуется ли он вещами за пределом его повседневных задач.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Или вот задача объединения двух отсортированных массивов. С одной стороны она простая. С другой стороны там используются такие методы обхода массива, которые обычный программист в работе не использует. В конце концов, что мы там делаем с массивом кроме как foreach?

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

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

Решение алгоритмических задач (сюда же идет знание структур данных) это холивар в холиваре. Постоянно все набрасывают надо или не надо. И я считаю что алгоритмы знать надо. Но только те которые близки твоему стеку.

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

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

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

По этому я очень расстраиваюсь если встречаю человека который не может объяснить как он выбираем между массивом (array, list) или словарем (map, dictionary) или не знает что словарь не упорядочен (в swift это так). Потому что это же вот прямо базовые вещи как по мне.

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

То есть то что человек умеет решать логические задачи скорее всего означает только то что человек уже решал логические задачи. Так как у нас в работе этот навык бесполезен, то и проверять его наличие бесполезно ИМХО

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

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

Очень крутой поинт, потому он сильно синхронизирует вас. Может оказаться что то на словах у вас возникла мискомуникация. И то что вам не понравилось в словах кандидата, на деле как раз то что вам нужно, ну или наоборот.

Самое сложное в этом, необходимость подготовить проект, как правило все на этом и сыпятся) Я сам сейчас так не делаю как раз по этой причине) Надо бы выделить время и написать))

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

То что кандидат опишет, у собеседущего в голове может сложить не так.

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

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

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

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

Я долгое время учу людей программировать. И вижу как для новичков сложно пользоваться массивами, циклами, условиями. Они буквально пасуют когда нужно положить в массив не строку, а какой то набор данных, объединить это в класс для них высший пилотаж. Наследование темный лес.

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

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

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

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

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

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

На этом у меня все на сегодня. До завтра)

🔥Тред #3
@vani11a_wave @caiiiycuk @itunderhood Иногда хочется узнать причину, чтобы меньше расстраиваться от неизвестности, пусть даже под подписку о непредъявлении претензий
На самом деле причина не нужна. А вот рефлексия полезна. Неплохо бы обдумать то о чем говорили. Узнать то что не знал, уточнить то в чем сомневался. Это точно не будет лишним) twitter.com/evgeniy007/sta…

Четверг


День 4. Куда идти преподавать и зачем. Всем доброго утра! Начинаем)

Во-первых пользуясь ситуацией я порекомендую свой курс разработки по flutter youtube.com/c/LearnDartFlu…. Он строиться по принципу from zero to hero и подходит как совсем начинающим так и тем кто хочет углубить свои знания.

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

Во-вторых, так же пользуясь ситуацией я порекомендую мой канал по iOS разработке. youtube.com/c/LazyLoadSwif… Тут правда нет какой то цельной структуры, я просто иногда выкладываю видео по какой то теме)

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

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

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

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

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

Курсы - в идеале тут вас должны обучать какой то конкретной штуке, причем нигде не сказано какой именно. То есть теоретически они могут научить вас все что нужно для работы like a колледж, а могут просто обучить какому то одному фреймворку (если мы говорим о разработке)

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

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

Давайте я еще дам небольшую карту для тех кто только собирается учится. А потом перейду таки к преподаванию. Ремарка, эта карта исключительно мое личное мнение.

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

A) Куда бы вы не пошли, вы все равно будете заниматься самообразованием. Потому что научить нельзя, можно только научится. По этому если вы думаете, что вы куда то поступите, отдадите деньги и просто послушаете теорию, выполните практику и станете специалистом это не там.

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

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

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

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

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

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

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

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

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

С момент отклика на вакансию и до конца первого месячного курса я проклял себя миллион раз. Каждый раз когда подготавливал вебинар или урок, я жутко мандражировал и думал что я просто напросто все зафейлю.

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

Внезапно я справился, аудитории зашло, и мне тоже зашло, я решил что буду продолжать и вот продолжаю в том или ином виде по сей день, это уже 5 лет.

Что заставляет меня эти заниматься? Есть несколько факторов. А) Есть ощущение что ты делаешь мир лучше. Когда твои ученики говорят спасибо и делятся своими успехами как в обучениями так и на работе это очень крутое чувство.

Б) Саморазвитие. Причем сразу по нескольким направлениям. Прежде всего качаются софт скилы, навык преподавания и навык выступления. Кроме того качаются и тех скилы. Вам наверное знакомо, что часто мы не до конца разбираемся какой то вещи.

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

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

В) Личный бренд. Как вы понимаете, те кто у вас учился рано или поздно начнут работать. И если их будет достаточно много, а вы зарекомендовали себя как хорошего специалиста в их глазах то однажды вы получите очень много людей в разных компаниях которые вас знают.

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

Г) Какие то деньги. Как правило не большие, а может и не маленькие. На тех же курсах можно зарабатывать 100к в месяц, с нагрузкой намного меньше чем 8 часов в день. Но это конечно особая ситуация. С бесплатным курсом и донатами все намного печальнее.

У нас просто нет культуры платить за то что доступно бесплатно. Меня всегда это крайне расстраивало. Игровые стримеры легко получают с донатов 100тр, при том что пользы никакой не несут. Ты предоставляешь материалы, которые помогают стать специалистом.

Эти материалы лучшего качества чем на платных курсах. Но поддерживают тебя очень не охотно.

Д) Фан. Да, для меня это еще и хобби, которым мне нравится заниматься. Вроде и весело и полезно. Что может быть лучше?

Это вот яркий пример почему хочется преподавать)
notion image

Ок, давайте теперь поговорим о том, где оно как преподается. И начнем с фултайм университета. Я знаю тут только по наслышке. А точнее может быть @_bravit нам расскажет)

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

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

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

Хотят тут на самом деле очень много вариантов. Я когда преподавал, бюрократии не было и курс вроде бы мы проводили как хотели. Но пары все равно было и домашки которые нужно проверять и оценки которые ставить.

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

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

Казалось бы красота, но нет) Денег мало. Расписание не удобное. И тему как хочешь так в отведенные часы и всовывай. Не входит сокращай, мало материала, растягивай. Из за этого часто не получается рассказать все правильно.

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

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

И очень много учеников потом начинают требовать это с преподавателя. Фразы "Мы вам такие деньги заплатили, а код у меня все равно не компилируется и я ничего все еще не понимаю, как вам не стыдно" мне будут снится в кошмарах.

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

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

Вопросы вида "А почему оно так работает", "а как лучше", "почему не делают вот так", "Как еще можно сделать", ну примерно как то так. Чувствуется что человек тебя услышал, а теперь пытается лучше понять тему. Вот ради таких там и можно преподавать.

Кстати что удивительно, из моего опыта, таких толковых что на курсах, что на курсе в университете примерно одинаковое количество)

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

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

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

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

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

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

На сегодня все! Спасибо за внимание, подписывайтесь на канал, ставьте лайки, ретвиты и вот это вот все. До завтра)

🔥Тред #4

Пятница


День 5. Всем привет, сегодня поговорим про совершенный код, существует ли он или нет.

И начну я наверное с в вот такой вот истории. студент: называет переменные а, б, с плохой программист: смотрит на код студента и думает, дичь, нужно писать нормально и называет переменную mashina, chelovek_odin

чуть получше программист: смотри на код хренового и думает, дичь, нужно писать нормально и называет переменную car, people_one нормальный программист: смотри на код чуть получше программиста и думает, дичь, нужно писать нормально и называет переменную car, peopleOne

лучший программист: смотрит на это все и думает, дичь, программирование дичь, как меня сюда занесло

Сейчас время такое, что лучше все пояснять) Это штука и конечно по именам переменных уровень программиста не определяется)

@gaxeliy @itunderhood Настоящие программисты следуют стилю кодирования принятому в том языке, на котором написана программа, будь то подчёркивания или camelCase. Что такое "настоящие мужики" и как они связаны с программированием - не знаю...
настоящие мужики - это программисты которые никому ничего не должны и код они пишут не по стайлгайдам языка или команды, а так как они считают нужным) twitter.com/tagir_valeev/s…

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

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

При этом все это должен смочь кто угодно, хоть который только вчера научился программировать. На то код и хорош, ведь так?

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

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

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

Пример не такого хорошего правила - "длинна файла с кодом должна быть не больше 200 строк". Тут понятно что нужно делать, никаких вопросов, но не понятно почему, что если файл будет на 1000 он автоматически будет хуже?

А если я его разделю на 5 файлов он станет автоматически лучше? На самом деле нет. Конечно компактные файлы проще воспринимать, но часто есть причины когда его размер будет больше и следование этому правилу только ухудшит ситуацию.

Или совсем плохое правило - "Don’t repeat yourself" совершенно не понятно что нужно делать. Не повторять имена? никогда не копировать код? Все должно быть максимально уникальным и переиспользуемым?

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

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

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

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

Я частенько рефлексирую над тем как я пишу код. И вспоминаю с чего все начиналось. Я был студентом, писал программы максимум на 100 строк кода и писал их лишь бы работало, использовал a, b, c, d как имена переменных и чего я только еще не делал.

Потом я начал писать программы побольше, веб приложения и видел как это делают люди вокруг меня и в интернете. Было ок, просто смешать все в кашу. Когда у тебя в одной строке и html и js и php и sql запрос это было ок. Но понять что там происходит было совершенно нельзя.

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

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

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

Короче этот кошмар можно взять за отправную точку плохого кода. Дальше я видел на примере все того же веба как ситуация могла стать лучше.

Можно давать понятные имена для всего. Вместо a, array и так далее следует писать user, news, widgets. Причем сейчас любят перегибать и писать что то типа userWhoLoginedInThisSessionAfterRegistration, или updateUserPaaswordIfneedIfHisValidAndDBReachedAndUsernameExist.

Это уже зашквар. user и updatePassword, вполне достаточно, да даже polzovatel и obnoviParol это ок. Потому что как вы не старались, скорее всего без прочтения кода, никто не сможет однозначно сказать как работает код.

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

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

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

Причем тут даже не важно как именно разделелили, в разные модули, классы, файлы, дам может даже это в одном файле и классе просто в разных областях отделенных комментариями. Это уже работает превосходно.

Я бы сказал что разделение кода и правильные имена это 80% успеха на пути к совершенному коду. Остальное уже такого крутого буста не дает. А большенство правил вообще ничего не дают)

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

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

- не используй одни и те же методы для разных задач, лучше скопируй. Это кстати SRP из солид. Единственный хороший принцип на мой вкус.

А вы накидайте правил которые вы считаете хорошими.

🔥Тред #5

Суббота


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

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

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

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

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

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

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

которые не факт что совпадают с твоими, приходится вписываться в строки и вот это вот все. В общем это НЕ ВЕСЕЛО. Но приносит деньги, а без денег мы никуда.

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

Сроки же не горят. Можно заниматься этим раз в день или раз в неделю, как нам самим комфортно.

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

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

Когда-то давным-давно: люди пишут программы расчётов атомных взрывов, ПРО, стыковки космических станций, автоматической посадки многоразовых космических кораблей. Разумеется, какие там правила, качество, откуда? Это ж не интернет-магазин написать twitter.com/itunderhood/st…
Когда то давным давно подписчики в твиттере умели читать, но те времена прошли) Я разве где то писал что раньше писали хреновые программы?) Или что всем было плевать на баги? Кажется я говорил про стиль и качество исключительно кода и даже критерии привел в каком кто твите) twitter.com/alexanius/stat…

Я тут написал длинный тред но твитер сломался и не запостил((

Когда-то давным-давно: люди пишут программы расчётов атомных взрывов, ПРО, стыковки космических станций, автоматической посадки многоразовых космических кораблей. Разумеется, какие там правила, качество, откуда? Это ж не интернет-магазин написать twitter.com/itunderhood/st…
Еще один момент, почему все считаю что по для расчетов атомных взрывов это что то магическое, сложное и достойное деяние для настоящих программистов? Не то что вот эти круды клепать. twitter.com/alexanius/stat…

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

Ладно повтором. Где взять идею? Да не нужна она, хочется что то сделать, сделай, не хочется? Возьми интересное тебе приложение и сделай клон. Нет такого, напили одну фичу. Нет фичи? Напили скрипт. Можно в конце концов to do лист сделать)

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

🔥Тред #6
@itunderhood не позорься
А у тебя как раз для этого нет аватарки и имени, что бы не опозорится?) Считаешь что я не прав, аргументируй, приведи примеры, я с легко соглашусь со своей ошибкой) Вообще не понимаю, почему ошибаться значит опозорится? Наверное, остальные люди не погрешимы) twitter.com/zxovq/status/1…

наоборот. Как говорил мой препод по C "раньше программа считалась программой, если она написана и выполняется с заданным качеством. Сейчас - если она хотя бы запускается" twitter.com/itunderhood/st…
Ну во первых, на основе чего препод так говорил? Сколько программ, где он написал, какие исследования проводил. А во-вторых, что он имел ввиду под качеством?) twitter.com/muradovm/statu…

@itunderhood если бы я спрашивал каждого препода "а ты кто по жизни, чё писал?", я бы долго не учился). Тем более руководитель лаб. робототехники и так внушает уважение. Под качеством он имел "заданное качество", тут вроде всё ясно (-:
Что такое заданное качество? Количество фатальных ошибок на количество запусков? Количество не верных результатов на количество расчетов или соотвествие кода солиду?) twitter.com/muradovm/statu…

Ладно. За обобщения "все" и "никаких" меня зашеймили. Пруфов никто никаких не привел. Считаю что срач удался. Всем спасибо и до завтра. Кто устал от духоты, крепитесь, осталось немного) В целом вот вам шанс, если этот твит наберет 200 лайков, я скипну воскресный тред)

И да, про хлебушек в голове было обидно))

Настолько охуенный специалист,что 5 из 5 цитат этого твита, упали хуями за воротник автору twitter.com/itunderhood/st…
Я тоже когда собеседование провожу, обязательно прошу кандидата написать твит и смотрю на реакцию нонеймов, если хуями обкалывают, то о чем мне с ним говорить?) twitter.com/dislxs/status/…

@itunderhood Аргументировать можно, конечно. Вот сорцы миссии Аполлон, например. Там без строгого стиля кодирования никуда. Это всё надо было дебажить и исправлять. И условных переходов там полно, не только формулы. Любой джун - это очень пренебрежительно к авторам. github.com/chrislgarry/Ap…
ну, я таки опозорен, стайл гайды были и раньше) twitter.com/tagir_valeev/s…

@itunderhood @NooboDroid За возраст? Нет, мне не свойственно. А сказал ты херню. Почитай хотя бы про Тьюринга (сойдёт в качестве одного из первых промышленных программистов?). А массы ниишных совков, протиравших штаны и получивших вдруг “писюки” с VisiCalc'ом — это не “первые программисты”
давайте уточним, как что использовал компьютер, типичный промышленный программист Алан Тьюринг? twitter.com/dorjechang/sta…

@itunderhood Кажется, ты за 20 лет программирования так и не понял, что твой нынешний условный пентиум с точки зрения тьюринговой логики ничем от моего первого К145ИК1302 (основа советских калькуляторов программируемых) не отличается. Вообще ничем :)
пойду завтра уволюсь, че) twitter.com/dorjechang/sta…

@itunderhood @tagir_valeev @xomyakus Но тут же сказано про качество, поэтому все и всполошились. Словно эт неважный критерий, по которому дела сейчас обстоят лучше, чем тогда twitter.com/itunderhood/st…
ну так там конкретный тред на дофига твитов, поясняющий что я имел ввиду, может стоило его сначала дочитать, прежде чем полошиться?) twitter.com/NooboDroid/sta…

@itunderhood 1) Вообще любая симуляция физики очень сложный процесс с точки зрения вычислений. Ошибиться можно не только в формуле, но и в обмене результатами с другими машинами. Это всегда параллельное программирование. Отладках подобного не самый приятный процесс.
и тут я был не прав. И пользуясь случка задам человеку который шарит в научном программировании пару вопросов. какими аспектами программирования это сложнее прикладной разработки. как там обстоят дела с правилами чистого кода, солидом, ооп, именами сущностей, архитектурой twitter.com/dautovri/statu…

Воскресенье


@itunderhood В то время когда vim или emac считались вершиной эволюции IDE, невозможно было написать что то посложнее hello world без правил: Ни структуры проекта ни нормальной подсветки синтаксиса ни линтеров ни кучи стат. анализаторов. И даже компиляция простенькой проги занимала часы
где можно почитать об этих правилах? twitter.com/ashpynov/statu…

@a_v_berezkin @itunderhood @tagir_valeev А я лично видел так много хренового софта с идеальным кодом внутри, что во мне разрослась и окрепла уверенность, что к аргументу «качественный код» — примерно как к оправданию «зато человек хороший» — прибегают тогда, когда больше ничего положительного сказать нельзя.
о, это отдельный поинт) twitter.com/mudasobwa/stat…

Ладно. За обобщения "все" и "никаких" меня зашеймили. Пруфов никто никаких не привел. Считаю что срач удался. Всем спасибо и до завтра. Кто устал от духоты, крепитесь, осталось немного) В целом вот вам шанс, если этот твит наберет 200 лайков, я скипну воскресный тред)
Так, 200 лайков твит не набрал( twitter.com/itunderhood/st… Но я все равно оставлю вас без воскресного треда, чет у меня все силки на двухдневный срач ушли)

Ну все. Моя неделя подошла к конфу. Спасибо всем за внимание и особенно тем кто принимал участие. Всем пока. Подписывайтесь на мой твиттер @tygeddar)

Ссылки