• Есть ли основные правила супер оптимизации?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Главный вопрос - а что мы оптимизируем? Память? Скорость? Размер программы? Легкость модификации? Тут как в RPG - качаем силу, персонаж тупеет; Увеличили скорость - сожрали кучу памяти. И так далее.
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Главное правило оптимизации - не заниматься преждевременной оптимизацией.

    Вообще все просто - пишите код, пишите нагрузочные тесты, профилируете, оптимизируете узкие места. С опытом ляпов будет меньше изначально. Ну и книжки стоит читать всякие, желательно обобщенные (типа там паттерны проектирования и т.д.) что бы можно было вместо оптимизации просто быстро систему масштабировать (это дешевле). Ну и еще теория алгоритмов помогает, если у вас есть именно обработка больших объемов данных (массивы на миллионы айтемов, на тысячах пофигу обычно)
    Ответ написан
    1 комментарий
  • Каким алгоритмом можно проверить Большое число на простоту?

    @SeptiM
    Расклад примерно такой. Пусть n -- длина числа, т.е. обычный перебор работает за 2^{c * n}.

    1) Вероятностный тест Рабина-Миллера можно реализовать за O(k n^2 log n), где k -- число попыток. Вероятность ложноположительной ошибки 4^-k. При k=100 это значение настолько безумно мало, что скорее в вашей программе найдется критический баг, процессор сделает ошибку в вычислениях и взломщик выиграет в лотерею и все это одновременно, чем число окажется составным.

    2) Детерминированный AKS (en.wikipedia.org/wiki/AKS_primality_test). Работает за O(n^{6 + eps}). Интересен скорее теоретически.

    3) Эллиптический тест на простоту (en.wikipedia.org/wiki/Elliptic_curve_primality). Эмпирически работает за O(n^5). Интересен тем, что в случае успеха возвращает сертификат простоты.
    Ответ написан
    2 комментария
  • Оправдано ли сегодня изучение C++?

    @beduin01
    Не оправдано. Вы будете крайне серьезно проигрывать по скорости разработки и качеству выходной продукции таким языкам как: C#, D, Go
    Ответ написан
  • Низкоуровневое программирование. Как быть? С чего начать?

    ptitca_zu
    @ptitca_zu
    Programmer. Reader. Introvert
    Ответ написан
    Комментировать
  • Как и где в программировании используется математическая логика?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Математическая логика - правила вывода, системы аксиом, теории, логические системы и т.п. - практически не используется. Возможно, какая-то её часть нужна при разработке компиляторов (формализация вывода типов, доказательства допустимости оптимизаций...) и экспертных систем.
    Булева алгебра нужна гораздо чаще. Но если вы выучите и поймёте правила преобразования логических выражений, этого будет достаточно. Даже предполные классы, скорее всего, не понадобятся. Хотя, если судьба забросит в программирование ПЛИС... там всё может быть.
    Проходят ли в дискретной математике графы - не помню. Даже если да, то совсем не на том уровне (и не в том направлении), в котором они нужны в программировании.
    Что могло бы пригодиться - конечные автоматы. Они нужны более, чем в одном месте. Но, опять же, в дискретной математике могут дать, разве что, общие факты про них.
    Так что, в целом - это предмет для расширения кругозора и любителей головоломок разных уровней.
    Ответ написан
    1 комментарий
  • Как и где в программировании используется математическая логика?

    Pjeroo
    @Pjeroo
    Веб-разработчик
    Математическая логика - повсеместно. Начиная от простых условий в if-else, заканчивая операциями с базами данных, потому что язык запросов SQL предполагает оперирование с множествами. Насчет дискретной математики, тут очень важная часть - теория графов, потому что практически все хорошие алгоритмы поиска (да и сортировки тоже) основаны на деревьях. Так же довольно таки неплохо иметь представление о теории автоматов, что тоже используется, например, в алгоритмах поиска.
    Ответ написан
    Комментировать
  • Влияние армии на знания программирования?

    opium
    @opium
    Просто люблю качественно работать
    Ну логично что надо просто не идти в армию, откуда у людей глупость такая в голове идти в армию?
    Ответ написан
    7 комментариев
  • Как пробраться через Java к Scala?

    anyd3v
    @anyd3v
    Хоть Scala и работает на jvm, но у нее другая идеология. Если вы не планируете работать с Java, то сосредоточьтесь на Scala и ФП. Только учтите, что на Java "мильен" библиотек и скорее всего при работе со Scala вы будете их использовать, поэтому хоть поверхностное понимание Java все равно понадобится.
    Ответ написан
    2 комментария
  • Шпаргалки по языкам программирования?

    ttyv0_o
    @ttyv0_o
    Комментировать
  • Как и где посмотреть как работает операционная система?

    trinitr0
    @trinitr0
    провинциальный админ
    Для конкретизации с этой книгой читают книгу Таненбаум и Вудхалл "Операционные системы: разработка и реализация". В ней практика на примере учебной ОС Minix. Или можно взять пример другой учебной ОС Xv6 -
    . К ней прилагаются прокомментированные исходные коды.
    А браться сразу за отладчик я Вам не советую. Есть риск потерять интерес к данной теме.
    Ответ написан
    2 комментария
  • Что можно использовать для научных вычислений и визуализации?

    @GeraldIstar
    Frontend
    Есть специально предназначенный для этого язык R, ну и конечно же python + SciPy
    Ответ написан
    Комментировать
  • Какой ЯП лучше всего подойдёт для данной задачи?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Erlang. С его помощью забъете весь канал на сервере.
    Ответ написан
    1 комментарий
  • Выбор функционального языка программирования?

    Tyranron
    @Tyranron
    Если под "функциональным" подразумевается функциональная парадигма, то Go тут явно аутсайдер. Советую Haskell для ознакомления с парадигмой фактически в "чистом" виде. После него - Scala и/или Rust, как удачные смешения функциональной парадигмы с другими парадигмами/направлениями. И не забудьте повертеть Erlang.

    Если же под "функциональным" подразумевается удобный инструмент с многими возможностями из коробки, то тут однозначно Go, так как и порог вхождения мал, и прививает хорошие практики. После него Scala + FRP + TypesafeStack тоже должны показаться интересными, но там порог вхождения повыше будет.
    Ответ написан
    Комментировать
  • Какие разделы математики актуальны в сфере нейронных сетей и ИИ?

    aideus
    @aideus
    Для ИНС в первую очередь нужны:
    - линейная алгебра (работа с матрицами: большинство ИНС очень компактно записывается в матричной форме)
    - математический анализ (дифференцирование: многие популярные алгоритмы обучения строятся на градиентах; понятие экстремума, сходимости и т.д.)
    - теория вероятностей (многие ИНС имеют вероятностную трактовку, без которой понять их архитектуру проблематично)
    - численные методы (например, когда аналитический вычислить производную или интеграл нельзя, а такие ситуации возникают часто, ничего другого кроме их численной оценки не остается, и нужно знать, как это правильно сделать);
    Для более продвинутого или специфического использования ИНС нужны:
    - теория графов (во-первых, сама ИНС - это граф, хотя на базовом уровне использования этого учитывать не нужно; во-вторых, ряд архитектур ИНС удобно представлять в форме вероятностных генеративных моделей, конкретнее, графических моделей);
    - теория дифференциальных уравнений (рекуррентные ИНС соответствуют системам дифуров);
    - теория динамического хаоса (ряд рекуррентных ИНС, например сети Хопфилда, хорошо описываются в терминах фазового портрета, аттракторов, бифуркаций, но в целом эта область математики нужна не очень часто);
    - исчисление предикатов (традиционно сети с бинарными нейронами рассматривались как способ представления предикатов);
    - теория алгоритмов (конечные автоматы, формальные грамматики, машины Тьюринга и т.д.) (помимо того, что сами ИНС представляют собой некий класс алгоритмов и возникают теоретические вопросы, где этот класс для той или иной архитектуры находится в иерархии Хомского, сейчас еще популярны и нейросимвольные сети, требующие обращения к указанным разделам математики)

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

    Если же говорить про ИИ в целом, то там нужна практически вся математика (хотя это в определенном смысле преувеличение: чистые математики решают свои внутренние задачи очень изощренными методами; в ИИ могут пригодиться результаты любого раздела математики, но крайне редко эти разделы нужны целиком). Гармонический анализ (Фурье, вейвлеты), без которого можно более или менее обойтись в машинном обучении, строго необходим в компьютерном зрении или распознавании речи. Комбинаторика, весьма редко нужная для ИНС, является основой классических методов ИИ (поиска в пространстве состояний). Теория алгоритмов, находящая лишь эпизодические применения в ИНС, является строго необходимой (как частично, так и практически полностью) в других подобластях машинного обучения и ИИ (например, в автоматическом программировании или машинном переводе). Теория множеств строго нужна в области представления знаний, нечеткой логике и т.д. Даже теория категорий может пригодиться (например, в вероятностных языках программирования - подобласти машинного обучения - при использовании функциональных языков типа Haskell ее применение оказывается вполне уместным). Ну, и так далее.

    В общем, в каждой подобласти ИИ есть свой минимально необходимый набор математических знаний, без которого очень сложно начать эту подобласть изучать. Для ИНС это линейка, матан, численные методы, весьма желательно теория вероятностей. В других областях это может быть комбинаторика, графы, теория алгоритмов, мат. логика. Есть разделы математики, которые окажутся неизбежными для изучения/использования, только при выборе конкретной подобласти или даже конкретных методов в ней; а так они или совсем не нужны, или нужны только самые базовые сведения из них.
    Ответ написан
    Комментировать
  • Хочу начать изучать Rust. С чего начать, где взять базу?

    Хорошая лекция на русском: https://tech.yandex.ru/events/meetings/java-party-... Для меня самое сложное в этом языке - указатели, работа с памятью, аннотации lifetime. Об этом и лекция. Впрочем, сам в ней некоторые моменты не понял, писал автору, но он не ответил, - видимо, вопрос уж слишком туп. :)
    Ответ написан
    Комментировать
  • Какие есть альтернативы питону для консольных приложений?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Буду неловок, но www.scala-lang.org подходит под все критерии!
    Ответ написан
    3 комментария
  • Стоит ли давать Haskell школьнику в качестве первого языка?

    wiz
    @wiz
    Ортодоксальный хаскелит

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

    Ответ написан
    Комментировать