JavaRush /Java блог /Random UA /Починаємо з початку або 'Hello, Java World!'
articles
15 рівень

Починаємо з початку або 'Hello, Java World!'

Стаття з групи Random UA
Я хочу розпочати цю статтю з незвичайного, на перший погляд, відступу. Пізніше стане зрозумілим, чому саме.
Починаємо з початку або Hello, Java World!  - 1
Отже, уявімо собі Хтось. Цей хтось хоче освоїти гірські лижі. І для цього він робить наступні кроки:
  • Інструктори, підручники, посібники тощо. - Це все від лукавого. Лижі можна освоїти самостійно. До того ж, у школі він непогано навчився ходити на бігових лижах. Відповідно, всі поради знаючих людей ігноруються.

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

  • Як пробна траса вибирається... ну, скажімо, траса, яка приймає етап кубка світу за гігантським слаломом. Для навчання це якраз.
  • Далі так само.
Отже, питання. Як ви назвете цього? Особисто я, як людина, знайома з гірськими лижами вже близько 20 років, назву її (і це ще дуже м'яко!) — безнадійна. Навчитися чогось за такого підходу неможливо зовсім. Зате вірний спосіб покалічитися. І найвірніший — назавжди залишити ідею стати на лижі. Думаю, ви погодитеся зі мною в такій оцінці. У будь-якому випадку, я практично впевнений, що нічого неприємного цей Хтось на свою адресау не дочекається. А тепер уявімо собі іншого. Нехай він, скажімо, студент факультету інформатики. Він має деяке уявлення про С++, C#, Pascal. Він хоче вивчити Java. Його дії:
  • Література відповідного його знанням рівня (нульового рівня, прямо скажемо) відкидається. На підставі легкого знайомства зі згаданими C++, C# та теорією ООП.
  • Береться найпотужніша середовище програмування. Скажімо, Eclipse чи NetBeans. Та, яка все робить сама, достатньо натиснути одну кнопку.
  • Як пробний додаток вибирається... ну, скажімо, чат. Додаток типу клієнт-сервер, клієнтська частина у вигляді аплету, серверна — веб-сервіс або, на крайній край, сервлети. Для навчання якраз.
Запитання. Як ви назвете цього? Знаєте, у чому парадокс? У тому, що в цьому випадку неприємних оцінок буде значно менше. При тому, що ситуації з усіх параметрів ідентичні. Хіба що наслідки для здоров'я та життя у другому випадку менш фатальні. Може, річ у цьому? Ситуації справді дуже схожі. Я спеціально їх описав у однаковому стилі. І дивна річ: якщо абсурдність першої очевидна, то другому сценарію слід лякає кількість розробників-початківців. Освоєння Java починають із написання мідлетів, клієнтів для баз даних, чатів, створення сайтів на основі сервлетів... Продовжувати можна довго. Але суть проте очевидна. У цьому література початкового рівня із зневагою відкладається убік. Читати це? Мені? Та я на С++ ось уже три роки пишу! (Варіанти – на паскалі, і навіть на visual basic.) І ООП я знаю! Та й взагалі. І що далі? А далі ось що:
  • А як перевести масив із 8 байт у long?
  • А чому трапляється NoClassDefFoundError?
  • А чому я запускаю додаток в Eclipse ( NetBeans/IDEA/JBuilder), і все гаразд, а без нього я набираю java HelloWorld.class, а там помилка?
  • А чому вилітає ClassNotFoundException?
  • А чому не знаходиться бібліотека? Я її вже в classes.zip поклав, а все без толку!
  • А чому я створюю масив об'єктів, а при спробі використання елемента масиву отримую NullPointerException?
  • А чому ...?
  • А чому ...?
  • А чому ...?
Чому, чому, чому? А тому, що Java - це не С + + і не Паскаль. І не Perl. Знання цих мов як частіше не допомагає, а й заважає. Хоча б тому, що у цих мов зовсім різна ідеологія. Але зовнішня схожість вводить в оману. Безумовно, на всі ці "чому" та "як" є відповіді в книгах. У літературі початкового рівня. Але читати її – ліниво (варіанти – соромно, колись тощо). Я знаю досить багато стереотипів, перенесених у Java хорошими фахівцями С++. Один із недавніх прикладів: у конструкторі в жодному разі не можна кидати виняток. Чому? Та тому, що в С++ стан такого об'єкта не визначено. Відповідно, виникає витік пам'яті. У Java такої проблеми немає в принципі, зважаючи на наявність збирача сміття. Проте є люди, які намагаються уникати таких ситуацій. Просто за стереотипом, що вкорінився. І найгірше те, що в результаті цих зусиль сильно ускладнюється код. Вивчити синтаксис нескладно. І зовсім недостатньо. Ідеологія мови набагато важливіша. І для того, щоб її освоїти найефективніше, варто починати із самого початку. З чого саме та як? А це вже інше питання. Отже. З чого та як починати. Це залежить від того, чого ви хочете прийти. Якщо ви хочете стати кваліфікованою мавпою, що кодує, - можна починати практично з чого завгодно. Якщо ви хочете стати професіоналом – тут дещо складніше. Мій досвід дає мені підстави стверджувати таке. Професійний розробник відрізняється від кодера тим, що він розуміє, що відбувається. Він вміє трохи більше, ніж натискати клавіші. Потужне середовище – дуже хороша підмога. Для тих, хто може обійтися без неї. Але ж вона – найчастіше єдиний інструмент тих, хто з неї починав. І в її відсутність цінність мавпи, що кодує, дорівнює нулю. Бо кнопок, на які треба натискати, немає. Взагалі, кнопконатиск може приймати воістину жахливі форми. Один із моїх колег бачив продукт, написаний на Java. Інструкція щодо його встановлення починалася словами: "Встановіть з диска JBuilder..." Ось ЦЕ вже фатально. Якщо розробники не змогли змусити продукт працювати без середовища розробки, мені страшно подумати, як він був написаний. Щонайменше його писали дилетанти. Що я маю на увазі під словами "розуміє, що відбувається". Це означає, що людина повинна розуміти таке: ні. Взагалі, кнопконатиск може приймати воістину жахливі форми. Один із моїх колег бачив продукт, написаний на Java. Інструкція щодо його встановлення починалася словами: "Встановіть з диска JBuilder..." Ось ЦЕ вже фатально. Якщо розробники не змогли змусити продукт працювати без середовища розробки, мені страшно подумати, як він був написаний. Щонайменше його писали дилетанти. Що я маю на увазі під словами "розуміє, що відбувається". Це означає, що людина повинна розуміти таке: ні. Взагалі, кнопконатиск може приймати воістину жахливі форми. Один із моїх колег бачив продукт, написаний на Java. Інструкція щодо його встановлення починалася словами: "Встановіть з диска JBuilder..." Ось ЦЕ вже фатально. Якщо розробники не змогли змусити продукт працювати без середовища розробки, мені страшно подумати, як він був написаний. Щонайменше його писали дилетанти. Що я маю на увазі під словами "розуміє, що відбувається". Це означає, що людина повинна розуміти таке: то мені страшно подумати, як він був написаний. Щонайменше його писали дилетанти. Що я маю на увазі під словами "розуміє, що відбувається". Це означає, що людина повинна розуміти таке: то мені страшно подумати, як він був написаний. Щонайменше його писали дилетанти. Що я маю на увазі під словами "розуміє, що відбувається". Це означає, що людина повинна розуміти таке:
  • Що таке віртуальна машина і навіщо вона потрібна?
  • Що таке клас із погляду віртуальної машини.
  • Що таке пакунок.
  • Що таке бібліотека |
  • Як віртуальна машина шукає та завантажує класи; що таке завантажувач класів та як він працює; скільки їх за замовчуванням; що таке classpath.
І т.д. і т.п. Список можна продовжити. Зауважте, я не включив до нього знань, властивих безпосередньо розробнику. Що таке потік, що таке клас з погляду ОВП і чим він відрізняється від об'єкта, як працюють менеджери компонування - все це повинен знати БУДЬ-ЯКИЙ розробник. Все, що я перерахував у списку, – це скоріше технічні тонкощі. Але дуже часто виявляється, що їхнє знання життєво важливе для розуміння, що ж працює не так. Приклад із життя. Є така бібліотека для роботи з XML, називається xalan. У ній є кілька пакетів javax.xml... – парсери, трансформери тощо. Ця Бібліотека дуже популярна. Проблема в тому, що ці пакети присутні в J2SDK, починаючи з версії 1.4. Запитання. Який клас буде завантажений під час звернення з бібліотеки до класу javax.xml.transform.stream.StreamSource, якщо у classpath присутній і xalan – бібліотечний чи з J2SDK? Для відповіді це питання необхідно знати, як працює завантажувач класів. Одного разу я бачив чотириденне обговорення в одному з форумів, яке зрештою упиралося в це питання. Код працював неправильно саме через те, що завантажувач брав не той клас, який від нього очікували. До чого я веду? Ось до чого: чим потужніше середовище розробки, чим більше воно робить за розробника - тим менше йому доводиться думати. А це вже дуже погано. Так недалеко й до мавпочки. Звідси випливає перший висновок, наскільки парадоксальним він не здавався б: що завантажувач брав не той клас, який від нього очікували. До чого я веду? Ось до чого: чим потужніше середовище розробки, чим більше воно робить за розробника - тим менше йому доводиться думати. А це вже дуже погано. Так недалеко й до мавпочки. Звідси випливає перший висновок, наскільки парадоксальним він не здавався б: що завантажувач брав не той клас, який від нього очікували. До чого я веду? Ось до чого: чим потужніше середовище розробки, чим більше воно робить за розробника - тим менше йому доводиться думати. А це вже дуже погано. Так недалеко й до мавпочки. Звідси випливає перший висновок, наскільки парадоксальним він не здавався б:

Висновок 1. Починати вивчення Java бажано без потужного середовища.

Я не закликаю писати в редакторах рівня notepad. Але не роблю я цього з єдиної причини – у них зазвичай не буває підсвічування синтаксису. Це неймовірно зручна річ, яка не несе негативного ефекту. Можна скористатися чимось типу Notepad++Він розуміє синтаксис Java і, до речі, безкоштовний. У мене, наприклад, тип файлу .java зареєстрований у системі на нього. Отже, текстовий редактор з підсвічуванням синтаксису та командний рядок. Два-три дні мук – і розуміння того, що таке classpath, як запускається інтерпретатор та ще купи різних дрібниць – розуміння цього залишиться назавжди. Далі. Мій досвід дає мені підстави стверджувати, що отримати знання про запас неможливо. У тому сенсі, що читати літературу варто лише тоді, коли є питання, на які вона дасть відповідь. Якщо читати книгу, не маючи до неї запитань, то інформація вивітриться за тиждень. Я дуже добре знаю це, у тому числі й на своєму досвіді. Колись я разів п'ять приймався читати книгу з сервлетів. Доки я не став мати з ними справи в роботі, інформація не засвоювалася. І це далеко не поодинокий випадок. Колись давно, дуже давно, років 8-10 тому, я прочитав наступне, на жаль, не пам'ятаю автора: Як навчити людину новій мові програмування? Дуже просто. Треба дати йому мову, кілька завдань та мінімум документації. Потім, після декількох місяців, коли він вже почне сяк-так писати цією мовою - дати вичерпну документацію. Вона буде прочитана за два тижні як детективний роман, після чого людина буде готова до роботи. Я із цим твердженням згоден на всі 100%. За два місяці, з одного боку, підуть усі дрібні запитання. Відповіді на них будуть отримані самостійно, що сильно підвищить їхню цінність. З іншого боку, вже сформуються зрозумілі питання, відповіді на які дасть саме документація. Звідси випливає другий висновок, що здається не менш парадоксальним, ніж перший: на жаль, не пам'ятаю автора: Як навчити людину новій мові програмування? Дуже просто. Треба дати йому мову, кілька завдань та мінімум документації. Потім, після декількох місяців, коли він вже почне сяк-так писати цією мовою - дати вичерпну документацію. Вона буде прочитана за два тижні як детективний роман, після чого людина буде готова до роботи. Я із цим твердженням згоден на всі 100%. За два місяці, з одного боку, підуть усі дрібні запитання. Відповіді на них будуть отримані самостійно, що сильно підвищить їхню цінність. З іншого боку, вже сформуються зрозумілі питання, відповіді на які дасть саме документація. Звідси випливає другий висновок, що здається не менш парадоксальним, ніж перший: на жаль, не пам'ятаю автора: Як навчити людину новій мові програмування? Дуже просто. Треба дати йому мову, кілька завдань та мінімум документації. Потім, після декількох місяців, коли він вже почне сяк-так писати цією мовою - дати вичерпну документацію. Вона буде прочитана за два тижні як детективний роман, після чого людина буде готова до роботи. Я із цим твердженням згоден на всі 100%. За два місяці, з одного боку, підуть усі дрібні запитання. Відповіді на них будуть отримані самостійно, що сильно підвищить їхню цінність. З іншого боку, вже сформуються зрозумілі питання, відповіді на які дасть саме документація. Звідси випливає другий висновок, що здається не менш парадоксальним, ніж перший: кілька завдань та мінімум документації. Потім, після декількох місяців, коли він вже почне сяк-так писати цією мовою - дати вичерпну документацію. Вона буде прочитана за два тижні як детективний роман, після чого людина буде готова до роботи. Я із цим твердженням згоден на всі 100%. За два місяці, з одного боку, підуть усі дрібні запитання. Відповіді на них будуть отримані самостійно, що сильно підвищить їхню цінність. З іншого боку, вже сформуються зрозумілі питання, відповіді на які дасть саме документація. Звідси випливає другий висновок, що здається не менш парадоксальним, ніж перший: кілька завдань та мінімум документації. Потім, після декількох місяців, коли він вже почне сяк-так писати цією мовою - дати вичерпну документацію. Вона буде прочитана за два тижні як детективний роман, після чого людина буде готова до роботи. Я із цим твердженням згоден на всі 100%. За два місяці, з одного боку, підуть усі дрібні запитання. Відповіді на них будуть отримані самостійно, що сильно підвищить їхню цінність. З іншого боку, вже сформуються зрозумілі питання, відповіді на які дасть саме документація. Звідси випливає другий висновок, що здається не менш парадоксальним, ніж перший: Я із цим твердженням згоден на всі 100%. За два місяці, з одного боку, підуть усі дрібні запитання. Відповіді на них будуть отримані самостійно, що сильно підвищить їхню цінність. З іншого боку, вже сформуються зрозумілі питання, відповіді на які дасть саме документація. Звідси випливає другий висновок, що здається не менш парадоксальним, ніж перший: Я із цим твердженням згоден на всі 100%. За два місяці, з одного боку, підуть усі дрібні запитання. Відповіді на них будуть отримані самостійно, що сильно підвищить їхню цінність. З іншого боку, вже сформуються зрозумілі питання, відповіді на які дасть саме документація. Звідси випливає другий висновок, що здається не менш парадоксальним, ніж перший:

Висновок 2. Починати вивчення Java бажано без підручників. Java API documentation + Java tutorial - цього більш ніж достатньо.

Java API documentation – річ першої потреби. Я дуже раджу тримати її локально, на диску. До неї доведеться звертатися не раз, не два і навіть не десять. У мене особисто не минає жодного дня, щоб я туди не поліз. Java tutorial я теж раджу тримати локально. Це інформація початкового рівня, що цілком замінює підручник. Однак її там неабияк. Маю сказати, що в областях, з якими я не маю справи по роботі, я все ще знаходжу собі щось нове. Читати багато – погано. Поки що немає запиту — немає й відгуку. Читати мало – теж погано. Де золота середина? Я дотримуюсь такого правила: читаю доти, доки мені не починає здаватися, що я отримав відповідь на запитання. У 90% випадків це негаразд. Але саме в цей момент найкраще зупинитися та продовжити самому. Вихідний поштовх отримано, а самостійне розв'язання задачі дасть набагато більше. Зрозуміло, Через деякий час варто взятися за літературу. Але знов-таки, за літературу початкового рівня. Нехай навіть здається, що все це нісенітниця – прочитати початкові розділи варто. Я можу практично гарантувати, що хоч щось нове ви дізнаєтесь. І це щось згодом може виявитися надзвичайно важливим. Гаразд. У чому писати, начебто розібралися. Як писати – теж. А що писати? Згадайте, з чого починалася ця стаття. Чи варто починати з написання системи миттєвого обміну повідомленнями? Вибирати, звісно, ​​вам. Мені здається, не варто. Чим складніше завдання, тим більше питань виникне. За відсутності досвіду така кількість питань дасть відчуття неможливості їх вирішення, далі відчуття власної ущербності, дурості тощо. Зрештою, це може призвести до рішення "а ну його на..." та припинення вивчення мови. Тобто. рівно до протилежного ефекту, ніж той, що був необхідний. Це властиво не так Java, як процесу навчання як такому. Але чомусь саме у додатку до навчання програмування про це забувають. Тим часом, невелике завдання, доведене до кінця, здатне дати набагато більше задоволення і набагато більших знань, ніж грандіозна система, кинута на самому початку шляху. Звідси висновок третій: кинута на самому початку шляху. Звідси висновок третій: кинута на самому початку шляху. Звідси висновок третій: Висновок 3. Починати вивчення Java бажано із завдань, адекватних наявному рівню знання Java. Починати вчитися керувати автомобілем не варто на боліді Формули 1. Починати освоювати гірські лижі не варто на трасі кубка світу. І так само не варто починати освоєння Java з написання чогось величезного. Я розумію, амбіції вимагають. Але у разі вони необгрунтовані. А що більше необґрунтованих амбіцій — то менше шансів стати професіоналом. Чудовим щодо навчання феноменом є, як це не дивно, різні форуми. Якщо ними користуватися розумом. З розумом – це означає, що треба чинити навпаки, не так, як зазвичай. А саме – не ставити запитання, а відповідати на них. На будь-які, до яких є сабо дістатись. Якщо ви думаєте, що я сам знаю все, ви сильно помиляєтеся. Так, я знаю багато. Але є сфери, з якими я ніколи не стикався. Або стикався, але вкрай мало. Класичний приклад із моєї практики — робота із сертифікатами: підписування коду, захищені з'єднання тощо. У 98-му році, при написанні диплома, я це робив, але з того часу все змінилося і сильно. Протягом багатьох років у мене накопичувалися питання. Я навіть заходився читати якусь літературу. Але, як я вже говорив вище, про запас знань не отримати. Це як брухт – в одне вухо входить, в інше виходить. Результату ніякого, окрім дірки у голові. І так тривало до недавнього часу, доки у форумі не задали питання про SSL-з'єднання з tomcat-ом. Якісь проблеми були. І тільки ось це питання підштовхнуло мене закопатися глибоко. А якщо є запит – є відгук. Я не тільки розібрався, в чому у людини проблема, а й знайшов купу іншої корисної інформації. Зрозумів нарешті, як працюють сертифікати. Відповідна стаття у планах. І таке – часто-густо. Я досить мало працював, наприклад, із GUI. Тільки в результаті чийогось питання у форумі я розібрався в деяких можливостях TextLayout. До цього питання я про них не підозрював. Так само недавно я з'ясував, що, виявляється, JButton теж інтерпретує html як власний заголовок. До цього я вважав, що це вміє лише JLabel. І це знову-таки завдяки форуму. Ось і виходить: що більше ми відповідаємо на запитання – то більше дізнаємося самі. Саме тому я не згоден з поширеною думкою, що якщо людина сидить у форумі, то вона нічого не робить. Це далеко не так однозначно і залежить насамперед від того, навіщо саме людина сидить у форумі. І що він робить переважно – запитує чи відповідає. Насправді можна навіть питати. Але теж з розумом. Не просити рішення (а тим паче - з припискою " мені хором пояснабо, що в них просто прийнято відповідати. А зі своїми питаннями можу йти подалі. Враховуючи, що рівень форуму бажав кращого, – не в останню чергу завдяки такому підходу! – я вирішив більше не гаяти часу. Так що вибирайте собі форум до смаку – і в дорогу. До речі, цей сайт з'явився завдяки одному з форумів. Поспілкувавшись там деякий час, я накопичив список тем, що найбільш часто піднімаються, і зрозумів, що такий сайт буде затребуваний. Так і сталося. Практично всі статті написані слідами будь-яких обговорень у форумі. Або слідами листування, яке я теж веду регулярно. Який же результат? Працювати, працювати та ще раз працювати. Чим більше ви дозволяєте робити себе на початковому етапі – тим менше знань ви отримуєте. І тим довша дорога до професіоналізму. Але тільки ви самі можете обрати, ким ви хочете бути - бездумно натискає кнопки мавпочкою або професіоналом. І тільки ви самі вибираєте шлях, йдучи яким ви можете досягти того чи іншого. Перший шлях зрозумілий. Другий я постарався показати. Ваш хід, панове! Посилання на першоджерело: Починаємо з початку або 'Hello, Java World!'
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