...

среда, 12 марта 2014 г.

[Из песочницы] Инструменты разработчика или Почему вы не используете X? Часть 1


Я видел много примеров, где для совместной разработки использовали dropbox, для отладки приложения после каждой строчки вставляли print, для автоматических тестов писали свои велосипеды (признаюсь, я и сам все это делал).


Это не правильно!


Сейчас в распоряжении программиста, пишет он на Python, C++, Haskell или Ruby, есть огромное количество различных инструментов, которые он может использовать в повседневной разработке.


Компиляторы, интерпретаторы, отладчики, профилировщики, генераторы документации, системы контрол версий, текстовые редакторы, автоматизаторы сборки, статические анализаторы, эмуляторы и виртуальные машины — все это в нашем распоржении!


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


Если вам интересно, как улучшить свою продуктивность, начать писать программы лучше, да и просто почитать что-то интересное — добро пожаловать под кат!



Краткое введение




Вы используете текстовый редактор при программировании? Окей, слабый вопрос. Какой редактор Вы используете? Наверное он Вам нравится, в нем есть X, еще в нем очень здорово реализовано Y и в отличии от многих других редакторов, в нем нет этого дурацкого Z!

Окей, а Вы используете профилировщик, чтобы улучшить производительность своего приложения?

Как нет?


А Вы используете систему контроля версий, чтобы следить за изменениями, иметь резервную копию кода где-нибудь на BitBucket или предоставлять общий доступ к нему на GitHub?

Опять нет?


А Вы используете все возможности стандартной библиотеки (или даже сторонних) Вашего языка?

Вы все-еще пишете велосипеды?


Настало время это закончить!


В данной статье (даже цикле статей) я расскажу о тех инструментах для программирования и разработки, о которых узнавал за последние 7 лет и самое главное — продолжаю узнавать!


Цикл разделен на несколько частей — в первых частях я напишу про те инструменты, которые необходимо знать КАЖДОМУ, я имею ввиду ВООБЩЕ КАЖДОМУ разработчику. Это насколько полезные штуки, что не знать о них — преступление.


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


Система контроля версий






Система контроля версий (git, svn, hg, bazaar и их друзья) — один из самых важных инструментов, о котором, к моему сожалению очень многие не знают. Или знают, но не используют (боятся?).
Недостатки от неведения:



— Вы держите кучу старых версий в разных папках

— Вы боитесь «испортить» исходный код, следовательно боитесь экспериментировать

— Вы выкладываете исходный код в общий доступ в архиве

— При совместной разработке Вы вручную совмещаете изменения, внесенные разными разработчиками

— Вы бекапите исходный код
Зачем Вам система контроля версий:



— Вы сможете вести учет разных версий вашего проекта

— У Вас появится возможность экспериментировать и не бояться за исходный код

— У Вас будет четкое знание обо всех изменениях прошедших с версии X по версию Y

— Вы сможете легко вести совместную разработку (2, 3, 10, 1000 человек)

— Заведя репозиторий на каком-нибудь сервисе, вроде github, bitbcket или sourceforge у Вас будет бесплатный бекап на надежном внешнем сервере
Описание:



Сам я использую git, реже bazaar и Вам собственно советую начать с git. Ну а если Вы любите копаться в деталях и Вам нравится находить все подходящее на 100%, то вот небольшое введение.

Во-первых системы контроля версий делятся на централизованные и распределенные. В целом у обоих есть преимущества и отличий между ними много, но главное отличие в том, что с распределенными удобнее работать без постоянной связи с интернетом.


Короче, вот небольшое описание самых популярных систем, выберите что-нибудь и, пожалуйста, начните уже использовать!


Git (выберите его!) — одна из самых популярных систем, удобный, быстрый, распределенный, имеет хорошую поддержку и очень хорошие хостинги для репозиториев — GitHub, Bitbucket и тысячу других. Используется кучей OpenSource проектов.


Subversion (svn, только не его!) — одна из лучших централизованных систем, тоже очень популярна, если хотите долго мучаться в предсмертной агонии — попробуйте. Я конечно шучу, может и есть такие извращенцы, кому svn нравится.


Darcs — если Вы фанат Haskell — можете попробовать продукт на Вашем любимом языке, в остальном ничего примечательного.


Mercurial — часто позиционируется как альтернатива Git и на самом деле по многим параметрам лучше его, если Вы раньше использовали Git, попробуйте, хуже не будет.


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


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


Поехали дальше!


Профилировщик






Это must use инструмент №2, про который должен знать каждый программист. Вообще по-сути лучше это было бы назвать «Инструменты по анализу производительности».

В чем суть? Вы написали приложение и Вам не нравится скорость его работы. Окей, разберем все по строчке и оптимизируем приложение, чтобы оно работало быстрее.


В чем проблемы? А их тут куча!


1. У нас ограничено время и мы хотели бы получить приемлемый уровень оптимизации за приемлемое време.

2. Если у Вы не учавствуйте в разработке оптимизирующего компилятора и если у Вас мозг меньше среднестатистического арбуза, Вы наврятли знаете особенности работы процессора, такие как предсказания переходов, а это один из способов улучшить производительность в разы.


Какое решение?


Инструменты производительности! В первую очередь это профилировщик, во вторую — более продвинутые средства.


Недостатки от неведения:



— Оптимизация отнимает много времени

— Вы не знаете где необходимо проводить оптимизацию

— Вы не можете точно оценить, насколько успешно было изменение
Зачем Вам профилирование?



— Вы будете быстрее и лучше проводить оптимизацию приложений

— Вы сможете увидеть слабые места Вашего приложения и сконцентрировать внимание на них

— Вы сможете узнать точную эффективность оптимизации и решить, нужна она или нет
Описание:



Вообще профилировщиков просто куча и обыно они языко-зависимые, так что если Вы пишете на Python, наврядли Вы сможете использовать gperf (однако, я могу и ошибаться).

Ладно. Вот небольшой список профилировщиков для разных языков:


Java — есть встроенные средства в NetBeans, библиотеки perf4j, jetm, JavaMelody, отдельные средства — YourKit, JProfiler.

С# — встроенные в Visual Studio средства, для mono и linux решения не нашел (но уверен, оно есть).

PHP — xDebug, XHProf.

C/C++ — всторенные средства в Visual Studio, Gperf, целый набор решений от Intel.

Python — hotspot, python profile, dowser.

JavaScript — YUI profiler, также можно использовать некоторые инструменты в браузере (в Chrome точно что-то такое было).

Другие языки — для других языков тоже есть профилировщики, многие встроены в компиляторы, скажем в GHC (компиляторе для Haskell) есть встроенный профилировщик.


Инструменты для углубленного профилирования



Главное — инструменты делятся на те, что измеряют использование процессорного времени и те, что измеряют использование памяти.

Дополнительно, могу сообщить, что для C/C++ и Fortran есть такая замечательная штука как Intel Parallel Studio который позволяет анализировать гигантское множество параметров, например узнать для каждой конструкции ветвления число неверно предсказанных переходов (если улучшить этот показатель, иногда с помощью простых махинаций с кодом можно получить прирост производительности в 2-3 раза и более).


Окей, надеюсь Вы поняли суть — когда дело дойдет до оптимизации, вспомните про профилирование, иначе даже не начинайте.


Поехали дальше!


REPL






Пожалуй одна из самых удобных и полезных вещей из списка. У меня установлено около 10 REPL-приложений для различных языков (большинство шли вместе с компиляторами/интерпретаторами) и я использую их ОЧЕНЬ часто. Особенно ghci, Haskell для серьезной разработки я знаю еще слишком плохо, но вот если мне вдруг нужно что-то быстро вычислить, я использую ghci как калькулятор для Богов. Я серьезно.
Недостатки от неведения:



— Для проверки какой-либо конструкции языка или его возможности Вы создаете полноценное тестовое приложение.

— Для вычисления значения какого-либо сложного выражения, Вы долго мучаетесь с калькулятором, вбиваете выражение в гугл или (обычно, если вычисления довольно-таки сложные) Вы опять-же создаете микро-приложение.
Зачем Вам REPL?



— У Вас будет испытательный полигон, который очень хорошо подходит для изучения языка, лучшего понимания некоторых его возможностей и просто для игрулек.

— У Вас будет невероятно мощный калькулятор, который может работать со строками, датами, рациональными числами, длинной арифметикой, да чем угодно!
Описание:



Итак, REPL — это приложение, которое организует цикл read-eval-print для какого-либо языка (интересно было бы посмотреть на REPL для сразу нескольких языков).

Что делает этот цикл?


Цикл считывает строчку кода, выполняет ее и выводит результат.


Пример — вычисление суммы первых 100 чисел фибоначи (для Haskell и ghci):



$ ghci
Prelude> let fibs@(_:t) = 1: 1: zipWith (+) fibs t
Prelude> sum $ take 100 fibs
927372692193078999175


Пример — число цифр в 10000! (Python):



$ python
>>> import math
>>> len(str(math.factorial(10000)))
35660


Ладно, надеюсь Вам понятно, что REPL — очень крутая штука (а еще больше надеюсь, что Вы поставили Haskell Platform).


Итак, вот список языков и REPL для них:


Java — Java RELP

С# — CsharpREPL

C++ — Cling

C — Crepl

С некоторыми другими языками (Python, Ruby, CoffeeScript, Haskell, Scala) REPL поставляется из-коробки, вместе с компилятором (или интерпретатором).


Ладно, дальше!


Заключение или Почему так мало?






Вообще, тема бездонная и мне хотелось бы написать намного больше. И я напишу. Однако я ставил себе целью уложить написание статьи в 8 часов (и время кончается), а саму статью — в 4 страницы (и место тоже кончается), так-что оставшиеся инструменты (а я не описал и одной десятой!), будут разобраны в других частях цикла.

Главное, что я хотел для Вас донести — сейчас множество программистов работают над тем, чтобы улучшить жизнь другим программистам. И грех не пользоваться их наработками в этой области.


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


И да, я надеюсь, что Вам понравилась статья и Вы извлекли из нее что-либо полезное.


Ждите следующую статью из цикла и удачи!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


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

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