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

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

Посмотрел на «профессии». Как оно всё убого и отвратительно… Все эти «знания»/«не знания» выглядят как унылые чеклисты и просто не соответствуют реальным проблемам.

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

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

Главное — количество часов лекций VS количество часов практики. Как вы отнесётесь к художнику, у которого 5 лет образования по специальности «изображение котят», и который каждую неделю имел 30 часов лекций про устройство котят, про методы их изображения, и 8 часов практики? В неделю? При этом половина практики была посвящена повторению теории. Сравните с человеком, который три года на полную ставку рисовал котят. Да?

Так почему с компьютерами не так? Мне кажется, что правильный метод обучения должен иметь явно больше 50% практики. То есть сначала программируем/настраиваем/делаем, а потом ещё и теорию по этому вопросу слушаем.
Чем дальше будет развиваться IT отрасль, тем все меньшей будет потребность в специалистах без образования. Потому что, например, такой программист будет разрабатывать O(n^2) алгоритмы там, где можно и нужно придумать O(nlogn).
НЛО прилетело и опубликовало эту надпись здесь
Я думаю, потребность в сложных алгоритмах будет расти, но все остальные направления в программировании будут расти ещё быстрее. В результате, вероятность применения среднестатистическим программистом сложной математики будет падать.
А у Вас есть какие-то аргументы поддерживающие это голословное высказывание?
НЛО прилетело и опубликовало эту надпись здесь
Я просто как раз указывал на то, что скоро очень многое так или иначе станет связано с BigData (больше или меньше).
вас заминусовали и по-моему совершенно зря. вот буквально один пример — 40 лет назад Cray-1 имел скорость 80 mflops. это был суперкомпьютер, стоящий миллионы долларов, и решал он в основном суровые военно-физические задачи

сейчас snapdragon 800, стоящий в обычном смартфоне, имеет производительность 115 gflops, т.е. в 1000 раз больше. и никто его суперкомпьютером не считает, так — поиграться :D

ещё лет через 30 процессор, встроенный в глазную линзу, будет считать сотни терафлопс, и это будет совершенно обыденно. ну подумаешь, очки в реальном времени следят за всем, происходящим вокруг. что тут такого?
Люди минусуют ту точку зрения, которая им интуитивно не нравится. А этот коммент скорее всего заминусовали из-за всей дискуссии в целом. Против моей позиции по образованию есть миллион аргументов, которые я сам могу привести (особенно учитывая средний уровень отечественных вузов и актуальность учебных программ), и я готов их обсуждать, но люди в основном отделываются простым «голосованием ногами». Я никого не виню — я свое место в жизни вижу и знаю какие знания мне нужны, поэтому благодарен ВУЗу, который хотя бы отчасти мне их дал.
4. чем тоньше технормы, тем ближе мы к желанию знать обо всём и обрабатывать всё и вся. нынешнее bigdata покажется песчинкой по сравнению с умными очками, ежесекундно обрабатывающими терабайты полученной информации с реальным применением ИИ
В-общем, это такое же практическое препятствие, которое преодолевается опытом (спросил — получил ответ — запомнил — применяешь). Не нужен особый матан, чтобы выучить, что линейный поиск это медленно, и заменить его на поиск в хеше — стандартное решение.
А почему не отсортировать и пользоваться бинарным поиском? Или воспользоваться самобалансирующимся деревом? Константная сложность поиска в хеше — это всего лишь теория и часто с помощью кривых рук удается сломать эту вероятностную гарантию. А если еще надо выполнять другие операции, например выборку диапазона? Для принятия таких решений в каждом конкретном случае нужно обладать знаниями о том как все устроено под капотом.

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

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

