вторник, апреля 04, 2006

Споры о новых и старых технологиях

Иногда возникают жаркие дискуссии по поводу преимуществ современных технологий программировния по сравнению со старыми, проверенными годами. Joel где-то на своем сайте писал про то, что раньше (середина 90-ых) даже вопрос не стоял на каком языке проводить интервью, 99% подразумевали C++. Сейчас все изменилось, многие студенты изучают Java, они не знаю что такое указатели, команд ассемблера, им это не нужно. Joel говорит, что Java это зло. А настоящий программист должен знать C/C++. Многие с этим знакомы. Трудно не согласиться, Си - один из самых старых и до сих пор востребованных языков. Но все ли так хорошо, как кажется?

Раньше я долгое время программировал на Си под Win32. В основном писал системные приложения. Я стал переходить на .NET/C#, но для меня до сих пор было легче написать программу на Си, чем на .NET/C# ;) Это своеобразный барьер, и по одну сторону от него стоят те, кто еще не понял всех прелестей современных языков, люди старой закалки (типа меня в прошлом). По другую сторону - люди, которым собственно все равно, на чем писать, их не волнуют вопросы лучше или хуже. С указателями или без. Их волнует один вопрос - эффективность. Если будет легче написать на C#, то я буду делать на C#, но не на Си. Какой смысл писать на Си целый день то, что на C# можно сделать за час?

Приведу пример из реальной жизни. Мой брат работает в компании, которая является официальным дилером VW. До этого он крутил гайки в наших совковых автосервисах, ремонтировал наши совковые машины. Так вот, он недавно был на курсах повышения квалификации. Сейчас VW будет выпускать новые двигатели, которые, скажем для упрощения, состоят из отдельных частей. Сделано это для того, чтобы было легче ремонтировать: снял двигатель, отправил его в Германию, поставил новый. Что там с ним случилось - не проблема автосервиса. Этим двигателем будут заниматься специально обученные люди, специалисты высокой квалификации.

То же самое и с нашими "баранами". Совсем не плохо, если вы крутили гайки на Си. Это, несомненно, будет полезно. Но заботиться о ВАЗ-2106 гораздо сложнее, чем о VW. Поэтому ответ на все эти споры о старых и новых технологиях лежит где-то посередине. Может быть я открыл америку, но некоторые (типа Joel'a) всерьез считают, что настоящий программист может быть только на Си.

Комментарии: 7:

Anonymous Анонимный сказал(а)...

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

8:58 PM  
Anonymous Анонимный сказал(а)...

Ты прав, истина посередине. Я согласен с Joel'ом -- настоящий программист обязательно должен знать С++, а еще лучше ассемблер. Без этого знания он как бы несколько однобок и часто необъективен в своих суждениях. Его статья Назад к основам хорошо показывает это на примере алгоритма Шлемиэля.

Раз уж ты использовал аналогию с автомобилями, приведу другую аналогию из той же области. Есть машины с ручной коробкой передач, а есть автомат. Последняя безусловно удобнее и проще в использовании. Однако, настоящий автомобилист должен уметь обращаться с любым типом коробки передач и вообще с любым автомобилем.

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

Так например, в вебе это PHP, реже ASP, Perl, JSP. И С++ тут мало уместен, разве что в приложениях сильно критичных к ресурсам.

Однако, плохо, когда разработчики не видят границы области применения языков и технологий, вылезая за эти границы. Например, я считаю чрезвычайно плохим тоном писать на Java и .NET десктопные приложения. И уж тем более игры. Нужно уважать пользователя и ресурсы его компьютера, за которые он в свое время выложил свои кровные. Java и .NET приложения по субъективным ощущениям способны сделать из его новенького двух-ядерного 64-битного атлона старенький второй пентиум. Я например, просто не использую программы, написанные на .NET, т.к. помимо избыточного расходования ресурсов, они вынуждают меня скачивать с Microsoft свыше 20 мегабайт трафика в лице .NET Framework -- я безоговорочно отдам свое предпочтение программе, написанной на VS VC++.

11:57 PM  
Blogger Roman Pushkin сказал(а)...

Но все-таки я позволю дать совет начинающим программистам, шароварщикам и тем, кто хочет в будущем продавать свой софт. Если вы пишите на C++, то расход ресурсов на разработку по сравнению с .NET порой может оказаться в несколько раз больше. Пока Geronimo прав, процент людей, которые захотят скачать .NET Framework очень низкий. Поэтому по состоянию на сегодняшний день вы можете смело писать на C++. Если проект большой, на год-два или более (или перспективы продаж большие), то следует всерьез задуматься о .NET вместо C++.

Не далек тот день, как Microsoft включит .NET Framework в windows update. А уж в Vista он будет на все сто процентов. Через лет пять вряд ли кто-то будет задумываться о том, что .NET тормозит тачку. Ну ладно, не через пять, так через десять (хотя если честно, думаю что меньше пяти). Также как и раньше, для меня жесткий диск с объемом 520Мб казался фантастикой. И я думал, что же туда можно записать такого на 520Мб :-)

10:05 AM  
Blogger Raider сказал(а)...

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

Современный C++ достаточно мощный: и операции со строками, и с контейнерами уже давно реализованы (Geronimo, в чем преимущество PHP перед C++ кроме отсутствия компиляции - так и не пойму), и сборка мусора если нужна - уже давно есть умные указатели типа shared_ptr...

1:44 PM  
Anonymous Анонимный сказал(а)...

Преимущество PHP перед C++ в вебе состоит в том, что PHP изначально ориентирован на веб и в него встроенна поддержка всего, что может понадобиться при обработке HTTP-запроса. Например, вы можете провести бессонную ночь в написании обработчика multipart'ного POST-запроса на C++, в PHP же все данные сразу лежат в суперглобальных массивах. Плюс сам язык имеет множество урощений вроде ослабленной типизации, неограниченных по длине строк, отсутствия указателей.

Безусловно, все что нужно можно 1 раз написать на C++ и потом использовать. Но есть еще причины.

PHP удобен еще и тем, что все подключения файлов с классами (инклуды) он выполняет в рантайме (а не при компиляции), что позволяет осуществлять ветвление и не загружать классы, которые нам в действительности не нужны для обработки конкретного запроса. В C++ бы мы получили рост исполняемого бинарника по мере появления нового функционала на сайте в целом, хотя далеко не весь код исполняемого бинарника используется при каждом вызове. Решение состоит в использовании DLL, но на сколько оно удобно?

Кроме этого PHP платформо-независим: можно вести разработку на винде, а коммерческую эксплуатацию осуществлять под linux.

И наконец, PHP существует в виде модуля Apache, что ускоряет его запуск, т.к. создание нового процесса в любой ОС достаточно дорогостоящая операция.

5:53 AM  
Blogger Raider сказал(а)...

По поводу платформо-независимости - тут уж как раз C++ далеко впереди PHP.

Для каких платформ есть PHP? Я думаю, можно пересчитать по пальцам. А компилятор C++ есть на 99% платформ. И на Symbian, и на MSDOS, и на BeOS, и на QNX...

Для работы с http УЖЕ написано много библиотек (одна из них: http://curl.haxx.se/libcurl/ - умеет в том числе собирать multipart).

Написание DLL - не такое и сложное занятие.

Зато преимущество C++ - не надо учить новых языков для написания приложений другого класса. То есть хочешь пиши для web (как PHP), хочешь пиши GUI-приложения, и все на одном языке. Что означает что можно использовать все свои и чужие наработки (библиотеки) в любом проекте.

4:45 PM  
Anonymous Анонимный сказал(а)...

Язык лишь средство. И поэтому важно им хорошо владеть. Ну а С++ проверенное временем средство и поэтому глупо от него отказываться только потому что "это старая технология". Если конкретная задача лучше реализуется на С++ то я не вижу смысла тащить новомодный .NET только ради .NET'а. И есть ряд задач где .NET отдыхает - например низкоуровневое системное программирование. Хотя находятся "умники" которые его используют там. Результат видел сам - плачевно. Наверняка так получилось вследствие того что всё это писал опытный С++ программист в С++ стиле.

8:36 AM  

Отправить комментарий

Подпишитесь на каналы Комментарии к сообщению [Atom]

<< Главная страница