Системные и прикладные программисты

Системные и прикладные программисты едут на конференцию.
Встречаются у касс вокзала, где и те и другие берут билеты. Прикладники покупают по билету на нос, системщики берут один билет. Удивленные прикладники спрашивают:
— У вас что, только один человек едет?
— Да нет. Все.
— А как же вы?
— А это наши трудности.
В поезде прикладники занимают места согласно купленных билетов за полчаса до отправления. За 45 сек. До отхода появляется стая системщиков. С криками <Мы товарища провожаем> вся толпа врывается в вагон закрывается в туалете. Поезд трогается. Контроллер подходит к туалету и стучит. Высовывается рука, протягивает билет. Через некоторое время системщики, как тараканы, расползаются по поезду.
Едут обратно. Опять встречаются на вокзале. Наученные опытом прикладники берут один билет. Системщики билета не берут. За 45 сек до отхода врывается толпа прикладников и запирается в туалете. Поезд трогается. Стук в дверь туалета. Высовывается рука, протягивает билет.
Системщик хватает билет и бежит в другой туалет.
Комментариев: 0

История C/C++

История C/C++ 

Благодаря чему сложился такой статус языка С? Исторически этот язык неотделим от операционной системы Unix, которая в наши дни переживает свое второе рождение. 60-е годы были эпохой становления операционных систем и языков программирования высокого уровня. В тот период для каждого типа компьютеров независимо разрабатывались ОС и компиляторы, а нередко даже свои языки программирования (вспомним, например, PL/I ).

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

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

Есть, впрочем, еще один фактор, определивший успех языка. Создатели очень умело разделили в нем машинно-зависимые и независимые свойства. Благодаря этому большинство программ удается писать универсально — их работоспособность не зависит от архитектуры процессора и памяти. Немногочисленные же аппаратно-зависимые части кода можно локализовать в отдельных модулях. А пользуясь препроцессором, можно создавать такие модули, которые при компиляции на разных платформах будут порождать соответствующий машинно-зависимый код.Много споров вызывал синтаксис языка С. Примененные в нем приемы сокращения записи при неумеренном использовании могут сделать программу совершенно нечитаемой. Но, как говорил Дейкстра, <на любом языке можно написать фортрановскую программу> — средства не виноваты в том, что их безграмотно используют. На самом же деле, предложенные в С сокращения синтаксиса соответствуют наиболее часто встречающимся на практике стереотипным ситуациям. Если считать сокращения идиомами для выразительного и компактного представления таких ситуаций, то польза от них становится безусловной и очевидной.Итак, С возник как универсальный язык системного программирования. Но он не остался в этих рамках. К концу 80-х годов язык С, оттеснив Fortran с позиции лидера, завоевал массовую популярность среди программистов во всем мире и стал использоваться в самых различных прикладных задачах. Немалую роль здесь сыграло распространение Unix (а значит и С) в университетской среде, где проходило подготовку новое поколение программистов.Как и все языки, С постепенно совершенствовался, но большинство усовершенствований не носило радикального характера. Наиболее существенным из них, пожалуй, следует считать введение строгой спецификации типов функций, которая значительно повысила надежность межмодульного взаимодействия на С. Все такие усовершенствования были в 1989 году закреплены в стандарте ANSI который и поныне определяет язык С.

Но если все так безоблачно, то почему же еще продолжают использоваться все остальные языки, что поддерживает их существование? Ахиллесовой пятой языка С стало то, что он оказался слишком низкоуровневым для тех задач, которые поставили на повестку дня 90-е годы. Причем у этой проблемы есть два аспекта. С одной стороны, в язык были встроены слишком низкоуровневые средства — прежде всего это работа с памятью и адресная арифметика. Недаром смена разрядности процессоров очень болезненно отражается на многих С-программах. С другой стороны, в С недостает средств высокоуровневых — абстрактных типов данных и объектов, полиморфизма, обработки исключений. Как следствие, в программах на С техника реализации задачи часто доминирует над ее содержательной стороной.Первые попытки исправить эти недостатки стали предприниматься еще в начале 80-х годов. Уже тогда Бьерн Страуструп в AT&T Bell Labs стал разрабатывать расширение языка С под условным названием <С с классами>. Стиль ведения разработки вполне соответствовал духу, в котором создавался и сам язык С, — в него вводились те или иные возможности с целью сделать более удобной работу конкретных людей и групп. Первый коммерческий транслятор нового языка, получившего название C++ появился в 1983 году. Он представлял собой препроцессор, транслировавший программу в код на С. Однако фактическим рождением языка можно считать выход в 1985 году книги Страуструпа. Именно с этого момента C++ начинает набирать всемирную популярность.Главное нововведение C++ — механизм классов, дающий возможность определять и использовать новые типы данных. Программист описывает внутреннее представление объекта класса и набор функций-методов для доступа к этому представлению. Одной из заветных целей при создании C++ было стремление увеличить процент повторного использования уже написанного кода. Концепция классов предлагала для этого механизм наследования. Наследование позволяет создавать новые (производные) классы с расширенным представлением и модифицированными методами, не затрагивая при этом скомпилированный код исходных (базовых) классов. Вместе с тем наследование обеспечивает один из механизмов реализации полиморфизма — базовой концепции объектно-ориентированного программирования, согласно которой, для выполнения однотипной обработки разных типов данных может использоваться один и тот же код. Собственно, полиморфизм — тоже один из методов обеспечения повторного использования кода.Введение классов не исчерпывает всех новаций языка C++. В нем реализованы полноценный механизм структурной обработки исключений, отсутствие которого в С значительно затрудняло написание надежных программ, механизм шаблонов — изощренный механизм макрогенерации, глубоко встроенный в язык, открывающий еще один путь к повторной используемости кода, и многое другое.Таким образом, генеральная линия развития языка была направлена на расширение его возможностей путем введения новых высокоуровневых конструкций при сохранении сколь возможно полной совместимости с ANSI С.

