@ork821

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

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

Также буду рад ссылкам на рекомендуемые ресурсы для изучения.
  • Вопрос задан
  • 487 просмотров
Пригласить эксперта
Ответы на вопрос 6
@res2001
Developer, ex-admin
Английский
Ответ написан
Комментировать
longclaps
@longclaps
хотелось бы понимать это заранее.

В математике нет царских путей. И не только в математике.
Ответ написан
samodum
@samodum
Какой вопрос - такой и ответ
Надо не языки учить, а основы программирования - алгоритмы, структуры данных...
Ответ написан
dollar
@dollar
Делай добро и бросай его в воду.
Скорость перебора массива зависит от реализации этого перебора в самом языке. Снижение скорости может быть обусловлено какими-то удобствами. К примеру, в Lua (скриптовой язык) перебор массива очень медленный, потому что там каждый массив - это хеш-таблица со всеми вытекающими. То есть это не просто поиск элемента по индексу в памяти относительно начала массива в памяти, это еще и хеширование каждого ключа, и поиск по хешу, а если есть метатаблица (аналог прототипа в JS), то еще дополнительные проверки на перегрузку доступа к элементу.

Возможно, вам стоит подучить архитектуру компьютера, в частности процессор x86 и память, и как они связаны. Наиболее близкий язык, чтобы во всё это окунуться - ассемблер, очевидно. Если интересует именно скорость языка (которая, к слову, для многих задач не критична), то нужно смотреть высокоскоростные компилируемые языки - С, С++, Rust, D, Go, а также близкие к ним по скорости через VM - C#, Java (Kotlin). Узкоспециализированные типа Swift можно не рассматривать, если они вам не нужны для решения задач. Но даже в скриптовых языках (JavaScript, PHP) сейчас очень хорошо со скоростью. Посмотрите также, что такое JIT, тоже удивитесь, если не слышали ранее.

В общем, отталкиваться нужно не от универсальности языка по скорости, а от решаемой задачи. Потому что у языков есть разные плюсы и минусы, и адекватная область применения. Некоторые проигрывают по скорости, но имеют другие преимущества - удобство, документация, надежность, скорость компиляции, комьюнити, средства разработки и отладки, популярность, а иногда даже вообще возможность использовать только этот язык в конкретной сфере. Например, в браузере, как ни крути, а придется иметь делать с JS (без извращений), а какие-нибудь шейдеры вообще на отдельных языках пишут, про которые мало говорят.
Ответ написан
@Andrey38287512
Лучше всего Python в начале, что бы не заморачиваться на особенности языка как в C++ и java, а думать только над задачей не над тем как её написать!
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
Допустим я хочу понять, почему один метод перебора массива эффективнее другого.

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

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

Самый быстрый - это уровень железа, всякие языки описания аппаратуры для ПЛИС, ассемблеры и т.д. Без должной подготовки вы даже сложно использовать не сможете.
За скоростью стоит гнаться только в случае, когда это критичная задача для бизнеса, более того оптимизация за счет алгоритма иногда не имеет смысла.
Пример: у вас небольшой сайтец, на каком-нить хостинге за полтора бакса в месяц. Под Новый год сайтец не справляется. Правильный вариант в такой ситуации - это переехать на хостинг за два-три бакса в месяц, а потом в случае чего вернуться обратно.

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

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

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

Войдите, чтобы написать ответ

Похожие вопросы