среда, 23 ноября 2016 г.

A programmer: Restart


Рестарт произошел в конце октября. В начале месяца я наткнулся на информацию о компьютерных курсах – точнее об открытом занятии, которые они проводили. К этому занятию было желательно сделать некоторое задание, для чего требовались некоторые предварительные знания и установка необходимого ПО. Курсы по Java, но суть их состоит не в обучении писать код как таковой, а в обучении процессу разработки в принципе. Важным конкурентным преимуществом является участие в настоящем проекте, для чего (кроме лекций и семинаров дважды в неделю) слушателям выделено место в коворкинге на один день в воскресенье (10 часов), а также постоянную помощь менторов в разных вопросах, связанных с проектом и обучением. В общем, на курсы я таки пошел. Не в последнюю очередь потому, что они начались именно сейчас: я могу заниматься с ноября по январь, а с февраля у меня начинается загруженный семестр на работе, поэтому не пойдя учиться сейчас, я, в сущности, терял бы около полугода, как минимум.


Поначалу курсы производили не вполне понятное впечатление, потому что мне пришлось настраивать технику и ПО, на что уходило немало времени, и включиться в работу сразу я не имел возможности. Сейчас процесс уже вроде бы пошел – я даже выполнил свое первое задание (сделал pull-request своего первого task’a). Погружение в работу – это хорошо, но сложно. Нужно не только знать, как собственно писать java-код, но и уметь работать с фреймворками (Spring, Hibernate), с GitHub'ом, с веб-тахнологиями (JSTL) и с базами данных (MySQL/Workbench). Поэтому часто не знаешь, за что хвататься, времени нет и т.д. Пока что я пытаюсь разбираться с логикой работы того, что уже сделано (как с образцом), активно советуясь с коллегами и менторами – это само по себе важный навык, который я стараюсь совершенствовать. Как и дисциплинировать самого себя.

Отчасти это удается – по крайней мере, в том, что к концу ноября получается наверстать долги по времени, накопившиеся с июля (имея в виду необходимость работать, минимум, 1 час в день, то есть 30 часов в месяц). Так, например, к октябрю долг был 135 часов, отработал 52, к ноябрю осталось 103 (30+73) часа, а к 22 ноября из них уже отработал 87. Таким образом, итого получается 265 часов. О содержательных вещах напишу потом.

вторник, 26 июля 2016 г.

A programmer: Steve Jobs and consumer society

Прочитал биографию Стива Джобса (Айзексон В. Стів Джобс. – Брайт Стар Паблішин, 2014. – 608 с.) Пересказывать, разумеется, не буду, мне важны некоторые ключевые принципы и наблюдения.


Если смотреть на развитие компьютерной индустрии достаточно абстрактно, то мы увидим две основные стратегии – либо делать программный продукт доступным для работы на самых разных устройствах, а потому и открытым для модифицирования (Microsoft), либо максимально заточить его только для «своего» устройства, запретить распространение вовне и исключить возможности вмешательства в него (Apple). Вроде бы обе стратегии имеют право на существование, что подтверждается успехами и Apple, и Microsoft. Причем, по степени распространенности Microsoft (как теперь и Android) более успешен. Поэтому возникает вопрос, зачем в условиях, когда все очень быстро меняется и требует постоянного апгрейда, делать закрытую систему, как это делал Стив Джобс?

Дело в том, что Стив Джобс видел свою задачу не в том, чтобы создать успешный бизнес, а в том, чтобы «создать ВЕЩЬ» – некий совершенный продукт. В этом он реализуется как творец, поэтому ему принципиально важно «управлять впечатлением», а поэтому он и закрывает возможности для стороннего вмешательства в свой продукт. Как оказалось, такой подход прекрасно подходит именно для современного мира потребления. Количество ядер, памяти или тактовая частота процессора, столь значимые для «профессионала» играют теперь меньшую роль по сравнению с эргономичностью формы, цветом, текстурой и т.п. Другими словами, когда внутренние технические характеристики перестали иметь такое принципиальное значение, на первый план вышли удобство, эстетические и символические аспекты, а именно их Джобс и ставил всегда во главу угла.

И еще кое-что – небольшая цитата из книги:

