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

Сейчас я перехожу через введение MIT в курс компьютерных наук через OpenCourseWare. В рамках этого курса я изучаю язык Python.

Я много читал о преимуществах обучения C. Прежде чем я углубился в Python, я задаюсь вопросом, будет ли мне препятствовать или помогать, изучая сначала Python.

Считаете ли вы, что я буду развивать любые вредные привычки или что-то подобное с Python?

EDIT: изменено в Community Wiki из-за субъективной природы вопроса.

Я ценю все великие ответы на мой первый вопрос SO. Я на самом деле очень взволнован искренностью ответов/комментариев. Спасибо, много всем!

Ответ 1

Говоря о 37-летнем опыте работы с богом, я знаю, сколько языков, я могу сказать вам, что работа на Python позволяет сосредоточиться почти полностью на правильном алгоритме и не беспокоиться о деталях. Я написал, вероятно, 300-400 000 строк C в моей жизни, и единственный способ справиться с этим был в основном для создания моей собственной среды OO.

C имеет свои применения, но в наши дни они, как правило, либо: a) позволяют вам приблизиться к части оборудования, или б) обрабатывать действительно жесткий цикл. Если вам это нужно, посмотрите на инструмент, такой как SWIG или SIP, чтобы интегрировать ваш C в ваш Python.

Ответ 2

По историческим причинам C был первым языком, о котором узнали многие программисты, в частности, из предыдущего поколения. Однако многие из них (в том числе в этом старшем поколении) сначала изучили один или несколько других языков, обычно с более высоким уровнем абстракции (Basic, LISP, Pascal, чтобы назвать несколько), прежде чем изучать C.

Я был последним (т.е. C не был моим "родным" языком, хотя я очень рано освоил сборку), и я вполне убежден в многих преимуществах, связанных с серьезным "тур" на язык C, хотя, по сути, многие из нас никогда не будут программировать большую часть каких-либо последствий на этом языке. Это говорит: Я не вижу веских оснований для того, чтобы C был вашим первым языком или каким-либо подозрением, что каким-то образом освоить Python (или Prolog или...) каким-то образом повлияет на некоторые возможности программирования на следующее десятилетие...

Итак, мой совет: наслаждайтесь Python, заходите!! Когда вы получаете представление о программировании, сделайте шаг, чтобы изучить C в какой-то момент. Это особенно актуально в учебной программе, которая включает в себя компилятор и/или операционные системы, и, как сказано, актуальна многими другими способами. Вы увидите это иначе, чем для возможных "поверхностных" /синтаксических ошибок (они происходят все время, по крайней мере, для меня, когда вы изучаете новый язык или возвращаетесь к старому моему языку, после того, как подвергаетесь чему-то еще для в то время как), у вас не должно быть проблем с C, по крайней мере, никаких проблем, связанных с обучением другим языкам.

Ответ 3

Я не эксперт-программист, но из моего понимания и использования Python - это очень простой и мощный язык, который позволяет вам делать все, что вам нужно.

С помощью C вы получаете больше контроля над тем, что происходит, и это также означает, что вы должны сами писать все эти детали, а в Python кто-то сделал это для вас, и у вас есть варианты, которые работают практически для всех разных случаев.

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

Я думаю, что переход от Python к C будет больше похож на "Зачем мне все это делать? В python я бы сделал это в одной строке!"

Ответ 4

Я могу только предложить, что обучение C сделает вас более ценным для Python и других языков с динамическим вводом. Я часто говорю то же самое всем, кто владеет PHP. Создание обоих поцарапало некоторые серьезные зуды. И нет, это не похоже на то, "когда я был в твоем возрасте, я ходил по снегу в школу на 300 миль".

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

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

Есть и другие веские причины, сила, "ближе к металлу", понимание управления памятью и изучение компиляторов и оптимизация. Тем не менее, я подозреваю, первое, что поразит вас, - это то, насколько на самом деле являются кусочки более высокого уровня.

Отказ от ответственности: в основном я использую C.

Ответ 5

Вам нужно что-то начать, а Python - хороший выбор для начинающего программиста: вам не нужно использовать компилятор (- > простой в использовании), имеет богатую библиотеку (- > вы можете выполнить много), и объектно-ориентированный (основной поток в эти дни). Поэтому в этом отношении минимизируется недопустимое разочарование. Но всегда имейте в виду, что есть много других языков, и вы также должны их изучать. Если вы хотите стать программистом и зарабатывать деньги, вам нужно (по крайней мере) выбрать С++, Java или С# после Python.

Ответ 6

Хороший вопрос! Всегда помните, что ваши навыки программирования никогда не должны зависеть от языка. Хотя, C - идеальный язык для изучения, когда дело доходит до Computer Science. У вас есть 4 уровня, когда речь заходит о программировании, и обычно каждый университетский курс обучения предлагает следующие предметы:

  • Процедурное программирование
  • Объектно-ориентированное программирование
  • Программирование с структурами данных
  • Шаблоны проектирования **

Вам нужно идти шаг за шагом. Владейте всеми этими 4 уровнями. Затем в конце дня вы должны решить, что вы действительно хотите сделать, и тогда у вас будет достаточно знаний о том, какие функции на каком языке вы должны использовать для какой проблемы. C - это язык многих операционных систем, включая Unix, Linux и Windows. Сила указателей до сих пор не может быть сопоставлена ​​никаким языком. Python - хороший язык и имеет свои преимущества. Один важный совет, который я могу дать на этом этапе, - это "синтаксис". Первоначально вы должны овладеть языком C и получить немного практических знаний о Python. Как только вам станет удобно с C, вам будет проще программировать на С++, С#, Java и PHP. Но если вы начнете с Python сразу, то вам может не понравиться язык на языке C_syntax. Это касается новичков, у которых есть страсть к программированию и запуск с Visual Basic. Также следите за тенденциями в отрасли и разработками в области программирования. Но придерживайтесь того, чему учат вас преподаватели.

Я тоже студент-студент CS, одновременно работаю программистом, поэтому знаю, что вы переживаете. Надеюсь, мой совет поможет вам.

Ответ 7

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

  • очень быстрое выполнение (SWIG, Cython, psyco, pypy, без порога и т.д.)
  • на которых нет времени выполнения python (но это редко)
  • спрос на высокий многоядерный concurrency (разные виртуальные машины python обычно могут иметь дело с этим)

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

Ответ 8

У Python есть непосредственность, которая облегчает изучение. Python для удобства, C (и родственные языки) для мощности.

Ответ 9

Как говорится в вопросе: Нет. Не изучайте C сначала. Изучите Python.

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

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

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

Ответ 10

Я не думаю, что вы каким-то образом испортитесь, сначала изучив Python. Есть много преимуществ для изучения нескольких языков программирования, и сам Python - это интересный способ изучить это. Например, если у вас есть проблемы с производительностью с Python, вы можете изучить возможность написания некоторых частей своего кода в C (или pyrex/cython или Fortran и т.д.), А затем упаковать его и сделать его пригодным для использования в вашем коде Python.

Лично мне нравится писать много кода вручную, когда я изучаю вещи. Я думаю, что это хорошая практика, и писать алгоритмы (на бумаге) в Python в много раз удобнее, чем писать их на C или С++ (не всегда). Это в значительной степени объясняет причины, о которых говорил Питер, на детали больше тратится меньше усилий, поэтому вы можете потратить это на другие концептуальные вещи.

Я все еще очень любитель, но одна вещь, с которой я сталкиваюсь, заключается в том, что язык программирования - это инструмент, но он часто является уникальным инструментом. Есть навыки программирования, которые предназначены для перевода с одного языка на другой, и это здорово. Но возможность "забегания" языка также очень важна, в практическом смысле. По этой причине я чувствую, что любой язык, который вы решаете вначале, не имеет значения, потому что важно развивать умение двигаться дальше и учиться эффективно выражать себя на другом языке.

Ответ 11

В мире прямо сейчас существует определенная степень python "fanboysm". Все больше программистов (некоторые из них очень респектабельные) считают, что питон является ответом на все их обиды. Увидев, как "круто" является питоном, они начинают евангелизировать язык в психотической степени, отрицая очевидную истину: python не предназначен для всего/каждого.

Если вы будете следовать пути python, вы, вероятно, разработаете дополнительный рефлекс: "загляните в библиотеки, чтобы увидеть, если это еще не сделано", и через некоторое время, когда придет время, и вам придется учите C, вы отчаянно говорите: "Не могу поверить, что мне нужно написать свой собственный dict, используя некоторые указатели void * для хранения моих данных! Что с этим языком C?"

Ответ 12

Преподавал C/С++ в качестве моего первого языка программирования в 1996 году через Borlands TurboС++ 1.0 (синий экран и желтый текст). Я могу серьезно порекомендовать изучить что-то (в данном случае Python), кроме C. Это говорит о том, что C/С++ поможет вы, если хотите узнать больше об аппаратном взаимодействии (встроенная разработка, запись драйверов и т.д.)

В соответствии с подкастом Hanselminutes компилятор VB.NET написан на C, поэтому он все еще использует его.

Ответ 13

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

C делает ужасный язык обучения; он никогда не предназначался для использования как таковой. Он был разработан для опытных программистов, которые хотели большей гибкости и контроля, чем другие языки того времени (в начале 70-х). Вы тратите больше времени на изучение C-quirks, чем на фактическое программирование.