Это хорошая идея для меня, чтобы выучить Python до C или другой язык компилятора?
Сейчас я прохожу MIT с курсом компьютерных наук через OpenCourseWare. В рамках этого курса я изучаю язык Python.
Я много чего прочитал о преимуществах изучения C. Прежде чем углубляться в Python, я задаюсь вопросом, не помешает ли мне или мне поможет изучение Python в первую очередь.
Как вы думаете, я буду развивать какие-либо вредные привычки или что-то подобное от Python?
РЕДАКТИРОВАТЬ: Изменено на вики сообщества, из-за субъективной природы вопроса.
Я ценю все отличные ответы на мой первый вопрос SO. Я на самом деле очень поражен искренностью ответов / комментариев. Спасибо большое всем!
13 ответов
Говоря о 37-летней работе в Боге, я знаю, сколько языков, я могу вам сказать, что работа в Python позволяет вам почти полностью сосредоточиться на правильном алгоритме и не беспокоиться о деталях. Я написал, вероятно, 300-400000 строк C в моей жизни, и единственный способ, которым это было сносно, - это создать свою собственную ОО-среду.
C имеет свои применения, но в наши дни они, как правило, либо: а) позволяют вам приблизиться к части аппаратного обеспечения, либо б) работают с действительно узкой петлей. Если вам это нужно, посмотрите на такой инструмент, как SWIG или SIP, чтобы интегрировать ваш C в ваш Python.
По историческим причинам C был первым языком, который изучали многие программисты, в частности, языки предыдущего поколения. Тем не менее, многие из них (в том числе в старшем поколении) сначала изучали один или несколько других языков, обычно с более высоким уровнем абстракции (Basic, LISP, Pascal и многие другие) до изучения C.
Я был последним (то есть C не был моим "родным" языком, хотя я освоил ассемблер очень рано), и я вполне убежден во многих преимуществах, связанных с серьезным "туром" по языку C хотя с практической точки зрения многие из нас никогда не запрограммируют много каких-либо последствий на этом языке. Тем не менее, я не вижу никаких веских причин для того, чтобы сделать C вашим первым языком, или каких-либо предположений, что каким-то образом овладение Python (или Prolog, или...) каким-то образом ослабит ваши программистские способности в течение следующего десятилетия...
Так что мой совет: наслаждайтесь Python, примите это!
Когда вы почувствуете программирование, обязательно обратите внимание на C. Это особенно актуально в учебной программе, которая включает в себя написание компилятора и / или операционные системы, и, как уже было сказано, актуально во многих других отношениях. Вы увидите это, за исключением возможных "поверхностных"/ синтаксических ошибок (это происходит постоянно, по крайней мере, со мной, когда я изучаю новый язык или переключаюсь на мой старый, после того, как я подвергся чему-то другому для while), у вас не должно быть проблем с C, по крайней мере, проблем, связанных с изучением других языков.
Я не опытный программист, но, насколько я понимаю, я понимаю, что Python - очень простой и мощный язык, который позволяет вам делать все, что вам нужно.
С C вы получаете больше контроля над тем, что происходит, и это также означает, что вы должны написать все эти детали самостоятельно, в то время как в Python кто-то сделал это для вас, и у вас есть опции, которые работают почти во всех различных случаях.
Поскольку C более низкого уровня (ближе к тому, как на самом деле работает машина), он компилируется в машинный код ближе к тому, что хотят процессоры, в то время как Python, будучи языком более высокого уровня, не будет таким быстрым.
Я думаю, что боль при переходе от Python к C будет больше похожа на "Зачем мне все это делать? В Python я бы сделал одну строчку!"
Я могу только предложить, что изучение C заставит вас больше ценить Python и другие динамически типизированные языки. Я часто говорю то же самое всем, кто владеет PHP. Создание обоих поцарапало несколько серьезных зудов. И нет, это не похоже на "когда я был в твоем возрасте, я шел 300 миль по снегу до школы".
Возможность присвоить значение переменной и сделать так, чтобы переменная просто "настраивалась", чтобы хранить то, что вы передаете, является удивительным достижением для любого, кто потратил много времени на работу с C на нескольких архитектурах.
Кроме того, написание многопоточного сервиса некоторого вида на C заставит вас по- настоящему оценить, насколько действительно переносим Python.
Есть и другие веские причины: мощь, "приближение к металлу", понимание управления памятью, изучение компиляторов и оптимизации. Тем не менее, я подозреваю, что первое, что поразит вас, это то, насколько простыми являются языки высокого уровня.
Отказ от ответственности: я в основном использую C.
Основная проблема с изучением Python в первую очередь заключается в том, что любой другой язык, который вы пытаетесь выучить после этого, вероятно, пострадает от неизбежного сравнения. Однако бывают случаи, когда вы должны использовать другой инструмент, потому что у вас нет другого выбора. Примеры таких ситуаций могут включать:
- очень быстрое выполнение (SWIG, Cython, psyco, pypy, unladen-ласточка и т. д.)
- платформы, на которых нет среды выполнения Python (но это редко)
- спрос на высокий многоядерный параллелизм (разные виртуальные машины Python обычно могут справиться с этим)
Вероятно, лучше всего подходить к каждому инструменту с позиции необходимости, а не с точки зрения благоразумия; другими словами, изучайте C только тогда, когда это требуется из-за конкретных ситуационных требований.
Хороший вопрос! Всегда помните, что ваши навыки программирования никогда не должны зависеть от языка. Хотя C - идеальный язык для изучения, когда дело доходит до информатики. У вас есть 4 уровня, когда дело доходит до программирования, и обычно каждый университетский курс предлагает следующие предметы:
- Процедурное программирование
- Объектно-ориентированное программирование
- Программирование со структурами данных
- Шаблоны проектирования**
Вы должны идти шаг за шагом. Освойте все эти 4 уровня. Затем в конце дня вы должны решить, что вы действительно хотите делать, и тогда у вас будет достаточно знаний о том, какие функции на каком языке вы должны использовать для какой проблемы. C является языком многих операционных систем, включая Unix, Linux и Windows. До сих пор ни один язык не мог сопоставить силу указателей С. Python - хороший язык и имеет свои преимущества. Один важный совет, который я могу дать на этом этапе, - это "синтаксис". Сначала вы должны освоить язык C и получить немного практических знаний о Python. Как только вы освоитесь с C, вам будет гораздо легче программировать на C++, C#, Java и PHP. Но если вы начнете с Python сразу, вы можете не чувствовать себя комфортно с языками на основе C_syntax. То же самое касается начинающих, которые увлекаются программированием и начинают с Visual Basic. Также следите за тенденциями в отрасли и событиями в программировании. Но придерживайтесь того, чему вас учат курсы старшекурсников.
Я тоже студент CS, и работаю программистом, так что я знаю, через что ты проходишь. Надеюсь, мой совет поможет вам.
Вы должны начать где-нибудь, и Python - хороший выбор для начинающего программиста: вам не нужно использовать компилятор (-> простой в использовании), имеет богатую библиотеку (-> вы можете многого достичь) и является объектно-ориентированным (основной поток в наши дни). Таким образом, можно избежать разочарования в этом отношении. Но всегда имейте в виду, что есть много других языков, и что вы должны изучать их тоже. Если вы хотите стать программистом и зарабатывать деньги, вам нужно (как минимум) подобрать C++, Java или C# после Python.
Поскольку вопрос сформулирован: Нет. Не учите C сначала. Выучи Python.
В конце концов вам придется изучать C, когда вам нужно взломать встроенные системы, последовательности загрузки, код ядра Linux и т. Д. Вам нужно будет узнать об указателях и о том, что ваша система будет зависать и сгорать, если вы не получите их правильно с первого раза. Вам нужно будет вернуть использованную память самостоятельно. Обычно это ночной кошмар, и он не способствует радости программирования, так как эти вещи мешают вам и заставляют вас проводить бесконечное время в отладчике.
В конце концов, во встроенных системах вы выучите некоторый язык ассемблера, а затем поймете, что C - это просто оболочка для большинства возможностей сборки / процессора в архитектуре чипа. Указатели - это режим адресации, который поддерживается транзисторами в глубине.
Все современные языки делают вас лучше и быстрее программиста, и они покончили с этим. Вы действительно не научились пользоваться пишущей машинкой в наши дни, если только вы не отправляетесь в место без электричества, не так ли? C просто для очень специальных приложений.
Я не думаю, что вы каким-то образом ошибетесь, изучая Python. Изучение нескольких языков программирования дает много преимуществ, и сам Python является интересным способом изучения этого. Например, если у вас есть некоторые проблемы с производительностью Python, вы можете изучить написание некоторых частей вашего кода на C (или pyrex/cython или Fortran и т. Д.), А затем упаковать его и сделать его пригодным для использования в вашем коде Python.
Лично мне нравится писать много кода вручную, когда я что-то изучаю. Я думаю, что это хорошая практика, и написание алгоритмов (на бумаге) на Python во много раз удобнее, чем написание их на C или C++ (не всегда). Это в значительной степени по причинам, о которых говорил Питер: на детали затрачивается меньше усилий, поэтому вы можете потратить их на другие концептуальные вещи.
Я все еще очень увлекаюсь, но одна вещь, с которой я сталкиваюсь, это то, что язык программирования - это инструмент, но часто это уникальный инструмент. Есть навыки программирования, которые должны быть перенесены с одного языка на другой, и это здорово. Но способность "впитывать" язык также очень важна в практическом смысле. По этой причине я чувствую, что любой язык, который вы решите изучать первым, не имеет особого значения, потому что важно развивать умение двигаться дальше и учиться, чтобы в любом случае эффективно выразить себя на другом языке.
У Python есть непосредственность, которая облегчает изучение. Python для простоты, C (и родственные языки) для власти.
В мире прямо сейчас существует определенная степень питонского "фанбойзма". Все больше и больше программистов (некоторые из них очень уважаемые) считают, что Python является ответом на все их обиды. Увидев, насколько "крутым" является python, они начинают в евангелизации языка в психотической степени отрицать очевидную истину: python не предназначен для всего / всех.
Если вы пойдете по пути Python, вы, вероятно, разработаете дополнительный рефлекс: "давайте посмотрим на библиотеки, чтобы увидеть, если это еще не сделано.", И через некоторое время, когда придет время, и вам придется изучать C, Вы отчаянно скажете: "Я не могу поверить, что мне нужно написать собственный дикт, используя несколько указателей void* для хранения моих данных! Что в любом случае с этим языком C?!"
Будучи обученным C/C++ как моему первому языку программирования в 1996 году с помощью Borlands TurboC++ 1.0 (синий экран и желтый текст), я могу серьезно порекомендовать изучить что-то (в данном случае Python), кроме C. При этом C/C++ поможет вам, если вы когда-нибудь захотите узнать больше о взаимодействии с оборудованием (разработка встроенных систем, написание драйверов и т. д.)
Согласно подкасту Hanselminutes, компилятор VB.NET написан на C, поэтому он все еще используется.
Большинство концепций программирования не зависят от языка; Вы гораздо лучше справляетесь с тем, что начинаете с языка, который легко изучать и применять, чтобы вы могли сосредоточиться на основах. Этот язык не был бы C.
С делает ужасное обучение языку; оно никогда не предназначалось для использования как таковое. Он был разработан для опытных программистов, которые хотели большей гибкости и контроля, чем другие языки времени (начало 70-х). Вы тратите больше времени на изучение причуд С, чем на настоящее программирование.