С чего начинать изучать программирование


44 0

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

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

С другой стороны, если начать изучение с C# и просидеть на нем хотя бы год, человек привыкнет не освобождать ресурсы и на C++ может даже не захотеть переходить. Я сейчас играюсь с Objective-C и во всех своих проектах включаю автоматический подсчет ссылок. После четырех лет безвылазного программирования на C# (до этого программировал на нем, но меньше, просто последние 4 практически только на нем и писал), мне лень заморачиваться с операторами release. Хватит того, что мне приходится делать две операции alloc и init.

Если начинать изучение с C#, то будущий программист может вообще забить на тему указателей и будет сложно объяснить, что ОС не может просто сама контролировать за программой выделенные области в динамической памяти, если не будет считать количество живых ссылок. Но на столько ли важна эта тема для нынешнего программиста?

Во времена программирования под DOS действительно приходилось задумываться, где находится твоя переменная – в стеке или нет. На ассемблере и сейчас нужно задумываться. Но на современных языках и в нынешнем мире кодерам, которые просто фигачат код задумываться совершенно уже не обязательно. Просто можно знать для общего развития, но все равно они этим пользоваться не будут.

Большинство программистов, которые нужны сейчас миру – это кодеры высокоуровневых языков, где нужно писать базы данных, отчеты, лепить сайты для которых указатели вообще ненужный мусор. Системный уровень сейчас уже на много менее популярен. И вот если ты хочешь играть на системном уровне, то лучше начинать с С++ и сразу окунаться в его дебри. Не получится, значит это просто не твое и переходи на C#. Ну а если изначально не хочешь возится с системным уровнем, то сразу выбирай что-то без указателей – C#, PHP и др.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Ancort

04 Марта 2012

Паскаль - в топку его (и горелку поярче). Время еще на него тратить. Лучше С, а еще лучше С#, согласен. Можно и Пых, но лучше Javascript, хотя бы. В любом случае изучающий должен осознать преимущества ООП языков (дебильно-казенная фраза, ну лан). Лично начинаю ботать F#, хочется познать функциональный язык, во всей красе.


Тимур

04 Марта 2012

Я например начинал с Delphi и Си. И теперь после перехода на C# не жалею что начал именно с них) Я думаю что легче сначала понять и изучить (указатели и тд), а потом уже от них отказаться перейдя на C# или еще куда нить)))


sergeych92

04 Марта 2012

После изучения ассемблера указатели в С++ мне кажутся слишком высокоуровневыми) Не приходится учитывать, что процессоры интел хранят переменные в памяти в формате Little-endian, что очень забавляет на первых порах в ассемблере.


Антон Иванов

04 Марта 2012

Интересно будет читать вашу статью про "включаю автоматический подсчет ссылок", как он у вас реализован. Спасибо.


Михаил Фленов

04 Марта 2012

Он реализован в Objective-C. Я подсчет ссылок реализовать не собираюсь да и не представляю, как это сделать на уровне приложения.


klamm

05 Марта 2012

Тут от человека болше зависит, мне, например, больше нравится писать низкоуровневый код. Я б вобще начал с машинных кодов, если бы можно было начать сначала) А потом асм, С/С++, Java/C#, Python, PHP ... Т.е. от железа к веб попробавть побольше языков, и там уже исходя из задач выбирать.


heroovime

05 Марта 2012

Мне лично нравятся книги от Михаила Фленова. В них много полезной информации.
С бесспорно язык основополагающий, хотя я видел удивительные вещи, сделанные на вижуал бейсике.
F# на мой взгляд заслуживает внимания.
Но вот недавно слышал чисто случайно разговор двух молодых парней. Один из них сказал следующую фразу: - Я знаю, вначале был DOS, а что было до этого?
Р.S. Видимо, просто черный экран с мигающим курсором)


Денис

05 Марта 2012

