Pull to refresh

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

Reading time7 min
Views55K


Я видел много примеров, где для совместной разработки использовали 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 из-коробки.
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 страницы (и место тоже кончается), так-что оставшиеся инструменты (а я не описал и одной десятой!), будут разобраны в других частях цикла.

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

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

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

Ждите следующую статью из цикла и удачи!
Tags:
Hubs:
+74
Comments100

Articles