Сможете посчитать дискриминант или вспомнить теорему косинусов?
Оказывается, помню, но не суть. Я же не профессиональный математик, мне теорему косинусов не грех и забыть лет этак через 10, но вряд ли какой-то геометр ее когда-то забудет. То же самое и с программированием, разве нет? Профессионал не может забыть основы своей области.
Можете привести пример, как это ему пригодится не в 1% решаемых задач, а хотя в 10%?
А что, в джаваскрипте сборку мусора уже отменили? Я временами встречаю страницы, на которых была такая дикая работа с памятью, что плакать хочется. Оптимизация производительности в таком случае — это уже исправление последствий неграмотности разработчика.
Ну вот если как у меня руки дойдут свою программу четырехсеместрового курса выложить сюда, посмотрите, может покритикуете, там весь третий семестр про архитектуру. Правда, практика показывает, что толку от одной теории мало, так что у нас потом все это закрепляется в студпроектах и летних школах по программированию.
Хочу сказать, что знания зависит от области, в которой человек работает, и какие задачи он обычно выполняет
Специальные знания, конечно, зависят от конкретной области работы, но базовые фундаментальные знания одинаковы для всех. Или Вы считаете, что, скажем, веб-программисту, необязательно знать, как куча и стек работают?
Это все, безусловно, полезно знать, но если не нужно использовать в работе, то человек это забудет рано или поздно.
Что забудет, как бинарное дерево поиска работает или что такое виртуальная память? Опять же, я говорю о базовых вещах, которые нельзя «развидеть», если понял принцип :)
С последним абзацем я согласен, только редко уж больно встречаются такие самородки, которые без образования это все могут.
Согласен, работа компилятора, управление памятью, основы БД, архитектура ПО, основы ООП, ФП, параллельного, сетевого программирования и многое другое — это все фундамент, который надо знать. Зоопарк технологий я бы в него включать не стал: грамотный человек, понимающий общий принцип (у которого сформирован вот этот фундамент), вполне в состоянии разобраться с новым языком или технологией за вполне разумное время.
Но я понимаю людей, которые предпочитают знание интерфейса знанию реализации. Они, конечно, меньше похожи на седых старцев-волшебников, но тоже имеют свое право считаться «уважающими себя разработчиками ПО».
Если человек не знает, что такое указатель, но умеет им пользоваться — это все равно карго-культ, который рано или поздно выстрелит ему в ногу или голову. Такого человека я бы на работу не взял даже стажером. А вот если он не умеет написать красно-черное дерево, но знает, зачем вообще нужны деревья и может реализовать BST (или хотя бы рассказать алгоритм работы с ним), например, у него гораздо больше шансов.
Я бы сказал, что есть необходимый минимум, который должен знать каждый уважающий себя разработчик ПО независимо от области, в которой он работает. Если говорить про железо, то это общая архитектуры компьютера и влияние физических характеристик железа на работу программ. Например, человек должен понимать, чем ограничен максимальный объем подключаемой оперативки, что такое кэш процессора, как хранятся типы данных в памяти, как происходит работа с ними и т.п.
Аналогично про алгоритмы и структуры данных — списки, стеки, очереди, деревья, хеш-таблицы, графы: концепции абстрактных типов данных, хотя бы самые базовые реализации и алгоритмы работы с ними. Упрощенно задача программиста — решить задачу наиболее быстро и эффективно, для этого надо быть в состоянии выбрать наиболее подходящие для нее инструменты. Ну а для этого, в свою очередь, надо понимать, чем структуры данных между собой различаются, осознавать понятие сложности алгоритмов.
Это не полный список, но, я надеюсь, идея понятна. Все это составляет базовую культуру в этой области. Не знать таких вещей — это как не знать, что Земля круглая или когда была Вторая мировая война: жить можно, но непонятно, что от такого человека ждать. У меня есть цикл лекций по основам программирования как раз для студентов первого курса (практически нулевой порог вхождения), как раз вот эти фундаментальные вещи. Если интересно, я могу опубликовать тезисно его как-нибудь тут для обсуждения. Вопрос, что есть минимум, правда интересный.
Как узнать, в какой момент лучше уже не лезть в эту степь? Думаю, вы не станете спорить, что понимать в программировании все невозможно да и бессмысленно.
Конечно не стану. Предел каждый для себя сам определяет. Если интересно ковыряться в алгоритмах, например, кто же запретит. Если же задача в «расширении кругозора», то остановиться стоит, на мой взгляд, когда качество начинает требовать количества. Хороший пример — спортивное программирование: чтобы добраться до уровня середнячка, надо очень многое узнать и попробовать, а вот чтобы выбраться в топ, надо очень много тренироваться на однотипных задачах, набивая руку. Понятно, что последнее не имеет особого смысла для тех, кто просто хочет подтянуться в алгоритмах, скажем.
А где я говорил про Microsoft? Я сказал, что в России есть много компаний, в том числе и филиалов западных, где такие вопросы на собеседованиях не задают.
Ну не скажите. Одно дело, когда человека спрашивают о проекте, в котором он работал (конкретные факты, которыми он может оперировать), а другое дело — спрашивают его о том, кем он видит себя через пять лет (невнятная перспектива, про которую он, может, и не думал никогда). И эти товарищи не будут на лесопилке или разноске газет работать. К счастью для них, у нас в России много компаний (и западных в том числе), которые учитывают большой процент интровертов в индустрии и не особо стремятся задавать такие вопросы, особенно в течение часа.
Работает и ладно, что там внутри интересует немногих.
Надеюсь, это все же была шутка.
Отвечают на все вопросы многие. К счастью, вершина айсберга никуда не делась, и она не такая уж и маленькая. Многие осознают, зачем пришли в университет, и им интересно учиться.
Кстати, а правда у кого-то в России должности официально называются «проект-менеджер» или «продукт-менеджер»? Обычно вроде используют «менеджер проекта(-ов)» и «менеджер по продукту».
опытных промышленных программистов, которые не могли сказать мне, что такое бинарное дерево
Простите, а чем их опыт измеряется тогда, годами чтоли?
Кстати, описанная в статье задача выглядит гораздо более адекватной, чем куча мелких задач на комбинаторику или алгоритмы, что заставляют решать на большинстве собеседований. Человек на собеседовании показывает, как быстро генерировать перестановки или какова вероятность бросания n-мерного кубика со смещенным центром тяжести, а потом устраивается на работу и изо дня в день исправляет неправильное отображение диалогов на экране или проектирует базы данных. Если мы говорим не про найм олимпиадников для оптимизации каких-нибудь баз данных в памяти, то большая задача, которая позволяет в комплексе оценить умение человека думать, гораздо более важна, чем
Но про основы автор, безусловно, прав. Меня вот иногда приглашают принимать экзамен по архитектуре компьютеров у студентов второкурсников, мне половина не отвечает, как отрицательные целые числа в памяти представляются в x86. А что такое виртуальная память, отвечает при лучшем раскладе только каждый четвертый. И это топовый российский вуз, ага.
У многих просмотр фильмов в 3D вызывает неприятные ощущения типа головокружения. Многие также находят 3D очки крайне неудобными, и поэтому не смотрят фильмы в таком формате. Например, попробуйте просидеть 2.5 часа в 3D очках, одетых поверх обычных очков.
Так мы вон выше разобрались, что у человека более-менее отлаженные проекты и хорошо сработанная команда. Это позволяет со временем добиться очень точных оценок даже при таком упрощенном подходе.
Постойте, это же совсем другое. Наука призвана искать и объяснять законы природы, а тут Вы говорите о новом подходе, который позволяет организовать уже существующие вещи неким интересным образом, получая что-то, чего раньше не было. В общем, ладно, я Вашу позицию понял.
Оказывается, помню, но не суть. Я же не профессиональный математик, мне теорему косинусов не грех и забыть лет этак через 10, но вряд ли какой-то геометр ее когда-то забудет. То же самое и с программированием, разве нет? Профессионал не может забыть основы своей области.
А что, в джаваскрипте сборку мусора уже отменили? Я временами встречаю страницы, на которых была такая дикая работа с памятью, что плакать хочется. Оптимизация производительности в таком случае — это уже исправление последствий неграмотности разработчика.
А Вы вот какие знания считаете фундаментальными для грамотного разработчика ПО? Вот абстрактно, без специализаций, этакая азбука для программиста.
есликак у меня руки дойдут свою программу четырехсеместрового курса выложить сюда, посмотрите, может покритикуете, там весь третий семестр про архитектуру. Правда, практика показывает, что толку от одной теории мало, так что у нас потом все это закрепляется в студпроектах и летних школах по программированию.Специальные знания, конечно, зависят от конкретной области работы, но базовые фундаментальные знания одинаковы для всех. Или Вы считаете, что, скажем, веб-программисту, необязательно знать, как куча и стек работают?
Что забудет, как бинарное дерево поиска работает или что такое виртуальная память? Опять же, я говорю о базовых вещах, которые нельзя «развидеть», если понял принцип :)
С последним абзацем я согласен, только редко уж больно встречаются такие самородки, которые без образования это все могут.
Если человек не знает, что такое указатель, но умеет им пользоваться — это все равно карго-культ, который рано или поздно выстрелит ему в ногу или голову. Такого человека я бы на работу не взял даже стажером. А вот если он не умеет написать красно-черное дерево, но знает, зачем вообще нужны деревья и может реализовать BST (или хотя бы рассказать алгоритм работы с ним), например, у него гораздо больше шансов.
Аналогично про алгоритмы и структуры данных — списки, стеки, очереди, деревья, хеш-таблицы, графы: концепции абстрактных типов данных, хотя бы самые базовые реализации и алгоритмы работы с ними. Упрощенно задача программиста — решить задачу наиболее быстро и эффективно, для этого надо быть в состоянии выбрать наиболее подходящие для нее инструменты. Ну а для этого, в свою очередь, надо понимать, чем структуры данных между собой различаются, осознавать понятие сложности алгоритмов.
Это не полный список, но, я надеюсь, идея понятна. Все это составляет базовую культуру в этой области. Не знать таких вещей — это как не знать, что Земля круглая или когда была Вторая мировая война: жить можно, но непонятно, что от такого человека ждать. У меня есть цикл лекций по основам программирования как раз для студентов первого курса (практически нулевой порог вхождения), как раз вот эти фундаментальные вещи. Если интересно, я могу опубликовать тезисно его как-нибудь тут для обсуждения. Вопрос, что есть минимум, правда интересный.
Конечно не стану. Предел каждый для себя сам определяет. Если интересно ковыряться в алгоритмах, например, кто же запретит. Если же задача в «расширении кругозора», то остановиться стоит, на мой взгляд, когда качество начинает требовать количества. Хороший пример — спортивное программирование: чтобы добраться до уровня середнячка, надо очень многое узнать и попробовать, а вот чтобы выбраться в топ, надо очень много тренироваться на однотипных задачах, набивая руку. Понятно, что последнее не имеет особого смысла для тех, кто просто хочет подтянуться в алгоритмах, скажем.
Надеюсь, это все же была шутка.
Отвечают на все вопросы многие. К счастью, вершина айсберга никуда не делась, и она не такая уж и маленькая. Многие осознают, зачем пришли в университет, и им интересно учиться.
«Незамеченным» должно слитно писаться тут.
Кстати, а правда у кого-то в России должности официально называются «проект-менеджер» или «продукт-менеджер»? Обычно вроде используют «менеджер проекта(-ов)» и «менеджер по продукту».
Простите, а чем их опыт измеряется тогда, годами чтоли?
Кстати, описанная в статье задача выглядит гораздо более адекватной, чем куча мелких задач на комбинаторику или алгоритмы, что заставляют решать на большинстве собеседований. Человек на собеседовании показывает, как быстро генерировать перестановки или какова вероятность бросания n-мерного кубика со смещенным центром тяжести, а потом устраивается на работу и изо дня в день исправляет неправильное отображение диалогов на экране или проектирует базы данных. Если мы говорим не про найм олимпиадников для оптимизации каких-нибудь баз данных в памяти, то большая задача, которая позволяет в комплексе оценить умение человека думать, гораздо более важна, чем
Но про основы автор, безусловно, прав. Меня вот иногда приглашают принимать экзамен по архитектуре компьютеров у студентов второкурсников, мне половина не отвечает, как отрицательные целые числа в памяти представляются в x86. А что такое виртуальная память, отвечает при лучшем раскладе только каждый четвертый. И это топовый российский вуз, ага.