Здесь я не согласен, что нужно начинать с C#. Да тут нету указателей, но здесь есть ООП, который как раз и отпугнет новичка, а указатели это фигня.
Как мне кажется, нужно начинать именно с Паскаля. Часто люди, наподобие Ancort(который написал выше), говорят такую фигню: мол зачем на него тратить время, ведь он сейчас не актуален и нигде не используется...и т.д. Я считаю, что Паскаль - это азбука, и его придется изучать и тратить на это время!!! Изучать алгоритмизацию, структуры данных, структурные элементы языка, потом процедуры и функции, потом знакомится с ООП перейдя в Делфи или в C#. Это Миша тебе кажутся простыми инкапсуляция, полиморфизм и инкапсуляция.
Ancort вообще написал какую-то фигню: "Можно и Пых, но лучше Javascript, хотя бы." PHP для серверной стороны, JavaScript для клиентской. Как он может быть лучше, чем PHP, если у него другое предназначение??? Если его выбирать в качестве первого языка, где строгая типизация??? Для новичка это далеко не фигня, "засовывай" в переменную че хочешь, это не канает!!! Для новичка нужна алгоритмизация!!!


Ник

05 Марта 2012

Я начинал с паскаля и не жалею - отличный язык, что бы изучать алгоритмы и азы кодинга. На 1м курсе дали Си: разные требования его компиляторов просто убивают нервные клетки - тупо и беспощадно.


Андрей из Астрахани

05 Марта 2012

Всё-таки C# как первый язык в современном мире очень даже хорошо. А с MonoTouch потом и для iOS можно писать на нём вроде бы...


BOBA

05 Марта 2012

Начинать с Булевой алгебры, а может быть, и раньше.
Но, для начала - прочитать/написать техническое задание.
Спор о языках похож на детское: "Кто сильнее - кит или слон".


Ancort

06 Марта 2012

Денис,
PHP значит только на сервере работает, а клиентские, консольные приложения на нем нельзя написать? Вот не знал!


Михаил Фленов

06 Марта 2012

Интересно, ты с сарказмом написал или реально не знал. Отвечу реально - нельзя. Ты можешь писать сприпты, которые будут выполняться в консоли интерпретатором PHP. Но консольные приложения писать нельзя.

Для PHP есть компиляторы, но в нативный код системы PHP кажется не компилирует. Хотя теоретически возможно.


BOBA

06 Марта 2012

Несоответсвие заголовка и тела сообщения вводит в заблуждение участников обсуждения. Кодирование - подмножество программирования. Хотя, язык и оказывает влияние на жизнь. Многие мужики по фене ботают, и ничего - не парятся.
В общем случае - выбор ПЕРВОГО ПРАВИЛЬНОГО языка программирования определяется выбором ПЕРВОГО ПРАВИЛЬНОГО учителя (как заметил автор заметки). А, второй, третий и т.д. научишься выбирать сам.


Rejackt

06 Марта 2012

Вставлю и свои 5(10) копеек: Я за то чтобы изучать начинать с Си-подобных языков (конечно Ассемблер - круто и нужно... но если с него начинать - то не все потянут)... в современном мире - соглашусь - хорошо, очень хорошо чувствует себя C# в окружении .NET классов )) - он похож на Си чистый.. и навыки (технаря, института) - народ сможет применить ....
НО ПЕРЕД ИЗУЧЕНИЕМ обязательно ТЕОРИЮ по основам: т.е байты, биты, адресация, шестнадцатиричная система и т.п.. без этого никак - ну если с адресацией в C# не особо то нада возиться - хотябы ради приличия нада знать...


Sat

06 Марта 2012

Ребята наверное не знают чем отличаются интерпретаторы от компиляторов. И понять очень сложно по объяснениям в сети. На примере гораздо легче. Например на интерпретаторе нельзя записать и прочитать в память/из памяти.
Попробуйте на PHP попищать внутренним динамиком компьютера и вам сразу всё станет ясно!!!

Хотя есть наверное исключения, но на прямую работать с железом практически не возможно.

К стати полноценыый интерпретатор PHP написаный на Object Pascal есть. Один мой знакомый написал. Из него в полне по силам сделать компилятор. А так же есть интерпретатор JavaScript на том же Object Pascal. Так что, кому нравятся эти языки, можно сделать и компиляторы при достаточной квалификации.


