• Книга «Знакомство с PyTorch: глубокое обучение при обработке естественного языка»
    0

    Купил. Хотел между делом подтянуть пайторч (обычно использую Керас). Ощущение, что переводил человек, незнакомый с темой. Просто пара моментов:


    • "Чувствительность" вместо "полнота" (метрика)
    • "нейронные сети с преобразованиями" — "трансформеры"
    • "Упреждающие сети" вместо "сеть прямого распространения"

    И таких перлов полно.

  • Как решить старую задачу с помощью ML на Python и .Net
    0
    Согласен, что здесь можно сделать лучше. Почему не сделано:

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

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

    Лучше всего — открытием ишью на гитхабе проекта. Если же сделаете пул-риквест, вообще будет идеально.
  • Как решить старую задачу с помощью ML на Python и .Net
    0
    Несколько десятков правил — мне такое уже сложно поддерживать. Именно поэтому сейчас, когда освоил азы (как минимум) sklearn, пошел именно этим путем. У каждого свой порог, когда лучше отходить от логики жесткого алгоритма в ML. Например, подзадача восстановления разбитых жесткими переносами слов решалась без ML. Хотя, не исключено, что когда все процессоры будут квантовыми, и тут станет проще научить, чем запрограммировать. Просто удивительно, что творят нейросети с последовательностями символов — вот тут недавно скрещивал базу от гугла и пример переводчика для кераса: github.com/serge-sotnyk/seq2seq-compress. После такого начинаешь верить, что если есть достаточно данных и времени, то нейросеть можно обучить чему угодно…

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

    Это действительно актуальная для многих задача. Но в общем виде она практически решена. Вот хороший список библиотек для Питона: stackoverflow.com/a/47106810/4884761

    А задача постобработки PDF мне понравилась тем, что она пошла практически по классическому сюжету:

    1. Посмотрели — не видно публичных готовых библиотек.
    2. Собрали данные для обучения.
    3. Проаннотировали.
    4. Выбрали метрики качества.
    5. Обучили бэйзлайн-решение. Так получилось, что оно удовлетворило по качеству. Это просто приятный бонус. Иначе нужен был бы этап 6.
    6. Улучшаем качество.

    Так получилось, что все необходимые компоненты уже есть и в .NET — поэтому была возможность еще и сравнить особенности решения и там, и там.

    Где применение ML оправдано — каждый решает для себя сам. В данном случае, решая задачу уже не первый раз, я получил большее удовольствие от работы и большую уверенность в легкости поддержки. Поэтому мне показалось оправданным. Раньше, до того, как на практике закрепил навыки по ML, тоже часто предпочитал все сделать и настроить своими руками.
  • Как решить старую задачу с помощью ML на Python и .Net
    0
    Т.е. если предложение тянется до правой границы, то переноса абзаца не будет? Есть ли в таком случае смысл переходить от логики к статистике?

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

    И я бы не формулировал, что ML=статистика. Те же деревья решений (их тоже можно применить с минимальным изменением программы) — это уже больше похоже на логические правила. Очень большой набор правил.

    Вот в другой встречающейся задаче по определению кодировки текста без статистики тяжело.

    Не поверите, но эту (точнее, очень похожую — определение языка) задачу также решал без машинного обучения. Основа — подсчет количества уникальных для языка фрагментов (1..4 буквы и целых слов). Это если очень упрощенно. Но ML-подход опять-таки, позволяет решить её более качественно именно для тех текстов, которых у вас больше. Статистика текстов очень отличается в зависимости от вашей предметной области. Твиты и статьи из журналов имеют существенно отличающиеся языковые модели.
  • Как решить старую задачу с помощью ML на Python и .Net
    0
    Вы имеете в виду, на основании чего делает такой вывод алгоритм? Или аннотатор (т.е., я)? Я, в данном случае, смотрю на «геометрию» строк. В предыдущей строке только одно слово, заканчивается знаком препинания. Следующая строка достаточно длинная, начинается с заглавного символа. Это характерно для абзаца. В реальности, конечно же, я так не взвешиваю, а быстро вставляю символ "*" в начало строки и перевожу курсор к следующей.

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

    Если же пруф, что абзац тут есть — то вот оригинальный фрагмент. Это фрагмент книги «Глубокое обучение на Python»
  • Как решить старую задачу с помощью ML на Python и .Net
    0
    Код я не смотрел, а в статье я такого почему-то не вижу.

    В коде этой фичи сейчас и нет, а в статье — как раз в пункте о скорости:
    В коде на Питоне пришлось отказаться от фич, которые были завязаны на то, какое решение по склейке было принято в прошлых предложениях — если подавать классификатору предложения по-одному, то общая скорость получится ниже плинтуса.


    Насчет numba — какие преимущества и недостатки по сравнению с Cython на практике?
  • Как решить старую задачу с помощью ML на Python и .Net
    0
    Спасибо за ваш кейс.

    В основном соглашусь — Pandas/Numpy позволяют многое легко и элегантно векторизовать. При этом код получается простой и производительный. Но такими кейсами все не ограничивается. По крайней мере у меня. Нередко, приходится фичи выводить на деревьях. Или тот момент, который я приводил в статье — когда в качестве фичи передается то, что классификатор выдал для предыдущих сэмплах. В таких случаях и векторизация ломается, и со списками приходится работать, и еще много чего нестандартного. Вот в таких случаях большая производительность чистого C#-кода заметна. Просто рабочий момент, на который обращается внимание, когда один и тот же код пишешь там и здесь.
  • Как решить старую задачу с помощью ML на Python и .Net
    0
    Спасибо! Желание есть, время буду искать. Практика показывает, что лучше всего понимаешь то, что пытаешься объяснить другим )))
  • Кодинг и тестирование kNN в Julia
    0
  • Huawei обогнал Apple по объему продаж. Капитализация американской компании все равно достигла $1 трлн
    0
    А температура воздуха в Москве ниже возраста президента РФ.

    Это технический ресурс. Логично было бы в Кельвинах измерять.
  • Запланированные новые возможности C# 8.0
    +1
    Это слишком ограниченная альтернатива (именно из-за ограниченности одним файлом). А так — да, использую помаленьку, где это возможно и к месту.
  • Запланированные новые возможности C# 8.0
    +1
    Просто один из хороших универсальных вариантов хэширования. В случае большего количества параметров, я думаю, будут поступать примерно так, как рекомендуется в ответе Джона Скита на вопрос: stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode/263416#263416
  • Усы, лапы и хвост: как нейронная сеть распознает котиков и другие объекты
    0
    В рассказе нам поможет Дмитрий Сошников — технический евангелист Microsoft

    Почему же тогда не на CNTK+.Net? Помнится, еще пол-года назад на интенсиве, Дмитрий говорил, что в Deep Learning все уже можно писать на C#, а не на Питоне, который он не любит, но приходилось ранее, поскольку ничего другого не было.
  • Музыка для эффективной работы: что нужно знать
    0
    Если задача сложная, то не мешают (я о себе лично) только 2 варианта:
    1. Тишина.
    2. Какой-то из негромких шумов (белый шум, дождь, прибой).
    Лучше их чередовать.

    Музыка помогает, если задача типовая и немного нудная.
  • Марвин Мински «The Emotion Machine»: Глава 1 «Настроения и Эмоции»
    0
    «Отец искусственного интеллекта» — я бы заменил на «того, кто на многие годы задержал использование нейросетей».
  • Паттерны внедрения зависимостей. Часть 1
    0
    Можно было бы дать ссылки на посты Сергея Теплякова, откуда текст перекочевал целыми абзацами:
    sergeyteplyakov.blogspot.com/2013/01/di-property-injection.html
    sergeyteplyakov.blogspot.com/2012/12/di-constructor-injection.html
  • Первый контакт с «var» в Java 10
    +2
    Да, именно так и делаю время от времени, но ограничение на один файл печалит.
  • Первый контакт с «var» в Java 10
    +2
    Жаль, что в C#/Java так и не добавили какой-то аналог typedef. Это бы убрало громоздкость при использовании объявлений типа

    InternationalCustomerOrderProcessor<AnonymousCustomer, SimpleOrder<Book>> orderProcessor = createInternationalOrderProcessor(customer, order);


    Вместо этого можно было бы использовать

    MyProcessor orderProcessor = createInternationalOrderProcessor(customer, order);


    Было бы неплохое дополнение к var в тех случаях, когда тип важен при чтении кода и его некак быстро вывести из правой части глазами.
  • Эволюционные вычисления: учим табуретку ходить
    0
    Именно наличие операции кроссовера и отличает ГА от других разновидностей ЭВ. При этом сам кроссовер может быть самым разнообразным — как классическим, работающим с битовыми строками (с разными вариантами разрезания исходных генов), так и еще кучей разновидностей (непрерывным, пространственным, работающим с генами переменной длины как в генетическом программировании и т.п.) Главное, чтобы он умел объединять родительские гены в новые гены потомка, которые будут иметь что-то общее с обоими родителями.
  • Уязвимости в прошивках австралийских животных
    +2
    На днях как раз разговаривал с одним военным. Он рассказывал, что был у них один лейтенант, который в увольнительную ходил в тайгу, откуда приносил кучу грибов. Оказывается, он на безлюдных местах (понятно почему) заранее разбрызгивал смесь изрубленных в воде грибов, после чего накрывал их слоем листвы. Через несколько месяцев можно было чуть ли не косой косить.

    Он еще в каком-то советском журнале по садоводству описывал этот способ.

    Навскидку нашел тут парочку более современных ссылок:
  • Уязвимости в прошивках австралийских животных
    +1
    Грибы спорами размножаются

    Поспорил с грибами — они и размножились )))
  • Bluesmart: швейцарский нож среди чемоданов
    +1
    Австрийские авиалинии тоже несколько дней назад ужесточили требования по аккумам в багаже — заставили выкусить их из медицинского монитора. Иначе не пропускали.
  • Постмортем Age of Empires
    0
    Total Annihilation был упомянут, как пример более требовательной программы. Но, справедливости ради отмечу, что в то время мне больше всего нравился именно Total Annihilation по одной простой причине — самые умные юниты (среди других игр). Они требовали от меня наименьшие корректировки во время игрового процесса. Чего только стоил режим патрулирования — строители, в случае уменьшения количества определенных ресурсов, собирали именно эти ресурсы, а не тупо пытались собирать что-то в уже опустевших месторождениях (как это бывало в других играх). Ну и много других мелочей.
  • Открытый курс машинного обучения. Тема 5. Композиции: бэггинг, случайный лес
    +1
    В формуле из раздела Ансамбли (вероятность) непонятно, что такое m. Во многих других загугленных источниках этот момент аналогично пропущен. Нашел вот здесь: http://pavroz.ru/files/mue6.pdf (стр. 166).

    m = (n+1)/2

    Просто эта формула в домашке используется, поэтому данный момент важен.
  • Открытый курс машинного обучения. Тема 2: Визуализация данных c Python
    0
    Вопрос по домашке:

    3. Когда лучше всего публиковать статью?

    На хабре дневные статьи комментируют чаще, чем вечерние


    А что есть дневная, а что вечерняя статья? С какого по какое время?
  • Обзор курсов по Deep Learning
    0
    https://www.kadenze.com/courses/creative-applications-of-deep-learning-with-tensorflow/info — TensorFlow, Python в ноутбуках Jupyter. Правда, текущий курс уже заканчивается, но материалы (включая текстовые варианты лекций, где немало полезных ссылок) можно найти на гитхаб — https://github.com/pkmital/CADL.
  • Генерация программы из описания на естественном языке
    0
    Конечно, это всего лишь наметки на то, как в будущем может выглядеть программирование. Но я бы обратил внимание на такую вещь, как способность RNN к обобщению, возможность объединения различных вариантов. А эти 4 ошибки — это как раз ожидаемо. Со временем пройдет.
  • Генерация программы из описания на естественном языке
    0
    Есть в искусственных языках и другое направление — максимальное упрощение языка. При этом разрешение неоднозначностей возлагается на интеллект (пока естественный). За счет контекста. Тут нейронные сети как раз в тему. Чтобы понять фразы типа (я немного изменю оригинал): «нафига дофига нафигачили? расфигачивайте».

    Пример такого языка — Токипона
  • Генерация программы из описания на естественном языке
    0
    обучаться на УЖЕ имеющихся примерах
    — даже если использовать только это, то представим себе объем знаний, хранящихся в проектах типа stackoverflow, sourceforge. Только на этом багаже можно двинуться достаточно далеко.

    Но как она сможет создавать новое — то, чего еще нет?
    — в качестве примера таких алгоритмов могу привести различные эволюционные стратегии (GA, GP, tierra). Да, скорость изобретения новых трюков эволюцией не очень велика, но она принципиально возможна.

    Система AlphaGo, обыгравшая Ли Седаля тренировалась, играя сама с собой.

    Сможет ли абориген из джунглей Амазонки «создать» при помощи вышеописанного устройства, мерседес, боинг, компьютер?
    — Думаю, что если этого аборигена взять в раннем детстве и воспитывать в обычном для нас окружении, то вероятность того, что он сможет стать продвинутым технарем не очень будет отличаться от обычного выпускника Пекинского ВУЗа. Конечно, нужно проверять — существуют разные точки зрения на то, как гены разных национальностей влияют на способности в разных областях. Моя текущая точка зрения состоит в том, что у человека, как у вида достаточно молодого, внутривидовые отличия индивидуумов существенно превышают отличия между средними значениями внутри определенных популяций (национальности, пол и т.п.) Я высказался сейчас несколько вольно, но точная формулировка будет слишком длинной.
  • Генерация программы из описания на естественном языке
    0
    Можно конечно подумать о движении в направлении, аналогичном методу раскрутки компилятора. Но пока это будут спекуляции, ни на чем не основанные.
  • Генерация программы из описания на естественном языке
    0
    Да, думаю, что машины, если будут писать «для себя» (т.е., без цели интегрировать код с человеческим), будут переводить его не в С, а во что-то другое. Возможно, какое-то графовое представление. А может — сразу в машинный код.

    Тот подход, что описан здесь не очень хорошо поддается масштабированию влоб — в более-менее сложной системе (при произвольном языке описания) он приведет к проблемам, связанным с комбинаторной сложностью всех возможных вариантов. Скорее, этот подход может служить аналогом того, что у хорошего программиста получается сделать почти без раздумий — найти максимальный, минимальный элементы, отсортировать пузырьком, найти подстроку в массиве строк, загрузить объект (используя ORM) из DB. Дальнейшую комбинацию этих задач нужно осуществлять уже на другом уровне абстракции, где может стоять своя RNN (или что-то еще).

    Но вот обратите внимание, что таким, бессознательным образом генерируется программа, в которой еще и согласованы идентификаторы. Многие ли люди способны это сделать, параллельно разговаривая по телефону (для меня это показатель того, что действие производится автоматично)? Так что как минимум этот уровень, искусственные нейросети способны взять на себя не хуже обычных людей. Я имею в виду в ближайшей перспективе. Своеобразный продвинутый саджест методов и классов. Более высокие уровни композиции — видимо несколько позже.
  • Генерация программы из описания на естественном языке
    0
    Честно говоря, я думаю, что к этому и идет. И вряд ли люди договорятся, что нужно остановиться — ведь элементы ИИ позволяют тем, кто их разработали, получать немалые деньги. Поэтому под любыми предлогами (в том числе, обманывая сами себя относительно его безопасности), разработки будут продолжаться, пока не наступит момент, когда человек станет ненужным. В том числе, этим будут заниматься и военные, у которых будет бронебойный довод — если это не сделаем мы, это сделают наши противники.

    Единственный перспективный вариант, который мне кажется реальным — концепция усилителей разума, когда человек включается решающим звеном в интеллектуальную систему, которая передает ему переваренные данные (если сделаем так, то получим 100000 денег прибыли, если эдак — убыток).
  • Генерация программы из описания на естественном языке
    0
    Для этого есть свои методики (извлечения знаний эксперта и т.п.) Кроме того, для начала вполне можно использовать чек-листы с типичными вопросами-ответами. А, после первой итерации клиент уже сам расскажет, что не так — благо, машину, в отличие от белкового программиста, не будет расстраивать (хотя, как знать) выброшеный код из первой итерации.

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

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

  • Генерация программы из описания на естественном языке
    0
    Поначалу — да. Нужно будет правильно объяснять. Но конечная цель как раз в том, чтобы любой человек мог объяснить компьютеру, какая программа ему нужна. И, если что-то непонятно или противоречиво, то компьютер должен будет задать наводящие вопросы — стать более активной составляющей.
  • Генерация программы из описания на естественном языке
    0
    Для этого подразумевался последний пункт про прокрастинацию — просто не хотелось писать так сухо. Могу конечно переписать, но боюсь, что пропадут тогда данные опроса.
  • C# — есть ли что-то лишнее?
    0
    Шасн того что ваш синтаксис станет неудобочитаемым горахдо выше чем у vola. И форматирование вам не поможет.


    Похоже, тут дело вкуса (привычки). Достаточно большие fluent-выражения, если они правильно отформатированы, обычно читаются неплохо. Но обычно я не довожу до многоэкранного монстра, а разбиваю на подвыражения. Я приведу один пример — не сочтите за издевательство.

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

    Этот пример я привел к тому, что все, с чем поработал некоторое время и освоил, будет красивым и привычным. Именно так, на большом количестве примеров и обучаются нейронные сети (и живые, и «железные»). Я не спорю с тем, что вам это ЧПС-выражение кажется прекрасным. Я только говорю, что это же можно решить иначе, будет не хуже (если вы будете некоторое время пользоваться этим) и не нужно будет (точнее, было) усложнять язык.

    Мне интересно, а как по вашему люди пишут на нескольких языках сразу? Место в голове не заканчивается?:)


    Заканчивается у всех. У одних раньше, у других позже. Не забывайте, что помимо языков есть еще разные фреймворки, IDE, OS и т.п. Но вот то, когда это место (или временные ресурсы на изучение) закончится, зависит от сложности системы и личных особенностей.

    Разработка — это борьба со сложностью. Именно на это направлены различные приемы и приемчики, методы, Code Agreements, ограничения.
  • C# — есть ли что-то лишнее?
    0
    Да, конечно. Отвлекся на непрофильное использование using, а этот вариант не упомянул. Этот вариант тоже подойдет, но со своими ограничениями. Чтобы было более понятно — расширю пример

    public class Keyword{...}
    public class Entrances:List<...>{...}
    public class KeywordsDictionary: Dictionary<Keyword, Entrances>{}
    
    class DocumentStatistics {
    	...
    	KeywordsDictionary dictionary = new KeywordsDictionary();
    	...
    	void AugmentStatistics(KeywordsDictionary anotherDictionary){...}
    	public Entrances GetEntrances(Keyword){...}
    	...
    }
    


    Ну и этих вхождений типов Keyword и Entrances может быть некоторое количество по разным классам. Кстати, обратите внимание, что var тут никак не поможет. И вот, если конструкция одного из классов изменилась — скажем, Keyword стал чем-то более сложным, с новыми полями, то достаточно его объявление поменять один раз. Да, еще нужно будет покопаться в работе с реализацией, там где это было затронуто, но высокоуровневые объявления не затрагиваются. Это удобно.

    К сожалению, есть ложка дегтя. Вы о ней сказали — sealed классы (а это тот же string). Еще добавлю различные базовые типы (int, float), которые часто поначалу используются в качестве ключей, элементов. В алгоритмах с высокой вычислительной нагрузкой все переводить на классы — это существенный overhead.

    Для бизнес-логики же вполне можно использовать.
  • C# — есть ли что-то лишнее?
    0
    Выглядит в принципе вполне читабельно (чисто), но:

    1. from и select по смыслу отличаются от их обычного их применения для последовательностей. Соответственно, необходимо будет хоть немного, но привыкать и переводить их к новой семантике использования.

    2. Никто не мешал реализовать конструктор парсера, который также относительно чисто будет работать во fluent-стиле (я сейчас набрасываю от балды, просто как идею):

    public static Parser<Question> Question =
      ParcerBuilder
        .Clause(AnswerTypeIndicator.Or(Parse.Return(AnswerType.Text)))
        .Clause(Identifier)
        .Clause(QuotedText)
      .Build();
    


    Для меня такой синтаксис также вполне понятен, а семантика соответствует тому, что ожидается от подобных конструкций. Чуть-чуть напрягает, что удобочитаемость таких конструкций зависит от размера и удачного форматирования кода — но это же относится и ЧПС LINQ и многому другому.

    К любому синтаксису привыкаешь и в процессе использования он становится очень понятным и близким. Но новые конструкции и концепции занимают в голове место, которое могло бы пойти на что-то еще (и некоторое время у новичков). Поэтому если что-то несложно реализовать уже имеющимися конструкциями, то лучше так и сделать.
  • C# — есть ли что-то лишнее?
    0
    Я ответил на ваше замечание о том, что люди неплохо пишут программы на языках с динамической типизацией.

    C# мне нравится и, в общем-то, устраивает. Сейчас это мой основной инструмент. Но скорость накапливания в нем новых фич порождает мысли о том, что он становится слишком сложным для обучения новых людей, просто для дальнейшего развития. Своеобразная скрипка Энгельбарта.

    Насчет языков можете еще добавить программирование прямо в коде без ассемблера. Еще желательно на различных архитектурах. Мне именно этот опыт кажется крайне важным. Становится понятно, насколько нелогичной является архитектура x86 (по сравнению с другими). Это наслоение нескольких поколений эволюции, зачастую мешающих друг другу. Обязательно добавьте также использование NoSQL-систем. Я согласен, что перечисленные вами подходы (языки, технологии) нужно попробовать. И не на уровне прочтения спецификации языка. Это все было в разные периоды. В том числе и работа не с теми языками, которые мне нравились. Конечно, с них старался соскочить при первой возможности.

    Разработка ПО — та область, которую охватить полностью уже невозможно. Да, это было возможно лет надцать лет назад — ситуация параллельна древнегреческим ученые, которые держали в голове весь объем знаний того времени, но сейчас это нереально. Крайне желательно заглядывать не только в свой мирок, но и в параллельные вселенные, но активно работать со всем — нереально. Сложность систем стала слишком велика. Остается только использовать достаточно репрезентативную выборку.

    И вот именно здесь становится важна сложность инструмента. Чем меньше его сложность — тем легче его освоить. И тем больше инструментов можно опробовать и держать наготове.

    Возвращаясь к языкам с динамической типизацией. Да и просто к языкам. Сейчас программированием занялись (или пытаются) очень многие люди. Понятно почему — денежное направление и все такое. Но не у всех мозг приспособлен именно для такой работы. В центрах занятости можно пройти тесты и узнать свой тип. Если он окажется не «человек — знаковая система», то освоение именно программирования скорее всего будет идти достаточно тяжело. Тут можно посоветовать какие-то смежные специальности — IT достаточно широкая область, где есть и работа с людьми и еще много чего (конечно, знание программирования хоть на каком-то уровне и тут поможет — это как развитие общего кругозора). Это я к чему — сейчас я уверен, что можно и нужно разрабатывать более тонкие психотесты, на основании которых будет понятно, какой подход у человека пойдет легче всего — императивный или же функциональный, языки со статической типизацией или же динамической. Именно убежденность в том, что многие предпочтения (и связанная с этим эффективность работы) зависят от особенностей психики разработчика и для разных людей она будет различной, заставляет меня везде делать оговорку «на мой взгляд». Это не от неуверенности, а от понимания того, что все разные и во что это выливается.

    Но помимо субъективных моментов есть и объективные. Простая система проще учится, проще держится в голове. И именно она даст возможность опробовать большее количество подходов (поддержать широту взглядов). И еще — сложность не всегда объективна. Иногда сложность системы не окупается дальнейшей простотой использования. Именно попыткой найти такие моменты в C# и является пост.

    Но никто не предложил своих вариантов (если не считать таковым призыва к самоограничению в комментарии https://habrahabr.ru/post/302076/#comment_9657336). Неужели есть только путь накопления фич и чем их больше, тем язык лучше?
  • C# — есть ли что-то лишнее?
    0
    С другой стороны есть динамические языки, где вообще типы переменных не указываются и люди как-то пишут. И даже хорошо пишут.


    Да, есть такое. В спойлерах попытался объяснить, что я хорошо понимаю, что есть разные люди. Кому-то не мешает отсутствие опеки со стороны компилятора. Но я — не такой.

    Обратите внимание, везде, где только возможно, я пытаюсь вставить оговорку, что это мой взгляд. Я уважительно отношусь к людям, пишущим на любых языках. Просто у меня они (динамические языки) не идут — бесят и требуют массу времени на выискивание опечаток и других дурацких ошибок. Когда-то я думал, что нужно просто больше заниматься программированием и читать правильную литературу. Но, со временем, понял, что многое зависит также от личных особенностей. У меня, например, ниже среднего объем кратковременной памяти (то самое магическое число 7±2). Есть и другие объективные отличия от среднего человека. Ничего необычного — просто я такой. Но эти отличия приводят к тому, что я начинаю сталкиваться с некоторыми проблемами раньше других (с другими же наоборот — позже). И мне приходится применять разные приемы и приемчики (например, делить на более короткие методы) там, где другие люди еще просто пишут код и не испытывают ни малейших проблем с охватом уровня полностью.

    По совокупности всех этих причин, у меня не сложилось со скриптовыми языками. Там моя производительность низка. Это особенно печалит из-за того, что все самые перспективные библиотеки для Deep Learning имеют в качестве фронтэнда именно скриптовые языки, прежде всего Python (Lua, R). А к этому направлению я сейчас сильно присматриваюсь. Надеюсь, что в Гугле все же допилят нормальную поддержку Go в TensorFlow (на мой поверхностный взгляд, это все же самая перспективная open-source библиотека в данном направлении на сегодняшний момент).