Программирование и математика. Очень общий вопрос.
Объясните мне пожалуйста в каком объеме и какие разделы математики используются в программировании?
Мне прийдется "вспоминать" с самого начала, так что хотелось бы узнать что бегло просмотреть а чему уделить пристальное внимание.
Я начал с С++ (так сказать матчасть) с прицелом на PHP.
Ты давай конкретную облость.
Математика она вся используется, все разделы.
Геометрия изпользуется в компьюторной графике.
Работа с матрицами используется во всех расчетах.
Преобразование фурье в обработки сигналов.
Теория графов тоже выскакивает много где.
Теория оптимизации сама в себе и повсюду.
Дифференциальные вычисения, применительно к описанию динамических процессов.
Но здесь, мне кажется, не совсем верно поставлен вопрос. И, главное, это симптоматично.
Многие начинающие программисты почему-то считают, что для того, чтобы написать программу, нужно уметь программировать.
Это условие необходимое, но не достаточное.
Для того, чтобы написать книгу, мало уметь писать буквы и складывать их в слова. Нужно еще, как монимум, два фактора:
1. Умение внятно излагать свои мысли.
2. Наличие тех самых мыслей, которые предполагается изложить.
И в программировании - все то же самое: необходимо хорошо разбираться в предметной области, в которой будет работать программа (скажем, в области физики, акустики, биоакустики, физиологии слуха, ТФКП, дифференциального и интегрального исчисления, если пишется звуковой редактор), с другой - обладать собственными идеями, которые нуждались бы в программной реализации.
Умение программировать - это всего лишь умение писать буквы. Одного его явно недостаточно.
С++ изучаю как базу. После него буду изучать PHP, соответственно для создания сайтов (веб-программирование).
Соответсвенно и мат. знания нужны ближе к этой области.
1. Умение внятно излагать свои мысли.
2. Наличие тех самых мыслей, которые предполагается изложить.
И в программировании - все то же самое: необходимо хорошо разбираться в предметной области, в которой будет работать программа (скажем, в области физики, акустики, биоакустики, физиологии слуха, ТФКП, дифференциального и интегрального исчисления, если пишется звуковой редактор), с другой - обладать собственными идеями, которые нуждались бы в программной реализации.
Умение программировать - это всего лишь умение писать буквы. Одного его явно недостаточно.
А как же разделение труда?
Количество знаний одного человека - конечно, конечна и скорость их накопления и обработки. Соответственно, глубоким специалистом в большом количестве слабо связных областей быть нереально.
Если пишется мощный звуковой редактор -- нам нужны (в том числе):
- физики, специалисты в этой области
- дизайнеры интерфейса
- специалисты по низкоуровневой работе со звуком (железо звуковых
карт, драйверы и проч.)
- прикладные программисты
- архитекторы
-(+ лица, выполняющий административные функции).
Нет никакой нужны в специалистах, умеющих делать все это одновременно.
Классическая математика в программировании не используется, уверяю. Её удел - прикладные задачи. Pavia указал примерные области применимости.
Пожалуй единственная математическая теория имеющая непосредственное отношение к программированию - это теория языков программирования. Все остальное цепляется к программированию через неё.
Зря вы это затеяли... зря. Есть более удачные языки для изучения, Boo/Python хотябы или C#/Java.
Мой совет. Выкидывайте C++ и PHP они вас ничему хорошему (хорошему стилю!) не научат.
...
Нет никакой нужны в специалистах, умеющих делать все это одновременно.
Как говорится, не следует выплнескивать ребенка вместе с водой.
Программист может не уметь рисовать, а дизайнер может не уметь программировать, но оба они должны иметь представление о физике звука, иначе результат будет далек от ожидаемого: интерфейс будет красив, но неудобен, а используемые алгоритмы будут вносить искажения в обрабатываемый сигнал (вспоминаю, например, дискуссии по поводу того, что линейную интерполяцию при пересчете на другую частоту дискретизации лучше заменить на сплайн. Очевидно, метод интерполяции - прерогатива именно программиста, а не физика.).
Программист может не уметь рисовать, а дизайнер может не уметь программировать, но оба они должны иметь представление о физике звука, иначе результат будет далек от ожидаемого: интерфейс будет красив, но неудобен, а используемые алгоритмы будут вносить искажения в обрабатываемый сигнал (вспоминаю, например, дискуссии по поводу того, что линейную интерполяцию при пересчете на другую частоту дискретизации лучше заменить на сплайн. Очевидно, метод интерполяции - прерогатива именно программиста, а не физика.).
Знания любого профессионала имеют пик и расходятся вниз от его вершины -- конечно, любой программист имеет представление о физике, математике etc.
Но в вашем примере -- красивость и удобство дизайна - это все задача дизайнера. Чтобы он был функцинален -- дизайнер должен знать возможности, которые должна предоставлять программа на общем уровне. Для этого есть SRS-документы + консультации с другими специалистами + консультации с пользователями, профессионами в области работы со звуком.
Так же определение метода интерполяции -- это как раз таки задача физика и математика. Задача программиста здесь:
- грамотная реализация самого метода по его точному описанию
- высококачественный код
- разработка API для интеграции с другими компонентами программы
и тому подобное.
Мой совет. Выкидывайте C++ и PHP они вас ничему хорошему (хорошему стилю!) не научат.
Что-то опять я мысль не понял. Зачем для изучения PHP вначале учить другой язык? Чем это поможет?
Про математику: а как же алгебра логики?
Где я сказал что нужно изучать нечто перед тем как изучать PHP? Я сказал
Аха. И она тоже :) Но в меньшей мере. Если(условие) и без нее понятно бывает.
Твоими бы устами да мед пить!
Он должен ПОНИМАТЬ задачи, ешаемые при помощи программы и способы их достижения.
Смею заметить, что, как правило, подразумевается средний программист - крепкий профессионал и высококлассный специалист в предметной области, время которого стоит во много раз больше времени программиста. Поэтому именно программисту нужно будет обладать определенным багажом знаний для того, чтобы говорить со специалистом на одном языке.
- грамотная реализация самого метода по его точному описанию
- высококачественный код
- разработка API для интеграции с другими компонентами программы
и тому подобное.
Если проект будут делать несколько сотен человек, наверняка он будет коммерчески провальным (затраты не окупятся), если же коллектив будет состоять примерно из 10 человек, то вряд ли среди них будет более одного программиста, вынужденного также совмещать профессии кодера, алгоритмизатора, составителя ТЗ на программную часть, а заодно и математика.
Не те это языки для начального изучения программирования.
[/QUOTE]
Язык не имеет значения для "начального изучения программирования", впрочем как не существует ни "начального изучения программирования" ни "конечного".
[QUOTE=hardcase]
Выкидывайте C++ и PHP они вас ничему хорошему (хорошему стилю!) не научат.
[/QUOTE]
Стиль же зависит не от языка, а от идиота, который на нем пишет.
Возвращаясь к теме. Выбрав область работы, инструмент выбирается приемлимый и что не менее важно - широко применяемый в данной области. Математика же в программировании в чистом виде встречается крайне редко, посему достаточно знать к чему или к кому обратиться в случае сей крайней необходимости.
Чтобы научиться программировать. Для этого нужны годы.
А любой язык потом можно будет освоить за 2 недели.
Другими словами, для обучения программированию нужно выбирать язык пригодный именно для этой задачи.
А что, не так?
Понимать - да. Быть на одном уровне с профессионалами
предметной области - нет. Посуди сам: если бы программисты могли в любой области, где они пишут программы, обретать знания эквивалентные знаниям соотв. профессионалов в этой специальной области, зачем вообще бы нужны были последние? :) Зачем бы был нужен кроме кто-то программистов? :D
Определенным багажом - да. Например -- я обладаю таким багажом в области логистики - и я понимаю логистические решения, которые мне предлагаются, могу определять сравнительные преимущества и недостатки. Но самому разрабатывать их (на концептуальном уровне) - не возьмусь.
Все проекты, в которых больше сотни человек -- провальные???
А парни-то и не знают:D
Последний предложенный тобой вариант с ролями в команде из 10 человек мне кажется диковатым.
Мой совет. Выкидывайте C++ и PHP они вас ничему хорошему (хорошему стилю!) не научат.
Может в этих словах и есть смысл, жаль нет доказательств :)
Насколько я понял из намеков, синтаксис этих языков не позволяет компилировать программы, содержащие ошибки стиля.
Не знаю. Может тоже что-то из этого изучить для понятия уровня стиля. Тем более, что andriano сказал, что "любой язык потом можно будет освоить за 2 недели". Вдруг я уже достиг этого "потом" :)
Ещё из-за его супер-мега-крутизны :)
Но основная причина это то, что PHP и Java(javascript) похожи на C++.
Почему не начал изучать сразу PHP, на данный момент не нашёл правильного учебника.
Я купил "ООП в С++. Р.Лафоре 4-е издание 2007". Отзывы очень положительные.
(Страуструпа на начальном этапе не предлагать :) )
Для меня сейчас более важно выучить не синтаксис какого-либо языка, а понимание сути программирования, ознакомление с базовыми алгоритмами, ООП, техникой написания программ.
У меня пока 0 опыт программирования и я не могу поспорить с профессионалами. Но мне кажется сложность С++ преувеличена, если подобрать грамотный учебник сложность будет не намного выше.
Зато крепкие фундаментальные знания.
Но основная причина это то, что PHP и Java(javascript) похожи на C++.
Хочу гранатомет и в партизаны...
Ерунда.
Изучать PHP не стоит по гораздо более серьезным причинам ;).
+1.
:D
Прально. Книжка трупа страуса отлично подходит для растопки камина, но только не для обучения человека.
Хорошая цель. Жаль, что вас ждет адское разочарование в ООП в C++.
Нисколько. Вы еще не наступали на грабли с конструктором копирования? А с наведенными "странными" ошибками по причине неправильной работы с памятью? Ничо! Все впереди! :)
Может быть. Зависит только от вас.
Я более 1,5 года изучаю его - до сих пор свой уровень оцениваю как начальный (правда, это не мешает мне писать сравнительно большие программы). Однако, я ленив и долго занимался написанием кривых и страшных кодов на Паскале (Дельфи).
В последнее время присматриваюсь к Java. В общем, в этом языке вроде бы есть все то хорошее и "мега-крутое", что есть в си++. Но тут лучше Zorkus знает.
Думаю вы правы :)
По каким?
Я только не понял в каком контексте критикуются C++, PHP? Как первый язык или вообще?
И тогда какие им альтернативы, конкретно С++, конкретно PHP.
Хорошая цель. Жаль, что вас ждет адское разочарование в ООП в C++.
Как, впрочем, и в любом другом языке программирования. :)
Ага. Всегда есть задачи для которых в используемом языке нехватает конструкций или уровня абстракции.
...
Но тут лучше Zorkus знает.
Я чувствую, что уже не вполне объективен :).
Да С++ знаю сам на начально-среднем уровне, потому никаких сравнительных анализов делать не стану.
Про математику: курс матанализа всяко стоит усвоить хотя бы для "вставки" мозгов.