Сегодня увидел в комментариях на блоге предложение народу начинать изучение программирование с Паскаля. Паскаль и С примерно одинаковы в изучении. У них синтаксис разный, но идея схожая. Недостаток начинать с этих языков - придется изучать указатели, выделения памяти и освобождение ресурсов. Вот почему раньше начинали изучать программирование с бейсика, а я рекомендую сейчас начинать с С#. Просто это проще.
Программирование и изучение первого языка далеко не для всех дается легко, и сразу же нырять с головой в указатели далеко не просто. Это отпугивает народ, особенно книги, в которых они не могут понять объяснения. Некоторые авторы объясняют выделения заумными словами, может потому что это выглядит круть, а нужно просто понимать, что начинающему пофиг, как оно выглядит и ему не должно звучать круть, ему нужно, чтобы было понятно.
С другой стороны, если начать изучение с C# и просидеть на нем хотя бы год, человек привыкнет не освобождать ресурсы и на C++ может даже не захотеть переходить. Я сейчас играюсь с Objective-C и во всех своих проектах включаю автоматический подсчет ссылок. После четырех лет безвылазного программирования на C# (до этого программировал на нем, но меньше, просто последние 4 практически только на нем и писал), мне лень заморачиваться с операторами release. Хватит того, что мне приходится делать две операции alloc и init.
Если начинать изучение с C#, то будущий программист может вообще забить на тему указателей и будет сложно объяснить, что ОС не может просто сама контролировать за программой выделенные области в динамической памяти, если не будет считать количество живых ссылок. Но на столько ли важна эта тема для нынешнего программиста?
Во времена программирования под DOS действительно приходилось задумываться, где находится твоя переменная – в стеке или нет. На ассемблере и сейчас нужно задумываться. Но на современных языках и в нынешнем мире кодерам, которые просто фигачат код задумываться совершенно уже не обязательно. Просто можно знать для общего развития, но все равно они этим пользоваться не будут.
Большинство программистов, которые нужны сейчас миру – это кодеры высокоуровневых языков, где нужно писать базы данных, отчеты, лепить сайты для которых указатели вообще ненужный мусор. Системный уровень сейчас уже на много менее популярен. И вот если ты хочешь играть на системном уровне, то лучше начинать с С++ и сразу окунаться в его дебри. Не получится, значит это просто не твое и переходи на C#. Ну а если изначально не хочешь возится с системным уровнем, то сразу выбирай что-то без указателей – C#, PHP и др.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Паскаль - в топку его (и горелку поярче). Время еще на него тратить. Лучше С, а еще лучше С#, согласен. Можно и Пых, но лучше Javascript, хотя бы. В любом случае изучающий должен осознать преимущества ООП языков (дебильно-казенная фраза, ну лан). Лично начинаю ботать F#, хочется познать функциональный язык, во всей красе.
Я например начинал с Delphi и Си. И теперь после перехода на C# не жалею что начал именно с них) Я думаю что легче сначала понять и изучить (указатели и тд), а потом уже от них отказаться перейдя на C# или еще куда нить)))
После изучения ассемблера указатели в С++ мне кажутся слишком высокоуровневыми) Не приходится учитывать, что процессоры интел хранят переменные в памяти в формате Little-endian, что очень забавляет на первых порах в ассемблере.
Интересно будет читать вашу статью про "включаю автоматический подсчет ссылок", как он у вас реализован. Спасибо.
Он реализован в Objective-C. Я подсчет ссылок реализовать не собираюсь да и не представляю, как это сделать на уровне приложения.
Тут от человека болше зависит, мне, например, больше нравится писать низкоуровневый код. Я б вобще начал с машинных кодов, если бы можно было начать сначала) А потом асм, С/С++, Java/C#, Python, PHP ... Т.е. от железа к веб попробавть побольше языков, и там уже исходя из задач выбирать.
Мне лично нравятся книги от Михаила Фленова. В них много полезной информации.
С бесспорно язык основополагающий, хотя я видел удивительные вещи, сделанные на вижуал бейсике.
F# на мой взгляд заслуживает внимания.
Но вот недавно слышал чисто случайно разговор двух молодых парней. Один из них сказал следующую фразу: - Я знаю, вначале был DOS, а что было до этого?
Р.S. Видимо, просто черный экран с мигающим курсором)
Здесь я не согласен, что нужно начинать с C#. Да тут нету указателей, но здесь есть ООП, который как раз и отпугнет новичка, а указатели это фигня.
Как мне кажется, нужно начинать именно с Паскаля. Часто люди, наподобие Ancort(который написал выше), говорят такую фигню: мол зачем на него тратить время, ведь он сейчас не актуален и нигде не используется...и т.д. Я считаю, что Паскаль - это азбука, и его придется изучать и тратить на это время!!! Изучать алгоритмизацию, структуры данных, структурные элементы языка, потом процедуры и функции, потом знакомится с ООП перейдя в Делфи или в C#. Это Миша тебе кажутся простыми инкапсуляция, полиморфизм и инкапсуляция.
Ancort вообще написал какую-то фигню: "Можно и Пых, но лучше Javascript, хотя бы." PHP для серверной стороны, JavaScript для клиентской. Как он может быть лучше, чем PHP, если у него другое предназначение??? Если его выбирать в качестве первого языка, где строгая типизация??? Для новичка это далеко не фигня, "засовывай" в переменную че хочешь, это не канает!!! Для новичка нужна алгоритмизация!!!
Я начинал с паскаля и не жалею - отличный язык, что бы изучать алгоритмы и азы кодинга. На 1м курсе дали Си: разные требования его компиляторов просто убивают нервные клетки - тупо и беспощадно.
Всё-таки C# как первый язык в современном мире очень даже хорошо. А с MonoTouch потом и для iOS можно писать на нём вроде бы...
Начинать с Булевой алгебры, а может быть, и раньше.
Но, для начала - прочитать/написать техническое задание.
Спор о языках похож на детское: "Кто сильнее - кит или слон".
Денис,
PHP значит только на сервере работает, а клиентские, консольные приложения на нем нельзя написать? Вот не знал!
Интересно, ты с сарказмом написал или реально не знал. Отвечу реально - нельзя. Ты можешь писать сприпты, которые будут выполняться в консоли интерпретатором PHP. Но консольные приложения писать нельзя.
Для PHP есть компиляторы, но в нативный код системы PHP кажется не компилирует. Хотя теоретически возможно.
Несоответсвие заголовка и тела сообщения вводит в заблуждение участников обсуждения. Кодирование - подмножество программирования. Хотя, язык и оказывает влияние на жизнь. Многие мужики по фене ботают, и ничего - не парятся.
В общем случае - выбор ПЕРВОГО ПРАВИЛЬНОГО языка программирования определяется выбором ПЕРВОГО ПРАВИЛЬНОГО учителя (как заметил автор заметки). А, второй, третий и т.д. научишься выбирать сам.
Вставлю и свои 5(10) копеек: Я за то чтобы изучать начинать с Си-подобных языков (конечно Ассемблер - круто и нужно... но если с него начинать - то не все потянут)... в современном мире - соглашусь - хорошо, очень хорошо чувствует себя C# в окружении .NET классов )) - он похож на Си чистый.. и навыки (технаря, института) - народ сможет применить ....
НО ПЕРЕД ИЗУЧЕНИЕМ обязательно ТЕОРИЮ по основам: т.е байты, биты, адресация, шестнадцатиричная система и т.п.. без этого никак - ну если с адресацией в C# не особо то нада возиться - хотябы ради приличия нада знать...
Ребята наверное не знают чем отличаются интерпретаторы от компиляторов. И понять очень сложно по объяснениям в сети. На примере гораздо легче. Например на интерпретаторе нельзя записать и прочитать в память/из памяти.
Попробуйте на PHP попищать внутренним динамиком компьютера и вам сразу всё станет ясно!!!
Хотя есть наверное исключения, но на прямую работать с железом практически не возможно.
К стати полноценыый интерпретатор PHP написаный на Object Pascal есть. Один мой знакомый написал. Из него в полне по силам сделать компилятор. А так же есть интерпретатор JavaScript на том же Object Pascal. Так что, кому нравятся эти языки, можно сделать и компиляторы при достаточной квалификации.
Sat, не сочтите за грубость.. но не совсем удачный пример с компиляторами/интерпретаторами
Может както так: компилятор делает из текста программы код процессора (ну почти всегда), интерпретатор - читает его построчно и выполняет написанные команды ))...
Отсюда логичные выводы: компилятор делает более быструю программу, и позволяет коду получить больше ф-й железа,
а интерпретатор - менее быструю программу и меньше ф-й...
ХОТЯ как посмотреть: если интерпретатор предоставляет библиотечные ф-и для работы с железом... то какбы - разница остаётся тока в скорости работы ))
И ОПЯТЬ ЖЕ НО: даже в скомпилированном коде не всё железо доступно: попищать то в винде так просто и не сможете.. даже на ассемблере, - винда по рукам даст.. нада через её библиотеки или сторонние..
Та и не так то сложно понять разницу комп./интерп. - мне кажется любой человек хотя бы немного знакомый с программированием поидее знает разницу... ТА даже и не знакомый - ито должен знать... вроде как всё очевидно... имхо ))
Ancort,
Тема звучит так: "С чего начинать изучать программирование". т.е. человеку нужно узнать что такое массивы, что такое двумерные массивы, как с помощью различных циклов их обходить и т.д. Для этого хорошо подойдет Паскаль или Си. Ну зачем здесь твой PHP или JavaScript??? Да, эти языки очень востребованные, но не с них надо изучать программирование. В один прекрасный вечер чувак задумался о своем будущем, и решил стать программистом, а что надо изучить? О везде требуется PHP, тогда с него я и начну... Как мне кажется строгая типизация прежде.
Rejackt - тут тоже свои нюансы. C# компилирует и выполняет свой код через прослойку называемую .NET Framework. Так же и PHP именно компилируется в некий промежуточный байт-код (ну по крайне мере сейчас). Мы как то проводили исследования на функцию
$a = array('a','b','c');
for ($i=0;$i<count($a);$i++) {
...
}
Так вот до 4 версии по моему, PHP как интерпретатор КАЖДЫЙ раз вычислял count($a), а теперь не вычисляет, вернее преобразовывает во что то примерное:
$a = array('a','b','c');
$c = count($a);
for ($i=0;$i<$c;$i++) {
...
}
Так же дело обстоит и с C#. IL представление кода компилируется под тот процессор, который в данном случае на целевой машине. Поэтому скомпилированный код запускается всё быстрее и быстрее, но все же, сама среда выполнения (интерпретатор PHP или .NET Framework) не дают ПОЛНОГО доступа к командам процессора. Есть языки ВУ для которых реализовано два режима работы, например Delphi и визуальные компоненты (которые сперва компилируются а потом исполняются собственной средой разработки)
Так вот, сейчас почти все интерпретаторы стараются разработать по возможности более приближенно к компиляторам по функциям и отличие одних от других только в начальном загрузчике. Посмотрите на C# и его DLL-ки. Так что исполняемый код порой у интерпретируемых языков даже лучше и быстрее компилируемых, но нельзя объять необъятное и впихнуть в интерпретатор все возможности компилятора. Ведь компилятор по сути это выражение мысли программиста через синтаксис языка. А интерпретатор это то же самое выражение мысли программиста ограниченная синтаксисом языка, вернее ограниченная разработчиками интерпретатора.
К стати тема довольно неоднозначна и обширна.
Если вы не знаете ни одного языка программирования, но чувствуете тягу к познанию, тягу к творчеству и хотите в добавок получать за это деньги, при этом в как можно сжатые сроки, можно порекомендовать связку PHP+CSS+JS+HTML+любаяБД. Во первых изучается быстро, во вторых сейчас по моему каждому первому нужен сайт, причем свой и при этом на оригинальном движке с нуля (но это с опытом).
Если вам нужно создать что то монументально-исторически ценное, полезное и нужное тогда системные языки типа С,C++,Delphi,FreePascal.
Если вы фанат линукса то FreePascal,C,C++
Если разработать свою ось, или работать на чистом железе (ARM платформа, микроконтроллеры) то без знания Assembler и архитектур не обойтись.
Если на специализированных платформах (сотовые телефоны и подобное) Java или Си.
Если вы хотите осчастливить мир кросс платформенной онлайн игрой, и у вас есть талант то ActionScript или JavaScript...
Во общем многое зависит от того, что вы хотите сделать из себя изучая программирование.
Sat, написал:
"Ведь компилятор по сути это выражение мысли программиста через синтаксис языка. А интерпретатор это то же самое выражение мысли программиста ограниченная синтаксисом языка, вернее ограниченная разработчиками интерпретатора."
Ты хоть знаешь, что такое компилятор, и что такое интерпретатор? А если знаешь, то понимаешь между ними разницу? Смысл твоей фразы таков, что интерпретируемый язык накладывает ограничения, а компилируемый ограничен только фантазией программиста. Возьмем исходный код программы на языке С++, в чем разница если я применю компилятор, а потом исполню её через интерпретатор? Разница лишь в том, что компилятор преобразует весь исходный код на С++ в машинный код. А интерпретатор, исполняет программу шаг за шагом(командой за командой). Когда C# или PHP переводят программу в некий промежуточный язык(IL), это называется трансляцией, а не компиляцией. А потом PHP эту программу на IL интерпретирует в машинный код.
Интересный спор завязался - компиляторы, трансляторы, интерпретаторы. Только PHP не компилируется ни во что в своем истенном обличии. Он именно интерпретируется и результат интерпретации сохраняется в кэше и потом используется. Чтобы выполнить программу на PHP ее не нужно компилировать или преобразовывать в промежуточный IL код, достаточно скормить интерпретатору.
Но так как PHP - это язык, для него легко написать и компилятор, который будет создавать промежуточный код и сохранять его в файле. Это делает Zend. В этом случае PHP становится родственником C#. Но в своем истинном обличии компиляции нет. Есть интерпретация с сохранением результата в кэш.
Уважаемый n, вы написали: " Только PHP не компилируется ни во что в своем истенном обличии"
А во что-то, ещё кроме как машинного кода он разве может компилироваться? Дальше: "Чтобы выполнить программу на PHP ее не нужно компилировать или преобразовывать в промежуточный IL код, достаточно скормить интерпретатору. " Насколько мне известно так было до версии 4 и 5. Но в пятой точно php-код транслируется в IL, а дальше работа интерпретатора
который этот IL-код исполняет по командам на "лету", т.е. без предварительной компиляции. Еще дальше: "Но так как PHP - это язык, для него легко написать и компилятор, который будет создавать промежуточный код и сохранять его в файле." Здесь путаница, на выходе у компилятора, всегда машинный код, а если на выходе какой-то другой язык, например тот же IL, то это транслятор а не компилятор!
Обожаю такие дискуссии, когда идет культурное общение без грубостей, без унижений. Всегда бы так. Приятно читать.
Денис да я понимаю разницу. Что бы у вас в будущем не возникало ко мне вопросов на эту тему, скажу (похвалюсь) я написал 4 компилятора, один из которых уровня Delphi (и это не FreePascal) и кучу интерпретаторов. А уж собрания различных компиляторов и интерпретаторов всех мыслимых и не мыслимых языков у меня наверное самоё большое чем у кого либо.
Так вот и компилятор это интерпретатор для целевой платформы. Средой исполнения для файлов компилятора является операционная система.
Интерпретаторы были разработаны для облегчения переноса на другие платформы и включали в себя свою собственную среду выполнения. А на одних из первых компьютерах как средство управления компьютером. Basic до сих пор считается популярным языком, но, согласитесь что его трудно назвать интерпретатором, хотя таковым он по сути и остался не считая различных модификаций.
Денис, я понимаю, что ваше представление о интерпретаторах сугубо объективно, вероятно всего основано на устаревших понятиях о интерпретируемом коде.
Я ещё раз повторюсь. Современные интерпретаторы совсем не то, что и ранние интерпретаторы которые выполняли по строкам какой либо сценарий.
Да они остались. Классическая консоль в Windows, Bash в Linux да много чего, но времена не стоят на месте. Посмотрите на Java, PHP, C# все это по сути интерпретаторы для своей VM(виртуальной машины) которая как раз и исполняет (ИНТЕРПРЕТИРУЕТ) созданный код.
Слово ТРАНСЛЯТОР - универсальное название ПРЕОБРАЗОВАТЕЛЯ которым можно назвать все что угодно, главное правильно выразить свою мысль.
Например ТРАНСЛЯТОРОМ раньше модно было называть радио рупор на столбе. А интерпретатор ETH Pascal виртуальная машина которого исполняла P-code (к стати прообраз современных byte-code, IL и т.д.) всегда назывался интерпретатором, хотя как можно убедится транслировала и исполняла код одновременно.
Так что для ясности мысли принято во многих кругах опускать слово транслятор (а именно заменять его словом компилятор) а интерпретатором принято называть некое подобие виртуальной машины, которая исполняет упорядоченый набор инструкций.
В добавок, что бы унять разногласия:
Трансля́тор — программа или техническое средство, выполняющее преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой
Интерпретатор - Вид транслятора, осуществляющего пооператорную (покомандную) обработку и выполнение исходной программы или запроса (в отличие от компилятора, транслирующего всю программу без её выполнения).
Компиляция — трансляция программы на язык, близкий к машинному, и последующая её компоновка.
Как видим отличие компилятора от интерпретатора в ВЫПОЛНЕНИИ транслированого кода!
Хотя это не совсем точно, повторюсь, для компилятора - операционная система является исполнителем кода. Но многие это по просту опускают из видимости! :-)
Sat,
С приведенной терминологией полностью согласен, именно так я и описывал эти понятия. То, что под интерпретатором подразумевают уже другое, может быть... Понятия понятиями, теория теорией, но вы Sat деятельный практик, а практика прежде всего!
Михаил что вы можете порекомендовать по C# для новичка почитать, опыт есть не больной в С++ и ООП(чучуть знаю) ?
Я знаю одного офигенного автора, кажется это его блог. Если ты знаешь основы ООП и С++, то тебе нужно понять синтаксис C# (он очень схож) и в этом тебе поможет суперофигенная книга Библия C#. А если серьезно, то с небольшим опытом наверно может и любая книга помочь освоить C#.
Михаил Фленов, как бы вам сказать то я не сильно знаю С++ я бы даже сказал что бы знаю основы С. Я писал программы консольные и то простенькие типо. отсортировать массив пузыриком и т.д. С помощью ООП не когда не писал программы, только писал когда практиковался перегрузку оператор наследования и т.д. и то только хорошо запомнил перегрузку операторов. STL - не сильно знаю. У меня к вам еще один вопрос вы жи программируете на C# ? Я хотел уточнить C# только к Windows привязан или еще можно писать на других платформах ?
Михайл что можно писать на C#, я знаю что на
С++ можно писать свои ОС, игры,
драйвера программы. а на C# не только
программы под Windows
А я одной книгой отделаюсь по си шарпу или хотя бы двумя?
Макс я полностью согласен с Михаилом С#, проше чем С++ и при этом С# ООП - язык. там намного проше делать графические программы так как ты все это рисуешь а не пишешь огромный код(WinApi). Книгу подсказать не могу так как учили С# в универи
Михаил Фленов, а в ваше книге есть основы по С# ? или там только практика ?
Там есть и теория и практика
Михаил Фленов, а она подойдет к новичку ? просто я уже писал что знаю только основы С++ и чучуть ООП
Подойдет
Михаил Фленов, я скачал вашу книгу. посмотрел оглавление у вас не плохая книга. Там есть Базы Данных работа с сетью, мультимедиа, создания графических программ. Думаю вскоре купить вашу книгу.
А он территории Украине ее продают
Уважаемый Михаил Флёнов, купил Вашу книгу "Библия С#". Подскажите, пожалуйста, можно ли в языке С# реализовать динамичекое выполнение выполнение подпрограмм (как выполение app-модулей в FoxPro). Чтобы в в комплексе, которая работает с БД по системе "Клиент-сервер" реализовать создание динамичеких форм и выполение несложных алгоритмов.
Не работал с Fox Pro, поэтому не понимаю, как это динамически выполнять подпрограммы. Создание динамических форм возможно понимаю, что ты имеешь ввиду, и это возможно на C#
Мне кажется то. что интересно и что цепляет то надо изучать. И то, что используется в твоей организации, на парах в институте и тд.Стал вопрос, написание новых модулей для сайта который сопровождаю изучаю пых. Просто изучать тем более , что то сложное как Си.скорее всего многие прочитали учебники и думают какие они крутые. Без реальных проектов и применений своих познаний,все всего лишь понты.Не уверен, что то кто то активно где то применяет Си.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.