Доступные языки

Полезные ссылки
Read in English

суббота, 17 апреля 2010 г.

Выбор оружия, или сравнение различных языков программирования.

Цель этой статьи: Пролить свет и обобщить многочисленные дискуссии о языках программирования. Она больше касается сферы соревнований по программированию, но я стараюсь писать мои замечания как можно более конкретно, улучшать и добавлять что-то в процессе своего развития и развития языков программирования. Сегодня 18ое апреля 2010го года.

Pascal (императивный, структурированный)
За: очень простой язык со строгим синтаксисом – прост для начинающих – на нем просто писать программы и отлаживать их.
Против: отсутствие стандартных библиотек (в сравнении с библиотеками C++ и Java).

C++ (поддерживает много парадигм(multi-paradigm) : объектно-ориентированное, обобщённое, процедурное, метапрограммирование)
За: STL (стандартная библиотека шаблонов) – много стандартных типов данных и алгоритмов. Большая “свобода” – можно реализовать одни и те же вещи по-разному. Хорошая производительность скомпилированного кода. Хорошая поддержка C++ сегодня.
Против: Отсутствие BigInteger и BigDecimal (они есть в библиотеках Java и C#). Возможны различные ошибки, вызванные непониманием между компилятором и программистом. Вы можете найти много тем об этом, но это не проблема языка. Но из-за очень большой свободы может быть сложнее писать и отлаживать программы на C++.

Java (объектно-ориентированный, структурный, императивный)
За: более строгий синтаксис, чем в C++ – более простое чтение кода – быстрая и простая отладка. Подсказки об ошибках и неиспользуемом коде. Очень много библиотек различного типа. Сборщик мусора. Новые возможности в последних версиях явы(пр.: вариации цикла for).
Против: Медленная работа программ (в 3-4 раза медленнее чем C/C++), длинный (постоянно длинный) код, но набор кода быстрый, потому что присутствует автодополнение.
Opinion of Petr: I think Java/C# (I don't see much difference between them except speed) are best suited for programming contests, since it's so much harder to make a mistake and so much easier to find and fix a mistake in a Java program than in a C/C++ program.
Much more strict type checking (implicit casts from long long to int and from int to bool??), out-of-range checking, code flow checking (allowing to read from uninitialized variables? why would a language allow that?), fantastic IDE which finds a lot of other mistakes for you, fantastically convenient debugging, more explicit syntax (a language with less power actually leads you to writing more readable programs), more explicit error messages (and the errors are always reproducible!) - to name a few advantages, but I've probably missed some more.
I think that writing correct programs and fixing them quickly when they're not correct far outweigh the disadvantages mentioned above (slower execution, longer programs). Even a 2x slowdown is almost never important in programming competitions, while a WA always is :) And I believe that most of the time at a programming contest is spent in thinking (including the thinking you do _while_ writing code), not in writing code, so the length of the program (or the typing speed, for that matter) is irrelevant.
And I believe the availability of various libraries is also not that important. So if I were to choose between C++ and Pascal, I'd choose Pascal because of the same argument (much more strict checking of everything).
Я не перевел мнение Петра, потому что оно намного лучше звучит на английском.

C# (поддерживает много парадигм(multi-paradigm) : объектно-ориентированное, обобщённое, процедурное программирование)
За: Быстрее чем Java. Стандартные библиотеки C#: в последней версии .NET присутствуют, как и в Java, классы для работы с длинной арифметикой, но теперь вы можете использовать их как переменные базовых типов: c=a+b, и т.п.
Против: Последняя версия .NET все еще не доступна на большинстве соревнований по программированию.

VB (процедурный, объектно-ориентированный, компонентно-ориентированный, событийно-ориентированный)
Отличие от C#: Язык программирования – Visual Basic, а не C#.
Мнение alliumnsk: VB.NET это всего лишь C# с синтаксисом Visual Basic, который был сделан, чтобы облегчить перенос программ, написанных на VB. Т.е. нет никаких причин думать о VB.NET.

Мнение _ph_:
За: Python - язык широкого назначения, на нем пишут практически любые типы программ, за исключением программ реального времени. Не случайно, питон - это официальный язык #3 в Google.
Python отлично подходит для решения не очень сложных задач благодаря краткости записи и наличию встроенных средств:
·         встроенная длинная арифметика (как целочисленная, так и дробная)
·         встроенные list (aka vector<>), set, dict, tuple (aka struct)
·         библиотека для работы с регулярными выражениями re
·         функция sorted() для любых последовательностей
·         удобные строковые операции
·         удобные конструкторы списков
·         функции sum(), max(), min(), способные обрабатывать списки и т.д.
Против: К недостаткам Python с точки зрения олимпиадного программирования относятся:
·         низкая скорость исполнения программ (в среднем проигрыш в 6 раз по сравнению с С++) и особенно медленный ввод-вывод (так что без специальных ухищрений 10^6 чисел даже прочитать за 1 сек. не успеешь)
·         мало удобных IDE (единственная нормальная, что я знаю, PyDev для Eclipse)

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

Заключение:
Лучше всего знать и практиковать как можно больше языков, учиться, знать все нюансы, но это не так просто и не всегда возможно. Мы – люди, и мы не можем изменить своей природы, но мы можем постараться стать лучше. Каждый язык программирования имеет свои преимущества и недостатки, и вы всегда можете выбрать один из них для более эффективного решения определенных разных задач.
Вы должны решить для себя, чего вы хотите: гибкости и свободы языка или простоты написания, чтения, отладки и сопровождения программ; нужна ли вам высокая скорость, или ей можно пренебречь.
Надеюсь, что эта статья помогла вам понять отличия разных языков программирования, самые основные их преимущества и недостатки.

Дополнительная и использованная информация:
Ссылки:

Lisp as an Alternative to Java: http://norvig.com/java-lisp.html

Выбор оружия - обсуждение: http://codeforces.ru/blog/entry/254
Выбор оружия 2 – обсуждение: http://codeforces.ru/blog/entry/316
C#. Почему не моно? : http://codeforces.ru/blog/entry/229
Немного о C# и Linq: http://codeforces.ru/blog/entry/245
Тесты и сравнение производительности Java, C#, C++:
Определения:

Pascal: http://en.wikipedia.org/wiki/Pascal_(programming_language)

C++: http://en.wikipedia.org/wiki/C%2B%2B

Java: http://en.wikipedia.org/wiki/Java_(programming_language)

C#: http://en.wikipedia.org/wiki/C_Sharp_(programming_language)

Visual Basic: http://en.wikipedia.org/wiki/Visual_Basic

Python: http://en.wikipedia.org/wiki/Python_(programming_language)

 

Ярлыки: java, c++, vb, c#, pascal, python, лучший язык, языки программирования.

 

Благодарности: MikeMirzayanov, Petr, alliumnsk, OSt, dAFTc0d3r, _ph_, Peteris, ktuan, SkidanovAlex, Nerevar, dev_il, valergrad и всем, кто принимал участие в обсуждении данной темы.

суббота, 3 апреля 2010 г.

Расписание Top Coder - Google календарь

Календарь, сделанный мной, удален, потому что я нашел более удобное решение.
Darnley написал скрипт, который парсит расписание топ кодера и переводит в формат Google calendar. Пока скрипт работает корректно, будем надеяться, что это не изменится :)
Спасибо, Darnley.
More...
Я сделал Google календарь расписания Top Coder.
Вы можете использовать его и даже сделать лучше, при желании.