Разумеется, в ИТ всё построено на хороших алгоритмах. Но если оно уже построено, то за что деньги платят? Правильно, за то, чтобы это всё собрать под задачу.
А ведь и правда. Ситуации, когда удаётся что-то сделать, улучшив асимптотику алгоритма, почти не встречаются.
Если алгоритм, работающий, например, за N^4, оказывается для конкретной задачи слишком медленным, то чаще удаётся его улучшить, поменяв фильтры на входе (чтобы уменьшить N), изменив порядок перебора (чтобы приемлемое решение встретилось раньше), увеличив мощность эвристик (с той же целью), в конце концов — вообще поменяв задачу. Но попытка написать алгоритм, работающий в исходных условиях, скажем, за N^2*log(N) чаще всего к успеху не приводит — раз мы попали в такую ситуацию, значит, ошиблись где-то раньше.
наверно, потому что асимптотика — это составная часть алгоритма? вы не можете уменьшить асимптотику пузырькой сортировки, но можете поменять её на другую
Асимптотику пузырьковой сортировки уменьшить легко — достаточно подать ей на вход почти отсортированные данные. Или уменьшить размер сортируемого массива (по отношению к исходным данным задачи) — сортировать не все N элементов, а только критически важные sqrt(N).
как раз сборщик и должен знать про O, xтобы правильно выбрать детали для сборки. или например что такое lock-free контейнеры чтобы не пытаться использовать их где не надо. согласитесь, это совсем не то, что фундаментальные знания о структурах данных и устройстве процессора, необходимые для хорошей реализации этих алгоритмов
Ага. И в этом ему потребуется обязательно знание философских воззрений канта, знание микроэкономики, освещающее наиболее пердовые воззрения времен затхлого социализма и дспш-ной мебели с военного завода и множество других безусловно полезных вещей из программы «академического образования»
Тут ведь всё как всегда — «ремесленники» нужны, но и «теоретики» нужны тоже. В пропорции 10 «ремесленников» на одного «теоретика». В любом проекте нужен архитектор (или техлид) который понимает почему на уровне архитектуры всё устроено так, как устроено и почему это должно, обязано работать и работать эффективно. И нужно 10 разработчиков и тестеров, которые будут натягивать кнопки на формы, катать круглое и носить квадратное.
Я думаю, соотношение ещё большее. Кстати, «техлид» — не теоретик. Теоретик решает абстрактную задачу как бы ему вместо o(log n) сделать o (log log n) для особых типов графов.

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

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

А у нас всех готовят как теоретических физиков, а потом выясняется, что надо правильно свёрла менять и тип металла на глаз определять.
Кстати, хочу сказать, что склонность решать задачи более фундаментально, расширяемо и модифицируемо, под изменяющиеся задачи и условия, по-моему, не зависит от формального образования и склонности человека сидеть над матаном. У нас в команде есть люди и с образованием и есть вроде меня — бездипломные. Склонность делать продуманно не зависит, как выяснилось. Я стараюсь «дольше запрягать» и радоваться, когда изменяющиеся условия задачи не заставляют меня переделывать все с нуля.
НЛО прилетело и опубликовало эту надпись здесь
«А на самом деле проблема состоит в том, что большая часть профессий в IT требуют не образования, а навыков. Это _ремесленные_ профессии. Другими словами, практический опыт, а главное, чувство предметной области значат едва ли не больше, чем абстрактное знание.»

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

А на самом деле проблема состоит в том, что человек как программист никогда не вырастет или будет очень медленно расти. Он просто будет выполнять однообразные задачи одним и тем же путем. Есть у нас на работе один такой. Не знает чем лефт джойн от иннер джойна отличается. Про алгоритмы молчу. Такой человек постоянно будет косячить, сидеть часами над проблемой и в итоге придумает свой кривой медленно работающий велосипед, на доработку которого в будущем будут уходить часы, только потому, что он думает, что образование не нужно, он что дурак. А было бы образование, он бы за 30 минут додумался использовать диграф и бфс для нахождение кратчайших путей. И это только капля в море. Все свои нестандартные задачи он будет выполнять велосипедами. И таких вышеописанных людей тысячи. А потом все удивляются почему программа так медленно работает и тупит. А самое интересное в том, что он этого даже не понимает. И вряд ли поймет. Зачем ему теория, ее дураки придумывают. По мне лучше потратить время на теорию и основы, но потом написать хорошо спроектированный модульный код, который будет легко масштабироваться, изменяться, поддерживаться. И главное выполнятся за приемлимое время.
Научиться можно любой профессии и без вышки. Только вопрос насколько полны будут эти знания и насколько быстро вы научитесь. Образование ускоряет этот процесс в несколько раз.
Вы можете учиться на своих ошибках, это ваше право. Но есть накопленный годам багаж знаний и на мой взгляд глупо не обращать на него внимание и пропускать мимо себя. В итоге вы будете за любой проблемой лезть в гугл и спрашивать у других людей, тратя часа\дни своего времени. Никакого прогресса не будет, если каждое поколение будет все изучать заново.
НЛО прилетело и опубликовало эту надпись здесь
Тут ведь многое и индивидуально, и, как было правильно сказано, многое зависит от направления в ИТ. Мне вот, например, высшее образование пригодилось только для того, чтобы «взяли на первую работу» (в нормальные конторы как правило берут только с оконченным или почти оконченным образованием). А вот там (на работе) уже я всему и научился. Сейчас работаю на себя (вполне успешно). Фундаментальные знания мне не пригодились и не пригодятся (уверен). Но разумеется, я не хочу сказать, что они не нужны. Нужны, просто не всем.
Мне кажется 14 и 15 слайды подозрительно похожи.
Ребята, большая просьба нормализовать звук ведущего и звук вопросов к друг-другу. А то приходится регулятором громкости играть, чтобы услышать комментарии.

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

Это безусловно не отменяет необходимость самостоятельного образования. Просто это легче делать, когда есть фундамент.
НЛО прилетело и опубликовало эту надпись здесь
А вот отсутствие систематизированного знания о существующих системах — это да, беда. Проблема состоит в том, что этого систематизиорованного знания чаще всего в академических кругах тоже не существует. А то, что там знают хорошо и системно, к жизни чаще всего не относится.
я получил систематические знания в школе, просто читая все заинтересовавшие меня книжки по IT. реальная проблема наверно в том, что когда человек запрягается в рабочую упряжку, ему трудно найти столько времени, сколько школьнику/студенту. я объём прочитанного за 3 школьных года оцениваю где-то в 50-100 книг

а вот в области математики у меня вузовского объёма знаний нет, я просто доучиваю отдельные области по мере появления к ним интереса
У меня сложилось такое мнение, что наши вузы дают т.н. будущему специалисту набор отрывочных знаний и фундаментальный апломб, которым некоторые, как 35 см прибором меряться с другими стремятся. (:
Можно, но в универе есть тусовка. Студенты друг другу помогают, тем самым знания расширяется багаж знаний и скорость их усвоения.
НЛО прилетело и опубликовало эту надпись здесь
Ну а чего вы в лучшие вузы страны не поступали? ФизТех? Бауманка?
Или вы категоричны тодлько по отношению к другим, но не к себе? Конкуренцию не выдержали? Пошли по легкому пути?
Идеальный мир дружбы всея и всех ;)
на работе то же самое, правда коллектив меньше. тут вспоминается первое правило выпускника — идти в большую продуктовую контору с хорошо поставленными процессами разработки
НЛО прилетело и опубликовало эту надпись здесь
В случае CS высшее образование может быть даже вредно. При изменении технологий старые подходы могут оказываться неверными, а переучивать человека сложнее, чем учить сначала.
Второй момент: подход вузовской программы. Полная загрузка теорией, в ущерб практике (времени не остается) играет отрицательную роль.
Мотивация. Увы, постоянное принуждение в вузе заниматься тем, чем нравится, но по не той технологии, может ее на корню убить.
По поводу знания: область IT — все знания добываются из соответствующей литературы, интернета и на практике реальных проектов. Причем последнее — самое ценное. Нету никаких «сокровенных тайн» или «секретной системы», которые дают исключительно в вузе. Все это есть в открытых источниках, при том можно выбрать для себя наиболее приемлемую форму подачи информации.
Что обучение в вузе по специальности CS на очной форме реально дает? Кроме стандартных вещей типа тусовок / отсрочка от армии / корка об образовании?
Тут можно выделить 2 момента: знание терменалогии (в этом у «чистых практиков» часто встречаются проблемы) и наличие той корки о ВО в CS, которая иногда требуется для высших манагерских должностей или для очень бюрократичных проектов. Больше реальной пользы от этого не замечено.
Все эти выводы основаны на собственном опыте (10 лет в отрасли), многочисленном наблюдении за собой и коллегами, получившими просто высшее образование, образование в сфере CS, без ВО, самоучек и практиков.
Общий вывод такой: чтобы иметь успехи в IT, нужно как можно больше практиковаться, не забывая уделять внимание фундаментальным вещам в специальности. На практике это значит книжку-другую почитать с основами и теорией. Так же участвовать во всяких тусовках/сообществах, что дает тот самый кругозор и нужные связи.
1. фундаментальные знания нужны
2. вуз как место где дети тратят 5 ЛУЧШИХ лет своей жизни, силком впихивая в себя случайно выбранный кем-то набор фундаментальных знаний, который кто-то определил как фундаметальное образование — не нужен и даже вреден. это настоящая диверсия

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

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

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

Неприятная ситуация. Оптимизация почти всегда основана на довольно глубоких знаниях матанализа ))
я говорю про оптимизацию программ. она скорее основана на изучении среды выполнения, к примеру микроархитектуры процессора
Буквально сегодня оптимизировал одну из программ. По ходу дела пришлось искать минимум функции C/N^2+N*log(N) (точнее, задача была ещё сложнее — минимизировать некую рекуррентую последовательность, подобрав параметры), но это первое приближение). Ерунда, конечно, но хоть немного матана помнить надо. Для оптимизации поиска решения системы уравнений (в задаче про 7 цилиндров) матана было ещё больше… А где проводить грань между оптимизацией программы и алгоритма, не всегда понятно. Особенно, когда алгоритм приходится строить с учётом знания повадок кэша и сборщика мусора. И тоже подбирать оптимальные параметры, чтобы угодить и процессору, и математике (в какой системе счисления наиболее эффективна радикс-сортировка? Эксперимент показал, что 256 — для некоторой конкретной ситуации — но почему?)
похоже вы сильно преувеличили, утверждая что «Оптимизация почти всегда основана на довольно глубоких знаниях матанализа»?

мой цикл оптимизации обычно основан на выборе структур данных чтобы уменьшить число кеш-промахов, борьбе с переходами, увеличении ILP. по большому счёту всё это — задачи кодирования данных, ради них например пришлось познакомиться с полями Галуа. а вот из неэлементарного матанализа для меня интерес представляет только вездесущее преобразование Фурье
Наверное, насчёт «глубоких знаний» преувеличил. Для оптимизации достаточно знать его на уровне «как решать нелинейные системы».
А что ещё есть в анализе? Непрерывность, производные, интегралы, последовательности и ряды, преобразование Фурье, дифференциальные формы. В общем, всё бывает когда-нибудь нужно.
Ну и будете с этим сакральным знанием микроархитектуры процессора простым перебором искать минимум функционала… удачи! пару десятков тысяч лет, ога

Ну а мы как-нибудь со знанием «матана»(все понимают, что за этим словом много чего еще стоит) и без знания конкретных спецификаций процессора вполне себе обойдемся величинами на несколько порядков меньше ваших
С тем же успехом вы со своим матаном можете оказаться перед каким-нибудь слабеньким процессором с софтверной реализацией вещественной арифметики, и так и не понять, почему ваш идейно чистый и политически грамотный алгоритм так медленно ворочается и проигрывает непонятно как написанному перебору неизвестно чего на целых числах. Тут одной стороной обойтись трудно, надо бы знать (хоть в какой-то мере) все аспекты — от метаматематики до конвейера.
Хочу вставить свои 5кп. У меня нет образования (т.е оно очень лениво и в процессе), имею 3 года опыта, поменял несколько проектов, включая должность релиз инженера, сейчас пишу на Скале. Пока никому не мешало мое отсутсвие формального образования. На самом деле оно мне нужно лишь по одной причине — хочу пожить в Европе, а блю кард без него не получить, и это еще один большой плюс формальной учебы. Если бы не учеба «для бумажки», предпочел бы сидеть с курсерой и учить таки основы CS, дополняя все остальное (т.е математику) по мере надобности.
Рассуждая практически, а зачем нужны специалисты? Чтобы эти ребята работали, писали код который приносит *прибыль*.

Если у вас задача стать профессором Computer Science и написать кучу книг, то университет это прекрасное начало. Но ваши навыки не будут полезны для (массового) бизнеса. Чувак знающий jquery/javascript (не обязательно даже знать между ними разницу), имеющий опен сорс, красиво оформивший профайл в линкедине и пишущий рабочий код устроится на работу без труда.

Говоря простыми словами все зависит от вашей жизненной цели, если вы хотите быть крутым умным программистом, то универ один из способов. Если вы просто хотите стать востребованным высокооплачиваемым кодером то универ даже не в топ 5 вещей которые вам надо делать (а делать надо опен сорс, пиарится, ездить по конфам, изучать реальные и используемые технологии).
скажем так — изучая эти технологии, вы на определённом уровне наткнётесь на CS и математику. но я согласен с тем, что не надо ставить телегу впереди лошади — сначала изучая математику, затем CS, а потом заканчивая вуз и начиная программировать на PHP. пусть ребёнок начнёт с PHP, если затем доберётся до области где будет нужна математика — изучит, чи ни — то ни. может он окажется отличным менеджером или художником

а у нас дети сначала выбирают вуз случайным образом, затем 5 лет копят знания про запас, а затем оказывается что это не их уровень и они идут в м-видео торговать. и всё это, заметьте — за наш с вами счёт
Задача ребенка зарабатывать деньги когда он будет взрослым. По этой причине начать с PHP лучше чем с универа.
«Если бы программист мог самостоятельно протестировать все возможные пути выполнения»

Haskell?
проблема остановки? :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий