Что делать, если вы плохой программист? [закрыто]

Что делать, если вы плохой программист?

Я 25-летняя женщина, которую только что уволили со второй работы по программированию за то, что я не смогла достаточно быстро совершенствоваться. Я сделал обычную карьеру, получил степень в области компьютерных наук за 4 года и сразу после колледжа устроился программистом в очень маленькую электротехническую фирму. Я проработал в этой компании 2,5 года, но мне было очень тяжело, и в конце концов меня уволили. Но я подумал про себя: «Ну, может быть, это просто не подходило мне! Я действительно чувствовал себя очень одиноким на этой работе! Я попробую еще раз в другом месте и попрошу принять более активное участие!»

Так что менее чем через месяц я получил еще одну работу программиста в гораздо более крупной компании, около 300-400 человек, и я определенно чувствовал себя менее одиноким. Но прошло всего 6 месяцев, и меня только что отпустили. Я ЗНАЮ, что я не такой быстрый, как другие программисты, но это не из-за отсутствия попыток. Просто мне требуется так много времени, чтобы понять проблему, по сравнению с другими людьми того же возраста/опыта. Я хорошо учился в школе. У меня средний балл 3,4, но я изо всех сил старался получить 3,4. Я бы никогда не получил средний балл 4.0. Кроме того, я занимался японским языком, поэтому у меня было несколько занятий по гуманитарным наукам, чтобы поднять свой средний балл. Было бы намного меньше, если бы я посещал только уроки программирования и математики.

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

И я думаю, что в определенной степени я сделал это на своих уроках программирования, не осознавая этого, потому что я отличный гуглер, отлично распознаю шаблоны и имитирую их, и отлично умею просить о помощи. Но в реальном мире вам не разрешается просить о большой помощи, потому что это отнимает время у других людей, выполняющих СВОЮ работу. Ожидается, что вы, по большей части, будете своим собственным маленьким островом и будете решать проблемы, и часто эти проблемы или их модели вообще отсутствуют в Google. Хотя иногда мне удавалось найти примеры в кодовой базе, с которой я работал, но это не всегда гарантировано. Я никогда не жульничал, чтобы получить степень, но учебник или Google очень хорошо давали примеры шаблонов. И проблемы никогда не были такими глубокими! "вот запрограммируй эту игру в шашки или шахматы"«Эй, мне нужно, чтобы вы изменили эту огромную базу кода очень специфическим образом и не ломали ничего, не зная, что делает что-либо еще!» И вы должны показать нам, что вы можете самостоятельно учиться и набирать скорость всего за 6 месяцев, потому что, честно говоря, мы позволим менеджеру обучать вас только в течение 3 месяцев, потому что эти проблемы должны быть легкими, потому что у всех остальных вашего возраста / опыта нет. проблема разобраться. (Это был Oracle SQL и веб-формы. И, на мой взгляд, это тоже не должно было быть сложно. Но я все еще боролся, хотя я организовал свою жизнь вокруг своей работы и ничего не делал, кроме как программировал, ел и спал последний месяц в попытке чтобы улучшить себя. Но я знал, что это все еще недостаточно быстро.)

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

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

У меня отличная память на языки, цитаты и всякие словесные вещи. Но я всегда чувствую себя компьютером с меньшим объемом жесткого диска, когда пытаюсь вспомнить ВСЕ, чему я научился в предыдущих проектах, и все советы/рекомендации по инструментам и языкам разработки. Когда дело доходит до программирования, я чувствую себя пациентом с болезнью Альцгеймера, потому что нужно помнить ТАК МНОГО. На самом деле я думаю, что запомнить весь иностранный язык с его грамматическими правилами гораздо проще, чем запомнить все, что нужно для программирования.

Могу ли я что-нибудь сделать со своей степенью информатики, если я недостаточно умен, чтобы стать программистом? Я спросил своего предыдущего работодателя, переведут ли меня на должность в сфере ИТ, но они сказали: «Нет, это совершенно другой набор навыков. Мы наняли тебя программистом. Так что привыкай или уходи».

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

Я не знаю, смогу ли я сделать что-то вроде бизнес-аналитика или нет, и смогу ли я вообще уговорить кого-нибудь позволить мне попробовать. Мои огромные проблемы связаны с анализом и пониманием больших объемов кода, который я не писал, и с поиском хорошего решения в разумные сроки. Когда я, наконец, понимаю, КАК решить проблему, код пишется довольно быстро. Хотя иногда я все еще могу запутаться в синтаксисе или структуре, я все еще медленный программист.

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

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

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

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

У меня отличный характер, и мне не трудно общаться с людьми, хотя я интроверт. Наверное, поэтому я провожу собеседования на «отлично», потому что многие программисты очень умны, но очень похожи на кротов и не имеют индивидуальности. Единственный случай, когда я плохо справляюсь с собеседованиями, — это если собеседование очень интенсивное по программированию и заставляет вас решать сложные проблемы на месте. Я могу говорить о технологиях и методах весь день. Но позвольте мне начать решать проблемы перед вами, и я определенно буду начальным уровнем или в лучшем случае средним. Но это всегда заставляет людей думать, что они могут улучшить меня! Они смотрят на это и думают: «О, у нее есть основы, ей просто нужно немного полировки и блеска, чтобы действительно летать!» Но его пробовали уже дважды, и я не мог достаточно быстро набрать скорость!

ОБНОВЛЕНИЕ: во время программирования я веду много-много заметок, пытаясь запомнить все, настройки, куски кода и т. д. А что касается работы над программированием вне работы, то я обычно так устаю от «ломки ума» весь день. что у меня не осталось никакой интеллектуальной энергии. В детстве я занимался программированием в качестве небольшого хобби с мыслью, что буду заниматься чем-то большим, если мне не нужно будет ходить в школу, поэтому я устроился на работу. Но теперь, когда я отдаю этому уже 40 или более часов в неделю, у меня нет никакого желания тратить на это лишние 10 часов! У меня есть посторонние интересы!

Я пока не знаю, что собираюсь делать, но приятно слышать ободряющие слова с обеих сторон забора мнений. Я очень хочу пойти и найти другую работу программиста, но боюсь, что со временем произойдет то же самое. Я бы не выдержал, и они бы избавились от меня. Я ненавижу постоянно искать, я хочу быть хорошим в работе, которую я делаю! Я всегда хорошо учился в школе. Я любил школу всем сердцем. Но до сих пор я всегда ненавидел рабочий мир, потому что я просто не могу соответствовать стандартам, которым должен соответствовать. Удовлетворенность работой отчасти зависит от того, что вы ХОРОШО выполняете свою работу.

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат . Пожалуйста, продолжайте обсуждение там, а не здесь.
Просто чтобы выбрать пару моментов из всего, что вы написали - просмотр кода других людей в рабочем проекте может быть очень и очень сложным - лично я нахожу это очень требовательным, намного сложнее, чем создавать что-то с нуля; вы можете обнаружить, что вы лучше в ситуации, когда вы можете начать с нуля. Кроме того, для многих типов проектов математика не имеет особого значения, так что не зацикливайтесь на этом.
Забывать что-то для разработчика программного обеспечения совершенно нормально. Вот почему вам постоянно нужно проверять себя, чтобы видеть, что вы забываете, и перерабатывать, заново изучая эти конкретные части. См. oxbridgenotes.com/articles/janki_method_refined .

Ответы (6)

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

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

Методы программирования

Я опишу некоторые приемы, которые использую при работе с новой кодовой базой:

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

«Хорошо, поэтому нажатие кнопки «Сохранить» запускает «SaveMethod», который получает информацию из формы, создает объект с использованием класса «UserInfo», затем вызывает метод «ValidateData» и передает объект...

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

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

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

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

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

