@NewbieBacknd
React, TS, expessjs, mongodb

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

Добрый день, Хабр!
Есть желание изучить основные алгоритмы и принципы их реализации.
Пишу на js, знаю основы python, в основных учебниках по алгоритмам используется(с которыми я ознакомился) с#, с++.
Вопрос в чем, можно ли полноценно писать на языках, на которых я уже имею опыт? Если нет, то прошу посоветовать предпочтительный язык.
  • Вопрос задан
  • 354 просмотра
Решения вопроса 1
GavriKos
@GavriKos
Можно. И питон и JS в этом плане норм. Нюанс разве что в том что в том же питоне будет много синтаксического сахара - но вы его можете игнорировать.

C# в целом можно выучить быстренько для ваших потребностей. А вот плюсы оставьте в покое.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
mayton2019
@mayton2019
Bigdata Engineer
Алгоритмы и структуры данных тесно связаны с зубо-дробительными бенчмарками. Как-то отсортировать терабайтный текстовый файл или найти два одинаковых числа в файле из чисел тоже большого размера.
Иногда такие задачи задают на собеседованиях Google и Microsoft.

И если вы будете изучать эти алгоритмы на js, то вы не сможете продемонстрировать эффективность этих
алгоритмов. Python машина - просто медленная. У нее конечно есть надстройки например над векторной
алгеброй которые позволяют быстро считать рутину вроде циклов над векторами. Но является ли это
программированием Python - чорт его знает. Как по мне - нет. Тут - другая экспертиза нужна.

В структурах данных важно также оценивать память "на глазок".

В этом смысла кодер С++ имеет много преимуществ т.к. он видит и понимает как распределяется память
в узле бинарного дерева например (два указателя по 64 бита + какой-то размер для ключа который тоже
можно посчитать). Какой аллокатор брать? Встроенный в язык new или нужно делать собственный.
Такой расчет важен для оценки например - применима ли структура данных вообще?
Какой толк от дерева если оно не влезет в оперативную память? А падение памяти в swap - тут-же замедляет
алгоритм в разы.

JS и Python не предоставляют тонкого контроля над памятью. У них своя модель построенная для комфорта
самого процесса разработки а вовсе не для струткуры данных.
Ответ написан
Комментировать
Adamos
@Adamos
Для изучения основ - любой с С-подобным синтаксисом, эти оба годятся.
А вот если захочется более глубокого понимания - стоит опуститься к С/С++, где вынужденная возня с данными на уровне байт в памяти даст твердую основу насчет реальной оптимальности того или иного алгоритма.
На высокоуровневом языке слишком много прослоек, чтобы прочувствовать, над чем на самом деле пыхтит процессор ;)
Ответ написан
Комментировать
@rPman
Язык программирования выбирают под наличие инструментов, написанных для этого языка, для решения поставленной задачи.

Только в этой последовательности и не наоборот.

Очень не эффективно изучать абстрактные технологии, ведь попав на задачу, ты точно так же будешь не понимать что как зачем и почему.

Если говорить про структуры данных в смысле - сетевые пакеты, сериализация данных на диске и хранение переменных в памяти, то изучать лучше прямо с низов, с С, затем С++ std, который основательно поломает мозг, но без основ си это будет сложнее.

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

Если же тебе это не нужно (а бывает не нужно), то и не заморачивайся
Ответ написан
Комментировать
pauline
@pauline
программист js react
Пробую на js и уже тупик при работе с большими числами. Видимо C++ решает
Ответ написан
Комментировать
@pharo
Вопрос интересный т.к. каждый язык имеет как свои "сильные" стороны так и "слабые' исходя из дизайна заложенного в язык (синтаксис и семантика) и транслируемого в код для исполнения
и, при этом, сам по себе алгоритм не существует в вакууме для решения какой то задачи, а переплетается с инфраструктурой используемого языка.
К, тому же и парадигмы языков для реализации алгоритма могут существенно отличаться для реализации алгоритма. К примеру есть и такие группы языков как Пролог, Лисп, Форт, Смаллталк ...
и на них реализация алгоритма будет отличаться от С/С++, Pascal, Baisic, Java, JS ...

P.S. Для иллюстрации этого достаточно посмотреть решения одних и тех же задач на разных языках с ресурса https://rosettacode.org
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы