Нужно ли изучать алгоритмы, чтобы быть настоящим программистом? [закрыто]

21

Я программист PHP, и до сих пор мне не нужно было изучать алгоритмы ...

Теперь я начинаю изучать Python (настоящий язык программирования), потому что мне нужно использовать matplotlib. Имеет ли смысл начинать с чтения книги по алгоритму Python, а затем изучать matplotlib и numpy или мне следует перейти к matplotlib и numpy?

С уважением,

Андре
источник
2
Если вы не выучите алгоритмы и не поймете, что наиболее подходит для данной задачи, вы получите ответы, подобные тем, что приведены по этому вопросу: stackoverflow.com/questions/5498865
kdgregory
1
Вы, вероятно, уже реализовали несколько алгоритмов, фактически не зная их имен или теорию, стоящую за ними. Трудно поверить, что кто-то вообще мог бы заняться каким-либо полезным программированием без реализации некоторых алгоритмов.
tdammers
2
Алгоритм - это просто здравый смысл того, как делать вещи оптимальным образом . При программировании вам необходимо использовать минимальные ресурсы и обеспечивать производительность, следовательно, вы используете это все время. Кстати, что это значит Python (настоящий язык программирования) ??? PHP так же хорош, как и все остальное. Просто это, скорее, язык веб-сценариев, он лучший в бизнесе на долгое время.
Панкадж Упадхьяй

Ответы:

35

Абсолютно. Не зная алгоритмов, как еще вы поймете, как программа делает то, что делает?

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

Эндрю Арнольд
источник
Хотя я согласен, сколько нужно знать о масштабах передачи вступления к алгоритмам в местном колледже во второй раз, чтобы стать Дональдом Кнутом?
Работа
Старая добрая запись Big Ohno ...
1
Я согласен с важностью знания о сложности алгоритма («большая буква О»). Однако я категорически не согласен с «абсолютно» ответом на вопрос «необходимо ли изучать алгоритмы, чтобы быть настоящим программистом»; на самом деле, хорошее изучение Python гораздо полезнее, чем умение сортировать список (поскольку Python сортирует списки для вас) или как Python обрабатывает словари (какой программист Python когда-либо нуждался в реализации механизма хеширования?) и т. д. Исторически сложилось так, что люди выученные алгоритмы, потому что они не предоставляют язык из коробки; современная эра отличается.
Эрик О Лебигот
17

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

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

Касабланка
источник
2
+1 за такой «современный» комментарий. Алгоритмы обучения и преподавания должны быть зарезервированы для людей, которым действительно необходимо их реализовать.
Эрик О Лебигот
6

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

jmq
источник
3

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

Преимущество алгоритмов в том, что они не зависят от языка программирования, поэтому изучите теорию один раз, и вы сможете реализовать ее на любом языке. Вот хороший веб-сайт, с которого я начинаю учиться: www.ambesty.com Они используют Java, но он поставляется с примером кода для изучения. Они предлагают простые алгоритмы ADT и сортировки для более сложных, таких как алгоритмы сжатия данных. Очень интересно читать. Удачи

ailan
источник
1

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

Прочитайте, что вам нужно сделать, чтобы интегрировать Matplotlib , numpy и Python. А потом, если вы застряли, продолжайте погружаться глубже. Я рекомендую этот заказ, потому что

  • это меньше времени
  • вы, вероятно , не будете применять каждый алгоритм, о котором вы читали
JK
источник
1

Если вы разрабатываете бизнес-приложения (только), начните изучать только основы, такие как списки, очереди, сортировку, поиск по строкам и т. Д., Чтобы вы могли изучить терминологию, как влияет и измеряется производительность, и так далее. Лучшее использование вашего времени будет сосредоточено на новых технологиях, шаблонах OO, эффективном проектировании баз данных, приложениях. методологии развития и тому подобное!

Без шансов
источник
1

Хорошо - я знаю, что это не совсем то, что вы имели в виду, но вы уже знаете (как это сделать) алгоритмы. В зависимости от вашего определения вы можете взять каждую программу в качестве примера для алгоритма.

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

Карстен
источник
0

Сначала изучите python, затем, если вам так хочется, вы можете изучить алгоритмы; Поскольку алгоритмы не являются специфичными для Python - они являются общими для всех языков.

eggie5
источник
0

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

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

Никлас Х
источник