Карьерный совет

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

Однако это не означает, что вы должны сдаться. Например, вы упомянули, что у вас был средний балл 3,4 — это неплохо! Думаешь, ты плохо учился по математике? Я не собираюсь заявлять, что ненавижу математику, но иногдакажется, что математика ненавидит меня . И все же я неплохо справляюсь в своей карьере. Кроме того, я также люблю языки и письмо. В детстве все были убеждены, что я стану журналистом или писателем; моя семья была потрясена , когда я пошел в инженерию.

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

Эй, ты заплатил деньги , чтобы быть здесь!

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

Я хотел бы отметить еще одну вещь: университет, хотя и отлично подходит для того, чтобы внушить вам огромное количество информации, часто не может научить вас практическим навыкам, которые вам нужны на рабочем месте. Я учился в университете, а затем в колледже, и разница в том, как они подходили к обучению, была днем ​​и ночью. Кроме того, ваша первая работа была в очень маленькой компании, где, вполне возможно, вы не были знакомы с отраслевыми стандартами, практиками и ожиданиями. Другими словами, возможно, это была не самая лучшая среда для начала вашей карьеры. Понятно, что вам нужно некоторое наставничество, однако работа на людей, которые не знают, что на самом деле влечет за собой ваша работа, с гораздо большей вероятностью приведет к приобретению вредных привычек и стагнации, чем к реальному профессиональному развитию. Вот тут-то и пригодится работа над учебными пособиями в свободное время.

Я начинал искать новую работу и, когда меня спрашивали, почему вас уволили, просто говорил, что и вы, и ваш работодатель поняли, что вы не вписываетесь в корпоративную культуру (или что-то в этом роде). Ты справишься с этим, если не потеряешь уверенность.

Твердый совет...
Хотел бы я быть хотя бы наполовину таким же хорошим, как вы пишете ответы. Примите мой голос, это в основном то, что я пытался сказать. Мне очень понравилось читать этот ответ
@JustDoIt - спасибо! Я всегда любил читать, и это помогло мне развить навыки письменного общения. Я также рассматриваю написание ответов как логическую организацию идей на бумаге таким образом, чтобы они хорошо излагались, поэтому я как бы обдумываю свои пункты, составляю мысленную блок-схему того, что я хочу выразить, и иду дальше.
Я довольно красноречив на своем родном языке, но я всегда плохо писал по-английски, но мне нравится такой подход, я попробую
Even most senior developers I've met agree that without Google their lives would be a lot more miserable.Определенно. Программирования и различных способов сделать что-то настолько пугающе много, что ни один человек в мире не может вспомнить все вещи, не проверив хоть что-то. Не потому, что они плохие программисты. ОП, кажется, сначала спрашивает своих коллег, прежде чем искать в Интернете - я думаю, что это проблема менеджера.

Я не знаю, смогу ли я сделать что-то вроде бизнес-аналитика или нет, и смогу ли я вообще уговорить кого-нибудь позволить мне попробовать. Мои огромные проблемы связаны с анализом и пониманием больших объемов кода, который я не писал, и с поиском хорошего решения в разумные сроки. Когда я, наконец, понимаю, КАК решить проблему, код пишется довольно быстро. Хотя иногда я все еще могу запутаться в синтаксисе или структуре, я все еще медленный программист.

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

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

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

Много раз обсуждалось на программистах.SE: Как эффективнее добавить функционал в незнакомый структурно код и т.д.

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