Rejackt

06 Марта 2012

Sat, не сочтите за грубость.. но не совсем удачный пример с компиляторами/интерпретаторами
Может както так: компилятор делает из текста программы код процессора (ну почти всегда), интерпретатор - читает его построчно и выполняет написанные команды ))...
Отсюда логичные выводы: компилятор делает более быструю программу, и позволяет коду получить больше ф-й железа,
а интерпретатор - менее быструю программу и меньше ф-й...
ХОТЯ как посмотреть: если интерпретатор предоставляет библиотечные ф-и для работы с железом... то какбы - разница остаётся тока в скорости работы ))
И ОПЯТЬ ЖЕ НО: даже в скомпилированном коде не всё железо доступно: попищать то в винде так просто и не сможете.. даже на ассемблере, - винда по рукам даст.. нада через её библиотеки или сторонние..


Rejackt

06 Марта 2012

Та и не так то сложно понять разницу комп./интерп. - мне кажется любой человек хотя бы немного знакомый с программированием поидее знает разницу... ТА даже и не знакомый - ито должен знать... вроде как всё очевидно... имхо ))


Денис

06 Марта 2012

Ancort,
Тема звучит так: "С чего начинать изучать программирование". т.е. человеку нужно узнать что такое массивы, что такое двумерные массивы, как с помощью различных циклов их обходить и т.д. Для этого хорошо подойдет Паскаль или Си. Ну зачем здесь твой PHP или JavaScript??? Да, эти языки очень востребованные, но не с них надо изучать программирование. В один прекрасный вечер чувак задумался о своем будущем, и решил стать программистом, а что надо изучить? О везде требуется PHP, тогда с него я и начну... Как мне кажется строгая типизация прежде.


Sat

07 Марта 2012

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-ки. Так что исполняемый код порой у интерпретируемых языков даже лучше и быстрее компилируемых, но нельзя объять необъятное и впихнуть в интерпретатор все возможности компилятора. Ведь компилятор по сути это выражение мысли программиста через синтаксис языка. А интерпретатор это то же самое выражение мысли программиста ограниченная синтаксисом языка, вернее ограниченная разработчиками интерпретатора.


Sat

07 Марта 2012

К стати тема довольно неоднозначна и обширна.
Если вы не знаете ни одного языка программирования, но чувствуете тягу к познанию, тягу к творчеству и хотите в добавок получать за это деньги, при этом в как можно сжатые сроки, можно порекомендовать связку PHP+CSS+JS+HTML+любаяБД. Во первых изучается быстро, во вторых сейчас по моему каждому первому нужен сайт, причем свой и при этом на оригинальном движке с нуля (но это с опытом).

Если вам нужно создать что то монументально-исторически ценное, полезное и нужное тогда системные языки типа С,C++,Delphi,FreePascal.

Если вы фанат линукса то FreePascal,C,C++

Если разработать свою ось, или работать на чистом железе (ARM платформа, микроконтроллеры) то без знания Assembler и архитектур не обойтись.

Если на специализированных платформах (сотовые телефоны и подобное) Java или Си.

Если вы хотите осчастливить мир кросс платформенной онлайн игрой, и у вас есть талант то ActionScript или JavaScript...

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


Денис

07 Марта 2012

Sat, написал:
"Ведь компилятор по сути это выражение мысли программиста через синтаксис языка. А интерпретатор это то же самое выражение мысли программиста ограниченная синтаксисом языка, вернее ограниченная разработчиками интерпретатора."
Ты хоть знаешь, что такое компилятор, и что такое интерпретатор? А если знаешь, то понимаешь между ними разницу? Смысл твоей фразы таков, что интерпретируемый язык накладывает ограничения, а компилируемый ограничен только фантазией программиста. Возьмем исходный код программы на языке С++, в чем разница если я применю компилятор, а потом исполню её через интерпретатор? Разница лишь в том, что компилятор преобразует весь исходный код на С++ в машинный код. А интерпретатор, исполняет программу шаг за шагом(командой за командой). Когда C# или PHP переводят программу в некий промежуточный язык(IL), это называется трансляцией, а не компиляцией. А потом PHP эту программу на IL интерпретирует в машинный код.


n

07 Марта 2012

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

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


Денис

07 Марта 2012

Уважаемый n, вы написали: " Только PHP не компилируется ни во что в своем истенном обличии"

А во что-то, ещё кроме как машинного кода он разве может компилироваться? Дальше: "Чтобы выполнить программу на PHP ее не нужно компилировать или преобразовывать в промежуточный IL код, достаточно скормить интерпретатору. " Насколько мне известно так было до версии 4 и 5. Но в пятой точно php-код транслируется в IL, а дальше работа интерпретатора
который этот IL-код исполняет по командам на "лету", т.е. без предварительной компиляции. Еще дальше: "Но так как PHP - это язык, для него легко написать и компилятор, который будет создавать промежуточный код и сохранять его в файле." Здесь путаница, на выходе у компилятора, всегда машинный код, а если на выходе какой-то другой язык, например тот же IL, то это транслятор а не компилятор!


Михаил Фленов

07 Марта 2012

Обожаю такие дискуссии, когда идет культурное общение без грубостей, без унижений. Всегда бы так. Приятно читать.


Sat

07 Марта 2012

Денис да я понимаю разницу. Что бы у вас в будущем не возникало ко мне вопросов на эту тему, скажу (похвалюсь) я написал 4 компилятора, один из которых уровня Delphi (и это не FreePascal) и кучу интерпретаторов. А уж собрания различных компиляторов и интерпретаторов всех мыслимых и не мыслимых языков у меня наверное самоё большое чем у кого либо.

Так вот и компилятор это интерпретатор для целевой платформы. Средой исполнения для файлов компилятора является операционная система.

Интерпретаторы были разработаны для облегчения переноса на другие платформы и включали в себя свою собственную среду выполнения. А на одних из первых компьютерах как средство управления компьютером. Basic до сих пор считается популярным языком, но, согласитесь что его трудно назвать интерпретатором, хотя таковым он по сути и остался не считая различных модификаций.

Денис, я понимаю, что ваше представление о интерпретаторах сугубо объективно, вероятно всего основано на устаревших понятиях о интерпретируемом коде.
Я ещё раз повторюсь. Современные интерпретаторы совсем не то, что и ранние интерпретаторы которые выполняли по строкам какой либо сценарий.
Да они остались. Классическая консоль в Windows, Bash в Linux да много чего, но времена не стоят на месте. Посмотрите на Java, PHP, C# все это по сути интерпретаторы для своей VM(виртуальной машины) которая как раз и исполняет (ИНТЕРПРЕТИРУЕТ) созданный код.

Слово ТРАНСЛЯТОР - универсальное название ПРЕОБРАЗОВАТЕЛЯ которым можно назвать все что угодно, главное правильно выразить свою мысль.
Например ТРАНСЛЯТОРОМ раньше модно было называть радио рупор на столбе. А интерпретатор ETH Pascal виртуальная машина которого исполняла P-code (к стати прообраз современных byte-code, IL и т.д.) всегда назывался интерпретатором, хотя как можно убедится транслировала и исполняла код одновременно.

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


Sat

07 Марта 2012

В добавок, что бы унять разногласия:

Трансля́тор — программа или техническое средство, выполняющее преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой

Интерпретатор - Вид транслятора, осуществляющего пооператорную (покомандную) обработку и выполнение исходной программы или запроса (в отличие от компилятора, транслирующего всю программу без её выполнения).

Компиляция — трансляция программы на язык, близкий к машинному, и последующая её компоновка.

Как видим отличие компилятора от интерпретатора в ВЫПОЛНЕНИИ транслированого кода!
Хотя это не совсем точно, повторюсь, для компилятора - операционная система является исполнителем кода. Но многие это по просту опускают из видимости! :-)


Денис

07 Марта 2012

Sat,
С приведенной терминологией полностью согласен, именно так я и описывал эти понятия. То, что под интерпретатором подразумевают уже другое, может быть... Понятия понятиями, теория теорией, но вы Sat деятельный практик, а практика прежде всего!


Макс

15 Июля 2012

Михаил что вы можете порекомендовать по C# для новичка почитать, опыт есть не больной в С++ и ООП(чучуть знаю) ?


Михаил Фленов

15 Июля 2012

Я знаю одного офигенного автора, кажется это его блог. Если ты знаешь основы ООП и С++, то тебе нужно понять синтаксис C# (он очень схож) и в этом тебе поможет суперофигенная книга Библия C#. А если серьезно, то с небольшим опытом наверно может и любая книга помочь освоить C#.


Макс

16 Июля 2012

Михаил Фленов, как бы вам сказать то я не сильно знаю С++ я бы даже сказал что бы знаю основы С. Я писал программы консольные и то простенькие типо. отсортировать массив пузыриком и т.д. С помощью ООП не когда не писал программы, только писал когда практиковался перегрузку оператор наследования и т.д. и то только хорошо запомнил перегрузку операторов. STL - не сильно знаю. У меня к вам еще один вопрос вы жи программируете на C# ? Я хотел уточнить C# только к Windows привязан или еще можно писать на других платформах ?  


Эдуард

16 Июля 2012

Михайл что можно писать на C#, я знаю что на
С++ можно писать свои ОС, игры,
драйвера программы. а на C# не только
программы под Windows


Михаил Фленов

16 Июля 2012

Я хотел уточнить C# только к Windows привязан или еще можно писать на других платформах  


Я пишу на маке, можно под Linux


Эдуард

16 Июля 2012

А я одной книгой отделаюсь по си шарпу или хотя бы двумя?


Петр

17 Июля 2012

Макс я полностью согласен с Михаилом С#, проше чем С++ и при этом С# ООП - язык. там намного проше делать графические программы так как ты все это рисуешь а не пишешь огромный код(WinApi). Книгу подсказать не могу так как учили С# в универи


Макс

17 Июля 2012

Михаил Фленов, а в ваше книге есть основы по С# ? или там только практика ?


Михаил Фленов

17 Июля 2012

Там есть и теория и практика


Макс

17 Июля 2012

Михаил Фленов, а она подойдет к новичку ? просто я уже писал что знаю только основы С++ и чучуть ООП


Михаил Фленов

17 Июля 2012

Подойдет


Макс

18 Июля 2012

Михаил Фленов, я скачал вашу книгу. посмотрел оглавление у вас не плохая книга. Там есть Базы Данных работа с сетью, мультимедиа, создания графических программ. Думаю вскоре купить вашу книгу.  


Макс

20 Июля 2012

А он территории Украине ее продают


Юрий

05 Февраля 2013

Уважаемый Михаил Флёнов, купил Вашу книгу "Библия С#". Подскажите, пожалуйста, можно ли в языке С# реализовать динамичекое выполнение выполнение подпрограмм (как выполение app-модулей в FoxPro). Чтобы в в комплексе, которая работает с БД по системе "Клиент-сервер" реализовать создание динамичеких форм и выполение несложных алгоритмов.


Михаил Фленов

05 Февраля 2013

Не работал с Fox Pro, поэтому не понимаю, как это динамически выполнять подпрограммы. Создание динамических форм возможно понимаю, что ты имеешь ввиду, и это возможно на C#


Сергей

09 Февраля 2013

Мне кажется то. что интересно и что цепляет то надо изучать. И то, что используется в твоей организации, на парах в институте и тд.Стал вопрос, написание новых модулей для сайта который сопровождаю изучаю пых. Просто изучать тем более , что то сложное как Си.скорее всего многие прочитали учебники и думают какие они крутые. Без реальных проектов и применений своих познаний,все всего лишь понты.Не уверен, что то кто то активно где то применяет Си.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне