7 выводов программиста самоучки за 1 год

Я тут когда-то обещал, что буду делиться своими профессиональными достижениями. Что ж. Через неделю будет ровно год как я работаю web software разработчиком в своей второй компании, и я хотел бы поделиться своими наблюдениями — возможно кому-то они покажутся забавными и надеюсь даже познавательными. Сразу скажу, что тезисы будут общими и не относятся к какому-то конкретному месту или ситуации. Итак.

Понедельник


Самоучкой программистом быть можно. Тех, кто говорит вам, что сам ничему не научишься, а нужно образование… игнорируйте. Будь вы хоть художником по образованию — программистом можно научиться быть самостоятельно. Я скажу Вам больше. Я считаю, что программисту ЛУЧШЕ быть самоучкой. Почему спросите Вы? Потому что в этой из ряда вон выходящей профессии нужно самосовершенствоваться каждый день хотя бы час-полтора, а лучше всю ночь. Дело в том, что наука программирования постоянно развивается и итерируется, а значит старые методы мы смело забываем и осваиваем новые. Поэтому если вы думаете, что, получив 5 лет образования можно будет всю жизнь пожинать плоды — нет. Нельзя и не будет.

Вторник


Есть лишь один тип людей, которым я завидую белой завистью — прикладные математики. Но вернувшись к первому пункту я решил, что учить математику самостоятельно не только интересно, но и зашибись как полезно. Начав с дискретной математики обнаружил удивительную вещь — если не только учить, но еще и напрягать мозг над интересными задачками он О ЧУДО начинает соображать в разы быстрее. Как где-то было написано, если ты любишь, то что делаешь, рано или поздно ты попадаешь в поток и то, что ты делаешь становится очень простым и интуитивно понятным. Тебе. Хотя год назад ты был бы в ужасе при виде всего этого. Но легкость — это следующий барьер.

Среда


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

Четверг


Когда я только начинал, я думал, что меня будут учить. Я думал задавать вопросы нормально. А мои учителя бурчали и отнекивались. И тогда я понял одну очень важную вещь в работе программиста-джуна: не задавай вопросы коллеге. Задавай их гуглу. У человека нужно черпать опыт ненавязчиво, в беседе, когда вы в рабочем кругу что-либо обсуждаете. Но когда вопрос прямой, да к тому же касается решения вашей задачи… гугл действительно лучший собеседник. К тому же если вы еще не поняли люди в наше время получили самую большую суперсилу. Вдумайтесь. Вам стоит только задать вопрос, и ответ лежит у вас перед глазами на мониторной плоскости. Синк эбаут зис, гайс.

Пятница


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

Суббота


Читайте признанные книги, учите паттерны и хотя бы старайтесь работать по ним. Если коллега рассказывает о чем-то, а вы ловите себя на мысли что не знаете этого… поздравляю! Это значит, что вечером мы с задором маньяка сядем гуглить о чем он говорил и в следующий раз ситуаций где вы почувствуете себя дебилом будет на одну меньше. Общайтесь с коллегами. Шутите, спорьте. Самый жирный плюс работы офисного программиста — это та самая коммуникация, которой навсегда лишен фрилаенсер.

Воскресенье


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

Да. Год прошел не зря. В этот раз я явно не ошибся с выбором профессии. В замечательном настроении. Фух. Отдохнул. Время снова браться за математику.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 228
  • +18
    Дело в том, что наука программирования постоянно развивается и итерируется, а значит старые методы мы смело забываем и осваиваем новые.

    Имхо лучше поизучать написанное давным давно Фаулером, Макконнеллом, бандой четырех и писать нормальный код чем говнокодить в соответствии с новыми веяниями.
    • +10
      Да, по статье видно, что автор пишет о том, в чём разбирается, мягко говоря, поверхностно.
      • +4

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

        • +1
          Учиться самостоятельно, если умеешь это делать (системный подход!),
          это эффективно и хорошо.

          Но!
          Учитель может научить тебя в 10 раз быстрее, тем самым экономя твое время и позволяя узнать много больше. Проблема в том, что такого учителя найти не просто. Особенно для современных технологиях. А так, чтобы в российском ВУЗе почти все учителя были такие — ну это фантастика! В итоге, обучение в ВУЗе может даже замедлить развитие (суммарно).

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

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

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

            • +1
              Так все и делают. Я это наблюдаю. Студенты уже кладут болт на многие «неинтересные» занятия и смотрят coursera и edx. Собственно, айтишников-студентов российские вузы уже потеряли, они учатся у других людей.
              • 0

                То есть по сути, студенты к предметам наших ВУЗов добирают предметы ВУЗов зарубежных. Удивительно и прискорбно.

                • 0
                  На курсере достаточно и курсов наших вузов — www.coursera.org/about/partners/ru
                  Слышал вполне позитивные отзывы о качестве.
                  • 0
                    Это скорее хорошо. Плохо другое, что есть области в которых мы были лидерами, и есть результаты наших ученых, которые сейчас переоткрываются западными (это вообще общая проблема, характерна не только для России), а преподавателей, которые бы этому качественно научили бы — нет. Преемственность знаний давно потеряна. И вот когда студент слушает иностранные курсы, овладевает методами, которые являются просто частным случаем более общих методов, носящих имя наших ученых, но студент их не знает. Вот это действительно прискорбно.
              • +1
                Учитель может научить тебя в 10 раз быстрее

                Согласен. Я взял парнишку на обучение. Бесплатно, просто для души. Решил сразу дать ему нормальную базу и развить кругозор. Он у меня два месяца на Линуксе пилил кластера MySQL, размечал диски (включая LVM и DRBD) и настраивал веб-сервера, сервера мониторинга. Линукс знает теперь как свои пять пальцев.

                Потом надрессировал его на Питоне, подробно критикуя каждую строчку. Удостоверялся, что он точно понимает, что я ему объясняю. Причем, давал самые разноплановые задачи, включая 0MQ, PyQT, ncurses… И заставлял писать тесты. И деплоил он все сам себе сначала на Vagrant-->VirtualBox, а теперь уже на Docker.
                На это ушло всего лишь три месяца.
                Сейчас он проходит свои первые собеседования. Каждое собеседование с каким-нибудь заданием. Я заставляю его делать все, что ему дают на любом собеседовании. Вон, последнее пришло вообще на PHP (YII) + swagger — сидит, пилит как миленький. Это еще одна мысль, к которой я его приучаю: программист пишет на чем подходит, а не на чем умеет.

                Вот уж не думаю, что за столько короткий срок самоучка может получить такой кругозор и обширный набор знаний. Причем плотно утрамбованных знаний.
                • 0
                  Вспомнился старый рассказ (или книга, не помню) под названием «Настоящие программисты не используют Паскаль». Там описывалась в одном месте похожая ситуация с новичком, и то, как он обрадовался, когда ему дали в конце концов учебник ))
                  Плюсую за энтузиазм и бескорыстие.
                  • 0
                    Спасибо. Сейчас загуглю, что за рассказ такой. Не читал еще.
              • +8
                Видимо у всех разный опыт.
                За пару лет в вузе, на большинстве дисциплин я только и делал, что собирал треугольные колеса.
                Более того, попытки возразить, что колеса бывают и круглыми, или, о боже, собрать велосипед с ними — приводят к санкциям со стороны преподавательского состава.

                Не собираюсь делать излишних обобщений, поэтому уточню, что примерно 10% преподавателей демонстрировали другой подход и что речь идет только о СПБГЭТУ (ЛЭТИ).

                PS
                На правах ИМХО: для расширения личного кругозора, как ни странно, лучше всего делать что-то самому. Читать статьи на незнакомые темы, проходить курсы, которых навалом вокруг, общаться с людьми на профильных ресурсах или IRL, etc.
                Потому что без этого(что с вузом, что без вузa) кругозор расширяется весьма неохотно.
                • +2
                  Привет коллеге по ЛЭТИ. Хотя я поступил туда в далеком 1981, но мой опыт обучения там во многом совпадает с Вашим. Большей частью знаний, что я получил за студенческие годы, я обязан ЛЭТИшной лаборатории Спортивной Радиоэлектроники, работу в которой я совмещал с учебой. От тех же людей, которые ведут занятия со студентами, при совместной работе с ними, узнаешь гораздо больше.
                • 0
                  На самом деле очень сложный вопрос, чтобы с места в карьер выдавать резюме без какого либо исследования, плюс по таким упрощённым категориям, как самоучка vs окончил ВУЗ
              • 0
                Новые веяния — это упрощение задач новыми инструментами. Вот вам мнение Эдсгера Дейкстры: «программирование в сути своей — чрезвычайно сложная научная и инженерная деятельность, и никакие новые методы и инструменты не смогут кардинально изменить это положение — они лишь освобождают программиста от части рутинной работы».
              • 0
                я так и не понял почему самоучкой быть лучше, если вы потом просто в свободное время учите все сами. при этом тратится время на подбор материала и фильтрацию. В то время как в универе уже есть программы и учителя.
                • +2
                  Применительно к вэбдеву, я не слышал про адекватное профильное образование с современными программами. Я не спорю, что базис нужен и по тем же паттернам можно найти нормальный курс. Но современный вэбдев слишком быстро развивается и слишком многообразен, уж для классических ВУЗов то точно.
                  • +2
                    А что веб-дев? То, что называется «современным вебом» — это набор API и языков, ничего концептуального, чего в вузике не расскажут, там нет. В принципе высшее образование не про то.
                    • 0
                      Ну вот только теорию и расскажут. А кулаки набить не на чем там.
                      • +1
                        Эй! Да я в далеком 2000 набивал кулаки на PHP+MySQL, хотя этого в универе даже в планах не было. Да и вообще о веб-разработке тогда в универе даже не говорили.
                        Универ дает вам базу, а для практики есть… летняя практика.
                        • 0
                          Кто-то связывает студенту руки? Бери, да практикуйся. По своему опыту могу сказать, что адекватные преподаватели всегда приветствуют инициативу.
                          • –1
                            Нет, студентам никто руки не связывает. Но при чем тут тогда «вузик»?
                            • 0
                              Вузик даёт то, что не даёт практика.
                              Практика даёт то, что не даёт вузик.
                      • 0
                        В современном вебдеве не появилось ни одной новой вещи за последние 20 лет (ну то есть за всё то время, что он существует). Всё, что есть — это теория прошлого века.

                        Человек с профильной («профильной» — имеется в виду «програмистской») базой не испытывает никаких проблем с так называемым «быстрым развитием», он просто смотрит на что-то «новое», и вспоминает, что это уже было в common lisp в 1995 году, ну или там у Танненбаума в книжке примерно в то же время. Не суть важно, в какой именно теории это всё раскрыто было давным давно, главное, что оно было раскрыто, и осталось в голове в виде теоретической базы.

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

                        ВУЗ даёт именно базу.

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

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

                        ВУЗ принципиально не может дать промышленной практики. А промышленная практика принципиально не может дать теории, базы. Поэтому для хорошего программиста нужно и то, и другое.
                      • +1
                        В то время как в универе уже есть программы и учителя.
                        Это где вы видели нормальные программы и учителей?
                        • –1
                          Да, о последних тенденциях в вузах не рассказывают
                          Но если вуз нормальный там можно получить вполне хорошую базу
                          Для веб разработчика, как минимум, это — протоколы, работа браузера, основы баз данных

                          • 0
                            Которые гораздо легче и дешевле изучить самому.
                            • +2

                              Ага, а потом такой вот самоучка не понимает, с какого перепуга его бизнес-логика работает неадекватно. А просто он не слышал о разнице между средним арифметическим и медианой (пример из жизни). Он ведь вебдев учил, а не основы статистики. Или почему его SQL-запросы ставят базу колом (видимо движок плохой, надо срочно модный nosql какой-нибудь всунуть, про который на форумах пишут — вот где мощь-то будет!). Он ведь вебдев учил, а не комбинаторику. Зато легко и дешево, нахватался азов за пару месяцев и смеется над дураками, 6 лет штаны просиживающих.

                              • +3
                                И говорит — «Нужно больше серверов!» (случай из жизни)
                                • +2
                                  А тут уже считать бабки надо. Может там оптимизация за 10 тыщ баксов, которая сможет сэкономить на серверах на 50 баксов в мес. А может и наоборот.
                                  • 0
                                    В том случае было хранение числа (которое использовался как индекс) в текстовом поле б.д. без индекса. Поиск по нему тормозил.
                                    Но при этом человек, который это делал, был весьма неплохим креативщиком, много чего мог сделать (и делал) в вебе, т.е. такой самый грустный случай человека без профильного образования.
                                    • +1

                                      Это не про профильное образование, а про математиков vs креативщиков.
                                      Креативщики в типы данных могут только если заставить.

                                      • 0
                                        Интересно что за база была. В postgres — очень далеко не факт, что индекс ускорит поиск.

                                        База(postgres) запросто может предпочитать sec scan даже если индекс есть и индекс только замедляет поиск, вставку и обновление в ряде случаев. Тут, конечно, у каждой базы множество своих особенностей.

                                        Тормоза это ещё ладно, веселей когда фин данные пишут в double или float
                                        • 0
                                          А в какой тип данных писать фин. данные?
                                          • +1

                                            money
                                            :-)

                                            • +1
                                              Double и float может быть проблемным с т.з. округления. Когда вы отбрасываете несколько цифр в расстоянии до Солнца — это норм, но когда вы округлите хотя бы на 1 копейку/цент счет, то есть шанс что вас знатно вы*бут бухи, налоговики и пр. им сочувствующие. Поэтому если у вас нет специального типа или структуры, то только целые числа.
                                              • 0
                                                фин данные — они очень уж разные. Вы сейчас о конкретно виде — accounting/money. А вот там всякие расчеты кривых доходностей — там бывает иногда и вышка, и числа вещественные и т.п.
                                              • 0
                                                Забыл обновить комменты
                                      • 0
                                        Забавно, но видел обратное — профильные программисты (благо хоть из головных региональных ВУЗов, а не из топовых в РФ) не знали что такое медиана, корячились со средним арифметическим, потом не знали как его вычислить, потом не могли найти середину у списка через SQL. Может постсоветская версия ВУЗов и выпускала ещё по инерции спецов, сейчас я в цирке уже смеяться не буду от того, что видел.

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

                                        p.s.
                                        Как по мне, так начинать учить надо ещё в школе на основе собственного интереса, а не по программе обучения.
                                        • 0
                                          Или почему его SQL-запросы ставят базу колом

                                          Решается обычной практикой.
                                          • 0
                                            Кстати, меня оень расстраивает, что комбинаторику не начинали преподвать в шолах. Все же начинается там с простого сложения и умножения. Может быть в математических школах преподают сейчас, но в обычных, нам давали задачи из комбинаторики, маркируя их звездочкой, факультативно, например посчитать то же кол-во слов в языке с 5-буквенным алфавитом, но не объясняли как такие задачи решать и почему.
                                            • 0
                                              У нас в более или менее среднестатистическом ФМЛ в 8-9 классах был предмет «логика», куда собрали всю математику, которая не уместилась в традиционные алгебру-геометрию. Там были основы и комбинаторики, и теории вероятностей, и дискретки, и много чего еще.
                                            • 0
                                              Могу проиллюстрировать ваш тезис конкретным примером. Предположим, перед пэхапэшником встаёт задача: «закодировать бинарные данные в base32».
                                              Что делает погромист, академиев не кончавший? Гуглит определение base32 — «данные разбиваются на блоки по пять битов, каждый блок кодируется одним символом» — и кодит какой-то кошмар вокруг decbin(ord($string[i])), разбиения строки $binval блоками по пять символов, и потом bindec(substr($binval)). Потребление памяти как минимум восьмикратное, а возня со строками настолько неэффективная, что волосы встают дыбом.
                                              Но на SO это топовый заплюсованный ответ, ещё и с чьим-то комментарием «This is the only correct answer.»
                                              Более того, такие пэхапэ-самоучки облекают свой код в библиотеки [1] [2], которые потом другие программисты на SO советуют [1] [2], не заглядывая внутрь кода. Нуачо, всё работает же!
                                              • 0

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

                                            • 0
                                              Нет. Самому это всё изучать сложнее и дороже. У меня нет высшего образования, код я пишу с 1991 года, на то, чтобы получить базу, которая даётся в ВУЗе (хорошем), мне понадобилось лет 12 где-то. Это больше чем в два раза больше, чем тратится времени в ВУЗе.
                                            • +2
                                              А что имеется в виду под базой?

                                              Проведём маленький эксперимент, если Вы не против — мне любопытно чего такого я не знаю на фундаментальном уровне, из того, что преподают в ВУЗах в качестве базы
                                              • +12
                                                > Проведём маленький эксперимент, если Вы не против — мне любопытно чего такого я не знаю на фундаментальном уровне, из того, что преподают в ВУЗах в качестве базы.

                                                Ну я вот писал программу по нескольким курсам, один из основных — «Алгоритмы и структуры данных», вот база (не все, особенно и последнего семестра, нужно знать и доказывать, но основные свойства полезно знать).

                                                Вот примерный список, я надеюсь, он после обкатки скорректируется. Общий объем 225 часов (чисто лекции, практика Python-C-C++ идет отдельными часами).

                                                Поиск в массиве
                                                1.1 Линейный поиск
                                                1.2 Двоичный поиск
                                                1.3 Троичный поиск
                                                1.4 Интерполяционный поиск
                                                Структуры данных
                                                1.5 Массив
                                                1.6 Стек
                                                1.7 Очередь, двусторонняя очередь
                                                1.8 Словарь
                                                1.9 Хеш-таблица

                                                Сортировки, анализ алгоритмов
                                                2.1 Bubble sort (пузырьковая сортировка)
                                                2.2 Merge sort (сортировка слиянием)
                                                2.3 Quick sort (быстрая сортировка)
                                                2.4 Bucket sort (блочная сортировка)
                                                2.5 Heap sort (пирамидальная сортировка)
                                                2.6 Insertion sort (сортировка вставками)
                                                2.7 Counting sort (сортировка подсчетом)
                                                2.8 Radix sort (порязрядная сортировка)
                                                2.9 Timsort и другие гибридные алгоритмы сортировки

                                                Рекурсия, математическая индукция
                                                3.1 Хвостовая рекурсия
                                                3.2 Обратная польская запись
                                                3.3 Числа Каталана
                                                3.4 Вычисление биномиальных коэффициентов
                                                3.5 Метод градиентного спуска
                                                3.6 Метод сопряженных градиентов
                                                3.7 Принцип динамического программирования
                                                3.8 Метод ветвей и границ
                                                3.9 Методы Gradient boosting
                                                3.10 Алгоритм Кадана
                                                3.11 Поиск методом золотого сечения
                                                3.12 Производящие функции
                                                3.13 Запаздывающие генераторы Фибоначчи
                                                3.14 Memoization
                                                3.15 Корекурсия
                                                3.16 Задача 3-SAT
                                                3.17 Алгоритм фрактального сжатия
                                                Структуры данных (рекурсивные)
                                                3.18 Список
                                                3.19 Дерево
                                                3.20 Граф

                                                Строки
                                                4.1 Z-функция
                                                4.2 Алгоритм Кнута-Морриса-Пратта
                                                4.3 Алгоритм Ахо-Корасик
                                                4.4 Алгоритм Бойера-Мура
                                                4.5 Алгоритм Бойера-Мура-Хорспула
                                                4.6 Сходство Джаро-Винклера
                                                4.7 Расстояние Левенштейна, алгоритм Укконена
                                                4.8 Расстояние Дамерау-Левенштейна
                                                4.9 Алгоритм Карпа-Миллера-Розенберга
                                                4.10 Алгоритм Каркайнена-Сандерса
                                                4.11 Алгоритм Арикавы-Аримуты-Касаи-Ли-Парка
                                                4.12 Алгоритм Ву-Менбера
                                                4.13 Алгоритм Ландау-Вишкена
                                                4.14 Алгоритм Майерса
                                                Структуры
                                                4.15 Префиксное дерево
                                                4.16 Суффиксный массив
                                                4.17 Суффиксное дерево

                                                Порядковые статистики, потоковые алгоритмы
                                                5.1 Алгоритм BFPRT
                                                5.2 Алгоритм Манро-Патерсона
                                                5.3 Алгоритм Канна-Гринвальда
                                                5.4 Алгоритм большинства голосов Бойера-Мура
                                                5.5 Алгоритм Lossy Count

                                                Деревья
                                                6.1 Эйлеров обход дерева, DFS, BFS
                                                6.2 Двоичное дерево поиска
                                                6.3 Декартово дерево
                                                6.4 Красно-черное дерево
                                                6.5 АВЛ-дерево, дерево Фибоначчи
                                                6.6 Splay tree (расширяющееся дерево)
                                                6.7 B, B+, B* дерево, 2-3 дерево
                                                6.8 PQ-дерево
                                                6.9 Дерево отрезков
                                                6.10 Дерево Фенвика
                                                6.11 Алгоритм двоичного подъема (задача LCA)
                                                6.12 Алгоритм Фарах-Колтона и Бендера (RMQ, LCA)
                                                6.13 Sqrt-декомпозиция
                                                6.14 Центроидная декомпозиция
                                                6.15 Heavy-light декомпозиция
                                                6.16 Фибоначчиева куча
                                                6.17 Куча, 2-3 куча
                                                6.18 Очередь с приоритетами
                                                6.19 Множество
                                                6.20 Система непересекающихся множеств
                                                6.21 Лес непересекающихся множеств
                                                6.20 Ассоциативный массив

                                                Графы
                                                7.1 Обход в ширину (BFS)
                                                7.2 Обход в глубину (DFS)
                                                7.3 Топологическая сортировка
                                                7.4 Алгоритм Munagala-Ranade
                                                7.5 Алгоритм Mehlhorn-Meyer
                                                7.6 Задача о динамической связности
                                                7.7 Алгоритм поиска точек сочленения графа
                                                7.8 Алгоритм поиска мостов графа
                                                7.9 Алгоритм Косараю
                                                7.10 Алгоритм Тарьяна
                                                7.11 Задача 2-SAT
                                                7.11 Алгоритм Брона-Кербоша
                                                7.12 Конденсация графа
                                                7.13 Раскраска графа
                                                7.14 Задача о назначениях
                                                7.15 Венгерский алгоритм
                                                7.16 Алгоритм Ульмана
                                                Структуры
                                                7.17 Матрица смежности
                                                7.18 Матрица достижимости
                                                7.19 Матрица сильной связности
                                                7.20 Матрица Лапласа
                                                7.21 Матрица Инцидентности
                                                7.22 Список смежности
                                                7.23 Список ребер

                                                Графы: циклы
                                                8.1 Алгоритм поиска Эйлерова цикла
                                                8.2 Алгоритм поиска Эйлерова пути
                                                8.3 Алгоритм поиска Гамильтонова цикла
                                                8.3 Алгоритм поиска Гамильтонова пути
                                                8.4 Задача Коммивояжера

                                                Графы: остовное дерево
                                                9.1 Теорема Кирхгофа
                                                9.2 Теорема Кэли о числе деревьев, код Прюфера
                                                9.3 Лемма о безопасном (минимальном) ребре
                                                9.4 Алгоритм Краскала
                                                9.5 Алгоритм Примы
                                                9.6 Алгоритм Борувки
                                                9.7 Задача устранения петель в сети Ethernet (STP)
                                                9.8 Задача Штейнера

                                                Графы: кратчайший путь
                                                10.1 Алгоритм Дейкстры
                                                10.2 Алгоритм Best-First
                                                10.3 Алгоритм A*
                                                10.4 Алгоритм Левита
                                                10.5 Алгоритм Беллмана-Форда
                                                10.6 Алгоритм Флойда-Уоршелла
                                                10.7 Алгоритм ALT
                                                10.8 Алгоритм Reach-based pruning

                                                Графы: потоки в сетях
                                                11.1 Алгоритм Форда-Фалкерсона
                                                11.2 Алгоритм Эдмонса-Карпа (алгоритм Диница)
                                                11.3 Алгоритм поиска потока минимальной стоимости
                                                11.4 Сети Петри
                                                11.5 Алгоритм проверки графа на двудольность
                                                11.6 Алгоритм раскраски двудольного графа
                                                11.7 Алгоритм Хопкрофта-Карпа
                                                11.8 Венгерский алгоритм
                                                11.9 Blossom алгоритм (алгоритм Эдмондса)
                                                11.10 Алгоритм Штор-Вагнера

                                                Геометрия
                                                12.1 Метод Гаусса
                                                12.2 Поиск точек в прямоугольнике
                                                12.3 Алгоритм Бентли-Оттмана
                                                12.4 Алгоритм Грэхема
                                                12.5 Алгоритм Джарвиса
                                                12.6 Алгоритм Чана
                                                12.7 Алгоритм Киркпатрика
                                                12.8 Метод трассировки луча
                                                12.9 Метод суммирования углов
                                                12.10 Диаграмма Вороного и триангуляция Делоне
                                                12.11 Алгоритм Форчуна
                                                12.12 Рекурсивное построение диаграммы Вороного
                                                12.13 SLERP
                                                Структуры
                                                12.13 R, R+, R* дерево
                                                12.14 K-мерное дерево
                                                12.15 BSP, VP дерево
                                                12.16 Дерево покрытий

                                                Персистентные структуры
                                                13.1 Метод копирования пути
                                                13.2 Метод толстых узлов
                                                Структуры
                                                13.3 Персистентный стек
                                                13.4 Персистентная очередь
                                                13.5 Персистентное дерево

                                                Консенсус в сетях
                                                14.1 Алгоритм Paxos
                                                14.2 Задача Византийских генералов
                                                14.3 Кворум
                                                14.4 CAP-теорема
                                                14.5 PACELC-теорема
                                                14.6 Королевский алгоритм
                                                14.7 Алгоритм Zyzzyva
                                                Структуры
                                                14.8 Blockchain

                                                Целочисленное программирование
                                                15.1 Каноническая форма, сложность решения
                                                15.2 Алгоритмы полного перебора
                                                15.3 Алгоритм Нарайаны
                                                15.4 Задача о ранце
                                                15.5 Алгоритм Meet-in-the-Middle
                                                15.6 Задача раскроя
                                                15.7 Метод обратного поиска
                                                15.8 Задача планирования производства
                                                15.9 Задача оптимизации телекоммуникационных сетей
                                                15.10 Метод секущих плоскостей, алгоритм Гомори
                                                15.11 Алгоритм Альфа-Бета отсечений
                                                15.12 Жадные алгоритмы
                                                15.13 Матроиды, алгоритм Радо-Эдмонса

                                                Быстрые вычисления
                                                16.1 Умножение Карацубы
                                                16.2 Алгоритм Шенхаге-Штрассена
                                                16.3 Алгоритмы возведения числа в степень
                                                16.4 Алгоритмы возведения в степень числа по модулю
                                                16.5 Алгоритм Кули-Тьюки
                                                16.6 Алгоритм Штрассена

                                                Факторизация
                                                17.1 Алгоритм Евклида (НОД)
                                                17.2 Алгоритм факторизации Ферма
                                                17.3 Метод квадратичных форм Шенкса
                                                17.4 Ро-алгоритм Полларда
                                                17.5 Метод квадратичного решета
                                                17.6 Общий метод решета числового поля
                                                17.7 Факторизация с помощью эллиптических кривых
                                                17.8 Тест Агравала-Каяла-Саксены
                                                17.9 Алгоритм Берлекэмпа

                                                Дискретное логарифмирование
                                                18.1 Алгоритм Гельфонда-Шенкса
                                                18.2 Алгоритм COS

                                                Обработка очередей
                                                18.1 Семейство алгоритмов Round-robin
                                                18.2 Алгоритм EDF
                                                18.3 Алгоритм SRTF
                                                18.4 Алгоритм Fixed-priority pre-emptive scheduling
                                                18.5 Задача составления расписания (JSP, OSSP)
                                                18.6 CFS планировщик
                                                18.7 BFS планировщик

                                                Кеширование
                                                19.1 T-дерево
                                                19.2 Алгоритм Белади
                                                19.3 FIFO, LIFO кеширование
                                                19.4 LRU, PLRU кеширование
                                                19.5 MRU кеширование
                                                19.6 RR кеширование
                                                19.7 LFU кеширование
                                                19.8 MQ кеширование
                                                19.9 ARC кеширование

                                                Рандомизированные алгоритмы
                                                20.1 Метод Монте-Карло
                                                20.2 Поиск наименьшего набора ребер, разрезающего циклы
                                                20.3 Муравьиный алгоритм
                                                20.4 Алгоритм Каргера
                                                20.5 Изоморфизм графов (алгоритм Blum-Kanan)
                                                20.6 Rapidly exploring random tree
                                                20.7 Тасование Фишера-Йетса
                                                20.8 Алгоритм Karloff–Zwick

                                                Вероятностные тесты на простоту
                                                21.1 Тест Ферма
                                                21.2 Тест Миллера-Рабина
                                                21.1 Тест Бейли-Померанца-Селфриджа-Уогстаффа

                                                Вебграфы
                                                22.1 Модель Болобаша-Альберта
                                                22.2 Модель Болобаша-Риордана
                                                22.3 Модель Бакли-Остгус
                                                22.4 Модель копирования
                                                22.5 PageRank, Google matrix
                                                Структуры
                                                22.1 MapReduce
                                                22.2 Apache GiGraph
                                                22.3 Pregel

                                                Хеширование
                                                23.1 Двойное хеширование
                                                23.2 Фильтр Блума
                                                23.3 Count-min sketch
                                                23.4 Универсальное хеширование
                                                23.5 SWIFFT
                                                23.6 MD5
                                                23.7 SHA-2
                                                23.8 SHA-3 (Keccak)
                                                23.9 Дерево Меркла
                                                23.10 Подпись Меркла
                                                23.11 Хеш-функции, учитывающие близость (LSH)
                                                23.12 Хеширование на основе расстояния Хэмминга
                                                23.13 MinHash
                                                23.14 SimHash
                                                23.15 Поиск ближайшего соседа c помощью LSH

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

                                                *** Это несколько больше чем я сам знаю, так что это еще и мой план для себя подтянуть неизвестные/забытые темы. Обсудив его с коллегами, на предмет кто будет читать мы пришли к выводу, что мы все были бы рады и сейчас прослушать такой курс.
                                                • +1
                                                  Спасибо за разьяснение.

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

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

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

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

                                                  Предполагаю, что скорее польза всего возникает чисто из-за улучшения системности мышления из-за чего базис и нахваливают
                                                  • 0
                                                    … некоторые виды графов, алгоритмы хэшей, геометрия — всё это никогда не было нужно.

                                                    Согласен с тем, что это полезно знать(для мышления), но что интересно — на практике не припоминаю чтобы хотя бы 5% применялось в бизнесе.

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

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

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

                                                    Вот пример, у меня не сильно сложный проект, бизнес специфика — баскетбол и бейсбол. Ни в одном университете такому не научат, да и не нужно такому учить.
                                                    Бизнес специфика изучается самостоятельно в процессе работы.
                                                    А вот пример недавней задачи:
                                                    Есть два набора данных формата
                                                    [{ Number, String }],
                                                    где Number — это unix time,
                                                    a String — это строка такого вида: «A -> B -> C»,
                                                    A, B, C — это произвольные слова, их кол-во произвольно, но обычно не больше 20.
                                                    Что-то вроде:
                                                    [
                                                    { 1234123, "A -> B -> C"},
                                                    { 5324534, "X -> B -> C"},
                                                    { 4234234, "A -> B" }
                                                    ]

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

                                                    Задача: Сравнить и отобразить «красиво» эти наборы чтобы найти насколько пользовательские данные отличаются от эталонных.
                                                    Вот не знаю как бы я решал эту задачу не зная нескольких алгоритмов.
                                                    • 0
                                                      Вот не знаю как бы я решал эту задачу не зная нескольких алгоритмов.

                                                      А с помощью каких решали? Правда, интересно. У меня нет ТАКОЙ базы, чтобы решить такую задачу без велосипедов
                                                      • 0
                                                        Mehdzor вот говорит что можно использовать машинное обучение, а у меня нет знаний в этой области, возможно он прав, возможно нет. Было бы интересно через эту призму попробовать решить эту задачу. Это как раз подтверждает то о чем я говорил — если не знаешь например машинное обучение, то даже не подумаешь о таком решении.

                                                        А я использовал LCS (longest common sequence) для поиска разницы в последовательностях типа «A -> B -> C», а дальше NN (Nearest neighbor search) чтобы найти ближайшие. Ну и немного велосипедов, т.к. дальше мои познания закончились.
                                                        • +1

                                                          Машинное обучение — это не только дип лирнинг. И NN тоже относится к машинному обучению.
                                                          Не знаю за что минусят только.

                                                      • 0

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

                                                      • +1
                                                        > но что интересно — на практике не припоминаю чтобы хотя бы 5% применялось в бизнесе

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

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

                                                        Второй принцип: возможность продолжить обучение по направлениям математика или CS.
                                                        Например, пойти в магистратуру и развиваться в области криптографии и информационной безопасности; или развиваться в области расчетов движения механических объектов — бпла и пр.; или уйти в область робототехники…

                                                        Третий принцип: полученная квалификация не должна устареть за 10 лет.

                                                        ** Конечно, это не массовое образование (тут набор вообще планируется в 20 человек), но это спецы, которые должны будут решать задачи, составляющие 1-5% от бизнеса (по моему опыту), но без решения которых остальные 95-99% бизнеса лишены смысла.

                                                        *** И да, я считаю, что должна быть система институтов или ПТУ, которая будет массово (тысячи в год) и быстро (за 1-2 года) готовить конкретных программистов под конкретные простые задачи, для конкретных бизнес-потребностей — администрирование MySQL; PostgreSQL; настройка Nginx; Python для веба; и т.д. и т.п., т.е. набор небольших, но очень конкретных навыков. Система должна быстро подстраиваться под потребности бизнеса. Впрочем, сейчас эту нишу пытается занять онлайн-образование. Правда статистически эффективность пока не очень.
                                                      • +2

                                                        Ваш комментарий достоин добавления в закладки :)

                                                        • 0
                                                          Скажите пожалуйста, а где и когда вы собираетесь читать этот курс?
                                                          • +1
                                                            СПбГУ, матмех, новая программа «Математика и Компьютерные науки», первый набор в след. году.
                                                            • 0
                                                              А вы не планируете выкладывать что-нибудь в открытый доступ? Презентации, видеолекции?
                                                              • +1
                                                                Хотелось бы, если время позволит. Все от обстоятельств зависит.
                                                        • 0

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


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

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

                                                            Если ему нужно посмотреть в интернете как что реализуется, то это конечно не очень хорошо, т.к. затормозит написание кода, но и не очень плохо (если только ему не приходится постоянно это делать).
                                                            • 0

                                                              Серьёзно? Программа-максимум — чтобы человек мог любой из перечисленных алгоритмов написать из головы? Вы сами-то можете так? И зачем это нужно?

                                                              • 0
                                                                Некоторые мои знакомые — могут. Но это скорее спорт, чем практика…
                                                                Но где я написал, что нужно все сходу «написать из головы»?
                                                                Цель «максимум» — чтобы человек знал «из головы» основные идеи и схему в общих чертах любого из перечисленных алгоритмов. Это позволяет ему эффективно планировать решение задач, адаптируя базовые алгортитмы под конкретные потребности.
                                                                • 0
                                                                  Если ему нужно посмотреть в интернете как что реализуется, то это конечно не очень хорошо, т.к. затормозит написание кода

                                                                  Я об этом.

                                                                  • 0
                                                                    «не очень хорошо, т.к. затормозит написание кода, но и не очень плохо (если только ему не приходится постоянно это делать).»

                                                                    Если не приходится постоянно это делать.
                                                                    Программист должен уметь мыслить в категориях алгоритмов, а если ему надо гуглить каждый-каждый алгоритм, чтобы вспомнить его идеи и сложность, то это плохо.
                                                          • 0
                                                            Огромнейшее спасибо за список!
                                                            • +1
                                                              Несомненно, что это правильно, когда программист имеет хорошую математическую подготовку. Но ваш список не выглядит сбалансированным. Он выглядит как список, который должен выглядеть крутым. Большая половина из перечисленного практически никем не будет освоена ибо у вас количество пунктов больше количества отведённых часов. То есть — меньше часа на каждый. И будет лишь пустая трата времени с полным отбиванием охоты учить всю эту смесь. Осмыслить даже половину перечисленного за отпущенные часы невозможно.
                                                              • 0
                                                                Если рассматривать его как «сферического коня в вакууме» — то да, учить по списку с примерно часом на каждый пункт — довольно глупо.

                                                                Но это часть программы, и его составление и разбивка по семестрам делалась в соответствии с тем, что будет читаться вокруг. Практика программирования это фактически x2 по часам. Курс теории графов — еще +. Курс теории экстремальных задач… Курс теории сложности… Много чего. В итоге этот курс по многим строчкам это не столько теория, сколько связь между хорошей математикой и конкретной практикой — то, чем и является «алгоритм» — это еще не программа, но уже и не теорема.
                                                                • +2
                                                                  Да, вижу что много чего. Примерно как учиться читать и одновременно проходить Войну и Мир с Преступлением и наказанием. Или довести количество отжиманий от пола до тысячи за одну неделю. Это и называется разбалансированность. Стандартная беда — перечислить всё что есть в математике и убедить себя что всё это крайне необходимо ибо хорошо и знаний много не бывает и сё такое.
                                                              • 0
                                                                А можно тоже самое, только с ссылкам на почитать?
                                                                И это же сколько лет это потребуется узучать?
                                                                (сколько лет потребуется чтобы написать учебный материал)
                                                                • 0
                                                                  Ссылки? Ну с этим сложно. Стандартный, всеми рекомендуемый, набор книжек про алгоритмы покрывает 80% списка, но покрывает сильно избыточно.
                                                                  Курс начнется весной 2018 г., соотв. первый раз он закончится осенью 2019 г., соответственно, к концу первого прочтения будет первое приближение по материалу и конспектам… Может удастся некоторое количество лекций отснять.
                                                          • 0
                                                            Я могу назвать и преподователей и ВУЗы, но у каждого свой опыт. То что кто-то не видел отличных программ, не значит что их нет. Вы просто подумайте, что когда вы обучаетесь по книгам, то автор книги скорее всего где-то читает лекции. Утверждать что нет программ сопоставимо с тем, что утвержать что нет материала по которому Вы учитесь. Но так как материал есть, то значит и есть универы и курсы. не так ли?
                                                            • 0
                                                              ФИТ НГУ, например.
                                                            • 0
                                                              Лучше, но когда интересно. Конечно не могу говорить за такую сложную вещь, как психика, что у всех так, но лично я сильно лучше изучаю как что-то устроено или работает, если мне интересно, чем через силу на курсах или лекциях.
                                                              • 0
                                                                вы утверждаете что лучше лишь потому что вас не заставляют. но так то никто не заставляет Вас поступать на конкретный факультет в университет? тем не менее по сути для того чтоы стать хорошим специалистом в сфере ИТ нужно знать и математику, и устройство системы, те же алгоритмы и структуры. Я не верю что выучив ангуляр и начав делать сайты, можно скзать что этот человек разработчик. Это как научившись рисовать круг, Вы не становитесь художником.
                                                                • 0
                                                                  я научился прогать ещё классе в 7-8 и математику/физику тогда же учил сам, устройство компьютера знаю достаточно подробно, мне вообще легко даётся понимание того, как что-то работает, хоть самолёт, хоть подводная лодка, хоть компьютер с хорошей детализацией

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

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

                                                                      Студент ВУЗа тоже в основном "самообразуется". ВУЗ больше направляет самообучение, чем обучает. Ну и дисциплинирует — студярам это нужно (возраст-с).

                                                                      • 0
                                                                        не совсем так. самообразование это Вы сами выбераете и Вы сами учите, и Вы сами оцениваете свои знания. В то время как в университете проверка знаний производится не Вами, и материал предоставляется. Студент имеет возможность и сам выберать материал, но задается некоторый сегмент по котому оценивается знания. Дисциплина нужна и в самообразовании и в универе.
                                                            • +9
                                                              Синк эбаут зис, гайс.

                                                              Так делать не стоит.
                                                              • +13
                                                                Тех, кто говорит вам, что сам ничему не научишься, а нужно образование…

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

                                                                не задавай вопросы коллеге. Задавай их гуглу.

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

                                                                если открываете проект, а там сплошной говнокод: время делать ноги. Ищите место где говнокода меньше.

                                                                Ахх, где же этот идеальный мир без говнокода...?

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

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

                                                                P.S. Извините, не удержался.
                                                                • 0
                                                                  Про дебилов… наверное это зависит от объема собственых фундаментальных знаний. Вполне естественно чуствовать дискомфорт если ты вообще ничего не понимаеш.
                                                                  • 0
                                                                    не задавай вопросы коллеге. Задавай их гуглу.

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

                                                                      В первый год работы я спрашивал у гугла, что спросить у коллеги, чтобы правильно сформировать вопрос. Примерно в 50% случаев гугл отвечал на первоначальный вопрос.
                                                                  • 0
                                                                    Когда я только начинал, я думал, что меня будут учить. Я думал задавать вопросы нормально. А мои учителя бурчали и отнекивались… не задавай вопросы коллеге. Задавай их гуглу.


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

                                                                    К примеру, если мой джун вставала в тупик при написание какого-то куска кода, то я садилась, находила в чем проблема и как ее решить. Давала подсказки, говорила где поставить брек поинт, советовала: «Смотри что тебе приходит, есть в аргументах нужные тебе данные. Если нет, то ты наверно передаешь что-то не то, ставь брек поинт выше, смотри что действительно надо отправить в метод»

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

                                                                    Если вспомнить свое джунство, то не могу сказать, что бы на меня все забивали, тоже старались рассказать полезные вещи, чему-то научить.
                                                                    • +3

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

                                                                      • +1
                                                                        Видимо, у вас очень много свободного времени. Ну или Вы — воспитательница в детском саду...


                                                                        Времени как раз постоянно не хватает. Да, раздражает, когда отвлекают, но я стараюсь резко не отвечать. Чаще всего, забавные затыки, которые выявляются минут за пять. Лучше сразу потратить время и научить правильно, чем в будущем исправлять баги, которые полезут из не умело написанного кода. Да и мир it-тесен, ни когда не знаешь, кого встретишь на новой работе и с чьим кодом придется работать…
                                                                    • +2
                                                                      Сразу видно, вот честное слово, что человек не учился в вузе. Есть у нас, у тех, кто особенно отсидел 6 и более лет за партой, причём не в каком-то шарашном эконом псевдовузе, какое-то отношение критическое к этому всему. Понимание, что всё это бред, ерунда и что нет ничего крутого. прикольного вау и прочего.

                                                                      Вот, что точно умеет делать вуз, дак это даёт понимание какой-то реальности, учит мыслить более рационально.
                                                                      Время снова браться за математику.
                                                                      Вот не напишет такое человек с дипломом, хотите верьте, хотите нет.
                                                                      • 0
                                                                        У меня есть диплом, но я не понимаю, почему не напишет. Не поясните?
                                                                      • +2
                                                                        Не надо стесняться того, что вы становитесь лучше.… Сразу скажу: если открываете проект, а там сплошной говнокод: время делать ноги. Ищите место где говнокода меньше.

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

                                                                        • +1
                                                                          Вспомнил случай из студенческих лет. Во время лекций один студент стал спорить с преподавателем, суть спора что методы про которые говорит лектор устарели, но в ответ «Не спорь, я опытный, а ты совсем молодой». Ответ не оставил себя долго ждать «Умные гордятся знаниями, а дураки опытом» (я раньше таких фраз не слышал, возможно уже крылатое выражение). После этого предмет всем было сдавать тяжело. Удачи в получении новых знаний и опыта!
                                                                          • +1
                                                                            Вы мне напомнили мой последний день на военной кафедре, где я пришел в грязных ботинках. Подполковник вызвал меня на шаг вперед и спросил:
                                                                            — Ты к своей девушке в таких же ботинках ходишь?
                                                                            Я не совсем понял, о ком он — никакой девушки у меня не было на тот момент. Но решил подыграть:
                                                                            — Нет, к ней хожу в чистых. Я же ее уважаю.
                                                                            — Вон с кафедры! Вон! Ты не будешь чинить реактивные двигатели! Ты будешь собакам хвосты крутить!
                                                                            • 0

                                                                              А сказал бы честно как есть, не было бы конфликта.

                                                                              • +1
                                                                                Согласен. Но тогда не было бы конфликта)))
                                                                                • 0

                                                                                  Рапорт не принимали? Знакомо. Те, с кем я учился, отстранялись от обучения на военной кафедре сходным образом.

                                                                                  • 0
                                                                                    Нет, не принимал. Мне чет даже не пришло такое в голову тогда.
                                                                                    Теперь буду мучаться спустя 15 лет…
                                                                                    • 0

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

                                                                                      • 0
                                                                                        А, я думал вы ко мне на вы обратились: не принимал ли я рапорт. Я еще призадумался, как я мог принимать рапорт, но подумал, что имеется ввиду, что они мне должны написать, почему конкретно меня отчислили и вы это назвали рапортом.
                                                                                        Короче, не было никаких рапортов.
                                                                                  • 0

                                                                                    Не понял, вы конфликтом гордитесь?

                                                                                    • 0
                                                                                      Это было на правах юмора вообще-то. Я даже смайлики поставил.
                                                                            • +3
                                                                              если открываете проект, а там сплошной говнокод: время делать ноги

                                                                              То есть Вы не умеете читать чужой код.
                                                                              А поскольку, обычно через год свой собственный код, когда его подзабыли выглядит как чужой
                                                                              => то значит Вы пишете WRITE-ONLY-CODE.

                                                                              • 0

                                                                                Вы так говорите потому что вам еще не встречались проекты целиком состоящие из говнокода?

                                                                                • 0

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


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

                                                                                  • 0
                                                                                    Есть разница между способностью исправить и желанием исправить.
                                                                                    • 0
                                                                                      Была б возможность — плюсанул бы.
                                                                                    • +1

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


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


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


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

                                                                                      • 0
                                                                                        никто не будет оплачивать

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

                                                                                        • 0

                                                                                          Если на рефакторинг не было выделено время — то это не "по работе".

                                                                                          • 0

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

                                                                                      • 0
                                                                                        «Если ты не способен исправить чужой говнокод (разобравшись и оптимально переписав), то ты не программист, а говнокодер.»

                                                                                        А если не способен исправить говнокод по причине того, что это не обосновано бизнес-задачами? Или вы живете в идеальном мире, где нет бизнес давления?
                                                                                  • –4

                                                                                    Я вам вот что скажу:


                                                                                    Понедельник

                                                                                    Во-первых, не знаю как сейчас, а раньше там ещё писать учили грамотно.
                                                                                    Во-вторых, не важно вуз или нет, но нужен наставник. Как минимум на начальном этапе.
                                                                                    Иначе вместо самоучки велика вероятность стать очередной обезъяной-говнокодером.
                                                                                    Знаете сколько веб-макак могут отличить 400 от 405 и знают почему нужно применять POST или GET в конкретном случае? Очень мало, к сожалению. И это только вершина только одного из айсбергов.


                                                                                    Вторник

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


                                                                                    Среда

                                                                                    Норм.


                                                                                    Четверг

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


                                                                                    Пятница

                                                                                    Сомнительно.
                                                                                    Есть культ самолётников, есть антипаттерны, есть популярные методы написания хренового кода (в основном индусский и китайский). Их, конечно же, лучше обходить за сто вёрст.
                                                                                    А ещё есть красивый код.
                                                                                    К красоте, конечно же, стоит стремиться, но это, в некоторой мере, ещё и вопрос вкуса и стиля.


                                                                                    Суббота

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


                                                                                    Воскресенье

                                                                                    Рассказать это работодателю — отличный способ для СНГ (и некоторых других мест) чтобы остановить повышение зарплаты себе на очень долгий период.

                                                                                    • 0
                                                                                      велика вероятность стать очередной обезъяной-говнокодером.

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

                                                                                      • 0
                                                                                        Хороший наставник улучшает ситуацию.
                                                                                        Будет ли он учителем или коллегой или кем ещё — не так важно.
                                                                                        • 0
                                                                                          Образование и дисциплина радикально улучшает ситуацию.
                                                                                          Программирование — наука инженерная, тут не надо быть гением, чтобы решать 99% задач, нужна всего лишь дисциплина, база и, иногда, аналитический склад ума.
                                                                                      • +4
                                                                                        Вы меня извините, но в комментариях гремучая смесь снобизма, позерства и проявлений однобокого мышления. Те, кто кичится своим высшим образованием, фундаментальной базой и умением системно мыслить — где ваш научный подход к исследованию вопроса? Человек утверждает, что ему образование не нужно — протестируйте его знания и сделайте вывод. Оперируйте фактами, а не домыслами и стереотипами, якобы только вуз способен сформировать правильное мышление. Есть немало людей, что разбираются в алгоритмах на высоком уровне и без образования, как и масса выпускников престижных вузов, не способных отличить linked list от array.

                                                                                        И снова повторю любимую фразу программистов: it depends…
                                                                                        • 0
                                                                                          Какой-то конкретной группе людей, пишущих код, образование не нужно для решения их текущих задач, это правда.

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

                                                                                          В своё время ребята, которые выставляли кегли в кегельбане тоже говорили, что для их работы им образование не нужно. Потом их заменили бездушными автоматами.
                                                                                          • 0
                                                                                            А без вуза фундаментальные знания получить нельзя?)
                                                                                            Ну и основная масса вакансий по программированию не предполагает наличия глубоких знаний у соискателя (1С и CMS). Нужен просто человек, который сможет обслуживать и сопровождать систему.
                                                                                            • 0
                                                                                              Без ВУЗа фундаментал получить можно, но это сложнее и в итоге дороже. Поэтому базу без ВУЗа получают реально единицы.

                                                                                              Низкоквалифицированный труд в АйТи действительно существует, и действительно можно там работать. Только это не инженеры, и говорить о них не особо интересно.

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

                                                                                              И да, для нормального 1С-ника именно computer science может быть много и не надо, но вот предметную область (то есть бухучёт) и умение работать с клиентом — нужно. Это тоже фундаментальные знания-навыки, и их тоже дешевле получать в ВУЗе ну или техникуме.
                                                                                        • +1

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

                                                                                          • 0
                                                                                            Ну правильнее задавать вопрос, что создают выпускники российских ВУЗов, а не что создают в России. Так как не все выпускники остаются в России и не все, кто создает что-то в России — выпускники русских ВУЗов.

                                                                                            Но даже если ставить вопрос так, то вот, наверняка еще не полный, список компаний, имеющих R&D в России:

                                                                                            • Alcatel-Lucent
                                                                                            • Allied Testing
                                                                                            • AVIcode
                                                                                            • Cadence
                                                                                            • Design Systems
                                                                                            • Chrysler
                                                                                            • Cisco Systems
                                                                                            • Columbus IT
                                                                                            • Dell
                                                                                            • Deutsche Bank (the bank’s 2nd largest development center in the world is in Moscow)
                                                                                            • Digia
                                                                                            • EGAR Technology
                                                                                            • EMC
                                                                                            • EMS
                                                                                            • Ericsson
                                                                                            • Google
                                                                                            • Hewlett-Packard
                                                                                            • Huawei
                                                                                            • IBM
                                                                                            • Intel
                                                                                            • InterSystems
                                                                                            • Jensen Technologies
                                                                                            • LG Softlab
                                                                                            • Motorola
                                                                                            • NEC
                                                                                            • NetCracker
                                                                                            • Nival Interactive
                                                                                            • Microsoft
                                                                                            • Nokia
                                                                                            • Nokia Siemens
                                                                                            • Quest Software
                                                                                            • RD-Software
                                                                                            • Samsung Research Center
                                                                                            • SAP
                                                                                            • Scala CIS
                                                                                            • SmartPhoneLabs
                                                                                            • Oracle (former Sun Microsystems)
                                                                                            • Tagrem Studio
                                                                                            • Teleca
                                                                                            • T-Systems
                                                                                            • 0

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

                                                                                              • 0
                                                                                                Все вышеперечисленное — как раз они, самоучки. До недавнего времени почти все технические ВУЗы страны в лучшем случае преподавали Паскаль и Бейсик. Ну еще алгоритмы, которые нужны в очень узкой сфере, относительно того, что делают.
                                                                                                А то, как делать ежедневный рутинный программистский труд и выдавать продукт в ВУЗах не учат. По крайней мере не учили, когда это все создавалось и росло.
                                                                                                • 0
                                                                                                  Что-то я сильно сомневаюсь, что в перечисленные организации берут людей без в/о.
                                                                                                  • +1
                                                                                                    Во-первых, берут еще как. В бизнесе всех интересуют знания, а не бумажки.
                                                                                                    Во-вторых, требование в/о не является свидетельством того, что оно дает знания.
                                                                                                    • 0

                                                                                                      Если и берут, то скорее всего людей, у которых УЖЕ есть большой опыт в индустрии, который позволяет закрыть глаза на отсутствие ВО. Но этот опыт надо где-то набрать. А во многих местах резюме даже не будут смотреть, если нет ВО, оно просто не пройдет первый уровень отбора HR и люди, которые смогут оценить уровень знаний, который у кандидата якобы есть, просто его не увидят.


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

                                                                                                      • 0
                                                                                                        Это есть только в России. Например у нас (Израиль) в/о достаточно редкое явление. Это безумно дорого и сложно. При всем при этом регион считается вторым после Кремниевой Долины по размерам ИТ.
                                                                                                        Люди не знают алгоритмы, но при этом досконально знают ядро Линукса и стэк TCP и программируют вполне конкурентноспособные продукты (диссекторы протоколов, например).

                                                                                                        Но советовать это как нормальный старт карьеры — глупо, как по мне.

                                                                                                        Если я утверждаю, что без в/о обойтись можно и хуже не станет, это не значит, что я не советую в/о. Я советую учиться всеми доступными способами. Даже если оно не пригодится.
                                                                                                        • 0
                                                                                                          Например у нас (Израиль) в/о достаточно редкое явление. Это безумно дорого и сложно.
                                                                                                          «Капитализм ...» (с) А.Ш. в роли милиционера в фильме «Красная жара»
                                                                                                          При всем при этом регион считается вторым после Кремниевой Долины по размерам ИТ.
                                                                                                          Т.е. и малодоступность ВО поэтому «плюс»?
                                                                                                          • 0
                                                                                                            Т.е. и малодоступность ВО поэтому «плюс»?

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

                                                                                                            • 0
                                                                                                              Отсев, да не тот:
                                                                                                              безумно дорого
                                                                                                            • 0
                                                                                                              Нет, не плюс. Я этого не говорил. Я сказал, что в/о не влияет на развитие ИТ и на уровень профессионализма.

                                                                                                              «Капитализм ...»

                                                                                                              Наша проблема — не капитализм. Просто из армии приходишь только в 21. А на выходе из армии тебя ждут звериные цены на все (пачка сигарет, например, — 700 рублей) и приходится сразу работать, а не учиться. Курить то что-то надо. Вот и курят маны, они бесплатнее, чем образование.
                                                                                                              • 0
                                                                                                                звериные цены на все

                                                                                                                приходится сразу работать, а не учиться

                                                                                                                Капитализм в фильм «Красная жара» обозначал и это, и многое другое Ж-)
                                                                                                                • 0
                                                                                                                  из армии приходишь
                                                                                                                  а программистские войска? ( без кавычек)
                                                                                                                  на развитие ИТ
                                                                                                                  Недавно ex.начальник из них как раз рассказывал, как и что…
                                                                                                                  Очень Союз хвалил за подготовку кадров.
                                                                                                                  Когда поток уменьшился, стали тренировать кадры прямо в качестве срочной службы
                                                                                                                  • 0
                                                                                                                    из армии приходишь
                                                                                                                    а программистские войска? ( без кавычек)
                                                                                                                    Расшифровка тезиса:

                                                                                                                    «Программирование — не для всех». Бывший киберразведчик учит айтишников на базе военных методик

                                                                                                                    Журналист, Q:
                                                                                                                    — В объявлениях о приёме на работу в израильские ИТ-фирмы
                                                                                                                    в качестве требования к кандидату может быть указана
                                                                                                                    «служба в технологических подразделениях военной разведки
                                                                                                                    или МАМRАМ». Как вышло, что в Израиле именно
                                                                                                                    армия стала кузницей кадров для ИТ?
                                                                                                                    A:
                                                                                                                    комплекс из психологических и IQ-тестов
                                                                                                                    и затем:
                                                                                                                    погружаются в сверхинтенсивный курс —
                                                                                                                    6-8 месяцев обучения по 12 часов в день.
                                                                                                                    Если человек успешно проходит курс,
                                                                                                                    он может присоединиться к армии
                                                                                                                    в качестве ИТ-специалиста на следующие 4 года.
                                                                                                                    В этом случае он уйдёт из армии не в 21 год, а в 25 лет,
                                                                                                                    уже с большим ИТ-опытом. После чего сможет
                                                                                                                    начать карьеру в израильском хайтеке.
                                                                                                                    • 0
                                                                                                                      обучения по 12 часов в день

                                                                                                                      И что, разве человек способен заниматься умственной деятельностью 12 часов в день?

                                                                                                                      • 0
                                                                                                                        разве человек способен заниматься умственной деятельностью 12 часов в день?
                                                                                                                        В армии?

                                                                                                                        Ну, там есть и альтернативы — был по TV сюжет:
                                                                                                                        барышни ( это же про Израиль, кстати) в экипажах танков.
                                                                                                                        Будущие инструкторы ( т.е. не на фронт), но всё же…
                                                                                                                      • 0
                                                                                                                        Тезис N2:
                                                                                                                        на развитие ИТ
                                                                                                                        Недавно ex.начальник из них как раз рассказывал, как и что…
                                                                                                                        Очень Союз хвалил за подготовку кадров.
                                                                                                                        Там же, Q:
                                                                                                                        — У нас принято гордиться «старой инженерной школой»
                                                                                                                        ... наследие СССР...
                                                                                                                        A:
                                                                                                                        — В СССР образовательная система была действительно
                                                                                                                        очень хорошая. В 90-е, когда Союз развалился и
                                                                                                                        в Израиль переехала целая волна советских инженеров,
                                                                                                                        это дало нам мощный толчок: мы получили
                                                                                                                        специалистов высочайшего уровня.