Языки программирования без математики

Можно ли стать хорошим программистом без знания математики и алгоритмов?

Можно ли стать хорошим программистом без знания математики и алгоритмов? Этот вопрос обсудили пользователи сайта Quora. А KV.by решили собрать для своих читателей самые интересные ответы.

Джиакомбо Сорби, программист-самоучка

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

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

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

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

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

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

Вестон Бикрофт, специалист в сфере программного обеспечения, математики, философии, когнитивной науки

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

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

Второе: математика. Насчет этого говорить сложнее, потому что термин «математика» может относиться ко многим вещам. Я не думаю, что какие-то определенные знания в математике могут сильно повлиять на ваши способности в качестве программиста. На мой взгляд, здесь есть только одно исключение: теория языков программирования (Programming language theory).

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

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

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

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

Филлипе Де Лима Арканьё

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

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

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

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

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

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

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

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

Мальком Теас, обучался программированию

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

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

Барри Роунтри, специалист в области информатики

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

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

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

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

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

Мария Королева, редактор журнала Hypergrid Business

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

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

Вам понадобится арифметика, но на этом все.

Но «алгоритм» – это синоним к понятию «компьютерная программа», поэтому нет, вы не сможете программировать без знания алгоритмов!

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

Источник

Нужна ли математика программисту?

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

Лучше начинать заниматься еще со школы

Разделы математики

Разные задачи подразумевают разные подходы к решению и требуют знания различных разделов математики. Если для создания простого калькулятора достаточно будет владеть базовой логикой и арифметикой в школьным объеме, то при разработке игрового «движка» с реалистичной физикой не обойтись без отличного знания геометрии, дифференциальных уравнений, математического анализа и многого другого. Основательных познаний требует и разработка в самых востребованных областях современного программирования — Data Science и Machine Learning — анализ данных и обучение искусственного интеллекта.

Логика

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

Дискретная математика

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

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

Сегодня все больше девочек интересуются программированием

Теория чисел

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

Теория вероятностей

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

Математический анализ

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

Мастер-класс CODDY в Московском дворце пионеров

Ресурсы для тренировок

Project Euler — сайт носит имя знаменитого математика Леонардо Эйлера, поэтому просто не будет. На нем размещены самые сложные задачи по математике. Для решения многих требуется знание основ программирования.

Timus Online Judge — сайт Уральского федерального университета. Это крупнейший архив с задачами разного уровня сложности и автоматической проверкой. Есть задания на динамическое программирование, теорию чисел и структуры данных, а также, по словам создателей, необычные и хитрые.

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

W3Resource — портал с обучающими материалами, упражнениями и квизами по веб-разработке, базам данных и языкам программирования: JavaScript, Java, PHP, Python, Ruby и другим.

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

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

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

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

Основатель Международной школы программирования для детей CODDY

Источник

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Uchenik.top - научные работы и подготовка
0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии