Як вдосконалити навички кодування? [зачинено]


76

Ось трохи інформації про мене, перш ніж розпочати питання.

Я бакалавр інформатики, основна мова кодування - Java.

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

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

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

Які можливі способи я можу розвинути та розширити свої навички програмування / кодування.

Також ви можете запропонувати джерела для тих же?

Відредаговано : Джерела, що пропонують розвиток навичок кодування.


13
FYI: З мого досвіду теоретичні знання, безумовно, допоможуть вам у подальшій частині
Гопі

6
Чи можете ви плавати просто читаючи книгу "навчіть себе плавати за X днів"?
pramodc84

9
"Умисна практика". Зробіть щось, що трохи складніше, ніж ваш сучасний рівень, вирішіть це, навчіться у нього, повторіть.

7
@ pramodc84 Але, безумовно, читання книги, пов’язаної з плаванням, а потім стрибком у річку, безумовно, допоможе, якщо просто стрибати в річку і намагатися навчитися плаванню
Gopi

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

Відповіді:


46

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

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


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

2
Тепер ця книга в моєму must-readсписку. :) Дякую!
ykombinator

2
@ykombinator:(push 'code-complete must-read)
Джорджіо

98

Моя улюблена цитата з Конфуція:

Чую, знаю. Бачу, пам’ятаю. Я так розумію.

Всі знання, які я отримав, були від застосування однієї та єдиної стратегії:

Завжди йдіть на найскладніший шлях.

Ви хочете вивчити C #? Отримайте роботу розробником C #.

Ви хочете вивчити італійську мову? Заходьте туди із словниковою англійською / італійською мовами та говоріть італійською

Ви хочете навчитися кодування? Код!


19
+1 за завжди йти найскладнішим шляхом. Зрештою вони стають легким шляхом! Хороша відповідь.
Райан Хейс

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

2
Я змінився найсильніше, найскладніше. Це більш позитивно

2
Гарне програмування не є спортом для глядачів.
інкогніто

4
@Pierre, ти хочеш вивчити 1) латинську мову і 2) Perl. Код Perl латинською мовою: csse.monash.edu.au/~damian/papers/HTML/Perligata.html

21

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


1
Саме так! Це чудовий момент. Напевно, у мене ще немає наставника.
ykombinator

4
Напишіть якийсь код та опублікуйте його з певним запитанням на StackOverflow.com і ви отримаєте багато.
JeffO

2
Ось чому я продовжую сукатися, щоб мати відгуки про код на наш проект, але "на це немає часу".
MetalMikester

1
@MetalMikester - але завжди є час для цього.
JeffO

1
@JeffO Саме так відбувається зараз. :(
MetalMikester

10

Ось презентація Дана Норта та QCon про те, як перейти від новачків до експерта-програміста під назвою «Заточення інструментів» . Нижче наведено основні пропозиції презентації:

  1. Вивчіть основи: ката, код для розваги ...
  2. Вчіться у інших людей: читайте книги, блоги тощо, читайте код, програмуйте в парах ...
  3. Зрозумійте тенденції: що зараз відбувається в галузі
  4. Ділитися знаннями: найкращий спосіб щось дізнатися - це зрозуміти та навчити цього
  5. Підтримуйте свою панель інструментів: використовуйте "позачасові" та нові інструменти
  6. Дізнайтеся, як навчитися: зрозумійте, як працює навчання

8

Спробуйте написати компілятор для якоїсь простої мови з нуля. Ви багато вдосконалите свої навички по дорозі (за допомогою деяких приємних теоретичних прийомів з формальної теорії мови як бонусу). Я спробував написати просту версію Excel, і це теж дуже приємна вправа.

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

Є одна приємна цитата Нейт Кірбі:

"Погані програмісти ігнорують деталі. Погані дизайнери втрачаються в деталях."

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

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

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


5

Я реалізував або пул ставок, або гру Баккара майже всіма мовами, які я вивчив.

Цей тип програмного забезпечення охоплює

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

Багато блекджек гравців та покер також працюватимуть.

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


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

4

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

Кодування те саме. Найкращий спосіб поправитись у цьому - це вивчити, що роблять інші, зрозуміти, ЧОМУ вони це роблять, а потім робити це самотужки.


Так, Тайгер Вудс стане «найкращим» гравцем у гольф, маючи чимало любителів. :-) Тож він насправді не хороший приклад.
DL

4

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

Ви можете подивитися там: http://codekata.pragprog.com/


4

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

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

Тож практикуйте. Стрибайте у воду! Удачі :)


3

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

Або ви можете прочитати посилання на синтаксис мови, якщо є хороший, який охоплює найновішу версію. Як приклад, ось посилання на C # (Не версія вгорі. Я помилився, переглянувши більш популярну старішу версію, у якої не було синтаксису, який я шукав)


3

Загальний консенсус - "написати більше коду", з чим я згоден, але я додам до цієї поради, що вам слід написати багато різних видів коду. Java добре, що стосується мов, але ви обов'язково повинні писати код як вгору, так і вниз по спектру живлення. Окрім Java, я б запропонував зробити кілька невеликих проектів на мові нижчого рівня (C для цього хороший), мовою сценаріїв (я віддаю перевагу perl, але python - також хороший вибір), функціональній мові ( тут є загальна рекомендація, але OCaml і Haskell - це теж хороший вибір), і принаймні комфортно читати мову монтажу.

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

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

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


2

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

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

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


2

Мої пропозиції

  • Знайдіть проект для домашніх тварин і напишіть його іншою мовою (lyke python / c #) до тієї, яку ви знаєте. Це навчить вас більше, ніж ви можете собі уявити. Подивіться на інші схожі проекти та спробуйте отримати паритет функцій з ними. Ви можете піти з цим повільно і мати скромні цілі, постійно збільшуючи рівень складності новими можливостями. Це також стає твоєю виставою, коли ти йдеш на співбесіду.
  • Знайдіть у своєму проекті використання відповідних технологій, таких як веб-сервіси, javascript, ajax, геокодування та в основному все, що просувається в світі програмного забезпечення.
  • Грайте з іншими операційними системами, такими як Linux / freebsd. Чим більше ви потрапляєте в різні види систем, тим більше ви зрозумієте мислення, яке їх спонукає, і чому вони робили все так, як вони робили.
  • Коли ви закінчите з частинами свого коду, поверніться до нього і намагайтеся постійно вдосконалювати його. Знайдіть неефективність, додайте більше коментарів, коли це потрібно, спробуйте вдосконалити її.
  • Копайтеся на сайті c2.com. Є багато хороших методів кодування. Дізнайтеся це і спробуйте застосувати їх у власному проекті.
  • Читайте такі книги, як прагматичний програміст та код, вони дадуть вам знання про загартовані бойові програми.
  • Це може здатися непов’язаним, але знайдіть інше технічне захоплення, якщо у вас вже немає такого, як гоночні автомобілі на RC, грають на музичному інструменті або вивчають іноземну мову. Чим більше шматочків вашого мозку використовується, тим краще, і вам потрібно час від часу розмотуватися, оскільки програмування може отримати занадто багато.

2

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


1

"Тренуйтеся!" Це кліше.

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


1

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

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

О, і якщо ви не впевнені, що означає NP-завершеність, або якщо позначення big-O лякає вас, то, напевно, вам варто взяти певну теорію класів обчислення та алгоритмів.


1

Я б сказав, що вам слід ознайомитись із моделями дизайну, такими як Builder, Factory, Composite, а згодом спостерігач, посередник та Flyweight. Шаблони дизайну - це не все-все-все для кодування рішень, але вони демонструють, як реалізувати теоретичні концепції об'єктно-орієнтованого програмування.


1

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

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

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