Полезные ссылки для программистов

Здесь я буду собирать полезные, на мой взгляд, и интересные программистам ссылки: ссылки на образовательные ресурсы, сайты соревнований, онлайн контесты, литературу и рекомендации по подготовке, блоги других программистов, архивы и разборы задач.
More...

Печатаем... Как напечатать закрытый pdf файл?

Иногда у нас может возникнуть проблема: мы сделали pdf файл и поставили на него ограничения, например, запретили печать. А потом забыли пароль или не сохранили копии без ограничений.
Что же делать, если мы захотим его распечатать?
Я пользуюсь линукс, сейчас - одной из последних версий ubuntu (9.04). Но это не так важно.
Итак, у меня есть вариант решения нашей проблемы:

pdftoppm copy.pdf copy.ppm //каждая страница pdf файла будет сохранена в отдельном ppm файле
convert *.ppm one.pdf //объединяем много изображений в один pdf файл. все говорят, что это прекрасно работает, но я не совсем уверен. Я не смог дождаться результата и отменил эту операцию, она использует очень много оперативной памяти.
for file in *.ppm; do ppmtojpeg $file > ${file/.ppm/.jpg}; rm $file; done //конвертируем все ppm файлы в jpg
ls -d *.ppm | sed 's/\(.*\).ppm$/mv "&" "\1.jpg"/' | sh //меняем расширения файлов с ppm на jpg
convert *.jpg > one.pdf  //можете попробовать объединить изображения в один pdf, но я не гарантирую, что это сработает.

