worm2, спасибо за чёткий и развёрнутый ответ.
А с формулировкой того, что эти инструменты изначально были созданы для математиков, как сказано в посл. абзаце, я вообще столкнулся впервые, однако мысль сильная.
И ещё, конкретно подразумевается под основами логики?
Только логические операции, условные высказывания, таблицы истинности и упрощение лог.выражений (как мне кажется, для практики именно этого из логики и достаточно), или в том числе какие-нибудь дополнительные понятия вроде аксиоматические систем, умозаключений и предикатов тоже нужны?
Спасибо также за примеры.
AlexDem, ух... Что есть программист - это вообще отдельный разговор, причём очень часто перерастающий в многостраничный флуд чуть ли не из разряда "какой язык круче".
А вообще, конечно, это действительно два разных понятия, которые, к сожалению, очень многие не различают в принципе, отчего считают, что программирование - тривиальная задача. Пример тому - многие школьники, научившиеся делать ввод/вывод в паскале, которым потом кажется, что море по колено и вообще ничего сложного в программировании нет (ну как же, конечно! Ведь всё есть, по сути, I/O).
Впрочем, поговорка "чем меньше знаем мы, тем кажется, что больше" работала, работает, и, к сожалению, довольно долго ещё будет работать.
Будь я работодателем, если бы передо мной стоял выбор "программист" или "кодер", я бы принял положительное решение, скорее всего, в сторону первого, так как второму обязательно бы пришлось часами в рабочее время спрашивать на форумах и тематических сайтах "а как это сделать", "а как то сделать", скачивать тонны чужого кода, библиотек и так далее. Словом, суммарные издержки на кодера, если, конечно, задача не совсем тривиальная, могут оказаться намного больше (скорость, отладка, качество кода, эффективность алгоритмов и СД и т.д.), отсюда и выбор.
Что же, получается, чистый кодер умеет? Выкликивать мышкой GUI и ставить ему на ивенты скопированный из сети код? Не лучший, на мой взгляд, вариант...
Тем более, как уже сказал
delphiec, не всегда код в сети оказывается достаточного качества.
EtCetera, в общем-то согласен. Первыми программистами были чистые математики, но и задачи были чисто математические, отсюда и конфуз "математик - идеальный программист", хотя на деле программист - это совершенно другая специальность, но в которой всё же нужна математическая грамотность. Никто же не говорит, что идеальнейший физик или экономист - математик, хотя первые двое тоже оперирует множеством математических понятий.
И всё же математик по разуму как физику, так и программисту ближе, чем, скажем, филолог или юрист.
Цитата:
ситуация, при которой математика и программирование все больше расходятся друг от друга
Как сказать... Они не столько расходятся, сколько над уже существующими методами программирования нарастают всё новые и новые слои надстроек. Когда-то, например, над языками ассемблера выросло структурное кодирование, а над ним однажды - объектно-ориентированное.
Так что в принципе она осталась, только мы её не так отчётливо видим.
Вспоминается недавний конфуз... Знакомый, работающий с JavaScript, попросил моей помощи - ему надо было отсортировать небольшой массив, который, скорее всего, уже будет частично упорядочен. Ну, первое что мне пришло в голову, коли он маленький и частично упорядоченный, это, разумеется, сортировка вставками. Начал я ему объяснять...
Потом оба долго смеялись, когда оказалось, что в JS есть встроенная функция sort(), правда она реализует не самый эффективный в данном случае алгоритм.
Был ещё один похожий случай, когда я писал парсер ini-файлов на php, а потом с невероятным ужасом обнаружил, что в языке есть встроенная функция parse_ini_file() и долго-долго ругался на впустую совершённую работу... Вот примерно в этом и заключается расхождения программирования от математики - в абстракциях парадигм и в том, что большая часть "стандартных" задач, не сверхтребовательных к производительности, уже реализованы в той или иной библиотеке.
Цитата:
Таким образом, система мышления у программиста (продвинутого, конечно) совсем не та, что у математика
Да, согласен. У хорошего программиста ещё должно и быть и какое-то эстетическое чувство, чувство стиля, так как написать код - это мало, надо ещё его поддерживать и развивать. А как его будешь улучшать, если архитектура изначально спроектирована так, что чтобы хоть что-то добавить приходится перелопачивать ровно треть, а то и половину, кода? И здесь как раз очень помогает в том числе и умение правильно абстрагировать и разделять вещи по каким-то схожим характеристикам.
Совсем недавно я видел код примерно на 1000 строк, где все переменные были названы a, b, c, ab, adfg, asdf (и это не названия переменных, содержащих длины и площади фигур) и так далее, а также не было ни одного отступа, хотя код реализовывал какой-то сложный мат. метод...
Вопрос - как долго кто-то, кроме самого автора (да и он тоже через 3-4 месяца), будет разбираться в этом коде и делать его понятным хотя бы специалисту в данной области? Увы, примерно 1/2-3/4 времени, которое квалифицированному читающему понадобилось бы чтобы написать эквивалентный, но читаемый код.
Словом, для промышленного программирования только математики действительно недостаточно хотя бы только из-за того, что на рынке доминирует парадигма ООП и всего лишь написать код - мало.
Системное программирование, в свою очередь, более близко к математике, так как оно ближе и к аппаратуре.
Вот именно поэтому я с вами абсолютно согласен.
И ваше мнение не должно быть скромным - вполне похоже, что вы по профессии (бывшей али текущей) и есть программист, если оценивать по сказанному вами.
Цитата:
Смотря что разрабатывать, естественно, если формы с кнопочками делать, то не нужны
Прикол в том, что ~70% разработчиков только этим и занимаются, на более низком уровне всего лишь подключая чужие библиотеки к этим окошкам и кнопочкам.
Да и оно неудивительно - очень многим нынешним программистам работодатель ставит задачи из разряда "клонировать 1С специально для нашей фирмы", а тут, конечно же, уже есть наработанная база, состоявшиеся методики, технологии и удобные библиотеки. Вывод очевиден.
Цитата:
например я давно делал такой перебор, чтобы пройти уровень в игре "Таинственный остров"
Какая знакомая ситуация!
Где-то 2/3 месяца назад факт того, что я не могу проходить игру "пятнашки" за приемлемое время, если не начинаю думать, меня так оскорбил, что я взялся писать программу для решения этой задачи методом "грубого подбора".
delphiec, вроде как-то так получается, что основная нужда программистов в математике находится в области системного программирования - компиляторов, операционных систем, работы с оборудованием, сетью и так далее, а для прикладного программирования достаточно основ?
Забыл сказать: сейчас же вроде как развивается так называемые параллельные вычисления, многоядерные процессоры и т.д. А что по этому поводу? Ведь в ближайшее время не предвидится сильно большой простоты в этом вопросе.