Форум » C# и платформа .NET » Пример простой программы на C# и полезная ссылка для изучения C# » Ответить

Пример простой программы на C# и полезная ссылка для изучения C#

Сыроежка: Обычно знакомство с языком программирования начинается с демонстрации простейшей программы, которая выводит строчку "Hello World" на консоль., Эта программа позволяет получить первые представления о том, как выглядет код на данном языке программирования. Поэтому для тех, кто не знаком с C#, но заглянет в этот раздел из любопытства, я решил привести код этой простейшей программы, а также дать ссылку на книгу, содержащую введение в C#, которая доступна в интернет. Вот код программы. [pre2] class HelloWorld { static void Main() { System.Console.WriteLine( "Hello World!" ); } }[/pre2] Эту программу можно запускать как из среды MS Visual Studio, так и из командной строки. В последнем случае необходимо в меню "Пуск" выбрать пункт "Все программы". Затем выбрать пункт "Microsoft Visual Studio" той версии, которая у вас установлена на компьютере, а в меню, относящемуся к Visual Studio, выбрать пункт "Visual Studio Tools", и в перечне инструментов (Tools) выбрать "Командная строка Visual Studio". Появится консольное окно в котором вы можете запускать консольные рограммы на C#. Желательно изменить размер шрифта для этого консольного окна, чтобы выводимый текст в окне был более заметен. Я исользую размер шрифта 12x16. Вот пример более содержательной консольной программы на C#, которая выводит введенное пользователем неотрицательное число в обратном порядке цифр. Работа программы будет продолжаться до тех пор, пока пользователь в качестве числа не введет 0. [pre2] class ReverseNumber { static void Main() { while ( true ) { const uint base10 = 10; uint x = 0, y = 0; System.Console.Write( "Enter non-negative number (0 - exit): " ); string value; value = System.Console.ReadLine(); x = uint.Parse( value ); if ( x == 0 ) return; do { y = base10 * y + x % base10; } while ( ( x /= base10 ) != 0 ); System.Console.WriteLine( "The reverse number: " + y ); } } } [/pre2] Те, кто знает языки программирования C/C++, могут найти много общего между этими языками и C#. Для ознакомления с C# можно скачать книгу на английсокм языке в формате PDF. Это книга Rob Miles "Programming C#". Она содержит 201 страницу, и ее можно прочитать за неделю. Не надо особо стремитсья выполнить код, приведенной в книге. Вполне достаточно для первого знакомства просто читать текст книги и смотреть, какие приводятся примеры. Дело в том, что если пытаться набирать примеры из книги, то они часто не согласуются с предыдущим кодом, относящемуся к одному и тому же проекту программы. То есть автор просто показывает некоторые обрывки кода, которые демонстрируют ту или иную идею. Вот эта ссылка Нужно на сайте выбрать пункт для загрузки "Rob Miles CSharp Yellow Book 2012.pdf (2.4M)"

Ответов - 9

ололеша: интересно, с чего это ты за шарпы взялся?) неужто понял, что микрософт на кресты забила?) функциональщину лучше продвигай, хотя бы тот же F#, если такой уж фанат виндов. это я даже почитаю :) или nemerle, тоже интересный язык.

Сыроежка: C# и .NET сейчас являются ключевыми технологиями для Windows, которые интенсивно развиваются. Поэтому, думаю, что каждому программисту следует быть с ними знакомыми. Более того это позволяет понять, откуда, например, новые возможности в C++ появились, так как развития этих языков, C# и C++, влияют дру на другу. И раз раздел на форуме создан, то его следует наполнять сообщениями.

ололеша: F# и Nemerle языки, так же заточенные под дот нет. Более того это позволяет понять, откуда, например, новые возможности в C++ появились, так как развития этих языков, C# и C++, влияют дру на другу. глупости. ц-шарп никоим боком на кресты не влияет. кресты на шарп - да. вот как раз изучение функциональщины и позволяет понять, откуда в с++11 новые возможности, во всяком случае часть из них. что такое лямбда функция, замыкание, каррирование, и почему в крестах функциональщина плохо реализована. Поэтому, думаю, что каждому программисту следует быть с ними знакомыми каждому программисту-виндузятнику ты хотел сказать?


Сыроежка: Я считаю, что любому программисту полезно быть знакомым с этими технологиями, так как они идейно обогащают. Я не согласен с тем, что C# и C++ не влияют друг на друга. Я как раз вижу их синхронное развитие, как, например, использование auto в C++ и var в C#. Так как председатель комитета по стандартизации C++ работает в Майкрософт над пакетом Visual Studio, то естественно предположить, и это заметно, что он обобщает те идеи, которые используются в обоих языках.

ололеша: как, например, использование auto в C++ и var в C#. вывод типов в функциональных языках был задолго до появления шарпа. в крестах он появился из-за добавление функциональной парадигмы в стандарт, шарп тут ни при чем. Я считаю, что любому программисту полезно быть знакомым с этими технологиями, так как они идейно обогащают. ой не смеши. идейно обогащают haskell, scheme, cl, F#, даже D (контрактное программирование, юнит тесты). c# - чисто энтерпрайзный язык. прочитал за неделю литературку и вперед кодить базы данных и рисовать окошки.

Сыроежка: ололеша пишет: c# - чисто энтерпрайзный язык. прочитал за неделю литературку и вперед кодить базы данных и рисовать окошки Мне бы ваш оптимизм! А то я имею, к примеру, книгу "C# 2005 и платформа .NET 3.0 для профессионалов", в которой более 1400 страниц, и за неделю я осилил только 120 страниц. Если предположить, что в день можно прочитывать около 20 страниц, а это на самом деле достаточно много, если выполнять примеры кода, то, чтобы прочитать эту книгу целиком, понадобится 70 дней.

ололеша: 2Сыроежка ты знаешь, Фаронов в свое время тоже талмуды по делфе писал (а может и сейчас пишет, не знаю) на 1000 страниц, описывая в них все стандартные компоненты. чтобы начать работать с языком не нужно сразу знать тонны библиотек (в данном случае все библиотеки .NET) и все тонкости языка. мне, имеющему опыт в крестах и жабе хватило пару глав из Шилдта (http://www.ozon.ru/context/detail/id/5532458/), чтобы написать тривиальный бд-клиент. а дальше - только опыт работы с языком, изучение "вширь", но не "вглубь", ничего принципиально нового не узнаешь. хотя человеку, не знакомым с настоящими функциональными языками действительно может показаться, что шарп их чем то "обогащает". если только макулатурой :)

Сыроежка: Это мне часто приходилось слышать за свою жизнь, что достаточно прочитать названия книг, и ты станешь профессиональным програкммистом. Но мой жизненный опыт говорит о другом, что на самом деле программист за свою жизнь может сделать очень мало. Например, мне, чтобы написать простой класс на С++ для себя лично, потребовалась целая неделя. Я постоянно возвращался к коду и находил либо изъяны, либо возможность усовершенствовать код. И только через неделю, а, точнее, через дней десять, мне нечего было в него добавить. Это очень простейший класс. Я лично не знаю, где те гении, которые, как вы, способны так быстро осваивать новые технологии. Так как если следовать логике, то должны быть тонны прерасного кода. А я на работе постояннно сталкивался с тем, что мне приходилось весь код переписывать за другими, так как их код заслуживал лишь быть помещеннным в мусорное ведро. И главная причина состояла именно в том, что люди, писавшие этот код, на самом деле не знали того языка, на котором писали. То есть они использовали конструкции языка и, наверное, считали также, как и вы, что чтобы начать работать с языком достаточно прочитать начальные главы пары книг.. Но тем не менее результат их работы был плачевным. Чтобы было понятно, как мало на самом деле может сделать программист, то я приведу пример из своей практики. Как-то на большом вдохновении я переписал всего лишь один модуль из проекта, который насчитывал около четырех тысяч строк. В процесс я втянулся потому, что обнаружил в этом модуле с десяток багов и, постепенно исправляя их, переписал весь модуль. Практически, никаких технических трудностей не было. То есть не было ситуаций, когда ты просто не знаешь, как писать код или что делать. Так на это переписывание у меня ушло пять месяцев. Причем, как я уже сказал, все это было сделано на одном дыхании. Если бы меня попросили оформить документацию к измененному модулю, как это обычно в серьезных конторах делается, то на составлении документа ушло бы еще около двух месяцев. К тому же надо учитывать замечания других программистов по составленному документу и, возможно, по самому коду. Может быть кто-то был бы не согласен с какой-нибудь частью кода. В результате на все это в совокупности было бы потрачено не меньше семи месяцев. Очевидно, что после такой напряженной работы наступает спад, требуется некоторый отдых и отвлечении от проделанной работы. Теперь оценим, сколько за год программст сможет выполнить работы с подобным напряжением сил. В лучшем случае он выполнит за год две подобных работы. Но в результате в следующем году из-за усталости он не сможет сохранить тот же самый темп. Замечу мимоходом, что в том проекте, где был этот модуль, таких модулей около 400. Я, фактически, сделал 1/400, чтобы качественно переписать модуль. Воозникает вопрос, а смог ли я вообще качественно переписать модуль, если бы мои знания опирались на нескольких начальных глав пары книг по тому инструменту, то есть языку, который я использовал? Лично я нисколько не сомневаюсь, что это сделать невозможно. Почему? Да потому что я что-то нигде не вижу качественного кода за очень редким исключением. Зато имеется очень много программистов, которые знают все, что существует в области информационных технологий. Почитаешь их анкеты и поражаешься: когда они только все это успели изучить?! А когда знакомишься с их кодом, как они пишут программы, то видешь, что имеешь дело с полными дилетантами, которые на самом деле за свою жизнь ничего серьезного не написали. То есть нет у них того кода, которым можно гордиться и не стыдно показывать другим. Так, какие-то поделки, по которым давно заждалось мусорное ведро.

Сыроежка: Я бы еще хотел добавить, что даже если вы знаете близкий к C# язык, а потому в языке C# вам многое знакомо и дается легко, тем не менее вы все равно должны получить информацию о синтаксисе и семантике этого языка. Она сама к вам в голову из воздуха не попадет. Я в предыдущем своем сообщении упоминал книгу "C# 2005 и платформа .NET 3.0 для профессионалов". Хотя эта книга называется претензиционно "для профессионалов", но мы с вами хорошо понимаем, что эта книга содержит на самом деле начальные базовые сведения по языку C#. Это не важно, откуда вы будете черпать информацию по C#, из этой книги, из других книг, или еще каких-то источников, но в любом случае вам придется прочитать объем текста, сопоставимый с объемом этой книги, так как в ней ничего лишнего не дается, Более того многое дается вскользь. Поэтому пока вы не "проглотили" подобный по объему материал, о вас нельзя будет сказать, что вы обладаете начальными базовыми сведениями по языку. Например, чтобы ответить на вопрос, есть ли в C# аргументы по умолчанию, или чем отличается модификатор параметра out от модификатора параметра ref, и что вообще такие модификаторы параметров в C# существуют, вам это надо откуда-то вычитать. Поэтому чтобы просто получить начальные базовые сведения по языку, фактически, вам надо ознакомиться с материалом, который сравним по объему с этой книгой, то есть около 1500 страниц текста. Кроме того желательно их прочитать не как художественную литературу, а выполнять некоторые примеры кода. Поэтому только на одну такую книгу уйдет около трех месяцев. Причем я на полном серьезе утверждаю, что это оптимистическая оценка. Так как на самом деле не каждый день удастся почитать книгу. Хватает и других проблем и хлопот в жизни. Есть большая разница между легкостью вхождения в новый предмет, такой, как язык программирования, и тем временем, которое в любом случае надо потратить на ознакомление с его полным описанием. Прочитав книгу, которую я назвал, или аналогичную ей, вы получите только начальные базовые сведения о языке. Желательно закрепить эти знания и еще прочитать одну или пару книг по пройденному материалу. А это означает, что можно говорить о вас, я имею в виду любого человека, приступившего к изучению C#, что вы действительно знаете C#, то есть его начальные базовые синтаксические и семантические особенности, не ранее, чем через полгода, каким бы знатоком в программировании вы не были бы. Просто есть определенный объем информации, и есть вполне определенное время, за которое этот объем можно "проглотить" чисто технически. Как в задаче по арифметике: есть ванна определенного объема, и есть кран, который в минуту выливает определенное количество воды. Спрашивается, через сколько времени ванна будет заполнена.



полная версия страницы