Как стать автором
Обновить

Комментарии 440

В свою компанию всех кандидатов сначала собеседует офис менеджер, ну как собеседует, дает им задания на листочке и они должны его решить, тоже на листочке. Я понимаю, что это кринж программировать ручкой на листике, но ни чего другого не придумал. Задания очень простые: проверка знания массивов, циклов, условий и знание sql. Проверяю только алгоритмы, на синтаксис внимания не обращаю. Так вот из 20 прошедших только 1 что то пишет. Большинство не может внимательно прочитать условие задачи (а может врут, что невнимательно прочитали) и пишут совсем не то. Из примера: есть задача вывести простые числа, простое число делится без остатка только на 1 и на себя. Несколько последних кандидатов просто проверили, что если число делиться на 1 и на себе без остатка, то оно простое!!! И много других подобных перлов.

У вас хоть что-то писали.

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

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

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

Я спросил, реально ли они это используют в работе? Поблагодарил и отказался от собеседования, вообще не интересно вникать в этот бред.

UPD: Вспомнилось и захотелось даже дополнить эту историю... Там ещё был вопрос, про конкретную технологию - я честно сказал, что толком ее не знаю, читал когда-то давно, но руками не трогал. Они такие "Ок, ясно. А теперь лайфкодинг по этой технологии!", я вежливо спросил "Имеет ли это смысл?", а сам подумал "Млин, как? Как вы вообще работаете? Если вам говорят, что что-то неверно, вы говорите - ОК, ладно, будем делать неверно?". И это технический этап с тех.диром, все предыдущие я успешно прошел. Короче, глядя на своего потенциального тех.дира, постепенно приходило понимание, что я не хочу, что бы он был моим тех.диром.

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

страшно другое - что собеседующий примет это как мой самый лучший код.

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

Я спросил, реально ли они это используют в работе?

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

Согласен, но млин, что мешает просто спросить? Я бы сделал так:

- С регулярками как?

Вариант 1:

- Отлично!

- Ну раз отлично, во напиши мне регулярку вот к этому.

Вариант 2:

- Ну пользую иногда!

- Ну раз знаком, как будешь делать регулярку к этому?

Вариант 3:

- Никогда не пользовал!

- Почему?

Абсолютно здравое общение ИМНО

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

Нисколько не здравое. Есть мастера очень красиво говорить, но не способные ничего сделать. Были случаи, что приходит супер-сеньор с опытом 20+, нужно отрывать с руками, а он не может две строчки кода связать (i.e. тривиально развернуть строку)

Ну ладно вам... Опыт 20+ ещё ни о чем не говорит, зря делаете выводы только на основе опыта, что "нужно с руками отрывать".

Звучит так, что "лучше б не говорил, а делал", верно, но отчасти, потому что есть и контр-примеры: у меня девочка знакомая 20 лет, математик от бога, разложить может что угодно наверное, но она аутист, пойди договорись с ней...

Я к чему, исключительно мое мнение, собеседующий должен:

  1. Понимать, кто ему нужен.

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

Под 1 и 2 подпишусь. Но если возвращаться к коду, то как без этого обойтись я не представляю. Для меня это фильтр - если человек не пишет что-то разумное (в IDE/на бумажке) для простой задачи, то фильтр на джуна он провалил. Иногда бывает неожиданное, поэтому я бы давал всем. Такая задача на скажет, что человек сеньор, но подскажет когда его брать нельзя.

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

Я б дал тестовое, небольшое, на 2-3 часа, и потом бы спросил с каждой строчки кода.

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

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

Ну претензии про лайфкодинг такие же...

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

Типа "отвернитесь", что-то поменять в коде и "теперь ищите ошибку?". Это задание на внимательность в первую очередь а не на понимание кода.

Ну претензии про лайфкодинг такие же

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

Не согласен про "неудовлетворит", меня например бы удовлетворило, но as you wish...

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

Были случаи, что приходит супер-сеньор с опытом 20+

Исходные данные корректны (разве что не хватает деталей по поводу "супер" - оценка базируется по красивому резюме или по наличию, например, премии Тьюринга?)

, нужно отрывать с руками,

Для ответа на этот вопрос создаем интервью

а он не может две строчки кода связать

Эксперимент был поставлен, результаты были выявлены. Вывод: или эксперимент неудачен (например, человек был усталый, задачи были на css, несмотря на опыт в C++ и так далее), или же исходный тезис "нужно отрывать с руками".

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

В реальном мире, ты с npm качаешь модуль reverse-string, и этим решение задачи заканчивается. И это решение будет работать в разы быстрее, чем наивная имплементация "из головы", что важно для кода на проде. Если решение с npm кажется оверкиллом, то все равно, решение задачи на переворачивание гуглится быстрее, чем ты даже пытаешься начать его обдумывать. Зачем спрашивать решение задачи, которую человек никогда за 20+ лет не решал? Разве что, чтобы проверить, как он будет решать совершенно новую для него задачу "с нуля" без предварительных знаний...

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

В реальном мире, ты с npm качаешь модуль reverse-string, и этим решение задачи заканчивается.

Как раз такой подход - бездумно качаем что-то с npm - это очень-очень-очень плохо. Еще хуже, чем бездумно копировать первый попавшийся кусок кода со StackOverflow. Только тут еще код и не читают часто и даже не задумываются об этом. Оно же в npm лижит, значит - готовая библиотека. Вот из-за этого мы имеем всякие рекурсивно работающие за линию IsOdd или left-pad, удаление которого ломает половину сайтов в интернете.

Кстати, этот приведенный вами reverse-string, работает через регекспы! Регекспы при развороте строки, крал! Да еще и рекурсивно! Во-первых, это почти наверняка тормозит, а во-вторых, это write-only код, в котором невозможно ни найти ошибку ни понять, что он вообще делает.

В итоге имеем дичайше тормозащий веб, из-за того что почти все программисты вот так решают задачи. В описании в npm вроде написано, что мне надо - качаем. И node_modules уже весит гигабайты, зато "мне алгоритмы не нужны".

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

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

Даже стало интересно, что там сделали "в разы быстрее".
И в ядре я увидел "наивную" ужасную имплементацию

	var result = '';
	for (var i = string.length - 1; i >= 0; i--) {
		result += string[i];
	}
	return result;

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

Обмазанную сверху регекспами

И еще рекурсией!

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

Рекурсия там отрабатывает на глубину не более 1.

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

Как я понимаю, каждая конкатенация - это переаллокация?

За прошедшие годы движок js научился узнавать и отдельно оптимизировать этот паттерн (конкатенация в цикле), так что там не n^2.

А в целом, далеко не каждая операция со строкой переаллоцирует. Есть rope для конкатенации, общий буфер для substr и т.д.

То есть, у нас npm-пакет под конкретный js-движок.

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

На практике везде используется всего один движок для JS: v8. Что у Node.js, что у Deno.

Ещё firefox. Но там я проверил: такой цикл отрабатывает настолько быстро, как будто он сразу строит перевёрнутую строку

а он не может две строчки кода связать (i.e. тривиально развернуть строку)

Напоминаю, что задача "развернуть строку" не нужна на практике от слова совсем и требует довольно нетривиального кода для обработки Unicode хотя на уровне code point, не говоря уже о grapheme cluster.

А в чем проблема с Unicode? Или многобайтные символы нужно как-то по особенному копировать?

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

Для начала строку нужно на эти символы поделить.

Если в языке есть строки Unicode - оно само поделит же. На чистом С - нужно упарываться, да.

на графемы

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

чтобы результат был более осмысленным

Перевернутая строка - сама по себе достаточно бессмыссленная вещь ;)

Если в языке есть строки Unicode - оно само поделит же.

Это, мягко говоря, не так. В том же JS есть строки Unicode, а попробуйте-ка поделить JS-строку на символы?

s = "中国"
s[0]
Out[3]: '中'
s[1]
Out[4]: '国'

Я думал что все так умеют ;) JS так не делает?

console.log(s)
中国 debugger eval code:1:9
undefined
console.log(s[1])
国

Вроде делает.

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

https://learn.javascript.ru/unicode

s = '✮⋆˚。? ⋆。°✩'
print(s)
print(s[1])

✮⋆˚。? ⋆。°✩

В python вроде работает. Картинка про девочку и javascript ;)

s = '✮⋆˚。? ⋆。°✩'
"✮⋆˚。? ⋆。°✩"
console.log(s[1])
⋆ debugger eval code:1:9
undefined
console.log(s[2])
˚ debugger eval code:1:9
undefined
console.log(s[0])

Вроде работает. Или это не те эмодзи?

Это называется не "обычный юникод", а "основная многоязычная плоскость" :)

> s="?"
< '?'
> s.length
< 2
> s[0]
< '\uD83E'
> s[1]
< '\uDD14'

s="?"
len(s)
Out[10]: 1
s[0]
Out[11]: '?'
s[1]
Traceback (most recent call last):

В python работает как ожидалось ;)

В python работает как ожидалось ;)

s="a?b"
print(s[2])

print нарисовал букву "b". В питоне все символы четырехбайтные, или мы тут наблюдаем взятие по индексу не за O(1) ?

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

Я не удивлюсь, если они в питоне таки держат строки в UTF32. Просто ради максимальной совместимости.

Ну я например регулярки если давно нетрогал сходу немогу написать, хотя лет 5 назад активно использовал. Перед тем как написать мне надо минут 15 доку покурить. Так же и многие другие специфичные вещи, тот же баш, jq, JavaEE, ЭЦП . Зато могу сейчас написать на бумажке python и SQL alchemy, хотя питон обычно даже не указываю в резюме-просто потому что за последние полгода довольно много скриптов на нем написал. Или cloudformation, при этом думаю если пару лет небуду использовать начинать буду с доков.

Вот вот такой ответ и будет самым нормальным на собеседовании! Если на собесе ну прям капец как регулярки критичны, то я бы даже cheat-sheet кандидату выдал, чтобы он регулярку составил без судорожного вспоминания опыта 5 летней давности.

А почему бы не ответить: такое делают регулярки, но это write only language и я стараюсь обойтистороной и с ходу не напишу, но знаю что есть, могу ещё предложить решить кодом с помощью конечных автоматов, но это будет чуть дольше. Или как-то ещё...

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

 регулярки, но это write only language

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

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

Вот не всегда. Например регексп "совпадение, если число делится на 7" имеет вполне монструозную длину, но заменяется одной строкой (двумя, если исходные данные - строка).

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

Таки в десятичной.

Все так. Я тоже примерно так делаю:
Спрашиваю - цените ваши знания регулярок по 10бальной шкале.
Окей, вопрос на X
не? тогда вопрос на Y
не? Окей, пример того, что вы решали регуляркой.

P.S. По каждой теме можно уточнить глубину знаний и задать 2-3 вопроса чтобы подтвердить эти знания. Главное не путать знания и свою личную экспертизу.

Судя по описанию, там задача на регулярку (на замену по регексу)

это сразу в бан. если надо писать аналог регулярки типа https://leetcode.com/problems/regular-expression-matching/ то это хард, и за час в стрессовых условиях это не решить. если нужно написать просто регулярку то это тоже в бан, потому что подобные решения делать приходится очень редко и они сразу выгружаются из памяти.

О! Классная задачка, спасибо)

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

Ну, а на нет и куда нет - сразу в бан ?

Ну там первое что почти сразу приходит в голову - "регулярку" порезать регуляркой

/(?:[^*]\*)*\.\*(?:[^*]\*)*/

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

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

Или DP: удовлетворяет ли префикс длины i префиксу регулярки длины j. Там несколько случаев, но они все довольно простые.

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

Наверное можно ещё преобразовать все в настоящую регулярно и ей проверить? Надо будет попробовать)

А если ни одной '. *' не будет? ?

Я спросил, реально ли они это используют в работе?

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

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

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

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

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

Эх... я бы провалил бы у вас собеседование, и не потому, что я не могу найти простые числа, а потому, что я бы во время собеседования тупо бы не вспомнил определение "простых" чисел, перепутал бы их с "натуральными" или ещё хуже - "с составными".

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

Так и представил себе этот диалог:

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

  • Извините, а что такое простые числа?

  • Спасибо, мы вам перезвоним...

Извините, а что такое простые числа?

Извините, а что такое деление по модулю?

НЛО прилетело и опубликовало эту надпись здесь

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

У нас в задании написано, что такое простое число. И в моем комментарии об этом сказано. Это еще и тест на то, что человек умеет читать и понимает, то что прочитал

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

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

будет самый мой плохой код

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

А без этого они не увидят вообще никакого твоего кода

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

Если я не увижу код, я не могу составить мнение.

Сколько людей, столько и мнений. :)

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

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

Адекватные люди, все-таки делают скидку на стрессовость интервью и неудобство доски/блокнота. На интервью не оценивают красоту кода, а то, что кандидат вообще может цикл с одним условием написать.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

А блокнотик - не позволяет? :)

Хочешь идеальный собес - зови человека в офис. Я не предлагаю ограничиться только кодингом, остальная беседа остаётся на месте. Вряд ли сварщика удивит если, помимо проверки теории, ему предложат сварить две железки. Почему тогда программисты истерят и сливаются? :) Да, стресс. Что поделать... Надо и этот навык тренировать, так же как рассуждения про методы класса Object степени изоляции транзакций и шаблоны проектирования.

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

Жуть... Если не секрет, каков примерно их средний возраст ???

25 -30 лет

Нда... Деградирует образование... Ударными темпами. Но ещё хуже пожалуй даже другое. Что-то очень херовое творится трудовой мотивацией. Например лет 10 назад мне в спам сыпались в основном предложения купить что-то ну ооочень нужное. Например виагру. Или часы ну почти как швейцарские. Т.е. совершить хоть говенную, галимую, но всё-таки рыночную сделку. Сейчас сыпется почти исключительно реклама различных лохотронов. Т.е. явное и заведомое мошенничество. Такое впечатление, что кроме этого вообще никто ничем не занимается. Какие тут нафиг простые числа ! Они скоро расписываться крестиком начнут при такой деградации !

НЛО прилетело и опубликовало эту надпись здесь

Просто их не учат тому что они делают лучше всего :)
Если серьезно, то образовательная система не очень-то связана с теми навыками, что требуются рынку труда.

Как двоечнику, с баллом аттестата 3.0, годовыми двойками по алгебре и коммерческой разработкой с 16 лет, даже интересно стало, с какой целью отчислять?

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

НЛО прилетело и опубликовало эту надпись здесь

Было бы чье время терять. ВУЗы и ССУЗы гребут деньги
А на качество выпускаемых кадров плевать
Отличники тоже не с ноги на собеседование дверь открывают

Ну вот окончил я техникум, отучился на Специалиста по информационным системам. Так или иначе знаю C#, его ORM фреймворм и фреймворк для разработки desktop. В свое время пробовал веб на python, мобилку на Java. С SQL работал, запросы писать умею. Спроектировать БД могу. Все что тут в комментариях расписали, что люди на собеседовании сделать не могут элементарного, я в принципе сделаю легко. На собеседованиях отвечал на вопросы про ООП в принципе без проблем. На вопросы по SQL связанные с Join`ами отвечал правильно и т.д. Только итог всегда один, либо отказ по причине "вы нам не подходите из за плохих знаний SQL" раза 2-3 так было, хотя единственный вопрос по SQL, который был на собеседовании, это "Как получить все данные из таблицы User", либо в целом отвечаю не плохо, но потом разраб, который меня собеседует начинает задавать вопросы по проблемам с которыми он сам же столкнулся при разработке и решал около месяца, по его словам. А потом тебя просто HR игнорит и никакого отклика даже не дает. И ты сидишь потом, и думаешь, какой же все таки ты наверное тупой

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

А на кого они приходят наниматься?

НЛО прилетело и опубликовало эту надпись здесь

Получается, они вообще не понимают чем программисты занимаются на работе :)

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

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

О, да!!!

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

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

Типичные разговоры "раньше трава была зеленей".

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

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

Вы математикой занимаетесь или разработкой?

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

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

От такого интервьювера с задачками на знание алгоритмов проверки чисел на простоту надо сразу бежать. Вы кого ищете-то ? Кто зазубрил 100500 алгоритмов или кто будет реально решать задачи бизнеса ?

А почему нельзя представить, что вывод простых чисел - это и есть задача бизнеса, и решить её так же как решалась бы задача бизнеса, без зазубривания?

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

А вы даете пользоваться поиском?

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

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

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

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

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

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

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

Именно такому писательству и учат на ускоренных курсах "молодого бойца" еще в начальных классах школы.

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

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

А чем задачка на простые числа деление, сравнение и циклы, не связана с умением написать что-нибудь на каком-нибудь питоне?

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

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

Программист - это человек, который может алгоритмы на человеческом языке перевести в понятную транслятору форму.

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

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

Программист подобен переводчику романа , например , с японского на русский.

Но он не писатель романа(алгоритма) , который он переводит.

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

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

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

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

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

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

Основные из них : метод, алгоритм,программа, тест,оптимизация.

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

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

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

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

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

Ваши представления о программировании устарели, и вот почему.

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

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

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

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

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

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

Непонятно, почему Вы полагаете, что питон позволяет сразу написать более правильный алгоритм, чем старые языки такие как Алгол, Фортран, Паскаль, Ada, C,C++?

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

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

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

Вы путаете алгоритм и его представление. Если алгоритм представлен, скажем, на Питоне - это никак не делает его не-алгоритмом и никак не мешает в дальнейшем его переписать на Си++.

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

За счет чего?

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

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

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

Попробую вам объяснить в чем преимущество.

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

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

Например, в алгоритме надо сделать цикл от 1 до 1000.

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

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

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

Когда изучил этот метод и написал строго по нему то удивился скорости решения задачи.

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

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

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

---

Например, в алгоритме надо сделать цикл от 1 до 1000.

Так вот, на питоне это пишется как for i in range (1, 1001). А на Rust так и вовсе for i in 1..=1000. И даже на Паскале это for i := 1 to 1000. Куда уж тут прямее-то?

В чём, блин, разница между вашим описанием "цикл от 1 до 1000" и любым из заголовков цикла выше?

Но даже если взять менее удобные языки, цикл for (int i=1; i<=1000; i++) - это идиоматический цикл, любой программист, который имеет хоть немного опыта, просто глядя на эту строчку увидит что в ней речь идёт о цикле от 1 до 1000.

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

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

21 век на дворе, проснитесь!

Это землянки можно строить сразу.

Но проекты домов, городов никто не отменял.

Если Вы варите суп по готовому рецепту, то это и есть писание по готовому алгоритму.

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

Но сложную систему Вы не напишите один и без подробной структуры(алгоритма).

Но я же Вас не принуждаю.

Делайте как привыкли.

Привычка -вторая натура.

Я лишь сказал свое мнение, которое опирается на мой

"опыт, сын ошибок трудных".

Может, у вас какая-то специфичная область, типа гос-оборонзаказа, где проекты сдаются по 5-10 лет, и там можно сначала напроектироваться вдоволь.

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

Это системы РВ с ИИ обработки результатов испытаний авто и авиа, торговые роботы, IOT.

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

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

Но сложную систему Вы не напишите один и без подробной структуры(алгоритма).

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

А всё почему? Потому что раньше для сложения двух чисел нужен был Алгоритм, а сейчас есть нормальные языки программирования, стандартные библиотеки, менеджеры зависимостей, stack overflow и новомодный ChatGPT.

Осознайте уже: в 70х вопросами поиска подстроки в строке занимались трое учёных с мировыми именами. Сейчас их алгоритм знает наизусть любой школьник-олимпиадник, причём не на уровне "зазубрил", а на уровне "способен придумать с нуля среди ночи". Реализация же этого алгоритма есть в любой стандартной библиотеке...

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

Даже в 70-х поиском подстроки не занимались ученые.

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

Это сейчас для программистов компьютер - "черный" ящик, а байты - это такое слово, которое надо искать.

А еще прикольно то, что все библиотеки матричной алгебры для tensorflow написаны на фортране.

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

Даже в 70-х поиском подстроки не занимались ученые.

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

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

Ага, за O(NM). А вот чтобы найти совпадение за O(N+M) - пришлось подумать трём учёным...

Верно, тогда не было программистов.

Даже специальность инженер-математик появилась позже.

Ученые разрабатывали методы, которые сейчас реализованы в библиотеках, в том числе на Фортране.

@mayorovp задал вам вопрос, который вы проигнорировали: если алгоритм можно сразу же записать на ЯП (и сразу же запустить вживую и начать отлаживать), то зачем нужно его промежуточное представление на "языке алгоритмов"?

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

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

Возможно, что поэты не умели писать.

Что же касается алгоритмистов и кодеров, то это ваша придумка.

Я написал про технологию разработки сложных систем. Эту технологию придумала IBM, потом применяло NASA в программе Аполлон (кто выиграл гонку мы знаем).

Очевидно там ошибались, надо было делать как Вы, но они этого не знали.

---------------------

относительно вопроса, на который я не ответил,но Вам интересно мое мнение.

Отвечаю: В народе говорят: "Заставь дурака богу молиться, он и лоб расшибет"

Кто вас заставляет рисовать алгоритм на " два умножить на два"?

Программа "Аполлон" закончилась в 1972.

Сегодня 2023.

И что?

Вы достигли большего, чем эта программа?

Чем гордитесь? Уточните.

Издеваетесь?!

https://github.com/chrislgarry/Apollo-11 -- это 130 KLOC

https://github.com/llvm/llvm-project -- это 26 MLOC

Да, мы достигли на несколько порядков большего. Современные ОС крупнее ещё на порядок.

Вам же @mayorovp выше объяснял, что сейчас даже кофеварка технически сложнее, чем космолёт 1960х.

сейчас даже кофеварка технически сложнее, чем космолёт 1960х

Программа в кофеварке сложнее чем у космолета, наверное. Хотя это не точно. И там циклограмма, и там.

"Крупнее, сложнее" -Прикалываетесь?

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

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

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

Космолет 1970 смог доставить на Луну и обратно людей. А космолет 2023 года смог разбиться о луну. причем космолет 2023 очевидно сложнее, чем 1970.

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

Понимаете о чем я говорю?

Фундаментальное создается на века и актуально в любое время.

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

А что вас смущает? Сложность меряется в объёме програмного кода. Он же напрямую отражает количество вложенных человеко-часов. В кофеварках есть WiFi5, протокол огромной сложности, а ещё TCP/IP стек и модули TLS, с поддержкой десятков возможных шифров и хешей.

В 64-килобайтные мозги суперкомпьютеров 60-х это никак не поместится.

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

WiFi - это приемник и передатчик. Да они малых размеров и работают на ГГц. Но примененные в них методы разработаны почти сто лет назад. Логика протоколов WiFi и TCP/IP относительно проста и на самом деле в кофеварке избыточны, но ширпотреб дешев. Да размеры микросхем стали меньше, чем было 60 лет назад.

Но на микросхеме, WiFi, TCP и даже TLS, Вы в космос не полетите ни сегодня, ни завтра.

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

Космолет 1970 смог доставить на Луну и обратно людей. А космолет 2023 года смог разбиться о луну. причем космолет 2023 очевидно сложнее, чем 1970.

Это вообще к чему? А, понял.Кофеварка 2023 года сложнее космолёта 1970-го, и вообще никуда не полетела. Всё в рамках вашей "логики".

Сложность меряется в объёме програмного кода.

Спорно.

print("hello, world")

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

print("hello")
print("world")

А эта программа в 2 раза сложнее?

Спорно

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

А эта программа в 2 раза сложнее?

Разумеется. Например, в многопоточной среде между "hello" и "world' в stdout может просочиться что-то ещё, и это надо держать в уме (например, в сценариях записи логов).

Это самый простой критерий

И сразу неработающий ;)

в многопоточной среде

Среда сложнее, а программа та же. В программе нет никаких указаний о записи логов. Получается программа Шредингера, о сложности нельзя судить до того как ее запустили ;)

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

И сразу неработающий

Предложите свой? Он тоже окажется "нерабочим", наверняка я придумаю, как его сломать.

Предложите свой?

Учитывать количество ветвлений неплохо бы. Количество операций ввода данных. Количество квадратиков в блок-схеме, вот вполне себе критерий ;) (2 print подряд - это 1 квадратик).

Почему 2 оператора это 1 квадратик?
А 100500 операторов подряд - тоже 1 квадратик?
Вы в курсе, что любой алгоритм можно превратить в линейный, спрятав ветвления в вычисления и в присваивания? (разве что в конце поставить JMP на начало, чтобы цикл крутился)
https://habr.com/en/companies/vdsina/articles/558458/

Почему 2 оператора это 1 квадратик?

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

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

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

Выполнятся подряд вне зависимости от внешних условий

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

Ну например попробуйте рекурсивное вычисление

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

Ну например попробуйте рекурсивное вычисление

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

Рекурсивный код, преобразованный в линейный без ветвлений - в студию, плз.

Для начала надо придумать, считается ли CMOV ветвлением

a = t ? x : y;

если да, до заменить на выражение

a = x*t +y*(1-t);

А дальше продумать шаг виртуальной машины, чтобы все false-ветки превращались в no-op (например, если b = false, не выполняем всю ветку, добавляя маску в каждый оператор этой маски)

a = (t & b) ? x : y;

Дальше 1 шаг машины + GOTO на начало (или повторить 100500 раз, считая что машина делает не более 100500 шагов до остановки).

Детальная реализация потребует несколько дней. Понятно, что она возможна. Записывать её не вижу смысла.

Слава Тьюрингу, властелину программ, царю в день собеседования!

Рекурсивная версия:

def fib(n):
  if n<3:
    return 1
  else:
    return fib(n-1) + fib(n-2)

Для начала сделаем стек вызовов явным:

def fib(n):
  stack = [0] * 1000
  sp = 0
entry:
  if n<3:
    result = 1
  else:
    stack[sp] = 1
    n -= 1
    sp += 1
    goto entry
label1:
    stack[sp - 1] = result
    stack[sp] = 2
    n -= 1
    sp += 1
    goto entry
label2:
	sp -= 2
    result += stack[sp]
    n += 2
  if sp:
	if stack[sp - 1] == 1:
	  goto label1
	else:
	  goto label2
  return result

(Это не настоящий код на Python, потому что в Python нет goto; но это не важно.)

Следующий шаг -- заменяем goto на state machine:

def fib(n):
  result = 0
  state = 0
  stack = [0] * 1000
  sp = 0
  while sp or not result:
    if state == 0:
	  if n<3:
		result = 1
		if sp:
		  state = stack[sp - 1]
	  else:
		stack[sp] = 1
		n -= 1
		sp += 1
    elif state == 1:
      stack[sp - 1] = result
      stack[sp] = 2
      n -= 1
      sp += 1
      state = 0
    elif state == 2:
	  sp -= 2
      result += stack[sp]
      n += 2
	  if sp:
		state = stack[sp - 1]
  return result

Теперь "расплющим" код, чтобы у каждого присваивания было только по одному условию:

def fib(n):
  state = 3
  stack = [0] * 1000
  sp = 1
  while state:
    if n<3:
      result = 1
	  state = stack[sp - 1]
    if state == 3:
	  stack[sp] = 1
	  n -= 1
	  sp += 1
    if state == 1:
      stack[sp - 1] = result
      stack[sp] = 2
      n -= 1
      sp += 1
      state = 3
    if state == 2:
	  sp -= 2
      result += stack[sp]
      n += 2
	  state = stack[sp - 1]
  return result

И последний штрих -- заменяем условные присваивания арифметикой:

def fib(n):
  result = 0
  state = 3
  stack = [0] * 1000
  sp = 1
  while state:
    result -= ((n-3)>>32) & (result - 1)
    state += ((n-3)>>32) & (stack[sp-1] - state)
    n += (~state&(state>>1))*3 - 1
    stack[sp] = (state&1) << (1-(state>>1))
    sp -= (~state&(state>>1))*3 - 1
    stack[sp-2] -= (state&~(state>>1)&1) * (stack[sp-2] - result)
    result += (~state&(state>>1)) * stack[sp]
    state = (state&1)*3 + (~state&(state>>1))*stack[sp - 1]
  return result

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

Получилась реализация Фибоначчи в двадцать строк вместо четырёх, при этом работающая за экспоненциальное время

Прикольно.

Но поскольку автор вопроса не уточнил, какую именно рекурсивную функцию он имеет в виду, то можно было выбрать самую простую )

fib
const fib = (n, a = []) => {
    if (n < 1) {
        a[0] = 0;
        a[1] = 1;
    } else {
        fib(n - 1, a);
        const t = a[1];
        a[1] = a[0] + t;
        a[0] = t;
    }
    return a[0];
}

или даже логарифмическую

код
const fib = (n, a = []) => {
    if (n < 1) {
        a[0] = 0;
        a[1] = 1;
    } else {
        const m = Math.floor(n/2);
        const r = n % 2;
        fib(m, a);
        const x = a[0] * (2 * a[1] - a[0]);
        const y = a[0] * a[0] + a[1] * a[1];
        a[0] = r * y + (1 - r) * x;
        a[1] = r * (x + y) + (1 - r) * y;
    }
    return a[0];
}

Прикольно ;)
Но совсем без ветвлений не получилось. while state:

В оригинальной реализации, кстати, тоже ровно 1 ветвление.

Повторить код 100500 раз, и обновить маски, чтобы при state==0 внутри был no-op.

Но совсем без ветвлений не получилось. while state:

В точности как @qw1 и анонсировал: "любой алгоритм можно превратить в линейный, спрятав ветвления в вычисления и в присваивания (разве что в конце поставить JMP на начало, чтобы цикл крутился)"

В оригинальной реализации, кстати, тоже ровно 1 ветвление.

Ещё несколько комментариев назад вы считали рекурсивные вызовы ветвлениями, а теперь уже не считаете?

Ещё несколько комментариев назад вы считали рекурсивные вызовы ветвлениями, а теперь уже не считаете?

Никогда так не считал ;) Я считал, что в рекурсивной функции должен быть хотя бы 1 if.

Учитывать количество ветвлений неплохо бы.

Количество квадратиков в блок-схеме, вот вполне себе критерий ;)

И чем это поможет?

for i in range(3):
  print(i)

будет вдвое сложнее, чем

print(1)
print(2)
print(3)

?

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

Преимущество LOC в том, что их легко и быстро считать

Да. На этом всё.

они относительно репрезентативны

Индусы, которым в начале 2000-х платили построчно, улыбаются и машут ;)

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

по этому критерию метрика ничем не лучше

Тоже да ;)

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

Вы придумали сложность по Колмогорову ))

Вы придумали сложность по Колмогорову ))

Как тот персонаж, что всю жизнь говорил прозой, но не знал про это ;)

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

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

При чём здесь он?

Как иллюстрация. Индусская методика позволяет раздуть число строк. Делается ли код сложнее?

И качество.. В каких единицах его измерять?

Тезис-то ваш в чём состоит? "Любую метрику сложности кода можно накрутить по-индусски, поэтому сложность кода неизмерима, поэтому сложность Аполлона и LLVM невозможно сравнить"? Или что?

сложность кода неизмерима

Там что-то писали про Колмогорова

сложность Аполлона и LLVM невозможно сравнить

Да. Одно теплое, другое мягкое. В LLVM строк больше, да. Но LLVM не решает системы дифуров и не управляет реактивными двигателями. А Аполлон не умеет в синтаксическое дерево.

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

Жаль, интересная была концепция ;)

У вас много эмоций и много гонора, но нет ни одного аргумента, почему кофеварка, по-вашему, проще космолёта.

Ни при создании клетки, ни при создании Библии не "применялись конвейеры" и технологии не "разбивались на элементарные операции" -- так при чём здесь клетки и Библия? Что за демагогию вы разводите?

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

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

Распараллельте алгоритм архивирование zip7 с составлением словаря и сохранением идентичного качества сжатия?

Программист - это человек, который может алгоритмы на человеческом языке перевести в понятную транслятору форму.

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

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

Это случайно не вы были? #comment_26070160

там мое имя ?

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


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

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

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

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

Попробую объяснить еще раз "от печки".

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

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

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

В разработке программных продуктов все тоже самое.

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

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

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

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

Что же касается разработки алгоритмов, то это для большинства все элементарно.

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

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

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

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

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

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

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

Безусловно, нанимателю всегда хочется получить больше за те же деньги

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

Поэтому и возникает вопрос (дискуссия) , что именно проверяет тест

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

Но тогда надо и тесты делать соответственно

Кому "надо"? Наниматель решает свои задачи, а не пытается соответствовать вашим представлениям.

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

Ну явно ни первое и не второе.

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

компилятор вроде как оптимизирует рекурсию в цикл.

Хвостовую рекурсию. И не только в функциональных.

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

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

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

Для компилятора (особенно ФЯП) различия между кучей и стеком может и не быть вообще: https://habr.com/post/540502/

О каких алгоритмах вы говорите? Речь о простых числах! Это азы даже не программирования. Алгебры азы.

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

Ну и при чём здесь факторизация?

До вас в этом топике никто о факторизации речь не вёл.

Да тут не алгоритмы, тут проверка на логику больше. Вы точно прочитали внимательно текст? Они проверяют что число делится на 1 и на себя. О том что они выполнили остальные проверки - нет речи.

Ну и алгоритмы в данном случае это уже про оптимизацию а не решение)

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

Я примерно год назад что-то похожее решал в рамках Advent of Code. Сам факт решения похожей задачи - помню. Как именно решал - совершенно не помню.

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

вы серьезно? считаете, что это сложная задача?

Нет, я считаю что это очень простая задача. Потому я и пишу: отрицательный результат этого теста значим.

НЛО прилетело и опубликовало эту надпись здесь

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

А если этот человек в силу проф.деформации (зазубривание) не способен придумать алгоритм за пределами того, что он зазубрил и прочитал?

Если он уверенно и правильно пользуется зазубренным - в чем проблема? Пока одни придумывают велосипеды - он берет готовый ;)

А как определить, что в данном конкретном случае именно этот алгоритм правильный?
Условия задачи в бизнесе практически никогда не сформулированы так, как в учебнике

А как определить, что в данном конкретном случае именно этот алгоритм правильный?

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

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

И много таких проектов, где надо придумывать абсолютно новый алгоритм ?

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

наоборот, все бизнес задачи - это сборка из 20 имеющихся велосипедов - то самолета, то вездехода, то подводной лодки, по желанию заказчика

Открою секрет, практически все бизнес-задачи это придумывание велосипеда, в той или иной степени, правда, к велосипеду предъявляются определенные требования.

Очень неудачный пример. Велосипеды придумывали, придумывают и будут придумывать. Сравните велосипеды с начала 20 века с шагом 10 лет. Вы очень удивитесь.

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

Знание? Знание конечного числа алгоритмов без умения их писать - худший навык, который прививает массовое обучение. Когда решения просто зазубриваются. Сначала в школе, потом ЕГЭ, потом в Вузе...
Я, конечно, собеседований не веду. Я школьников учу. НО есть такая проблемка. Типичный пример: Ввели два числа. Вывели периметр... Добавили третью координату. Надо вывести площадь параллелепипеда (коробочки). Стон: "Мы не знаем формулу..." А подумать?

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

А подумать?

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

Вот тут не знаю... Я исходный комментарий понял так, что не могут сделать именно простейшим перебором. Проверяют что делится на 1 и само на себя. И на этом всё, считают число простым. От чего собственно глаза на лоб слегка и полезли. Впрочем в жизни мне приходилось удивляться многому. Например однажды, ещё когда писал на флеше, предложили сделать демку со стрельбой из пушек по холмам. Причем по результатам сложилось полное впечатление, что сделали это только для того, чтобы получить от меня этот код, потому что сами написать такого не могли. Ну не проходили в 8-м классе на уроках физики, как снаряд летит в холм, а не по плоскости ! Решето кстати тоже отнюдь не бином Ньютона, как изволил выразиться господин Коровьев из классического романа. Просто не понимаю, чего тут такого особого надо помнить, чтобы быстренько его накидать...

Ну а собесы... Честно говоря последнее время у меня устойчиво складывается впечатление, что нужны они не для найма, а исключительно чтобы почесать ЧСВ (чувство собственной важности, Кастанеда) овер 80-го левела собеседующего. По мне, так ничто не дает узнать человека лучше, чем небольшое тестовое задание на 1-3 дня. Поэтому когда мне предлагают собес на любую тему кроме самых общих (описание опыта, навыков, проектов и т.п.) просто посылаю в пешее эротическое. А сейчас вообще забил на всё большой и ржавый болт. У меня есть некая сумма денег, чтобы очень скромно прожить год-полтора. Вот и пилю потихоньку свой игровой проект.

НЛО прилетело и опубликовало эту надпись здесь

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

По мне, так ничто не дает узнать человека лучше, чем небольшое тестовое задание на 1-3 дня

Особенно когда есть 5 - 10 вакансий, а там задание на 1 - 3 дня.

И как сказали ниже, "тупое решение в лоб - это почти гарантированный отказ в найме"

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

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

Не, а. Просто надо в инете поискать решение. Так как задача с бородой, то ее гениальное решение есть в инете. И зачем изобретать велосипед из соседнего магазина.

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

Именно этому и учили в Вузах (по крайней мере, я так считаю и этому учил).

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

Серъезно? Задача на проверить, что "число делиться только на 1 и на само себя" - это надо зубрить 100500 алгоритмов? Это чуть-чуть сложнее "выведите сумму двух чисел до 1000". Это просто тривиальное задание на посмотреть, что кандидат может один цикл написать и закодировать квантр общности. По описанию вообще не похоже, что автор подразумевает даже оптимизацию про то, что можно гнать цикл до корня. Да, в этой задаче можно и умные алгоритмы применять, но это явно не то, что от кандидата на бумажке требуется.

По факту не нужно очень многого знать, но если долгое время не сталкиваться с этим, то легко забыть и затупить, особенно если про сам алгоритм не помнить. Я например в последнее время занимаюсь на 90% работой с БД, написанием крудов и сбором метрик. Когда-то я работал с opencv и если меня попросят написать простой код на собесе связанный с этим, то я не смогу этого сделать, но если на работе попросят меня это сделать, то я посмотрю на код который я писал раньше, немного почитаю сохраненные статьи/материалы и напишу его. Из недавнего меня попросили написать написать воркер пул на собесе, но последний раз я это писал что-то похожее довольно давно и сходу не смог написать (в моём понимании эта задача не сложнее чем реализовать алгоритм решета эратосфена) и по сути это я думаю это стало красным флагом для собеседующего. На мой взгляд такие штуки не пишутся каждый день и держать в памяти это трудно, но поскольку это популярный вопрос людям приходится это заучивать. В целом собес был забавным, меня спрашивали про штуки вроде выравния полей у структур и про особенности работы словарей. В конце я хотел узнать, что же это за проект, где люди экономят память на выравнивании структур(не просто же так это спрашивали) и мне сказали, что это будет обсуждаться на след. собесе и сам человек не в курсе этого. И получается, что человека ищут под определенный пул проектов(это была обычная компания с +/- определнным пулом проектов), но в собеседование было просто на общие знания. Поэтому просить развернуть список, написать быструю сортировку по памяти, решить логичускую задачку, найти решение за O(log n) а не O(n) м.б. в этом и есть смысл если этого требует проект, но если человек будет работать писателем апи, то эти задачи вообще ничего не покажут. Человек может знать все особенности рантайма, но не знать как правильно написать модуль аутентификации или оплаты. И наоборот кто-то не знает как найти простое число, но он умеет хорошо работать с БД и знает как правильно написать платежный модуль. Если это большая компания и она предлагает выше рынка и просит решение алгоритмических задач, то это ок, но когда это просит обычная компания, где нагрузка в 100-1000 rps, то хз зачем им это. На мой взгляд это выглядит это как если бы на стройке искали рабочих у которых есть высшее образование, а для должности прораба просили бы степень кандидата наук