Да, я тоже так думал, поэтому удалил свой комментарий. Голосование за то, что это нормальная часть программирования (что так и есть)
@Kilisi И я могу помочь любому, кто начал программировать ради кодирования, прежде чем у них появилось четкое понимание проблемы и четкий план игры.
@Paparazzi Так бы и я, просто сроки, чтобы придумать план, о котором я стонал (несправедливо). Я часто забываю, насколько сложными могут быть некоторые проблемы :-) Ребята, которые делают мои вещи, имеют 20 или 30% солидного опыта, поэтому они сделать вещи выглядят очень легко.
Еще один голос за «вот что такое программирование». Я думаю, что одним из самых экстремальных примеров, которые я могу вспомнить, был коллега, который потратил 3 или 4 месяца на оценку кодовой базы, пытаясь выяснить какое-то странное поведение. Конечным решением стало перемещение одной строки кода на несколько строк ниже. Бывает. Однако даже при разработке нового кода я, как правило, трачу гораздо больше времени на размышления, рисование диаграмм, заметки и т. д. о том, как должна быть спроектирована система, чем на написание кода. Бывают дни, когда я вообще не пишу код. Добро пожаловать в инженерию.
@Kilisi Я добавил правку, которая делает этот ответ немного более честным, что может вас заинтересовать.
Я люблю IDE, когда они доступны. В колледже мне нравилось программировать на Java, потому что мне помогала IDE. Но SQR и множество менее популярных языков не поставляются с IDE, и никто в моей прошлой компании не использовал их. Они просто использовали vi и собственные мозги, ничего больше.
@ Arwen17 bcstools.com это работает? Просто погуглил "sqr ide"

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

НО

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

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

Получение степени не является оправданием для того, чтобы прекратить учиться/учиться, у меня на работе есть 2 ноутбука с примечаниями по SQL, C#, сетям, программному обеспечению ERP, которое мы используем, и многому другому. Почему? Потому что всякий раз, когда я чувствую, что что-то забыл, я могу просто вернуться к своей записной книжке и посмотреть, что я пропустил. И нет ничего постыдного в том, чтобы иметь свои тетради, чтобы записывать вещи.

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

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

Мне нравится идея с блокнотом, я сам пользуюсь текстовыми документами, но в старые времена я носил с собой блокнот.
У меня есть текстовые документы и несколько заметок (приложение), но по какой-то причине их запись облегчает запоминание.
@JustDoIt Лично я согласен с тем, что почерк может облегчить запоминание, а также значительно упрощает запись диаграмм и тому подобного, а также математику. Тем не менее, почерк не обязательно должен исключать заметки на компьютере. Я обнаружил, что сохранение заметок в OneNote на моем Surface Pro работает очень хорошо (и, конечно, в настоящее время существует множество подобных приложений и устройств, это только то, что я использую). Благодаря этому вы получаете преимущества рукописного ввода, а также преимущества облачного резервного копирования и доступа практически с любого устройства.
+1 за упоминание OneNote. Идеальный инструмент для такого рода заметок.

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

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

Помимо этого, есть и другие позиции, которые используют опыт CS. Одним из них являются «разработчики-евангелисты», «инженеры по продажам» и другие вещи, где вы будете наняты Компанией А и будете использоваться для помощи их клиентам/потенциальным клиентам (Компания Б, Компания С, Компания D) внедрить их технологию. Если вам нравятся люди, это отличный карьерный путь.

+1, особенно за последний абзац. Есть много вакансий разработчиков-евангелистов и инженеров по продажам. Эти должности также могут подойти вам, если вы любите путешествовать, поскольку многие инженеры по продажам часто навещают своих клиентов. Конечно, есть много других вещей, не связанных с программированием или минимальным программированием, которые вы можете делать со степенью CompSci, например, управление серверной/ИТ-инфраструктурой. И, конечно же, всегда есть теоретическая компьютерная наука, хотя она, вероятно, не подходит, если вы не любите математику.

Мой опыт показывает, что то, что вам говорят, когда вас увольняют, бессмысленно, и это возможно, основываясь на том, что вы сказали, что в настоящее время у вас еще нет ПОЛЕЗНЫХ данных о том, «хороший ли вы программист». Вот мой ответ на вопрос, как получить эти данные: работайте в компании с другим управлением . Вот несколько вещей, которые я хотел бы найти / мой опыт того, что я считаю эффективным в компании-разработчике программного обеспечения, но сначала небольшое отступление:

Любой менеджер, который увольняет вас через 6 месяцев без какой-либо существенной обратной связи (за исключением чего-то вопиющего, например, сексуальных домогательств), почти наверняка некомпетентен. Почему? Потому что в среднем требуется более 1 месяца , чтобы найти кого-то в первую очередь, и это включает в себя более 30 интервью, и я слышал, что это стоит более 10 тысяч долларов. Представьте себе, что вы наняли свадебного организатора, который провел собеседование с 30 поставщиками, потратил 10 тысяч долларов, а затем сказал, что им нечего показать. Кроме того, вы, возможно, слышали, что большинство компаний платят, по моим оценкам, вдвое больше, чтобы попытаться привлечь женщин, чтобы они могли претендовать на разнообразие (и не попасть под иск).

Но вернемся к тому, что я искал:

  • В первый день вы должны быть в состоянии создавать, запускать тесты и вносить тривиальные изменения в любом месте кода примерно за 1 час. Например, в моей текущей компании у нас есть десятки микросервисов, SQL DB, NOSQ DB, конвейер больших данных (Kafka/Storm) и т. д., но мы все автоматизировали, так что вы получаете каждую настройку локально менее чем за час. Что я видел, так это то, что в некоторых компаниях/проектах на это уходят недели, а в некоторых случаях вы даже не можете запустить все локально, что очень затрудняет понимание.

  • В первый день кто-то должен объяснить вам, как все работает, примерно за 15 минут. Теперь им, возможно, придется использовать большие (незнакомые) концепции, но все должно сводиться к чему-то вроде «У нас есть конвейер данных в реальном времени, который принимает 1 млн событий/с из нашей очереди MQTT с использованием Kafka/Storm по одной теме, и у нас есть дюжина Storm». болты, которые вставляют эти данные в Cassandra и выполняют некоторую базовую аналитику для обработки ошибок». Другим примером может быть что-то вроде «мы вставляем 100 тысяч записей в день в нашу базу данных SQL, используя 10 различных форм, а затем выполняем около 100 различных запросов к этим данным, что приводит к 200 представлениям. Мы представляем данные с помощью React/Flux для реализации MVVM на клиент и использовать веб-сервисы REST с шаблоном репозитория CRUD + ORM на серверной части».

  • В первую неделю вам должны дать исправить ошибку (или, может быть, написать тест), который занимает менее 1 дня (это фактически относится ко всем задачам в некотором понимании SCRUM ). Если это займет больше времени, чем кто-то встретится с вами, чтобы объяснить вещи и работать с вами. Обычно я хотел бы, чтобы кто-то выполнил 30-60 индивидуальных заданий (под наблюдением), прежде чем я объявлю его некомпетентным.

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

