Когда теоретическая информатика полезна?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

25
задан nbro 29 December 2016 в 21:39
поделиться

22 ответа

Когда я закончил колледж, я предположил, что был на одном уровне со всеми остальными: "У меня есть БАКАЛАВР НАУК по CS, и также - много других людей, и мы можем все сделать по существу то же самое". Я в конечном счете обнаружил, что мое предположение было ложью. Я выделился, и мое образование имело непосредственное отношение к нему - особенно мой градус.

я знал, что было одно "небольшое" различие, в котором у меня был "B.S". в CS, потому что мой колледж был одним из первых (предположительно, № 2 в 1987) в стране для получения аккредитации для ее программы на получение степени CS, и я получил высшее образование во втором классе для имения той аккредитации. В то время я не думал, что это имело значение очень.

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

После колледжа (USAFA), я провел четыре года в Военно-воздушных силах, два из которых применяли мой градус CS. Там я заметил, что у очень немногих моих коллег были градусы или даже обучение, связанное с компьютерами. Военно-воздушные силы отправили меня в пять месяцев обучения сертификации, где я снова нашел отсутствие градусов или обучения. Но здесь я начал замечать различие - стало полностью очевидно, что многие люди, с которыми я встретился, ДЕЙСТВИТЕЛЬНО не знали то, что они делали, и который включал людей с обучением или градусами. Позвольте мне по возможности иллюстрировать.

В моем обучении сертификации Военно-воздушных сил были в общей сложности тринадцать человек (включая меня). Как чиновники Военно-воздушных сил или эквивалент, у всех нас были градусы БАКАЛАВРА НАУК. Я был в середине на основе возраста и разряда (я был O-2 среди шести O-1s и шести O-3s и выше). В конце этого обучения Военно-воздушные силы формально утвердили нас всех как одинаково компетентных получить, создать, разработать, поддержать, и управлять ЛЮБОЙ компьютерной системой или системой связи для ЛЮБОЙ части Министерства обороны.

Однако тринадцати из нас, только шесть имели любую форму связанного с компьютером градуса; другие семь имели градусы в пределах от аэронавтики к химии/биологии к психологии. Из шести из нас с градусами CS я узнал, что два никогда не писал программу никакого вида и никогда не использовал компьютер больше, чем небрежно (писчие бумаги, играя в игры, и т.д.). Я узнал, что еще два из нас записали точно одну программу на одиночном компьютере во время их программы на получение степени CS. Только еще один человек и я записали больше чем одну программу или использовали больше чем один вид компьютера - действительно, мы нашли, что два записали много программ и использовали много видов компьютеров.

К концу нашего пятимесячного обучения, нашему классу присвоили проект программирования, и мы были разделены на четыре группы для отдельного обязательства его. Наши преподаватели разделили класс для распространения "таланта программирования" справедливо, и они присвоили роли руководителя группы, технического вывода и разработчика. Каждой группе дали неделю для реализации (в Ada) полного экрана, основанный на тексте пользовательский интерфейс (это было 1990) для средства моделирования полета сверху обеспеченной преподавателями библиотеки бортмехаников. Я был назначен техническим выводом для своей команды четыре.

Мой руководитель группы (у кого не было компьютерного градуса) попросил, чтобы другие три из нас разделили проект на задачи и затем присвоил одну треть из них каждому из нас. Я закончил свою треть задач к середине того первого дня, затем проведенного на остальную часть дня, помогая моим другим двум товарищам по команде, говоря с моим руководителем группы (BSing; ^), и играющий на моем компьютере.

Следующим утром (день два), мой руководитель группы конфиденциально сообщил мне, что наши другие два товарища по команде не сделали успехов (нельзя было на самом деле записать, "если бы" оператор, который скомпилирует), и он попросил, чтобы я взял их работу. Я закончил весь проект к второй половине дня, и моя команда потратила остальную часть дня, управляя средством моделирования.

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

Между тем, к середине дня три, я заметил, что средство моделирования полета просто, казалось, вело себя "неправильно". Так как у одного из моих одноклассников был градус в аэронавтике, я спросил его об этом. Он был мистифицирован, затем признался, что на самом деле не знал то, что сделало плоскую муху!?! Я был ошеломлен! Оказывается, что его вся программа на получение степени была о безопасности и расследованиях катастрофы - никакая реальная математика или наука позади полета. С другой стороны, у меня был, возможно, несовершеннолетний в аэронавтике (помните USAFA?), но мы разработали крылья и выполнили реальные испытания аэродинамической трубы. Поэтому я бесшумно потратил остальную часть недели, переписав обеспеченную преподавателями библиотеку бортмехаников, пока средство моделирования не управляло "правом".

С тех пор, я проводил почти два десятилетия как подрядчик и иногда как сотрудник, всегда делая разработку программного обеспечения плюс связанные операции (DBA, архитектор, и т.д.). Я продолжил находить больше того же, и в конечном счете я разочаровался в своем юном предположении.

Так, что точно я обнаружил? Не все равны, и это хорошо - я не лучший человек, потому что я могу программировать эффективно, но я более полезен ЕСЛИ, в именно это Вы нуждаетесь от меня. Я узнал, что мое образование действительно имело значение: выращивание в семье электриков и инженеров-электриков, создание наборов электроники, чтение БУКВАЛЬНО каждая компьютерная книга в школе/публичных библиотеках, потому что у меня не было доступа к реальному компьютеру, затем перемещаясь в новый город, где моя средняя школа действительно имела компьютеры, затем получая мой собственный компьютер как подарок, идя в школы, которые имели компьютеры многих различных размеров и видов (ПК к мэйнфреймам), получая аккредитованную степень из ОЧЕНЬ хорошего технического института, имея необходимость записать много программ в различных языках на различных видах компьютеров, имея необходимость записать твердые программы (как моя собственная виртуальная машина с пользовательским ассемблером или реализация сжатия по алгоритму Хаффмана, и т.д.), имея необходимость диагностировать для меня, создавая мои собственные компьютеры из частей и устанавливая ВСЕ программное обеспечение, и т.д.

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

Самое главное, после того, как я изучил все это, я узнал, что не знаю проклятую вещь. Перед лицом все, что там должен потенциально знать, мое знание, миниатюрно.

И я довольно доволен этим. Но я рекомендую попробовать.

24
ответ дан Rob Williams 28 November 2019 в 17:33
поделиться

Я предполагаю, что это зависит, на котором поле Вы входите.

-1
ответ дан joth 28 November 2019 в 17:33
поделиться

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

Вы не знаете, что ваш босс попросит вас сделать, возможно, вам придется использовать то, что, по вашему мнению, не принесет пользы, как сказал Джеффри Л. Уитледж.

1
ответ дан Loai Nagati 28 November 2019 в 17:33
поделиться

Я учусь для своего Распределенного курса алгоритмов теперь. Существует глава об отказоустойчивости, и это содержит некоторые доказательства на верхней границе для того, сколько процессов может перестать работать (или неправильно себя вести) так, чтобы распределенный алгоритм мог обработать его правильно.

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

1
ответ дан Roman Plášil 28 November 2019 в 17:33
поделиться

Потому что шаблоны C ++ на самом деле являются своего рода лямбда-исчислением. См. Www.cs.nott.ac.uk/types06/slides/michelbrink_types_06.pdf

1
ответ дан Roman Plášil 28 November 2019 в 17:33
поделиться

Простой. Например: если бы я использую RSACryptoServiceProvider, я хотел бы знать то, что, что и то, почему я могу доверять ему.

1
ответ дан rafek 28 November 2019 в 17:33
поделиться

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

Я считаю, что они также являются полезным инструментом для объяснения поведения процесса другим людям.

1
ответ дан EvilTeach 28 November 2019 в 17:33
поделиться

Я нашел, что все, мне нужен для ежедневного счастья от CS теоретический мир, является произнесением молитвы "Слабая связь и Высокая связность". Roger S. Pressman сделал его академическим прежде , Steve McConnell сделал его модным.

1
ответ дан Bill 28 November 2019 в 17:33
поделиться