Вы долгое время не писали циклы и забыли как это делается? Вам для этого надо смотреть на более ранний код?

в моём понимании эта задача не сложнее чем реализовать алгоритм решета эратосфена

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

Изначально вопрос был про простые числа, а не натуральные

Эмм, вы серьезно? Какие именно алгоритмы нужно зубрить, чтобы банально в цикле поделить тестируемое число A на все числа от 2 до A-1 и убедиться, что результатов без остатка нет? А потом немного подумать, и делить на числа от 2 до А/2. А потом подумать еще чуть-чуть, и делить на числа от 2 до sqrt(A)?

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

А потом немного подумать, и делить на числа от 2 до А/2. А потом подумать еще чуть-чуть, и делить на числа от 2 до sqrt(A)?

А потом ещё подумать, можно ли как-то оптимизировать это, поделив только на нечетные числа из этого диапазона. Как минимум, можно шаг цикла сделать равным не 1, а 2, потому что четные числа больше 2 нет смысла проверять.

А потом ещё подумать, можно ли как-нибудь также исключить остальные непростые числа (на них-то тоже смысла делить нет).

А потом ещё подумать, сколько делений укладывается в один цикл процессора и можно ли это как-то обхитрить.

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

А потом ещё блин, потестировать же надо, вдруг там у нас 100 квадриллионов +1 делится на два без остатка из-за "округления" (привет, JS!).

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

---

Вот так "простая задачка" выбивает из работы на день "крутого заучку-программиста".

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

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

Тут все зависит от чудаковатости интервьювера. Очевидно, что тут интервьювер был бы доволен нулевым шагом. Цикл до n-1 уже пошел бы на проходной бал.

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

Ну такое себе. Если этот Груг где-то находит "сдвиг на -1" или работает с вещественными числами при написании тупого цикла до n-1, то он вполне также может и какой-нибудь IsOdd() из какой-нибудь библиотеки взять, проверить на числах от 2 до 7 а также 41 и 42, убедиться, что оно все работает и закрыть таску. (Бонусные очки за рекурсивную реализацию IsOdd за O(n)).

Увы, я видел, как человек, получив описание htonl(3) в виде рисунка на бумажке, реализовал её следующим образом:

  1. библиотечной функцией переводим число в двоичную строку;

  2. библиотечными функциями делим строку на четыре куска заданной длины;

  3. библиотечной функцией сцепляем куски строки в другом порядке;

  4. библиотечной функцией переводим двоичную строку в число.

Всё строго по ТЗ! Что не так?!

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

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

Это же задача на бумажке, и цель у нее только в том, чтобы проверить базовое мышление за пределами гуглинга, так что можно остановиться на любом этапе оптимизации! Можно даже извиниться за эту проверку сразу, обосновав потоком кандидатов, которые вот правда не могут. Я бы не завернула (изолированно только из-за этого) даже за перебор 2..A-1.

И адекватный диалог примерно такой:
- нужно вывести список простых чисел в диапазоне от 1 до N, как будете решать?
- можно для каждого числа перебрать все числа 2..A-1 и убедиться, что все они дают остаток, но наверняка для этой задачи есть более оптимальные алгоритмы, которые я в реальной работе погуглю, чтобы не изобретать велосипед
- хорошо, напишите на бумажке простейший вариант
- (пять строчек кода через пару минут)
ВСЁ!

Опционально:
- а как можно сделать код с "2..A-1" быстрее?
- (любая из идей оптимизации, шаг два, уменьшение диапазона, что угодно)

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

А потом еще подумать и понять что проверять делимость на 4 смысла нет если на 2 не делится, и вообще подумать про множители уже проверенных чисел.

Кажется на собеседовании вас бы завалили )

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

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

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

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

И это отличная проверка на то, что человек может выразить примитивные вещи в коде.

Это было даже в ЕГЭ по информатике, когда я сдавал. И решалось брутфорсом на любом ЯП

с задачками на знание алгоритмов проверки чисел на простоту надо сразу
бежать. Вы кого ищете-то ? Кто зазубрил 100500 алгоритмов или кто будет
реально решать задачи бизнеса ?

Это простая задачка и такой я лично, был бы даже рад.

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

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

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

А что не так с этим решением?

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

Ну, хотя бы то что оно вообще ничего не решает? Проверка `x % 1 == 0 && x % x == 0` - это тавтология на области определения.

Читаем полностью условие:

Из примера: есть задача вывести простые числа, простое число делится без остатка только на 1 и на себя
Как задача поставлена, так и решена.

Из примера: есть задача вывести простые числа, простое число делится без остатка только на 1 и на себя

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

любое число делится на себя и на 1 без остатка, нужно исключить все остальные варианты

Это Вы были у нас на собесе?

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

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

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

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

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

Мне вот 30. Я пятом классе я получается был... так давно, что забыл сколько лет назад. 20 вроде бы получается.

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

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

P.S.
В моей голове, про решето Эратосфена я услышал впервые дай бог лет в 19, в ВУЗе на базовом курсе криптографии. До этого момента вообще не припомню, чтобы я хоть где-то его применял, нужды не было. Да и в целом не так чтобы помню, чтобы а обычной средней школе уделялось хоть какое-то особенное внимание простым числам, т.к. в школьной программе моих лет не так чтобы их свойствам было какое-то применение.

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

по сложности ушли недалеко от fizzbuzz.

— Во валит! (С) анекдот

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

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

Для меня вообще писать код в live режиме - это стресс, который я так и не смог преодолеть) Так что для меня что бумага, что IDE, всё одна боль) Я прост стараюсь не ходить на собеседования, где надо писать код, благо таких хватает)

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

НЛО прилетело и опубликовало эту надпись здесь

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

Это на бумаге-то?

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

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

НЛО прилетело и опубликовало эту надпись здесь

Нет, не поэтому.

видимо у вас была какая-то школа для вундеркиндов, т.к. унас в 5-м классе были дроби и ещё что-то простое, информатика вообще появилась в классе 9-м где-то

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

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

Вы правы, получается n * sqrt (n), что в целом тоже немало.

А откуда множитель N? :)

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

А, точно!

делители, к слову, тоже можно перебирать только из ранее найденных простых чисел. Так что, если N - это кол-во проверяемых чисел, то там все же N * sqrt( N/log(N) ), учитывая теорему о распределении простых чисел. Но это навскидку, могу ошибаться

Только вы не в том порядке функции применили. Должно быть N * pi (sqrt (N)), что равно N * sqrt (N) / log(N)

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

если есть список простых чисел - бери его и выводи, зачем сравнивать еще что-то???

Синьорный код.

а, я что то прочитал как будто надо из списка какого то рандомного найти простые числа)

А хранить-то этот список где?) В современном стандарте FIPS 186-5, минимально приличными модулем для RSA считает 2048 бит. А в целом приличными считаются числа длиной вплоть до 4096 бит. Модуль складывается из перемножения двух простых чисел, так что можно считать, что нам нужны два простых числа минимум по 1024 бита длиной.

Боюсь представить каков размер такой таблицы)

Врядли там предлагается искать все простые числа до ближайшего миллиарда.

Если смотреть не те задачи, которые возникают в криптографии, а те которые ставятся на собеседовании - то там числа обычно до миллиарда, а иногда и до миллиона (чтоб проще считалось).

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

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

Вот только проверять на простоту числа в 4096 бит не выйдет ни влоб (делениями с остатком на все до корня от проверяемого), ни решетом Эратосфена.

Да, для таких жирных чисел придумали статистические тесты)

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

Тупо цикл от 2 до n-1 с булевым флагом подойдет.

Все так говорят, а потом отказы вида "ой, а почему вы многопоточность не учли? Ну и что, что задние на 10 минут и в условии этого нет!". Увидев задачу писать код на бумаге, я бы просто ушёл, ведь там ещё и к синтаксису докопаться могут.

Смысл в эту лотерею играть? Это вы адекватный (наверное), а чаще в таких случаях скорее не везёт чем везёт.

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

зачем это аналитику? Скуль то понятно, а вот массивы (массивы? в питоне же нет массивов), "простые числа" - нафига?

зачем это аналитику?

А чем занимается аналитик?

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

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


Инструменты дата-аналитика - пандас и SQL. И биай-инструменты

(и это еще при том, что на рынке половина вакансий будет не с питоном, а с экселем (пусть и скуль там тоже есть))

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

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

КМК, если человек способен на такие трюки, то налабать простенький алгоритм он тоже сумеет.

так это не связанные вещи

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

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

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

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

А что касается курсов. типовые курсы аналитика - 6 месяцев. Второе высшее - 2 года. Вот за 2 года можно реально чела прокачать до мидла (если чел будет стараться). Но за 6 месяцев - нереально (в массе). Но государство не хочет оплачивать 2 года учебы. А что касается коммерческих курсов - так клиенты не захотят платить в 4 раз больше. Сейчас полгода курсов стоят порядка 100к

(массивы? в питоне же нет массивов)

Я тут мимокрокодил. И не сварщик. Но вот они. Да и list под капотом сделан на динамическом массиве (если я правильно понял, когда копался).

Интересный зверь.. Эррей в аналитике это обычно нампи эррей

А вот массивами олдовые ребята называют именно списки в питоне (в некоторых учебниках детских)

Мда кринж конечно.

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

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

..на джуниорскую вакансию..

А вы хотите, чтобы вам предложили ручкой на бумаге простенький фронтэнд написать?

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

А потом имеем СПА, которое грузится по десятку секунд, лагают выпадающие списки и вкладка периодически падает. А всё потому, что там где-нибудь сложность О(N^4), где этот фронтендер наговнокодил.

Когда станет совсем невмоготу этим пользоваться, позовут того самого Васю с зарплатой +20%, который перепишет проблемное место на N*log(N). Увы, это дешевле, чем держать штат хороших программистов (которых ещё найти надо).

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

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

