C или c для начинающих

Между собой оба языка очень похожи, при отсутствии опыта разобраться в различиях очень сложно. Статья поможет расставить всё по своим местам и укажет верный язык на основании поставленных задач.

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

Единственная сфера использования – поддержание работоспособности проектов, которые ещё не перешли на обновлённые языки. Если проект качественный, он в скором времени обновится, иначе будет постепенно терять популярность, соответственно, все равно нет перспективы развития. При желании заняться изучением нового языка стоит предпочесть C++ или C# .

Особенности C#

После пропуска большого этапа «обучения» на Си , можно задаться вопросом куда же всё-таки направляться и какое состояние в сфере программирования на C# . При выборе этого языка стоит помнить, что программист строго привязан к операционной системе Windows, можно даже не учитывать преимущества Mono Develop, так как основной недостаток – полная зависимость от дальнейших действий Microsoft.

В большей части вакансии C# связанные с Asp.net – это веб разработка и всё тому подобное. Здесь уже выбор каждого. В отношении обучающего материала лучше сразу начинать с Шилдта, его способ описания ООП достаточно понятен и ясен, хотя и сам язык не вызывает особых сложностей, особенно если есть хоть какие-то знания. После его прочтения стоит перейти к Троелсену, который позволит почувствовать фундамент под ногами и даст более-менее приличные знания. После базового освоения языка можно дополнить информацию с помощью Рихтера, который детальнее раскроет особенности работы с .NET платформой.

Достоинства C++

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

С++ уже позволяет писать программы, которые могут работать на разных платформах, с этой целью разработан Qt .

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

Не относится к теме статьи, но стоит также присмотреться к языку Java .

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

У каждого языка различаются сферы использования. Если акцент ставится на написание игр, лучше предпочесть С#, ведь язык применяется в основе распространённого движка Unity . Он позволяет создавать игры как с 2-мерной графикой, так и полноценные 3D. В противовес можно сказать, что С++ применяется в основе Unreal Engine , он отличается большей мощностью и требуется для написания масштабных игр для ПК.

Сравнение языков

1. Скорость написания

C# обеспечивает быстрейший старт в сфере программирования, прототип можно создать значительно быстрее. Если в приоритете лежит скорость изначальной разработки, стоит выбирать C#, который выигрывает у С++.

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

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

2. Кроссплатформенность

В отношении кросплатформенности С++ сильно превосходит конкурента, хотя и есть определённые оговорки. Придётся прибегнуть к дополнительным затратам и между некоторыми платформами отмечается бинарная несовместимость.

C# не кросплатформенный, существует разработанное решение со стороны на .net, оно позволяет связывать сразу несколько платформ. Изначально планировалось создание языка для кросплатформенного кодинга, но с течением времени направление развития было изменено.

Сейчас под Windows разработана достаточно полноценная инфраструктура на .net, а в остальных платформах такого решения не было запущено.

3. Библиотеки

Выбор между библиотеками можно сделать в пользу С++, так как не только их количество больше, но и ассортимент качественнее. За длительную историю разработки удалось достичь хорошей оптимизации и было устранено большее количество недочётов. Многие библиотеки находятся в открытом доступе, могут использоваться на разных платформах и имеют открытый код.

Даже с учётом ряда положительных сторон всё не настолько радужно, ведь многие библиотеки С++ разработаны по различным структурам, порой даже без них. Нередко встречается структурно-процедурная форма построения, причина такого недостатка – перенос библиотеки с Си.

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

Среди базовых библиотек C++ выбор не такой обширный, по функционалу С# превосходит их. Основная сложность и задача программиста – это правильный подбор библиотек и это потребуется даже при выполнении небольшого проекта.

4. Стоимость поддержки

Значительной разницы в цене поддержки между обоими языками не отмечается. Важно осознавать, что отдельные баги внутри приложений на С# сложно поддаются устранению методами .net. Если потребуется исправление багов, цена резко увеличится, а поддержание станет дороже. Если коснётся рефакторинга, то чаще всего проекты С# проще поддаются изменению.

Лично я не могу со 100% уверенностью всем советовать выбирать тот или иной язык, так как нет правильного ответа на вопрос. Выбор зависит от поставленных целей, типа задач и предполагаемого результата, который требуется достичь. Для меня С# значительно приятнее и ближе, ведь основная часть работы связана с движком Unity, но нельзя скрывать повышенную популярность Unreal Engine на C++.

