четверг, 27 октября 2016 г.

Перестроение сознания

Java взорвала мой мозг.
Ещё вчера я писал программы на C, а сегодня пытаюсь то же самое делать на Java:
- структура программы отличается,
- термины другие,
- слово "функция" - табу,
- типы данных похожи, но другие,
- методы, объекты, классы, библиотеки   - что из них что и почему называются именно так, а не так, как в C? Википедия пишет какую-то чушь про комнаты и ящики... Пока понял, что: метод - это операция (или функция), которую производим с данными, класс - это тоже самое, что и объект  - набор данных и методов (часть кода, обособленная от других его частей?), а библиотека - набор классов с методами,
- UTF-16 вместо UTF-8? На курсах программирования на C говорили, что UTF-8 - это святое, а всё остальное - ересь. Как мне теперь дальше жить с этим?
- инкапсуляция - свойство объекта (класса?), при котором содержащиеся в нём данные могут обрабатываться и изменяться классами и методами только внутри этого объекта (т.е. данные этого участка кода принадлежат только ему?),
- создание новых строк при их сложении! (сколько плюсов поставили, столько новых строк и создастся о_0), 
- чтобы написать "Hellow World" теперь не достаточно main() и printf(), теперь всё это должно быть помещено в class HelloWorld {}...,
- нельзя просто взять и вызвать функцию printf() нужно указать полный путь к этому методу: System.out.printf(). А кроме неё есть ещё print(), println() и ещё с пару десятков других print-ов...,
- получение программой данных с терминала - это вообще ад и содомия какая-то. Согласно одному из методов, для этого нужно написать целую мини-программу. В соответствии с другим методом, всё чуть проще, но не настолько, как в C. Короче говоря, взять что-то с терминала не так легко, как положить что-то туда. Плюс, ещё нужно не забыть закрыть поток, из которого читали данные. Но при этом не нужно закрывать его слишком рано, т.к. в следующий раз, когда программе (всей или только этому классу?) потребуется ещё что-нибудь прочитать оттуда, то она уже не сможет этого сделать, т.к. поток будет закрыт,
- нужно постоянно помнить, какие слова пишутся с большой буквы, а какие - с маленькой...,
- вместо include < > теперь что-то другое (уже не помню, что);
- компиляция и запуск из терминала - шаманство какое-то по сравнению с gcc
- Eclipse - вроде всё понятно, но пока не представляю, как создать программу в блокноте...
При просмотре видео-лекции вроде бы всё понятно и логическая структура языка хорошо прослеживается. Но, когда попытался сделать что-то сам, то не смог этого без подглядывания в лекции. Ощущения такие, как будто я всю жизнь учил английский, а переехал на ПМЖ в Германию или Францию. Буковки вроде бы те же, но складываются и произносятся по-другому. ))
Напрягает какая-то путаница с определениями терминов и громоздкими конструкциями вызова методов. По ходу просмотра лекций на каждую фразу преподавателя у меня возникает  вопрос: почему это сделано именно ТАК. Но об этом, в отличие от курса программирования на C, ничего не рассказывается.
Приведу аналогию с обучением иностранному языку:
Можно учить человека сразу грамматике и правильному произношению и объяснять, почему именно правильно задавать вопрос "что ты делал вчера?" в виде "what did you do yesterday?".
А можно просто сказать ученикам: если хотите поинтересоваться, чем ваш собеседник занимался вчера, то скажите ему "ват-дид-ю-ду-естэди" или напишите на бумажке "what did you do yesterday?" и вас обязательно поймут.
Вот курс "программирование на Java для начинающих" от компании "Специалист" очень похож на второй вариант обучения. Не рекомендую смотреть его неподготовленным.

Чтобы исправить ситуацию решил первой прочитать книгу К. Сьерра, Б. Бейтс "Изучаем Java" и иметь под рукой книгу Хорстманн, Кей С., Корнелл, Гари "Java. Библиотека профессионала".

До        После