Часто нет какого-то одного места за O(n^4). Никакий профайлинг не поможет. Просто тупо весь код равномерно тормозит. Так что этому Васе придется перелопатить и переписать половину всего кода.

Значит, бизнесу не нужно быстрое приложение. И тратить деньги не будут.

А можете объяснить, что тут не так?

"Из примера: есть задача вывести простые числа, простое число делится без остатка только на 1 и на себя. Несколько последних кандидатов просто проверили, что если число делиться на 1 и на себе без остатка, то оно простое!!!"

Я не увидел противоречий между описанной вами формулировкой задачи и тем, как вы описали её реализацию.

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

Да, благодарю, за разъяснение, тупанул.

Любое число делится на 1 и на себя без остатка. Получается, 4 - простое?

НЛО прилетело и опубликовало эту надпись здесь

Вот и я о том же

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

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

простое число делится без остатка только на 1 и на себя

Хорошее определение. Я же правильно понимаю, что -1 — простое число?

Не-а, -1 не является натуральным числом. А простое число - в первую очередь именно натуральное.

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

НЛО прилетело и опубликовало эту надпись здесь

А написать надо чисто логику или код?

Кажется, в таком подходе проблема в том, что программирование очень редко связано с алгоритмами. По большей части ты склеиваешь миллион библиотек из npm и maven, чтобы они в связке давали то, что написано в ТЗ. Или запинываешь это миллионами ямлов в кубер. Или что-нибудь в том же духе. В крайнем случае, это что-то с Литкода про то, как правильно использовать хэшмэп. От этого задачи, в которых присутствуют простые числа, которые на что-то делятся, и прочая математика, выглядят дико, это нечто прямиком из другого мира. Наверное, дата-саентисты и чуваки которые пишут финансовые алгоритмы такое могут решать, но обычный человек будет помножен на ноль от самого факта наличия такой задачи. Имхо, лучше давать задачи вида "вот тебе ноут, за N часов напиши простенький аналог Твиттера". Там же можно и систем дизайн поспрашивать, что делать если действительно нужно писать Твиттер, каке там базы использовать и нужна ли для твитов Кафка.

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

Вообще, нет проблемы. В гугле и прочих фаангах уже давно кандиадту выдают ноутбук с редактором. Не полноценным IDE, правда. Ставить все возможные IDE - не скейлится, да и не честно. Кому-то повезет, и им достанется привычная среда, а кто-то пишет только в emax только вот с такими вот плагинами и ему без разницы, достка или vs code - одинаково мерзко.

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

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

Немножечко коряво, вот например это - "Мужи же видя, что люд тянется на курсы эти. Решили тоже не теряться, начать из далека.", но в целом респект, написано классно ! Плюсую ! А вообще мне кажется все эти курсы отстойное фуфло. Главное что человек должен выносить из ВУЗа, это умение УЧИТЬСЯ. Т.е. читать умные книжки, экспериментировать, не бояться ошибок и т.п. Особенно айтишник, который вообще должен учиться всю жизнь. Сам вот в свои 60+ изучаю совершенно новую для себя тему - разработку мобильных игр. Без всяких курсов. Просто смотрю отличный мотивирующий канал на ютубчике https://www.youtube.com@nikitadeveloper и тупо пишу код. Ну и что бы мне дали какие-то курсы ??? В лучшем случае рассказали бы про какой-то движок, типа юнити или анриал. А так я полез в глубины vulkan, со всеми его прибамбасами, уже научился решать на GPU дифуры и делать довольно неплохую физику, плюс много чего ещё. Ну кто блин этому научит ! Только сам всё, сам, своими ручками...

Большинство вузов отстают от индустрии лет на 5, а это очень много, базу вуз может и даёт, но помимо базы в придачу насыпает бесполезных знаний, с курсами бед тоже хватает, знаю, что многие техникумы готовят сильно лучше всяких вузов и курсов - мой совет: идти в технарь, если сам прям не в силах

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

Не знаю как сейчас дела с программисткими техникумами - в конце нулевых их просто не было.

Мне довелось учиться в вузе по специальности с кодом "09.03.04 Программная инженерия". Что это дало?

- C/C++ как база. Хорошая и полезная вещь. Великолепно подходит для изучения основ. Поверх C можно уже и Java накатывать, и шарп, да хоть питон тот же. Разобравшись с базой. Без базы потому что ересь вылезает. Что до актуальности... Си нужен и никуда не денется. Плюс база.

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

- Prolog для общего развития и понимания того, что под разные задачи нужны разные языки.

- Java давалась под конец. И... Что там может устареть? Там же выполнять всё надо не копипастой. Хоть на двадцать первой пиши лабораторные. Главное чтобы работало как в задании указано.

Было ещё по мелочи - 1С, немного для веба всякого. Ну и работа с БД, git, сети, алгоритмы и т.п. само собой, без этого никуда. Так что всё очень даже для программирования. И никакое отставание от индустрии не чувствовалось.

Мой стек сейчас -- Java + Spring, вынесено всё из вуза ещё. Практика уже нарастила мясцо, разумеется, но без мучений и прочего. Просто дополнения к уже знакомому инструменту. Трудоустройство джуном сразу после окончания вуза, да ещё и с возможностью подумать, какой из офферов принять.

Так что в вузе надо, как и написал eugenk, нужно просто учиться. Не копипастить, не зубрить, не тырить у других лабы. А там и понимание придёт, как облегчить себе жизнь различными фишками вроде Swagger, docker, всяких фреймворков и т.д.

Ну а тот, кто не хочет учиться, ничего и не вынесет после вуза. Заберёт корочку и уйдёт куда-то подальше от специальности, потому что завалит сотню собеседований из-за того, что надеялся выехать только на зазубренном "Hello world".

НЛО прилетело и опубликовало эту надпись здесь

А зачем фреймворки-то? Это уже сахар, который добавлять нужно по вкусу :)

И с другой стороны... Допустим, в программе бы методисты напились и поставили на первый курс Java. И сразу первый spring, прям отдельными парами, раз фреймворк нужен. По рукам будут бить за использование более свежих версий. И... Что? Ну устареет несколько методов и потребуется всё время в maven repo выискивать древние библиотеки. Проапгрейдить до третьего спринга дело пары часов неспешного ковыряния, а то и меньше, так как всё равно ничего заумного делать в вузе не просят. И различия в версиях не так огромны.

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

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

А, тю, да зачем на первый курс тогда? Давайте ещё сильнее будем продвигать "Войти в IT и получать 100500 деняк" и добавим как основной школьный предмет вместо всех предметов (грамматические ошибки плагин в IDE подсветит, калькулятор примеры посчитает, чтение документации литературу и английский заменит). Только труд оставить. Сгоревшие стулья чинить

НЛО прилетело и опубликовало эту надпись здесь

Ну вот вам пример. Курс микропроцессорных систем, лабораторные работы.

Как они могли бы выглядеть на современном оборудовании? Студент пишет программу в IDE, запускает на эмуляторе, отлаживает. Когда приходит время сдавать - прошивает в железо и демонстрирует. Или можно даже без железа, если оно такое дорогое.

Как они выглядели на древнем оборудовании? Студент писал код на листочке, переводил в машинные коды по таблице (ну, лично я нашёл в инете асcемблер для Z80, но вот остальные делали всё вручную), шёл в аудиторию, 4 часа потея ждал своей очереди (в аудитории было очень жарко из-за энергопотребления тех "микропроцессоров"), натыкивал программу на дребезжащей клавиатуре, час отлаживал на железе, шёл домой переделывать программу. С третьего-четвёртого раза сдавал.

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

у нас слава богу был не один "микропроцессор" на всех. А 15 чемоданов, на которых было по 8 светодиодов и по 10 клавиш. Их и программировали. Ну кто программировал, 2-3 человека из группы кто ассемблер знал, остальные списывали 1-в-1. И таких чемоданов, аж 3 вида, аж на 3 семестра.

А вот моя ситуация.

Начали изучать программирование с Паскаля, изучали весь семестр по одному оператору в неделю, что тут вообще можно было изучить? Параллельно было изучение структурного программирования на блок-схемах, тут толку было больше, но спасли в итоге практические работы по Паскалю. Без них бы вообще ничего не выучили. Однако, изучать структурное программирование сильно мешала концентрация преподавателя на удобном UI (в текстовом-то режиме!). Нет, UI - штука важная, но требовать хорошего UI от тех кто даже циклы не освоил? В целом, "научились" лишь те кто и так программировать умел.

Потом было объектно-ориентированное программирование, на С++. На нём мы изучали паттерны ООП и архитектуру приложений. В целом, вещь нужная, но давать её надо было тем кто уже умел программировать, а мы в итоге за весь курс так ничего и не написали. Кроме курсовой работы, но её я тоже написать не смог (хоть программировать и умел).В целом - ни ООП нормально не изучили, ни плюсов (если точнее, мы выучили тот самый язык "Си/С++", на который нормальные программисты ругаются матом).

Далее - ASM. Вроде и нужная вещь, но почему только реальный режим x86 и только синтаксис того досовского MASM? Были практические занятия, на первом из который нам достались... рабочие станции на Линуксе без манов и доступа в интернет! За всё занятие мы так и не смогли скомпилировать "Hello, world!". Если до процентов перед регистрами и долларов перед константами наша группа методом тыка догадалась, то вот переставить операнды местами мы так и не смогли. Позже стало лучше, но в целом я так и не понял нихрена.

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

Вот Subversion, СУБД и сети ЭВМ - это да, это было полезно. Правда, с первого всё равно пришлось на гит переучиваться, но это я делал хотя бы в ногу со временем, успел даже сторону Mercurial принять в холиварах. А, ещё теория автоматов мне здорово помогла при игре в Factorio, но я не уверен что это считается.

Не повезло. А вы по какой специальности шли? И в каком году?

Паскаль у меня только в школе был, в вузе уже другое шло. Си ко второму курсу плавно перетёк в QT, ну и прочее. Вуз не самый понтовый по Петербургу и с уклоном в связь (СПбГУТ им. проф. М. А. Бонч-Бруевича), но преподы и на кафедре программистов великолепные.

ВМКСиС (Вычислительные машины, комплексы, системы и сети). 2007й.

А, ну у меня информация свежее -- поступление в 2017 было, т.е. через десять лет. И специальность уже.

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

Та же специальность - 2201.
Закончил в 1998.
Было древнее железо, 588 серия, если не ошибаюсь. И прекрасные педагоги: x86 asm protected mode, написание компилятора и линковщика и т.д.
И, конечно, были те, кто тянул от курсовика до курсовика, и те, кто горел и учился сам сверх учебного плана. Интернета тогда еще такого не было - ходили с винтами в гости, менялись компиляторами и доками. Самая популярная тулза для образования IDA и т.д.
Я до сих пор горю этим делом. Из моего курса, пожалуй еще двое.
В общем, разделяю негодование автора статьи. Быть неучем и программистом сейчас возможно. Но стыдно.

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

Например, будучи Java разработчиком очень часто пользуюсь линуксовым perf’ом и strace’ом, чтобы, например, посмотреть что происходит внутри Postgres или Redis и почему он работает так как работает в той или иной ситуации. Gdb, чтобы более детально разобраться на какие нативные функции самого JVM HotSpot проксируется nio. Это сильно упростило жизнь при решении проблем с производительностью IO интенсивного приложения.

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

Большинство вузов отстают от индустрии лет на 5

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

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

Если человек хочет быть программистом, но не во всяких околонаучных или science-heavy сферах, то университет для работы ему не нужен. Если человек всё равно пошел для того чтобы был диплом/отсрочка, то это скорее вопрос к тому, а проблема ли это университета, что человек хочет от ВУЗА того, для чего он не предназначен.

Все чистое ИМХО конечно же.

Добавлю, что задача ВУЗа научить двум вещам: умею учиться самостоятельно и связи. Плюс теоретическая база, на фундаменте которой строится дальнейшее обучение/исследовательская деятельность/развитие.

У нас в ВУЗах со связями совсем плохо, знаю)

А сразу в профессию — это ПТУ, техникум, Ausbildung (если в Германии какой-нибудь)

Если человек после ВУЗа не пошёл работать по специальности, то да, это проблема ВУЗа. Количество трудоустроенных по специальности должно быть единственным КПИ для ректора и деканов.

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

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

распределение и прочие карательные меры

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

  1. КПИ для руководителей ВУЗа/факультетов/кафедр - количество трудоустроенных особей. Только это и ничего другого. Неважно сколько ты принял. Неважно сколько ты выпустил. Считаются только трудовые договора (абсолютно добровольные), больше ничего. Каждый руководитель знает что есть % будет меньше N, он не получит фондов, премии, его лично наоборот депримируют. Если показатели не выполнятся 2 или 3 года подряд - он вылетает с работы и во всех СМИ его славят как не справившегося.

  2. В ВУЗ поступить сложно - надо иметь уровень знаний, превышающий школьную программу. Учиться ещё сложнее (!). Большая ошибка когда поступление (на учёбу, работу, депутатом...) является конечной целью, надо сделать так чтобы это было только началом болезненного, кровавого пути. Примеры есть! Военные училища или творческие ВУЗы. Не знаю как сейчас, но раньше поступить на актёра было сложно (даже способные ребята поступали со 2-3 раза) и каждый семестр людей планово отчисляли. Оставались только те кто реально тянет. Так же д.б. в обычных ВУЗах - ты можешь учиться только есть правда очень-очень этого хочешь. Нагрузка д.б. такой, что ей-богу-лучше-в-армию-сходить-чем-так-корячиться! Стипендия д.б. такой чтобы можно было плюс-минус прожить не нанимаясь на подработку.

  3. Отменить нахрен полное среднее образование в школе. После 9-го ты идёшь или работать, или в ПТУ, или в технарь. Каждый инженер должен освоить рабочую специальность! Если хочешь - потом доучивайся в ВУЗе. Практика на реальном производстве - с первого курса и постоянная, а не месяц летом после 4-го. Все студенты без исключения участвуют в реальных, нужных промышленности, проектах с первого курса.

  4. Отменить все отсрочки/освобождения от армии кроме здоровья, ухода за больными. В армии либо служат все, либо она полностью профессиональная. Разумеется, армия д.б. такой чтобы служить там было можно, даже если ты маасквич :)

Конечно, этого ничего не будет потому что всем пофиг :)

Если человек после ВУЗа не пошёл работать по специальности, то да, это проблема ВУЗа.

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

Вот если это частный ВУЗ, то такая ситуация может вести к подрыве авторитета и соответственно потери аудитории.

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

Впрочем, говоря про КПИ, я имею в виду именно систему.

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

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

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

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

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

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

Почему "будет никакая"? Если студента-айтишника дрочить компутер-сайенс, он от этого станет худшим айтишником? Если студента-химика дрочить химией и постоянно стажировать на предприятии - это будет неэффективно? Да, химик не пойдёт клепать сайты (закинув куда-то свой диплом). Но именно этого я и добиваюсь: химик идёт химичить, программист прогать, строго по специальности. Отличие от армии в том что ты сам пошёл именно в этот ВУЗ и именно на эту специальность. Я за осознанность и ответственность.

И сразу отвечу на "CS для сайтов нинада". Согласен, поэтому я и направляю школоло в технарь: освоил базу - иди, двигай формы. Хочешь почти_науки - доучивайся в ВУЗе. Плюс курсы для вкатышей - готовят ИТ-пролетариат.

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

Пойдёт туда, где можно больше заработать, меньше работая.
Если нет 500 вакансий на высококвалифицированного химика, которому со студенческой скамти дадут ну хотя бы 100к, 500 выпускников пойдут в МВидео-Эльдорадо впаривать ноуты. И ректор ВУЗа тут ничего сделать не может.

Всё верно. Мест на обучение по химии будет примерно столько сколько требуется индустрии. Будет конкурс и отбор самых подходящих.

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

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

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

готовить 500 химиков, из которых человек 5 будет толковыми, и 2 возьмём на работу

Выкидывать людей - неэкологичненько получается. Почему п/э пакеты экономить надо, а людей нет? Впрочем, зависит от страны и её экономики. Если ты США, можешь брать массой бабла, если Китай или Индия - массой народа. У нас нет ни того, ни другого, поэтому к ресурсу - людя́м надо относиться экономно и мой путь представляется более интенсивным.

Почему п/э пакеты экономить надо, а людей нет?

Тот, кто экономит, владеет пакетами. А людьми не владеет. У них своя воля и своё видение, куда идти вместо "сэкономленного" пути.

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

Ну и отлично. Пусть студенты сами себя экономят. И государевым людям не придётся голову ломать.

И я о том же! Пусть сами. Не мамка, не родственник, не как все. А именно что сам - пусть идёт по жизни осознанно и на каждом повороте сам принимает решение что лично ему надо, а что нет.

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

Так это вам одному надо. Все остальные - мамки, студенты, ректоры - довольны ситуацией и менять её не хотят.

Вы себя послушайте: "государство тратит большие ресурсы впустую". Значит, экономим, уменьшаем поток студентов в 10 раз. 90% преподавателей на мороз. У остальных нагрузка повышается, потому что работать со студентами надо педагогически (как вы выразились, "задрачивать"), а не как сейчас, оставляя ещё время на научную деятельность. Кому это надо?

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

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

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

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

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

Странный вывод, я ничего такого не говорил.

  • студенты: никакой прибыли с учёбы они не получают - и что, они все блогеры? Нет, они чем-то занимаются, как-то зарабатывают. Ну и будут дальше заниматься тем же, только без липового (сиречь незаслуженного) диплома в кармане;

  • преподы: да, какое-то их количество высвободится. Но я считаю что если человек работает плохо (а они по моему КПИ работают плохо), то лучше его уволить. Пусть поищет место где он сможет приносить реальную пользу. Но даже если они все, на 100% останутся без работы и сядут на пособия, нагрузка на бюджет не увеличится - они же и так на бюджете;

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

    • увеличить ЗП тем преподам что останутся;

    • помогать тем предприятиям где студы будут стажироваться;

    • решать давние проблемы инфраструктуры: дороги, ветхое жильё и пр.

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

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

Отличие от армии в том что ты сам пошёл именно в этот ВУЗ и именно на эту специальность. Я за осознанность и ответственность.

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

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

половина потока не могла ответить

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

Которых с удовольствием потребляет индустрия и платит им столько сколько они действительно стоят

Ахахах. Если бы крутых выпускников-химиков сразу брали на 500к денег, и они бы действительно были мотивированы во всей этой дрочке. Тогда и в жёстком отборе в ВУЗе не было бы нужды, все бы и так жопу рвали в учёбе, чтобы пройти отбор у работодателя.

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

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

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

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

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

население не идёт -> у бизнеса дефицит кадров -> бизнес вынужден адаптироваться -> условия меняются -> население идёт :)

При этом, выплачивая большие з/п специалистам, остаётся меньше денег топ-менеджерам и собственникам. Вопрос: зачем это бизнесу?

При условии фиксированного бабла - незачем. Но имея хорошие кадры, бабла можно поднять больше. ИТшка как бы свидетельствует: куча бабла вообще на ровном месте. Условие - хорошие идеи и квалифицированные исполнители.

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

О даа. Зп в том же роскосмосе напомнить ? Или автовазе ?

У кого то по ходу розовые очки, неплохо бы их снять

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

розовые очки

Ну конечно! Я же сразу заявил что обсуждаю не какую-то реальную реальность, а фантазию: а как было бы если система была построена вот так. Фантастика, футуризьм и вот это всё. Кому-то нравится другая реальность в сугубо негативном ключе, а мне - вот в таком ... необычном :)

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

НЛО прилетело и опубликовало эту надпись здесь