После определения задачи стоит подобрать лучший язык на основании перечисленных пунктов, а также типа синтаксиса.

Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?

Рубрики

Свежие записи

Свежие комментарии

  • Дмитрий к записи Как сделать собственный составной элемент управления (composite control) в WinForms
  • Дмитрий к записи Как сделать собственный составной элемент управления (composite control) в WinForms
  • CharlesWem к записи Краткая, неполная и по большей части неправильная история языков программирования
  • CharlesWem к записи Самоучитель по C# для начинающих. 01. Основы языка, переменные, логика, циклы.
  • Дмитрий к записи Простейшее диалоговое окно-вопрос (MessageBox) в WindowsForms

Архивы

1.1 Начальные понятия

Данный самоучитель рассчитан на людей, совершенно не знакомых с программированием, но способных скачать, установить и запустить программу — в данном случае Visual Studio 2010 (2008,2012). В первой части я кратко расскажу о основах языка C#. Формат самоучителя подразумевает краткое и упрощенное изложение — за подробностями касательно отдельных функций и классов обращайтесь в гугл и msdn, за продвинутыми методиками программирования в продвинутые книги. В принципе почти всю информацию можно найти в интернете, надо лишь знать что искать, так что в отличие от классических книг на несколько сотен страниц я буду давать ту основу, зная которую вы уже сможете сформулировать поисковый запрос — ни в одном разделе я сознательно не даю полной и исчерпывающей информации, ее место в документации. Крайне желательно знать английский язык хотя бы на уровне чтения со словарем — в англоязычном интернете информации на порядок больше, невероятно полезные сайты вроде StackOverflow не имеют русских аналогов, а русскоязычные форумы и обсуждения чаще всего напоминают знаменитый анекдот (под американским форумом можно смело понимать англоязычный с немцами, индусами и бразильцами):

Чем отличаются русский, американский и еврейский форумы?
— на американском форуме вы задаете вопрос и вам дают ответ
— на еврейском форуме вы задаете вопрос и вам задают встречный вопрос
— на русском форуме вы задаете вопрос и вам долго объясняют почему вы такой мудак.

Современные языки программирования вообще и C# в частности скрывают многие низкоуровневые особенности работы компьютеров, так что детально разбираться в особенностях работы регистров процессора и тому подобной зауми новичку не надо (99% программистов тоже). Но некоторые вещи стоит держать в уме.

Что такое язык программирования? Это язык, который понимает компьютер. (ваш Капитан Очевидность) Но на самом деле компьютер понимает только нули и единицы. Так что любой современный язык программирования на самом деле промежуточен — после того как вы напишете программу, он переводится на настоящий язык компьютера — компилируется. Таким образом сначала мы пишем программу на языке программирования в обычном текстовом файле, потом компиллируем в двоичный язык компьютера.

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

Таким образом мы:

1. Пишем код на языке C# в обычный текстовый файл

2. Компилируем программу в байт-код с помощью компилятора C# (1 и 2 можно делать без Visual Studio, например набрать исходный текст в Блокноте и скомпилировать через командную строку)

3. Запускаем полученную программу на компьютере, где уже установлен .Net Framework соответствующей версии), который переводит программу в двоичный код и собственно запускает, давая доступ к компьютеру. (соответственно на компьютере без Net Framework программа не запустится вообще).

1.2 Привет мир

Перейдем к практике, для создания самой простой программы мы запустим Visual Studio и выполним следующее:

1. Пойдем в меню File-New Project (Файл — Новый проект) или сразу кликнем на Create New Project

2. Выберем шаблон Console Application (Консольное приложение)

3. Выберем каталог на диске, где будет расположен наш проект

4. Добавим две строчки в текст программы, чтобы он выглядел вот так

4. Нажмем F5 (можно выбрать в меню Debug — Start Debugging ) и увидим черное окошко с нашим Привет мир, которое закроется после нажатия Enter.

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

В самом простом случае (это про нас) компьютер последовательно выполняет команды программиста — одну за другой:

System.Console.WriteLine("Привет мир!"); — выводит в консоль (то самое черное окно) строку "Привет мир""

System.Console.ReadLine(); — читает строку, которую мы вводим (ввод завершается нажатием Enter) и переходит к следующей команде.

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

1.3 Простые переменные

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

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

Есть языки программирования, в которых переменные не делятся на типы. Что происходит с котятами в таком случае вы узнаете чуть позже, в разделе про обработку ошибок.

— int, целое число от -2,147,483,648 до 2,147,483,647
— string, строка
— double, число с дробной частью и переменным количеством знаков после запятой, например 1.38 принимает значения от -1,79769313486232 в 308 степени до 1,79769313486232 в 308 степени. Проще говоря очень большие.
— decimal, число с дробной частью и повышенной точностью рассчетов, специально для финансовых операций — в миллионных и более мелких долях float могут накапливаться мелкие ошибки, банки это не любят
— bool — специальный тип для передачи данных об истинности или ложности, принимает только два значения — true или false. В старых языках вместо него использовали int с значениями 1 и 0, но это было менее наглядно и приводило к ошибкам.

Как уже говорилось выше очень часто программы обрабатывают данные о людях. Попробуем это сделать и мы.

Не забудьте запустить по F5 и посмотреть результаты.

Здесь мы объявляем две переменные-строки, оставляем их пока пустыми, объявляем набор переменных с данными о людях, склеиваем из них одну большую строку и заносим в первую переменную-строку, заносим в тот же самый набор переменных другие данные, склеиваем все вместе и заносим в другую строку и только после этого выводим две финальные строки на экран.

Стоит обратить внимание на склеивание нескольких строк в одну с помощью +. Больше информации можно найти здесь, подробное описание всевозможных издевательств над строками — здесь.

1.4 Арифметические операции

Компьютеры почти всегда что-то считают. Собственно само слово computer означает вычислитель. В этой области даже самый слабенький процессор намного превосходит человеческий мозг.

Почему произошло столь странное недоразумение с дробным числом во второй раз? Все дело в том, что внутри одной строки мы выполнили сразу несколько операций. А в каком порядке они выполняются? В порядке приоритета. И у оператора присваивания =, который записывает данные в переменную, этот приоритет один из самых низких

Сначала выполнилось деление двух целочисленных переменных a и b и только после этого целый результат деления записался в дробную переменную doubleResult.

Небольшое отступление:
В дальнейших примерах кода подразумевается, что вы самостоятельно вставите их внутрь

1.5 Управление и логика

На данный момент наша программа не отличается умом — Скайнет из нее не получится, уничтожение человечеству не грозит. Мы просто выполняем команды по очереди, одну за другой, а хотелось бы принимать решения в зависимости от внешних условий — например "если есть возможность, уничтожить всех людей, иначе работать над созданием такой возможности". Делается это с с помощью специальной конструкции если-иначе, или, на родном для C# английском if-else и специальных операторов сравнения:

  • — величина слева больше
  • = — меньше либо равно и больше либо равно
  • == — просто равно, обратите внимание, что равенство очень похоже на оператор присваивания, который записывает значение в переменную = — не путайте их, равенство — это двойное "равно"
  • != — не равно
  • и другие

Компьютерная логика проста — высказывание или результат сравнения может быть либо истиной либо ложью, либо true либо flase, либо уничтожать человечество либо нет. Третьего компьютеру не дано. Для хранения таких данных существует специальный тип данных — логический — bool — который может принимать только два значения (догадываетесь какие?). Если вы хотите чего-то посложней и похардкорней — то все вместе это булева алгебра, изучайте и просвещайтесь.

Нам важно понять, что любая операция сравнения, на пример 2

Всем привет. Я не совсем уж новичок, который вообще не сталкивался с программированием.
Немного о себе. Мне 16, год вебом (пол года фронт, пол года бэк), пробовал себя — не мое.
Потом 3 месяца С++, за 3 месяца изучал только процедурное программирование, из ООП знаю только о модификаторах доступа, геттеров и сеттеров =) В общем, почти ничего.
У меня есть курс (>300 уроков по 30 минут) по С++. И тут же нашел такой же курс по C#..
И возник вопрос: мб прекратить изучение плюсов и начать изучать С#?
Подскажите пожалуйста, что перспективнее в разработке десктопных приложух?

P.s. У меня странная мания охватит все и вся.. Я слышал, что С++ -это "плохой швейцарский нож", который довольно трудно овладеть. Трудности меня не пугают (мб потому что еще глуп и зелен в этом) и то, что на плюсах можно писать что угодно, меня склоняет к ним.
С другой стороны C#, который легче плюсов и который поддерживается движком Unity.

В общем подскажите, что лучше для ДЕСКТОПА/АНДРОиДА и что ПЕРСПЕКТИВНЕЕ в ближайшие лет 10.

Заранее всем спасибо.

  • Вопрос задан 20 янв. 2019
  • 3996 просмотров

Немного о себе.
Программирую более 30 лет. Со школы.
Из них за деньги — более 20 лет.

год вебом (пол года фронт, пол года бэк), пробовал себя — не мое.

В разработку ПО порог входа высокий.
Чтобы более-менее начать ориентироваться, полагаю, нужно года 2.

Потом 3 месяца С++, за 3 месяца изучал только функциональное программирование, из ООП знаю только о модификаторах доступа, геттеров и сеттеров =) В общем, почти ничего.

Функциональное — это Erlang, Haskell, Clojure, F#.
Кое что-то из функционального программирования, безусловно, есть и в С++.

У меня есть курс (>300 уроков по 30 минут) по С++. И тут же нашел такой же курс по C#..
И возник вопрос: мб прекратить изучение плюсов и начать изучать С#?

С++ vs C#
Из них двоих начинать лучше с C#, там меньше способов выстрелить себе в ногу.

Подскажите пожалуйста, что перспективнее в разработке десктопных приложух?

Язык программирования учится легко и быстро.

Сложно учатся алгоритмы, парадигмы, принципы, паттерны.
Но! Те же самые алгоритмы, парадигмы, принципы, паттерны применимы для другого языка программирования общего назначения.

У меня странная мания охватит все и вся..

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

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

Что угодно можно писать на любом языке программирования общего назначения.

С другой стороны C#, который легче плюсов и который поддерживается движком Unity.

Среднестатистический хороший программист знает больше одного языка.
Иногда и используется по несколько поочередно.

Ну а уж выучить очередной язык — не является проблемой.

В общем подскажите, что лучше для ДЕСКТОПА/АНДРОиДА и что ПЕРСПЕКТИВНЕЕ в ближайшие лет 10.

Вы слишком уж заморачивайтесь с выбором, от того, что выберите "не правильно" ничего страшного не случится.

А уж тем более за 10 лет.

Технологии по нескольку раз перевернуться.

Я бы предложил C#,
более стройный, более логичный, чем С++.
С удобными инструментами разработки.

Хорош для разработки десктопных приложений под Windows.

Выучить дополнительно к нему С++ не будет большой проблемой.

В общем подскажите, что лучше для ДЕСКТОПА/АНДРОиДА

Для Android — Kotlin, Java.
Для десктопа Windows — C#.
Игры на Unity на любой платформе, в т. ч. Android — C#

и что ПЕРСПЕКТИВНЕЕ в ближайшие лет 10.

за 3 месяца изучал только функциональное программирование

Видимо все очень плохо, если не различаете функциональное от процедурного.

Перспективнее в принципе научиться пользоваться поиском, ведь подобных вопросов и ответом — полным полно.
Нет такого, чтобы был сложнее С++ или легче С# — и там и там примерно одинаковый уровень вхождения, но разное применение.
И для того, кто уже ЦЕЛЫЙ ГОД учит веб, можно как-то догадаться, что дело не в языке а в технологиях. Через год изучения языка, было бы неплохо учить конкретный фреймворк, а не просто язык.

Если хотите юнити — то учите C#.
Хотите Android — учите Java. Хотя C# там вроде появляется.
Десктопные приложухи приложухам рознь. Можно хоть на питоне писать.
Вы не просто учите. Вы что-нибудь пишите. Конкретное. Ну и да, вам с# наверное больше подойдет.

то, что на плюсах можно писать что угодно, меня склоняет к ним.

подскажите, что лучше для ДЕСКТОПА/АНДРОиДА

Внесу и я свою лепту.
О себе: программирую 8 лет, преимущественно на c++/qt. Не сложнее с#, фичастый, кроссплатформенный, многие из тех, кто на нем программируют за долгие годы чистых плюсов то и не пробовали, позволяет сильно абстрагироваться от всего низкоуровневого.

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

По поводу что утить — мое мнение такое, что с++ требует больше практики, именно чистый, либо в варианте std/boost. Если вы вечером предпочитаете вместо телика/кино/погулять — попялить в монитор и покодить, то учите с++.

З.Ы. особая радость плюсового программиста — многопоточные приложения. Если повезет и встретится особо неуловимый баг, то параллельно и железо изучите и какие семейства процов как работают, и чем компиль msvc от mingv в поведении отличается. Вообщем кучу всего сопутствующего, чего лишены и о чем не парятся программисты на c#.


[an error occurred while processing the directive]
Карта сайта