Я согласен с первыми абзацами, но не столько с вашими пунктами списка - они довольно субъективны (хотя третий вполне разумен). Например, я не считаю, что возможность написать тест или внести изменение за час ни о чем не говорит. Это действительно зависит от проекта и т. д. Точно так же возможность выразить, как работает система (на очень высоком уровне) за 15 минут, не обязательно поможет этому человеку понять кодовую базу.
«В первый день кто-то должен объяснить вам, как все работает, примерно за 15 минут». Это будет сильно различаться в зависимости от проблемной области. Там, где я работаю, простое объяснение проблемной области до такой степени, что новый инженер-программист понимает проблему, которую он должен решать, занимает недели, даже для очень опытных инженеров-программистов.
@AndreiROM - я понимаю твою точку зрения. Мой основной акцент заключается в том, что похоже, что эта команда плохо управляется, и поэтому обратная связь не имеет большого значения. Моя точка зрения по поводу системы заключается в том, что многие компании плохо разбираются в системе, что указывает на неэффективность команды. Я согласен с тем, что обратное не обязательно верно, но я больше пытаюсь сделать общий вывод.
@reirab - По моему опыту, 90% проблемных доменов можно объяснить за 15 минут, так что я исхожу из этого. Если бы вопрос был более конкретным, например, «почему я плохо пишу код ядра», я бы этого не сказал.
@Charlie - я думаю, что ОП была нанята в очень непринужденную компанию, которая не знала, как ее обучить, когда она только вышла из школы, и это привело к тому, что у нее сформировались плохие привычки. Затем она перешла в магазин программного обеспечения, который возлагал на нее очень большие надежды, и ее, вероятно, уволили по окончании испытательного срока, потому что это намного проще, чем избавиться от нее после того, как она станет штатным сотрудником. Это плохой менеджмент? Может быть. Но я думаю, что есть небольшая вина с обеих сторон. Тем не менее, ОП, вероятно, сможет вытащить свою карьеру из огня.
@Charlie Судя по вашему ответу, вы в основном участвовали в приложениях типа LOB. Я согласен с тем, что им обычно можно довольно быстро объяснить домен, особенно тем, кто раньше делал много вещей типа LOB. Однако ОП упомянула, что она работала в инженерной компании (как и я). В этих случаях проблемные области, как правило, намного сложнее и часто довольно специфичны. Например, я работал на аэродинамическом испытательном стенде. Излишне говорить, что вы не выучите аэродинамику за 15 минут.
Вы делаете огромные обобщения здесь. Вы не можете экстраполировать весь мир кодирования из одной или двух знакомых вам установок.

Прежде всего, я полностью согласен с ответом Just Do It, что попытка продолжить обучение в свободное время может быть чрезвычайно полезной для вас. Довольно много знаний, которыми я обладал до того, как начал работать, было получено в результате работы над вещами в свое время, и я обнаружил, что это верно для большинства лучших инженеров, которых я знаю. Знания, которые вы получаете в области компьютерных наук, чрезвычайно ценны и для некоторых вакансий по разработке программного обеспечения почти незаменимы, но их самих по себе не всегда достаточно .

Вот некоторые вещи, которые вы можете попробовать на этом фронте:

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

  2. Прочитайте несколько книг по соответствующим языкам программирования, API, передовым методам и т. д. Эти книги также могут быть полезными ссылками позже, когда вы пытаетесь вспомнить, как что-то делать.

  3. Пройдите несколько бесплатных онлайн-курсов. Пока вы находитесь между работами, это особенно прекрасное время для этого. Многие университеты сейчас предлагают бесплатные онлайн-версии некоторых своих курсов. Вы не получаете кредит на степень от этого, но вы получаете знания и практику. Вы можете найти курсы по всему: от введения в программирование до введения в новые языки и курсов компьютерных наук продвинутого уровня. Поскольку вы упомянули, что работали в инженерной среде, если вы хотите остаться в такой среде, возможно, вам также стоит пройти несколько вводных курсов, относящихся к типам проблемных областей, с которыми вы хотите работать. Например, я в основном занимаюсь разработкой встраиваемых систем, поэтому в этой должности было бы полезно пройти онлайн-курс по схемам EE. Курсераи edX — две организации, через которые крупные университеты предлагают такие бесплатные курсы.

  4. Это похоже на № 1, но заслуживает отдельного пункта: вносить вклад в проекты с открытым исходным кодом. Опять же, это отличный способ повысить свой опыт в перерывах между работами, но он также полезен для расширения и/или углубления ваших знаний и опыта в области разработки, даже когда вы работаете. Это дает вам больше опыта работы с существующей кодовой базой и работы в команде, чем самостоятельная работа. Кроме того, значительный вклад в проект — это то, на что вы можете указать в своем резюме/резюме и/или на собеседовании (и предоставить ссылки в качестве примера своей работы).


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

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

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