Я всё жду статью, которая объяснит мне, зачем это делать. Пока лишь вижу какую-то субъективщину и вкусовщину. К тому же ряд возможностей scala, которые некоторые пытаются занести в недостатки, мне нравятся и их будет не хватать. Тот же implicit можно использовать безопасно и удобно в куче сценариев. А без pattern matching'а вообще не понятно как писать компактный код, это ж java какая-то получается.
Всё что я увидел из этой статьи, по большому счету, что kotlin нравится тем, что в нем нет некоторых возможностей scala и парой мест, где дело исключительно во вкусе. И, получается, что из-за этого некоторая компания год назад перешла с одного языка на другой. И при этом почти сразу после появления второго языка. Есть подозрение, что если эта компания и существует, то состоит она примерно из одного сотрудника.
Статья полна обожания к Котлину, что подозрительно. Неужели автор ни разу за год использования не напоролся на подводные камни? Вроде и неприятные баги в компиляторе были, и недоработки в стандартной библиотеке.
Спасибо, прочитал с удовольствием, словно в университет обратно вернулся.
У меня такой вопрос — а почему Python? Есть же куча средств, где всё это реализовано библиотеками.
Ну вот, скажем, на LabVIEV Levenberg-Marquardt прямо из коробки.
Смотрите, как симпатично получается:
Я вовсе не холивара ради, просто это экономит огромную кучу времени. Даже с применением Anaconda (спасибо за наводку) вам пришлось написать некоторое количество обвязки плюс код для рисования графиков… Ну или Matlab как-то больше ожидаешь увидеть для решения подобных задач.
Matlab, например, платный. В Python есть замечательный пакет SciPy, в котором как раз реализовано множество оптимизационных алгоритмов — глобальных/локальных, условных/безусловных…
«Постепенно задача усложняется: для декомпозиции дается проект, в котором есть только прототип. Затем — стандартное техническое задание, потом — плохое и сложное ТЗ.»
В конце гуру определяет сроки по мычанию заказчика с учетом всех хотелок его левой пятки, который появятся в будущем.
Искуственные нейронные сети(ИНС) хорошо справляются с задачими кластеризации, классификации данных. Данные, как вы понимаете, могут иметь абсолютно любую природу, в дальнейшем они все равно представляются в виде векторов (= Другое дело: выбор ИНС для конкретной задачи: распознавание образов, прогнозирование, кластеризация… На сегодняшний день ИНС различных архитектур довольно много, и несмотря на общие принципы построения, у каждой ИНС есть свои плюс и минусы при решении определенных задач. Насколько я знаю, на сегодняшний день нет четко сформулированных шаблонов использования ИНС для решения определенных задач.
У нас к сожалению тоже не было отдельного курса по нейросетям (в отличии от соседней специальности), но все же мне довелось делать по ним курсовик.
У меня сложилась примерно следующая модель, возможно кому-то так будет понятнее:
Введем пару понятий, чтобы проще было объяснить: вход нейрона назовем синапсом, у нейрона их много; выход нейрона назовем аксоном — он в нашей модели один. Названия собственно примерно отражают биологический смысл.
Так вот, представим n-мерное пространство, где n — количество синапсов у нейрона. В рассмотренном выше примере n = 900. Входная информация, таким образом, представляет собой вектор в этом самом пространстве. Ну для простоты можете представить 3-х мерное пространство и 3-х мерные вектора. Правда сеть довольно тупая будет :).
Дык вот, память нейрона после обучения также представляется таким вектором, а вся сеть — эдаким облаком векторов в 900-мерном пространстве.
В таком случае задача классификации сводиться к очень простой задаче — нахождению скалярного произведения входного вектора с векторами каждого нейрона в сети. Соответственно где это произведение будет максимальным, там и наибольшее совпадение. Проверьте в 3-х мерной геометрии.
Собственно вся сложность в таком случае в адекватном обучении нейросети. Я делал довольно примитивную самообучающуюся сеть, уж не знаю насколько каноничная реализация получилась. В принципе наверное смогу накатать подобную этой статью.
Это, скорее, классификатор, но не ИНС. Он не сможет классифицировать изображение, которому его не обучали. Например, подсуньте ему горизонтальную линию — только такие он и сможет классифицировать, вертикальные уже нет.
Но вообще все доходчиво, если планируете усложняться и таки дойти до ИНС, то с удовольствием почитаю.
Ничего не знаю о нейросетях, кроме того, что прочёл в вашей статье. Но, как я понял из комментариев выше, вам к статье стоит дописать что-то такое: «Вот у нас получилась заготовка для нейросети. Пока что это ещё ей не является, но в следующей статье мы постараемся сделать из неё полноценную нейросеть.»
А мне ObjC как-то сразу понравился, хотя реальных проектов я на нем не делал.
Не синтаксис (он действительно вырвиглазный), а именно семантика. Возможность отправлять сообщения вместо вызова методов, динамика, рефлексия, возможность отправлять сообщения null-у. Всего этого мне очень не хватало в C++.
А Swift… он конечно аккуратный такой, но меня пугает, что в последней редакции они выкинули из языка даже такие основы основ как операции инкремента и декремента (++ и --). И не то чтобы сложно написать i=i+1, но вот для кого это было сделано? Как будто не для программеров, а для каких-то домохозяек, которых пугают непонятные символы.
Киллер-фича свифта — обратная совместимость с обж-с. К сожалению, это приводит к некоторым странным фичам: повсеместное позднее связывание, странная логика попадания имён аргументов в сигнатуры, многословные названия методов… И эти странности идут в компании с ломанием обратной совместимости (во второй версии просто взяли и поменяли смысл ключевого слова), сыростью компилятора (припоминаю статью с экспоненциальным ростом времени компиляции при использовании литералов словаря), кросс-платформенности как таковой нет… За рамками яблок смысла в свифте примерно ноль. Свифт пытается догнать современные языки, а не совершает революции.
Давайте по-честному: единственная причина успеха и вообще существования Swift — это необходимость иметь обратную совместимость с неимоверно вырвиглазным и отсталым Objective-C (см. ваш же скриншот из начала статьи). Если бы не жёсткие рамки обратной совместимости вкупе с ущербностью Objective-C, никакого Swift не было бы. Был бы Objectve-C нормальным — никто бы с него не переходил из-за смутных плюсов; не было бы обратной совместимости — никто не стал бы выкидывать тонны написанного кода. Просто Swift дал возможность огромному числу программистов писать на нормальном языке.
Вот когда Swift кому-то понадобится за рамками яблочных платформ, можете начинать заливать про революционность, стимулы и далее по списку и сравнивать с Java, которая отжала огромный кусок от C++ именно за счёт новых подходов; ну или хотя бы с C#, который как Java, только нормальнее. Пока же этот Swift со всеми своими "стимулами" никому не нужен за рамками яблочных платформ.
Статья полна обожания к Котлину, что подозрительно. Неужели автор ни разу за год использования не напоролся на подводные камни? Вроде и неприятные баги в компиляторе были, и недоработки в стандартной библиотеке.
У меня такой вопрос — а почему Python? Есть же куча средств, где всё это реализовано библиотеками.
Ну вот, скажем, на LabVIEV Levenberg-Marquardt прямо из коробки.
Смотрите, как симпатично получается:
Я вовсе не холивара ради, просто это экономит огромную кучу времени. Даже с применением Anaconda (спасибо за наводку) вам пришлось написать некоторое количество обвязки плюс код для рисования графиков… Ну или Matlab как-то больше ожидаешь увидеть для решения подобных задач.
В конце гуру определяет сроки по мычанию заказчика с учетом всех хотелок его левой пятки, который появятся в будущем.
У меня сложилась примерно следующая модель, возможно кому-то так будет понятнее:
Введем пару понятий, чтобы проще было объяснить: вход нейрона назовем синапсом, у нейрона их много; выход нейрона назовем аксоном — он в нашей модели один. Названия собственно примерно отражают биологический смысл.
Так вот, представим n-мерное пространство, где n — количество синапсов у нейрона. В рассмотренном выше примере n = 900. Входная информация, таким образом, представляет собой вектор в этом самом пространстве. Ну для простоты можете представить 3-х мерное пространство и 3-х мерные вектора. Правда сеть довольно тупая будет :).
Дык вот, память нейрона после обучения также представляется таким вектором, а вся сеть — эдаким облаком векторов в 900-мерном пространстве.
В таком случае задача классификации сводиться к очень простой задаче — нахождению скалярного произведения входного вектора с векторами каждого нейрона в сети. Соответственно где это произведение будет максимальным, там и наибольшее совпадение. Проверьте в 3-х мерной геометрии.
Собственно вся сложность в таком случае в адекватном обучении нейросети. Я делал довольно примитивную самообучающуюся сеть, уж не знаю насколько каноничная реализация получилась. В принципе наверное смогу накатать подобную этой статью.
Но вообще все доходчиво, если планируете усложняться и таки дойти до ИНС, то с удовольствием почитаю.
Не синтаксис (он действительно вырвиглазный), а именно семантика. Возможность отправлять сообщения вместо вызова методов, динамика, рефлексия, возможность отправлять сообщения null-у. Всего этого мне очень не хватало в C++.
А Swift… он конечно аккуратный такой, но меня пугает, что в последней редакции они выкинули из языка даже такие основы основ как операции инкремента и декремента (++ и --). И не то чтобы сложно написать i=i+1, но вот для кого это было сделано? Как будто не для программеров, а для каких-то домохозяек, которых пугают непонятные символы.
Киллер-фича свифта — обратная совместимость с обж-с. К сожалению, это приводит к некоторым странным фичам: повсеместное позднее связывание, странная логика попадания имён аргументов в сигнатуры, многословные названия методов… И эти странности идут в компании с ломанием обратной совместимости (во второй версии просто взяли и поменяли смысл ключевого слова), сыростью компилятора (припоминаю статью с экспоненциальным ростом времени компиляции при использовании литералов словаря), кросс-платформенности как таковой нет… За рамками яблок смысла в свифте примерно ноль. Свифт пытается догнать современные языки, а не совершает революции.
Давайте по-честному: единственная причина успеха и вообще существования Swift — это необходимость иметь обратную совместимость с неимоверно вырвиглазным и отсталым Objective-C (см. ваш же скриншот из начала статьи). Если бы не жёсткие рамки обратной совместимости вкупе с ущербностью Objective-C, никакого Swift не было бы. Был бы Objectve-C нормальным — никто бы с него не переходил из-за смутных плюсов; не было бы обратной совместимости — никто не стал бы выкидывать тонны написанного кода. Просто Swift дал возможность огромному числу программистов писать на нормальном языке.
Вот когда Swift кому-то понадобится за рамками яблочных платформ, можете начинать заливать про революционность, стимулы и далее по списку и сравнивать с Java, которая отжала огромный кусок от C++ именно за счёт новых подходов; ну или хотя бы с C#, который как Java, только нормальнее. Пока же этот Swift со всеми своими "стимулами" никому не нужен за рамками яблочных платформ.
Скорость с питоном они сравнивают, ох...