Моим первым языком программирования был PHP ( вздох ). После этого я начал работать с JavaScript. Я недавно сделал работу в C #.
Я никогда не смотрел на языки низкого или среднего уровня, такие как C.
Общее согласие в сообществе программистов в целом заключается в том, что «программист, который, честно говоря, не изучил что-то вроде C, просто не может работать с такими понятиями программирования, как указатели, типы данных, передача значений по ссылке и т. Д.»
Я не согласен. Я утверждаю, что:
- Поскольку языки высокого уровня легкодоступны, все больше «непрограммистов» погружаются и создают беспорядок
- Чтобы действительно что-то сделать на языке высокого уровня, нужно понимать те же самые сходные понятия, о которых проповедует большинство сторонников «сначала учись на низком уровне».
Некоторые люди должны знать C; у этих людей есть работа, которая требует от них писать код от низкого до среднего уровня. Я уверен, что C - это здорово, и я уверен, что есть несколько плохих программистов, которые знают C.
Почему уклон? Как хороший, честный, голодный программист, если бы мне пришлось изучать C (по какой-то непредвиденной причине), я бы изучал C. Учитывая множество языков, разве хорошие программисты не должны сосредоточиться на изучении того, что нас продвигает? Разве мы не должны узнать, что нас интересует? Разве мы не должны использовать наше ограниченное время для продвижения вперед ? Почему некоторые программисты не согласны с этим?
Я считаю, что стремление к совершенству в том, что вы делаете, является фундаментальной детерминированной чертой между хорошими программистами и плохими.
Есть ли у кого-нибудь реальные примеры того, как что-то написанное на языке высокого уровня - скажем, Java, Pascal, PHP или JavaScript - действительно извлекло выгоду из предшествующего знания C? Примеры будут наиболее цениться.
источник
Ответы:
Преимущество знания C состоит в том, что у вас есть очень хорошее представление о том, как работает компьютер. Не только как ваша модель программирования работает, но и как память распределяется и тому подобное.
Единственный уровень ниже C - это сборка, на которой говорит конкретный процессор.
(Я бы добавил, что знание C также позволяет вам оценить, насколько меньше работы нужно выполнять на языке более высокого уровня. И, надеюсь, оценить стоимость работы с этим языком более высокого уровня.)
источник
Я не думаю, что какой-либо из ответов здесь действительно является тем, что искал ОП, поэтому я собираюсь добавить свое собственное мнение.
Смотри, я не извиняюсь, сноб C Мое отношение , что если вы не знаете C, а затем в какой - то мере , вы не действительно знаете , что вы делаете в качестве программиста. Итак, я думаю, что я из тех «предвзятых» людей, о которых вы здесь говорите.
Однако на практике то, знаете ли вы на самом деле , что делаете программистом, не обязательно мешает вам разрабатывать действительно классное, полезное программное обеспечение с использованием инструментов высокого уровня. Я имею в виду, что создатель Stack Overflow Джефф Этвуд, по-видимому, даже не знает C, и все же я бы сказал, что Stack Overflow - чертовски хорошее веб-приложение.
Решите ли вы изучать C (или C ++, или сборку), зависит от того, каким программистом вы хотите быть. Если вы просто хотите разрабатывать классные веб-приложения или бизнес-приложения, это нормально - нет необходимости изучать C. Но если вы хотите действительно преуспеть в том, что делаете, - если вы хотите работать над действительно крутыми проектами, которые подталкивают вас к искусство, тогда вам действительно нужно относиться к себе как к программисту, чтобы действительно понять, как работают компьютеры. Поскольку C по сути является языком операционной системы, а также языком, который поддерживает практически все остальное (от ядра Linux до большинства виртуальных машин Java, до интерпретаторов Python и Ruby, баз данных SQL, веб-серверов и практически всех драйверов устройств) глубокое понимание языка имеет большое значение.
Не говоря уже о том, что знание C (или C ++) открывает огромные возможности для участия в крупных проектах с открытым исходным кодом, которые затрагивают миллионы (или сотни миллионов) людей. Хотите поработать над улучшением интерпретатора Python или веб-браузера Chromium? Ну, вам нужно знать C для первого и C ++ для второго.
Вот почему сравнивать C с мертвыми естественными языками, такими как латынь, или устаревшими технологиями, такими как лошадь и карета, совершенно неверно. Большая часть нашей программной инфраструктуры 21-го века основана на коде C, поэтому C остается актуальным сегодня как никогда.
Итак, стоит ли изучать C на самом деле, зависит от того, чего вы хотите от своей карьеры программиста.
источник
Практическое практическое правило заключается в том, что вам необходимо понимать как минимум один уровень абстракции ниже уровня, на котором вы обычно работаете. Учтите, что ваш интерпретатор PHP или JavaScript может быть реализован на C или C ++. В конце концов вы столкнетесь с ошибкой в интерпретаторе или даже с ошибкой во время выполнения Си. Если вы не понимаете C, вы будете ограничены отправкой отчета об ошибке сопровождающему, надеясь, что он сможет воспроизвести его и позаботиться об этом, а затем переверните ваши пальцы. Если вы знаете C, вы можете сказать им точно, где проблема и в чем она.
Это также означает, что если вы работаете в C / C ++, вы должны по крайней мере иметь возможность читать ассемблер на вашей платформе.
Что касается изучения C, когда вам это нужно: я заметил, что большинство программистов могут изучать Perl / Python / Javascript по требованию, но ассемблер / C / Lisp, похоже, требует гораздо больше времени, поэтому стоит изучить хотя бы некоторые основы перед необходимостью возникает.
источник
Я не согласен , что вам нужно узнать C первым , но я верю , что вы должны научиться C в конце концов . Все абстракции утечки, и понимание C облегчает понимание того, что действительно происходит, когда вы используете какую-то причудливую абстракцию высокого уровня. Тем не менее, я также думаю, что все серьезные программисты должны в конечном итоге научиться хотя бы читать ассемблер по той же причине.
Изучение этих понятий низкого уровня дает удивительную способность рассуждать о вещах высокого уровня. Например, в C ++ и D аргументы по умолчанию для виртуальных функций определяются статическим типом (время компиляции) объекта, а не динамическим типом (время выполнения). Это не имеет смысла, если вы не понимаете, как работают vtables и соглашения о вызовах и почему было бы крайне сложно реализовать виртуальные функции противоположным образом.
источник
All abstractions are leaky
утверждение.Смещение является одним из статус-кво. В старые времена (1980-е и более ранние) C / C ++ был в значительной степени требованием для приложений производительности. Это изменилось, но старшие разработчики, как правило, исходят из этого прошлого и изучают вещи в этом контексте.
Для реального развития других языков будут использоваться - C # является популярным, как Java, в то время как PHP и Python являются популярными для внутренних проектов , и это всегда полезно иметь кого - то на руках, по крайней мере , базовые знания в этой области в случае , если вы выбираете открытый исходный проект PHP, скажем, для вашей системы отслеживания ошибок. Тем не менее, спецификации работы по-прежнему исходят из того стандартного шаблона, который был написан 25 лет назад.
источник
Как бы мне не хотелось размещать обязательный пост Джоэла в блоге, я согласен с ним здесь . C является языком программирования. Я не могу придумать ни одного языка высокого уровня, который не может каким-либо образом взаимодействовать с ним. Из-за этого C все еще является популярным выбором для системного программирования. Вы просто не можете взаимодействовать с некоторыми вещами уровня ОС без C.
Кроме того, что вы планируете делать, когда ваш язык высокого уровня недостаточно быстр? Умение писать на C особенно важно, когда вы используете высокоуровневый динамически типизированный язык, такой как Ruby, Python или PHP. Но даже программисты на Java и C # должны время от времени переходить на C.
источник
Какой отличный слаг-фестиваль! (Как якобы говорят: это личный бой или кто-нибудь может присоединиться?)
Я был профессором, и я обнаружил (после проб и ошибок), что было намного легче провести студентов через сложные концепции программирования, если бы они на базовом уровне понимали, что делает компьютер. Не во всех мельчайших деталях, но в основном принципе, например, что такое память, какие инструкции и т. Д. Что мне нравится в Си, так это то, что она близка к машине.
Это не значит, что другие учителя пришли в то же место. Они начали на языке высокого уровня (бейсик :-) и пошли дальше оттуда, без явных побочных эффектов.
Итак, Стивен, вы можете быть правы. Я бы так не думал, но раньше ошибался.
источник
Я думаю, это прогресс.
Двадцать лет назад общепринятым было то, что вам нужно было изучать ассемблер, чтобы понять, что вы получаете от языков высокого уровня, таких как C (вот почему мне пришлось посещать урок ассемблера в колледже с использованием VAX Macro; угадайте, насколько это полезно оказалось по окончании обучения).
Существует суеверие, что из-за того, что C трудновато для изучения и что он почти не предоставляет абстракций (указатели и байтовые потоки в значительной степени полезны), его изучение каким-то образом сделает вас лучшим программистом или даст вам более глубокое понимание того, как все работает на оборудовании. уровень.
Это не обязательно правда. Стандартный C не приближает вас к металлу ближе, чем любой другой 3GL (Pascal, Fortran и т. Д.). Некоторые реализации C могут предоставлять хуки, которые дают вам больший доступ к некоторым областям, но в целом голые указатели примерно так же близки, как и вы, что совсем не близко. Например, вы не можете напрямую получить доступ к регистрам или статусным словам.
В конце концов, все сводится к кодам операций и режимам адресации, поэтому, если вы действительно заинтересованы в том, как все работает на более низком уровне, вам лучше будет обучаться ассемблеру на C.
Само по себе изучение C не обязательно сделает вас лучшим программистом. Тем не менее, это определенно даст вам оценку для реальных типов строк и стандартизированных контейнерных библиотек.
источник
Язык - это инструмент. Если вам нужно только писать веб-страницы и тому подобное, то я уверен, что вы можете уйти без необходимости изучать C, точно так же, как если вы когда-либо только делаете пластиковые наборы моделей, вам нужен только острый нож и клей, гаечный ключ обычно не требуется.
Я пишу код для встраиваемых систем с сильно ограниченными ресурсами памяти (самое большое, что я сделал за последнее время - это 16 Кбайт, и это было ОГРОМНО). На этом рынке C или ассемблер - единственные варианты, и любой из пушистых языков высокого уровня просто не работает.
источник
По моему опыту, какое-то время C / C ++ был хорошим буфером, который отделял хороших программистов от VB6-кодеров. После пяти с лишним лет C / C ++ я получил работу в VB6. Я был поражен качеством (или его отсутствием) кодеров. Они мало интересовались внутренностями языка, дизайном или производительностью. К сожалению, когда компания перешла на .Net, кодеры C / C ++ и .Net использовали одни и те же инструменты. Кодеры VB были еще хуже кодеров VB.Net. Ситуация ухудшилась, когда вся разработка пошла на ASP.NET. Внезапно любой, кто мог перетащить элемент управления, стал программистом.
На рынке труда, однако, было не так много разграничить хардкорных кодеров (например, C / C ++) и туристов.
Таким образом, наличие C или C ++ в вашем резюме может помочь отличить вас от риффа.
источник
Произвольно спросил: Вы спрашиваете подтверждение, что вам не нужно изучать C? Если вы изучите чистый C (не обязательно C ++), вы получите полное представление о модели выполнения компьютера. Особенно о памяти и распределении. Этот материал также важен для людей, программирующих на языках высокого уровня.
Для программиста PHP просто менее понятно, как код выполняется на данной машине. Для программиста PHP это может не иметь значения, поскольку передача данных по сети является узким местом в приложении и т. Д.
Простой PHP / Python / C # имеет много уровней абстракции между языком и процессором. Эти слои настолько толстые, что не позволяют просматривать их. Когда вы изучите C, между вами, процессором и операционной системой будет тонкий лист. Это не облегчает программирование (и, возможно, даже лучше). Но вы на самом деле можете узнать, как работает процессор. Зная «средний» C, вы можете начать связывать эти знания с языком более высокого уровня. Это немедленная выгода, которую вы получите.
По моему мнению, программист должен всегда тратить некоторое время на изучение различных концепций программирования. Определенно стоит взглянуть на C, а также взглянуть на языки программирования еще более высокого уровня, такие как Clojure, Haskell, Prolog.
Вам не нужно становиться мастером в этом, они просто научат вас тому, что «уровни» языков программирования не являются бинарными, но есть много уровней. Познакомьтесь с ними сверху вниз (Ассемблер). Это сделает вас лучшим программистом.
источник
Вам нужно знать достаточно C, чтобы читать код, написанный на C, из-за огромного количества очень важного кода, написанного на языке. Это почти все, что вы будете избегать, если будете хорошо изучать предмет (я использовал «программирование на C») Кочана, не прибегая к программированию на языке. Если вы когда-нибудь окажетесь в ситуации, требующей интенсивного использования языка, у вас будет хорошая база для дальнейшего развития. Возможно, вы захотите изучить что-то вроде книги сборки Duntemanns, если для вас машина представляет собой черный ящик. Я также рекомендую «Кодекс» Петцольда.
Помимо этого - базовая грамотность в C и базовое знакомство с базовой машиной - вам лучше всего потратить учебное время на реальные вещи, такие как SICP, TCP / IP Illustrated или книги по бетонной математике, алгоритмам или структуре данных , Реальные вещи.
Тратить много времени на изучение C, в то время как программирование на PHP просто не стоит дополнительных затрат. Есть более полезные вещи для изучения. C на самом деле - это просто еще один язык, который вы можете хорошо выучить только при изучении и использовании, но можете освоить, когда вам это нужно.
Пот трудные вещи.
источник
C - это язык, на котором пишут другие языки. Это позволяет вам получить как можно более тесную связь с процессором и другим оборудованием.
Если вы не знаете C, вы не знаете, как другие языки достигают результатов, которые они делают.
Конечно, абстракция является важной концепцией, и не всем нужно знать, как их рамки выбора достигают результатов, которые обещают. Вам не нужно тратить 20 лет на написание C или даже на размышления о том, что происходит с вашими vtables, когда вы используете множественное наследование, чтобы написать хороший код.
Теперь вы можете управлять автомобилем, не понимая, как работает 4-тактный двигатель, или даже не имея возможности использовать рычаг переключения передач (механическая коробка передач).
Однако, если вы понимаете, что происходит под капотом, вы сможете время от времени достигать исключительных результатов, которые кто-то без этих знаний будет пытаться воспроизвести.
источник
C (и, возможно, C ++) - это море, в котором вы плаваете. ОС, которая будет выполнять ваш код, вероятно, написана на C (и C ++). Таким образом, ваш родной API для доступа к службам ОС будет в C.
Если вы можете обойтись, не зная, что там внизу, вам не нужно знать C. Однако большинству программистов приходится погружаться на более низкие уровни в какой-то момент своей жизни.
Это также основано на вашей специализации областей развития. Например, веб-разработчику, который пишет HTML, Javascript и некоторые сценарии на стороне сервера, возможно, никогда не потребуется знать что-либо о C, но разработчик распределенной системы или игры узнает.
Это никогда не повредит потратить несколько недель на изучение чего-то столь важного для вашей профессии.
источник
С имеет много преимуществ:
источник