кодирование важно? [закрыто]

9

Важно ли кодирование быть хорошим в информатике? Нужно ли реализовывать алгоритм, чтобы хорошо его знать?

Я помню идиому профессора CS, что « я никогда не кодирую»

Хилал
источник
32
Вы спрашиваете группу программистов, важно ли кодирование ... вы можете не получить непредвзятый ответ.
Рэйчел
25
При всем уважении к идиоме вашего профессора, если он не пишет код, он не квалифицирован, чтобы учить других, как писать код. Если его преподавание носит чисто теоретический характер, оно все равно выиграет от навыков кодирования.
Роберт Харви
19
Будете ли вы брать уроки плавания у кого-то, кто не умеет плавать?
Стивен А. Лоу
5
@ Стивен А. Лоу: я думаю, что профессор-не пловец преподает водную физиологию, а не плавание. Тем не менее, если он не плавает, я сомневаюсь, что он знает, как чувствует себя азотный наркоз.
Хавьер
4
@Javier: более вероятно, что он преподает подводные сносы, но даже не сертифицирован SCUBA. Технический термин для таких людей (кроме «профессор») - «позер» ;-)
Стивен А. Лоу

Ответы:

27

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

Стивен А. Лоу
источник
3
это не обязательно верно, можно понять алгоритм и применить его к ситуации или проблеме, фактически не кодируя его.
aggietech
10
@aggietech: я думаю, что ключевое слово здесь "хорошо".
Роберт Харви
2
@aggietech, Роберт понял все правильно. Я могу использовать алгоритмы, но когда я действительно пытаюсь заставить их работать, я узнаю, как много мне нужно узнать об этом.
3
если вы говорите о циклах for и пузырьковых сортировках, то это не страшно, но есть огромная разница между чтением книги о генетическом алгоритме и фактическим решением реальных проблем с ним
Стивен А. Лоу,
2
@ Стивен, да, сложность во многом связана с этим.
19

Кодирование не важно для вашего профессора, но вы должны помнить, что ему не платят за то, что он ДЕЛАЕТ. Ему платят, чтобы СКАЗАТЬ вещи (и НАПИСАТЬ вещи.)

Я бывший профессор математики, поэтому я хорошо понимаю эту динамику.

Если вы хотите идти по его пути и быть теоретиком-программистом, то да, кодирование имеет меньшее значение. Но если вы это сделаете, не забывайте сохранять смирение, зная, что ваша зарплата выплачивается за счет средств, заработанных теми, кто решил ДЕЛАТЬ.

Эрик Уилсон
источник
3
Голос опыта. Это лучшее резюме профессора, которое я когда-либо видел.
TehShrike
1
Да, и я бы добавил, что вам нужно практиковать «делать», если вы собираетесь научить других «делать» хорошо.
Бет Уайтзел
@BitOff: Я согласен, но «если» также «только если». Профессор, который никогда не программирует, не занимается бизнесом, обучая разработке программного обеспечения, но он может идеально подходить для преподавания, скажем, теории сложности. В этом случае он учит студентов тому, как доказывать теоремы, поэтому единственным требованием является то, что он должен иметь практику доказательства теорем (а не кодирования).
ShreevatsaR
@ ShreevatsaR Да, я согласен. И я на самом деле не настолько строг в том, что на практике они много пишут. Хорошие программисты редко делают хороших учителей. Если учитель знает свои недельные баллы, они могут восполнить это. У нас есть программа на местном уровне, которая привлекает промышленных людей в класс. Преподаватель является экспертом в области преподавания, умеет программировать и знает, как извлечь информацию из отраслевого человека на благо студентов.
Бет Уайтзел
16

Информатика не больше о компьютерах, чем астрономия о телескопах

- Эдсгер Дейкстра

Я склонен согласиться.

ElGringoGrande
источник
2
Хорошо, но как это связано с вопросом?
Роберт Харви
2
"Кодирование важно, чтобы быть хорошим в информатике?" Если компьютер не связан, как может быть важно физическое кодирование компьютера?
ElGringoGrande
1
@ Роберт Харви: «Компьютерные науки» явно не связаны с компьютерами, и многие астрономы тратят мало времени на просмотр стеклянных линз. Некоторые просто анализируют результаты. Половина важных открытий в компьютерном программировании была известна еще до того, как компьютер появился.
Orbling
2
@ Роберт Харви: Информатика просто не о том, как программировать, это наука о вычислениях. Вне чистого двоичного кодирования вы используете язык, который является абстракцией, для реализации теорий и результатов компьютерных наук. В компьютерных науках есть много идей (например, квантовые вычисления), которые программирование не может полностью реализовать. Все, что я говорю, - это то, что все идеи информатики могут быть полностью и элегантно выражены без использования языка программирования. Назовите тот, который не может.
ElGringoGrande
3
@ Orbling: очень верно. Например, напомним, что Тьюринг изобрел понятие универсальной машины Тьюринга еще до того, как был создан первый электронный компьютер. Тот факт, что он не писал тонны кода, делает его некомпетентным ученым-компьютерщиком?
Mipadi
11

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

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

Тем не менее, это, вероятно, хорошая идея - ПРИМЕНИТЬ созданный им алгоритм, если не написать его на реальном языке программирования. В этом смысле вы можете думать о разработке алгоритма как о разделе математики.

Бобби Столы
источник
1
Я думаю, что будет справедливо сказать, что все специалисты по ракетостроению в НАСА имеют глубокие знания в области ракетостроения и имеют глубокий практический опыт работы в области механики и электротехники. Да, и они, как правило, тоже умеют писать код.
Роберт Харви
3
Я думаю, что они рассчитывали траектории много раз, а не просто теоретизировали о том, как.
3
+1, я бы добавил еще один пример - вам не нужно иметь опыт в виноделии, чтобы быть великим знатоком (или как там называют дегустаторов).
Jas
2
@Jas: Ужасная аналогия. Компьютерные ученые не являются получателями конечного продукта. Они являются виноделами.
doppelgreener
1
@Axidos Нет, нет, они фермеры винограда .
Марк С
9

Кодирование не супер важно, чтобы быть настоящим ученым. А мышление в коде может сдерживать мышление, поскольку они стремятся разработать полезные абстрактные концепции. У самых превосходных кодеров нет интеллектуальных возможностей для анализа сложных алгоритмов или разработки таких понятий, как языки программирования, расширенные алгоритмы поиска и сортировки, теория конечных автоматов, теория распределенных вычислений, R-деревья, отказоустойчивые протоколы, надежные протоколы связи, цифровые алгоритмы обработки сигналов, криптографическая теория, анализ и оптимизация производительности, эффективное кэширование, сокращение карт, надежные протоколы безопасности и т. д. Превосходные программисты и компьютерные инженеры обычно могут использовать эти теории в системах, которые они пытаются построить, и делают это довольно эффективно, но это действительно царство инженера компьютерных систем или программиста.

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

Одна большая проблема в информатике заключается в том, что им часто приходится находить решения математических задач, которые мало полезны для решения современных задач программирования. Даже если бы они закодировали решение, никто бы не смог его использовать. Подумайте о теории цифровой обработки сигналов. Он был изобретен такими людьми, как Фурье, Гильберт и Шеннон, но применение к компьютерным задачам DSP не было широко возможным до 20 лет назад.

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

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

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

Джей Годсе
источник
Отличный ответ, прямо к сути вопроса. Проблема в том, что вам нужно изучить как: вычислительная наука и разработка программного обеспечения, относящиеся к отрасли. Большинство университетов преподают один лучше, чем другой, обычно первый - не так-то просто достичь последнего, поскольку университет по своей сути является исследовательским институтом, который продвигает первый и имеет мало общего с последним. Это проблема в большинстве практических областей.
Orbling
3

Зависит от подполя, в котором находится профессор.

Любой, кто компетентен в численном анализе, вероятно, является фортрановским вундеркиндом. Любой профессор ИИ будет писать код на Лиспе, Прологе или что-то в этом роде.

В некоторых более математических областях действительно нет необходимости кодировать. Я все еще был бы подозрительным прикосновением, сам.

Дэвид Торнли
источник
2

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

Стивен Стрига
источник
5
Я энтузиаст математики и наркоман алгоритмов. Мне всегда нравится кодирование. Однако за кодированием стоят алгоритмы. Я думаю, что для алгоритмов, а также для теории вычислений достаточно 1 ручки и 1 бумаги. В настоящее время я просто думаю и пишу алгоритмы, а не кодирую
хилал
5
Возьми то, что говорит любой профессор, с крошкой соли. Если он дискретный математик, принимайте его всерьез, когда он говорит о дискретной математике, а не когда он говорит о программировании или разработке программного обеспечения.
Дэвид Торнли
1
Дискретные математики, ребята, являются одними из самых важных в этой области, теория реализуется программистами, она не нуждается в реализации, чтобы быть подтвержденной. Щепотка соли действительно.
Orbling
@ Orbling И возьмите то, что говорят те, кто программирует (широкая группа) с подобной дозой взвешенного суждения и здравого смысла.
Марк С
@Mark C: Ну, да, я призываю всех принять все, что говорят все, с этими дозами.
Orbling
2

Я бы сказал: «Логика важна»

Джон Хартсок
источник
2
Хорошо, но как это связано с вопросом?
Роберт Харви
2

Вы можете понять только теорию, но я всегда обнаружил, что я понял алгоритмы и такие в 1000 раз лучше после их кодирования (например, Bubble sort против Quicksort, это здорово знать Big-O, но видеть его на практике с большими данными -sets дает вам определенную оценку реального мира для измерения вычислительной сложности).

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

Куртис
источник
2

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

Хотя я вижу некоторые преимущества в реализации алгоритма, чтобы знать его, я сомневаюсь, что это требование. В конце концов, можно задаться вопросом, как далеко заходит кроличья нора реализации, чтобы понять, как реализован алгоритм? Например, кто-то должен взять какой-либо алгоритм и реализовать его в рамках различных парадигм, таких как процедурное, объектно-ориентированное и функциональное программирование, чтобы действительно его знать? Должны ли они знать, как компиляторы переводят весь код и перемещают биты на уровне электронов, чтобы быть довольно педантичными по этому поводу.


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

JB King
источник
3
Английские профессора должны знать, как писать сценарии фильмов, если они учат других, как писать сценарии фильмов. Но все английские профессора должны быть в состоянии написать очень хороший тезис, если не настоящую книгу.
Роберт Харви
2
@ Роберт Харви: Профессор ОП не сказал , что он не может кодировать, просто он этого не делает. Он может быть теоретическим специалистом по информатике, который тратит большую часть своего времени на исследования. Как отметил Дж. Б. Кинг, пока он не читает лекции, скажем, о разработке компиляторов или разработке программного обеспечения, он вполне может быть опытным и компетентным в своей области.
Mipadi
@ Роберт Харви: Я думаю, что @mipadi имеет смысл, профессор просто сказал: «Я никогда не кодирую » , не то, чтобы он был неспособен.
Orbling
@JB Кинг, @Orbling: могу поспорить, что цитата - перевод, так что не переоценивайте ее буквально.
Хавьер
@Javier: вполне может быть, в этом случае это будет еще менее четким.
Orbling
2

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

Маной Р
источник
1

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

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

То же самое касается программного обеспечения. «Кодер» - это машинист или техник, а инженер-программист - ну, в общем, инженер. Во многих местах один человек выполняет обе работы. Это не невозможно, и для некоторых очень абстрактных вопросов может сработать позиция «только для инженеров».

Но для подавляющего большинства абсолютно бесполезно отказываться от кода.

как зовут
источник
2
Но, как вы сказали, вы механический инженер , и вы говорите о программной инженерии . Инженеры строят вещи. Но этот профессор преподает информатику .
Mipadi
1

Если вы не обдумываете и не решаете проблему остановки, всегда есть применение кодированию во всех аспектах компьютерных наук.

Единственный класс CS, который я взял без программирования - это теория. Я полагаю, что есть много физиков, которые говорят: «Я никогда не экспериментирую», но они, вероятно, также говорят, что «Я никогда ничего не открываю». И я был бы удивлен, если они заботятся.

Питер Тернер
источник
1
В моей степени по вычислительной технике (с университетом, входящим в десятку лучших на международном уровне, так что ничего плохого), я бы сказал, что, по крайней мере, треть моих классов вообще не занималась программированием. Вычисления - это гораздо больше, чем просто код.
Orbling
Хорошо, по-видимому, я также поступил в десятку лучших университетов, возможно, мы даже ходили в один и тот же университет и брали разные классы на основе наших собственных симпатий или антипатий или получали профессоров того или иного рода наугад.
Питер Тернер
0

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

Это так же, как «Исключения программного обеспечения», поначалу вы имеете дело с ними только потому, что сделали то, что было запрещено. Затем, когда вы изучите их, начните делать то же самое со своим кодом, чтобы сделать его более подробным.

Ну, я думаю, что люди, которые не заботятся о таких понятиях, как те программисты, которые используют исключения как обычный рабочий процесс в своих приложениях. Они знают, КАК, но не получают ПОЧЕМУ.

guiman
источник
-6

У меня есть другая идиома для вашего профессора:

Те, кто могут, делают, те, кто не может, учат.

IMO, говорить дешево. Любой может бесконечно болтать о «теории» и называть ее «информатикой». Но до практического применения теория не очень полезна, потому что нет способа ее подтвердить. Я бы взгляд Prof о чем - то гораздо серьезнее , если бы я знал , что он на самом деле решить конкретную проблему в коде , чем если бы он просто извергает «теорию» , которая может или не может иметь каких - либо доказательств , подтверждающих , чтобы подкрепить свою точку зрения.

GrandmasterB
источник
6
Эйнштейн, Аристотель, Вебстер, Айн Рэнд, Торо, Конфуций и Букер Т. Вашингтон были учителями. Какое необразованное утверждение.
JeffO
4
-1 За крайне оскорбительный комментарий учителям. Я знаю, но всегда смешно. Первоначальное замечание Джорджа Бернарда Шоу было «Тот, кто может, делает. Тот, кто не может, учит». от Человека и Супермена, 1903 - он также сказал: «Для меня единственная надежда на спасение человека заключается в обучении». и был соучредителем Лондонской школы экономики (LSE), так что вы судите по его мнению.
Orbling
2
Эйнштейн никогда не проводил физических экспериментов в своей жизни - он описал несколько мысленных экспериментов, которые были проведены другими и (за одним исключением) вышли именно так, как он предсказывал. Вы бы сказали, что у Эйнштейна не было «существенных достижений за пределами класса»? Почему вы предполагаете , что только потому , что профессор ничего непосредственно годного к употреблению конечных пользователей , не реализован, он, скажем, не исследовал новый алгоритм , который будет использоваться программистами в области? На самом деле, вы, кажется, даже предполагаете, что работа профессора - научить студентов программировать !
ShreevatsaR
3
Чувак, много моих компьютерных наук профессора (МТИ) были удивительными и внесли огромный вклад в развитие общества, и они делают «делать вещи в своей области» - много! Но их поле имеет очень мало общего с кодированием, и они кодируют в большинстве случаев очень редко, если вообще пишут. (Серьезно, ожидаете ли вы, что кто-то, работающий над квантовыми вычислениями, будет писать код для квантовых компьютеров, которых даже не существует?) У вас, похоже, очень узкий взгляд на информатику. (Помните, что это информатика , а не инженерия .)
ShreevatsaR
2
@GrandmasterB: Если профессор компьютерных наук фокусируется на теории вычислений, весьма вероятно, что ему редко приходится писать код. Это не значит, что он ничего не делает в своей области - скорее всего, он публикует статьи по теории вычислений! Вы смешиваете программирование с информатикой .
Mipadi