Конечно, борьба за повышение уровня языка шла и на втором фронте — те же классы позволяют при грамотном подходе упрятывать низкоуровневые операции, так что программист фактически перестает непосредственно работать с памятью и системно-зависимыми сущностями. Однако язык не содержит механизмов, вынуждающих разработчика правильно структурировать программу, а авторы не выпустили никаких систематических рекомендаций по использованию его довольно изощренных конструкций. Не позаботились они своевременно и о создании стандартной библиотеки классов, реализующей наиболее часто встречающиеся структуры данных.Все это привело к тому, что многие разработчики вынуждены были сами исследовать лабиринты языковой семантики и самостоятельно отыскивать успешно работающие идиомы. Так, например, на первом этапе развития языка многие создатели библиотек классов стремились построить единую иерархию классов с общим базовым классом Object. Эта идея была заимствована из Smalltalk — одного из наиболее известных объектно-ориентированных языков. Однако она оказалась совершенно нежизнеспособной в C++ — тщательно продуманные иерархии библиотек классов оказывались негибкими, а работа классов — неочевидной. Для того чтобы библиотеками классов можно было пользоваться, их приходилось поставлять в исходных текстах.

Появление темплетных классов и вовсе опровергло это направление развития. Наследованием стали пользоваться только в тех случаях, когда требовалось порождение специализированной версии имеющегося класса. Библиотеки стали составляться из отдельных классов и небольших несвязанных друг с другом иерархий. Однако на этом пути стало снижаться повторное использование кода, так как в C++ невозможно полиморфное использование классов из независимых иерархий. Повсеместное же применение темплетов ведет к недопустимому росту объема скомпилированного кода — не будем забывать, темплеты реализуются методами макрогенерации.Один из тяжелейших недостатков C++, унаследованный им от синтаксиса С, состоит в доступности компилятору описания внутренней структуры всех использованных классов. Как следствие, изменение внутренней структуры представления какого-нибудь библиотечного класса приводит к необходимости перекомпиляции всех программ, где эта библиотека используется. Это сильно ограничивает разработчиков библиотек в части их модернизации, ведь, выпуская новую версию, они должны сохранять двоичную совместимость с предыдущей. Именно эта проблема заставляет многих специалистов считать, что C++ непригоден для ведения больших и сверхбольших проектов.И все же, несмотря на перечисленные недостатки и даже на неготовность стандарта языка (это после пятнадцати с лишним лет использования!), C++ остается одним из наиболее популярных языков программирования. Его сила прежде всего в практически полной совместимости с языком С. Благодаря этому программистам C++ доступны все наработки, выполненные на С. При этом C++ даже без использования классов привносит в С ряд настолько важных дополнительных возможностей и удобств, что многие пользуются им просто как улучшенным С.Что касается объектной модели C++, то пока ваша программа не стала очень большой (сотни тысяч строк), ею вполне можно пользоваться. Наметившаяся в последнее время тенденция перехода к компонентному программному обеспечению только усиливает позиции C++. При разработке отдельно взятых компонентов недостатки C++ еще не проявляются, а связывание компонентов в работающую систему производится уже не на уровне языка, а на уровне операционной системы.В свете всего сказанного перспективы C++ не выглядят мрачными. Хотя и монополия на рынке языков программирования ему не светит. Пожалуй, с уверенностью можно утверждать только то, что еще одной модернизации-расширения этот язык не переживет. Недаром, когда появилась Java, на нее обратили столь пристальное внимание. Язык, близкий по синтаксису к C++, а значит, кажущийся знакомым многим программистам, был избавлен от наиболее вопиющих недостатков C++, унаследованных им из 70-х годов. Однако не похоже, чтобы Java справлялась с возлагаемой на нее некоторыми ролью <убийцы C++>.Особая роль языков C/C++ в современном программировании практически лишает смысла приведение конкретных адресов в Интернете, где можно найти материалы по ним. Таких мест просто слишком много.
Комментариев: 0

Какие бесплатные C++ компиляторы и IDE к ним существуют.

Какие бесплатные C++ компиляторы и IDE к ним существуют.

Компиляторы:

1) gcc. Под windows лучше всего использовать MinGW, это порт gcc на Windows платформу.

2) Visual C++ 2005 Express Edition. Прямые ссылки на скачивание: www.rsdn.ru/Forum/Message.aspx?mid=1477837#1477837

3) Digital Mars C/C++ Compilers. Довольно неплохой компилятор, но хуже соответствует стандарту чем последние gcc или VC7.1.

4) Borland free compiler. Содержит компилятор и утилиты командной строки.

5) Open Watcom C/C++.

6) LCC-Win32 (Только Си компилятор, C++ не поддерживает).

7) Microsoft Visual C++ Toolkit 2003. полноценный оптимизирующий компилятор VC7.1 без IDE и nmake. В настоящее время заменен на Visual C++ 2005 Express Edition и с сайта Microsoft недоступен, пользуйтесь поиском. Может быть более предпочтителен из-за малого веса(~30 MiB).

 

IDE:

1) Dev-C++. достаточно неплохая IDE для gcc(mingw). В настоящее время развивается как wxDev-C++ в виду интеграции с системой разработки GUI wxWidgets.

2) MinGW Developer Studio — IDE предназначена специально для использования совместно с MinGW. Очень удобна тем, кто разрабатывает программу под Windows и Linux одновременно, т.к. формат проектов один и остаётся только жмакнуть на кнопку компиляции и не мучиться с настройкой разных сред.

3) Code::Blocks IDE. Это наверно одна из лучших (хоть и самое молодая) IDE для бесплатных компиляторов, подерживает не только MinGW, но и Microsoft Visual C++ Toolkit 2003, Digital Mars C/C++ Compilers, Borland free compiler, Open Watcom C/C++ и Small Device C Compiler

4) Eclipse/CDT — написанные на Java, платформа для разработки IDE + плагин превращающий платформу в приспособленную для C++ среду. Информация о плагине Скачать уже готовую IDE

5) Emacs/Vim. Не для слабых духом, долгое время обучения. Преимущества — кроссплатформенность и не снившаяся другим инструментам мощь и гибкость. Официальный сайт Vim. Emacs: — официальный ftp — хороший дистрибутив для Windows

6) eVC 3/4 Бесплатные IDE от Microsoft под платформу WinCE. www.microsoft.com

7) Visual-MinGW. Распространяется под GNU лицензией. IDE оболочка очень схожа с Microsoft Visual C++ 6

8) Visual Studio 2005 Express — бесплатная версия MSVC 2005. Имеет полноценный компилятор C++ и вместе с Platform SDK и DXSDK дает достаточно возможностей для написания игр. Размер дистрибутива ~450 Мб.

9) Visual Studio 2008 Express. Идет в коплекте с уменьшенной версией Windows SDK (ранее назывался Platform SDK), содержащей только заголовки, библиотеки и основные утилиты, так что теперь нет необходимости скачивать Platform SDK отдельно.

10) NetBeans IDE. Бесплатная IDE от Sun Microsystems, написанная на Java, а потому, как и Eclipse, требует наличия JVM на компьютере пользователя. Поддерживает множество языков, в том чииле и С++. Можно скачать как дистрибутив специально для работы с С++, так и расширить уже установленную среду с помощью плагина. Поддерживает главным образом работу с компилятором MinGW. Обеспечивает широкие возможности автоматического рефакторинга кода. Использующим несколько компиляторов сразу рекомендуется также посмотреть на Scons и Boost.Build — удобные системы для сборки проектов.

Комментариев: 1

Лучше не начинать

Лучше не начинать

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

Сидеть весь день за компом вредно, зарплаты невысокие (лучше торговать нефтью) и кругом полно демпинговщиков.

Стать крутым программистом вряд ли реально, а некрутых и так полно.

Написать какую-нить коммерческую программу, реально имеющую сотни или тысячи продаж — почти нереально, так как всё уже написано.

… И вообще это влияет на психику негативно.

Вывод — не становись программистом, лучше буть менеджером по продажам. Продавать лучше, потому что:

ты работаешь непосредственно с клиентом

ты можешь влиять на конечную цену

ты можешь получать % от продаж

тебе ничего не нужно разрабатывать

ты можешь нанять программиста (вау!)

работа непыльная, обеды за счёт клиента, общение с приветливыми клиентами и клиентками (!), много радости и никаких компов.
Комментариев: 0

Добро пожаловать в мир Си++!

Комментариев: 2

Мир Си++

Мир Си++
Комментариев: 0
Страницы: 1 2