LINUX.ORG.RU

Как вы выбираете язык программирования для реализации проекта?

 , , ,


0

4

На практике часто встречаются задачи по выбору из неопределенного множества альтернатив, которые сложно оценить сходу. Причём не только в программировании, но и например в выборе бытовой техники, операционной системы / дистрибутива и тд. Как вы их решаете? А может есть какие-то исследования по наиболее эффективному выбору из множества альтернатив?

Я не прошу советов типа «используй язык $LANG», понятно что есть множество вариантов, но мне интересно, как решать проблемы выбора такого рода в общем случае?

Конкретно в области программирования:
Какой язык программирования изучить?
Какой язык выбрать для реализации конкретного проекта?
А если уже выбран язык, то какую выбрать имплементацию? Например существует более 80 имплементаций Scheme.

Конечно, требования к проекту могут сильно сократить список рассматриваемых альтернатив, например, если пишется плагин/аддон к другой программе/игре, то всё зависит от того, какие биндинги имеются для неё.

Но что, если таких ограничений нет? Как выбрать что-то в этом случае?

Предположим, вы хотите разработать игру, как выбрать движок? А может написать самостоятельно, используя графическую либу?

А если даже выбрали/разработали — в игре понадобится скриптовый язык. Какой встроить? Разрешать ли много языков или ограничиться одним?

Кроме того, кроме широко известных альтернатив вроде Squirrel, Lua и Tcl, есть и менее распространённые варианты, например javascript, newlisp, Scheme. Какой выбрать? А как узнать о других вариантах, которые сходу не вспомнились?

★★★★★

why so serious? :)

[IMHO]

На практике часто встречаются задачи по выбору из неопределенного множества альтернатив, которые сложно оценить сходу. Как вы их решаете?

Монету подбрасываю

А может есть какие-то исследования по наиболее эффективному выбору из множества альтернатив?

https://ru.wikipedia.org/wiki/Буриданов_осёл

Какой язык программирования изучить?

Тот, за который больше платят, если ты хочешь работать программистом

Тот, который тебе интересно изучить, если just for fun

Тот, что наиболее распространён, если собираешься работать в команде

Какой язык выбрать для реализации конкретного проекта?

Тот, который ты хорошо знаешь

Либо тот, что распространён в области конкретного проекта.

А если уже выбран язык, то какую выбрать имплементацию? Например существует более 80 имплементаций Scheme.

Наиболее популярную же

А если даже выбрали/разработали — в игре понадобится скриптовый язык. Какой встроить? Разрешать ли много языков или ограничиться одним?

Исторически сложилось, что встраиваемый скриптовый язык для игр - lua. Сейчас ещё появился модный mruby

В общем, если долго не можешь выбрать - подбрось монету и начни делать proof of concept. Готовую реализацию всегда можно переписать на чём-нибудь ещё. Заодно и рефакторинг будет.

[/IMHO]

router ★★★★★ ()

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

Сейчас есть ресурсы, типа SO — задаешь вопрос. Приходят дяди, высказывают мнения (веришь что это все их опыт) и проверяешь/доверяешь.

gh0stwizard ★★★★★ ()

На практике часто встречаются задачи по выбору из неопределенного множества альтернатив, которые сложно оценить сходу. Как вы их решаете?

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

no-such-file ★★★★★ ()

У меня в этом плане простой принцип, если в какой-то теме новичок, то просто выбираешь mainstream, если их несколько типа Unity и UE4, то выбираешь, то, что лучше соответствует твоим требованиям, предварительно изучив примеры и статьи по каждому.

Если у тебя есть какая-то база, то можно еще отойти от mainstream и посмотреть решения кореллирующие с твоей базой. Например, minecraft был написан на java и от этого не потерял в популярности и прибылях. Но писать на java ААА проект, когда под проект влупили миллионы баксов, конечно тупо.

Когда вырастаешь из новичка, то либо пилишь свое решение, либо к тому времени находишь наиболее оптимальное, меньшее из зол, соответствующее твоим требованиям.

foror ★★★ ()
Ответ на: комментарий от router

Монету подбрасываю

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

Тот, который тебе интересно изучить, если just for fun

Это. А как я узнаю, какой наиболее интересно изучить, например?

Исторически сложилось, что встраиваемый скриптовый язык для игр - lua. Сейчас ещё появился модный mruby

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

В общем, если долго не можешь выбрать

Да нет, мне интересно, как выбрать оптимально, включая и усилия и сроки для выбора, то есть быстро выбрать что-то хорошее (а не популярное).

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

Тот, который тебе интересно изучить, если just for fun

Это. А как я узнаю, какой наиболее интересно изучить, например?

Если у тебя нет предпочтений, то у тебя нет предпочтений. Капитан очевидность, избранное, том 5

router ★★★★★ ()
Ответ на: комментарий от Xenius

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

Вроде бы луа довольно быстрый и скорее всего заткнет за пояс все альтернативы.

Im_not_a_robot ★★★ ()
Ответ на: комментарий от foror

У меня в этом плане простой принцип, если в какой-то теме новичок, то просто выбираешь mainstream, если их несколько типа Unity и UE4

Должно быть что-то свободное и в идеале совместимое с GPL и 2D. Я считаю, что несвободные игры неприемлемы, особенно в части движка.

Но писать на java ААА проект, когда под проект влупили миллионы баксов, конечно тупо.

Согласен. Такое можно только на более-менее безопасном языке с хорошей модульностью писать, типа OCaml.

Xenius ★★★★★ ()
Ответ на: комментарий от Im_not_a_robot

Вроде бы луа довольно быстрый и скорее всего заткнет за пояс все альтернативы.

А с чем ты его сравнивал? Довольно быстрое, да, но это не значит, что самое быстрое. Да и в скриптовом языке для не слишком динамичной игры (паззл например) скорость вообще второстепенна.

И я не хочу полагаться на «скорее всего», особенно если это мнение кого-то, кто когда-то слышал, что что-то «вроде как быстрое»

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

Должно быть что-то свободное и в идеале совместимое с GPL и 2D. Я считаю, что несвободные игры неприемлемы, особенно в части движка.

В вопросах выбора технологий - религия не должна быть доминирующим фильтром. Если конечно целью разработки является не воплощение твоих идей, а проповедь религии gpl через разработку ПО.

foror ★★★ ()

Предположим, вы хотите разработать игру, как выбрать движок?

Будто бы их тысячи штук. На деле будешь выбирать между несколькими альтернативами.

А может написать самостоятельно, используя графическую либу?

Велосипедисты на марше! Если ты хочешь разработать игру и решил написать движок для нее, то ты будешь писать движок, а не игру.

кроме широко известных альтернатив вроде Squirrel, Lua и Tcl, есть и менее распространённые варианты, например javascript, newlisp, Scheme

широко известных ... Squirrel, Lua и Tcl

менее распространённые ... javascript

лол

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

широко известных ... Squirrel, Lua и Tcl

менее распространённые ... javascript

лол

Скорее всего, речь идёт не о браузерном приложении, раз уж среди основных кандидатов lua и tcl

А на стороне сервера демон на js как раз редкое извращение

router ★★★★★ ()

Кажется, для всего этого есть отдельные люди - аналитики.

sT331h0rs3 ★★★★★ ()
Ответ на: комментарий от router

Если у тебя нет предпочтений, то у тебя нет предпочтений. Капитан очевидность, избранное, том 5

Ну может есть язык CoolLang который мне бы очень понравился, но я просто не знаю об этом заранее? И даже если я кратко пролисну его reference manual, я могу не понять, что этот язык крут сразу, а чтобы изучать все языки у меня времени нет.

Xenius ★★★★★ ()
Ответ на: комментарий от router

А на стороне сервера демон на js как раз редкое извращение

Кто сказал Node.js?

Virtuos86 ★★★★★ ()
Ответ на: комментарий от foror

В вопросах выбора технологий - религия не должна быть доминирующим фильтром.

Причём тут «религия»? Если технология не позволяет реализовать то, что от неё требуется — а именно свободную игру, значит она не пригодна для реализации цели.

Целью разработки является воплощение идеи в виде, который позволит всем желающим получить к ней доступ. Если же игра будет несвободной, то нет смысла её выпускать на публику, а если не выпускать, то и делать нет смысла.

Xenius ★★★★★ ()

Не можешь принять решение самостоятельно: делегируй принятие решения более опытному, а сам — подчинись его выбору.

Не хочешь делегировать принятие решения кому-то другому: получи знания и опыт достаточные для самостоятельного принятия решения.

Не хочешь делегировать принятие решения и не хочешь получать знания и опыт: у тебя проблемы, парень!

anatoly ()

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

На практике - не встречаются.

tailgunner ★★★★★ ()

в общем случае есть ТРИЗ например.

  • Sean Parent and Bjarne Stroustrup: Appendix B: Programming Language. In Alexander Stepanov and Paul McJones: Elements of programming. Addison-Wesley. ISBN 978-0321635372. June 2009.

    pp 233-242

  • по которому есть люди чему мнению ты доверяешь и консультироватся можешь с ними
  • на которую поисковик выдаёт больше всего.
  • тот же ответ
  • тот же ответ
  • тот же ответ
  • тот же ответ
  • тот же ответ
  • тот же ответ
qulinxao ★★☆ ()

Какой скажут, т.е. Clojure или Haskell :-)

Debasher ★★★★★ ()
Ответ на: комментарий от router

Какой язык программирования изучить?

Тот, за который больше платят, если ты хочешь работать программистом
Тот, который тебе интересно изучить, если just for fun
Тот, что наиболее распространён, если собираешься работать в команде

Господи иссусе! Первый же комментарий и десять из десяти! Рукоплещу автору.

Возможно стоило бы еще рассказать за случай, когда ты архитектор к командной задаче. Но тут непонятна и необходимость, и простыми пунктами не обойтись.

iu0v1 ()

А если даже выбрали/разработали — в игре понадобится скриптовый язык. Какой встроить?

Если игра для массового пользователя, то Lua, возможно в реализации LuaJIT

Если для лисперов, тогда Scheme :P

Разрешать ли много языков или ограничиться одним?

Ограничиться одним. 1) Чтобы не фрагментировать сообщество моддеров 2) Сэндбоксинг трудно будет сделать хорошо для кучи языков сразу, и у разных языков могут оказаться разные незакрытые дырки

annulen ★★★★★ ()

Просто используй Python.

anonymous ()
Ответ на: комментарий от anonymous

Просто используй Python.

Там с песочницами плохо. Вот у Tcl для этого есть специальный режим, входящий в ядро языка.

Xenius ★★★★★ ()
Ответ на: комментарий от annulen

Если игра для массового пользователя, то Lua, возможно в реализации LuaJIT

Ну почему Lua? Есть же множество других языков. Даже для «массового пользователя», есть всякие там бейсики, Z Machine и тд, но мне кажется, что ограничивать моддера выразительными возможностями специально урезанного языка — не очень хорошая идея. Почему бы не взять полноценный современный язык?

Если для лисперов, тогда Scheme :P

Кто захочет моддить игру — тот любой язык выучит, главное чтобы это было легко. А Scheme — очень простой язык, пожалуй даже проще Lua, хотя вероятно Tcl будет всё-таки привычнее.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

Почему бы не взять полноценный современный язык?

Объясни, чем Lua неполноценный и/или несовременный язык

annulen ★★★★★ ()
Ответ на: комментарий от Xenius

А Scheme — очень простой язык

Да, но вид скоботы отпугнет многих геймеров

annulen ★★★★★ ()

Легко, я убеждаю себя, что программирование — дело постыдное

buddhist ★★★★★ ()

В основном питон, он практически для всего подходит.

sol13 ★★★★ ()
Ответ на: комментарий от callbackhell

Был, во времена r5rs

Ну, спецификация r7rs-small занимает 88 страниц, хотя это в общем-то многовато, но не уверен, что заметно больше.

Xenius ★★★★★ ()
Ответ на: комментарий от annulen

Объясни, чем Lua неполноценный и/или несовременный язык

Императивщина, есть разделение на statement и expression, ключевые слова и синтаксис из паскаля (хорошо хоть ненужный begin убрали), global by default, изкоробки нет UTF-8.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

r7rs-small

«Двойные стандарты»? Как будто это что-то принципиально меняет.

callbackhell ()
Ответ на: комментарий от callbackhell

А в каких языках его нет?

В lisp-подобных, в Tcl, например. А вообще много где нет.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

В lisp-подобных

А почему вот этот код

(define foo define)
(define define 1)
(write define)
у меня валится с ужасной ошибкой use keyword бла-бла-бла

А вообще много где нет.

А конкретней? допустим, пока выяснили, что в tcl, picolisp и Io это действительно так. Утверждение

В lisp-подобных

вызывающе неверно Какие еще примеры есть?

callbackhell ()
Ответ на: комментарий от Xenius

В lisp-подобных

Или, задам вопрос по другому. Что по-твоему statments, и чем они отличаются от спецформ?

callbackhell ()

Какой язык программирования изучить?

Тут уже советов надавали правильных, но я бы ещё добавил - не слишком надейся, что тебе одного языка хватит для всего. Более-менее ориентироваться в паре-тройке «классических» языков типа C++, Java и даже Object Pascal, паре скриптовых (можно python, а хотя бы и perl - для решения микрозадач «под себя») плюс хотя бы одном функциональном (для расширения кругозора) - это нормально для программиста. Вот у меня с функциональщиной плохо, увы, но надеюсь ещё наверстать.

Вот тогда с вопросом

Какой язык выбрать для реализации конкретного проекта?

Будет куда проще.

Лично я, чтобы не было комплекса буриданова осла, первым делом спрашиваю себя «на c++ это будет нормально работать?» Если да, то выбор закончен. Но да, это в определённой степени обусловлено моей спецификой и привычками, и например, я не слишком интересуюсь web-программированием.

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от Xenius

Императивщина

4.2, может и в функциональщину

есть разделение на statement и expression

== не лишп. Ну да, и че?

ключевые слова и синтаксис из паскаля

Ну это вообще смишно

global by default

local by default намного хуже, хотя отсутствие дефолты было бы правильнее. Лечится strict'ом

изкоробки нет UTF-8

В 5.3 есть

annulen ★★★★★ ()

новогодний вброс про выбор языка под задачу ?

это-ж МЕГАПОПУЛЯРНЫЙ фейк..

хотя задачи решают имеющими средствами, и программы пишут на том что знают. Если надо нарубить дров - топор берётся в сарае/санях/рюкзаке, но не в магазине.

MKuznetsov ★★★★★ ()

Какой язык программирования изучить?

Тот, на котором будешь решать задачу. Если задачи нет, то примерно так: http://foykes.com/wp-content/uploads/2014/01/whatcodetochoose-preview.jpg

Какой язык выбрать для реализации конкретного проекта?

В зависимости от требований проекта. Разные языки дают разные возможности: скорость, гибкость, расширяемость, надёжность, ...

Предположим, вы хотите разработать игру, как выбрать движок? А может написать самостоятельно, используя графическую либу?

Опять же, смотря какую игру. Шахматы и Doom имеют разные требования.

А если даже выбрали/разработали — в игре понадобится скриптовый язык. Какой встроить? Разрешать ли много языков или ограничиться одним?

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

Если встраивать, то один (меньше ошибок). Если давать API для внешних плагинов, то делать открытым, чтобы можно было писать на чём угодно.

А как узнать о других вариантах, которые сходу не вспомнились?

https://en.wikipedia.org/wiki/List_of_programming_languages

monk ★★★★★ ()
Ответ на: комментарий от MKuznetsov

Если надо нарубить дров - топор берётся в сарае/санях/рюкзаке, но не в магазине.

Тут скорей задача типа: собираюсь в турпоход, топора нет — какой топор в магазине выбрать.

monk ★★★★★ ()
Ответ на: комментарий от callbackhell

у меня валится с ужасной ошибкой use keyword бла-бла-бла

Потому что в строке (define foo define) у второго define нет никакого значения (точнее, оно есть — вернуть ошибку).

В Racket

#lang racket
(require (prefix-in r: racket))
(define define 1)
(r:define foo define)
(write define)

вполне работает. Или можно сделать так

(define (foo) define)
(define define 1)
(write define)

Тоже работает. (foo) при выполнении вернёт 1.

monk ★★★★★ ()
Ответ на: комментарий от monk

Ну вы же понимаете, что этот фокус в общем случае не будет работать по определению. В рантайме нет никаких спецформ, вы можете их «вызвать» только через eval, чтобы заново все перекомпилировать. В Io setSlot - это обычный метод, в этом суть

callbackhell ()
Ответ на: комментарий от monk

Тут скорей задача типа: собираюсь в турпоход, топора нет — какой топор в магазине выбрать.

в таком варианте всё одно пофик какой топор выбирать - всё одно не по ноге, так по пальцам (не сказать ещё худший вариант) :-)

а со знанием дела (осознанием проблем) топор будет выбран уже потом - на основании своего опыта и личных эмоций обращения с первым.

так что - если есть проект/задача то он делается на том что знаешь. А в виде хобби-общего_развития смотрится чего на будущее.

Короче - если хочешь сделать гадость конкуренту, то убеди его юзать супер-подходящий но новый для него язык, или хотя-бы фреймворк...

MKuznetsov ★★★★★ ()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от callbackhell

Ну вы же понимаете, что этот фокус в общем случае не будет работать по определению.

Как раз в общем случае и работает. Спецформы отличаются от обычных макросов только тем, что для них expand возвращает самих себя. Никаких других отличий нет.

В рантайме нет никаких спецформ, вы можете их «вызвать» только через eval, чтобы заново все перекомпилировать

При чём тут рантайм? define — макрос. Существенно ничем не отличается от любого другого макроса, определяемого через define-syntax. Так как это макрос, то выполняется во время компиляции, а не в рантайме.

monk ★★★★★ ()
Ответ на: комментарий от MKuznetsov

Короче - если хочешь сделать гадость конкуренту, то убеди его юзать супер-подходящий но новый для него язык, или хотя-бы фреймворк...

Не скажи. Я свой первый не учебный проект делал на том, что знаю. Это был складской учёт в магазине компьютерных комплектующих (нужен был также учёт совместимости запчастей). А знал я Turbo Pascal. Через 4 месяца разработки я всё-таки выучил 1С 7.7, после этого через неделю паскалевский вариант выкинул, так как на 1С уже наваял гораздо больше функциональности.

monk ★★★★★ ()
Ответ на: комментарий от callbackhell

Что по-твоему statments, и чем они отличаются от спецформ?

Тем, что не возвращают значения. if в лиспе возвращает значение, хотя и является специальной формой.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

Да, наверное ты прав. Что не отменяет того, что и то и другое — говно.

callbackhell ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.