«То було для мене справжнім відкриттям. Ми всі були в цих мантіях, і нам подали турецьку каву. Професор пояснив, що кава готувалася геть не так, як у інших місцях, і тут мене осінило: «Яке з біса кому діло?». Та підліткам, навіть у Туреччині, до дупи та турецька кава. Весь день я спостерігав за молодими людьми в Стамбулі. Вони пили те саме, що будь-які інші підлітки в цілому світі, і носили одяг, який виглядав точнісінько так само, як той, що ми купили в Gap, і всі вони користувалися мобільними телефонами. Вони були такими ж, як і інші підлітки будь-де. Мене вразила думка, що для молодих людей цілий світ – однаковий. Коли ми випускаємо продукти, то вже немає чогось такого, як турецький телефон, чи то музичний програвач, який молоді люди в Туреччині хотіли би бачити відмінним від інших плеєрів, котрі використовуються в інших країнах світу. Тепер ми просто один світ» (с. 544).

вторник, 12 июля 2016 г.

A programmer: Another delay

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

Да, кстати, Python я, оказывается, в прошлом году таки прошел полностью.

четверг, 30 июня 2016 г.

A programmer: We can be heroes. But not today.

С утра почему-то ворвалась в мозг песня "Heroes" Дэвида Боуи: "We can be heroes just for one day" - хотелось, чтобы это было обо мне сегодня.


Итак, чуда не произошло, и на обучение Java я не прошел. Мои результаты тестирования не разглашаются. Могу только сказать о процедуре: 82 вопроса за 60 минут. Если результат удовлетворительный, то еще часовое тестирование - сегодна из группы 8 человек на второй этап отправились 2. Если повезет и им, то - собеседование с техническими экспертами, которые и будут принимать решение о зачислении на обучение (всего набирают 10 человек). Нынешние неудачники могут в следующий раз попробовать пройти такую же процедуру не раньше, чем через полгода.

Для меня это очередной первый блин, но зато я посмотрел, что и как. Тесты далеко не смертельные, те, по которым я готовился, были даже иногда сложнее (самые сложные - на Интуите) - я уверен, что дал некоторое количество правильных ответов. Вывод - надо лучше готовиться. Невыполнимой эта задача никак не выглядит. Поэтому даю себе пару дней передышки, потом разрабатываю план обучения и двигаюсь дальше. Отдельные содержательные посты по Java тоже будут обязательно.

Как обычно, несколько статей:

 - Как стать программистом (часть 1). Понятно, что это и реклама тоже, но все-таки...

 - Чтобы стать программистом, талант не обязателен? Для меня актуальненько, поскольку как раз на днях думал, что я по жизни недостаточно тщателен и дотошен - и для заниятия программированием это существенный минус. Ну значит, будем исправляться.

 - Лучшие IT-курсы западных вузов по версии хабрасообщества 2016 года

вторник, 28 июня 2016 г.

A programmer: Test preparation

Главное на этой неделе - тест по Java, который я буду проходить для того, чтобы попасть на программу обучения в одну IT-кампанию. Поэтому сейчас увеличиваю свою активность в этом направлении - 13 часов за прошлую неделю (всего 114).



Готовлюсь по-разному. Но буквально вчера-позавчера нашел два хороших ресурса:

 - Программирование на  Java - видеокурс (вообще-то я смотрю его тут).

 - Тесты по Java - хороши тем, что там не только сами тесты плюс правильные ответы, но и объяснения, почему именно этот ответ правильный, ссылки на дополнительные тесты по нужной тебе теме плюс обсуждение. Поскольку я готовлюсь именно к тесту, то этот ресурс - именно то, что нужно.

А вообще - многого еще не знаю, но за полтора дня надо сделать максимум возможного. С одной стороны, жизнь, если что, не заканчивается, но с другой - было бы очень жаль упустить такой шанс полноценно шагнуть в новую жизнь. Так что - вперед!

суббота, 25 июня 2016 г.

A programmer: Java #3: Exceptions

Я договорился-таки о прохождении тестирования по Java, причем у меня еще есть неделя для подготовки. Плюс уточнил, что будет на тестировании:
 - ООП;
 - Основы Java;
 - Ввод/вывод;
 - Коллекции;
 - Многопоточность;
 - SQL.

При этом последние два дня застрял на обработке исключений. Итак, что это такое?

Исключение (Exception) - это событие, которое прерывает нормальную работу программы (попытка деления на ноль, попытка обратиться к элементу массива, который не существует, обращение к несуществующему файлу и т.д.).

Когда происходит ошибка в методе, создается "объект исключения" (exception object), содержащий информацию об ошибке (метод "бросает исключение" (throwing an exception)), и система ищет метод, который может исправить ситуацию ("обработчик исключений" (exception handler)). Этот метод представляет собой блок кода, в котором записано, что нужно делать в данном случае. Это происходит следующим образом:

 - Формируется упорядоченный список возможных методов, которые должны быть вызваны в случае ошибки (call stack) - от самого абстрактного метода до того, в котором произошла ошибка. В каждом из этих методов описывается тип ошибки, которую он может обработать.

 - Система просматривает call stack в обратном порядке (от последнего к самому первому), ища совпадение типа объекта исключения с типом, указанном в обработчике.

 - Когда совпадение найдено, система (JVM) передает управление в соответствующим метод. Если нужный метод не найден, то выполнение системы и программы прекращается (часто - с выводом call stack'а на экран).

Для того, чтобы программа по возможности не зависела от ошибок и "знала, что делать", стараются заранее описать возможные ошибки (их типы) и программу действий в каждом случае.

Для идентификации исключений в Java существует набор классов, описывающих их. Высший класс в иерархии - Throwable, (java.lang.Throwable) остальные наследуются от него. Его прямыми наследниками являются классы  Exception и Error, от которых унаследованы все остальные исключения, также от них можно наследовать собственные классы исключений.

Эти классы отличаются тем, что в классе Exception описаны проверяемые исключения (checked - те, которые зависят от программы), а в Error - не проверяемые (unchecked). Однако, существуетодин наследник класса Exception, который описывает непроверяемые исключения - класс RuntimeException (исключения времени выполнения).

Что касается программы действий в каждом случае exception handler'а), есть три способа ее задать.

Первый вариант - поместить метод, в котором предполагается исключение, в блок try {}, после которого расположить один или несколько блоков catch (ТипИсключения объектИсключения) {}, внутри которых содержится нужная инструкция. Выражение в круглых скобках означает, что если тип объектаИсключения совпадает с ТипомИсключения, то выполняется именно этот catch. ТипИсключения - это один из упомянутых раньше классов. Поскольку если найден нужный catch, остальные не выполняются, то блоки catch должны располагаться в последовательности от наименее общего в иерархии к наиболее общему - чтобы могла быть обработана на наиболее специфичном уровне.

Если некоторый код программы должен быть выполнен в любом случае, то он помещается в блок finally {} после всех catch'ей. Также после try можно в круглых скобках указать ресурс (обычно поток), который обязательно должен быть закрыт в случае ошибки, чтобы не происходило утечки ресурсов - опция доступная в 7 и 8 версих Java.

Второй вариант - указать возможные типы ошибок в сигнатуре самого метода с помощью ключевого слова throws. Это будет означать передачу обработки исключения в данном методе в метод, который его вызвал. Соответственно, в том методе должна быть конструкция try-catch или throws.

Третий вариант - создать самому нужный объект исключения в нужном месте программы с помошью тоже с помошью слова throw. Но тогда эта ситуация (появления исключения в методе) тоже должна быть описана в сигнатуре метода, как и во втором случае.

Отличный материал по теме есть здесь.
Полезно также читать официальные The Java Tutorials.
Коротко и ясно написано также здесь.
Вопросы и ответы для собеседования по исключениям в Java есть здесь.

А еще нашел сайт с тестами по Java. Отдельно теста по исключениям там нет, но в целом интересно. Разумеется, с ответами, объяснением и обсуждениями.

И в довершение всего - картинка, иллюстрирующая попытки новичка разобраться в программировании:


P.S.: И еще пару ресурсов:

"Как стать профессиональным разработчиком: практическое руководство"

"Качественный код - слагаемые"

воскресенье, 19 июня 2016 г.

A programmer: Do it now!

 Есть очень небольшой прогресс: 9,5 часов за прошедшую неделю (всего 101). Учитывая необходимость работать быстрее, этого недостаточно и формально, и содержательно. Было бы очень плохо упустить возможность.
 

Из последнего - прочитатл пост в каком-то блоге. Ничего особенного, но там рекоммендовали вместо Г. Шилдта ("Java 8. Полное руководство" и "Java: руководство для начинающих") читать К. Хорстманн, Г. Корнелл "Java. Библиотека профессионала" (в 2-х томах). Скачал, читаю параллельнос Шилдтом :).

Нашел вот еще:

 - Разные практические штуки на info.javarush.ru. Есть, в частности, ответы на вопросы по разным темам тут.

 - Форум javatalks.ru - есть несколько интересных тем. В частности,

 - http://www.javable.com/eng/docs/ - Разные материалы (доки и статьи) по Java/