Навички думати, щоб бути хорошим програмістом [закрито]


10

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

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

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

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

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Відповіді:


10

Дякуємо за покажчики до існуючих питань. Відповіді на них досить різні, ніж я розумію, що ви хочете. Я дам вам кілька пропозицій із власного досвіду. Мій власний ступінь - фізика, чи я прийшов на поле з прогалинами у формальності, правильності / верифікації, аналізі алгоритмів, динамічному програмуванні, системах баз даних і значною мірою на початку, підборі структур даних та алгоритмів. Найбільш очевидні прогалини (наприклад, структури даних та алгоритми) я закрив рано, але все ще читаю книги в цій області, щоб поглибити своє розуміння, переглянути альтернативні презентації та оновити пам’ять. (Мені близько 40, тому книги працюють на мене :)

Ось список для читання (ні в якому іншому порядку, крім порядку, який вони придумали).

  1. Програмування Перлів (Джон Бентлі)
  2. Більше програмування Перли (Джон Бентлі)
  3. Мистецтво комп'ютерного програмування (Дональд Кнут)
  4. Алгоритми C ++ (Роберт Седжвік)
  5. Посібник з дизайну алгоритму (Стівен Скіена)
  6. Практика програмування (Керніган і Пайк)
  7. Елементи програмування (Степанов)
  8. Як вирішити це (Поля)
  9. Структура та інтерпретація комп'ютерних програм (Абельсон та Суссман)

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

Я також дуже багато вийшов з Геделя, Ешера, Баха (Хофштадтера) як підліток, але це вже згадується у відповідях на питання, на які ви вже вказували. Це книжка для читання із задоволенням, а не безпосередньо для розвитку навичок інформатики.

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


4

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

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

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


2

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

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


0

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

Перший - "Дама чи тигр", Реймонд Смуллян. Це чудовий набір логічних головоломок, який підступно включає своєрідний тур із теорії автоматів. Вишуканий матеріал.

Другий - "Годель, Ешер, Бах: Вічна золота коса" Дугласа Хофстадтера, який змушує задуматися про рекурсію та теорію мови.

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


0

Мене цікавить, як ви оцінюєте майстерність інших програмістів.

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

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


0

Ви любите дізнаватися нові речі і можете швидко виправляти помилки. Це означає, що у вас є два ключових елементи, щоб стати гуру: ентузіазм та вміння. Але ви думаєте, що ніколи не знайдете себе експертом, можливо, вам потрібно ще дві речі: фокус та час. Наприклад, коли Лінус Торвальдс вперше випустив Linux у 1991 році, ніхто не вважав його гуру. Він все ще працює над Linux щодня, і ви можете бачити його журнал злиття з репозиторію ядра Linux Git сьогодні. Його фокус робить його найвідомішим гуру в галузі Linux. Час - це абстрактне поняття, це означає підтримувати себе в курсі, накопичувати досвід завдяки постійній практиці, ділитися своїми знаннями з іншими людьми та вдосконалюватися з ретроспективою.

У мене така ж ситуація з вами. Я займаюся програмуванням протягом 15 років зі ступенем не-CS (EE ступінь), і мене завжди бентежить величезний розрив з гуру в моїй галузі. Але у мене є мрія стати гуру і почав відвідувати проект з відкритим кодом. Навички мислення виходять із практики та досвіду. Деякі книги можуть бути корисними, але їх значення в основному є повчальними. Навички мислення, що належать до вас, - з власного досвіду. Почнемо відтепер!

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