Очередь.
Сегодня я выполнял психологический тест, но к сути того, о чём хочу рассказать, это не имеет отношения, как и сам тест. Я хочу поведать вам свои мысли на тему разных уровней абстракции в этом мире. Представьте, что есть некоторая очередь, в которой стоят люди, причём чем дальше они от начала, тем более общие задачи они решают.
В самом начале очереди стоит молодой человек, которому нужно просто выполнить конкретный тест. За ним стоит и поглядывает психолог, который придумывает эти тесты, проделывая исследовательские работы. Он - король своих тестов, он словно вышел в пространство, в котором на одно измерение больше, и ничто в подпространстве не сокрыто от его глаз. Для составления тестов он пользуется специальной программой. Аналоги таких программ можно легко найти в сети, в каком-то виде даже в приложениях в вк.
Молодой прикладной программист, которому ещё не надоело бриться, стоит за психологом. Он написал эту программу, тем самым достиг такого уровня, что вообще любой тест любого психолога для него является шаблонной вещью. Он может не понимать тонкостей конкретного опросника, статистических исследований, что за ним стоят, но ему это и не нужно.
— Долго там ещё?
Это спрашивает следующий из очереди, тоже программист, но более серьёзный и бородатый. Он написал компилятор, которым собирают любые программы, в том числе и генераторы психологических тестов. Он господь кода, но не в курсе, как устроены конкретные программы, тем более, как устроен выхлоп одной из них в виде опросника. Сразу за ним стоит создатель языка программирования и его стандартов. Его не интересуют конкретные реализации компиляторов под конкретные операционные системы, но он точно знает, что они сделают с конкретными исходниками на его языке.
Компиляторописатель и прикладник разговорились, стали спорить, нужна ли программисту математика. "Ну ты и долбоёб!" - раздалось в адрес прикладника от следующего стоящего в очереди - теоретика языков программирования, компиляции и трансляции. Он строго математически доказывает теории, связанные с различными языками. На его труды опираются создатели языков, чтобы потом не возникали проблемы, которые не разгребёшь. Языки в своих работах он обозначает латинскими и греческими буквами, группирует их по свойствам; доказывает следствия из этого всего.
За ним стоит адский мужик. Когда окружающие спрашивают его, чем он занимается на работе, тот лишь отмахивается, мол, всё равно не поймёте. Он теоретик над теоретиками, господин теории доказательств, император разрешимости проблем в рамках систем аксиом.
До этого момента уважение в очереди нарастало. Психолог очень уважает программиста, что написал крутую программку, а тот очень уважает создателя компилятора, покупает и читает его книги. Но над следующим в очереди люди тихо посмеиваются. Это философ.
Формальные вещи, которыми он занимался, у него уже отобрали в свои разделы наук; недоказанным или в принципе недоказуемым теориям его не верят, всякое другое воспринимают как байки или цитаты для пабликов. Но, всё-таки, он положил основы логики и доказательств, балансируя между абсолютной истиной и повседневной субъективной суетой. Ну, и цитаты про жизнь и смерть веселей курса ЯПМТ, давайте уж честно.
За ними в очереди стоит бог. Нет, не авраамический мужик с бородой, такие в других очередях стоят. Это сами законы логики в чистом виде, философский бог, бог пантеистов, сама природа (в общем смысле, а не деревья).
Замыкаю очередь я.
Не потому что я так крут. И не потому что я создаю вселенные рассказов со своими внутренними богами-законами, в том числе и эту. Просто последним к венерологу пришёл. Писька чешется.
-Автор: Иван Гладин (multiprogramm)
3 признака, что вы станете хорошим программистом
Эксперты компаний Acronis, КРОК, Mercaux Inc., «СТРИМ», ICL Services и Bell Integrator рассказали, по каким признакам определяется «предрасположенность» к программированию. Что же делает вас потенциальным разработчиком?
У Вас математический склад ума
«По своей сути программирование очень похоже на „инженерные специальности“, человек с „математическим складом ума“ может с одинаковым успехом заниматься проектированием колесных машин либо написанием кода. Если из этого исходить, то один из главных признаков того, что у человека есть талант к программированию — это наличие аналитического склада ума, то есть склонности к изучению, анализу и выстраиванию в „законченные формы“ любой информации, которую он получает»
— говорит Антон Енакиев, Вице-президент Acronis по разработке.
«Нужно дружить с математикой, как говорил один русский ученый, „она ум в порядок приводит“»
— соглашается Сергей Стрелков, руководитель направления собственных разработок компании КРОК.
Любимый вопрос новичков или «насколько программисту нужно знать математику?»
«„Математический склад ума“ в контексте программирования вовсе не синонимичен типичному представлению об „ученом-математике“, которых обычно изображают в фильмах. Программист — это не Рассел Кроу в роли нобелевского лауреата Джона Нэша, погруженный в цифры и постоянную аналитику. В 90-95% своей работы программисты используют только базовый математический аппарат, и лишь в 5-10% задач необходимы глубокие знания математики. Поэтому, мне кажется, что нет особого требования к наличию чересчур глубоких познаний в теории графов или теории вероятности для программиста, но это всегда будет считаться плюсом»
— считает Антон Енакиев, Вице-президент Acronis по разработке.
Какая именно нужна математика рассказывает Алексей Светлов, руководитель отдела разработки технического департамента ООО «Стрим»:
«Основа программирования — дискретная математика. И хороший программист должен любить и понимать этот предмет. Это база для развития. Математика дисциплинирует человека и учит искать рациональный выход из любого положения. Иначе любая нестандартная ситуация поставит программиста в тупик и он, не найдя ответа на всех известных ресурсах, сложит руки и распишется в своей беспомощности».
«Можно не знать досконально теорию вероятностей и высшую математику, но линейная алгебра должна быть неотъемлемой частью мышления в решении большинства задач или „записана на подкорке мозга“ (как говорят некоторые учителя) — это врожденная грамотность, но в математическом смысле»
— считает Воротников Денис, ведущий веб-программист Mercaux Inc.
Вы ленивы
«Хороший программист должен быть ленивым, — так говорил один наш преподаватель в университете. И это правда! Потому что, чем меньше программного кода выполняет поставленную задачу, тем обычно гениальнее он написан. А ленивому программисту лень писать много кода — он будет искать способ, как сделать меньше работы с тем же результатом»
— объясняет Алексей Светлов, руководитель отдела разработки технического департамента ООО «Стрим».
Вы любите решать нестандартные задачи
«Не стоит забывать и о том, что программирование в большой мере творческая профессия. Несмотря на всю четкость алгоритмов и следованию гайдлайнам (правила программирования на каком-либо языке), специалисту этой профессии очень часто приходится придумывать гармоничные решения для реализации нестандартных задач. Стоит учесть, что речь идет о специалистах, разрабатывающих современные программные продукты для широкого круга пользователей, потому как в некоторых областях есть специфика, которая требует четкого следования определенным правилам и где нет места творческому подходу — например, низкоуровневое программирование на языках, близких к базовым»
— объясняет Воротников Денис, ведущий веб-программист Mercaux Inc.
Альтернативный экспресс-тест на склонность к программированию
А вы сможете создать алгоритм приготовления яичницы, не только в «идеальных» условиях, но и придумать несколько успешных альтернативных вариантов, а также создать алгоритм приготовления при исключительных, ошибочных исходных условиях?
«Если человек сможет расписать по шагам как приготовить яичницу, указав не только happy путь, а так же exceptional и alternative, тогда точно сможет стать программистом»
— утверждает Николай Каштанов, ИТ-эксперт ICL Services по предоставлению сервиса.
Если говорить о личностных качествах, то Федор Зубарев, руководитель программ компании Bell Integrator считает, что чаще всего эти два типа людей потенциально могут стать хорошими программистами:
«1-й: дотошные, пунктуальные, иногда занудные. Люди, готовые разбираться с любой мелочью, вникающие во все детали.
2-й: люди творческие, немного неаккуратные в различных, в том числе и в бытовых, вопросах. Образование — профильное или чисто математическое»
Узнаете себя в одном из типов?
Разумеется, главный тест — это ваше искреннее желание обучаться и увлеченность программированием. Только это позволит достичь результата, какими бы впечатляющими не были ваши «исходные» задатки.
«Уверен, что добиться успеха в том или ином виде деятельности можно только упорным трудом, который всегда приносит должное вознаграждение. Разработка софта — не исключение. Если такая работа продолжает радовать, если хочется еще что-то поделать „для себя“ — поисследовать, изучить что-то новое — признаки таланта налицо.»
— убежден Сергей Стрелков, руководитель направления собственных разработок компании КРОК.
Поэтому не забывайте, что при умножении любого числа на ноль, мы получаем ноль — то есть, какими бы феноменальными ни были ваши задатки, без усердной работы результата не будет. Талант необходимо развивать.
Уважаемые программисты и/или математики.
Нужна ли программисту математика?
--------
У каждой специальности есть свой минимальный набор обязательных знаний. У информатики и программирования такой основой служат математические курсы; так что вопрос: «нужно ли программисту образование?», обычно превращается в «нужна ли программисту математика?» или «нужно ли программисту так много математики?» Учитывая, что программист в классическом смысле – это инженер, вопрос можно сформулировать и иначе: «нужно ли образование инженеру?» Споров на этот счёт обычно не возникает. Проблема разве что вот в чём: не все хотят быть учёными и инженерами. Если предел ваших мечтаний – успешная игра в App Store, а не проектирование искусственного интеллекта, криптографического алгоритма или программ трёхмерной анимации, вы можете смело минуя вуз приступить к её выполнению, но и в этом случае знания не испортят вам карьеру. В вузах не знают, кем вы себя видите через много лет и чем планируете заниматься – не говоря уже о том, что вы сами в семнадцать лет можете ещё этого не знать. Считается, что лучше заранее научить вас всем основам, чем упустить что-то важное. Кроме того, основные курсы, как правило, взаимозависимы и нельзя просто взять и изъять некоторые из них. И их главная цель – не научить вас всему на свете, что в принципе невозможно, а предоставить вам примерную карту современных научных и инженерных знаний, чтобы при столкновении с неизвестным, вы смогли принять верное решение, в каком направлении идти.
Вернёмся к математике. Практически все книги по алгоритмам требуют от читателя некоторой математической культуры. А алгоритмы и структуры данных – как сказал Никлаус Вирт – являются программами, и не умея работать с ними, нельзя называться программистом. Причём это не обязательно умение разрабатывать свои алгоритмы, намного чаще нужно изменять чужие, приспосабливая их к частным случаям, но также и умение доказывать их корректность и применимость в различных условиях, и умение анализировать их поведение в некоторых ситуациях. Математика активно применяется таких областях как криптография, графика, распознавание образов, работа с видео, звуком и изображениями, математическое моделирование реальных процессов. В таком, казалось бы, приземлённом системном программировании без серьёзных математических знаний невозможно написание компиляторов, планировщиков и файловых систем.
Математика является тем каркасом, на который нанизываются все прочие знания. Увы, многие начинают осваивать профессию с конца. Программист, изучивший языки программирования, инструменты разработки, различные технологии и паттерны, но не освоивший математические основы, напоминает художника, научившегося в совершенстве разбираться в красках и кистях, освоившего множество приёмов, но при этом не знающего композиции, перспективы, анатомии и прочих основ. У него может быть много гениальных мыслей, но выразить их он не сможет, и всё, на что ему остаётся рассчитывать – это работа ассистентом или раскрашивание чужих картин. Изредка незнание основ формирует новые стили, как, например, в случае с Ван Гогом (к его чести нужно сказать, что он осознавал свои проблемы и брал уроки живописи у профессионалов), но чаще становится препятствием в творчестве. И если в искусстве это ещё можно оправдать тем, что автор так видит, то в промышленности неправильный алгоритм генерации случайных чисел, приведший к тому, что миллионы долларов честных налогоплательщиков промахнулись мимо цели, не оправдан ничем.
При этом нельзя забывать, что для большинства программистов математика является скорее инструментом, чем наукой, и преподавать её нужно именно так, особенно первые курсы, всякий раз объясняя студентам, зачем им это нужно.
Если вы профи в своем деле — покажите!
Такую задачу поставил Little.Bit пикабушникам. И на его призыв откликнулись PILOTMISHA, MorGott и Lei Radna. Поэтому теперь вы знаете, как сделать игру, скрафтить косплей, написать историю и посадить самолет. А если еще не знаете, то смотрите и учитесь.