JavaRush /Java блог /Random UA /Кей Хорстманн та його 1500 слів про те, як стати найкращи...

Кей Хорстманн та його 1500 слів про те, як стати найкращим Java-програмістом

Стаття з групи Random UA
Швидше за все, ви чули ім'я Кея Хорстманна (Cay S. Horstmann). Він — досить помітна людина у світі Java і автор багатьох книг з нашої з вами улюбленої мови. Серед них - класичний курс "Core Java" (російською виходив у двотомнику "Java. Бібліотека професіонала" ) і серія з коротким викладом по суті "Java for Impatient" (російською виходабо "Java SE 8. Вступний курс" і "Java SE 8. Базовий курс» ). Носить горде звання "Java-чемпіон". А за цим посиланням можна знайти його олскульний сайт з цікавою інформацією.
Кей Хорстманн і його 1500 слів про те, як стати найкращим Java-програмістом.
Пропонуємо вашій увазі переклад статті для ресурсу InformIT , в якій Кей озвучує кілька порад початківцям і програмістам, що продовжують, про те, як стати краще у своїй професії. Одного разу Дженніфер Бортел, редакційний директор InformIT, звернулася до мене з проханням наголосити на тому, як стати найкращим Java-програмістом. Вона припустила, що я, автор Core Java for the Impatient, можу щось про це знати. «Немає нічого простішого, просто купіть книгу, — спочатку подумалося мені. Але така відповідь не прокотила, оскільки я маю вмістити це в 1500 слів, а до цього моменту їх всього 62* (зрозуміло, при перекладі статті ми не прагнули зберегти кількість слів — прим. перекл.). Нещодавно я отримав листа від знайомого розробника, якого на співбесіді запитали, чому наступний код не є потокобезпечним:
class ThreadSafeClass extends Thread
{
     private static int count = 0;

     public synchronized static void increment()
     {
         count++;
     }

     public synchronized void decrement()
     {
         count--;
     }
}
Мій приятель вирішив, що в цьому прикладі код є безпечним, і я погодився з ним, зазначивши, що там не вистачає одного ключового слова staticв другому методі, і після його вставки доступ контролюється вбудованим блокуванням об'єкта класу. Я також сказав, що це не дуже хороше питання для співбесіди, оскільки якщо вам потрібний потоковий лічильник, краще використати AtomicInteger. Але ось посеред ночі я прокинувся, і запитав: а що, коли це словоstaticбуло пропущено невипадково? Можливо, якийсь підлий інтерв'юєр цілеспрямовано збудував цей приклад саме так, щоби ввести кандидатів в оману? Тому я знову написав розробнику, який запитав мене, і сказав, що, ймовірно, раніше помабовся: у паралельному Всесвіті під назвою «Питання співбесід» відповідь на це запитання наступна: «Другий метод містить блокування об'єкта». Після цієї відповіді хлопець запитав, чи не веду я YouTube-канал, де вчу, як справлятися з такими завданнями зі співбесід. На жаль, я цим не займаюсь. Я навчаю комп'ютерних наук і пишу книжки, але моя головна мета — не підготувати кращого «вирішувача завдань на співбесідах», а зробити з моїх студентів найкращих програмістів. Колись Пітер Норвіг (Peter Norvig, американський вчений у галузі штучного інтелекту, директор з досліджень Google, - прим. перев. ) написав чудову статтю у своєму блозі. Він стверджував, що книги, які обіцяють навчити вас Java за 24 години або 21 день, просто смішні. З ним складно не погодитися: щоб стати експертом у будь-якій сфері, потрібно 10 років або, можливо, 10 000 годин. І добре відомо, що експерти опрацьовують інформацію не так, як новачки. У класичному експерименті, досвідченим і шахістам-початківцям протягом декількох секунд показували шахівницю з певним розташуванням фігур, а потім її ховали і просабо розставити фігури так, як було. Новачки справлялися із завданням не дуже добре, а ось експерти — без проблем. Але тільки за однієї важливої ​​умови:розташування фігур має відповідати реальній грі . Якщо фігури були поміщені випадковим чином, експерти відновлювали дошку анітрохи не краще за новачків.
Кей Хорстманн і його 1500 слів про те, як стати найкращим Java-програмістом.
Ось чому на запитання з листа я відповів так, як відповів. Мій досвід — це реальне програмування, а не проходження співбесід, тому я інстинктивно додав ключове слово, що бракує, і зробив «неправильний» висновок. Я хотів би думати, що мене все одно взяли б на роботу, після того, як я пояснив би, що сталося, і чому я ніколи не напишу такий код, як у прикладі без мого доповнення. Мабуть, якби така відповідь їх не задовольнила, мені б самому не хотілося б з ними працювати.
Так от, я не думаю, що підготовка до сертифікаційних іспитів або до співбесід перетворить вас на кращого програміста. Я також впевнений, що не спрацює і купівля великої кількості книг із програмування з їх подальшим прочитанням від кірки до кірки (хоча мені, як автору цих самих книг, і не хотілося б цього визнавати!). Насправді, справді хороший спосіб стати найкращим програмістом — це створювати якнайбільше програм.. Час від часу я викладаю вступний курс з інформатики у своєму університеті. Це, безумовно, найважчий курс із усіх, які мені доводилося вести. Він навіть складніший, ніж курс, який читають випускники. У ті часи, коли я тільки-но почав працювати молодим професором, я старанно начитував студентам лекції, в яких слухняно висвітлював питання програмування, такі, як різниця між forциклами whileі do. Потім я ставив студентам чотири тритижневі проекти. І цей предмет викладався саме так із початку часів у всіх вишах. Після моєї першої спроби інструктор курсу другого семестру поскаржився, що більшість моїх колишніх учнів після першого семестру програмування до ладу не засвоїли навіть прості цикли. І такі результати теж мали місце з початку часів. Пам'ятайте статтю«FizzBuzz чи чому програмісти не вміють програмувати» ? Коли ви вивчаєте іноземну мову, більшість завдань — це вправи та практика, а не теорія. Вкрай важливо «проштовхнути» знання у підсвідомість. Переломний момент настає тоді, коли вам більше не потрібно активно думати про кожен цикл, або (у разі французької), про кожний нерегулярний дієслово. Якщо цей момент настав, то ви готові перейти на наступний рівень. І нічого революційного у цій думці немає.
Кей Хорстманн і його 1500 слів про те, як стати найкращим Java-програмістом.
Ключ до всього — миттєвий зворотний зв'язок. Деякі психологи вважають, що ми могли б зробити набагато більше з комп'ютерним навчанням з миттєвим зворотним зв'язком. Наприклад, в іншому класичному експерименті пілоти-стажери-початківці пройшли тренувальну сесію, в якій від них вимагалося знову і знову дивитися на приладову панель і описувати рух літака. При цьому вони отримували миттєвий зворотний зв'язок із зазначенням, правильно вони це зробабо чи ні. Після двох годин навчання вони перевершабо досвідчених пілотів. Зрозуміло, це не означає, що їх відразу можна відправити в справжній політ, але вони більше не нервували через різноманітні та численні циферблати на панелі приладів. Отже, якщо ви тільки починаєте вивчати Java, виконання багатьох практичних завдань для тренування — найкраща ідея.Існує велика кількість веб-сайтів та онлайн-курсів з автоматичною перевіркою правильності коду. Виберіть той, який пропонує ці завдання, а не абракадабру. Зрештою, ви хочете, щоб ваша підсвідомість добре справлялася з тим кодом, який ви насправді писатимете на практиці. Ось чому я не дуже захоплююся прикладами програмування, які використовують надумані ситуації, такі як класи тварин з методами, які нявкають і гавкають. Через деякий час ви освоїте основи програмування. Щоб перейти на наступний рівень, можна написати пару-трійку проектів. Кілька років тому портал InformIT запитав досвідчених програмістів: «Назвіть найкращий спосіб для програміста вивчити нову мову?». Якщо узагальнити їхні відповіді, можна вивести таке: «використовуйте цю мову у вашому нинішньому проекті».Так ось, подумайте, що ви завжди хотіли реалізувати, і вперед. Двадцять років тому, коли Java була ще дуже молода ( нещодавно, 23 січня Java виповнилося 22 роки, — прим. ред. ) мій друг, а часом і співавтор Гері Корнелл подзвонив мені і сказав: «Кей, ми збираємося написати книгу з Java ». Моя відповідь була про те, що ні він, ні я, нічого достеменно не знаємо про цю Java, на що він парирував: «І що з того? Ми вже маємо контракт на книгу». Нема що робити. Нам довелося поспішити, оскільки дехто інший оголосив про швидкий вихід книги «Навчіть себе бути Java-болванчиком за 24 години» … Здається, вона називалася якось так (Кей іронізує над серією книг "For Dummies" - "для чайників", слово "Dummy" можна перекласти як "болванчик", - прим. перев. ). Для вивчення нової мови я почав з проектів — написав програму, яка створила інтерфейс користувача для планування виходу на пенсію, а потім програму, яка підключалася до погодного сайту і відображала звіт про погоду. Після неї — програму, що імітує рух автомобілів автострадою. На той час ці програми були просто чудові! Щоб їх створити, мені довелося вивчитиjava.awt,java.netі нитки (threads). І я мав дізнатися, як насправді змусити все це працювати, а не лише те, що написано у документації. На той час це були зовсім різні речі. Ось чому книга "Core Java" [1] стала хітом:
Кей Хорстманн і його 1500 слів про те, як стати найкращим Java-програмістом.
На той час вивчати Java було набагато складніше. У нас не було таких сайтів, як Stack Overflow ( і JavaRush теж не було, - прим. ред. ). На цьому моменті я переходжу до формулювання наступної поради щодо покращення вашого програмістського «скілла». Отже, коли ви працюватимете над власним проектом, ви обов'язково десь застрягнете. У такому разі йдіть на спеціалізований форум та намагайтеся знайти відповіді. Повірте, це чудова ідея. Спочатку ви ставитимете питання, які до вас уже питали багаторазово. Але незабаром ви наберетеся знань, і ваші питання стануть унікальнішими. Це чудовий спосіб вчитися! Звичайно, не про те, щоб просто скопіпастить шматок коду і запитати: «І що мені тепер з цим робити?». Потрібно докопатися до суті, пояснити, які спроби вирішити завдання ви вже зробабо, перш ніж застрягти. До речі, в більшості випадків, поки я формулюю питання письмово, я сам знаходжу відповідь і мені залишається лише сказати самому собі: «Та що тут за проблема, все і їжу зрозуміло» ще до того, як я відправив запитання. Але навіть якщо цього не сталося… Повірте, продумані питання зазвичай залучають вдумливі відповіді. Тільки не забувайте повертати соціальний боржок, відповідайте на вдумливі запитання інших людей. І формулювання питань, і відповіді на вдумливі питання роблять вас найкращим програмістом. «Так, а що з книжками? — спитайте ви. — Невже завдякиGoogle та Stack Overflowвони остаточно та безповоротно застаріли?». Щоразу, коли я пробираюся через нетрі нової технології, я вважаю, що я мужня людина, і зможу подолати всі складнощі поодинці. Але година безглуздих мук змінює годину розсудливості — і я купую книжку. В даний час технічні книги - надзвичайно вигідна пропозиція. Якщо я заплачу 40 доларів за електронну книгу і отримаю швидку відповідь лише на одне запитання, я вже поверну витрачені гроші. Мені неприємно розчаровувати своїх колег по перу, але я ніколи не читав технічні книги від початку до кінця. Я починаю з того місця, де, як мені здається, розписана моя проблема та її вирішення, і я читаю доти, доки не зрозумію, як її вирішити. З цієї причини зараз я намагаюся писати книги, які можна читати саме так. Такий підхід породив серію "Для нетерплячих".Додам лише, щоб стати кращим програмістом, почніть з визнання того, що існує багато рівнів знань.
  1. Спочатку «втягніть» базові мовні конструкції у свою підсвідомість, тобто доведіть їхнє знання до автоматизму шляхом вирішення великої кількості вправ.

  2. Якнайшвидше приступіть до роботи над реальними проектами, цікавими вам.

  3. Потім приєднайтеся до спільноти, де ви можете ставити запитання та відповідати на них.

  4. Як тільки ви це зробите, на співбесідах ви зможете говорити зі знанням справи та досвідом. І не так вже й важливо, чи вирішите ви надуману головоломку.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