После того, как я окончил CS, я подумал о том же: целая куча теорий, которые мы изучали, совершенно бесполезны на практике. Это оказалось правильным в течение короткого периода времени, однако в тот момент, когда вы решаете сложные задачи, теория, безусловно, более ЦЕННА, чем практика. каждый после нескольких лет программирования может написать несколько программ, которые «работают», но не каждый может понять, как. Независимо от того, что большинство из нас будет иметь дело в определенный момент с проблемами производительности, задержками в сети, прецизионностью, масштабируемостью и т. д. На этом этапе теория имеет решающее значение. Для того чтобы разработать хорошее решение при работе со сложными системами, очень важно знать, как работает управление памятью, концепции процессов и потоков, как им назначается память, или эффективные структуры данных для производительности и так далее.

Однажды, например, я работал над проектом, включающим множество математических вычислений, и в какой-то момент наше программное обеспечение вышло из строя. во время отладки я выяснил, что после некоторой математической операции я получил число как DOUBLE со значением 1.000000000002, но с математической точки зрения не могло быть> 1, что на более позднем этапе в программе давало легендарное исключение NaN . Я потратил некоторое время, чтобы понять это, но если бы я уделил больше внимания уроку « Double and Float », я бы не потратил впустую это время.

2
ответ дан eldjon 28 November 2019 в 17:33
поделиться

Я не пользуюсь им ежедневно. Но это дало мне много понимания, которое помогает мне каждый день.

1
ответ дан Toon Krijthe 28 November 2019 в 17:33
поделиться

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

3
ответ дан Rob Walker 28 November 2019 в 17:33
поделиться

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

3
ответ дан Chris 28 November 2019 в 17:33
поделиться

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

, "Как" очень мало фактической работы, которую Вы, как ожидают, сделаете с Информатикой, все же. На самом деле самые успешные инженеры, которых я знаю, вероятно, поместили бы его меньше чем в 20 процентов фактического задания. То, "Что" сделать, намного более важно; и для этого, основные принципы Информатики очень важны. То, "Что" Вы хотите сделать, имеет отношение намного больше для разработки, чем реализация; и хороший дизайн... хорошо, позвольте нам просто назвать его "нетривиальным".

"Существует два способа создать разработку программного обеспечения: Один путь состоит в том, чтобы сделать его столь простым, что нет, очевидно, никаких дефицитов, и другой путь состоит в том, чтобы сделать его столь сложным, что нет никаких очевидных дефицитов. Первый метод является намного более трудным". - C.A.R. Hoare

Удача с Вашими исследованиями!

4
ответ дан Paul Sonier 28 November 2019 в 17:33
поделиться

На одной работе мне было поручено улучшить алгоритм трассировки сети нашей модели распределения электроэнергии, поскольку тот, который они использовали, был слишком медленным. Трехфазная сеть была, по сути, тремя n-деревьями (поскольку в электрических сетях петли не допускаются). Узлы сети находились в базе данных, и некоторые из первоначальной команды не могли понять, как построить модель в памяти, поэтому отслеживание выполнялось последовательными глубинными SELECT в базе данных с фильтрацией на каждом этапе. Таким образом, для отслеживания узла десять узлов с подстанции потребует не менее 10 запросов к базе данных (первоначальные члены команды были одними из них, но не имели достаточного опыта в алгоритмах).

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

Это было как минимум на два порядка быстрее, три на очень длинных трассах вниз по течению.

Печально то, что мне пришлось практически преподавать класс по n-деревьям, двоичным деревьям, указателям и двусвязным спискам нескольким другим программистам, которые были обучены базам данных и VB, чтобы они могли понять алгоритмы.

6
ответ дан CMPalmer 28 November 2019 в 17:33
поделиться

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

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

Воск на... Воск прочь... Воск на... Воск прочь... Что это имеет отношение к Карате, так или иначе?

7
ответ дан Toybuilder 28 November 2019 в 17:33
поделиться

Мой друг работает над языком с некоторыми шаблонами. Меня попросили сделать небольшую консультацию. Часть нашего обсуждения касалась возможности шаблонов, потому что, если бы шаблоны были завершены по Тьюрингу, им пришлось бы действительно учитывать свойства VM-ish и то, как / если их компилятор поддерживал бы их.

Моя история на этот счет: теория автоматов все еще преподается, потому что она все еще имеет отношение. Проблема остановки все еще существует и ограничивает то, что вы можете сделать.

