чи важливе кодування? [зачинено]


9

Чи важливо кодування, щоб бути хорошим у галузі інформатики? Чи варто реалізовувати алгоритм, щоб його добре знати?

Я пам'ятаю ідіому одного професора, що " я ніколи не кодую"


32
Ви запитуєте групу програмістів, чи важливе кодування ... можливо, ви точно не отримаєте неупередженої відповіді.
Рейчел

25
При всій повазі до ідіоми вашого професора, якщо він не пише код, він не кваліфікований для навчання інших, як писати код. Якщо його викладання буде суто теоретичним, все-таки виграє від навичок кодування.
Роберт Харві

19
Ви б взяли уроки плавання у того, хто не зміг плавати?
Стівен А. Лоу

5
@Steven A. Lowe: я думаю, що професор, який не плаває, викладає водну фізіологію, а не плавання. І все-таки, якщо він не плаває, я б сумнівався, що він знає, як відчуває себе азотний наркоз.
Хав'єр

4
@Javier: швидше за все, він викладає підводні знесення, але навіть не сертифікований SCUBA. Технічний термін для таких людей (крім "професора") - "позуер" ;-)
Стівен А. Лоу

Відповіді:


27

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


3
це не обов'язково правда, можна зрозуміти алгоритм і застосувати його до ситуації або проблеми, не фактично кодуючи його.
aggietech

10
@aggietech: Я думаю, ключовим словом тут є «добре».
Роберт Харві

2
@aggietech, Роберт зрозумів це правильно. Я можу випробовувати алгоритми, але коли я справді намагаюся змусити їх працювати, я дізнаюся, скільки я маю дізнатися про це.

3
якщо ви говорите про for-петлі та сортування міхурів, то це не велика справа, але існує величезна різниця між читанням книги про генетичний алгоритм і фактичним вирішенням з ним реальних проблем
Стівен А. Лоу

2
@Steven, так, складність має багато спільного з цим.

19

Кодування не важливо для вашого професора, але вам потрібно пам’ятати, що він не платить робити речі. Йому платять ЗА РЕЧЕННЯ (і ЗАПИСИ речі.)

Я колишній професор математики, тому добре розумію цю динаміку.

Якщо ви хочете слідувати його шляху та бути теоретиком-теоретиком, то так, кодування має меншу важливість. Але якщо це так, не забудьте зберегти смиренність, знаючи, що ваша зарплата виплачується ресурсами, заробленими тими, хто вирішив робити справи.


3
Голос досвіду. Це про найкращий підсумок професора, який я думаю, що я бачив.
TehShrike

1
Так, і я додаю, що вам потрібно практикувати "робити", якщо ви збираєтесь навчити інших добре "робити".
Бет Вайтзель

@BitOff: Я згоден, але "якщо" також є "тільки якщо". Професор, який ніколи не кодує, не розробляє програмне забезпечення для навчання бізнесу, але він, можливо, ідеально підходить для викладання, скажімо, теорії складності. У цьому випадку він навчає студентів, як доводити теореми, тому єдиною вимогою є те, що він повинен мати практику доведення теорем (а не кодування).
ShreevatsaR

@ShreevatsaR Так, я згоден. І я насправді не все так суворо в тому, що вони багато кодують на практиці. Хороші кодери рідко роблять добрих викладачів. Якщо вчитель знає їхні тижневі бали, вони можуть це компенсувати. У нас є програма на місцевому рівні, яка залучає людей у ​​галузі до класу. Викладач є експертом у викладанні, вміє кодувати та знає, як витягувати інформацію з галузі галузі на користь студентів.
Бет Вайтзель

16

Інформатика - це не більше комп’ютерів, а астрономія - телескопи

- Едсгер Дійкстра

Я схильний погоджуватися.


2
Гаразд, але як це стосується питання?
Роберт Харві

2
"Чи важливо кодування, щоб бути хорошим з інформатики?" Якщо комп'ютер не пов'язаний, то як може бути важливим фізичне кодування комп'ютера?
ElGringoGrande

1
@ Роберт Харві: Комп'ютерна наука не стосується явно комп'ютерів, і багато астрономів витрачають мало часу на перегляд скляної лінзи. Деякі просто аналізують результати. Половина важливих відкриттів у комп'ютерному програмуванні була відома ще до появи комп'ютера.
Включення

2
@ Роберт Харві: Інформатика просто не в тому, як програмувати, це в науці обчислення. Поза чистим бінарним кодуванням ви використовуєте мову, яка є абстракцією, щоб реалізувати теорії та висновки інформатики. В інформатиці є багато ідей (наприклад, квантові обчислення), які програмування не може повністю реалізувати. Все, що я говорю, - це те, що всі ідеї інформатики можна викласти повністю та елегантно, не використовуючи мову програмування. Назвіть той, який не може.
ElGringoGrande

3
@Orbling: Дуже вірно. Наприклад, нагадаємо, що Тьюрінг винайшов поняття універсальної машини Тьюрінга ще до того, як був створений перший електронний комп'ютер. Чи той факт, що він не написав тонни коду, робить його некомпетентним інформатиком?
mipadi

11

Якщо ви говорите про чисту науку з інформатики, що спеціалізується на абстрактних, фундаментальних концепціях інформатики, то це не обов'язково.

Щоб провести аналогію: це трохи схоже на запитання, чи повинен кожен учений з ракет НАСА літати в космосі, щоб бути «добрим ученим-ракетом». Звичайно, ні. Бути космонавтом - частина космічної галузі польотів, і це дуже практична частина, але це не означає, що вчені-наземні не так важливі по-своєму.

Однак це, мабуть, гарна ідея застосувати створений ним алгоритм, якщо не насправді записати його справжньою мовою програмування. У цьому сенсі можна розглядати алгоритм проектування як галузь математики.


1
Я думаю, що справедливо сказати, що всі вчені-ракети NASA мають ґрунтовну основу ракетної науки та поглиблений практичний досвід роботи в машинобудуванні та електротехніці. О, і вони взагалі вміють писати код.
Роберт Харві

3
Я думаю, що вони багато разів обчислювали траєкторії, а не просто теоретизували про те, як.

3
+1, я додам ще один приклад - вам не потрібно мати досвіду виноробства, щоб бути чудовим сомельє (або як би там не називали хлопців-дегустаторів).
Жас

2
@Jas: жахлива аналогія. Комп'ютерники не є приймачами кінцевого продукту. Вони - винороби.
doppelgreener

1
@Axidos Ні, ні, вони виноградники .
Позначте C

9

Кодування не надто важливо бути справжнім вченим-комп’ютером. І мислення в коді може стримувати мислення, оскільки вони прагнуть виробити корисні абстрактні поняття. Більшість відмінних кодерів не мають інтелектуальних відбивачів для аналізу складних алгоритмів або для розробки таких понять, як мови програмування, алгоритми розширеного пошуку та сортування, теорія обмежених автоматів, теорія розподілених обчислень, R-дерева, протоколи відмовостійкості, надійні протоколи зв'язку, цифровий алгоритми обробки сигналів, криптографічна теорія, аналіз та оптимізація продуктивності, ефективне кешування, зменшення карт, надійні протоколи безпеки тощо. Відмінні кодери та комп'ютерні інженери зазвичай можуть використовувати ці теорії в системах, які вони намагаються побудувати, і роблять це досить ефективно, але це справді сфера інженера комп'ютерних систем або програміста.

Кодування є критично важливим для програміста на комп'ютері. Розуміння того, як кодувати корисні абстрактні поняття, вироблені комп'ютерними вченими, також є корисним.

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

Велика проблема комп’ютерної освіти полягає в тому, що більшість людей, яких навчають комп’ютери, не стануть комп'ютерними науковцями. Але занадто багато комп'ютерних вчених цього не розуміють. Кодування може не мати для них важливого значення, але якщо ви перебуваєте в їхньому класі, це майже напевно буде для вас важливим.

Ще одна велика проблема комп’ютерної освіти полягає в тому, що багатьом справжнім вченим-комп’ютерам бракує промислового досвіду, щоб бути корисним у навчанні розробці програмного забезпечення. Вони по суті намагаються навчити чогось, чого вони насправді не знають. Це змушує їх втратити авторитет. Те, що є важливим у промислових умовах, просто не реєструється у деяких із цих комп'ютерних науковців.

Довге і коротке кодування важливо для більшості людей, які стають "комп'ютерними вченими", оскільки більшість цих людей стануть комп'ютерними програмістами та інженерами комп'ютерних систем.


Відмінна відповідь, прямо до серця питання. Проблема полягає в тому, що вам потрібно навчитися обом: обчислювальній науці та інженерії програмного забезпечення, що стосуються галузі. Більшість університетів викладають один краще, ніж інший, зазвичай перший - не надто легко досягти останнього, оскільки університет по суті є науково-дослідним інститутом, який просуває перший і має мало спільного з останнім. Це питання в більшості практичних сфер.
Увімкнення

3

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

Хто-небудь компетентний в числовому аналізі, мабуть, фортранський свист. Будь-який професор AI буде кодувати в Ліспі чи Пролозі чи щось подібне.

У деяких більш математичних областях насправді не потрібно кодувати. Я все одно буду дотиком підозрілим.


2

Звучить, що він більше дискретний хлопець з математики ... просто в математику та теорію, що стоїть за інформатикою. Візьміть, що ці професори мають сказати із зерном солі.


5
Я ентузіаст математики та алгоритми. Мені завжди подобається кодування. Однак алгоритми стоять за кодуванням. 1 перо і 1 папір достатньо для алгоритмів, а також теорії обчислень, я думаю. Що я зараз роблю, це просто мислити і писати алгоритми, а не кодувати
hilal

5
Візьміть те, що говорить будь-який професор із зерном солі. Якщо він дискретний математик, сприйміть його серйозно, коли він говорить про дискретну математику, а не коли він говорить про програмування або інженерію програмного забезпечення.
Девід Торнлі

1
Хлопці з дискретної математики є одними з найважливіших у цій галузі, теорія реалізована кодерами, їй не потрібно впроваджувати, щоб бути доведеним правильним. Щіпка солі дійсно.
Увімкнення

@Orbling І прийміть те, що говорять ті, хто програмує (широка група) з подібною дозою відстороненого судження та здорового глузду.
Марк C

@ Марк С: Ну так, я б закликав усіх прийняти все, що сказав хтось із цими дозами.
Включення


2

Ви можете піти лише від розуміння теорії, але я завжди знаходив, що я розумів алгоритми та такі 1000x краще після їх кодування (наприклад, Bubble Sort vs. Quicksort, чудово знати Big-O, але бачити це на практиці з великими даними -набір дає певну оцінку реального світу для вимірювання складності обчислювальної техніки).

Я знайшов одну цікаву річ, чим більше ви вивчаєте теоретичні аспекти інформатики, тим легше стає кодування. У якийсь момент ви перестаєте думати про речі певною мовою, а радше бачите їх лише як більш широкі поняття комп'ютерного сияння.


2

Це як запитати, чи всі професори англійської мови повинні вміти писати фільми, телесеріали, романи, п’єси та вірші. Аналогічно, уявіть професора математики, який ніколи не використовує числа для не менш чужої ідеї. Тобто, є деякі основні елементи, які надають кодуванню деяке значення в змозі викладати основні інформатики. Таким чином, професор повинен знати синтаксис основної мови та як писати програми настільки складно, як і курси, які викладає професор. Якщо професор викладає про дизайн компілятора і ніколи раніше не писав компілятора, це буде головною проблемою. Уявіть, що шеф-кухар готує торт, який раніше ніколи не готував або їв торт. Ая карумба.

Хоча я бачу деякі переваги в реалізації алгоритму, щоб знати його, я сумніваюся, що це вимога. Зрештою, можна задатися питанням, наскільки далеко в кролячій норі впровадження іде розуміння того, як алгоритм реалізований? Наприклад, чи потрібно комусь брати будь-який алгоритм і реалізовувати його за різними парадигмами, такими як процедурне, об'єктно-орієнтоване та функціональне програмування, щоб дійсно його знати? Чи повинні вони знати, як компілятори переводять весь код і переміщують біти на рівні електрон-за-електрон, щоб бути досить педантичним щодо цього.


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


3
Викладачі англійської мови повинні знати, як писати сценарії фільмів, якщо вони навчають інших, як писати сценарії з фільмів. Але всі професори англійської мови, безумовно, повинні бути здатні написати дуже хорошу тезу, якщо не справжню книгу.
Роберт Харві

2
@ Роберт Харві: професор ОП не сказав, що він не може кодувати , просто що він не робить. Він міг би бути теоретиком-інформатиком, який проводить більшу частину свого часу на дослідженні. Як зауважив Дж. Б. Кінг, доки він не читає лекції з, скажімо, дизайну компілятора чи інженерії програмного забезпечення, він може бути дуже досвідченим та компетентним у своїй галузі.
mipadi

@ Роберт Харві: Я думаю, що в @mipadi є справа, професор просто сказав: "Я ніколи не кодую " , не те, що він не здатний.
Увімкнення

@JB King, @Orbling: Я б покладався, що цитата є перекладом, тому не перебільшуйте її буквально.
Хав’єр

@Javier: Цілком може бути, і в цьому випадку це буде ще менш чітким вирізом.
Включення

2

Ваш професор, можливо, має рацію, тому щоб бути професором, вам не потрібно кодувати, але про теорію знає багато. Але це не буде працювати поза межами університету.


1

Незважаючи на те, що я був професійним розробником програмного забезпечення, я отримав ступінь машинобудування.

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

Те саме стосується програмного забезпечення. "Кодер" - це машиніст або технік, а інженер - програмний інженер. У багатьох місцях одна людина виконує обидві роботи. Це не неможливо, і для деяких дуже абстрактних питань позиція "лише для інженерії" може працювати.

Але для переважної більшості відмови від кодування абсолютно немає користі.


