Математика для программистов
В процессе изучения разных языков программирования разработчики зачастую забывают про математику. А она очень важна, поскольку позволяет сделать множество задач быстрее и качественнее. Собрали для вас самые необходимые дисциплины и источники, по которым их можно изучать.
В статье пойдет речь о роли математики в жизни разработчика ПО. Мы не будем углубляться в частные области вроде машинного обучения, моделирования или же компьютерной графики, а сделаем упор на базовых математических вещах.
Этот материал предназначен в первую очередь для тех, кто уже сделал свои первые шаги в IT-индустрии, но в своем образовании уделял больше времени языкам программирования и конкретным технологиям, нежели фундаментальным вещам.
Как изучать математику
Многим людям математика кажется очень сложной для понимания наукой. Чаще всего, такое мнение складывается из-за неправильного подхода к ее изучению. На самом деле можно сильно упростить себе жизнь, следуя рекомендациям ниже.
В освоении математики есть два уровня понимания. Первый уровень — идейный. Это осознание того, для чего нужны определенные объекты, какая задача решается и где это используется. Второй уровень понимания — детальный; это подробное изучение подробностей решения задачи. Иногда нужно разобраться в задаче на детальном уровня понимания, но в большинстве случаев — достаточно идейного.
Математика не любит баззвордов. Если вы читаете книгу и видите слова, смысл которых вам непонятен, пропускать их опасно, потому как вы можете поймать себя на том, что с какого-то момента не понимаете вообще ничего. Очень важно сразу останавливать себя, когда вам что-то непонятно.
Дискретная математика
Область математики, которая занимается дискретными структурами (например: графами, автоматами, утверждениями в логике). Основное ее отличие от обычной математики, которую вы изучали в школе, — ее объекты не могут изменяться так же гладко, как и вещественные числа.
В каком-то смысле все задачи, которые решаются в программировании, так или иначе относятся к дискретной математике, поэтому ее знание очень вам пригодится.
Логика
Это наука о формальных системах и доказательствах. Она лежит в основе компьютерных наук, ведь любой язык программирования — формальная система. Но не нужно заглядывать глубоко в теорию, чтобы найти применение этой науке в написании программ, да и вообще в решении задач.
Хорошо, если вы умеете писать решение задачи. Но так же важно понимать, каким образом вы можете доказать, что ваш код работает правильно. Большинство программ решает какую-либо математическую задачу, и вам нужно уметь доказывать, что ваша задача решена правильно. Тогда на помощь приходят методы логики и в частности исчисление высказываний.
Изучение логики целесообразно начинать с простых вещей: например с того, что такое высказывание, какие есть операции между ними, что такое правила вывода. Далее можно перейти к более прикладным областям: старайтесь решать логические задачи, пробуйте оптимизировать разные проверки, которые вам приходится писать в коде. Далее, стоит обратить внимание на логику первого порядка: она может пригодиться в тестировании программ.
При этом решение, которое первым пришло вам в голову, не всегда самое правильное и красивое. Часто формальными преобразованиями можно сократить объем кода и сделать его более читаемым. А кроме того, некоторые логические трюки позволяют сделать само решение короче, быстрее и эффективнее.
- На Codeforces в разделе «Архив» стоит потренироваться на задачах как минимум класса С — многие из них содержат подводные камни;
- Проект The KeY to Software Correctness подойдет тем, кому интересно, как можно автоматически доказывать правильность работы кода. Он автоматизирует проверку кода на Java;
- Автоматический доказатель теорем z3, написанный Microsoft, для тех, кто пользуется другими языками. Краткая инструкция по его использованию находится на ресурсе rise4fun.
Комбинаторика
Комбинаторика изучает разные дискретные множества и отношения их элементов. Наиболее часто встречаемая программистами комбинаторная задача — вывести количество элементов, которые необходимо перебрать, чтобы получить решение в зависимости от некоторых параметров. Таким образом вы можете вывести асимптотическую сложность алгоритма.
Комбинаторные задачи формулируются в виде задачи подсчета количества элементов некоторого (в математике используют термин мощность) множества. Чтобы решать такие задачи, полезно иметь базовые знания в теории множеств из разряда свойств операций над множествами. Тогда задача сводится к выражению искомого множества через множества, мощности которых вычисляются по известным правилам. Для подсчета количества элементов применяются правила умножения или сложения, числа сочетаний или размещений. Хотя есть и более сложные задачи, лучше начинать с простого.
- С основами можно ознакомиться на сайте Mathprofi, который посвящен прозрачному и популярному описанию математики;
- Если вы владеете английским, можете посмотреть более продвинутую книгу An Introduction to Combinatorics and Graph Theory;
- Задачи по комбинаторике можно взять из задачника «Дискретная математика», в конце есть ответы.
Теория вероятностей
Иногда на собеседовании интервьюер, дабы проверить насколько крут кандидат, задает такую задачу: «Вот у нас есть отрезок, который начинается с числа А и заканчивается числом Б. Мы кидаем на него две точки случайным образом. Какая будет средняя длина наибольшего отрезка?» или же «Пусть у нас есть треугольник, на вершине которого сидит муха. Пусть она перелетает с вершины на вершину за 3 секунды и отдыхает на каждой вершине по секунде, каждый раз случайно выбирая себе путь. Через какое время она в среднем вернется в начальную точку?».
Это задачи по теории вероятностей. В программировании часто приходится применять вероятностный подход, для того чтобы оценить среднюю скорость работы алгоритма или же подогнать параметры вашего решения задачи под те запросы, которые чаще всего встречаются на практике.
Теория вероятности делится на две части: дискретную и непрерывную. Хотя в теории дискретная — это подкласс непрерывной, методы решения задач несколько различаются. Опять же лучше начинать с простого — дискретная теория вероятности часто сводится к комбинаторным задачам. И теоретическая часть у дискретной формулируется проще.
Непрерывная теория вероятности для полного понимания требует знания элементарных основ мат. анализа, в частности понятия интеграла, хотя многие задачи требуют лишь умения считать площади простых фигур. Именно непрерывная теория вероятности является фундаментом для математической статистики и машинного обучения. Поэтому, если хотите работать в этой области, стоит начать с изучения книги Ричарда Хэнсена Probability Theory and Statistics или Probability Theory with Simulations.
- MathProfi — сайт, на котором доступно и просто изложена высшая математика. На нём есть множество разделов с теорией, таблицами и задачами, в том числе и по теории вероятностей
- Книга Чарльза М. Гринстеда и Лори Снелла Introduction to Probability.
Теория графов
Слышали ли вы задачу о мостах Кенигсберга?
«Можно ли пройти по всем семи мостам города Кенигсберга, не проходя по каждому из них дважды?». Нам известно, что ответ на эту задачу — нет. Решить подобные задачи помогает теория графов.
Графы — это очень удобные формализованные представления нелинейных структур, которые довольно часто встречается в прикладных задачах. В отличие от простых линейных структур, таких как массивы или списки, работа с графами более сложна.
Изучите классические результаты и алгоритмы из теории графов, потому как некоторые задачи на графах являются NP-полными, и для них доказано существование более эффективного решения.
- Познакомиться с основными понятиями можно в краткой методичке «Введение в теорию графов»;
- По части алгоритмов можно заглянуть на сайт e-maxx и наш;
- Практиковаться можно на задачах с Codeforces, там есть задачи на графах.
Теория чисел и криптография
Задумывались ли вы, почему к простым числам такой большой интерес? Почему работает шифрование RSA? Чем отличается http от https и что такое сертификат безопасности?
Все эти вопросы изучает криптография. Сразу скажем, что эта наука достаточно сложная и не интуитивная — бывает непонтяно, как реализовать тот или иной алгоритм совершенно безошибочно. Тем не менее алгоритмы в криптографии не могут быть «чуть-чуть нерабочими». Малейшая ошибка может привести к компрометации всей криптографической системы.
Дискретная оптимизация
Чтобы найти экстремум (максимум либо минимум) функции, надо взять ее производную и приравнять к нулю. Решение уравнения дает локальный экстремум. Но если вам нужно искать максимум не на каком-то промежутке, а только по целым числам, то вам уже нужно будет задумываться о том, какое из соседних целых чисел нужно выбрать. Когда задача многомерная, вариантов с целыми числами становится все больше, и выбирать приходится из все увеличивающегося количества. Но бывают случаи еще хуже — когда вовсе нет никакой непрерывной функции, от которой можно было бы взять производную. Или же когда количество вариантов очень велико (в том случае, когда сами варианты нужно вычислять).
Бывает, что в таких задачах нельзя найти точное решение за приемлемое время — его можно получить только полным перебором. Такова, например, задача Коммивояжера, или задача линейного программирования. Иногда можно отказаться от точного решения, и использовать некоторые приближения. Обо всем этом можно узнать в курсе Discrete Optimization на Coursera.
Источники
Небезызвестная серия курсов Introduction to Discrete Mathematics for Computer Science на Coursera по дискретной математике. Она довольно обширна и дает общее представление о всех нужных областях дискретной математики — логике, комбинаторике, теории вероятностей, теории графов, теории чисел и криптографии. Последний курс затрагивает проблему дискретной оптимизации.
Кроме того, для тех, кому не очень нравится формат курсов, будет полезной книга Discrete Mathematics. An Open Introduction. Книга довольно большая и подробная, поэтому можно сделать упор на основных понятиях и определениях.
Напоследок для тех, кого заинтересовала дискретная математика, приведем одну из наиболее подробных практико-ориентированных книг по дискретной математике. Довольно известная книга Кнута, Грехема и Паташника «Конкретная математика». Она написана в неформальном стиле, изложение разбавлено комментариями на полях. Книга очень полезна для развития умения решать разные задачи. Однако в ней много частных вещей, которые могут пригодится только в олимпиадном программировании.
Что дальше?
В целом, для того чтобы иметь достаточный математический фундамент для изучения большинства областей, достаточно первых двух курсов, изучаемых на математических специальностях. К дискретной математике добавляются некоторые разделы непрерывной: линейная алгебра, общая алгебра, математический анализ, аналитическая геометрия, обыкновенные дифференциальные уравнения, методы оптимизации. В зависимости от специфики решаемых задач, к ним могут добавиться и дифференциальная геометрия, если вы собираетесь заниматься компьютерной графикой, или же теоретическая механика и мат. физика, если вы собираетесь заниматься физическими движками.
Зачем дискретная математика программисту
Дискретная математика является важным инструментом для программиста. Она помогает развить логическое мышление, алгоритмический подход и решать сложные задачи программирования. Узнайте, какие конкретные навыки и знания из дискретной математики могут помочь вам стать успешным программистом.
Дискретная математика – это раздел математики, который изучает объекты и структуры, представляемые дискретными (разрывными) значениями. Она находит широкое применение в информатике и программировании, поскольку позволяет решать проблемы, связанные с обработкой и анализом дискретных данных, а также эффективным управлением вычислительными процессами.
Программисты часто сталкиваются с задачами, требующими логического мышления, анализа и построения алгоритмов. Дискретная математика предоставляет им мощный инструментарий для решения таких задач. Она помогает разработчикам понять принципы работы компьютерных систем, а также эффективно решать проблемы, связанные с поиском, сортировкой, хранением и передачей данных.
Дискретная математика также играет важную роль в области криптографии, которая занимается защитой информации. Знание основных принципов и методов дискретной математики позволяет программистам создавать надежные и безопасные системы передачи данных.
Более того, дискретная математика обучает программистов абстрактному мышлению, улучшает их навыки решения задач и способность к аналитическому мышлению. Она помогает программистам развивать свою творческую мысль и находить новые подходы к решению сложных задач.
Программисту необходима дискретная математика
Одной из основных причин, почему программистам необходимо знание дискретной математики, является ее прямая связь с алгоритмами. Дискретная математика предоставляет программистам инструменты для анализа сложности алгоритмов, оценки их производительности и выбора наиболее подходящего решения. Знание дискретной математики позволяет программистам эффективно работать с различными типами данных и структурами данных, такими как массивы, списки, деревья и графы.
Еще одной важной областью, связанной с дискретной математикой, является логика. Логические операции и выражения играют решающую роль в программировании. Знание дискретной математики позволяет программистам логически мыслить, создавать сложные условия и правильно организовывать свой код. Без понимания логических операций и правил программисту будет сложно создавать надежные и безопасные программы.
Кроме того, дискретная математика также находит применение в криптографии, базах данных и сетях. Знание дискретной математики позволяет программистам разрабатывать безопасные алгоритмы шифрования, эффективно работать с базами данных и организовывать сетевые соединения.
В заключение, программисту необходимо знание дискретной математики для разработки эффективных алгоритмов, работы с различными типами данных, логического мышления и создания безопасных программ. Понимание основных концепций дискретной математики поможет программисту повысить свои навыки и стать более успешным в своей профессии.
Развитие алгоритмического мышления
Программисты регулярно сталкиваются с задачами, требующими решения сложных алгоритмических задач. Дискретная математика предоставляет инструменты и методы для анализа и решения таких задач.
Читать далее: Как математика развивает мышление: влияние занятий на развитие логики и аналитического мышления
Изучение дискретной математики помогает программистам понять основные концепции и принципы алгоритмов. Оно учит их анализировать задачи, определять основные алгоритмические понятия и разрабатывать эффективные алгоритмы для их решения.
Навык разработки алгоритмов и структур данных является одним из основных требований для программистов. Дискретная математика помогает в освоении этих навыков и развитии алгоритмического мышления.
Кроме того, изучение дискретной математики позволяет программистам лучше понимать основы компьютерных наук. Оно дает программистам инструменты для решения проблем в области сетей, баз данных, криптографии и других областей, где алгоритмические решения играют важную роль.
Таким образом, изучение дискретной математики помогает программистам развивать алгоритмическое мышление, что является неотъемлемым навыком в их профессиональной деятельности.
Оптимизация вычислительных процессов
Одним из основных принципов оптимизации вычислительных процессов является уменьшение времени работы программы или увеличение её производительности. Дискретная математика предоставляет инструменты для анализа сложности алгоритмов, которые помогают программистам оптимизировать выполнение программы и достичь лучших результатов.
Другим важным аспектом оптимизации является управление памятью. Дискретная математика представляет методы для эффективного использования памяти, например, использование динамического программирования или структур данных, таких как графы или деревья. Это позволяет программистам уменьшить объём используемой памяти и ускорить выполнение программы.
Также дискретная математика предоставляет инструменты для анализа и моделирования различных вычислительных процессов. Например, теория графов может быть использована для моделирования сетей и оптимизации распределения ресурсов. Комбинаторика может быть применена для решения задач комбинаторной оптимизации.
Таким образом, знания дискретной математики дают программистам возможность эффективно оптимизировать вычислительные процессы, улучшить производительность программ и повысить качество программного обеспечения в целом.
Работа с большими объемами данных
Дискретная математика предоставляет программисту инструменты и методы для работы с такими данными. Например, графы и деревья являются важными структурами данных, которые позволяют представлять и анализировать связи и взаимодействия между элементами большого объема данных.
Благодаря знанию дискретной математики программист может эффективно оптимизировать алгоритмы и процессы обработки данных, что позволяет существенно ускорить работу с большими объемами информации. Это особенно важно в сферах, связанных с анализом данных, машинным обучением и искусственным интеллектом.
В заключение, знание дискретной математики позволяет программисту эффективно работать с большими объемами данных, оптимизировать алгоритмы и процессы обработки информации. Это является необходимым навыком в современном мире, где объемы данных постоянно увеличиваются и требуют эффективной обработки.
Улучшение навыков программирования
Изучение дискретной математики имеет прямое отношение к улучшению навыков программирования. Эта область математики предоставляет программистам инструменты и методы, которые помогают им разрабатывать эффективные и оптимальные алгоритмы.
Основные понятия и структуры данных, изучаемые в дискретной математике, являются фундаментом для понимания работы компьютерных программ. Это включает в себя темы, такие как логика, множества, графы, комбинаторика и теория алгоритмов.
Знание дискретной математики позволяет программистам анализировать проблемы и находить оптимальные решения. Они могут применять математические концепции, чтобы оптимизировать алгоритмы и улучшить производительность программного обеспечения.
Изучение дискретной математики также развивает логическое мышление и абстрактное мышление, что помогает программистам разбираться в сложных задачах и находить инновационные подходы к решению проблем.
Читать далее: Структура математической модели: основные компоненты и принципы
Кроме того, разработчики, имеющие знания в области дискретной математики, могут коммуницировать с другими специалистами, такими как математики и теоретики, и применять совместные усилия для создания сложных программных решений.
В целом, изучение дискретной математики помогает программистам повысить свои навыки и стать более эффективными и квалифицированными разработчиками программного обеспечения.
Разработка эффективных структур данных
Программисты используют структуры данных для решения различных задач, таких как поиск, сортировка, фильтрация и многие другие. При разработке структур данных необходимо учитывать их эффективность, чтобы обеспечить оптимальную скорость работы программы и оптимальное использование памяти.
Дискретная математика предоставляет программистам инструменты и методы для анализа и проектирования структур данных. Она помогает определить, какие структуры данных будут наиболее подходящими для конкретной задачи и как их реализовать.
Например, графы — одна из важных структур данных, которые широко используются в программировании. Они позволяют представлять связи между объектами и решать задачи, связанные с поиском кратчайшего пути, анализом сетей и т.д. Дискретная математика предоставляет алгоритмы для работы с графами, которые помогают разработчикам создавать эффективные алгоритмы для решения задач.
Кроме того, дискретная математика также помогает программистам анализировать сложность алгоритмов и структур данных. Это важно для оценки времени работы программы и определения оптимального решения задачи.
В итоге, знание дискретной математики позволяет программистам разрабатывать эффективные структуры данных, которые помогают повысить скорость работы программы и улучшить ее производительность.
Повышение качества программного обеспечения
Дискретная математика играет важную роль в повышении качества программного обеспечения. Эта дисциплина предоставляет программистам инструменты и знания, необходимые для разработки и тестирования программного кода.
Одним из ключевых аспектов дискретной математики является теория алгоритмов. Знание алгоритмов позволяет программистам эффективно решать сложные задачи и оптимизировать процессы в разработке программного обеспечения. Благодаря дискретной математике программист может улучшить производительность программы и повысить ее надежность.
Другим важным аспектом дискретной математики является теория графов. Графы широко используются в программировании для моделирования и анализа различных систем. Они позволяют программистам понять взаимодействие компонентов программы и выявить потенциальные проблемы. Например, с помощью графов можно определить наиболее эффективные пути выполнения программы и избежать возникновения бесконечных циклов или других нежелательных ситуаций.
Также дискретная математика помогает программистам в построении математических моделей и формулировке точных спецификаций для программного обеспечения. Это позволяет устранить неоднозначности и ошибки в процессе разработки, что в свою очередь повышает надежность и качество программы.
В целом, понимание основ дискретной математики позволяет программистам более эффективно разрабатывать, тестировать и поддерживать программное обеспечение. Оно помогает улучшить производительность, надежность и безопасность программ, что является важным фактором при создании качественных продуктов.
Решение сложных задач программирования
Она предоставляет программистам необходимые инструменты для анализа и оптимизации алгоритмов, структур данных и логических операций. Без понимания дискретной математики, программист может столкнуться с трудностями в разработке эффективных и надежных программных решений.
Дискретная математика включает в себя такие концепции, как логика, множества, графы, комбинаторика и теория чисел. Знание этих концепций позволяет программистам анализировать сложность алгоритмов, принимать решения о выборе оптимальных структур данных и эффективных методов их обработки.
Читать далее: Зачем нужна высшая математика и как она помогает в решении реальных задач
Кроме того, дискретная математика помогает программистам решать задачи в области криптографии, оптимизации, компьютерной графики и искусственного интеллекта. Понимание основных принципов и техник дискретной математики позволяет создавать сложные и эффективные алгоритмы, которые могут быть применены в различных сферах программирования.
Таким образом, знание дискретной математики является неотъемлемой частью профессионального навыка программиста и позволяет ему успешно решать сложные задачи программирования.
Вопрос-ответ:
Зачем программисту нужна дискретная математика?
Дискретная математика является основой для многих алгоритмических и структурных концепций, широко используемых в программировании. Она помогает программистам решать задачи, связанные с комбинаторикой, теорией графов и логикой. Например, знания дискретной математики необходимы для разработки эффективных алгоритмов сортировки, поиска и оптимизации данных.
Какие конкретные темы дискретной математики важны для программиста?
Для программиста важно понимать основы комбинаторики, теории графов, логики и алгебры. Конкретные темы, которые могут быть полезны программисту, включают в себя: теорию множеств, функции и отношения, логические операции и алгоритмы, графы и деревья, комбинаторные алгоритмы и теорию вероятности.
Можно ли обойтись без знания дискретной математики в программировании?
Хотя некоторые программисты могут обойтись без глубокого понимания дискретной математики, знание основных концепций может значительно улучшить навыки программирования и помочь в решении сложных задач. Дискретная математика предоставляет программистам полезные инструменты и подходы, которые могут быть применены в различных областях программирования.
Каким образом дискретная математика помогает программисту повысить свои навыки?
Дискретная математика помогает программисту развить логическое и абстрактное мышление, что является важным навыком при разработке сложных алгоритмов. Она также предоставляет инструменты для анализа эффективности алгоритмов и оптимизации кода. Знание дискретной математики также может помочь программисту в решении сложных задач, связанных с графами, комбинаторикой и теорией вероятности.
Понимание принципов криптографии и безопасности
Дискретная математика играет важную роль в разработке алгоритмов шифрования и обеспечении безопасности информации. Понимание принципов криптографии позволяет программисту создавать системы, которые защищают данные от несанкционированного доступа и обеспечивают конфиденциальность передачи информации.
Криптография включает в себя много аспектов, таких как алгоритмы шифрования, хэширование данных, цифровые подписи и аутентификация. Дискретная математика предоставляет основы для понимания этих принципов и создания безопасных систем.
Например, знание теории чисел позволяет программисту создавать эффективные алгоритмы шифрования. Различные алгоритмы, такие как RSA и AES, основаны на математических принципах, таких как факторизация больших чисел и линейные операции над конечными полями.
Дискретная математика также помогает программисту понять принципы безопасности информации. Например, теория графов используется для моделирования и анализа сетей, что позволяет идентифицировать уязвимости и разрабатывать механизмы защиты.
В связи с ростом числа кибератак и утечек данных, понимание принципов криптографии и безопасности становится все более важным для программистов. Они должны быть способны создавать системы, которые обеспечивают конфиденциальность и целостность данных, а также защищают их от внешних угроз.
Таким образом, знание дискретной математики позволяет программисту разрабатывать безопасные системы и оказывает влияние на все аспекты современной информационной безопасности.
Дискретная математика для программистов
Посоветуйте эту книгу и получите 19,91 ₽ с покупки её другом.
Автор
Род Хаггарти
О книге
Основополагающее введение в дискретную математику, без знания которой невозможно успешно заниматься информатикой и программированием. Ни одно из многочисленных изданий по этой дисциплине, вышедших на русском языке, не читается с таким удовольствием и пользой. В доступной и весьма увлекательной форме автор рассказывает о фундаментальных понятиях дискретной математики – о логике, множествах, графах, отношениях и булевых функциях. Теория изложена кратко и иллюстрируется многочисленными простыми примерами, что делает ее доступной даже школьнику. После каждой главы (начиная со второй) рассматривается приложение описанных методов к информатике. Дополнения в издании на русском языке посвящены актуальным задачам теории графов, рекурсивным алгоритмам, общей проблеме перебора и задачам целочисленного программирования. Книга будет полезна студентам, изучающим курс дискретной математики, а также всем желающим проникнуть в технику написания и проверки корректности алгоритмов, включая программистов-практиков.
Зачем программисту дискретная математика?
Зачем программисту дискретная математика? Разве что графы, а остальное-то зачем? Изучал целый год и не представляю применения всего этого в программировании.
- Вопрос задан более трёх лет назад
- 8703 просмотра
2 комментария
Оценить 2 комментария
Расскажите, а как вы видите применение графов в программировании? Исходя из этого можно будет точнее ответить, зачем может понадобиться дискретка именно вам.
Смотря какая область?
Если писать браузеры, то тут без вопросов. А если сайты, то особо и не нужна (однако, бывают исключения).
Решения вопроса 1
Для правильного вопроса надо знать половину ответа
А как же булева алгебра, комбинаторика, теория автоматов, формальные грамматики? Это тоже всё разделы дискретной математики. Если Вы не представляете их применения, значит Вам ещё не попадались действительно сложные задачи. Попробуйте, например, написать простейший валидатор html по BNF-правилам.
Ответ написан более трёх лет назад
Нравится 13 10 комментариев
А что если предмет знать поверхностно, а в случае непонимания или незнания читать в гугле?
Для того, чтобы правильно задать вопрос надо знать не менее половины ответа.
Я пока сталкивался только с булевой алгеброй. Интересуюсь программированием уже 3 года
@Rsa97 возьмем «html по BNF». Что мне мешает не знать тему вообще, найти материалы в гугле по запросу и все сделать?
P.S. первая ссылка уже все объясняет.
rEAcT1oNmanT1s @rEAcT1oNmanT1s
@iproger не деградируйте себя таким методом выполнения своих задач, обычно программисты хотят все знать по своей спецификации и постоянно себя модифицировать во всех аспектах своей проффессии.
@rEAcT1oNmanT1s «выполнения своих задач» — признаться честно, я пробовал написать «свой браузер». Но я знаю, что точно не пригодится знание валидации HTML по BNF-правилу. Смысл мне забивать этим память. Лучше я вложу время в другие, перспективные направления. А это буду смотреть в гугле.
@iproger Как ни странно, но у меня первая ссылка по этой строке из гугла ведёт не на то, что такое BNF, а на часть RFC 2616, описывающий HTTP/1.1. Так что гуглить можно, когда представляешь себе что надо искать и можешь описать проблему в подходящих формальных терминах. Чем большее представление имеешь о различных областях знаний тем легче искать, а со врменем и искать не приходится.
@Rsa97 Вроде описание BNF было в 1 ссылке, ну да ладно. Вот и пришли к тому, что не обязательно все знать, а нужно уметь искать.
@iproger BNF то BNF, да не тот. И надо не уметь искать, а понять что именно надо искать и понять, а то ли найдено?
@Rsa97 Ок. Вопрос стоял в смысле изучения топика. А что лучше, изучить новый фрейм, с которым можно устроиться и прокачать скилы, или почитать про BNF/xxx и быть перцем?