Важно ли кодирование быть хорошим в информатике? Нужно ли реализовывать алгоритм, чтобы хорошо его знать?
Я помню идиому профессора CS, что « я никогда не кодирую»
Важно ли кодирование быть хорошим в информатике? Нужно ли реализовывать алгоритм, чтобы хорошо его знать?
Я помню идиому профессора CS, что « я никогда не кодирую»
Ответы:
Вы не будете действительно знать алгоритм хорошо до тех пор , пока его код.
Кодирование не важно для вашего профессора, но вы должны помнить, что ему не платят за то, что он ДЕЛАЕТ. Ему платят, чтобы СКАЗАТЬ вещи (и НАПИСАТЬ вещи.)
Я бывший профессор математики, поэтому я хорошо понимаю эту динамику.
Если вы хотите идти по его пути и быть теоретиком-программистом, то да, кодирование имеет меньшее значение. Но если вы это сделаете, не забывайте сохранять смирение, зная, что ваша зарплата выплачивается за счет средств, заработанных теми, кто решил ДЕЛАТЬ.
Информатика не больше о компьютерах, чем астрономия о телескопах
- Эдсгер Дейкстра
Я склонен согласиться.
Если вы говорите о том, чтобы быть чистым ученым в области компьютерных наук, специализирующимся на абстрактных, фундаментальных понятиях в области компьютерных наук, то это не обязательно.
Провести аналогию: это все равно, что спросить, должен ли каждый ученый в НАСА летать в космосе, чтобы стать «хорошим специалистом по ракетам». Конечно, нет. Быть астронавтом - это часть индустрии космических полетов, и очень практическая часть, но это не значит, что наземные ученые не так важны по-своему.
Тем не менее, это, вероятно, хорошая идея - ПРИМЕНИТЬ созданный им алгоритм, если не написать его на реальном языке программирования. В этом смысле вы можете думать о разработке алгоритма как о разделе математики.
Кодирование не супер важно, чтобы быть настоящим ученым. А мышление в коде может сдерживать мышление, поскольку они стремятся разработать полезные абстрактные концепции. У самых превосходных кодеров нет интеллектуальных возможностей для анализа сложных алгоритмов или разработки таких понятий, как языки программирования, расширенные алгоритмы поиска и сортировки, теория конечных автоматов, теория распределенных вычислений, R-деревья, отказоустойчивые протоколы, надежные протоколы связи, цифровые алгоритмы обработки сигналов, криптографическая теория, анализ и оптимизация производительности, эффективное кэширование, сокращение карт, надежные протоколы безопасности и т. д. Превосходные программисты и компьютерные инженеры обычно могут использовать эти теории в системах, которые они пытаются построить, и делают это довольно эффективно, но это действительно царство инженера компьютерных систем или программиста.
Кодирование очень важно для программиста. Понимание того, как кодировать полезные абстрактные концепции, созданные учеными-программистами, в рабочий код также полезно.
Одна большая проблема в информатике заключается в том, что им часто приходится находить решения математических задач, которые мало полезны для решения современных задач программирования. Даже если бы они закодировали решение, никто бы не смог его использовать. Подумайте о теории цифровой обработки сигналов. Он был изобретен такими людьми, как Фурье, Гильберт и Шеннон, но применение к компьютерным задачам DSP не было широко возможным до 20 лет назад.
Большая проблема в компьютерном образовании состоит в том, что большинство людей, которых обучают компьютерные ученые, не станут компьютерными учеными. Но слишком много компьютерных ученых не понимают этого. Кодирование может быть не важно для них, но если вы находитесь в их классе, это почти наверняка будет важно для вас.
Еще одна большая проблема в компьютерном образовании заключается в том, что многим настоящим компьютерным ученым не хватает промышленного опыта, чтобы быть полезным для обучения разработке программного обеспечения. По сути, они пытаются научить тому, чего на самом деле не знают. Это заставляет их терять доверие. Вещи, которые важны в промышленных условиях, просто не часто регистрируются у некоторых из этих компьютерных ученых.
Длинное и короткое кодирование важно для большинства людей, которые становятся «учеными-компьютерщиками», потому что большинство из них станут программистами и инженерами компьютерных систем.
Зависит от подполя, в котором находится профессор.
Любой, кто компетентен в численном анализе, вероятно, является фортрановским вундеркиндом. Любой профессор ИИ будет писать код на Лиспе, Прологе или что-то в этом роде.
В некоторых более математических областях действительно нет необходимости кодировать. Я все еще был бы подозрительным прикосновением, сам.
Похоже, он больше похож на дискретного математика ... просто в математику и теорию компьютерных наук. Возьмите то, что говорят эти профессора, с долей соли.
Вы можете понять только теорию, но я всегда обнаружил, что я понял алгоритмы и такие в 1000 раз лучше после их кодирования (например, Bubble sort против Quicksort, это здорово знать Big-O, но видеть его на практике с большими данными -sets дает вам определенную оценку реального мира для измерения вычислительной сложности).
Одна интересная вещь, которую я обнаружил, - чем больше вы изучаете теоретические аспекты информатики, тем легче становится программирование. В какой-то момент вы перестаете думать о вещах на определенном языке, а скорее воспринимаете их как более широкие понятия компьютерной науки.
Это все равно, что спросить, должны ли все английские профессора писать фильмы, сериалы, романы, пьесы и стихи. Точно так же представьте себе профессора математики, который никогда не использует числа для столь же диковинной идеи. То есть, есть некоторые базовые элементы, которые придают кодированию некоторую важность в способности преподавать базовые компьютерные науки. Таким образом, профессор должен знать базовый синтаксис языка и умение писать такие сложные программы, как курсы, которые преподает профессор. Если профессор преподает дизайн компилятора и никогда раньше не писал компилятор, это было бы серьезной проблемой. Представьте себе шеф-повара, который готовит торт, который никогда не готовил или не ел торт раньше. Да, карумба.
Хотя я вижу некоторые преимущества в реализации алгоритма, чтобы знать его, я сомневаюсь, что это требование. В конце концов, можно задаться вопросом, как далеко заходит кроличья нора реализации, чтобы понять, как реализован алгоритм? Например, кто-то должен взять какой-либо алгоритм и реализовать его в рамках различных парадигм, таких как процедурное, объектно-ориентированное и функциональное программирование, чтобы действительно его знать? Должны ли они знать, как компиляторы переводят весь код и перемещают биты на уровне электронов, чтобы быть довольно педантичными по этому поводу.
«Я никогда не кодирую», тем не менее, имеет смысл ограничивать прошлое, а также настоящее время. Также может существовать неявное предположение о «кодировании» как о непритязательной вещи, которая ниже уровня профессора для другого способа посмотреть на утверждение, которое может нести в себе довольно негативный тон, который может не очень хорошо звучать в некоторых кругах.
Несмотря на то, что я профессиональный разработчик программного обеспечения, я получил диплом инженера-механика.
Вы можете быть хорошим механическим дизайнером с очень небольшим опытом сборки и обработки деталей, оставляя эту работу машинистам. Но знание того, как собирать и обрабатывать детали, сделает вас значительно лучше инженером, потому что вы можете предсказать трудности, связанные с изготовлением и сборкой того, что вы проектируете.
То же самое касается программного обеспечения. «Кодер» - это машинист или техник, а инженер-программист - ну, в общем, инженер. Во многих местах один человек выполняет обе работы. Это не невозможно, и для некоторых очень абстрактных вопросов может сработать позиция «только для инженеров».
Но для подавляющего большинства абсолютно бесполезно отказываться от кода.
Если вы не обдумываете и не решаете проблему остановки, всегда есть применение кодированию во всех аспектах компьютерных наук.
Единственный класс CS, который я взял без программирования - это теория. Я полагаю, что есть много физиков, которые говорят: «Я никогда не экспериментирую», но они, вероятно, также говорят, что «Я никогда ничего не открываю». И я был бы удивлен, если они заботятся.
Будучи студентом факультета компьютерных наук, я думаю, что сначала лучше понять концепции, связанные с разработкой программного обеспечения. Как только вы изучите идею программного обеспечения и как оно взаимодействует с компьютером, настало время приступить к написанию кода и решению конкретных проблем реализации.
Это так же, как «Исключения программного обеспечения», поначалу вы имеете дело с ними только потому, что сделали то, что было запрещено. Затем, когда вы изучите их, начните делать то же самое со своим кодом, чтобы сделать его более подробным.
Ну, я думаю, что люди, которые не заботятся о таких понятиях, как те программисты, которые используют исключения как обычный рабочий процесс в своих приложениях. Они знают, КАК, но не получают ПОЧЕМУ.
У меня есть другая идиома для вашего профессора:
Те, кто могут, делают, те, кто не может, учат.
IMO, говорить дешево. Любой может бесконечно болтать о «теории» и называть ее «информатикой». Но до практического применения теория не очень полезна, потому что нет способа ее подтвердить. Я бы взгляд Prof о чем - то гораздо серьезнее , если бы я знал , что он на самом деле решить конкретную проблему в коде , чем если бы он просто извергает «теорию» , которая может или не может иметь каких - либо доказательств , подтверждающих , чтобы подкрепить свою точку зрения.