В принципе, можно остановиться на ppm файлах, если вы можете распечатать файлы этого типа или хранить их, потому что они весят намного больше аналогичных jpg файлов.
Мы напечатали закрытый pdf файл.
Я проделал все это на моем ноутбуке с Linux Mint 7 (Ubuntu 9.04) на борту.
Функция convert содержится в пакете ImageMagick.

воскресенье, 27 декабря 2009 г.

Первое знакомство с творчеством Сергея Лукьяненко.

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

Это стих из книги Сергея Лукьяненко "Чистовик":
More...
В безумье расточенья сил
В часу последней переправы
Господь мне ангела явил,
Его движенья величавы…

Как строг очей нездешний взгляд,
Покорный высшему приказу!
Не испытав ни боль, ни глад,
Не сомневался он ни разу…

Я человек, чей жалок вид,
Я заключен в ловушке плоти.
Но совершенство не манит,
Коль не достигнуто в работе.

В работе сердца и ума,
В ошибках, горе и смиреньи!
Так горечь рабского клейма
В душе рождает вдохновенье…

И мне дороже боль и тлен,
И редкий, горький миг блаженства,
Чем бесконечный рабский плен
Дарованного совершенства!

А это хокку из книги Акунина "Любовница Смерти":
Яблоко прекрасно
Не на ветке и не в желудке,
А в миг паденья.

Нет, не думайте, что у Акунина стихи только такие. Есть и обычные, длинные, неизменно красивые и привычные для нас стихи (и в книге "Любовница Смерти"). Те, кому нравится восточная философия, знают, что красота в простоте, а гармония в спокойствии.

Кстати, недавно вышла еще одна книга про Эраста Петровича, уже тринадцатая, если считать книгу "Инь и Ян",: "Весь мир театр". Так что приятного чтения всем как Акунина, так и Лукьяненко. Естественно, если вы любите хорошую литературу и у вас есть время, либо получается выкраивать его для чтения.

пятница, 11 декабря 2009 г.

Google Chrome Beta for Linux

Google Chrome Beta for linux is now available to download!

First impression is brilliant. Package file for Ubuntu/Debian is 12mb and after download it installs in a second. Execution time is very fast! And first you can import configurations, bookmarks, history from any other browser (for me it’s Firefox). Ok. This is very good. No crashes. For example, Google Picasa crashes every minute and it’s impossible now to use it in linux. For beta version this is too much.

More...

Now more detailed view:

What about memory?

When you start Chrome it starts 3 main processes (~30mb, but when you open new tabs it’s also growing).

And every next tab adds an new process (from 10mb to 35mb). But after downloading and drawing every tab takes ~30mb of your memory.


For example, Firefox works with memory better. After start it takes ~30mb. But every next tab adds only ~5-10mb or even less.

So this is not so attractive for small or weak computers.



What about extensions?

There’re very much extensions for Firefox and some of them are so comfortable that you can’t change you browser.

It seems that there will be also very much extensions for Chrome. And now there’re many extensions wich can be found in extensions gallery.


Tabs?

When you add a new tab Chrome shows you last used pages and small images of them. And you can keep some of them always on this selection-page by pressing “keep”. And when you open link in new tab it stands after current tab in tab-list. In comparison with Firefox: Firefox adds this tabs in the end of tab-list.


Design

I can’t say something bad about the design. This is very pretty and smooth. And the arrangement of elements is very comfortable in use.


Summary:


So, it’s great work! Chrome beta for linux is a great thing. It’s very-very fast but uses too much memory. If you use any other google services than it will be very pretty and comfortable for you. I hope the problem with memory will be solved in next releases.

Good luck, Google Chrome Team!

Original news text:
Hello everybody out there using Linux -

Google Chrome is go for beta on Linux! Thanks to the many Chromium and WebKit developers who helped make Google Chrome a lean, mean browsing machine. Here are a few fun facts from us on the Google Chrome for Linux team:

60,000 lines of Linux-specific code written

23 developer builds

2,713 Linux-specific bugs fixed

12 external committers and bug editors to the Google Chrome for Linux code base, 48 external code contributors



Thanks for waiting and we hope that you enjoy using Google Chrome!

Google Chrome Team

http://www.google.com/chrome/intl/en/w00t.html

——–

(c) 2009 Google www.google.com 1600 Amphitheatre Parkway, Mountain

View CA 94043 United States of America.


Google is a trademark of Google Inc. All other company and product

names may be trademarks of the respective companies with which they

are associated.

Google

Источник: http://biryukov.eu.pn/
Аналогичная новость на OpenNet: http://www.opennet.ru/opennews/art.shtml?num=24586