Яка практика програмування, яка вам колись сподобалась, ви змінили свою думку? [зачинено]


99

Під час програмування ми всі розробляємо практику та зразки, якими користуємось і на яких спираємось. Однак з часом, як змінюється наше розуміння, зрілість і навіть використання технологій, ми розуміємо, що деякі практики, які ми колись вважали чудовими, не застосовуються (або більше не застосовуються).

Прикладом практики, яку я колись використовував досить часто, але в останні роки змінився, є використання об'єктного шаблону Singleton .

Завдяки власному досвіду та тривалим дискусіям з колегами я зрозумів, що одиночні кнопки не завжди бажані - вони можуть ускладнити тестування (пригнічуючи такі методи, як глузування) і можуть створити небажане з'єднання між частинами системи. Натомість я зараз використовую об'єктні заводи (як правило, з контейнером IoC), які приховують природу та існування синглів з частин системи, які не цікавляться - або потребують цього знати. Натомість вони покладаються на фабрику (або локатор обслуговування) для отримання доступу до таких об'єктів.

Мої запитання до громади в дусі самовдосконалення:

  • Які схеми чи практики програмування ви нещодавно переглянули, а тепер намагаєтесь уникати?
  • Чим ви вирішили замінити їх?

Відповіді:


159


//Coming out of university, we were taught to ensure we always had an abundance 
//of commenting around our code. But applying that to the real world, made it 
//clear that over-commenting not only has the potential to confuse/complicate 
//things but can make the code hard to follow. Now I spend more time on 
//improving the simplicity and readability of the code and inserting fewer yet 
//relevant comments, instead of spending that time writing overly-descriptive 
//commentaries all throughout the code.



+1. Я збирався опублікувати цю саму відповідь. Я знайшов кілька своїх старих завдань програмування на архівному диску кілька тижнів тому. Все виглядало однаково. Було майже співвідношення рядків коментарів 1: 1 до рядків коду.
Майкл Муса

32
Звучить так, що ви коментували неправильно , не дуже. Код не говорить сам за себе. Ні. Це дійсно ні. Прочитайте найновіший NT Insider, щоб гарно розібратися з цим питанням. Якщо ви думаєте, що коментарі будуть зайвими, то ви або помиляєтесь, або робите неправильно. Університети не вчать правильно коментувати, як здається (або відстеження помилок, або контроль версій ... * зітхання *). Занадто мало коментарів. (та менше хороших)
Томас

5
Code Complete має хороші поради щодо коментування та даних для їх резервного копіювання.
Томас

20
Коментарі слід використовувати, щоб описати, чому код робить те, що робить (якщо це не очевидно), а не те, що робить. Можливим винятком є ​​божевільний шматочок бітвинг / мова, як магічний номер Carmack 0x5f3759df.
Кріс Сіммонс

6
@Thomas: Я особисто думаю, що проблема полягає в тому, що викладання хорошого коментування - це не те, що університет може показати студентам. Майже всі програми в школах - це разові речі; студенти не отримують досвіду, дивлячись на код, який вони написали рік тому, і зовсім не розуміють цього. Також класи нижчого рівня викладають дійсно прості поняття кодування - коментування на цьому рівні майже обов’язково стомлює через те, що відбувається. Іншими словами, це як намагатися навчити когось плавати у басейні; це просто не правильний контекст для розуміння цих рухів.
Dan Lew

117

Одні точки повернення.

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

Відтоді я перейшов до набагато менших процедур - тому ймовірність не помітити очищення та знизити фактично потребу в очищенні - і виявити, що ранні повернення зменшують уявну складність (рівень гніздування) коду. Артефакти єдиної точки повернення - збереження змінних "результат" навколо, збереження змінних прапор, умовні пропозиції для ще не зроблених ситуацій - роблять код здаватися набагато складнішим, ніж він є насправді, ускладнює його читання та підтримку. Ранні виходи та більш дрібні методи - це шлях.


3
Я погоджуюсь, що в поєднанні з типами даних, які автоматично очищаються, такими як autoptr, scoped_ptr, CComPtr тощо.
i_am_jorf


@banjollity: за винятком мов, які нарешті не підтримують {}. І зауважте, що навіть у мовах, які його підтримують, нарешті {} ЗАСІННЯ не гарантується виконанням.
Кріс К

1
@banjollity, Кріс: У C ++ очищення - це те, що деструктор - це, за винятком екстремальних обставин (exit (), деструктор, який кидає виняток під час розмотування стека, білки, що вирізають вашу потужність), гарантовано запуститься.
Девід Торнлі

4
Домовились. Замініть вкладені умовні на охоронні положення ftw!
Jonik

111
  • Намагаючись кодувати речі ідеально з першої спроби.
  • Спроба створити ідеальну модель ОО перед кодуванням.
  • Розробити все для гнучкості та майбутніх удосконалень.

Одним словом перенапруження .


6
Зачекайте, я завжди отримую це правильно з першої спроби. :)
i_am_jorf

18
Справжні гроші в тому, щоб отримати перший тонко неправильно і випустити його в дику природу. Тоді, коли люди звикли до вершини, що перешкоджає, набудьте нахабної демонстрації та виправте помилку / неефективність, щоб отримати додаткову славу! ;)
Ерік

7
@jeffamaphone - Ні, тільки Джон Скіт отримує це правильно з першого разу.
Джордан Пармер

Мені подобається слово "перенапруження"
Neilvert Noval

@jeffamaphone - я завжди отримую це правильно і з першої спроби. Але подальші спроби дають те, що мені потрібно :)
umbr

78

Угорське позначення (і форми, і системи). Я звикла все префіксувати. strSomeString або txtFoo. Зараз я використовую someString та textBoxFoo. Набагато легше читати і легше, щоб хтось новий прийшов і забрав. Як додатковий бонус, тривіально тримати його постійним - camelЗмініть контроль та додайте корисну / описову назву. Форми угорської мови є недоліком того, що він не завжди є послідовним, і Система Угорська насправді не дуже заробляє вас. Поєднання всіх змінних разом не дуже корисне, особливо це стосується сучасних IDE.


А як щодо динамічно набраних мов, таких як Python чи JavaScript? Я все ще вважаю корисним використовувати угорські позначення на цих мовах, щоб, дивлячись на змінні, я знав, якого типу змінної очікувати (якщо є тип, який слід очікувати - звичайно, було б нерозумно ставитися до динамічно набраної мови точно як статично набрана мова.)
Dan Lew

4
Я роблю подібне, за винятком: fooTextBox та string є просто сподіваними: numberOfEntries => int, isGreat => bool і т. Д.
rball

+1 для позбавлення від угорських позначень. Я погоджуюсь з футболом; fooTextBox, fooService, fooString, коли це дійсно необхідно.
blu

3
@ wuub: Я б заперечував, що при правильному іменуванні вам не потрібно нічого робити префіксами.
Кенні Манн

4
До речі, те, що ви згадали, не є власне угорським.
Антоні Карті

67

"Ідеальна" архітектура

Я придумав THE архітектуру пару років тому. Підштовхував себе технічно, наскільки я міг, щоб було 100% вільно з'єднаних шарів, широке використання делегатів та легкі предмети. Це було технічне небо.

І це було лайно. Технічна чистота архітектури просто уповільнила мою команду розробників, прагнучи досконалості над результатами, і я майже досяг повного провалу.

Зараз у нас набагато простіша, менш технічно досконала архітектура, і швидкість доставки зросла.


57

Вживання кофеїну. Одного разу він тримав мене неспаним і в славному настрої програмування, коли код злітав з моїх пальців з гарячою плинністю. Зараз це нічого не робить, і якщо я цього не маю, у мене болить голова.


55
Вам потрібно випити ще більше кави. Якщо це не працює, киньте палити.
MusiGenesis

7
Бред: Вам не потрібні ті, коли у вас є Python: xkcd.com/353
Пітер

Приємна посилання на різдвяну історію! :-)
Стів Ехольс

2
Я порушив звичку, а потім знову підняв її кілька разів (Це зараз мій третій цикл). Немає нічого подібного до кодування в холодний ранок теплою кружкою кави!
Матвій Іселін

15
"Схоже, я вибрав неправильний тиждень, щоб кинути амфетаміни".
ShreevatsaR

50

Коментуючи код. Раніше я вважав, що код є дорогоцінним і що ви не можете просто видалити ті прекрасні дорогоцінні камені, які ви створили. Тепер я видаляю будь-який коментований код, на який я натрапив, якщо там не додано TODO або NOTE, оскільки це занадто небезпечно, щоб залишити його. На кшталт, я натрапив на старі класи з величезними коментованими частинами, і це дійсно збентежило мене, чому вони були там: чи нещодавно їх коментували? це зміна середовища для розробників? чому це робить цей непов'язаний блок?

Серйозно подумайте не коментувати код, а просто видалити його. Якщо вам це потрібно, він все ще знаходиться в контролі джерела. ЯГНІ, хоча.


6
Я коментую старий код під час рефакторингу, але лише до тих пір, поки не переконаюся, що код заміни працює. Після того, як нова версія буде повністю функціональною, я видаляю старі коментовані рядки.
muusbolla

Дійсно - я також коментую код, але лише на кілька днів. Якщо я повернусь і зрозумів, що я пропустив трохи, він буде видалений ще до того, як буде працювати новий код.
Колін Макей

4
Я кажу, що один раз перевірте коментований код, а потім видаліть його. Існує багато разів, коли ви перевіряєте різні різні біти коду, і не хочете перевіряти зламаний код ...
DisgruntledGoat

Не кажучи вже про те, що контроль над версією - ваш друг.
Девід Торнлі

+1 Я працював з програмістом, який наполягав прокоментувати весь код, який він переробив або переписав. Це зводило б мене з розуму, бо іноді мені доведеться прокручувати 1 к + рядки лайна, щоб знайти те, над чим я працював.
Еван Плейс

46

Перевикористання / зловживання директивами #region. Це лише маленька річ, але в C # я раніше використовував директиви #region для впорядкування моїх занять. Наприклад, я б згрупував усі властивості класу разом у регіоні.

Зараз я оглядаюся на старий код і в основному просто їх дратую. Я не думаю, що це справді робить речі більш ясними, а іноді вони просто сповільнюють вас. Тому я передумав і вважаю, що добре складені заняття здебільшого чистіші без регіональних директив.


31
Я ненавиджу регіонів. Люди з моєї команди користуються ними легковажно. Я називаю їх «прихованими кодами».
rball

9
Вони, безумовно, кодовий запах.
Френк Швітерман

3
Я ненавиджу регіони. В даний час я підтримую код, де функція майже 500 рядків, і щоб керувати ним, розумний розробник розмістив шматки коду в 10 до 15 регіонів.
SolutionYogi

6
@ Рішення Йогі: Я не думаю, що регіони є справжньою проблемою у вашому випадку :-)
Ed S.

9
Я думаю, що регіони можуть бути добре, якщо використовувати їх економно.
Грегорі Хіглі

39

Розвиток водоспадів загалом, і конкретно, практика написання повних та вичерпних функціональних та конструкторських специфікацій, які, як слід очікувати, є канонічними, а потім очікують, що їх виконання буде правильним та прийнятним. Я бачив, як це замінено на Scrum, і я гадаю, що це добре. Простий факт полягає в тому, що мінливий характер потреб і бажань замовника робить будь-яку фіксовану специфікацію ефективно марною; єдиний спосіб дійсно правильно підійти до проблеми - це ітеративний підхід. Не те, що Scrum - це срібна куля, звичайно; Я бачив це зловживань і зловживань багато, багато разів. Але це б'є водоспад.


3
Скажіть це моєму замовнику ... Я в середині написав якийсь марний "Я програміст із кришталевою кулькою, тому точно знаю, як буде виглядати моя конструкція низького рівня через 6 місяців"
Ігор Брейц

36

Ніколи не врізаючись.

Здається, така гарна ідея, чи не так? Користувачі не люблять програм, які виходять з ладу, тому давайте пишемо програми, які не виходять з ладу, і користувачі повинні подобатися програмі, правда? Ось так я і почав.

У наш час я більш схильний думати, що якщо це не працює, він не повинен робити вигляд, що він працює. Помилка, як тільки можна, з хорошим повідомленням про помилку. Якщо цього не зробити, ваша програма вийде з ладу ще важче лише через кілька інструкцій, але з деякою недискрипційною помилкою вказівника, яка потребує години налагодження.

Моя улюблена схема "не збої" така:

public User readUserFromDb(int id){
    User u = null;
    try {
        ResultSet rs = connection.execute("SELECT * FROM user WHERE id = " + id);
        if (rs.moveNext()){
            u = new User();
            u.setFirstName(rs.get("fname"));
            u.setSurname(rs.get("sname"));
            // etc
        }
    } catch (Exception e) {
        log.info(e);
    }
    if (u == null){
        u = new User();
        u.setFirstName("error communicating with database");
        u.setSurname("error communicating with database");
        // etc
    }
    u.setId(id);
    return u;
}

Тепер, замість того, щоб просити своїх користувачів скопіювати / вставити повідомлення про помилку та надіслати його вам, вам доведеться зануритися в журнали, намагаючись знайти запис журналу. (Оскільки вони ввели недійсний ідентифікатор користувача, запис у журналі не буде.)


Яка ймовірність того, що користувач надішле вам фактичне повідомлення про помилку та ваші журнали, що викликають проблему? (Дуже низька в цьому конкретному випадку, але користувачі майже ніколи не цитують повідомлення про помилки!) Чи читають вони їх навіть?
Арафангіон

1
Я визнаю, що шанс випадкового користувача надсилає вам повідомлення про помилку, але шанс не нульовий (тривіальний приклад: іноді ви використовуєте власний додаток), і деякі користувачі з часом точно дізнаються, що скопіювати / вставити. Я не кажу , що ви не повинні увійти (ви повинні), але коли додаток розбите, воно буде порушено. Показати повідомлення про помилку набагато краще, набагато чесніше для користувача, ніж робити вигляд, що ім'я користувача - "помилка в спілкуванні з базою даних" (або ще гірше, nullабо порожній рядок).
gustafc

Там в NullReferenceException на другій лінії
oɔɯǝɹ

Дякую, оɔɯǝɹ, я це виправив. (Хоча з цим було трохи веселіше: уся ця неприємність, щоб уникнути винятків та інших «збоїв», і все одно вона безумовно зазнала аварії.)
gustafc

33

Я вважав, що має сенс застосовувати шаблони дизайну кожного разу, коли я їх розпізнаю.

Мало що я знав, що я фактично копіюю стилі з іноземних мов програмування, тоді як мова, з якою я працював, дозволяла набагато більш елегантні чи простіші рішення.

Використання декількох (дуже) різних мов відкрило мені очі і дало мені зрозуміти, що мені не доведеться неправильно застосовувати рішення інших людей до проблем, які не є моїми. Тепер я здригаюся, коли бачу заводський візерунок, застосований такою мовою, як Рубі.


2
Вибачте, будь ласка, моє незнання рубіну, але чому ми не повинні використовувати з ним заводський зразок?
Майк Чемберлен

Тут не рубіст, але фабрика повинна уникати залежно від реалізації, але рубін динамічний, і ви можете знущатись або заглушувати будь-що. Таким чином, ви не дуже залежить від реалізації.
Стефан

27

Нав'язливе тестування. Раніше я був шаленим прихильником тестування першої розробки. Для деяких проектів це має багато сенсу, але я зрозумів, що для багатьох проектів рабсько дотримуватися доктрини написання одиничних тестів для кожного окремого функціоналу це не тільки неможливо, але й згубно для багатьох проектів.

Дійсно, рабське дотримання будь-чого може бути згубним.


22
Це дуже добре працює для бараклів.
MusiGenesis

Покриття тесту має бути пропорційним користі. Все, що ви робите, дійсно має показати користь. 100% покриття не дасть вам все так багато. відмінність від 80 або 90 у формі, яка не є в сценарії життєзабезпечення / запуску ракет.
Спенс

+1 залежність від одиничного тестування на відміну від тестування.
Преет Сангха

25

Це невелика річ, але: дбаючи про те, куди йдуть фігурні дужки (на тому ж рядку чи наступному рядку?), Пропонується максимальна довжина рядка коду, іменування умов для змінних та інші елементи стилю. Я виявив, що всі, здається, хвилюються з цього приводу більше, ніж я, тому я просто йду з потоком того, з ким я працюю сьогодні.

Редагувати: Виняток з цього, звичайно, коли я найбільше дбаю (або я в змозі встановити стиль для групи). У такому випадку я роблю те, що хочу!

(Зауважте, що це не те саме, що не має послідовного стилю. Я думаю, що послідовний стиль у кодовій базі дуже важливий для читабельності.)


5
Хтось дав цю думку, але я вважаю, що це практична перспектива. Який найкращий стиль коду? Не важливо. Шукайте в одному і тому ж файлі копію вгору та вниз.
Френк Швітерман

12
Найкращий стиль коду - це все, що є стандартом для цього магазину.
Девід Торнлі

Ось чому я люблю параметри автоматичного форматування у Visual Studio. Не важливо, як інші розробники написали код, я просто роблю швидкий формат і як саме він мені подобається ... більшість часу.
corymathews

5
@cory: чи це не зіпсує здатність вашого програмного забезпечення для контролю версій показати вам різницю між версіями файлу, який ви просто переформатували?
Стів Мельникофф

Ось чому мене начебто приваблює вивчення пітона ... щоб подумати, що мені просто турбуватися про те, на що встановлені мої вкладки, а не стилі, що зміцнюють. Це щось переконливо.
Кріс К

24

Мабуть, найважливіша "практика програмування", яку я з тих пір передумав, - це думка, що мій код краще, ніж у всіх інших. Це властиво програмістам (особливо новачкам).


20

Комунальні бібліотеки. Раніше я проводив зібрання з різними допоміжними методами та класами з теорією, що я можу їх колись застосувати десь ще.

Насправді я просто створив величезний простір імен з безліччю погано організованих бітів функціоналу.

Тепер я просто залишаю їх у проекті, в якому я створив їх. Ймовірно, мені це не знадобиться, і якщо я це зробити, я завжди зможу їх переробляти на щось для багаторазового використання пізніше. Іноді я позначу їх // TODO для можливого вилучення в загальну збірку.


12
Є гарна цитата (на даний момент я не можу знайти оригінал), яка була чимось узгоджена з "навіть не думайте про створення загального розпорядку, поки вам не потрібно буде вирішити ту саму проблему 3 рази.
DaveR

9
"Три удари, і ти рефактор" - Рефакторинг Мартіна Фаулера. Правило трьох , стор 58.
Нік Дандолакіс

20

Дизайн більше, ніж я кодував. Через деякий час це перетворюється на параліч аналізу.


44
Я періодично посилаюсь на фразу "Якщо ви виявите, що занадто багато думаєте, зупиніться і робіть. Якщо ви виявите, що робите занадто багато, зупиніться і думайте".
Ніл N

Це приємно, але скільки це занадто багато?
Гаміш Грубіян

Занадто велика залежність від UML (марної мови моделювання). Він періодично має свої цілі. Але як тільки я бачу, як хтось починає малювати діаграми класів і проповідує переваги "як приголомшливо було б генерувати код із діаграм", я зашнуровую взуття для бігу. Крім того, у Visual Studio є вбудований генератор інтерактивних діаграм класів, який робить все автоматично і працює, як об’єкт провідника на тріщинах.
Еван Плейс

15

Використання набору даних для виконання бізнес-логіки. Це занадто щільно прив'язує код до бази даних, також DataSet зазвичай створюється з SQL, що робить речі ще більш крихкими. Якщо SQL або база даних змінюється, вона, як правило, проникає до всього, що стосується DataSet.

Виконання будь-якої бізнес-логіки всередині об’єкта конструктора. Завдяки успадкуванню та можливості створювати перевантажені конструктори, як правило, ускладнюють обслуговування.


15

Скорочена змінна / метод / таблиця / ... Імена

Раніше я робив це весь час, навіть коли працював на мовах без обмежених обмежень щодо довжини імен (ну, мабуть, це було 255 чи щось). Одним із побічних ефектів було чимало коментарів, котрі пояснювали (нестандартні) абревіатури. І звичайно, якби назви були змінені з будь-якої причини ...

Зараз я вважаю за краще називати речі такими, якими вони є насправді, з хорошими описовими назвами. включаючи лише стандартні абревіатури Не потрібно включати непотрібні коментарі, а код набагато більш читабельний і зрозумілий.


Так, треба любити такі типи декларацій: недійсні Foo (x1, y, x2, y2, p, r, j) ... WTF ?!
Ред С.

Або ще гірше (і так, я насправді це бачив) Foo(int arg0, String arg1, float arg2)тощо
Mac

14

Обгортання існуючих компонентів доступу до даних, як-от Enterprise Library, спеціальним шаром допоміжних методів.

  • Це нікому не полегшує життя
  • Його більше код, який може мати помилки в ньому
  • Багато людей знають, як використовувати компоненти доступу до даних EntLib. Ніхто, крім місцевої команди, не знає, як використовувати рішення про доступ до даних

14

Я вперше почув про об’єктно-орієнтоване програмування, читаючи про Smalltalk у 1984 році, але я не мав доступу до мови oo, поки не використав компілятор cfront C ++ у 1992 році. Нарешті я став користуватися Smalltalk у 1995 році. Я нетерпляче очікував, що oo технології, і задумав, що це врятує розробку програмного забезпечення.

Тепер я просто бачу oo як одну техніку, яка має деякі переваги, але це лише один інструмент у панелі інструментів. Більшу частину своєї роботи я роблю в Python, і я часто пишу окремі функції, які не є членами класу, і я часто збираю групи даних у кортежі чи списки, де в минулому я створив би клас. Я все ще створюю класи, коли структура даних є складною або мені потрібна поведінка, пов'язана з даними, але я схильна протистояти цьому.

Мені насправді цікаво виконати якусь роботу в Clojure, коли я отримаю час, який не забезпечує об'єктів oo, хоча він може використовувати об'єкти Java, якщо я правильно розумію. Я не готовий сказати нічого, як уо мертвий, але особисто я не фанат, яким я був раніше.


13

В C #, використовуючи _notation для приватних членів. Я зараз думаю, що це некрасиво.

Потім я змінився на this.notationприватних членів, але виявив, що я не використовую його, і тому я теж відмовився.


29
Я все ще використовую _notation і думаю, що це чудово.
Арніс Лапса

3
Я ненавиджу примітки; Я використовую цю нотацію для публічних членів і цю нотацію для приватних членів.
Callum Rogers

Я це теж ненавиджу. Це мене бентежить :(
Broken_Window

4
Я не погоджуюсь. Це значно спрощує управління іменами. Використовуйте PascalCase для властивостей або публічних / внутрішніх членів, _UnderscorePascalCase для членів, які піддаються впливу властивості, і camelCase для імен параметрів у методах / конструкторах та приватних членах. Ключове слово "це" необхідне лише в тому випадку, якщо вам потрібно передати посилання поточного класу поза класом або вам потрібно отримати доступ до автоматично створеного члена в межах класу (наприклад, імені, елементів керування тощо).
Еван Плейс

@Evan: Я роблю саме те, що ви описуєте, окрім останньої частини. Я схильний використовувати thisабо Me(C # & VB.NET відповідно) при виклику методів і властивостей. IMO, це полегшує мій код для читання та розуміння пізніше, особливо коли в цьому конкретному обсязі є чотири або більше об'єктів.
Алекс Ессільфі

11

Я перестала ходити за рекомендованим університетом методом проектування перед впровадженням. Робота в хаотичній і складній системі змусила мене змінити своє ставлення.

Звичайно, я все ще займаюся кодовим дослідженням, особливо коли я збираюся торкнутися коду, якого раніше ніколи не торкався, але, як правило, я намагаюся зосередитись на якомога менших реалізаціях, щоб спочатку щось зробити. Це головна мета. Потім поступово уточнюйте логіку і нехай дизайн просто з’являється сам собою. Програмування - це ітераційний процес і дуже добре працює при спритному підході та з великою кількістю рефакторингу.

Код не буде виглядати зовсім так, як ви спочатку думали, що це буде виглядати. Буває щоразу :)


10

Раніше я брав участь у розробці за контрактом. Це означало поставити багато перевірок помилок на початку всіх моїх функцій. Контракти як і раніше важливі, з точки зору відокремлення проблем, але замість того, щоб намагатися виконувати те, що мій код не повинен робити, я намагаюся використовувати одиничні тести, щоб перевірити, що він робить.


Мене вчили програмувати так. Звичайно, мене викладав учитель математики з вищої школи, тому, гадаю, має сенс, що він хотів, щоб його функції були самоперевіреними.
Алекс

10

Я би використав статичні в багатьох методах / класах, оскільки це було більш стисло. Коли я почав писати тести, практика дуже швидко змінилася.


10

Перевірили винятки

Дивовижна ідея на папері - чітко визначає договір, немає місця для помилок або забуття перевірити на якусь умову виключення. Мене продали, коли я вперше почув про це.

Звичайно, на практиці виявився такий безлад. На сьогоднішній день такі бібліотеки, як Spring JDBC, який приховує спадщину, перевіряють винятки як одну з головних її особливостей.


9

Що-небудь варте було зашифровано лише однією конкретною мовою. У моєму випадку я вважав, що C - найкраща мова коли-небудь, і я ніколи не мав причин кодувати що-небудь іншою мовою ... ніколи.

З тих пір я оцінив багато різних мов та переваги / функціональність, яку вони пропонують. Якщо я хочу зашифрувати щось невелике - швидко - я би використав Python. Якщо я хочу працювати над великим проектом, я б кодував C ++ або C #. Якщо я хочу розвинути пухлину мозку, я б зашифрував Perl .


8

Коли мені потрібно було зробити деякий рефакторинг, я подумав, що швидше і чіткіше почати відразу та впроваджувати новий дизайн, налагоджуючи з'єднання, поки вони не спрацюють. Тоді я зрозумів, що краще зробити ряд невеликих реконструкцій, щоб повільно, але надійно просуватися до нового дизайну.


пам'ятаю, скільки разів мене це
покусало

8

Мабуть, найбільше, що змінилося в моїх практиках кодування, як і в інших, - це прийняття поза класів і бібліотек, завантажених з Інтернету, як основи поведінки та функціональності в додатках. У школі, коли я відвідував коледж, нас попросили розібратися, як покращити справи за допомогою власного коду та покладатися на мову, щоб вирішити наші проблеми. З урахуванням прогресу у всіх аспектах користувальницького інтерфейсу та використання послуг / споживання даних це вже не реалістичне поняття.

Є певні речі, які ніколи не змінюватимуться в мові, і наявність бібліотеки, яка перетворює цей код на більш просту транзакцію і в меншій кількості рядків коду, які мені потрібно написати, - це благо. Підключення до бази даних завжди буде однаковим. Вибір елемента в DOM не зміниться. Надсилання електронного листа за допомогою серверного сценарію ніколи не зміниться. Доводиться писати цей раз і знову витрачає час, який я міг би використовувати для вдосконалення своєї основної логіки в додатку.


7

Ініціалізація всіх членів класу.

Я використовував, щоб явно ініціалізувати кожного члена класу з чимось, як правило, NULL. Я зрозумів, що це:

  • зазвичай означає, що кожна змінна ініціалізується двічі, перш ніж її читати
  • нерозумно, оскільки в більшості мов автоматично ініціалізуються змінні в NULL.
  • насправді застосовує незначний показник ефективності на більшості мов
  • може розширювати код на великих проектах

4
Іноді наслідки НЕ ініціалізації всіх членів класу можуть насправді вкусити вас у $$.
muusbolla

Якщо ви не використовуєте мову на основі прототипу, яка створює нові екземпляри шляхом клонування. Ініціалізація всіх членів може дійсно заощадити багато проблем.
Войцех Бедерський

6

Як і ви, я також застосував шаблони IoC для зменшення зв'язку між різними компонентами моїх додатків. Це робить технічне обслуговування та заміну деталей набагато простішими, якщо я можу підтримувати кожен компонент наскільки це можливо незалежним. Я також використовую більше об'єктно-реляційних рамок, таких як NHibernate, щоб спростити завдання управління базами даних.

Коротше кажучи, я використовую "міні" рамки, щоб допомогти у створенні програмного забезпечення швидше та ефективніше. Ці міні-рамки економлять багато часу, і якщо зробити все правильно, це може зробити додаток дуже простим для підтримки в дорозі. Plug 'n Play для виграшу!


-1 Я не витримую розповсюдження IoC та фреймворків. Розв’язка добра, IoC та фреймворків = зайва складність
Пол Холлінгсворт

Як ви можете похвалити роз'єднання і все ще ненавидіти IoC та інші рамки? Ось з чого починаються багато рамок і дизайнерських моделей IoC.
ajawad987
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.