Навігація кодом
Отримайте кращий редактор, ніж VIM.
Я використовую Komodo Edit.
Я відчуваю, що мені потрібно зробити більше пам'яті
Добре. Мислення - це добре. Я вважаю, що "навчання" зрештою призводить до "пам'яті".
Постійно "grep" і читайте код, щоб визначити інтерфейси.
Це типово. Якщо ви не можете їх згадати, то вони занадто складні, чи не так? Час спростити.
Просте важко створити. Але коли у вас виникають проблеми з запам'ятовуванням, це симптом поганого дизайну.
Я використовую grep. Це працює для мене. У моїй редакції Komodo є багато приємних пошуків. Так само робить Notepad ++
Ідентифікація інтерфейсів об'єктів, які я використовую
Док-рядки та help()
функціонування функціонують. Я їх використовую. Щодня.
Ефективне рефакторинг ... стає дуже залежним від якості моїх тестових одиниць.
Це не новина. Це завжди було правдою, навіть статичною мовою.
Статичною мовою ми часто лінуємось, припускаючи, що - поки вона складена - це справді ймовірно, що це спрацює. Це явно помилково, але ми лінуємось.
Я впевнений, що існує вирішення цих проблем.
Це не "проблеми" і не потребують "обхідних шляхів".
Динамічна мова полягає саме в тому, щоб не знати типу об'єктів, якими ви маніпулюєте. Коли ви отримуєте параметр, ви припускаєте, що він визначає метод "quack ()" та "feathers ()", але ви не знаєте, де є документація (адже вони будуть мати кілька док-стрижнів у своїх кількох реалізаціях).
"не знаючи типу об'єктів"? Дійсно. Коли я проектую клієнт об'єкта, я знаю, який тип я спроектував.
Коли я визначаю послугу, яку використовують декілька клієнтів, тип "точний" не має значення, коли у мене визначений необхідний інтерфейс quack()
і feathers()
.
Нарешті, у мене є цикл Read-Execute-Print-Loop та інші інструменти для визначення типу "точний" у рідкісних випадках, коли у мене є тонка проблема. Ось чим я фактично користуюся щодня.
>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)
Здається, не дуже складно - принаймні в Python - розкручувати тип об'єкта. Обов’язково динамічні мови мають REPL, що дозволяє досить легко бачити, що відбувається.
Ви також не знаєте очікуваного замовлення параметрів. Здається, IDE важко допомогти там.
Це не має особливого сенсу. help()
працює.
І мій IDE часто може знайти визначення. Не завжди - деякі закручені динамічні конструкції можуть легко приховати базовий клас. У такому випадку я повинен насправді подумати над класом об'єкта, щоб знайти визначення методу. Звичайно, я пишу код, тому там мало (або ні) таємниці.