Теперь, имеют ли эти вещи отношение к тому, что жокей базы данных разрабатывает код C #? Возможно нет. Но когда вы начнете переходить на более продвинутый уровень, вы захотите понять свои корни & amp; основы.

8
ответ дан Paul Nathan 28 November 2019 в 17:33
поделиться

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

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

, если Вы только знаете, как использовать калькулятор, можно потратить впустую много кнопок перфорации времени на проблеме, которая или (a) уже решена, (b) не может быть решена, или (c) похожа на некоторую другую проблему (решенный или нерешенный), что Вы не распознаете, потому что это находится в другой форме

, притворяются, на мгновение, что информатика является физикой..., вопрос казался бы глупым?

14
ответ дан Steven A. Lowe 28 November 2019 в 17:33
поделиться

Вещи, которые я использую больше всего:

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

Что касается этих вещей на машинах Тьюринга и т. Д. Я думаю, что это важно, потому что это определяет ограничения, при которых мы все работаем. Это важно ценить.

16
ответ дан Nick 28 November 2019 в 17:33
поделиться

Несомненно, это полезно.

Воображают разработчика, работающего над движком шаблонов. Вы знаете вид вещи...

Blah blah blah ${MyTemplateString} blah blah blah.

Это начинается простой с развязным небольшим регулярным выражением для выполнения замен.

, Но постепенно шаблоны становятся немного более необычными, и разработчик включает функции списков templatizing и карт строк. Для выполнения этого он пишет простую небольшую грамматику и генерирует синтаксический анализатор.

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

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

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

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

, Но ожидают!!! Кто-то в команде указывает, что, если шаблонный язык действительно полон по Тьюрингу, то задачей оценки времени выполнения каждой работы рендеринга является экземпляр Проблемы остановки!! Yikes, не делайте этого!!!

вещь о теории, на практике, состоит в том, что вся практика основана на теории. Теоретически.

22
ответ дан benjismith 28 November 2019 в 17:33
поделиться

Правдивая история:

, Когда я вытащил свое первое задание программирования из аспирантуры, парни, которые владели компанией, на которую я работал, были пилотами. Спустя несколько недель после того, как я был нанят, один из них задал мне этот вопрос:

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

я серьезно думал, что он опрашивал меня на моем знании проблемы Коммивояжера и Полноты NP. Но оказывается, что он не был. Он ничего не знал об этом. Он действительно хотел программу, которая найдет кратчайший путь. Он был удивлен, когда я объяснил, что были решения с 106 факториалами и нахождение, что лучший был известной в вычислительном отношении тяжелой проблемой.

, Таким образом, это - один пример.

27
ответ дан Jeffrey L Whitledge 28 November 2019 в 17:33
поделиться

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

3
ответ дан Bill the Lizard 28 November 2019 в 17:33
поделиться

Честно говоря, я не согласен с большим количеством ответов здесь. Я написал мой первый компилятор (для удовольствия; I действительно имеет слишком много времени кофе / свободное время), не приняв курс в компиляторах; По сути, я только что отсканировал код для другого компилятора и следил за рисунком. Я мог бы написать парсер в C от верхней части моей головы, но я не думаю, что смогу вспомнить, как нарисовать автомат отталкивания, если моя жизнь зависела от этого.

Когда я решил, что хочу положить вывод в мою игрушку (императивный) язык программирования, я впервые посмотрел, вероятно, пять бумаг, уставившись на что-то под названием «Напечатанный кабдул лямбда», который .... .... * *** ....? Сначала я попробовал реализовать что-то с «универсальными переменными» и «ненгнерационные переменные» и понятия не имел, что происходит. Затем я все покончил и сидел там с ноутбуком, выяснение, как я мог реализовать его практически с поддержкой всех, которые мне нужно (подписывание, функции первого класса, параметризованные типы и т. Д.) С пару дней мышления И написание тестовых программ, я взорвал более недели, которые стоит пытаться выяснить теоретический дерьмо.

Зная основы вычислений (то есть, как работает виртуальная память, как работают файловые системы, резьба / планирование, SMP, структуры данных) все оказались очень полезными. Теория сложности и материал Big-O иногда оказались полезными (особенно полезными для таких вещей, как дизайн RDBMS). Проблема остановки и автомата / Теория машины Turging? Никогда.

1
ответ дан 28 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: