Мне нравится, что для написания Python, Ruby или Javascript требуется так мало шаблонов. Я люблю простые функциональные конструкции. Я люблю чистый и простой синтаксис.
Тем не менее, есть три вещи, в которых я действительно плох при разработке большого программного обеспечения на динамическом языке:
- Навигация по коду
- Определение интерфейсов объектов, которые я использую
- Рефакторинг эффективно
Я пробовал простые редакторы (например, Vim), а также IDE (Eclipse + PyDev), но в обоих случаях я чувствую, что мне нужно выделять гораздо больше памяти и / или постоянно "grep" и читать код, чтобы определить, интерфейсы. Это особенно верно при работе с большой кодовой базой с несколькими зависимостями.
Что касается рефакторинга, например, изменения имен методов, то это сильно зависит от качества моих модульных тестов. И если я пытаюсь изолировать свои модульные тесты, «обрезая» их остальную часть приложения, то нет никакой гарантии, что интерфейс моей заглушки будет соответствовать объекту, который я заглушаю.
Я уверен, что есть обходные пути для этих проблем. Как вы эффективно работаете в Python, Ruby или Javascript?
источник
Ответы:
Получите лучший редактор, чем VIM.
Я использую Komodo Edit.
Хорошо. Мышление это хорошо. Я считаю, что «обучение» в конечном итоге приводит к «памяти».
Это типично. Если вы не можете их запомнить, значит, они слишком сложные, не так ли? Время упростить.
Простое сложно создать. Но когда у вас проблемы с запоминанием, это признак плохого дизайна.
Я использую grep. Меня устраивает. Мой Komodo Edit имеет много приятного поиска. То же самое делает Notepad ++
Док Строки и
help()
функции работают. Я использую их. Ежедневно.Это не новость. Это всегда было правдой, даже на статическом языке.
На статическом языке мы часто ленимся, предполагая, что - пока он компилируется - это действительно сработает. Это явно ложно, но мы ленимся.
Это не «проблемы» и не требуют «обходных путей».
"не зная типа объектов"? В самом деле. Когда я проектирую клиента объекта, я знаю, какой тип я разработал.
Когда я определяю сервис, используемый несколькими клиентами, «точный» тип не имеет значения, когда у меня определен требуемый интерфейс
quack()
иfeathers()
.Наконец, у меня есть Read-Execute-Print-Loop и другие инструменты для определения «точного» типа в тех редких случаях, когда у меня возникает небольшая проблема. Это то, чем я на самом деле пользуюсь каждый день.
Не кажется слишком сложным - по крайней мере в Python - раскрутить тип объекта. Должны динамические языки иметь REPL, что позволяет довольно легко увидеть, что происходит.
Это не имеет особого смысла.
help()
работает.И моя IDE часто может найти определение. Не всегда - некоторые замысловатые динамические конструкции могут легко скрывать базовый класс. В этом случае мне нужно подумать о классе объекта, чтобы найти определение метода. Конечно, я пишу код, так что там мало (или нет) загадок.
источник
Быстрый поиск обнаружил Rfactor для Ruby ( интервью здесь ) и ремонтник велосипедов для Python. Не уверен, насколько они хороши ... но на них стоит посмотреть.
источник
Есть компания - JetBrains - авторы ReSharper, TeamCity и IDEA. Недавно они начали изучать динамические языки и уже выпустили свои инструменты для Python, PHP и Ruby.
Качество отличное. Это не другие плагины для вашей любимой IDE, но полнофункциональные IDE, и они довольно хороши для рефакторинга / навигации / отладки и т. Д. Они похожи на IDEA lite.
источник