Новости

10 апреля 2011

Вышла новая сборка программы NVDA

                Уже прошло несколько лет , как по…

10 апреля 2011

Интеграция-клуб незрячих пользователей компьютеров

                Сейчас никого не удивишь домашним компьютером . Наверное н…

10 апреля 2011

Компания

                          …

10 апреля 2011

Речевые технологии-новости и достижения

Речевые технологии - технологии ХХI ВЕКА благодаря которым появилась возможность управлять компьютером с по…

14 апреля 2011

Windows 7-это стабильность и высокая производительность !

 Что представляет собой Windows 7?Ваш компьютер стал проще и удобнее.Система Windows 7 удобна, производительна и ув…

14 апреля 2011

Thunder-ещё одна бесплатная программа экранного доступа

                 В настоящее время существует великое множество програм…

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

Имя отправителя *:
E-mail отправителя *:
Тема письма:
Текст сообщения *:
Код безопасности *:

Почта tiflosoft

Логин:
Пароль:

(что это)

            Внимание ! Для знакомства с содержанием учебника «Путь программирования C+ « материал представлен в сокращённом виде . В полном объёме его можно скачать на странице "Документация" .




Учебник «Путь программирования C+ «




О учебнике

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

Как можно догадаться из названия учебника, он посвящён языку C++. Первый вопрос, который встаёт перед каждым, наверно, - почему именно C++. Причина проста - это мой любимый язык. Можно конечно спросить, за что я его люблю. Но разве любят за что-то? Любят просто так. Вообще тема выбор языка программирования это первый вопрос, который встаёт перед каждым начинающим программистом, перед тем кто только становится на путь программирования. Замечу, вопрос очень важный, но в то же время вопрос без ответа. Некоторые свои рассуждения по этой теме, в том числе насчёт работодателей и будущего языков, я выкладываю в следующем топике.

Кстати, топик означает статья, обсуждение некоторой темы - думаю знаете. Если нет, то читать мой учебник, наверно, будет тяжеловато. Дело в том, что тяжело писать подобные вещи по программированию без использования общекомпьютерной, а также программисткой лексики. Да и глупо, так как многие нормальные ресурсы используют эту лексику по простой причине - это естественный (на сегодня) язык программиста. Но я всё же думаю, что раз вы ещё читаете моё творение, значит название вас не испугало, а значит вы сможете нормально читать мои уроки. Если нет, то запаситесь каким-нибудь словариком программиста, благо сейчас таких в интернете валом. Также неплохо иметь словарик (или переводчик) английского языка. Как минимум по двум причинам. Во-первых, многие книги, мануалы, сайты и документации по программированию проще достать на английском языке, а иногда на русском просто невозможно, или (что бывает очень часто) возможно достать лишь в испорченном и неполном виде. Поверьте мне, нормальный английский текст при небольшой привычке читается гораздо лучше кривого и зачастую ошибочного русского. Достаточно знаний английского на 'программистском' уровне (заверяю: мой уровень не так уж велик ). Вторая же причина - небольшие знания английского языка упрощают восприятие программисткой и компьютерной лексики. Например: дебаггер, топик, инстансировать, продефинить, сорсы, темплейт, регексп, синглетон и др.

Теперь немного о структуре моего учебника. Как я в итоге понял, главное, что её характеризует это естественная непредсказуемость. Хотя общий план есть. Учебник поделен на разделы, в каждом разделе можно найти сколько-то уроков (про количество пока ничего не могу сказать, так как на момент написания этого топика была закончена лишь первая часть). В конце урока могут быть разные дополнения: файлы к уроку, ссылки на веб-ресурсы, упражнения и т. д. Не секрет, что одним из наиболее обширных источников информации по программированию является майкрософтский ресурс MSDN (Microsoft Developer Network - майкрософтская сеть разработчика). Периодически выпускается оффлайновая дисковая версия с собственным браузером (на иешном движке), который убыстряет поиск информации (за счёт дополнительных инструментов). Рекомендую купить. Последняя версия входит в поставку MS Visual Studio 2005 (о том, что это за зверь - чуть позже). В этой версии значительно усовершенствован поиск (хорошая настройка критериев поиска, удобный вывод результатов в стиле инетовского поисковика, возможность сохранения результатов для последующего быстрого восстановления), поэтому желательно достать именно её. Иногда бывают проблемы с установкой MSDN (как впрочем и VS, т. е. Visual Studio) - инсталлер просит вас вставить диск, жалуюсь что некоторый файл не найден на диске (на самом деле он там есть). Решение для этого простое - скопируйте дистрибутив на винчестер, установите MSDN (или VS), а затем удалите дистрибутив. Во многих уроках я привожу названия статей из MSDN. Замечу, что вначале я приводил адреса, но дело в том, что в 2005-ой MSDN-ке адреса страничек стали не очень читабельные (имена страниц ХТМЛ состоят из бессмысленного набора цифр и букв), поэтому я даю названия, они вроде в основном сохранились. Юзайте Search.

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

  • MSDN - ну про это уже сказал.
  • RSDN (Russian Developer Network) - несмотря на название это не перевод MSDN, а независимый ресурс. Здесь вы можете найти много довольно неплохих статей, есть форум (правда, по-моему, жутко неудобный), раздел проектов и др.
  • Винград - самый крупный русскоязычный форум программистов с оригинальным дизайном. VPF - это про него (Vingrad Programmers Forum). Там же можете встретить и меня 
  • Исходникиу - достаточно обширный русскоязычный портал для программистов. Множество отличных статей, исходников, неплохой форум, а также множество других проектов (например, algolib - неплохая коллекция алгоритмов).
  • Первые шаги - довольно неплохое собрание статей, единственный недостаток - небыстрое обновление (некоторые статьи морально устаревают). Замечу, что на винграде есть проект WorldCPP, включающей множество статей и исходников, в том числе с этого сайта.
  • Алголист - пожалуй, лучшая коллекция алгоритмов на русском языке.
  • CodeGuru - популярный англоязычный ресурс.
  • CodeProject - ещё один англоязычный портал. Более молодой чем CodeGuru, но очень энергично развивающийся. Я лично его бы оценил на пять с плюсом.
  • SourceForge - главный портал движения Open Source (открытые сорсы, т. е. исходники). Здесь вы можете скачать кучу бесплатных программ, а зарегившись их исходники (причём программы любого спектра: от графических утилит и кодеков до программистских библиотек и утилит). Также вы можете присоединиться к одному из проектов.

Ну, для начала, я думаю, хватит. Идём дальше!

Описание: Предыдущий топик

 

Описание: Следующий топик


Языки программирования: объективный взгляд.

Из предыдущей статьи вы наверно уже поняли, что мой любимый язык программирования - это C++. Поэтому, наверно, название этого топика выглядит нелепо или надумано. Но это вовсе не так. Наверно, у большинства программистов когда-нибудь наступает такое состояние, когда он понимает, что этот язык - его язык. Почему для меня это C++? Очень сложно ответить. Может в этом виновато время, отданное мною этому языку, тогда ещё по субъективным и неубедительным, я бы даже сказал ошибочным убеждениям. Может судьба у меня такая, так сказать, врождённое. Не знаю. Но я уверен, что это - мой любимый язык.

В то же время не следует понимать это состояние как какую-то зависимость или программистскую слепоту. Напротив, ты готов признать и уважать множество других языков. Сколько вообще сейчас объективно существует языков общего программирования? Я исключаю процедурные языки, предназначенные для специфических задач (например, C или FORTRAN), языки веб-скриптинга (вроде PHP или Cold Fusion), языки логического программирования (Prolog), скриптовые языки (Perl, Python, Ruby) и т. д. То есть я не беру во внимание языки, предназначенные для специфических задач, я говорю об основополагающих объектно-ориентированных языках, имеющих право на существование. Наиболее жесткие судьи, посмотрев на текущее состояние рынка ПО, скажут, что таких языков 3: C++, Java и C#. Некоторые скажут, что таких языков 4 (здесь уже два варианта). Но, если смотреть с объективной стороны, забыв о собственных предпочтениях (а настоящему программисту это довольно таки несложно, хотя иногда и обидно), то получается другая цифра - 5. К тройке общепризнанных добавляются ещё два: Delphi и Visual Basic .NET. За последние 3-4 года эти языки изменились довольно сильно (по сравнению со старыми Delphi и VB), и обрели мощную, стройную дотнэтовскую модель ООП (объектно-ориентированного программирования), которая достойна стоять на уровне с уже классическими моделями C++ и Явы (в Delphi можно разрабатывать и не дотнэтовские приложение, но идеи языка были изменены именно из-за .NET).

По этому поводу надо сказать пару слов о .NET (принято читать как "Дот НЭТ".) Одна из идей этой технологии является вариацией на тему байт-кода Явы, т. е. придуман абстрактный набор команд для абстрактной машины. С одной стороны этот байт-код низкоуровневый, так как вычисление элементарного арифметического выражения разбивается на цепочку команд, оперирующих с виртуальными адресами. Но в то же время, в байт-коде содержится структура классов и весь интерфейс программы. На самом деле байт-код - это явовская терминология, а вообще его принято называть управляемым кодом (managed), т. е. выполнение этого кода выполняется отдельной машиной, поэтому легко, скажем запретить выполнение каких-либо операций для этой программы (от доступа к вашим личным файлам и опроса портов сети до манипуляций большими блоками данных памяти и использования математических функций), легко в любой момент зачистить ресурсы, которые забыла освободить программа (поэтому в управляемых языках их просто не принято, а зачастую невозможно освобождать), этот процесс называется чисткой мусора. Ещё один плюс - кроссплатформенность (при условии реализации виртуальной машины на этой платформе). Главный минус, как несложно догадаться, - более низкая производительность. Но спешу заметить, что эти плюсы и минусы - это лишь первый взгляд на проблему, при более детальном рассмотрении убеждаешься, что они не столь значительны. Можно и на яве поднять производительность, можно и на C++, при наличии хорошей библиотеки, использовать внешнюю защищённость, чистильщик мусора и кроссплатформенность. Для последнего, правда, придётся скомпилировать программу (одну и ту же программу) для разных платформ и распространять несколько дистрибутивов. Но, на практике, и на яве приходится очень часто обращаться к специфическим сервисам конкретной платформы. Более того в C# (насчёт Явы не могу сказать) есть так называемый unsafe-режим, то есть вы отказываетесь от чистильщика и прочего ради некоторых других возможностей. В общем, объективно эти плюсы и минусы абсолютно ничего не стоят. Ниже я ещё вернусь к этому.

Ну, вот придумали этот дотнетовский псевдокод (он называется MSIL). А затем, решили, что если для обычного нэтив-кода (native - родной, природный) существует столько много языков, то почему бы не создать несколько языков для .NET. Ну, вот и создали. Их на самом деле чрезвычайно много (из неназванных - Visual J#, JScript .NET, Python .NET, PHP .NET, Perl .NET, и т. д.), но просто большинство получились ненужными (то же было в своё время и с нэтивными языками). Есть ещё такая вещь, как C++/CLI - это спецификация, разработанная комитетом ECMA, предлагает несколько изменённый C++ для абстрактной машины, единственная его реализация на сегодня сделана MS и предназначена для виртуальной машины .NET.

И вот, ты признаёшь равенство (!) всех этих языков с твоим языком, но понимаешь, что все остальные для тебя чужие. Да, ты готов спорить с любым, что Delphi умер, а попытка возрождения в виде Delphi .NET бессмысленна, что Basic вообще не язык, а VB .NET лишь MS-шное извращение, что C# - это только рекламный трюк, обречённый на погибель, что Ява - это жуткие и никому ненужные тормоза и т. д. И в таком споре с обоих сторон будет приведено тысячи неоспоримых аргументов, напечатаны в порыве горы кода, вспомнены множество известных историй, но ... Официальным итоговым решением будет боевая ничью. И логически понимаешь, что это единственный объективный результат. Хотя каждый внутренне будет считать, что несмотря на официальный результат, очевидно, что он победил. Каждый будет гордится, как ловко он обставил оппонента и какой красивый код он написал. Каждый будет доволен и останется при своём мнении. Это практика и статистика.

Да, принято считать, что C++ будет лучшим решением для программ, критичных к производительности и программ, работающих с более низкоуровневыми вещами, C# - для быстрого написания энтерпрайз-приложений (энтерпрайз-приложениями называют приложения, которые в основном занимаются отображением и редактированием данных из БД, на основе SQL или другого языка запросов), Java - для кроссплатформенных и сетевых энтерпрайз-приложений. Но, откровенно, говоря, на практике, всё это полный бред. Наиболее быстро вы будете писать на том языке, который лучше всего знаете и (что немаловажно) любите. Подчёркиваю, именно язык, а не какие-либо библиотеки или технологии, это всё выучивается при необходимости не так уж и долго, а зачастую уже во время работы над проектом.

Не думайте, что написав более-менее приличную программу на C++, который вы не знаете, вы получите более шуструю программу, чем на тормозной Яве, которую вы знаете. Да, вы получите выигрыш на классических общих алгоритмах, но главная задача - проектирование, скорей всего на C++ будет сделана в идеологии Явы, думаю результат понятен. Вспоминается рассказ одного программиста. Дело было ещё во времена старого VB (замечу, что его производительность автоматически была раза в 3-4 (!) ниже, чем обычных языков), какую-то объёмную по вычислениям задачу программер написал на C++, как того требовалось в институте. Затем он вспомнил о родном VB и интереса ради написал это дело в ВБ-шном стиле. Производительность выросла раза в 1,5! Он рассказал об этом преподавателю. На следующий день препод принёс решение этой задачи на Javascript. Напомню, что все преобразование скрипта в бинарный вид (всех команд, чисел и др.) происходит во время выполнения программы, но несмотря на это, как вы, наверно, догадались, программа работала ещё быстрее!

Не надо также думать, что сев за C# вы значительно ускорите разработку энтерпрайз-приложений. Максимум, вы быстро сгенерируете заготовку визардом Microsoft Visual Studio или Borland Developer Studio, затем неделя уйдёт на изучение полученного кода. Ещё две недели на решение общих проблем, не связанных непосредственно с энтерпрайзом, а такие проблемы точно будут и немало. Ещё две недели на создание своего нормального каркаса. После безуспешных попыток вы либо начнёте нормально изучать C#, либо перейдёте на родной C++.

Хотя оба этих примера представляют из себя крайние случаи, но на практике всё происходит очень похоже. Когда-то я, как и многие начинающие, не хотел этому верить. Несмотря на мнения действительно опытных программистов, я упорно говорил о главных фичах C++: скорости и возможности лёгкого дост

Сделать бесплатный сайт с uCoz