Я видел много примеров, где для совместной разработки использовали 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 страницы (и место тоже кончается), так-что оставшиеся инструменты (а я не описал и одной десятой!), будут разобраны в других частях цикла.
Главное, что я хотел для Вас донести — сейчас множество программистов работают над тем, чтобы улучшить жизнь другим программистам. И грех не пользоваться их наработками в этой области.
Пишите код лучше и быстрее, пусть это не доставляет Вам больше неудобств, используйте все инструменты, что создавались специально для этого. Я надеюсь все инструменты создавались для того, чтобы их использовали.
И да, я надеюсь, что Вам понравилась статья и Вы извлекли из нее что-либо полезное.
Ждите следующую статью из цикла и удачи!
ссылка на оригинал статьи http://habrahabr.ru/post/215513/
Добавить комментарий