Возможно, когда я говорил о Computer Science, я имел в виду Software Engineering. Хотелось бы узнать четкое определение того и другого.
Незванный гость писал(а):
В целом, Software Engineering включает в себя элементы гуманитарные. Программные системы разрабатываются людьми, и, часто (хотя и не всегда) для людей. Соответствено имеет место быть взаимодействие людей в процессе построения системы и взаимодействие людей с системой.
Да, немаловажный момент, если не основной. А поскольку проектирование, как правильно было замечено, выполняется людми (и часто - не одним человеком), тут и выясняется, что не хлебом единым (то бишь математикой & etc) жив программер... То, о чем тут упоминалось - математическая логика, теория автоматов, статистическая обработка данных, асм, и т.д. - это
инструменты, но ими надо уметь пользоватся. Если кто-то знает синтаксис языка, это еще не значит, что он умеет его (язык) использовать.
Об асме: я склонен считать, что человек, использующий некую платформу, должен
хорошо представлять архитектуру системы (микроконтроллера или процессора), и
немного знать ассемблер.
Использовать асм нежелательно, поскольку:
1) Вряд ли за ограниченное время можно выучить его настолько хорошо, что бы написать код, более оптимальный, чем тот, что создает фирменный компилятор C (а они как правило, есть).
2) Даже если и получится это сделать, то такой код будет непереносимым монолитом, который невозможно нигде использовать, кроме даной платформы.
То есть использовать его, конечно, надо, но очень осторожно и дозированно.
То же можно сказать о классах, наследовании и т.п - тоже, прежде чем применять, надо подумать "а на фига?".
Кстати, пока я тут писал, мне пришла одна мысль (да мож и не мне, это просто я так понял
Незванного гостя), как разделить понятие Computer Science и Software Engineering. Первое - это скорей, наука об
алгоритмах(по-моему, в США в вузах даже предмет такой есть - алгоритмы), их построении и анализе, а второе - о проектировании программ (оно и понятно, из названия следует).
Эту тему я создал, вспомнив, что пишет о проектировании программ А.Голуб в своей книге "Веревка достаточной длины, что бы выстрелить себе в ногу. Правила программирования на C/C++". Признатся, вспомнил я не все...
Вот, из главы 6, под названием "Если вы не можете сказать это по-английски, то вы не сможете выполнить это на С/С++.":
Цитата:
Акт записи на английском языке описания того, что делает программа, и что делает каждая функция в программе, является критическим шагом в мыслительном процессе. Хорошо построенное, грамматически правильное предложение - признак ясного мышления. Если вы не можете это записать, то велика вероятность того, что вы не полностью продумали проблему или решение. Плохая грамматика и строение предложения являются также показателем небрежного мышления. Поэтому первый шаг в написании любой программы - записать то, что делает программа, и как она это делает.
Есть разные мнения о возможности мышления вне языка, но я убежден, что аналитическое мышление того типа, который нужен в компьютерном программировании, тесно связано с языковыми навыками. Я не думаю, что является случайностью то, что многие из знакомых мне лучших программистов имеют дипломы по истории, филологии и схожим наукам. Также не является совпадением то, что некоторые из виденных мной худших программ были написаны инженерами, физиками и математиками, затратившими в университете массу энергии на то, чтобы держаться как можно дальше от занятий по языку и литературе.
Сущность заключается в том, что математическая подготовка почти не нужна в компьютерном программировании. Тот тип организационного мастерства и аналитических способностей, который нужен для программирования, связан полностью с гуманитарными науками. Логика, например, преподавалась на философском факультете, когда я был в университете. Процесс, используемый при проектировании и написании компьютерных программ, почти полностью идентичен тому, который используется, чтобы сочинять и писать книги. Процесс программирования совсем не связан с теми процессами, которые используются для решения математических уравнений.
А вот, в следующем абзаце, собственно о том, что мухи от котлет все-таки отличаются, чего я поначалу не заметил..
:
Цитата:
Здесь я делаю различие между информатикой (computer science) - математическим анализом компьютерных программ - и программированием или разработкой программного обеспечения - дисциплиной, интересующейся написанием компьютерных программ.
P.S. Извиняюсь за длинный сумбурный пост и кучу банальностей, я просто пытался объяснить свою позицию.