2
Але, як ви сказали, ви інженер- механік , і ви говорите про інженерію програмного забезпечення . Інженери будують речі. Але професор, про який йде мова, викладає інформатику .
mipadi

1

Якщо ви не задумуєтесь і не зупинитесь на проблемі, що зупиняється, завжди існує використання для кодування у всіх аспектах інформатики.

Єдиним класом CS, який я брав із абсолютно не програмуванням, була теорія. Я думаю, що там багато фізиків, які кажуть: "Я ніколи не експериментую", але вони, мабуть, також ті, хто каже: "Я ніколи нічого не відкриваю". І я був би здивований, якщо їм все одно.


1
На мій ступінь обчислювальної техніки (з університетом в топ-10 на міжнародному рівні, тож не щось кульгає), я б сказав, що принаймні третина моїх класів не мала в них програмування. Обчислення - це набагато більше, ніж код.
Увімкнення

Добре, мабуть, я також зайшов до першої десятки університетів, можливо, ми навіть ходили в той же університет і брали різні класи, виходячи з наших власних подобань чи невдоволень, або випадково набирали професорів одного або іншого.
Пітер Тернер

0

Як студент з інформатики, я думаю, що спочатку краще зрозуміти поняття, що передбачають розробку програмного забезпечення. Після того, як ви дізналися ідею програмного забезпечення та те, як воно взаємодіє з комп'ютером, настав час почати кодування та вирішити конкретні проблеми з реалізацією.

Це так само, як "Винятки з програмного забезпечення", спочатку ви займаєтесь ними лише тим, що зробили щось, чого не дозволяли. Потім, коли ви їх вивчите, починайте робити те саме зі своїм кодом, щоб зробити його більш багатослівним.

Добре, я думаю, що люди, які не переймаються поняттями, як ті програмісти, які використовують винятки як звичайний робочий процес у своїх програмах. Вони знають, ЯК, але дійсно не отримують ЧОМУ.


-6

У мене є ще одна ідіома для вашого професора:

Ті, хто вміє, роблять, ті, хто не може, навчати.

imo, розмова дешева. Кожен може нескінченно дбати про «теорію» і називати це «інформатикою». Але до моменту введення його в практичну практику теорія не є дуже корисною, оскільки немає можливості її підтвердити. Я б погляд Prof про що - то набагато серйозніше , якби я знав , що він на самому ділі вирішити конкретну проблему в коді , ніж якби він просто викидає «теорію» , яка може або не може мати будь - яких доказів , що підтверджують , щоб підкріпити свою точку зору.


6
Ейнштейн, Арістотель, Вебстер, Айн Ранд, Торе, Конфуцій та Букер Т. Вашингтон були вчителями. Яке неосвічене твердження.
JeffO

4
-1 За дуже образливий коментар вчителям. Офф цитований Я знаю, але завжди смішний. Оригінальне зауваження Джорджа Бернарда Шоу було "Той, хто вміє, робить. Той, хто не може, вчить". від " Людина і Супермен", 1903 р. - він також сказав: "Мені єдина надія на порятунок людини полягає у навчанні". і був співзасновником Лондонської школи економіки (LSE), тож ви судите про його думку.
Увімкнення

2
Ейнштейн ніколи не проводив фізичного експерименту в своєму житті - він описав кілька мислительних експериментів, які були проведені іншими, і (за одним винятком) вийшов точно так, як він передбачив. Ви б сказали, що Ейнштейн не мав «істотних досягнень поза аудиторією»? Чому ви вважаєте, що тільки тому, що професор не реалізував нічого, що може бути використане кінцевими користувачами, він не, скажімо, не дослідив новий алгоритм, який буде використовуватися програмістами в області? Насправді ви, здається, навіть припускаєте, що завдання професора - навчити студентів кодувати !
ShreevatsaR

3
Чувак, багато моїх наукових професорів комп'ютерних (МТІ) були дивовижними і внесли величезний вклад в розвиток суспільства, і вони роблять "справи в своїй галузі" - багато! Але їхнє поле має дуже мало спільного з кодуванням, і вони кодуються, максимум, дуже рідко, якщо взагалі. (Серйозно, чи очікуєте ви, що хтось, хто працює над квантовими обчисленнями, написає код для квантових комп'ютерів, які навіть не існують?) У вас, здається, дуже вузький погляд на інформатику. (Пам'ятайте, що це інформатика , а не інженерія .)
ShreevatsaR

2
@GrandmasterB: Якщо професор-комп’ютер зосереджується на теорії обчислень, велика ймовірність, що йому рідко доводиться писати код. Це не означає, що він нічого не робить у своїй галузі - він, ймовірно, публікує праці з теорії обчислень! Ви поєднуєте програмування з інформатикою .
mipadi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.