Говоря как кто - то с электронной техники , а не компьютерных наук степени, что является один бит информатики я должен знать , чтобы сделать меня лучше реальный мир программист?
(Под реальным миром я подразумеваю то, что я собираюсь использовать и извлекать выгоду из своей повседневной работы программистом - например, я бы посоветовал понять, что нормализация баз данных более практична, чем понимание быстрой сортировки, для которой есть много библиотек).
learning
computer-science
theory
Джон Хопкинс
источник
источник
if
иloop
утверждение когда - либо написанное использует подмножество этих двух областей исследования.Ответы:
Если я должен выбрать только один бит, который является трудным решением, я бы сказал , что пойти на нотации Big O . Понимание последствий O (n), O (ln n), O (n²), O (2 ^ n), O (n!) Поможет вам избежать множества дорогостоящих ошибок, которые хорошо работают в тестовая среда, но катастрофически не удается в производстве.
источник
Это вопрос, у каждого будет свой ответ. Я бы сказал: теория сложности - это самая важная часть, которую вы все равно не изучаете непосредственно как программист (например, алгоритмы и структуры данных), но что может повлиять на вашу работу. Помогает, если я знаю, что проблема имеет кубическую сложность, я знаю, что она будет плохо масштабироваться при увеличении размера проблемы.
источник
Узнайте о структурах данных, алгоритмах и сложности.
Не слишком много, чтобы просто понять, что машина - это не волшебная шкатулка с неограниченной мощностью. Вы не можете ничего бросить в это и ожидать, что это сломает это в миллисекундах. Вы знаете, у него есть ограничения. Вы должны научиться не проверять их с помощью своего кода.
Также взгляните на общие подходы для решения конкретных задач проектирования в программировании. Дизайн моделей а именно. Не поклоняйтесь им, просто примите идеи, которые они сообщают.
Знание моделирования базы данных также важно.
После этого это просто разные языки программирования, платформы и библиотеки, которые реализуют или позволяют реализовать основные концепции. Собирайте все, что вам нравится, и практикуйтесь с ними.
источник
Это немного сложный вопрос.
Все аспекты информатики так или иначе важны.
Понимание Big O Notation важно, а также понимание того, как ваш код может выполняться, также очень важно в реальных ситуациях.
источник
Да, это заставило меня задуматься часами.
В процессе я должен был удалить некоторые из общих ответов, приведенных здесь уже.
Большая O (n) запись . Трудно выразить это здесь, но нет, мы можем интуитивно определить неэффективность и сравнить различные процедуры, даже не услышав об асимптотическом алгоритмическом анализе.
Функциональные языки Нет. Единственная языковая семья - это всего лишь один подход к решению проблем. Почему только этот бит должен иметь значение?
Проблема остановки Некоторые просто слишком конкретны, и люди жили жизнью, не зная, что они существуют.
Слушай Если ты не слушаешь, ты живешь в своем собственном мире. Не обязательно вредно!
Цикл разработки программного обеспечения Нах! Мы все еще можем пробиться к невероятному программному обеспечению или героическим усилиям.
Теория сложности, я думаю, что это может быть, но без всех формализмов
Я бы сказал - « Абстракции, абстракции, абстракции ... ». Узнайте об этом. Посмотрите примеры вокруг этого и узнайте, как построить, используя это. Это везде, где. Вся компьютерная наука, инженерия и приложения выглядят как слои за слоями абстракции.
Как только вы это знаете, вы начинаете учиться хорошо смотреть по сторонам.
Когда вы видите, что кто-то использует
list insertion
inpython
иnot append
, вы улыбаетесь, потому что знаете, что списки Python создаются с использованием абстракции массива, где вставки являются дорогостоящими и добавляют дешевле.Это всего лишь один пример.
источник
Теория автоматов и ФСМ. :-)
источник
Конкурентные варианты использования структур данных.
Существуют ситуации, когда требуется карта с красно-черными деревьями, чтобы гарантировать производительность, и другие, когда вы не можете использовать массив, опять же, чтобы гарантировать производительность. Знание того, когда выбирать, какая структура данных является бесценным навыком.
источник
Есть только три числа, которые имеют значение:
источник
Самая важная вещь, которую я изучил в CS (и как разработчик в течение многих лет и как архитектор), - это способность разбивать проблему на основе волатильности, а не функции. Все хорошие проекты изолируют и инкапсулируют волатильность. Все хорошие разработчики / архитекторы делают это интуитивно, даже если они не формализовали это в своем мышлении. Огромной причиной провала проекта является неспособность разбить проблему на основе волатильности и инкапсулировать ее. Неспособность заключить в капсулу волатильность неизбежно приводит к тому, что от нее избавляются и сложности проекта.
источник
Проблема остановки
Факт, что существуют проблемы, связанные с компьютером, которые просто не могут быть решены с помощью компьютера.
источник
Вы должны знать достаточно теории автоматов, чтобы знать, где проблема, с которой вы имеете дело, попадает в иерархию формальных языков. Исходя из этого, вы можете выяснить несколько важных практических применений, например, почему вы не должны использовать REGEX для разбора HTML (HTML требует контекстно-свободной грамматики для его описания) и почему компиляция C ++ занимает гораздо больше времени, чем Java или C # (C ++ требует машины Тьюринга, в то время как Java и C # могут быть описаны с помощью контекстно-свободных грамматик).
Наиболее важные уровни формальных языков, от самых слабых до самых сильных:
Языки, которые могут быть проанализированы конечным автоматом или с помощью REGEX (реализации REGEX с обратными ссылками являются более мощными, чем эта категория, но они все еще не могут анализировать все в категории 2)
Языки, которые могут быть проанализированы автоматами со стековой памятью или безконтекстной грамматикой.
Языки, которые могут быть проанализированы машиной Тьюринга или автоматами с оперативной памятью.
источник
Ну, я мог бы дать вам скучный ответ: теория автоматов и теория информации.
Или я мог бы рассказать вам, что я узнал от консультанта по аппаратному обеспечению давным-давно:
источник
Жизненный цикл разработки программного обеспечения - это то, что я бы хотел знать, если вы этого еще не сделали. Конечно, это было введено на втором курсе компьютерных наук и неоднократно использовалось в проектах по разработке программного обеспечения. Это может быть полезно, чтобы получить общее представление о том, как проходит проект от начала до конца, хотя, если вы хотите более углубленно изучить методологии, такие как Waterfall или Agile, вы можете изучить их, чтобы получить более конкретные знания.
источник
программирование
На факультете математики и компьютерных наук в колледжах Хобарта и Уильяма Смита поступает компьютерная наука 124 Введение в программирование :
Если вы не умеете программировать, вы не слишком далеко продвинулись в реальных вычислениях.
И да, я заметил, что вы программист. Это поможет вам лучше понять теорию программирования и узнать, какие другие подходы вам доступны.
Является ли программирование информатики, как мы его знаем?
В ответ на комментарий @Thomas Owens, который указал (совершенно правильно), что программирование не является строго информатикой, я хотел бы процитировать статью из Википедии по информатике :
Таким образом, как я прочитал, программируя, вы демонстрируете свое понимание теории программирования. Это, в свою очередь, должно помочь вам создать простой, элегантный код, с которым приятно работать другим.
источник
Я должен не согласиться с Конрадом Рудольфом. Есть одна часть компьютерной науки, которую вы должны знать, чтобы сделать вас лучшим «программистом в реальном мире». Если вы больше ничего не забираете из ответов, которые вы получаете здесь, по крайней мере, подумайте об этом - удовлетворение требований - это не то же самое, что удовлетворение клиента! Конечные пользователи ВСЕГДА будут пытаться использовать вашу программу так, как вы никогда не думали и не программировали. ВСЕГДА, ВСЕГДА, ВСЕГДА.
Поэтому, чтобы быть лучшим программистом, вы должны сначала СЛУШАТЬ. Слушай клиента. Слушай их нужды. Слушай их желания. И особенно, прислушайтесь к их уровню «технаря». Я не могу сказать вам, сколько раз я видел построенный проект, который был именно тем, о чем просили, но совсем не то, что на самом деле требовалось клиенту. Все потому, что программист, собирающий запрос, на самом деле не слушал.
Что-то еще, что вы можете убрать, если у вас нет опыта в разработке пользовательского интерфейса, попросите кого-нибудь спроектировать пользовательский интерфейс. Я ВСЕГДА могу определить приложение, в котором пользовательский интерфейс был разработан программистом, а не экспертом. То, что логично и имеет смысл для вас, не будет иметь смысла для клиента. И, если ваши клиенты не технологичны (и кто такие?), Тогда ваше «функционально правильное, но эстетически уродливое» решение будет встречено с теплотой скунса на званом обеде.
источник
Функциональные языки!
Изучение функциональных языков заставляет вас думать с точки зрения выражений, а не шагов и именуемых изменяемых состояний (переменных). Это существенно влияет на вашу способность эффективно решать повседневные задачи программирования, особенно теперь, когда почти каждый популярный язык имеет функциональные возможности.
Алгоритмы и теория сложности также важны, но они несколько менее интересны тем, что в основном они позволяют вам добавлять имена к вещам, которые вы обычно уже знали и могли вывести.
источник
То, что компьютеры по сути являются сопоставителями шаблонов, не более того. Все сводится к машине Тьюринга - классической концепции компьютерных наук, объясняющей обработку образцов.
источник
Решение проблем и желание продолжить обучение!
Они служат мне гораздо лучше, чем знание быстрой сортировки и нормализации базы данных.
источник