Яка найефективніша річ, яку ви зробили для вдосконалення своїх навичок програмування?


876

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

Моє запитання: що найефективніше, що ви зробили, щоб покращити свої навички програмування? Що б ти порадив іншим, хто хоче вдосконалитись?

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


18
Практика, практика, практика. І ніколи не задовольняйтеся першим, що спадає на думку.
Марк Рансом

2
+1 для Марка Рансома ... Складність виникає, коли ти все ще не задоволений 100-ю справою, яка прийшла в голову!
Stimul8d

5
Не витрачаючи жодного часу на сайті програмістів Stack Exchange допомогло мені надзвичайно покращити свої навички кодування.
Робота

3
@Mark Trapp: як це не конструктивно?
праворуч

1
@WTP - Прочитайте опис. "Це запитання не вписується у наш Q&A формат." - як хтось, хто задав це питання, я згоден. Про це просили у більш спокійні часи.
Oded

Відповіді:


753

Без конкретного порядку ...

  • Робота з людьми набагато розумнішою, ніж я

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

  • Вивчайте інші рамки / мови та бачите, як вони роблять справи, і порівнюйте це з речами, які я вже знаю

  • Читання про шаблони, кращі практики, а потім вивчення моїх старих речей та застосування цих моделей, де це необхідно

  • Парне програмування

  • Не погоджуючись з усім, що говорить Джоел. ;)


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

117
Дивіться, як розумніші вправляються з помилками - саме тоді я довідаюсь їх найбільше

82
якщо це список не в конкретному порядку, чи не повинен це бути не упорядкований список, а не упорядкований? : P
Jon W

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

15
Я не згоден з усім, що Джоел каже, я думаю, що він багато часу може сказати цікаві речі. Мій коментар був язиком у щоках. Є багато речей, з якими я погоджуюсь, коли йдеться про Джоеля, але приблизно раз на місяць він змушує мене похитати головою і запитати "Що? Ти серйозний ?!" Мені подобається те, що я вважаю найскладнішими речами, які змушують мене справді перевіряти свою позицію і в що я вірю.

557

Вирішивши, щоб ТО був "торгом все торгів"

Досить на початку своєї кар’єри я був експертом з певною базою даних та мовою програмування. На жаль, саме ця база даних втратила "війни за бази даних", і я виявив, що варіанти кар'єри були ... обмеженими. Після цього я свідомо вирішив, що більше ніколи не дозволю собі стати таким боком. Тож я вивчив усе, на що я міг потрапити: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL та ін. Які б інструменти та технології не були новими чи незвичайними, я став "ідучи до хлопця" - "Запитайте Крейга, якщо він цього не знає, він дізнається це". У результаті я працював над різними проектами, від вбудованих систем екологічної телеметрії до систем управління та управління протиракетної оборони.

Єдина проблема, з якою я коли-небудь стикався, - це з компаніями, які наполягають на тому, щоб Підждон перетворив мене на спеціальність, коли моя спеціальність - це загальний професіонал. [РЕДАКТ: Також відомий як людина- полімат чи ренесанс або багатоспеціаліст. ]

Щось слід пам’ятати… який період напіввиведення знань у галузі високих технологій? Це відповідає Закону Мура: половина всього, що ви знаєте, буде застарілим через 18-24 місяці. Експерт, який вибирає неправильну дисципліну, може легко підірвати пресу технологій; генералісту залишається лише додати ще трохи навичок і запам'ятати уроки минулого в застосуванні цих навичок.


224
"Джек всіх торгів, майстер жодних, хоча часто кращий, ніж майстер одного". -Adam Savage
jms

9
Відмінна порада, проголосували. "Сиріт-техно" в моєму минулому був моїм 8-бітовим Atari, який програв C64. Я дійшов такого ж висновку, - цитую Гайнлайна, "спеціалізація - це комахи".

17
Завжди є компроміси, і лише 86 400 секунд на день - вам доведеться вирішити, як ви хочете їх витратити. У моєму випадку я вирішив витратити додаткові години (поза моїми робочими годинами), щоб вивчити речі, які, на мою думку, були цікавими або будуть затребувані в майбутньому; вам потрібно буде зробити власний вибір.
Крейг Трейдер

74
"Спеціалізація - для комах". - Хайнлайн
Келлі С. Французька

31
Де ваш знак "Генераліст"? ^^
Арніс Лапса

459

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

Це насторожило мене свідомо намагатися вдосконалити себе і особливо якість коду, який я пишу.

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

Найголовніше, що я дізнався від Аарона, - це ніколи не припиняти навчання.

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

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

Я радий, що зустрів Аарона. Без нього я б, мабуть, все ще працював у старій компанії зі старою бандою, нікуди не ходив і занадто багато думав про себе.


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

28
+1 для "Аарон завжди говорив про те, як я ніколи не повинен зупинятися на першій робочій версії, а переробляти та вдосконалювати, поки код не стане елегантним"

17
"ніколи не зупиняйтеся на першій робочій версії" ??? - коли ви повинні завершити свою роботу? :)

4
Я намагався бути Аароном, іноді це працює, але іноді я помиляюся. "Ті, хто не може навчитися історії, приречені повторити її". Добре тримати розум відкритим для нових ідей, але погано слухати n00b над тими, хто вже зробив помилки за вас. Кожному потрібен певний скептицизм, оскільки ми вчимося, задаючи питання собі та іншим.

27
Проблема в тому, що занадто багато людей думають, що вони "Аарон"
cinqoTimo

257

Дві речі:

  1. Прочитайте код, написаний різними людьми.
  2. Напишіть документацію на код, написаний іншими людьми.

Написати код надзвичайно просто; кожна інша людина, яку я знаю, може це зробити. Але читати чужий код і з'ясовувати, що він робить, це був для мене зовсім новий світ.


42
І один з найкращих способів дізнатися, що НЕ робити :)
AviD,

9
Ви можете бачити, як вони щось роблять. Може, вони роблять це краще, ніж ви?

4
Мені довелося розкопати справді старий і повністю незадокументований проект, документувати його, виправити в ньому деякі помилки та перенести його до нової системи. Я багато чому навчився, і не все було чим не робити. Хоча я і навчився цінності коментарів.

І поки ви пишете документацію, можливо, напишіть для неї кілька тестових примірників (якщо їх не існує). Тоді ви також дізнаєтесь, як користуватися кодом.
dhable

Так правда, це була найважча частина моєї роботи протягом тривалого часу.

199

Регулярно відвідуйте спортзал.

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


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

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

1
так, це сьогодні велика проблема. у нас немає часу, особливо в Пакистані, де робочий час набагато більше
maz3tt

2
+1 як нагадування про себе, щоб отримати більше вправ.
SingleNegationElimination

Я вважаю, що спорт є чудовим мотиватором - для мене це баскетбол.
Адель

181

Програмування. Робота над цікавими проектами. НІЧЕ НЕ, як зайти і працювати над речами. Особливо під тиском. Я завжди кажу всім, хто запитує мене, як програмувати - просто знайдіть класний проект (навіть якщо вам доведеться його скласти) і працюйте над ним.


4
Я згоден. Забруднення рук в проекті, мабуть, найбільше сприяло моєму вдосконаленню. ; )
Майк Грейс

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

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

172

Зайнята неповна робота з репетитором студентів у моєму університеті. Це дійсно змушує вас зрозуміти щось на зовсім іншому рівні, коли вам доведеться пояснити це комусь іншому.


1
Я можу поручитися за це.

1
Викладач в університеті розповів мені про відкриття, коли я ще був студентом. Після закінчення навчання я пробув майже рік (за сумісництвом).
Білл Ящірка

29
Як пише Дуглас Адамс у "Цілісному детективному агентстві Дірка Гентлі": "найкращий спосіб спробувати пояснити це комусь іншому. Це змушує вас розібратися в думках. І чим повільніше і туманніший ваш учень, тим більше вам доведеться розбити речі на все більш прості ідеї ".

2
Надто вірно. Навчальна фотографія зробила мене кращим фотографом. Не так багато кодера Тхо :(
CAD заблокували

9
mutuo ista fiunt, et homines dum docent discunt - Seneca

135
  1. Я великий прихильник системи "вивчайте одну мову програмування щороку". Один рік дає вам достатньо часу, щоб подолати "добре, я знаю синтаксис, тому тепер я знаю мову" упередження, і змушує вас піти трохи далі і зрозуміти, що вигідне в цій мові, і програмуйте в стилі, рідному для ця мова (під якою я маю на увазі, ви не закінчуєте писати програми Java, використовуючи синтаксис Ruby). Кожна мова змінить те, як ви думаєте про програмування - я знав, як використовувати рекурсію, але мислення в рекурсії не відбулося, поки я не взяв клас по прологу (я думаю, функціональна мова, як ML, мала б такий же ефект).

  2. Почніть проект для домашніх тварин. Моє особисте рівняння для хорошого проекту з домашніми тваринами - це те, що у вас є досвід роботи з чимось, що ви не знаєте = додаток, яке ви вважаєте корисним. Наприклад, Migratr (мій власний проект, який триває з кофеїном, який триває) розпочався як "Я знаю c #, але я ніколи не кодував веб-API. І я хочу перенести всі свої фотографії в Zooomr". Це так само легко могло бути "Я кодувався проти веб-API раніше, але я не знаю C #"

Опублікування проекту вашого домашнього улюбленця - саме по собі дивовижний навчальний досвід. Раптом всі речі, практично нікого не вчать, але всі повинні знати (для мене це було налаштування власної системи тестування, отримання максимальної користі від систем контролю версій, як робити темп, коли ніхто інший не встановлює свої терміни, як взаємодіяти зі своїми Користувачі і як знати, коли сказати "ні", щоб подати запити), все, що наповнює бульбашки на поверхні, і змушує вас самоосвічуватися на рівні, на якому ви раніше не були, принаймні, не байдуже читаючи полум'я на dzone про плюси / мінуси способу "foo" vs "bar".

Виконання цих двох речей охоплює обидва кінці спектра. Вивчення нової мови зробить вас кращим кодером. Проект для домашніх тварин зробить вас кращим розробником: P


Я можу лише погодитися; "Проект для домашніх тварин домашньою невідомою мовою" - це добре, можу підтвердити

Дуже гарна пропозиція навчитися чомусь знайомому.

Відмінна пропозиція "щось із чим ти маєш + + те, чого ти не знаєш"! Спасибі
sica07

Зараз мені потрібна домашня тварина.
Адель

118

Навчив себе складання. Це було на старому чіпі 6502, коли мені було 13? 14? Занадто давно. Але я не можу придумати нічого, що поліпшить ваш розвиток більше, ніж опуститися на рівень біт.

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

У мікросхемі 65xx було три регістри (акумулятор, X і Y) і відсутні інструкції на рівні машини для множення або ділення. Я пам’ятаю, що кодував розпорядок обчислення бойової шкоди, переглядаючи книгу і раптом розуміючи, що мені доведеться написати власну математичну бібліотеку. Провів пару тижнів, переписуючи 1 та 0 по всьому моєму зошиту, намагаючись зрозуміти, що насправді означає "поділ" та "десяткові місця".

Я з тих пір вивчав C ++, pascal, .NET, багато інших ... але жоден з них не навчив мене так багато, заінтригував мене чи залишив у мене сенс "ух", що збірка на моєму старому комодорі зробила .


16
Я повинен проголосувати за те, щоб повернути чудові спогади! Можливо, я навіть трохи роздмухував :)
Charlie Flowers

3
Я все ще подумки перекладаю C / C ++ на мову монтажу 68K. Дивно, як це допомагає написати ефективний код для будь-якої платформи.
Боб Мерфі

1
Ах, 6502 повертає чудові спогади. Я так багато навчився за допомогою асемблера на цій мікросхемі.

5
КОЖЕН студент програмування повинен мати глибоке опромінення асемблера на початку навчання!

2
Я робив те ж саме, що і підліток. Це дійсно навчало, як працюють комп’ютери, більше, ніж мова на високому рівні.
CAD блокується

110

Озираючись на старі речі, я написав і зрозумів, наскільки вони погані.


Я другий, що ... Я навряд чи навіть прочитав деякі свої старі речі.
Unkwntech

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

+1 для об'єктивності. Перегляд вашого старого коду не скаже вам, як вдосконалитись, лише якщо ви вдосконалилися і як, або, навпаки, якщо цього не зробили.

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

3
@Christopher Mahan: І в дуже поганих випадках весь том.
Танатос

93

Прочитайте

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

Просто розвивайте апетит до читання.


2
Плюс, хитрий, 1. Я починав цікавитись, де цей вибір.
Танатос

87

Програмування.

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


8
Якщо ви хочете в чомусь поліпшитись, немає нічого кращого, ніж робити це.
Джефф Сівер

4
+1 - Це нагадує мені пошук Форестера : "Перший ключ до написання - це ... писати"
Wizard79

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

1
Однозначно найкраще, що я зробив для вдосконалення свого програмування - це отримання роботи.
Метт Еллен

1
Я здогадуюсь, що питання передбачало "крім програмування" ...
UncleZeiv

81

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

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

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


7
І він, мабуть, має меншу майстерність, бо частина його знань застаріла ..

72

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


11
суміш двох це насправді те, що найкраще працює для мене; читати код інших людей і переробляти його, щоб зробити його читабельнішим - чудова вправа

Читання хорошого коду звичайно ... та розуміння його. І модифікувати його, або писати тести на нього.

4
Читання коду є цікавим, але воно насправді не потрапляє під вашу шкіру, поки ви насправді цього не зробите.

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

70

Пара програмується з дуже різноманітними та самовпевненими людьми


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

67

Основні речі, які допомогли мені як програмісту:

  • Навчений набір сенсорного тексту.
  • Навчився долати сором’язливість і задавати питання.

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

І якщо ви не запитаєте, ніхто вам не скаже.


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

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

2
Я бачив, як люди вдаряли 15 стрілок вгору, щоб відновити команду з 2 символами. Досить сумно. Це як у деяких дітей без ІДЕ ... абсолютно некомпетентних.

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

2
Позиції рук не важливі - головне, що ви можете набирати текст, не дивлячись. На своєму ноутбуці я не закладаю зап’ястя.


53

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

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

  2. Тест, тест, тест. Багато програмного забезпечення, яке я бачив у великих корпораціях, використовують тестові приклади. Чорт, вони використовують JUnit, xUnit та всі інші мови тестування модулів. Але проблема, яку я бачив, полягає в тому, що більшість програмістів ніколи не бачать, як виглядає їх програмне забезпечення у виробництві. Дізнайтеся, як користувачі (або системи, якщо це пакетні завдання) взаємодіють із вашим додатком, бібліотекою чи інтерфейсом, щоб дізнатися, яку неправдиву інформацію вони кидають на неї. Це допоможе вам створити хороші тестові випадки та перестати припускати, що ваша програма завжди подаватиме правильний набір даних.


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

48

Вивчена схема.


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

46

Написання коду та багато його.


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

Читання коду та багато його.
Стефан

3
Читання та написання великого коду ... Відкритий код для нас є таким благом;)
Одін

45

Навчання регулярних виразів.


Щойно це зробили чотири місяці тому, коли я почав навчати себе перл! Моя здатність використовувати vim та unix в цілому небо розгорнулося! Дивовижний.
шістдесят футів

Регулярні вирази не просто корисні, вони також змушують вас думати по-іншому.
Тихон Єлвіс

+1. Повністю згоден. Я здивований, що люди часто дивуються, роблячи досить основні речі в vi, sed або grep.

39

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

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

2
@hstoerr - не кажучи вже про те, що конкуренти отримують винагороду за те, що вони важко читають код (їх рішення важче оскаржити)
Шейн Фулмер

7
(Вибачте, якщо це звучить образливо) Я вважаю, що люди, які не люблять Topcoder (або інші подібні конкурси), намагаються вигадати причини, чому їх виконання зробить вас жахливим програмістом. Добре, якщо вони вам не подобаються. Але створити помилкові причини ІМХО не корисно. Жоден серйозний учасник ТС навмисно не приховує код (насправді це підстава для дискваліфікації, якщо його спіймали). Я бачу, що багато людей, які не змагаються, постійно пишуть поганий код. Конкурси алгоритмів не спрямовані на те, щоб навчити хорошим навичкам кодування (дізнайтеся, що з іншого місця), а навчити / розвивати щось набагато глибше.
МАК

2
TopCoder - це спосіб показати себе, наскільки кращими ви могли б стати.

38

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


36

Покиньте останню роботу.


2
я також! (потрібно ще кілька символів ...)

6
Якби ви сказали нам чому, це може бути навіть відповіддю. ;-)

2
Підтримка проекту, який був зроблений на базі EJB2, не був моєю ідеєю розваги. Ніяких нових речей, просто старе лайно. І перспектива на новій роботі не краща. :(
мін

Був там зробив те.
Allbite

+1 Удачі висадити роботу, яка не є тупиком.
Tomek Szpakowicz

29

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

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

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

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


29

Кажуть, що 70% хорошого коду - це перевірка помилок та їх обробка. Коли я почав програмувати таким чином, мій код значно покращився. Думка про те, що може піти не так, а потім негайно впоратися з цим, зробила величезну зміну. Він відчуває , як робити все , що перевірка тільки стає на шляху отримання коду і працює, але це скорочує час від початку до кінця з коефіцієнтом від 2 до 4.

Тільки хто такі люди "вони" і де живуть "вони"?


28

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

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

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


28

Постійно навчайтесь і практикуйте те, що ви дізнаєтесь.

За допомогою:

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

  2. Читання книг: Я вирішив у вільний час читати і читати різні книги. Є багато добре написаних книг експертів, які просто сидять навколо, чекаючи, щоб їх прочитали. Глибина, яку ви можете отримати від книги, не має собі рівних, наприклад, читаючи різні дописи на форумі.


10
+1 для згадування книг. Багато досвіду багато не варте, якщо це все витрачається на те, щоб робити речі не так.
mbillard

27

Зазвичай це мій хронологічний порядок вивчення будь-якої нової технології:

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

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

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

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

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


24

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.