Про уверенность в себе
Сегодняшний пост про две стороны уверенности в себе.
Вы наверняка слышали, как из каждого утюга кричат, что уверенность - это всё, основа успеха и всякое такое.
Так вот, собеседовали мы как-то на прошлой работе девочку. Пришла она из другого отдела, была стажером data science, а собеседовали ее зачем-то на позицию, в большей мере связанную с инженерными задачками и программированием. В целом было ясно, что и компетенций там не достаточно, и работать человек привык с другими задачами, но почему-то всем очень хотелось натянуть сову на глобус.
Сама девочка излучала такую уверенность в себе, что руководитель отдела ей поверил на слово. «Программирование? Ну с программированием у меня точно не возникнет проблем. В этом я уверена. А я слушала и понимала, что человек явно недооценивает сложность задач и количество усилий, которое нужно на потратить на освоение недостающих навыков. Знакома она была только с питоном, и то в довольно узких задачах, а работать предстояло в том числе с «этими вашими шарпами» (C#). Но где-то когда-то писали, что поколение Y - это часто такие ребята, которые могут сомневаться в ком угодно, но только не в себе.
В итоге взяли девочку. С программированием, с которым по ее убеждению проблем возникнуть было не должно, проблемы, конечно, возникли сразу. Девочка отказывалась понимать, что существует такая вещь, как языки программирования со строгой типизацией, и сколько не повторяй, что переменные надо объявлять - всё мимо, код не компилируется. С питоном, к слову, было не сильно легче - как только её код падал с каким-то исключением, она не читая текст исключения, и даже не предпринимая попыток разобраться, что за ошибка произошла - тут же звала меня «Лена! У меня тут какая-то ошибка! Чо делать?». Просьбу для начала прочитать текст на ее мониторе - там же написано, что за ошибка - она так же неизменно игнорировала, как и строгую типизацию в C#.
В итоге через какое-то время девочка сама ушла, а в её резюме я увидела новый пункт в скиллах: C#. Серьезно?
Так что уверенность в себе - это само по себе неплохо, и может даже помочь произвести хорошее впечатление на этапе знакомства. Но без скиллов и усердия это скорее минус, чем плюс. Нередко бывает, что завышенная самооценка, и даже некоторое высокомерие идут рука об руку с некомпетентностью.
Впрочем, на собеседование все же захватите с собой уверенность в себе, хотя бы столько, сколько наскребёте - не помешает.
Сегодняшний пост про две стороны уверенности в себе.
Вы наверняка слышали, как из каждого утюга кричат, что уверенность - это всё, основа успеха и всякое такое.
Так вот, собеседовали мы как-то на прошлой работе девочку. Пришла она из другого отдела, была стажером data science, а собеседовали ее зачем-то на позицию, в большей мере связанную с инженерными задачками и программированием. В целом было ясно, что и компетенций там не достаточно, и работать человек привык с другими задачами, но почему-то всем очень хотелось натянуть сову на глобус.
Сама девочка излучала такую уверенность в себе, что руководитель отдела ей поверил на слово. «Программирование? Ну с программированием у меня точно не возникнет проблем. В этом я уверена. А я слушала и понимала, что человек явно недооценивает сложность задач и количество усилий, которое нужно на потратить на освоение недостающих навыков. Знакома она была только с питоном, и то в довольно узких задачах, а работать предстояло в том числе с «этими вашими шарпами» (C#). Но где-то когда-то писали, что поколение Y - это часто такие ребята, которые могут сомневаться в ком угодно, но только не в себе.
В итоге взяли девочку. С программированием, с которым по ее убеждению проблем возникнуть было не должно, проблемы, конечно, возникли сразу. Девочка отказывалась понимать, что существует такая вещь, как языки программирования со строгой типизацией, и сколько не повторяй, что переменные надо объявлять - всё мимо, код не компилируется. С питоном, к слову, было не сильно легче - как только её код падал с каким-то исключением, она не читая текст исключения, и даже не предпринимая попыток разобраться, что за ошибка произошла - тут же звала меня «Лена! У меня тут какая-то ошибка! Чо делать?». Просьбу для начала прочитать текст на ее мониторе - там же написано, что за ошибка - она так же неизменно игнорировала, как и строгую типизацию в C#.
В итоге через какое-то время девочка сама ушла, а в её резюме я увидела новый пункт в скиллах: C#. Серьезно?
Так что уверенность в себе - это само по себе неплохо, и может даже помочь произвести хорошее впечатление на этапе знакомства. Но без скиллов и усердия это скорее минус, чем плюс. Нередко бывает, что завышенная самооценка, и даже некоторое высокомерие идут рука об руку с некомпетентностью.
Впрочем, на собеседование все же захватите с собой уверенность в себе, хотя бы столько, сколько наскребёте - не помешает.
- Добрый день, вот вопрос: как понять, что пора писать резюме и начинать ходить на собеседования? меня самого интересует тестирование, но наверное многим будет интересно при изучении, к примеру, питона.
Книжки, которые в списке маст-рид прочитаны, и примеры сделаны, три курса на степике по питону пройдено, могу ,скажем без мам-пап-и подглядываний написать транспонирование матрицы. Пора писать резюме в списке скилов питон?
Очень в тему Вашего последнего поста по самоуверенность.
Привет! А вы начинайте и пробуйте - как раз в процессе собеседований (или первых мест работы) и поймёте, готовы ли уже к работе, или что-то где-то еще нужно доучить. К тому же к тестировщикам на начальном этапе не такие уж большие требования (но это зависит от конкретного работодателя). Тянуть и закапываться в книгах - тоже не очень хороший путь, так как книги и курсы не дают опыта работы над реальными «боевыми» задачами и соответствующих скиллов. Если устроитесь на работу и поймете, что кровь из носа не хватает времени на то, чтобы еще что-то подучить - можно поискать варианты с неполной занятостью, чтобы выделить время на учебу. Но обычно самая эффективная учеба происходит в процессе работы и решения реальных задач.
В резюме на первых этапах пишите всё, что хоть в какой-то мере знаете. В примере из моего поста речь шла о том, что человек не освоил даже на начальном уровне язык и не мог на нем решать элементарных задач, но уже написал его как пункт в резюме.
- Мне кажется, девочка молодец и то, что она попала к вам не обладая навыками - это круто. Тут скорее минус в том, что ей не хватило сил и терпения разобраться во всем, вот тут минус. По практике уверен, что если влез и есть желание, то можно все потянуть. Вот тут и вопрос в другом, как бы влезть 🙂
По своему опыту (не претендую на то, что он универсальный и что мои выводы единственно верные), «влезть» - это вообще не проблема, по крайней мере в Москве, где вакансий очень много. А реальный успех зависит почти исключительно от готовности прилагать усилия и «копать глубже». Если человек не любопытный, не увлеченный, относится по-раздолбайски и «на отвали», но при этом еще совсем новичок, то ни на какой высокой самооценке тут не выедешь.
И я ни в коем случае не говорю о том, что уверенность в себе - это плохо. Это хорошо, и гораздо полезнее, чем низкая самооценка и излишняя скромность - есть много людей, которые довольно неплохие специалисты, но позиционируют себя как «да я ничего особо не умею, ничего толком не могу» - и такое отношение, разумеется, может навредить на собеседовании. Например, такой очень скромный человек, скорее всего, и зарплату попросит маленькую (ну разве я большего заслуживаю?).
Но вопрос не только в том, как вы себя презентуете при знакомстве, но и в том, объективно ли оцениваете свой уровень сами. Да, на собеседовании по возможности хорошо делать вид, что вы самый лучший. Но искренне верить в то, что вы действительно очень крутой специалист (будучи новичком) - это скорее минус, так как если вы и так крутой - то зачем стремиться к большему, зачем учиться и осваивать что-то новое? И так сойдёт.
Книжки, которые в списке маст-рид прочитаны, и примеры сделаны, три курса на степике по питону пройдено, могу ,скажем без мам-пап-и подглядываний написать транспонирование матрицы. Пора писать резюме в списке скилов питон?
Очень в тему Вашего последнего поста по самоуверенность.
Привет! А вы начинайте и пробуйте - как раз в процессе собеседований (или первых мест работы) и поймёте, готовы ли уже к работе, или что-то где-то еще нужно доучить. К тому же к тестировщикам на начальном этапе не такие уж большие требования (но это зависит от конкретного работодателя). Тянуть и закапываться в книгах - тоже не очень хороший путь, так как книги и курсы не дают опыта работы над реальными «боевыми» задачами и соответствующих скиллов. Если устроитесь на работу и поймете, что кровь из носа не хватает времени на то, чтобы еще что-то подучить - можно поискать варианты с неполной занятостью, чтобы выделить время на учебу. Но обычно самая эффективная учеба происходит в процессе работы и решения реальных задач.
В резюме на первых этапах пишите всё, что хоть в какой-то мере знаете. В примере из моего поста речь шла о том, что человек не освоил даже на начальном уровне язык и не мог на нем решать элементарных задач, но уже написал его как пункт в резюме.
- Мне кажется, девочка молодец и то, что она попала к вам не обладая навыками - это круто. Тут скорее минус в том, что ей не хватило сил и терпения разобраться во всем, вот тут минус. По практике уверен, что если влез и есть желание, то можно все потянуть. Вот тут и вопрос в другом, как бы влезть 🙂
По своему опыту (не претендую на то, что он универсальный и что мои выводы единственно верные), «влезть» - это вообще не проблема, по крайней мере в Москве, где вакансий очень много. А реальный успех зависит почти исключительно от готовности прилагать усилия и «копать глубже». Если человек не любопытный, не увлеченный, относится по-раздолбайски и «на отвали», но при этом еще совсем новичок, то ни на какой высокой самооценке тут не выедешь.
И я ни в коем случае не говорю о том, что уверенность в себе - это плохо. Это хорошо, и гораздо полезнее, чем низкая самооценка и излишняя скромность - есть много людей, которые довольно неплохие специалисты, но позиционируют себя как «да я ничего особо не умею, ничего толком не могу» - и такое отношение, разумеется, может навредить на собеседовании. Например, такой очень скромный человек, скорее всего, и зарплату попросит маленькую (ну разве я большего заслуживаю?).
Но вопрос не только в том, как вы себя презентуете при знакомстве, но и в том, объективно ли оцениваете свой уровень сами. Да, на собеседовании по возможности хорошо делать вид, что вы самый лучший. Но искренне верить в то, что вы действительно очень крутой специалист (будучи новичком) - это скорее минус, так как если вы и так крутой - то зачем стремиться к большему, зачем учиться и осваивать что-то новое? И так сойдёт.
Ты же девочка
Сложно обойти вниманием вопросы про сексизм в IT. Какого это - быть девочкой-айтишиком?
Ощущаю ли я на себе какую-либо гендерную дискриминацию? - Нет или почти нет.
Значит ли это, что сексизма вообще нет? - Не значит. Но сексизм - дело тонкое, он не всегда явный, не всегда заметный, и не обязательно затрагивает тебя лично.
Вообще сексисткие высказывания бывают двух видов - когда тебе отказывают в каких-то способностях на основании гендера, и наоборот - сексисткие комплименты. Например, лет в 20 мне льстило, когда мне говорили «Нифига себе! Ты водишь машину на ручной коробке передач! Ты же девочка». Мне казалось, что круто быть «не такой» девочкой, которая так выгодно отличается от стереотипного образа «бабы». Но сейчас я бы не стала воспринимать такое как комплимент - потому что, а что особенного в том, что я могу ездить на механике? Миллионы людей умеют это делать. Типо нужно быть какой-то «особенной» женщиной, чтобы уметь нажимать на педали и дергать ручку коробки передач? А вот homo sapiens мужского пола - это другое дело, ему это проще. Серьезно?
Поэтому когда кто-то удивляется, что как же так, девочка, да в IT - это признак довольно дубового мышления. Но на самом деле с такой формулировкой напрямую я встречалась только 1 раз, на довольно дурацком собеседовании, где hr-менеджер сначала долго пыталась меня классифицировать по соционике, не обращая внимания на мои вялые возражения о том, что это антинаучно. А потом наконец созрела для «главного вопроса»: «Как так получилось, что девушка - да в IT? Странный выбор. Я думала, все программисты - это такие ребята с бородой и в заношенном свитере». И сальными волосами, в очках с трехметровыми стеклами, ага.
Но есть и другая сторона. Если вы девушка, ваш пол может сыграть на пользу вашему резюме. Потому что нас мало. И ваше резюме будет заметнее на фоне 20 мужских - просто потому что девушек в IT мало. И с одной стороны, у работодателя могут быть сексистские предрассудки и сомнения в том, что девушка «смогёт», но с другой - ему будет интересно посмотреть на девушку-айтишника, потому что это всё ещё редкий вид. Так что вероятность, что вас заметят, позовут на собеседование, выделят среди других кандидатов и запомнят - достаточно высока. А пройдёте вы или нет собеседование, зависит уже всецело от вашей подготовки. Так что, быть может, быть девушкой даже выгоднее, в каком-то смысле.
В принципе, если у отдельных представителей индустрии есть сексистские убеждения, то единственный способ им противостоять - это быть девушкой, работать в IT и хорошо себя там проявлять. Потому что мнения меняются, и если у вчерашнего сексиста был положительный опыт работы с одной девушкой-разработчиком, он уже будет менее предвзят в следующий раз. А если с двумя или тремя - то еще в большей степени.
Но вот если наоборот относиться к работе по-раздолбайски, то стереотип «девушка не может быть айтишником» будет подкрепляться. Тут есть некоторая несправедливость, потому что если девушка тупит и косячит, про нее наверняка подумают: «ну ясное дело, девочка же». А если то же самое делает мальчик, никому не придет в голову объяснять это его полом. Да, я слышала в адрес других коллег женского пола комментарии в духе «у неё такой хаотический женский код».
А вообще нас мало, но с каждым годом становится больше. И быть женщиной в IT - это уже не ново, к этой реальности все уже потихоньку привыкают. Я не могу сказать, что хоть в какой-то мере ощущаю на себе дискриминацию. Потому что в IT встречают не «по одеждке», а по скиллам. И если относиться к своей работе ответственно, то тебя заметят и оценят.
Сложно обойти вниманием вопросы про сексизм в IT. Какого это - быть девочкой-айтишиком?
Ощущаю ли я на себе какую-либо гендерную дискриминацию? - Нет или почти нет.
Значит ли это, что сексизма вообще нет? - Не значит. Но сексизм - дело тонкое, он не всегда явный, не всегда заметный, и не обязательно затрагивает тебя лично.
Вообще сексисткие высказывания бывают двух видов - когда тебе отказывают в каких-то способностях на основании гендера, и наоборот - сексисткие комплименты. Например, лет в 20 мне льстило, когда мне говорили «Нифига себе! Ты водишь машину на ручной коробке передач! Ты же девочка». Мне казалось, что круто быть «не такой» девочкой, которая так выгодно отличается от стереотипного образа «бабы». Но сейчас я бы не стала воспринимать такое как комплимент - потому что, а что особенного в том, что я могу ездить на механике? Миллионы людей умеют это делать. Типо нужно быть какой-то «особенной» женщиной, чтобы уметь нажимать на педали и дергать ручку коробки передач? А вот homo sapiens мужского пола - это другое дело, ему это проще. Серьезно?
Поэтому когда кто-то удивляется, что как же так, девочка, да в IT - это признак довольно дубового мышления. Но на самом деле с такой формулировкой напрямую я встречалась только 1 раз, на довольно дурацком собеседовании, где hr-менеджер сначала долго пыталась меня классифицировать по соционике, не обращая внимания на мои вялые возражения о том, что это антинаучно. А потом наконец созрела для «главного вопроса»: «Как так получилось, что девушка - да в IT? Странный выбор. Я думала, все программисты - это такие ребята с бородой и в заношенном свитере». И сальными волосами, в очках с трехметровыми стеклами, ага.
Но есть и другая сторона. Если вы девушка, ваш пол может сыграть на пользу вашему резюме. Потому что нас мало. И ваше резюме будет заметнее на фоне 20 мужских - просто потому что девушек в IT мало. И с одной стороны, у работодателя могут быть сексистские предрассудки и сомнения в том, что девушка «смогёт», но с другой - ему будет интересно посмотреть на девушку-айтишника, потому что это всё ещё редкий вид. Так что вероятность, что вас заметят, позовут на собеседование, выделят среди других кандидатов и запомнят - достаточно высока. А пройдёте вы или нет собеседование, зависит уже всецело от вашей подготовки. Так что, быть может, быть девушкой даже выгоднее, в каком-то смысле.
В принципе, если у отдельных представителей индустрии есть сексистские убеждения, то единственный способ им противостоять - это быть девушкой, работать в IT и хорошо себя там проявлять. Потому что мнения меняются, и если у вчерашнего сексиста был положительный опыт работы с одной девушкой-разработчиком, он уже будет менее предвзят в следующий раз. А если с двумя или тремя - то еще в большей степени.
Но вот если наоборот относиться к работе по-раздолбайски, то стереотип «девушка не может быть айтишником» будет подкрепляться. Тут есть некоторая несправедливость, потому что если девушка тупит и косячит, про нее наверняка подумают: «ну ясное дело, девочка же». А если то же самое делает мальчик, никому не придет в голову объяснять это его полом. Да, я слышала в адрес других коллег женского пола комментарии в духе «у неё такой хаотический женский код».
А вообще нас мало, но с каждым годом становится больше. И быть женщиной в IT - это уже не ново, к этой реальности все уже потихоньку привыкают. Я не могу сказать, что хоть в какой-то мере ощущаю на себе дискриминацию. Потому что в IT встречают не «по одеждке», а по скиллам. И если относиться к своей работе ответственно, то тебя заметят и оценят.
На позиции джуниора как долго дадут тупить? Как вообще все это будет? типа ну вот мы работаем на Джанге, ты знаешь азы Питона, вот сиди читай мануал, разбирайся с какой-нибудь задачкой, или будет что-то типа: вот тебе золушка мешок зубов перебери к вечеру их все, и не волнует, знаешь, не знаешь. Думаю зависит от компании, в которую устраиваешься. Как было у Вас, лично?Вы правы, это зависит от компании и от конкретного руководителя, к которому вы попадёте. Кстати, будете на собеседовании - там и спросите, какими будут ваши первые рабочие дни, и какие задачи вас ждут на старте - там вам ответят точнее. 🙂
Первые дни (а то и недели) на новой работе обычно «тупят» все - и джуны, и даже сеньоры. Вы будете подписывать кипу разных бумаг, настраивать окружение на компе, получать доступы.
А дальше всё по-разному. Вы джун, вероятно, у вас будет наставник, который будет вводить в курс дела и помогать. Или же обязанность наставника будет размазана между разными коллегами. Адекватные коллеги понимают, что вам нужно время, чтобы войти в рабочие процессы и начать приносить пользу и не станут осуждать за «тупеж». Главное - не тупить вечно.
Какие задачи и как быстро вы получите зависит от руководителя и его подхода. Вам могут для начала давать небольшие задачки, и постепенно наращивать их сложность. Цель - сделать из вас самостоятельного сотрудника, который не будет постоянно тянуть за рукав «старших». И чем быстрее вы начнете превращаться в такого сотрудника - тем лучшее впечатление произведете.
У меня было иначе. Просить помощи особо было не у кого, конкретику, с которой мне нужно было работать, никто не знал. Сотрудник, который раньше занимался моим проектом уже давно уволился, так что вот тебе исходный код - разбирайся сама. Документации нет, комментариев в коде тоже. 🙂 По срокам никто не торопил, кнутом не погонял, в загривок не дышал. Но в целом подход был - выкинуть на середину озера, чтобы научить плавать. Так что пришлось выплывать как-то самой. Первое время мозг закипал от напряжения, вечерами болела голова и я даже начинала запинаться в речи из-за переутомления. А потом разобралась, и стало проще. Оказалось, что ничего страшного.
В таком подходе к новым сотрудникам есть и плюсы и минусы. С одной стороны, быстрее учишься самостоятельно погружаться в проект и работать над проблемой, и, если «научишься плавать», а не утонешь - то выплывешь уже относительно зрелым специалистом. С другой стороны, мой код тогда никто не ревьюил, контроля над качеством работы не было, так что можно было накостылить как попало (а так, скорее всего, я и делала тогда) - и никто не поправит, не посоветует, как сделать лучше. Так что в каком-то смысле так выращивают говнокодеров велосипедостроителей.
Так чаще бывает в компаниях с небольшим штатом и хаотической организацией работы, где людей в принципе мало, и потому каждый сотрудник - и швец, и жнец и на дуде игрец. На каждого сотрудника там приходится куча разнообразных обязанностей, и карьерный рост до какого-нибудь руководителя будет довольно быстрым. Работать в таких местах - это челлендж, так как нужно все схватывать на лету, учиться особо не у кого, а круг обязанностей четко не очерчен. И работа имеет более творческий и менее регламентированный характер.
В более крупных компаниях с отлаженной структурой и четким разделением обязанностей вы будете в большей мере винтиком, который приладят на специально предусмотренное для него место. И в этом есть свои плюсы. В таких компаниях могут быть хорошо настроены бизнес-процессы, каждый сотрудник хорошо представлять, какие обязанности входят в его зону ответственности, и какими компетенциями ему нужно обладать. И, что главное, в хороших больших компаниях есть свои выработанные best practices, и вы будете прямо на старте их впитывать и применять в своей работе. А не костылить как бог на душу положит.
Мне 25/35/40 лет. Не поздно ли уже учиться программировать?
Знаете, это вопрос не столько ко мне, сколько к вам самим. Считаете ли вы сами свой возраст точкой невозврата, после которой уже поздно что-либо менять, учиться новым навыкам и осваивать другие профессии? Или уже пришло время окопаться в привычной области, и тихо-мирно доживать свои деньки?
Не будем лукавить, учиться в 16 или в 20 лет гораздо проще, чем, скажем, в 30 - это обусловленно анатомией мозга. Мозгу с возрастом свойственно приобретать некую инертность и консервироваться в своих привычках.
Но если вдуматься, то утрата пластичности мозга - это повод скорее противостоять этому процессу, чем смиряться с ним. Потому что новые знания и новые навыки - это как раз то, что позволяет мозгу дольше оставаться молодым. Он будет сопротивляться, лениться и ругаться на вас, но в итоге ему понравится, а успех в том, что раньше казалось непроходимыми джунглями - это очень вдохновляющее чувство.
Я не могу гарантировать, что в процессе вы не сдадитесь. Как и не могу гарантировать, что в индустрии к 40-летнему новичку отнесутся с доверием. Да, трудности могут возникнуть, и для их преодоления потребуются определенные усилия.
А про возраст я могу привести вам такой пример. Недавно в телеграме я познакомилась с девушкой Сашей - она, как и автор этого блога, гуманитарий по первому образованию. Какое-то время назад она оставила профессию журналистки и уехала в Германию, где сейчас изучает программирование в университете. Так вот у Саши есть однокурсница, которой (внимание!) 60 лет. И, по словам, Саши, эта однокурсница опережает её по успехам в учебе, несмотря на такой солидный возраст. Выводы делайте сами.
Кому интересна тема образования и смены квалификации в Европе - подписывайтесь на канал Саши. Тут она расскажет, как получить стипендию, об особенностях образования в Германии, о её отношениях с программированием, об адаптации к жизни за границей, о смене гуманитарной специальности на техническую и заодно - о свиданиях - но это уже совсем другая история.
Знаете, это вопрос не столько ко мне, сколько к вам самим. Считаете ли вы сами свой возраст точкой невозврата, после которой уже поздно что-либо менять, учиться новым навыкам и осваивать другие профессии? Или уже пришло время окопаться в привычной области, и тихо-мирно доживать свои деньки?
Не будем лукавить, учиться в 16 или в 20 лет гораздо проще, чем, скажем, в 30 - это обусловленно анатомией мозга. Мозгу с возрастом свойственно приобретать некую инертность и консервироваться в своих привычках.
Но если вдуматься, то утрата пластичности мозга - это повод скорее противостоять этому процессу, чем смиряться с ним. Потому что новые знания и новые навыки - это как раз то, что позволяет мозгу дольше оставаться молодым. Он будет сопротивляться, лениться и ругаться на вас, но в итоге ему понравится, а успех в том, что раньше казалось непроходимыми джунглями - это очень вдохновляющее чувство.
Я не могу гарантировать, что в процессе вы не сдадитесь. Как и не могу гарантировать, что в индустрии к 40-летнему новичку отнесутся с доверием. Да, трудности могут возникнуть, и для их преодоления потребуются определенные усилия.
А про возраст я могу привести вам такой пример. Недавно в телеграме я познакомилась с девушкой Сашей - она, как и автор этого блога, гуманитарий по первому образованию. Какое-то время назад она оставила профессию журналистки и уехала в Германию, где сейчас изучает программирование в университете. Так вот у Саши есть однокурсница, которой (внимание!) 60 лет. И, по словам, Саши, эта однокурсница опережает её по успехам в учебе, несмотря на такой солидный возраст. Выводы делайте сами.
Кому интересна тема образования и смены квалификации в Европе - подписывайтесь на канал Саши. Тут она расскажет, как получить стипендию, об особенностях образования в Германии, о её отношениях с программированием, об адаптации к жизни за границей, о смене гуманитарной специальности на техническую и заодно - о свиданиях - но это уже совсем другая история.
Отдыхайте
Сейчас Интернет кишит разными советами про тайм-менеджмент, повышение эффективности и саморазвитие семимильными шагами. Как инструменты это всё местами применимо и полезно, но как идеология - достаточно опасно.
Отчаянно рвать попу ради того, чтобы выжать из себя максимум эффективности, чтобы каждую секунду своей жизни смиренно принести на алтарь Капитализма.
Вот только чрезмерная страсть и перфекционизм на этом пути чреваты переутомлением, выгоранием, неврозами, обострением хронических болезней (и появлением новых), депрессией и прочими «радостями» жизни. Не успевая за высокими стандартами, которые мы сами себе задаём, мы испытываем чувство вины и вгоняем себя в стресс.
Мне рассказывали про коллегу, который работал по 16 часов в день и заработал себе инсульт - и это в 30-летнем возрасте. Чувак выжил и… продолжил работать по 16 часов.
Профессиональные успехи, деньги, крутые скиллы и прочие ачивки окажутся не такими уж ценными, если здоровье - и физическое, и психическое - разрушено.
Поэтому, друзья, знайте меру - умейте замедлиться, отдохнуть, и даже потупить. Не надо пытаться впихнуть в каждую секунду жизни что-то полезное и эффективное. Если ощущаете дефицит ресурсов и пониженную мотивацию - не грызите себя за это. Нам всем необходимо восстановление. А бесконечное достигаторство уровня «белка в колесе» в долговременной перспективе - скорее вредно для конечного результата.
Сейчас Интернет кишит разными советами про тайм-менеджмент, повышение эффективности и саморазвитие семимильными шагами. Как инструменты это всё местами применимо и полезно, но как идеология - достаточно опасно.
Отчаянно рвать попу ради того, чтобы выжать из себя максимум эффективности, чтобы каждую секунду своей жизни смиренно принести на алтарь Капитализма.
Вот только чрезмерная страсть и перфекционизм на этом пути чреваты переутомлением, выгоранием, неврозами, обострением хронических болезней (и появлением новых), депрессией и прочими «радостями» жизни. Не успевая за высокими стандартами, которые мы сами себе задаём, мы испытываем чувство вины и вгоняем себя в стресс.
Мне рассказывали про коллегу, который работал по 16 часов в день и заработал себе инсульт - и это в 30-летнем возрасте. Чувак выжил и… продолжил работать по 16 часов.
Профессиональные успехи, деньги, крутые скиллы и прочие ачивки окажутся не такими уж ценными, если здоровье - и физическое, и психическое - разрушено.
Поэтому, друзья, знайте меру - умейте замедлиться, отдохнуть, и даже потупить. Не надо пытаться впихнуть в каждую секунду жизни что-то полезное и эффективное. Если ощущаете дефицит ресурсов и пониженную мотивацию - не грызите себя за это. Нам всем необходимо восстановление. А бесконечное достигаторство уровня «белка в колесе» в долговременной перспективе - скорее вредно для конечного результата.
Про экспертов-новичков
Однажды я наткнулась на статью на Хабре про такого зверя как expert beginner. И сразу заподозрила, что речь идёт обо мне. Это был первый пинок к смене работы.
Экспертом-новичком становишься, когда долго работаешь в одном месте, хорошо знаешь свои проекты и по меркам своей нынешней (часто небольшой) компании начинаешь считаться местным экспертом. Самому учиться здесь не у кого, у тебя самого уже начинают появляться подчиненные… и перенимать твои практики и излюбленные приёмы работы.
В чём тут подвох? В том, что ты всё ещё новичок, и тебе есть чему учиться. Но вместо этого ты начинаешь считаться (и сам считать себя) уже знающим специалистом и перестаёшь развиваться. У тебя есть свои любимые привычные подходы к работе. Подходы далеко не лучшие, может быть, сплошные костыли и велосипедостроение - но ты к ним привык, и относишься как к лучшим практикам. Другие люди в компании не разбираются в твоих проектах, и просто доверяют тебе как лучшему специалисту. В итоге твои не самые удачные решения принимаются как устоявшиеся и правильные подходы и используются снова и снова, в том числе вновь пришедшими молодыми специалистами.
Когда я устроилась на ту работу, у меня был нулевой опыт разработки на реальных проектах. Код я писала как умела и как получалось. Хороший он или нет - судить было некому, так как никто мой код не ревьюил и в глаза не видел. Так что решения о том, что хорошо, а что плохо приходилось принимать самостоятельно, наступая на грабли и учась на своих ошибках. И вот работала я так, работала, и однажды я уже - типо старший специалист, и у меня уже даже появились свои джуниоры. А я тогда даже тестов к своему коду не писала.
Но я вполне себе догадывалась, что это только по меркам нашей «сельской библиотеки» я сеньор-разработчик. А кто я на реальном рынке? Что я знаю о том, как устроены процессы и разработка в более современных и топовых компаниях (кроме того, что слышала о них на конференциях)? Что я вообще знаю о best practices в IT? Умею ли я вообще писать код?
До тех пор я занималась проектами, от которых напрямую не зависели пользователи. Даже если бы я там всё сломала и разнесла на части - пользователи бы этого даже не заметили и урон для компании был бы не таким уж значительным. Так что оставалось ощущение, что я всё ещё ковыряюсь в песочнице и пока не добралась до настоящей ответственной боевой разработки. И костылить в таких условиях можно было как угодно. Поэтому мне захотелось в настоящий продакшен. Чтобы почувствовать себя настоящим взрослым специалистом. А не преждевременным экспертом.
Тогда я сменила работу. Конечно, к тому были и иные причины.
Однажды я наткнулась на статью на Хабре про такого зверя как expert beginner. И сразу заподозрила, что речь идёт обо мне. Это был первый пинок к смене работы.
Экспертом-новичком становишься, когда долго работаешь в одном месте, хорошо знаешь свои проекты и по меркам своей нынешней (часто небольшой) компании начинаешь считаться местным экспертом. Самому учиться здесь не у кого, у тебя самого уже начинают появляться подчиненные… и перенимать твои практики и излюбленные приёмы работы.
В чём тут подвох? В том, что ты всё ещё новичок, и тебе есть чему учиться. Но вместо этого ты начинаешь считаться (и сам считать себя) уже знающим специалистом и перестаёшь развиваться. У тебя есть свои любимые привычные подходы к работе. Подходы далеко не лучшие, может быть, сплошные костыли и велосипедостроение - но ты к ним привык, и относишься как к лучшим практикам. Другие люди в компании не разбираются в твоих проектах, и просто доверяют тебе как лучшему специалисту. В итоге твои не самые удачные решения принимаются как устоявшиеся и правильные подходы и используются снова и снова, в том числе вновь пришедшими молодыми специалистами.
Когда я устроилась на ту работу, у меня был нулевой опыт разработки на реальных проектах. Код я писала как умела и как получалось. Хороший он или нет - судить было некому, так как никто мой код не ревьюил и в глаза не видел. Так что решения о том, что хорошо, а что плохо приходилось принимать самостоятельно, наступая на грабли и учась на своих ошибках. И вот работала я так, работала, и однажды я уже - типо старший специалист, и у меня уже даже появились свои джуниоры. А я тогда даже тестов к своему коду не писала.
Но я вполне себе догадывалась, что это только по меркам нашей «сельской библиотеки» я сеньор-разработчик. А кто я на реальном рынке? Что я знаю о том, как устроены процессы и разработка в более современных и топовых компаниях (кроме того, что слышала о них на конференциях)? Что я вообще знаю о best practices в IT? Умею ли я вообще писать код?
До тех пор я занималась проектами, от которых напрямую не зависели пользователи. Даже если бы я там всё сломала и разнесла на части - пользователи бы этого даже не заметили и урон для компании был бы не таким уж значительным. Так что оставалось ощущение, что я всё ещё ковыряюсь в песочнице и пока не добралась до настоящей ответственной боевой разработки. И костылить в таких условиях можно было как угодно. Поэтому мне захотелось в настоящий продакшен. Чтобы почувствовать себя настоящим взрослым специалистом. А не преждевременным экспертом.
Тогда я сменила работу. Конечно, к тому были и иные причины.
-
Конечно. Нет ничего зазорного в том, чтобы быть просто новичком. Но новичок, который считает себя экспертом - это уже искаженное восприятие самого себя. Из этого искажения рождаются неверные установки из серии «я лучше знаю», «я это делаю n лет, мне виднее», и «я и так знаю, как делать правильно, зачем мне учиться/спрашивать чье-то мнение» итд итп. А все привычные лично ему решения кажутся оптимальными - не потому что они таковыми являются, а потому что «я всегда так делал». А на самом деле ничего ты не знаешь, Джон Сноу.
А если разобраться - то почему он всегда так делал? Сначала не знал, как можно делать - придумал какое-то решение. С тех пор использует его и привык к нему. И к тому же стал невосприимчив к альтернативным подходам. В общем, получается такой неповоротливый консерватор и в худшем случае - самодур.
Я, конечно, утрирую. И всё сильно зависит от адекватности конкретного человека. А посыл поста был в том, что не стоит спешить надевать корону и почивать на лаврах. Даже если у вас хороший авторитет среди коллег. Задайте себе вопрос - а ̶к̶т̶о̶ ̶я̶ ̶б̶е̶з̶ ̶к̶о̶с̶т̶ю̶м̶а̶ кем бы я был в другой компании (гугле/яндексе/подставьте другое известное название)? В стартапе из 5-ти человек вы, возможно, действительно - лучший. Но так ли вы круты по меркам всего рынка?
Кто-то остаётся на должности «эксперта», потому что ему нравится наслаждаться своим авторитетом и вертикальным карьерным ростом. И это тоже выбор - у всех свои приоритеты. Есть еще вариант - оставить разработку и уходить целиком в управленческие задачи, тогда экспертиза уже и не так важна. Мне же хотелось расти в техническом плане и чувствовать себя заслуженно… ну хотя бы нормальным средним специалистом, а не псевдоэкспертом с завышенным чсв.
А в итоге - если ты новичок-эксперт, это замедляет развитие?Конечно. Нет ничего зазорного в том, чтобы быть просто новичком. Но новичок, который считает себя экспертом - это уже искаженное восприятие самого себя. Из этого искажения рождаются неверные установки из серии «я лучше знаю», «я это делаю n лет, мне виднее», и «я и так знаю, как делать правильно, зачем мне учиться/спрашивать чье-то мнение» итд итп. А все привычные лично ему решения кажутся оптимальными - не потому что они таковыми являются, а потому что «я всегда так делал». А на самом деле ничего ты не знаешь, Джон Сноу.
А если разобраться - то почему он всегда так делал? Сначала не знал, как можно делать - придумал какое-то решение. С тех пор использует его и привык к нему. И к тому же стал невосприимчив к альтернативным подходам. В общем, получается такой неповоротливый консерватор и в худшем случае - самодур.
Я, конечно, утрирую. И всё сильно зависит от адекватности конкретного человека. А посыл поста был в том, что не стоит спешить надевать корону и почивать на лаврах. Даже если у вас хороший авторитет среди коллег. Задайте себе вопрос - а ̶к̶т̶о̶ ̶я̶ ̶б̶е̶з̶ ̶к̶о̶с̶т̶ю̶м̶а̶ кем бы я был в другой компании (гугле/яндексе/подставьте другое известное название)? В стартапе из 5-ти человек вы, возможно, действительно - лучший. Но так ли вы круты по меркам всего рынка?
Кто-то остаётся на должности «эксперта», потому что ему нравится наслаждаться своим авторитетом и вертикальным карьерным ростом. И это тоже выбор - у всех свои приоритеты. Есть еще вариант - оставить разработку и уходить целиком в управленческие задачи, тогда экспертиза уже и не так важна. Мне же хотелось расти в техническом плане и чувствовать себя заслуженно… ну хотя бы нормальным средним специалистом, а не псевдоэкспертом с завышенным чсв.
-
Итак, ситуация: у вас очень уверенный в своем мнении руководитель, но у вас его подход к работе вызывает сомнения.
Тут, конечно, многое сильно зависит от адекватности конкретного руководителя и умения слушать аргументы.
Я считаю, что действовать тут надо исключительно путём рациональной аргументации - забыв про сложный характер, про то, где чье мнение и где чей авторитет.
Излагаете руководителю, почему его решение вам кажется не оптимальным: например, из-за не рационального расходования ресурсов (память, диск, цпу, деньги компании), или человеческих ресурсов (время на разработку ненужной фичи). И приводите аргументы в пользу своего решения - здесь нам не понадобится дополнительный сервер, время ожидания пользователей не возрастёт, не нужно будет нанимать нового сотрудника (итд ип). Чисто голые факты, никаких личностей и меряний питонами.
Адекватный руководитель всегда выслушает ваши сомнения и аргументы. Возможно, он их сможет опровергнуть или приведёт свои соображения.
Если же начальник остался при своем мнении - то не стоит переживать. Потому что ответственность за принятое решение и за его последствия - тоже на нём. В принципе мы всегда делаем всё так, как решило руководство - такая судьба у наёмных работников. Другое дело, что аргументировать и переубеждать начальство - это полезный и важный навык.
Если же начальник, простите, совсем «баран», и никого никогда не слушает, то возникает вопрос - а хотите ли вы работать с таким человеком? Может, имеет смысл поискать варианты с переводом в другую команду, другой отдел или даже сменить работодателя?
Как спорить с такими грозными [начальниками]? Отстаивать свое мнение. Не принимая во внимание сложный характер, может есть какой-то лайфхак?Итак, ситуация: у вас очень уверенный в своем мнении руководитель, но у вас его подход к работе вызывает сомнения.
Тут, конечно, многое сильно зависит от адекватности конкретного руководителя и умения слушать аргументы.
Я считаю, что действовать тут надо исключительно путём рациональной аргументации - забыв про сложный характер, про то, где чье мнение и где чей авторитет.
Излагаете руководителю, почему его решение вам кажется не оптимальным: например, из-за не рационального расходования ресурсов (память, диск, цпу, деньги компании), или человеческих ресурсов (время на разработку ненужной фичи). И приводите аргументы в пользу своего решения - здесь нам не понадобится дополнительный сервер, время ожидания пользователей не возрастёт, не нужно будет нанимать нового сотрудника (итд ип). Чисто голые факты, никаких личностей и меряний питонами.
Адекватный руководитель всегда выслушает ваши сомнения и аргументы. Возможно, он их сможет опровергнуть или приведёт свои соображения.
Если же начальник остался при своем мнении - то не стоит переживать. Потому что ответственность за принятое решение и за его последствия - тоже на нём. В принципе мы всегда делаем всё так, как решило руководство - такая судьба у наёмных работников. Другое дело, что аргументировать и переубеждать начальство - это полезный и важный навык.
Если же начальник, простите, совсем «баран», и никого никогда не слушает, то возникает вопрос - а хотите ли вы работать с таким человеком? Может, имеет смысл поискать варианты с переводом в другую команду, другой отдел или даже сменить работодателя?
Как понять, что IT - это «моё»?
Наверное, легче всего выбирать профориентацию людям, у которых есть выраженные предпочтения или мечта о какой-то конкретной профессии.
Я к числу таких никогда не принадлежала. «Призвание» для меня слишком громкое слово, отдающее фатализмом. Думаю, существуют десятки профессий, которыми я бы могла заниматься примерно с одинаковым успехом.
Долгих по протяженности увлечений у меня тоже особо не было - интересовалась я всем подряд, многими вещами начинала заниматься, но быстро забрасывала.
Некоторые люди выбирают профессиональную область исходя из того, какие предметы им хуже всего давались в школе. Не получалось с математикой - ну значит у меня гуманитарный склад ума, пойду изучать литературу. Не смог понять физику или химию - значит, главное держаться от них подальше.
Проблема с этим подходом в том, что неприятие каких-либо предметов в школе могло быть связано с кучей случайных факторов - преподаватель не смог заинтересовать своим предметом, плохая подача материала в учебниках, неудачно составленное расписание, просто как-то не заинтересовало или как-то быстро упустил материал и дальше уже ничего не понял. В любом случае, это не повод относиться к таким предметам как к закрытой для себя отныне области знаний.
То, что меня может в каком-то виде интересовать IT мне никогда не приходило в голову. В школе информатика была очень слабой, уроки не вселяли энтузиазма, а какие-то зачатки бейзика и паскаля, которые там всё же пытались нам дать, я благополучно пропустила мимо себя, даже не пытаясь разобраться, что это такое. Впервые открыла для себя программирование я примерно в 23-24 летнем возрасте, и пожалуй что случайно. И всё ещё не могла решить для себя - «моё» это или «не моё».
Позже я сформулировала для себя такой принцип выбора профессии: если я могу заниматься каким-то делом 3-4 часа подряд (и более) без насилия над собой - значит, оно мне подходит. Потому что примерно так будет выглядеть каждый день жизни, когда устроишься на работу. С программированием у меня всё было именно так - закапываешься в какую-то задачу, ищешь решение, и не замечаешь, как проходит несколько часов. Никакой боли или скуки этот процесс не вызывал, наоборот - довольно увлекательно и интересно - а значит подходит, можно брать. Хотя в теории меня и пугала перспектива целыми днями копаться в коде.
А громких слов о поиске своего призвания и следовании за мечтой я до сих пор не понимаю. Вместо IT у меня могло бы легко быть что-то другое. И у вас, скорее всего, тоже. Но в наше время это одна из самых передовых областей, так что почему бы не выбрать её?
Наверное, легче всего выбирать профориентацию людям, у которых есть выраженные предпочтения или мечта о какой-то конкретной профессии.
Я к числу таких никогда не принадлежала. «Призвание» для меня слишком громкое слово, отдающее фатализмом. Думаю, существуют десятки профессий, которыми я бы могла заниматься примерно с одинаковым успехом.
Долгих по протяженности увлечений у меня тоже особо не было - интересовалась я всем подряд, многими вещами начинала заниматься, но быстро забрасывала.
Некоторые люди выбирают профессиональную область исходя из того, какие предметы им хуже всего давались в школе. Не получалось с математикой - ну значит у меня гуманитарный склад ума, пойду изучать литературу. Не смог понять физику или химию - значит, главное держаться от них подальше.
Проблема с этим подходом в том, что неприятие каких-либо предметов в школе могло быть связано с кучей случайных факторов - преподаватель не смог заинтересовать своим предметом, плохая подача материала в учебниках, неудачно составленное расписание, просто как-то не заинтересовало или как-то быстро упустил материал и дальше уже ничего не понял. В любом случае, это не повод относиться к таким предметам как к закрытой для себя отныне области знаний.
То, что меня может в каком-то виде интересовать IT мне никогда не приходило в голову. В школе информатика была очень слабой, уроки не вселяли энтузиазма, а какие-то зачатки бейзика и паскаля, которые там всё же пытались нам дать, я благополучно пропустила мимо себя, даже не пытаясь разобраться, что это такое. Впервые открыла для себя программирование я примерно в 23-24 летнем возрасте, и пожалуй что случайно. И всё ещё не могла решить для себя - «моё» это или «не моё».
Позже я сформулировала для себя такой принцип выбора профессии: если я могу заниматься каким-то делом 3-4 часа подряд (и более) без насилия над собой - значит, оно мне подходит. Потому что примерно так будет выглядеть каждый день жизни, когда устроишься на работу. С программированием у меня всё было именно так - закапываешься в какую-то задачу, ищешь решение, и не замечаешь, как проходит несколько часов. Никакой боли или скуки этот процесс не вызывал, наоборот - довольно увлекательно и интересно - а значит подходит, можно брать. Хотя в теории меня и пугала перспектива целыми днями копаться в коде.
А громких слов о поиске своего призвания и следовании за мечтой я до сих пор не понимаю. Вместо IT у меня могло бы легко быть что-то другое. И у вас, скорее всего, тоже. Но в наше время это одна из самых передовых областей, так что почему бы не выбрать её?
О чем спросят на техническом собеседовании?
Тут всё всецело зависит от собеседующего и его ̶з̶а̶с̶к̶о̶к̶о̶в̶ взглядов.
Например, один мой бывший коллега заставлял кандидатов рисовать график логарифма на листочке. Зачем, спросите вы? По его мнению это должно показать, что кандидат отличает эффективные алгоритмы от неэффективных (то есть логарифмическую скорость выполнения от, например, экспоненциальной). Другой коллега возражал ему, что успешность выполнения этого задания скорее покажет, что кандидат - недавний студент, и ничего более.
Тем, кто даёт «задачки на сообразительность» я бы приготовила личный котел в аду. Просто потому что их не люблю, и никто еще не доказал, что с их помощью можно проверить хоть что-то.
Везде, разумеется, зададут вопросы (или задачку) на знание вашего языка программирования. Вопросы могут быть базовые на знание основ, но кто-то любит копать и в тонкости: например, питониста могут попросить написать декоратор и генератор и поинтересуются, что такое метакласс. И да, не исключено, что после собеседования на этом месте работы вы ни разу больше не напишете ни декоратор, ни генератор (или 1-2 раза за 5 лет), и, тем более, никогда не столкнётесь с метаклассами. Именно поэтому такие задачки считаются очень спорными.
Есть еще стандартный список вопросов для каждого языка - они легко гуглятся вместе с ответами на них. Для питона, например, это «что такое GIL» и «как работает garbage collector»? Проблема с такими вопросами в том, что кандидаты часто выучивают ответы чуть ли не наизусть. Но проницательный работодатель догадается задать уточняющие вопросы и копнуть чуть глубже, чтобы понять - действительно ли кандидат знает, о чем говорит или загуглил список типичных вопросов перед собеседованием. Кто-то же намеренно избегает расхожих вопросов. Ну а кто-то примет тупо выученные ответы за чистую монету. Лично я, кстати, ни разу не готовилась к собеседованиям специально - говорят, почти все готовятся - ну а мне это в голову не приходило, и ничего. Я, конечно, никого не призывают брать с меня пример в этом смысле.
На счёт алгоритмов тоже кипят споры - надо или не надо про них спрашивать? Если спрашивать - то, наверно, про самые простые? Отсортируй массив «пузырьком». Вот только зачем «пузырьком»? Я не уверена, что сходу вспомню, чем там этот пузырек отличается от сортировки вставками, а та от сортировки выбором. Да и кому они нужны, эти типы сортировок, они же все с квадратичной сложностью. Но просить реализовать на собесе merge sort или quick sort - это уже сложновато. Поэтому «пузырёк». «А сколько раз в своей работе ты использовал эти алгоритмы? Ни разу, верно?» - спрашивает один коллега другого, сторонника таких вопросов.
В целом я бы разделила всех собеседующих на Знаек и Незнаек. Знайки убеждены, что любой кандидат должен знать всё, если не более того. Написать на бумажке реализацию красно-черного дерева - раз плюнуть, знать ассемблер, C++ и устройство микроконтроллеров - маст хэв. И пофиг, что чувак пришел сайты писать на, прости господи, PHP. Ещё он должен уметь написать накопленную сумму на чистом SQL, знать все мыслимые и немыслимые разделы высшей математики на 5+ ну и, конечно, уметь летать.
Незнайки же возражают, что все эти знания не потребуются для решения тех прикладных задач, с которыми предстоит столкнуться кандидату, и потому требовать их - не нужно, и к тому же они не показывают, что чувак действительно хороший специалист. Но Знаек, конечно, не переубить: хороший программист должен знать всё это, иначе он - так, пустое место, а не программист.
Но не пугайтесь - знаек не так уж много. И лично я с вопросами такой сложности на собеседованиях ни разу не сталкивалась. Найти кандидата, подходящего под критерии таких Знаек сложнее, чем найти любовь всей жизни с первой попытки в Тиндере. Поэтому нереалистичные требования в итоге приходится смягчать (если, конечно, работодатель не Павел Дуров). Конечно, круто, если у вас сильная база, но если вы не во всем сильны - это не беда. Работы на всех хватит.
Тут всё всецело зависит от собеседующего и его ̶з̶а̶с̶к̶о̶к̶о̶в̶ взглядов.
Например, один мой бывший коллега заставлял кандидатов рисовать график логарифма на листочке. Зачем, спросите вы? По его мнению это должно показать, что кандидат отличает эффективные алгоритмы от неэффективных (то есть логарифмическую скорость выполнения от, например, экспоненциальной). Другой коллега возражал ему, что успешность выполнения этого задания скорее покажет, что кандидат - недавний студент, и ничего более.
Тем, кто даёт «задачки на сообразительность» я бы приготовила личный котел в аду. Просто потому что их не люблю, и никто еще не доказал, что с их помощью можно проверить хоть что-то.
Везде, разумеется, зададут вопросы (или задачку) на знание вашего языка программирования. Вопросы могут быть базовые на знание основ, но кто-то любит копать и в тонкости: например, питониста могут попросить написать декоратор и генератор и поинтересуются, что такое метакласс. И да, не исключено, что после собеседования на этом месте работы вы ни разу больше не напишете ни декоратор, ни генератор (или 1-2 раза за 5 лет), и, тем более, никогда не столкнётесь с метаклассами. Именно поэтому такие задачки считаются очень спорными.
Есть еще стандартный список вопросов для каждого языка - они легко гуглятся вместе с ответами на них. Для питона, например, это «что такое GIL» и «как работает garbage collector»? Проблема с такими вопросами в том, что кандидаты часто выучивают ответы чуть ли не наизусть. Но проницательный работодатель догадается задать уточняющие вопросы и копнуть чуть глубже, чтобы понять - действительно ли кандидат знает, о чем говорит или загуглил список типичных вопросов перед собеседованием. Кто-то же намеренно избегает расхожих вопросов. Ну а кто-то примет тупо выученные ответы за чистую монету. Лично я, кстати, ни разу не готовилась к собеседованиям специально - говорят, почти все готовятся - ну а мне это в голову не приходило, и ничего. Я, конечно, никого не призывают брать с меня пример в этом смысле.
На счёт алгоритмов тоже кипят споры - надо или не надо про них спрашивать? Если спрашивать - то, наверно, про самые простые? Отсортируй массив «пузырьком». Вот только зачем «пузырьком»? Я не уверена, что сходу вспомню, чем там этот пузырек отличается от сортировки вставками, а та от сортировки выбором. Да и кому они нужны, эти типы сортировок, они же все с квадратичной сложностью. Но просить реализовать на собесе merge sort или quick sort - это уже сложновато. Поэтому «пузырёк». «А сколько раз в своей работе ты использовал эти алгоритмы? Ни разу, верно?» - спрашивает один коллега другого, сторонника таких вопросов.
В целом я бы разделила всех собеседующих на Знаек и Незнаек. Знайки убеждены, что любой кандидат должен знать всё, если не более того. Написать на бумажке реализацию красно-черного дерева - раз плюнуть, знать ассемблер, C++ и устройство микроконтроллеров - маст хэв. И пофиг, что чувак пришел сайты писать на, прости господи, PHP. Ещё он должен уметь написать накопленную сумму на чистом SQL, знать все мыслимые и немыслимые разделы высшей математики на 5+ ну и, конечно, уметь летать.
Незнайки же возражают, что все эти знания не потребуются для решения тех прикладных задач, с которыми предстоит столкнуться кандидату, и потому требовать их - не нужно, и к тому же они не показывают, что чувак действительно хороший специалист. Но Знаек, конечно, не переубить: хороший программист должен знать всё это, иначе он - так, пустое место, а не программист.
Но не пугайтесь - знаек не так уж много. И лично я с вопросами такой сложности на собеседованиях ни разу не сталкивалась. Найти кандидата, подходящего под критерии таких Знаек сложнее, чем найти любовь всей жизни с первой попытки в Тиндере. Поэтому нереалистичные требования в итоге приходится смягчать (если, конечно, работодатель не Павел Дуров). Конечно, круто, если у вас сильная база, но если вы не во всем сильны - это не беда. Работы на всех хватит.
За офисный планктон замолвлю слово
В последнее время часто слышу, как из каждого утюга ругают работу в офисе, и призывают всех уходить во фриланс.
И, с одной стороны, эта точка зрения понятна - думаю, каждый из вас, кто когда-либо работал в офисах знает, какие в этом недостатки, и как многое там может раздражать и демотивировать.
Но у (хорошего) офиса есть и плюсы, давайте не будем забывать об этом. Да и во фрилансе тоже не всё мёдом намазано.
Так что сегодняшний мой пост про преимущества работы в офисе:
1. Общение с коллегами. Общение - это базовая потребность психики, и это я вам говорю как интроверт со стажем. Психологи говорят, что люди, например, с шизоидными чертами личности - которым общение ну совсем не даётся - часто страдают депрессиями именно за счет не удовлетворения этой потребности, даже если они её и не осознают. И еще социальные скиллы надо прокачивать, они требуются в самых разных жизненных обстоятельствах. С мозгом ведь всё так же как и со спортом - если не тренируешь, навык падает. И да, многие работодатели уже приходят к тому, что специалисты с развитыми навыками коммуникации ценнее, чем одинокие гении. Потому что, ну знаете, с одиночками сложно договориться даже по рабочим моментам. Общаться, конечно, можно и в мессенджерах, и по видеосвязи, но имхо такое общение уступает личному контакту. Офис часто критикуют за то, что люди там часто отвлекаются на кофебрейки и тому подобные «бесполезные» вещи. Я не считаю, что переключение внимания/отдых и общение (см пункт 1) - это бесполезные вещи.
2. Командная работа. Очень часто задачи, с которыми мы сталкиваемся, решаются совместными усилиями, а не кем-то в одиночку. Технические решения, архитектура приложения не отдаются на откуп одному разработчику, а обсуждаются и прорабатываются вместе. И это хорошо. Когда ты делаешь всю задачу сам, ни с кем не советуясь и не вынося на обсуждение принятые решения, ты почти наверняка упускаешь важные детали, а коллеги могут увидеть и указать тебе на недостатки выбранного решения, и на моменты, которые ты не учел. Так что всякие мозговые штурмы и архитектурные комитеты - полезная штука, как и просто возможность в любой момент посоветоваться с коллегами (особенно если ты новичок). Опять-таки, удаленно общаться - тоже можно. Но удаленно коммуникации будет меньше, и там, где в офисе ты бы наверняка посоветовался с коллегой, который сидит рядом - из дома ты часто будешь принимать решение сам. Почему-то очная коммуникация эффективнее телефонного звонка, переписки или видеоконференций. Включенности что ли больше. Ведь именно способность к коллектиной работе и объединению усилий и стали причиной появления всех цивилизаций.
3. Перенимание опыта. На работе можно встретить классных профессионалов, и учиться у них (удаленно осуществить такое сложнее). Это могут быть и очень сильные технические специалисты, и менеджеры, и люди с развитыми soft-скиллами. Наблюдаешь, например, за начальником отдела, и видишь, как он умело общается с подчиненными, как умеет к каждому найти индивиуальный подход и замотивировать. И учишься у него этим навыками. Смотришь на других руководителей и понимаешь, какие именно личностные качества и знания позволяют ими управлять людьми и разруливать разные ситуации, добиваться высоких результатов. И так ты тоже приобретаешь некоторые компетенции рукводителя. Да, разумеется, речь идёт именно о сильных профессионалах, если таких у вас на работе нет - то есть вероятность, что ловить там действительно особо нечего.
4. Вдохновение. Если вы попали в хорошую дружную команду, которая горит своим проектом, да еще и сильна технически - эти люди станут вашим вдохновением для того, чтобы расти и развиваться.
Так что офис может быть не таким уж плохим местом, потому что офис - это не бетонная коробка, офис - это люди, с которыми мы работаем, и если люди там классные, то и работа будет в радость (по крайней мере первые пару лет 🙂 )
В последнее время часто слышу, как из каждого утюга ругают работу в офисе, и призывают всех уходить во фриланс.
И, с одной стороны, эта точка зрения понятна - думаю, каждый из вас, кто когда-либо работал в офисах знает, какие в этом недостатки, и как многое там может раздражать и демотивировать.
Но у (хорошего) офиса есть и плюсы, давайте не будем забывать об этом. Да и во фрилансе тоже не всё мёдом намазано.
Так что сегодняшний мой пост про преимущества работы в офисе:
1. Общение с коллегами. Общение - это базовая потребность психики, и это я вам говорю как интроверт со стажем. Психологи говорят, что люди, например, с шизоидными чертами личности - которым общение ну совсем не даётся - часто страдают депрессиями именно за счет не удовлетворения этой потребности, даже если они её и не осознают. И еще социальные скиллы надо прокачивать, они требуются в самых разных жизненных обстоятельствах. С мозгом ведь всё так же как и со спортом - если не тренируешь, навык падает. И да, многие работодатели уже приходят к тому, что специалисты с развитыми навыками коммуникации ценнее, чем одинокие гении. Потому что, ну знаете, с одиночками сложно договориться даже по рабочим моментам. Общаться, конечно, можно и в мессенджерах, и по видеосвязи, но имхо такое общение уступает личному контакту. Офис часто критикуют за то, что люди там часто отвлекаются на кофебрейки и тому подобные «бесполезные» вещи. Я не считаю, что переключение внимания/отдых и общение (см пункт 1) - это бесполезные вещи.
2. Командная работа. Очень часто задачи, с которыми мы сталкиваемся, решаются совместными усилиями, а не кем-то в одиночку. Технические решения, архитектура приложения не отдаются на откуп одному разработчику, а обсуждаются и прорабатываются вместе. И это хорошо. Когда ты делаешь всю задачу сам, ни с кем не советуясь и не вынося на обсуждение принятые решения, ты почти наверняка упускаешь важные детали, а коллеги могут увидеть и указать тебе на недостатки выбранного решения, и на моменты, которые ты не учел. Так что всякие мозговые штурмы и архитектурные комитеты - полезная штука, как и просто возможность в любой момент посоветоваться с коллегами (особенно если ты новичок). Опять-таки, удаленно общаться - тоже можно. Но удаленно коммуникации будет меньше, и там, где в офисе ты бы наверняка посоветовался с коллегой, который сидит рядом - из дома ты часто будешь принимать решение сам. Почему-то очная коммуникация эффективнее телефонного звонка, переписки или видеоконференций. Включенности что ли больше. Ведь именно способность к коллектиной работе и объединению усилий и стали причиной появления всех цивилизаций.
3. Перенимание опыта. На работе можно встретить классных профессионалов, и учиться у них (удаленно осуществить такое сложнее). Это могут быть и очень сильные технические специалисты, и менеджеры, и люди с развитыми soft-скиллами. Наблюдаешь, например, за начальником отдела, и видишь, как он умело общается с подчиненными, как умеет к каждому найти индивиуальный подход и замотивировать. И учишься у него этим навыками. Смотришь на других руководителей и понимаешь, какие именно личностные качества и знания позволяют ими управлять людьми и разруливать разные ситуации, добиваться высоких результатов. И так ты тоже приобретаешь некоторые компетенции рукводителя. Да, разумеется, речь идёт именно о сильных профессионалах, если таких у вас на работе нет - то есть вероятность, что ловить там действительно особо нечего.
4. Вдохновение. Если вы попали в хорошую дружную команду, которая горит своим проектом, да еще и сильна технически - эти люди станут вашим вдохновением для того, чтобы расти и развиваться.
Так что офис может быть не таким уж плохим местом, потому что офис - это не бетонная коробка, офис - это люди, с которыми мы работаем, и если люди там классные, то и работа будет в радость (по крайней мере первые пару лет 🙂 )
-
Я не экстрасенс, и точно не скажу, что именно зацепило взгляд HR. Скорее всего, ей дали задание найти разработчика и ключевые слова, по которым надо искать (sql, python итд). Ключевые слова совпали с моим резюме, вот и вся загадка.
А связалась она со мной так быстро, скорее всего, потому, что на рынке IT царил и будет царить дефицит - искать людей очень сложно, и обращают внимание на всех (разве что кроме тех, у кого в резюме есть что-то откровенно отталкивающее).
-
Подчеркивать в резюме нужно всё, что вы знаете. HR-ы не экстрасенсы, и, более того, некоторые из них могут совсем не понимать предметную область. Им сказали - нужны «базы данных» - и они будут искать эти слова у вас в резюме. Не найдут - перейдут к следующему кандидату. Это во-первых. Во-вторых, это лично вам кажется, что ваши знания - сами собой разумеющиеся. Часто на собеседования приходят люди, которые ничего вообще не слышали, например, про базы данных. Ваша задача - уже в резюме выгодно выделяться на их фоне.
-
Знаете, универсального ответа тут нет. Не факт, что вы когда-то столкнётесь с Си на работе - это зависит от специфики проектов, над которыми будете работать. Например, для веб-разработки Си понадобится вряд ли. Если хотите быть в тренде (и выбирать простые пути), более востребованным может оказаться, например, Go. Но как база знание Си - это хороший навык. Когда начнёте работать, вряд ли у вас будет время и ресурсы на его изучение (если не возникнет острой необходимости). Утверждение, что вы не работали с памятью звучит немного странно - наверно, вы имели в виду, что вы не выделяли и не освобождали память явными вызовами, как это делается в Си.
-
А вы уже освоили ООП? Пишете большие классы и проектируете относительно большие программы с иерархией классов? Если да - то паттерны пригодятся. Если же вы пока на уровне небольших скриптов, или делаете всё в рамках готовых фреймворков (типа django в питоне), то паттерны на этом этапе применять будет особо негде. Это не значит, что их не стоит изучать вообще. Я лишь о том, что не факт, что это первый приоритет на этом этапе (а я даже не знаю, какой у вас этап).
Вас так быстро нашла HR прежде всего потому, что вы прошли за два года некоторое количество курсов по матану и computer science? Что ее заинтересовало в вашем резюме прежде всего? Я не экстрасенс, и точно не скажу, что именно зацепило взгляд HR. Скорее всего, ей дали задание найти разработчика и ключевые слова, по которым надо искать (sql, python итд). Ключевые слова совпали с моим резюме, вот и вся загадка.
А связалась она со мной так быстро, скорее всего, потому, что на рынке IT царил и будет царить дефицит - искать людей очень сложно, и обращают внимание на всех (разве что кроме тех, у кого в резюме есть что-то откровенно отталкивающее).
-
В ОС, протоколах и базах данных я разбираюсь, мне казалось даже странным это подчеркивать в резюме.Подчеркивать в резюме нужно всё, что вы знаете. HR-ы не экстрасенсы, и, более того, некоторые из них могут совсем не понимать предметную область. Им сказали - нужны «базы данных» - и они будут искать эти слова у вас в резюме. Не найдут - перейдут к следующему кандидату. Это во-первых. Во-вторых, это лично вам кажется, что ваши знания - сами собой разумеющиеся. Часто на собеседования приходят люди, которые ничего вообще не слышали, например, про базы данных. Ваша задача - уже в резюме выгодно выделяться на их фоне.
-
Но вот с C не сталкивался никогда, с памятью и указателями не работал. И непонятно, тратить ли на это время сейчас, пока ещё не работаю в IT.Знаете, универсального ответа тут нет. Не факт, что вы когда-то столкнётесь с Си на работе - это зависит от специфики проектов, над которыми будете работать. Например, для веб-разработки Си понадобится вряд ли. Если хотите быть в тренде (и выбирать простые пути), более востребованным может оказаться, например, Go. Но как база знание Си - это хороший навык. Когда начнёте работать, вряд ли у вас будет время и ресурсы на его изучение (если не возникнет острой необходимости). Утверждение, что вы не работали с памятью звучит немного странно - наверно, вы имели в виду, что вы не выделяли и не освобождали память явными вызовами, как это делается в Си.
-
Или лучше, например, в паттернах разобраться.А вы уже освоили ООП? Пишете большие классы и проектируете относительно большие программы с иерархией классов? Если да - то паттерны пригодятся. Если же вы пока на уровне небольших скриптов, или делаете всё в рамках готовых фреймворков (типа django в питоне), то паттерны на этом этапе применять будет особо негде. Это не значит, что их не стоит изучать вообще. Я лишь о том, что не факт, что это первый приоритет на этом этапе (а я даже не знаю, какой у вас этап).
Я маленький, глупый и ничего не умею
Часто начинающие разработчики приходят на свою первую (или не первую) работу с такой установкой. Психологически это вполне понятно и объяснимо. Но из этой неуверенности в себе вырастают неправильные установки и дезадаптивное поведение (которое мешает и вашему росту как специалисту, и команде, частью которой вы теперь являетесь).
Приведу примеры такого поведения вместе с более правильной стратегией.
Все время молчать. Вокруг все такие опытные и умные, один я ничего не знаю. Ну что я могу сказать по делу? Я же новичок.
У вас вызывает сомнение какое-то решение? Непонятно, почему другие разработчики выбрали именно его? - Не молчите. Выскажите свои сомнения. Попросите обосновать. Если вам что-то неочевидно или непонятно, значит эти моменты заслуживают пояснения. Вполне возможно, что вы правы. Да, вы, именно вы, а не вон те умные и опытные разработчики. Мышление - вещь коварная, и новый человек может помочь взглянуть на проблему под другим углом, который упускают люди, долго занятые в проекте. К тому же ваши вопросы помогут быстрее войти в курс дела и разобраться в проекте.
Всецело доверять «старшим». Доверять надо самому себе, своему мышлению, логике, здравому смыслу и, возможно, изученному материалу. И новичок может найти в коде опытного программиста ошибку, если будет вдумчиво его читать, не с позиции «я глупый, а он крутой».
Не предлагать своё решение. У вас есть идея, как можно сделать работу, но вы держите её при себе. Ну что такого умного вы можете предложить на этой стадии? Вы же ещё так мало умеете… Вон тут сколько умных взрослых людей - им лучше знать.
Верно? Неверно. Снимите подгузник и вытрите слезы. Есть идея - предложите её коллегам. Даже если она им не понравится, и они её раскритикуют - у вас будет шанс узнать, что в этом решении не так (не забудьте попросить обосновать их возражения), и что вы не учли, когда думали о проблеме.
В общем, если в вас есть этот застенчивый, пассивный, чуть инфантильный вчерашний студент - старайтесь его перерасти. Задавайте вопросы, выражайте сомнения, формируйте и озвучивайте свою точку зрения, аргументируйте и просите остальных обосновывать свои решения. Первое время это может быть сложно, но проблема скорее в вашей психологии, а не в квалификации.
Напоминаю, вопросы от начинающих (и будущих) айтишников можно задать в боте: @hum_it_bot.
Часто начинающие разработчики приходят на свою первую (или не первую) работу с такой установкой. Психологически это вполне понятно и объяснимо. Но из этой неуверенности в себе вырастают неправильные установки и дезадаптивное поведение (которое мешает и вашему росту как специалисту, и команде, частью которой вы теперь являетесь).
Приведу примеры такого поведения вместе с более правильной стратегией.
Все время молчать. Вокруг все такие опытные и умные, один я ничего не знаю. Ну что я могу сказать по делу? Я же новичок.
У вас вызывает сомнение какое-то решение? Непонятно, почему другие разработчики выбрали именно его? - Не молчите. Выскажите свои сомнения. Попросите обосновать. Если вам что-то неочевидно или непонятно, значит эти моменты заслуживают пояснения. Вполне возможно, что вы правы. Да, вы, именно вы, а не вон те умные и опытные разработчики. Мышление - вещь коварная, и новый человек может помочь взглянуть на проблему под другим углом, который упускают люди, долго занятые в проекте. К тому же ваши вопросы помогут быстрее войти в курс дела и разобраться в проекте.
Всецело доверять «старшим». Доверять надо самому себе, своему мышлению, логике, здравому смыслу и, возможно, изученному материалу. И новичок может найти в коде опытного программиста ошибку, если будет вдумчиво его читать, не с позиции «я глупый, а он крутой».
Не предлагать своё решение. У вас есть идея, как можно сделать работу, но вы держите её при себе. Ну что такого умного вы можете предложить на этой стадии? Вы же ещё так мало умеете… Вон тут сколько умных взрослых людей - им лучше знать.
Верно? Неверно. Снимите подгузник и вытрите слезы. Есть идея - предложите её коллегам. Даже если она им не понравится, и они её раскритикуют - у вас будет шанс узнать, что в этом решении не так (не забудьте попросить обосновать их возражения), и что вы не учли, когда думали о проблеме.
В общем, если в вас есть этот застенчивый, пассивный, чуть инфантильный вчерашний студент - старайтесь его перерасти. Задавайте вопросы, выражайте сомнения, формируйте и озвучивайте свою точку зрения, аргументируйте и просите остальных обосновывать свои решения. Первое время это может быть сложно, но проблема скорее в вашей психологии, а не в квалификации.
Напоминаю, вопросы от начинающих (и будущих) айтишников можно задать в боте: @hum_it_bot.
Про эффективность кода
Когда слышишь что-то про эффективность кода и время его исполнения, первое, что приходит на ум - это какие-то сложные алгоритмы, математические оптимизации и разные тому подобные хитросплетенные методы. Ну а чтобы понять, где что-то пошло не так, найти узкое горлышко - используются разные анализаторы кода и профайлеры.
По факту же (особенно, когда имеешь дело с не сложными задачами), часто всё оказывается гораздо проще - и для того, чтобы писать эффективный код, новичку достаточно использовать здравый смысл. Часто сталкиваюсь с тем, что информация, полученная в ВУЗе (или из других источников) живёт у человека в голове как-то отдельно от практики, абстрактно, и при решении задач человек не вспоминает о ней.
При написании кода поначалу есть соблазн заботиться только о том, чтобы код как-то работал, и выполнял положенную функцию, а о том, что именно в нём происходит, начинающие разработчики часто забывают подумать. Поэтому ниже будет немного «правил жизни» от капитана Очевидность.
При написании кода нужно помнить о том, что любая программа всегда завязана на ресурсах компьютера - она использует память, ядра процессора и диск. Поэтому не стоит, не задумываясь, читать файл размером в 20 Гб в память - есть ли у вас эти 20 Гб памяти, и оправдано ли их использование в этом случае? От использования этих ресурсов (в частности, от него) зависит и время исполнения кода.
Приведу пример такого необдуманного кода от джуниор-разработчика. Задача была - прочитать построчно большой файл и каждую строку обработать определенным образом. Человек написал код, который выполнял эту задачу, но максимально медленно и неэффективно. В файле было 500 тысяч строк. Разрабочик написал цикл, который выполнялся 500 тысяч раз. В ходе каждой итерации вызывался метод read() (прочитать весь файл в память). То есть, огромный файл был открыт, закрыт и прочитан 500 тысяч раз, а не 1 раз. Во время каждой итерации вызывался метод skip(), чтобы пропустить нужное количество обработанных ранее строк - на первой итерации 0, дальше 1, потом 2 и так далее. То есть метод skip был вызван так же 500 тысяч раз.
Поэтому, написав такой код, стоило задуматься, какие операции выполняются в нём, сколько раз будут они будут выполнены, насколько они дорогостоящие и медленные, и правда ли нужно читать огромный файл целиком в память (даже если и 1 раз), если за раз требуется обработать только 1 строку. Никакой магии и математики, только немного мышления.
Еще одно правило жизни от КО: знания даны не просто так, получая их, задумывайтесь, где их нужно будет применять.
Другой пример от этого же разработчика: в реляционной БД есть таблица с индентификатором id. По этому полю построен индекс, что позволяет, зная id, находить нужную запись в БД мгновенно. Про индексы и их роль в БД разработчик знал из университетсткого курса, но пока не понял, как это знание использовать на практике. В общем, получился у него SQL, который работал очень медленно, и когда я посмотрела, в чем там проблема, оказалось, что разработчик конвертировал id (число) - в строку, и использовал эту строку в запросе. Но вот беда, индекс-то построен по числовому полю, а со строкой работать не умеет. Поэтому теперь, чтобы найти запись с id «5» - базе данных нужно было прочитать все записи в таблице (например, их там миллионы), конвертировать каждый id (из миллионов) в строку - и сравнить его с искомым. Сколько времени потребуется на это базе данных зависит в основном от её размера.
Так что если ваш код работает очень медленно, скорее всего, причина лежит где-то на поверхности.
Когда слышишь что-то про эффективность кода и время его исполнения, первое, что приходит на ум - это какие-то сложные алгоритмы, математические оптимизации и разные тому подобные хитросплетенные методы. Ну а чтобы понять, где что-то пошло не так, найти узкое горлышко - используются разные анализаторы кода и профайлеры.
По факту же (особенно, когда имеешь дело с не сложными задачами), часто всё оказывается гораздо проще - и для того, чтобы писать эффективный код, новичку достаточно использовать здравый смысл. Часто сталкиваюсь с тем, что информация, полученная в ВУЗе (или из других источников) живёт у человека в голове как-то отдельно от практики, абстрактно, и при решении задач человек не вспоминает о ней.
При написании кода поначалу есть соблазн заботиться только о том, чтобы код как-то работал, и выполнял положенную функцию, а о том, что именно в нём происходит, начинающие разработчики часто забывают подумать. Поэтому ниже будет немного «правил жизни» от капитана Очевидность.
При написании кода нужно помнить о том, что любая программа всегда завязана на ресурсах компьютера - она использует память, ядра процессора и диск. Поэтому не стоит, не задумываясь, читать файл размером в 20 Гб в память - есть ли у вас эти 20 Гб памяти, и оправдано ли их использование в этом случае? От использования этих ресурсов (в частности, от него) зависит и время исполнения кода.
Приведу пример такого необдуманного кода от джуниор-разработчика. Задача была - прочитать построчно большой файл и каждую строку обработать определенным образом. Человек написал код, который выполнял эту задачу, но максимально медленно и неэффективно. В файле было 500 тысяч строк. Разрабочик написал цикл, который выполнялся 500 тысяч раз. В ходе каждой итерации вызывался метод read() (прочитать весь файл в память). То есть, огромный файл был открыт, закрыт и прочитан 500 тысяч раз, а не 1 раз. Во время каждой итерации вызывался метод skip(), чтобы пропустить нужное количество обработанных ранее строк - на первой итерации 0, дальше 1, потом 2 и так далее. То есть метод skip был вызван так же 500 тысяч раз.
Поэтому, написав такой код, стоило задуматься, какие операции выполняются в нём, сколько раз будут они будут выполнены, насколько они дорогостоящие и медленные, и правда ли нужно читать огромный файл целиком в память (даже если и 1 раз), если за раз требуется обработать только 1 строку. Никакой магии и математики, только немного мышления.
Еще одно правило жизни от КО: знания даны не просто так, получая их, задумывайтесь, где их нужно будет применять.
Другой пример от этого же разработчика: в реляционной БД есть таблица с индентификатором id. По этому полю построен индекс, что позволяет, зная id, находить нужную запись в БД мгновенно. Про индексы и их роль в БД разработчик знал из университетсткого курса, но пока не понял, как это знание использовать на практике. В общем, получился у него SQL, который работал очень медленно, и когда я посмотрела, в чем там проблема, оказалось, что разработчик конвертировал id (число) - в строку, и использовал эту строку в запросе. Но вот беда, индекс-то построен по числовому полю, а со строкой работать не умеет. Поэтому теперь, чтобы найти запись с id «5» - базе данных нужно было прочитать все записи в таблице (например, их там миллионы), конвертировать каждый id (из миллионов) в строку - и сравнить его с искомым. Сколько времени потребуется на это базе данных зависит в основном от её размера.
Так что если ваш код работает очень медленно, скорее всего, причина лежит где-то на поверхности.
Рекурсия для гуманитариев
Вчера помогала другой блогерше с заданием по функциональному программированию и столкнулась с вопросом - а как объяснить не математику, что такое рекурсия? Тем, кто знаком с такими математическими терминами как реккурентные функции и индукция, рекурсия по идее будет интуитивно понятна и так.
Попробую рассказать про рекурсию максимально просто (для более интеллектуальных и подробных объяснений ищите статьи и видео в Интернете, и всё должно проясниться) для тех, кто ещё не разобрался.
Наверно те, кто уже сталкивался с рекурсией, примерно понимает, что это функция, которая вызывает саму себя. Но как это может работать - непонятно?
Давайте возьмём для примера функцию «сумма элементов списка» (или массива).
sum(lst) - можно ее определить итеративно, пройдясь циклом через все элементы списка. (for x in list: result += x)
Но можно воспользоваться и рекурсивным определением. Оно будет выглядеть примерно так:
1) Если список пуст, то сумма равна 0. - Это граничное условие, оно должно быть не рекурсивным, потому что в этой точке цикл выполнения функции закончится, и рекурсия остановится.
2) Если список не пуст, то сумма равна первому его элементу + сумме оставшейся части списка.
На питоне это будет выглядеть примерно так:
Давайте представим, как будет выполняться такая функция со списком [1,2,3]
1) Первый вызов rec_sum([1,2,3]) - вернёт 1 + rec_sum([2,3]))
2) Второй вызов вернёт 2 + rec_sum([3]).
3) Третий 3 + rec_sum([]) - здесь рекурсия заканчивается, с пустым списоком функция вернёт ноль.
То есть, выполнение разложится на этапы так:
rec_sum( [1, 2, 3]) = 1 + rec_sum([2,3]) = 1 + 2 + rec_sum([3]) = 1 + 2 + 3 + rec_sum([]) = 1 + 2 +3 + 0 = 6
После того, как функция разложится на такую цепочку рекурсивных вызовов и достигнет дна рекурсии, каждый вызов функции начнет возвращать значения - начиная с самого нового, самого последнего вызова (то есть с пустым списком):
rec_sum([]) возвращает 0
rec_sum([3]) возвращает 3 + то, что вернула rec_sum([]) = 3 + 0 = 3
rec_sum([2,3]) возвращает 2 + то, что вернула rec_sum([3]) = 2 + 3 = 5
rec_sum([1,2,3]) возвращает 1 + то, что вернулось на предыдущем шаге, то есть 1 + 5 = 6
Чтобы понять, почему это работает именно так, советую изучить, как устроен стек вызовов функций (и обычных, не рекурсивных в том числе) - то есть, что реально происходит в памяти компьютера, когда вы вызываете функцию, и в каком порядке что там выполянется. Это не сложно, с хорошей картинкой и объяснением всё будет понятно.
Напоследок добавлю print в нашу функцию, чтобы наглядно показать, что происходит, когда мы её вызываем на каждом этапе:
В общем, всё как я и описала.
P.S: Пример выше исключительно для демонстрации рекурсии. С точки зрения продуктовой разработки, рекурсия со слайсами списка в питоне - очень неэффективное и ресурсозатратное решение. Используйте циклы 🙂
P.P.S: А вот в функциональных языках программирования есть оптимизации на уровне компиляторов для эффективного выполнения хвостовой рекурсии. Вот только кто использует этот ваш Haskell в проде?
Вчера помогала другой блогерше с заданием по функциональному программированию и столкнулась с вопросом - а как объяснить не математику, что такое рекурсия? Тем, кто знаком с такими математическими терминами как реккурентные функции и индукция, рекурсия по идее будет интуитивно понятна и так.
Попробую рассказать про рекурсию максимально просто (для более интеллектуальных и подробных объяснений ищите статьи и видео в Интернете, и всё должно проясниться) для тех, кто ещё не разобрался.
Наверно те, кто уже сталкивался с рекурсией, примерно понимает, что это функция, которая вызывает саму себя. Но как это может работать - непонятно?
Давайте возьмём для примера функцию «сумма элементов списка» (или массива).
sum(lst) - можно ее определить итеративно, пройдясь циклом через все элементы списка. (for x in list: result += x)
Но можно воспользоваться и рекурсивным определением. Оно будет выглядеть примерно так:
1) Если список пуст, то сумма равна 0. - Это граничное условие, оно должно быть не рекурсивным, потому что в этой точке цикл выполнения функции закончится, и рекурсия остановится.
2) Если список не пуст, то сумма равна первому его элементу + сумме оставшейся части списка.
На питоне это будет выглядеть примерно так:
def rec_sum(lst):
if lst == []:
return 0
return lst[0] + rec_sum(lst[1:])Давайте представим, как будет выполняться такая функция со списком [1,2,3]
1) Первый вызов rec_sum([1,2,3]) - вернёт 1 + rec_sum([2,3]))
2) Второй вызов вернёт 2 + rec_sum([3]).
3) Третий 3 + rec_sum([]) - здесь рекурсия заканчивается, с пустым списоком функция вернёт ноль.
То есть, выполнение разложится на этапы так:
rec_sum( [1, 2, 3]) = 1 + rec_sum([2,3]) = 1 + 2 + rec_sum([3]) = 1 + 2 + 3 + rec_sum([]) = 1 + 2 +3 + 0 = 6
После того, как функция разложится на такую цепочку рекурсивных вызовов и достигнет дна рекурсии, каждый вызов функции начнет возвращать значения - начиная с самого нового, самого последнего вызова (то есть с пустым списком):
rec_sum([]) возвращает 0
rec_sum([3]) возвращает 3 + то, что вернула rec_sum([]) = 3 + 0 = 3
rec_sum([2,3]) возвращает 2 + то, что вернула rec_sum([3]) = 2 + 3 = 5
rec_sum([1,2,3]) возвращает 1 + то, что вернулось на предыдущем шаге, то есть 1 + 5 = 6
Чтобы понять, почему это работает именно так, советую изучить, как устроен стек вызовов функций (и обычных, не рекурсивных в том числе) - то есть, что реально происходит в памяти компьютера, когда вы вызываете функцию, и в каком порядке что там выполянется. Это не сложно, с хорошей картинкой и объяснением всё будет понятно.
Напоследок добавлю print в нашу функцию, чтобы наглядно показать, что происходит, когда мы её вызываем на каждом этапе:
[21]: def rec_sum(lst):
...:
...: if lst == []:
...: print('returning 0')
...: return 0
...:
...: print('next: {} + rec_sum{}'.format(lst[0], lst[1:]))
...:
...: ret = lst[0] + rec_sum(lst[1:])
...: print('returning {}'.format(ret))
...: return ret
...:
In [22]: rec_sum([1,2,3])
next: 1 + rec_sum[2, 3]
next: 2 + rec_sum[3]
next: 3 + rec_sum[]
returning 0
returning 3
returning 5
returning 6
Out[22]: 6В общем, всё как я и описала.
P.S: Пример выше исключительно для демонстрации рекурсии. С точки зрения продуктовой разработки, рекурсия со слайсами списка в питоне - очень неэффективное и ресурсозатратное решение. Используйте циклы 🙂
P.P.S: А вот в функциональных языках программирования есть оптимизации на уровне компиляторов для эффективного выполнения хвостовой рекурсии. Вот только кто использует этот ваш Haskell в проде?
Про корпоративы
Ребята, кто работает в офисе, и у кого сейчас начинается сезон корпоративов - мой вам совет: будьте внимательны. Корпоратив - это не повод отпустить поводья, злоупотреблять алкоголем, расслабиться и отпустить себя на волю.
Некоторые руководители сознательно используют корпоратив как способ посмотреть на своих подчинённых в более «естественной» обстановке, и сделать свои выводы. Особенно на тех работников, к которым уже накопились определенные вопросы. Корпоратив - хороший способ познакомиться с коллегами в более неформальной обстановке и, возможно, воспользоваться их большей откровенностью, выяснить какие-то новые подробности и сделать свои выводы. Это не значит, что такие руководители «подлые шпионы» - наоборот, это хорошая менеджерская практика - следить за настроениями коллег, выяснять, кому что не нравится и искать способы, как это исправить. Ну и заодно отсеять смутьянов и откровенно неадекватных людей.
Так что напиться, танцевать голым на столе, отпускать скабрёзные шутки в адрес коллег противоположного пола, затевать конфликты и драки, или как-то ещё отпустить тормоза в плане своей речи или поступков - это плохая идея. Корпоратив - это работа, и все общение в рамках корпоратива - это тоже рабочее общение, и протекать оно должно в корректных и социально приемлемых формах. Не путайте корпоративы с пьянками в обществе закадычных друзей по общаге.
Ребята, кто работает в офисе, и у кого сейчас начинается сезон корпоративов - мой вам совет: будьте внимательны. Корпоратив - это не повод отпустить поводья, злоупотреблять алкоголем, расслабиться и отпустить себя на волю.
Некоторые руководители сознательно используют корпоратив как способ посмотреть на своих подчинённых в более «естественной» обстановке, и сделать свои выводы. Особенно на тех работников, к которым уже накопились определенные вопросы. Корпоратив - хороший способ познакомиться с коллегами в более неформальной обстановке и, возможно, воспользоваться их большей откровенностью, выяснить какие-то новые подробности и сделать свои выводы. Это не значит, что такие руководители «подлые шпионы» - наоборот, это хорошая менеджерская практика - следить за настроениями коллег, выяснять, кому что не нравится и искать способы, как это исправить. Ну и заодно отсеять смутьянов и откровенно неадекватных людей.
Так что напиться, танцевать голым на столе, отпускать скабрёзные шутки в адрес коллег противоположного пола, затевать конфликты и драки, или как-то ещё отпустить тормоза в плане своей речи или поступков - это плохая идея. Корпоратив - это работа, и все общение в рамках корпоратива - это тоже рабочее общение, и протекать оно должно в корректных и социально приемлемых формах. Не путайте корпоративы с пьянками в обществе закадычных друзей по общаге.
Как наши установки мешают росту
Условно образ мыслей любого человека можно поделить на два типа - «неподвижный» (fixed mindset) и «нацеленный на рост» (growth mindset).
В первом случае человек навешивает на себя ярлыки и запирает себя в рамках этих представлений о себе, например: «я гуманитарий», «математика - это не для меня», «я глупый», «у меня нет способностей к этому» , «это слишком сложно для меня».
То есть он рассматривает свои способности и таланты как некую константу, которую нельзя сдвинуть, и которая определяет его успех или не успех в чем-либо. Поэтому у таких людей может возникать проблема с мотивацией и они склонны сдаваться, когда сталкиваются с трудностями. Любую неудачу они склонны трактовать как подтверждение этих ярлыков, которые на себя навешали - «ну я так и знал. я тупой». И предпочитают заниматься только тем, что им легко даётся.
Кстати, ярлыки могут быть и положительными. Например, «я умный». И, вроде как, звучит получше, чем «я тупой», но на деле такие установки тоже препятствуют росту, потому что - а зачем развиваться, ты же и так умный? И зачем пробовать себя в тех областях, где нет такой уверенности в себе? Лучше работать с тем, что и так хорошо получается.
Противоположный тип мышления - это growth mindset. Такие люди не рассматривают себя как набор качеств, которые нельзя изменить. Они считают, что человек - это процесс, и чем больше ты вкладываешься в этот процесс, тем больших высот можешь достигнуть. Их подход - «у меня плохо с математикой пока, но я работаю над этим». Препятствия и трудности на пути они воспринимают как нормальные стадии роста, и проявляют настойчивость в их преодолении. Потому что рост - это бесконечный процесс, и всегда можно стать лучше. Если ты в чем-то не силён, это значит, что ты раньше не уделял внимания этой области, и это всегда можно исправить.
Думаю, вывод ясен: меньше ярлыков - больше роста. А еще хвалить и поощрять (и себя самого и, например, своих детей) лучше не за стабильные качества («ты умный»), а за усилия, которые человек прикладывает. За то, что вкладывается в процесс своего развития.
P.S.: Мысли позаимствованы вот из этого видосика: https://www.youtube.com/watch?v=Yl9TVbAal5s&feature=youtu.be
Условно образ мыслей любого человека можно поделить на два типа - «неподвижный» (fixed mindset) и «нацеленный на рост» (growth mindset).
В первом случае человек навешивает на себя ярлыки и запирает себя в рамках этих представлений о себе, например: «я гуманитарий», «математика - это не для меня», «я глупый», «у меня нет способностей к этому» , «это слишком сложно для меня».
То есть он рассматривает свои способности и таланты как некую константу, которую нельзя сдвинуть, и которая определяет его успех или не успех в чем-либо. Поэтому у таких людей может возникать проблема с мотивацией и они склонны сдаваться, когда сталкиваются с трудностями. Любую неудачу они склонны трактовать как подтверждение этих ярлыков, которые на себя навешали - «ну я так и знал. я тупой». И предпочитают заниматься только тем, что им легко даётся.
Кстати, ярлыки могут быть и положительными. Например, «я умный». И, вроде как, звучит получше, чем «я тупой», но на деле такие установки тоже препятствуют росту, потому что - а зачем развиваться, ты же и так умный? И зачем пробовать себя в тех областях, где нет такой уверенности в себе? Лучше работать с тем, что и так хорошо получается.
Противоположный тип мышления - это growth mindset. Такие люди не рассматривают себя как набор качеств, которые нельзя изменить. Они считают, что человек - это процесс, и чем больше ты вкладываешься в этот процесс, тем больших высот можешь достигнуть. Их подход - «у меня плохо с математикой пока, но я работаю над этим». Препятствия и трудности на пути они воспринимают как нормальные стадии роста, и проявляют настойчивость в их преодолении. Потому что рост - это бесконечный процесс, и всегда можно стать лучше. Если ты в чем-то не силён, это значит, что ты раньше не уделял внимания этой области, и это всегда можно исправить.
Думаю, вывод ясен: меньше ярлыков - больше роста. А еще хвалить и поощрять (и себя самого и, например, своих детей) лучше не за стабильные качества («ты умный»), а за усилия, которые человек прикладывает. За то, что вкладывается в процесс своего развития.
P.S.: Мысли позаимствованы вот из этого видосика: https://www.youtube.com/watch?v=Yl9TVbAal5s&feature=youtu.be
YouTube
RSA ANIMATE: How To Help Every Child Fulfil Their Potential
Ever wondered why kids say they’re bored at school, or why they stop trying when the work gets harder? Educationalist Carol Dweck explains how the wrong kind of praise actually *harms* young people.
This short video is essential viewing for EVERYONE – from…
This short video is essential viewing for EVERYONE – from…
IT - это опасно
Пишу не с целью напугать новичков, а чтобы призвать к бдительности. Старинная народная мудрость гласит «семь раз SELECT, один раз UPDATE». И не зря.
Может статься, в конторе, в которую вы устроитесь работать будет царить такой бардак, что у вас (новичка) будет полный доступ к базе данных на продакшене. И вы «случайно» возьмёте и удалите оттуда все данные. Говорят, удаление нужных данных - это как боевое крещение для айтишника, и все через него проходят (я проходила). Но еще говорят, что дурак учится на своих ошибках, а умный - на чужих.
Как быть осторожнее? Ну во-первых, если у вас есть доступ к продакшену, подумайте, а действительно ли вам нужен этот доступ? Может есть, например, какая-то реплика или тестовая копия базы данных и можно там провернуть свои опасные манипуляции? (любые манипуляции на проде - опасны) Да-да, даже с помощью обычного SELECT можно сломать продакшен - если он окажется очень тяжелым и будет долго выполняться.
Во-вторых - если речь идёт о базе данных, и вы как раз собираетесь в ней выполнить руками UPDATE или DELETE - остановитесь. Подумайте, что вы сейчас хотите сделать и зачем? Почему вы собираетесь менять вручную данные на проде? Что вас привело к такому решению? Может, не надо? Может, лучше у кого-то спросить, как решить проблему по-другому? Дальше, если это вас всё-таки не остановило - вспомните о такой штуке как транзакция - и выполняйте скрипт внутри неё, чтобы можно было потом изящным движением руки полностью откатить изменения. После изменения или удаления строк выполните SELECT и проверьте, что все ок, и только тогда закрывайте транзакцию. Для тех, кто в танке - транзакция открывается волшебной командой BEGIN; И откатывается с помощью ROLLBACK.
В-третьих, предположим, произошло худшее и вы накосячили. Не пытайтесь по-тихому всё исправить. Куча лихорадочных телодвижений, чтобы прикрыть листиками кучку, может только усугубить содеянное. Спросите более опытных коллег - они наверняка уже так косячили и знают, как с наименьшими потерями исправить ситуацию. Возможно, ничего особо страшного и не произошло и вы зря перепугались, возможно, решение есть, просто вы его не видите. Не торопитесь.
Часто ошибки происходят от того, что человеку банально лень разбираться с инструментом, который он использует. Так что если вы сейчас собираетесь выполнить команду в командной строке (извините за эвфемизм) - убедитесь, что вы понимаете, что эта команда делает и как работает - не удалит ли она нужный файл, не перезатрёт ли данные. Почитайте документацию - и только потом действуйте. На моей памяти юные падаваны ухитрялись даже удалить коммиты из git-а, потому что не стали затруднять себя чтением документации и не до конца понимали, что конкретно делает та или иная команда гита. Оказывается, даже гит - это опасно. Будьте аккуратнее с гитом. Не действуйте наугад. Мир технологий - это мир знаний и логики, а не Хогвартс, тут нужно разбираться, что и как работает.
Пишу не с целью напугать новичков, а чтобы призвать к бдительности. Старинная народная мудрость гласит «семь раз SELECT, один раз UPDATE». И не зря.
Может статься, в конторе, в которую вы устроитесь работать будет царить такой бардак, что у вас (новичка) будет полный доступ к базе данных на продакшене. И вы «случайно» возьмёте и удалите оттуда все данные. Говорят, удаление нужных данных - это как боевое крещение для айтишника, и все через него проходят (я проходила). Но еще говорят, что дурак учится на своих ошибках, а умный - на чужих.
Как быть осторожнее? Ну во-первых, если у вас есть доступ к продакшену, подумайте, а действительно ли вам нужен этот доступ? Может есть, например, какая-то реплика или тестовая копия базы данных и можно там провернуть свои опасные манипуляции? (любые манипуляции на проде - опасны) Да-да, даже с помощью обычного SELECT можно сломать продакшен - если он окажется очень тяжелым и будет долго выполняться.
Во-вторых - если речь идёт о базе данных, и вы как раз собираетесь в ней выполнить руками UPDATE или DELETE - остановитесь. Подумайте, что вы сейчас хотите сделать и зачем? Почему вы собираетесь менять вручную данные на проде? Что вас привело к такому решению? Может, не надо? Может, лучше у кого-то спросить, как решить проблему по-другому? Дальше, если это вас всё-таки не остановило - вспомните о такой штуке как транзакция - и выполняйте скрипт внутри неё, чтобы можно было потом изящным движением руки полностью откатить изменения. После изменения или удаления строк выполните SELECT и проверьте, что все ок, и только тогда закрывайте транзакцию. Для тех, кто в танке - транзакция открывается волшебной командой BEGIN; И откатывается с помощью ROLLBACK.
В-третьих, предположим, произошло худшее и вы накосячили. Не пытайтесь по-тихому всё исправить. Куча лихорадочных телодвижений, чтобы прикрыть листиками кучку, может только усугубить содеянное. Спросите более опытных коллег - они наверняка уже так косячили и знают, как с наименьшими потерями исправить ситуацию. Возможно, ничего особо страшного и не произошло и вы зря перепугались, возможно, решение есть, просто вы его не видите. Не торопитесь.
Часто ошибки происходят от того, что человеку банально лень разбираться с инструментом, который он использует. Так что если вы сейчас собираетесь выполнить команду в командной строке (извините за эвфемизм) - убедитесь, что вы понимаете, что эта команда делает и как работает - не удалит ли она нужный файл, не перезатрёт ли данные. Почитайте документацию - и только потом действуйте. На моей памяти юные падаваны ухитрялись даже удалить коммиты из git-а, потому что не стали затруднять себя чтением документации и не до конца понимали, что конкретно делает та или иная команда гита. Оказывается, даже гит - это опасно. Будьте аккуратнее с гитом. Не действуйте наугад. Мир технологий - это мир знаний и логики, а не Хогвартс, тут нужно разбираться, что и как работает.
💔1