Этто есть плёхха! :(

Поэтому я и рассуждаю про КПИ. Финансирование ты получаешь только и исключительно по результатам трудоустройства выпускников.

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

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

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

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

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

И после этого скажи, что дело в системе.

Пфф. 25-30 лет отставания - не хотите? Правда, это не программирование, а приборостроение...

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

Учиться учиться в течении 6 лет, по моему, тоже фуфло.

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

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

Ага... Так точно ! Давал уже тут выше ссылку на ютуб-канал который регулярно и с огромным интересом смотрю (увы, движок хабра её немного покоцал). Там чувак с точки зрения психологии разбирает мобильные игры, причем топовые по доходности. Дико интересно ! Очень советую, если не боитесь сильно ухудшить мнение о человечестве в целом. Что заметил для себя, нигде нет физики ! Не разлетов там всяких и фейерверков, а нормальной физики, где надо решать дифуры и т.п. Да и графика как правило дешманская псевдо-3D. А что, пипл хавает. Доходность - десятки миллионов баксов в месяц, причем игра говнище из говнищ. Для бизнеса этого достаточно. Чего на Васю тратится ??? Скоро GptChat будет такое лабать. И Вася вообще станет бомжом и будет жить на помойке. Но я конечно очень надеюсь, что меня оно сможет кормить, однако в какой-то степени пишу и для себя. А самому откровенно халтурить ну просто в падлу. Вот как-то так...

Чего на Васю тратится

Васе можно просто найти место где его знания физики, алгебры и рендеринга будут востребованны. Это фактически любой ААА геймдев, большинство content creations приложений типа Photoshop, 3d Max и т.д и т.п. Еще и конкуренция гораздо ниже будет, так как большинство просто отсеиваются на знании той же математики.

На самом деле такие Васи вполне себе живут в даже не продуктовой конторе в качестве экспертов (в лучшем случае) или огнетушителей (в худшем, правда, им это может надоесть, если пожаров слишком много, а Вася один) Но это все ИМХО, конечно.

Имел схожий опыт. Года два назад. Тоже ТГУ, тоже бесплатно (ну то есть за государевы деньги) только программирование под андроид. Формально все сделано честно - подкопаться сложно. И лекции живьем и задания и тестовое контрольное задание и онлайн платформа и поддержка в чате. Но реально входного тестирования нет, материала много, рассчитано как бы на вечернее обучение занятых людей, а прочитали за неделю и через неделю тестовое задание - научиться нет возможности. До конца года торопились сделать. Я и не пытался ничего сдавать, но потом настойчиво предлагали забрать сертификат о повышении квалификации. В общем освоение бюджетов в чистом виде. Рука тянулась накатать жалобу, но ... как обычно. Было очень брезгливое ощущение от людей, которые в этом участвовали. Надо сказать что прием заявок был организован четко, удобно ненавязчиво - это приятно удивляло.

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

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

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

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

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

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

Спорно.

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

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

НЛО прилетело и опубликовало эту надпись здесь

Прикольно. Не сказать что слишком сложно, разве что непривычно все эти юсы-еры кривоватенькие на лету парсить.

Потому что это "современный древнеславянский" от интернет-хомячков.

А вы возьмите Слово о полку Игореве, приведённое к дореволюционной орфографии, и там уже не в юсах-ерах сложности: "земля тутнетъ, рѣкы мутно текуть; пороси поля прикрываютъ; стязи глаголютъ" и т.п.

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

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

"текстовкрй", "езопасности", точки вместо запятых...

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

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

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

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

Что же в тексте столько ошибок. Кровь из глаз. Русский язык тоже надо учить.

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

Спасибо всем, за комменты об ошибках.

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

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

А тексты если откладываются, значит уже не публикуются...

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

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

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

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

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

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

Если ты пишешь код 5 дней в неделю, то почему это вызывает такой стресс ?

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

наверное потому, что в IDE если ошибся, то тут же исправил, а на бумаге (когда все видят процесс) - всё, мы вам перезвоним?

смотря какая цель у нанимателя, если унизить/отсеять - то да, если таки найти нужного человека - не вижу никаких проблем, ну исправил и исправил, да хоть 10 раз исправляй и переписывай с нуля. Зато будет виден ход мыслей кандидата. Разве не это самое главное ?

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

ок, таким людям можно давать ноут с ide.

Но как я вижу из комментариев - это тоже считается стрессом и зашкваром. Написать 10-30 строк кода на собеседовании ?! Да ну нее, это просто унизительно )))

Если ты пишешь код 5 дней в неделю, то почему это вызывает такой стресс ? 

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

"Вот ты же пишешь код 5 дней в неделю и пел, наверняка, когда-нибудь, почему ты не можешь пропеть текст кода в стиле Тейлор Свифт? Ты же, наверное, ещё знаешь как приседать? Так почему бы не спеть код вприсядку? Чего трясешься? Ты что, не программист?"

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

...на кукле

НЛО прилетело и опубликовало эту надпись здесь

Никто ж не спорит что с IDE удобнее/быстрее/эффективнее, но ведь часто речь идет о 10-15 строках кода, разве нет ? Или на листике просят написать числодробилку с максимальным быстродействием и asm вставками, да и еще под конкретную архитектуру и чтобы без единой ошибки ?

P.S.

просто сам я devops, и код практически никогда не просили писать, разве что будучи сисадмином простейший код (однострочники) для фильтрации логов, например

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

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

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

потому что на бумажке надо писать с начала до конца, а в компьютере разные люди пишут очень по-разному. Причём обычно люди не задумываются о том, как именно они пишут. Например, сначала пишут тело функции, а потом объявляют его название и аргументы. Такое несоответствие вызывает стресс.

Вообще не проблема писать на бумажке или на маркерной доске не по порядку. Да хоть зигзагами и спиралями. Бумажка намного гибче любой IDE.

Статья хорошая, но с пунктуацией на уровне поднимаемой проблематики.

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

а теперь немножко другая сторона медали - так случилось что за примерно 20 лет работы и около 500 проведенных собесов я все еще провожу собесы, но разница в том что потенциальным сотрудникам я буду платить уже из своего кармана, своими кровью и потом заработанными деньгами. Я пробовал брать «перспективных джунов, клянущихся мамой что готовы порвать **** в клочья лишь бы научится», матерых «профи» кивающих на свой гитхаб и запрашивающих 50$ в час сидя в каком нибудь мухосранске и понял пару простых вещей - верить на слово (сиви, гитхаб, тэйк хоум таск) никому нельзя. Реальных и единственный способ понять как человек прогается, думает и на что способен это потратить этот час и сделать лайв кодинг. Говоришь ты сеньор и мастер пера - давай напишем что нибудь из dynamic programming. Не можешь dp - окей, давай что попроще, джэйсончик там какой трансформируем но тогда я жду внимания к корнер кейзам, чистоте и организации кода. Говоришь что ты джун - ну супер, чему вас там учили, покажи что ты знаешь лучше всего. Еще ни разу не было такого что бы человек который нормально смог в лайв кодинг не смог потом эффективно работать с кодом, в противном случае это будет фэйл с вероятностью 95%. Я не готов рисковать деньгами и искать вот эти 5% заек и умничек, потому что головняк и потраченное время того не стоит. Извините аутисты (без оскорблений, у меня ребенок аутист и я знаю что это такое), чувствительные личности которые нервничают и не могут совладать с собой, сумрачные гении которые все могут когда никто не смотрит - вы все идете на мороз. То что устроили инфоцигане сейчас по всему миру, стань пистон девелопером за 4 недели, вот тебе корочка это днищенское дно. Вакансии заваливают дипломированные специалисты со всего мира, с сиви написаны профессиональным писателем сиви, заточенным под вакансию, выглядит так что можно брать не глядя. К сожалению это совсем не так, люди врут, манипулируют и готовы на что угодно лишь бы урвать возможность заработать копейку, войти в айти, а там дальше хоть трава не расти.

TL;DR - лайв кодинг на данный момент это единственный адекватный способ понять что может кандидат. Систем дизайн - понять на сколько глубоко понимание что он делает и зачем. И культурный аспект ака софт скилы такой же критерий как и кодинг - не можешь нормально доносить мысль и изъясняться, жуешь сопли, не стрижешь ногти, пахнешь потом - на мороз, будь ты хоть Эйнштейн.

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

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

ооо, эта ситуация, когда ответов на вопрос несколько и все они - верные, но интервьюер ожидает только один ответ...

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

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

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

И если на эти вопросы даже нормальным людям отвечать тяжело - то как этот фильтр проходить аутисту?

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

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

Да я разве против? Но увы, бывают собеседования - именно беседа, а бывают - как викторина.

Говоришь ты сеньор и мастер пера - давай напишем что нибудь из dynamic programming

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

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

Сеньор не осилил прочесть следующее предложение?

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

А вопрос был

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

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

НЛО прилетело и опубликовало эту надпись здесь

Коммиты не умеете читать? Сомнительно

Коммиты читать - хорошее дело, только вот не факт, что это коммиты кандидата.

Потом, рабочий код почти гарантированно под NDA. Эти коммиты вам никто не покажет. Вам покажут специально отобранные, вылизанные кем-то коммиты, залитые на гитхаб. Да и то, тут вас надо порицать, что вы дискрименируете семейных людей - вам подойдут только те, кто увлечены проганием на все свободное время, у которых других хобби нет. Болшинство разработчиков в опенсорс не коммитят. Так вы сами "теряете 95% адекватных кандидатов, ценящих свое время".

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

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

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

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

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

Что, так и работаешь на заводе? :)

А где мне получить знания, как только начинающему изучать какие-то основы специалисту. Есть какие-то рекомендации по тому, как научиться действительно полезным знаниям и гарантировано получить работу? Просто я всерьез интересуюсь сферой разработки софта на c++. Учусь, гугля нужные мне темы, но есть некое чувство, будто, когда я буду уверен в том, что готов, все места уже будут заняты моими конкурентами.

Если можешь работать - гарантировано найдешь работу.

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

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

Можешь написать программу, например виндовый калькулятор? А с соблюдением рекомендаций MS?
Или сайт, минимальный блог, с авторизацией, редактированием статей, гибкий меню?

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

Ну а где - материалов реально полно. Практику нужно делать.

Публикации

Истории