среда, 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/

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

A programmer: Java #2: Getters, Setters, Constructors, Overloading

Вероятно, эти мои записи про Java должны выглядеть весьма странно, потому что альтернативой или каким-то сколько-нибудь самостоятельным вариантом учебника они никк не являются. На самом деле они - короткие записи о том, что я смог объяснить себе из непонятого или плохо понятого ранее. Сегодня - геттеры/сеттеры, перегрузка и конструкторы.

Дело в том, что на JavaRush, как оказалось, не вполне понятная последовательность изложения (типа "а вот тут еще вот такая штука есть"), поэтому указанные вещи не вписывались в систему. А вот с помощью уже упоминавшегося видеокурса "Java для тестировщиков" эти вещи сложились в целостную картинку.

Все те вещи, о которых пойдет речь - следствия ООП. Так, например, если для инкапсуляции в классах выставлены ограничения доступа, то для того, чтобы этот доступ все-таки при необходимости получить, используются сеттеры и геттеры. Геттер - метод getNum(), например, - выдает вовне значение переменной, которая определена внутри класса, а сеттер - setNum(), соответственно, - позволяет извне это значение установить.

Конструкторы - это методы, создающие объекты данного класса. Дело в том, что когда я изучал создание объекта и конструкторы раньше, было неочевидно, что при создании нового объекта без передаваемых параметров вызывается конструктор (например, Class a = new Class()). Неочевидно не только потому, что не объяснили, но и потому, что он в классе есть по умолчанию и в коде не обязательно прописан. Соответственно, в изложении учебного материала конструкторы появляются как бы "вдруг", только когда надо в создаваемом объекте указать параметры.

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

Ну и еще одно важное дополнение. Java очень "экономно" работает с памятью. С одной стороны, есть "сборщик мусора", который освобождает память, убирая из нее значения неиспользуемых переменных. А с другой, - объекты не-примитивных типов создаются один раз, а дальше используются только ссылки на эти объекты. И это следует учитывать при операциях с ними.

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

A programmer: Java #1: OOP basics

Как я говорил, есть необходимость быстро разобраться с основами Java, поэтому буду писать о своих успехах вне обычного еженедельного графика.

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

 - Объясните что такое полиморфизм простыми словами ?
 - ООП. Полиморфизм
 - Java-course. Полиморфизм
 - Объектно-ориентированное программирование. Полиморфизм
 - Полиморфизм для начинающих
 - Java. Урок 24. Полиморфизм

Последний оказался самым полезным (вместе со вчерашним видео).

Итак, основы объектно-ориентированного программирования:

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

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

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

Полиморфизм - возможность иметь разную реализацию у объектов с одинаковым интерфейсом = возможность вызывать методы подкласса (наследника) через суперкласс (родителя). Звучит не очень понятно, но суть в том, что если мы имеем ряд разных объектов одного типа (например: "квадрат", "круг", "треугольник" типа "фигуры") и мы хотим с ними что-то сделать (например, нарисовать), то мы можем обратиться к методу, описанному в классе "фигура", который с каждой фигурой сделает нужное действие (например, рисование), переопределенное для каждого из объектов. То есть мы говорим, обращаясь к классу "фигуры" - "нарисуй", а какую именно - определяет подкласс. Для этого, очевидно, необходимо наследование. Такой подход, во-первых, позволяет не прописывать действие для каждого случая. А во-вторых, методу родительского класса не обязательно знать, как именно он будет преопределен в наследнике и, соответственно, что именно в конце концов будет выполнено. Это позволяет в родительском классе "запланировать" некоторые свойства, которые потом, возможно, нужно будет как-то реализовать в наследниках.

Как-то так. А вообще картинка прошлого поста объясняет.

понедельник, 13 июня 2016 г.

A programmer: With a little help of my friends

Нашел статью, где Стив Джобс объясняет объектно-ориентированное программирование: "Steve Jobs Tells the Best Definition of Object-Oriented Programming"


На прошедшей неделе программированием все-таки удалось немного позаниматься. Мне знакомые бросили ссылку на вакансию стажера по Java Script, я написал им резюме, на следующий день мне перезвонили, уточнили мои знания и предпочтения и предложили пройти тестирование для участия в обучении по Java – если подучусь до конца месяца и буду чувствовать в себе силы. Если попаду туда, то буду учиться 3 месяца. Конечно, жаль было бы упускать такой шанс, поэтому и занялся программированием более активно (если так можно выразиться в моем случае). Таким образом +4 часа за прошлую неделю, итого - 91,5 часов.

Содержательно надо подтягивать/доучивать все, начиная от ООП. Пока несколько застрял на «полиморфизме», зато нашел еще несколько ресурсов:
 - «Уроки для начинающих» - пока не углублялся.
 - Программа курса «Java Core» - вот этот видеокурс я сейчас слушаю, достаточно неплохо, поэтому вот видео:


Дальше – надо уточнить требования, попробовать найти тесты в интернете и т.д. По-хорошему у меня есть неделя-полторы. Вперед!

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

A programmer: Time out

Снова не работал, а увеличивал долг до 25,5 часов. Откровенно говоря, и на следующей неделе вряд ли что-то предвидится. Поэтому лучше просто взять тайм аут и сосредоточиться на других вещах.

Вот, правда, пару задач нашел в ВК:

 - Задача про воду, накапливающуюся между стенам.
 - Как написать своего сапёра на Java за 15 минут.

вторник, 31 мая 2016 г.

A programmer: From time to results

Снова не работал вообще. Долг увеличился до 18,5 часов, а в мае всего 14,5 часов получилось из запланированных 30 минимум. Итого - 87,5 часов по-прежнему. В общем, все плохо. На этой неделе вряд ли что-то кардинально изменится в лучшую сторону, а вот дальше - посмотрим. Решил, что нужно не только и не столько в часах измерять свои достижения, а в желаемых и планируемых результатах. Результат ближайшей недели - написать минимальную программу на Android. Вперед!


четверг, 26 мая 2016 г.

A programmer: Something and nothing

Сейчас начну оправдываться - близится 40, а значит, наступление очередного кризиса среднего возраста вполне логично. Нет, я, конечно, имею кучу бытовых причин для оправдания, но как бы то ни было, факт остается фактом - занимался программированием мало. Собственно, главное достижение состот в том, что я сделал себе нормальный запуск Android studio (в смысле, как в Windows) и разобрался с Wi-Fi для чего пришлось удалять старый драйвер, ставить новый, менять blacklist. На все про все ушло 5,5 часов, и кроме этого, ничего больше сделать не удалось. В итоге - всего 87,5 с возросшим долгом. Ну хоть это, а то в ближайшее время кардинальных улучшений пока не предвидится.


Зато вот нашел статью: "Каково это - быть разработчиком, когда тебе сорок". Там не мой случай описан, но все равно интересно.

P.S.: На картинке - мои нынешние обои на Linux'е, если что.

понедельник, 16 мая 2016 г.

A programmer: Technical issues

Чуда, очевидно, не произошло - "долг" удалось сократить лишь на 2 часа (то есть всего я занимался 9 часов - итого 82). Кроме того, "занимался" - это, в данном случае, не кодил, а чистил ноутбук, чтобы поставить Linux, чтобы поставить JDK 1.8, чтобы поставить Android studio.

В результате у меня теперь стоит Xubuntu второй системой рядом с Windows XP, JDK 1.8 и Android studio. Правда, теперь надо разобраться, как запускать Android studio, да и вообще с тем, как там все расположено, учитывая существенные отличия от Windows. А самое главное - не удалось настроить Wi-Fi, и легкой эта задача совершенно не выглядит. Так что я буду весьма рад, если мне удастся решить все технические вопросы к концу недели.

воскресенье, 8 мая 2016 г.

A programmer: Shame on me

На этой неделе не программировал от слова "совсем". Видимо, переосмысление дел, четыре выходных, необходимость (снова!) закрывать долги на работе и дела домашние подкосили мою концентрацию на учебе. Поэтому остается по-прежнему 73 часа - и долг увеличивается до 12 часов. Буду непомерно счастлив, если удастся его закрыть на ближайшей неделе (хотя, это вряд ли).


понедельник, 2 мая 2016 г.

A programmer: The first job interview


Последней неделей недоволен - всего 2 часа из 7 (всего 73), да и то это было не написание кода, а установка программ и прохождение урока по основам программирования. Тому были разные причины.


Основная состоит в том, что стал сомневаться в том, правильно ли я учусь программированию. Выяснил, что, видимо, не вполне. Суть неправильности состоит в том, что:

1) я по-прежнему поверхностен – не до конца разбираюсь сразу, чего-то недопонимаю, оставляю на потом, а когда наступает это «потом», сажусь в лужу (поэтому я и физику не выучил в школе, и в ХИРЭ не поступил в свое время);

2) я не занимаюсь практикой, а просто учусь – надо сразу начать делать свой проект, изучая то, что нужно именно для него.

Все эти не новые мысли пришли после собеседования. В одну фирму нужен был человек без специального образования и опыта работы, но на полный день, писать xml-документы в основном под .net. Я подумал, почему бы не попробовать, и попробовал (мой английский они признали достаточным при телефонном разговоре еще на прошлой неделе). С одной стороны, я показал, что кое-что знаю – смотрел видеоурок накануне, а с другой – мало что понимал в технической стороне того, чем они занимаются. Мне показалось, что для человека без опыта работы я показал себя неплохо. Загвоздка заключалась в том, что я никак не могу работать полный день, а им это надо, чтобы быть на связи с заказчиком. Разве что летом, но им это тоже не подходит, так как они рассчитывают на долгоиграющее сотрудничество, что в моем случае, скорее всего, невозможно. Так что я был бы удивлен, если бы они меня взяли. И чуда не произошло. Но вот мысли возникли, так что спасибо и за мысли, и за новый опыт – это было мое первое собеседование в качестве программиста :).


понедельник, 25 апреля 2016 г.

A programmer: Good News Everyone!

Обо всех хороших новостях пока не скажу, но есть пару вещей, которые могут превратиться в некий прорыв в сфере моего превращения в программиста. А вот о чем скажу, так это о том, что нашел пару интересных книжек по Java:

 - Яков Файн «Программирование на Java для детей, родителей, бабушек и дедушек» (http://myflex.org/books/java4kids/JavaKid8x11_ru.pdf);

 - «Head First Java». Вообще-то Head First – это серия разных книг, в которых реализован интересный и приятный подход к обучению, вот их сайт: http://www.headfirstlabs.com/books/hfjava/. Можно найти и на русском.


В плане отчета: за последнюю неделю занимался программированием 10,5 часов (итого 71). Правда, не каждый день. Но зато разнообразил свое обучение лекцией из курса по Основам программирования на Prometheus. Для него придется вернуться к Python'у.

Неожиданно возникла техническая проблема: хотел поставить Android Studio на второй компьютер, а там стоит Windows XP, на которую требуемый JDK 1.8 не ставится - уже пару лет как прекратили поддерживать. Но Google и Youtube в помощь - нашел информацию о том, как все-таки это сделать, чтобы не переставлять ОС, сегодня буду устанавливать.

Ну и по традиции – курсы/ресурсы:

 - Очередной туториал по Java: http://www.sololearn.com/Course/Java/

 - Обучающий сайт по Java: http://study-java.ru/. Он давно не обновлялся, но чтобы посмотреть основы, подойдет.

понедельник, 18 апреля 2016 г.

A programmer: A good idea!

Жена предложила хорошую идею - пойти летом во время отпуска поработать куда-нибудь в IT-компанию поднабраться опыта. И ведь действительно полтора-два месяца полного погружения могут дать очень много, я думаю.


Сложно сказать, почему, но на прошлой неделе с трудом удалось набрать минимальные 7 часов обучения (всего 60,5). На JavaRush застрял на 8 уровне, зато прошел заново то, что делал летом-осенью на Codecademy. Надо двигаться и учиться больше и каждый день. Попробую со следующей недели установить минимум 10,5 часов в неделю.

Из полезного нашел:

 - Официальный туториал по Java;

 - Программирование на языке Java (электронное учебное пособие для проведения практических занятий по курсу "Информационные технологии", кафедра прикладной математики, Саратовский университет) - весьма удобно написано;

 - JavaWorld.com - какой-то сайт про Java;

 - Ресурсы по обучению Java от NetBeans;

 - Сайт по обучению Java.

понедельник, 11 апреля 2016 г.

A programmer: Just program it!

На прошлой неделе занимался программированием 9,5 часов (итого 53,5). Почти выполнил задачу учиться каждый день - только в воскресенье не смог, а в другие дни хотя бы полчаса в день получалось. Приятно, что это входит в привычку, и "организм ощущает потребность" в программировании :).


Из содержательного - только JavaRush, где перешел на 8 уровень (правда, только сегодня). Скоро доберусь до 10-го и буду более предметно думать о подписке. А вообще Codecademy ждет, например.

Из найденного полезного:

 - "Что нужно и что не нужно делать, когда начинаешь изучать программирование" (пост на Facebook');

 - Сайт про программирование на Java и Android;

 - Туториал по Java;

- Оффлайн-курс по Java (Brain Academy) в Украине и в Харькове, в частности.


понедельник, 4 апреля 2016 г.

A programmer: Debts recovery

На прошлой неделе программированием занимался 12,5 часов (итого 44 часа). Начало было достаточно бодрое - от 2-5 часов в день, но последние три дня вообще ничего не получилось. Так что потенциал для увеличения работы очень даже есть. Итого - наверстал то, что не доделал раньше, и закрыл март на 36 часах из запланированных 30.


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

Из полезного вот, наткнулся на пост в Facebook "Что нужно и что не нужно делать, когда начинаешь изучать программирование".

понедельник, 28 марта 2016 г.

A programmer: Life goes on

Вообще-то я не слишком ориентируюсь на то, чтобы быть фрилансером - просто картинка понравилась. Но если уж быть, то успешным! (Сама статья здесь.)


Из итогов прошедшей недели - 9,5 часов (итого 31,5), из которых основное - это JavaRush (перешел на 5 уровень), чтение "Философия Java". С JavaRush немного почитил - сначала почитал материал, и только потом стал выполнять все задания, хотя лучше бы все делать по очереди. Как видно, мои оптимистические прикидки о полутора часах на урок совершенно не оправдываются, на самом деле уходит в 2-3 раза больше времени. В любом случае надо успеть выполнить запланированные на май 30 часов, а для этого 6,5 часов осталось на 4 дня - успеть вполне реально.

Из полезного нашел кое-что:

 - Где учиться программировать: рейтинг украинских IT-школ и курсов;

 - ITVDN - сайт с видеокурсами, в частности заинтересовал курс по основам тестирования ПО;

 - GeekBrains - тоже сайт с курсами. В частности, оттуда "Объектно-ориентированное программирование" и "Git".

К моему нынешнему обучению Java это имеет не совсем прямое, скажем так, отношение, но интересно и может пригодиться, я думаю.

понедельник, 21 марта 2016 г.

A programmer: Every day be coding

Особого продвижения пока нет, причем даже нечем себя оправдывать. Из 7 запланированных часов учился 6 (в копилке 22), итого получается 5 часов долга.


Содержательно: установил IntelliJ IDEA (хотя изначально пытался выбирать между Eclipse и Android Studio), перешел на 4 уровень в JavaRush и читал "Философия Java". Мало, а ведь это уже 10-я запись по теме Become a Programmer! Хотя на этой неделе снова будет много бессмысленной работы на работе, принципивально важное resolution - заниматься программированием каждый день, хотя бы по чуть-чуть, а не откладывать на последние дни. Как известно, 30-дневная практика формирует привычку, что в данном случае очень хорошо.

понедельник, 14 марта 2016 г.

A programmer: Let's go!

Прошедшая неделя получилась точно получше предыдущей. Хотя я и не показал суперрезультата – 7 часов из 7 запланированных, не более (в копилке 16), вещей, достойных упоминания, было немало. Но для начала - неплохое видео:


Начну с того, что я достиг 3 уровня в JavaRush из 40. Очень неплохая обучалка. Да, есть вещи, в которые приходится вникать дополнительно. Да, необходим конспект, к которому иногда приходится возвращаться – но это нормально, Но в целом все понятно, много заданий, форум, ссылки на разные дополнительные материалы и т.д. Вот, например, «Философия Java» – пока не читал, но, очевидно, стоит посмотреть. Там же советуют не забрасывать курс на Интуите. Там же можно найти разные советы по обучению и рассказы о том, как люди учились и искали работу программиста – вот ("Начинаем с начала или 'Hello, Java World!'") и вот ("Как выучить Java, если вам уже за 30..."), например. Там же – прикольные и/или мотивирующие видео и т.д. Единственный нюанс, с которым я пока не разобрался – это возможность подписки на месяц. Суть в том, что для доступа к уровням выше 10-го надо покупать подписку. На год она стоит $200 (вот именно сейчас скидка $100). Но мне, я думаю, на год не надо, тем более, что сейчас на один уровень у меня уходит около 1,5 часов, следовательно, на 30 уровней должно уйти 45 часов, следовательно, месяца за кажется $30 мне вполне должно хватить летом, когда будет отпуск. Такая опция в описании возможностей оплаты прописана, но нужную кнопочку я пока не нашел. Но ничего, время еще есть.

Получил письмо, в котором написано, что дедлайна осталось два дня! Оказалось, я еще в конце января записался на курс «Build Your First Android App (Project-Centered Course)» на Coursera, и там действительно сроки выполнения очередного (первого) задания заканчиваются через два дня. Естественно, я посмотрел курс. Содержательно курс, похоже, неплохой, но есть два главных нюанса. Во-первых, его авторы – французы, насколько я понял, и для них английский весьма не родной. Поэтому после моих недавних попыток учить very English pronounciation их речь воспринимается не без затруднений, хотя в целом все понятно. Во-вторых, сертификат об окончании курса стоит $89, а условия для его получения складываются из финального экзамена/проекта и из промежуточных заданий. Соответственно, доступ к промежуточным заданиям (для которых дедлайны и наступают) открывается только после оплаты за будущий сертификат. Я совершенно не уверен, что именно этот сертификат мне нужен, поэтому буду обходиться без контрольных заданий – доступ к материалам курса все равно бесплатный.

Про Codecademy, CS50 и курс по алгоритмам я не забыл, просто не успеваю все вместе пока. Со временем вернусь к ним обязательно.

понедельник, 7 марта 2016 г.

A programmer: Tomorrow never arrives

Неделя оказалась почти провальной – из запланированных минимальных 7 часов программированием занимался всего 2 (в копилке 9). Да, была, работа и отвлекающий быт, но они и потом никуда не денутся. Пора вспоминать о мотивации (вот, например, нашел). Моя ошибка была в том, что считал, что 7 часов - это немного, а значит, легко смогу все сделать "завтра".


Вместо программирования немного занимался английским. В частности, нашел Real Grammar video series (Macmillan Education ELT) и English Pronunciation Course от (Heather Hansen). Рекомендую. Плюс посмотрел пару презентаций на английском и одну серию «Dawnton Abbey». Так что вроде бы время провел не зря.

Из программирования посмотрел JavaRush – стоит заняться. Экзаменационные задания на Интуите произвели впечатление вполне здравых, так что, возможно, еще вернусь к этому курсу. CS50, как оказалось, с апреля будет еще и на Prometeus. Там же наткнулся на курс по алгоритмам, который стоит посмотреть вместо того, который на Лекториуме (этот после Фреге ушел в дебри математики). Вообще отечественные курсы рассчитаны на тех, кто учится в рамках соответствующей специальности в вузе, а значит, имеет смежные курсы, где многие сложные вещи получают объяснение. Очевидно, что для тех, кто просто хочет изучить конкретные вещи, такой подход не работает. Так что западные курсы обычно предпочтительнее.

понедельник, 29 февраля 2016 г.

A programmer: Final countdown


Грантовую заявку доделал и послал, теперь ничего из глобальных заданий мне не мешает приступать к программированию. Как всегда после завершения большой и важной работы наступил момент некоторой неопределенности и желания расслабиться. Но дополнительный день 29 февраля как нельзя удачно подходит для отдыха, завершения всего мелкого и настройки себя на нужный лад. А 1 марта как начало весны и новой жизни - это отлично!

 
За прошлую неделю программированием я занимался всего 1 час (в копилке 7). Этот час был посвящен чтению и прослушиванию материалов первого занятия (из шести) по математической логике и теории алгоритмов на Лекториуме, а также выполнению контрольного теста. Собственно, если бы не дедлайн этого теста, я бы, возможно, и этого не сделал, но тут пришлось превозмочь себя. Пока непонятно, пригодятся ли мне в программировании Фалес, Пифагор, Аристотель, Эвклид, Фреге, Кантор, Гейдельберг и прочие, но сделаем скидку на то, что это основы.

Сегодня собираюсь вникать в еще один курс по Java (JavaRush) и посмотреть задания финального экзамена курса по Java на Интуите, который я забросил пока. А вообще – возвращаться к Codecademy. На этой неделе моя программа минимум 7 часов, нормальный вариант 10,5, максимум 21 час. В общем, финальный отсчет начался.

воскресенье, 21 февраля 2016 г.

A programmer: One week to real start


Прошедшая неделя была не очень хорошей для программирования – много работы. Тем не менее, в копилке еще 3 часа (итого 6). Мелочь, конечно, но дорогу осилит идущий – не иначе, а значит, надо с чего-то начинать. Эта неделя обещает быть еще сложнее из-за внезапно перенесенного на более ранний срок дедлайна. Что ж, значит, освободится время в марте, причем в самом начале – отличный весенний символизм получается.
 

Курс по Java на ИНТУИТе решил отложить на неопределенное время. Наткнулся там на материалы, которые явно вряд ли необходимы принципиально. Спросил у знакомых, оказалось, действительно, подобного рода сведения пригодились один раз за десять лет, и Гугл с задачей отлично справился.

Вместо этого записался на курс «Математическая логика и теория алгоритмов» на Лекториуме. Из-за недостатка времени застрял на первом занятии, поэтому пока ничего содержательного сказать не могу – все достаточно легко, посмотрим, что будет дальше.

Интерес к английскому продолжился смотрением «Dawnton Abbey». Я, конечно, понимаю, что это все-таки развлечение, а не работа или учеба, но смотрю на английском в то время, когда все равно работать не получается, так что вроде как и не совсем бездельничаю. Как минимум, сериал закрыт, а значит, больше 52 серий мне грозит.

В целом, бью копытом, а это хорошая мотивация, чтобы поскорее разобраться с текущими делами. Good luck мне!

понедельник, 15 февраля 2016 г.

A programmer: Let's start with Java

Начало положено! Из 10 000 часов на прошлой неделе учился программированию 3! Решил начать с курса по Java на intuit.ru - прошел два урока. Кое-что не до конца понял, но тесты сдал, и можно двигаться дальше.


Поскольку стал натыкаться на слова, о которых могу только догадываться, решил, что нужно пройти какой-нибудь курс по основам программирования. Для этого слушаю гарвардский курс CS50 Introduction to Computer Science на edХ. Он, конечно, очень уж для начинающих - лампочки и двоичная система исчисления и все такое, плюс счастливые лица слушателей - но, посмотрим, что будет дальше. Все равно я пока могу этим заниматься вечером в режиме не слишком большого напряга.
Плюс ко всему решил немного внимания уделять английскому. Не то, чтобы это было очень необходимо прямо сейчас, просто атмосфера обучения располагает как-то. В общем, обучение продолжается, и это интересно.

P.S.: Пока искал картинку к этому посту, нашел пару потенциально полезных сайтов по программировнию. Профит!

понедельник, 8 февраля 2016 г.

A programmer: Time is experience


Мотивируя себя грядущим программированием, доделал книгу. Теперь надо решать издательские вопросы (время еще есть). Плюс делать грантовую заявку (времени мало, ибо сроки – в марте). Начинается семестр в университете, теперь ранее вставание жизненно необходимо – хотел, так получи! Зато получилось целых два дня свободных от преподавания. Среди прочего, это означает, что пора приступать к программированию. На этой неделе еще привыкаю к расписанию, а на следующей уже надо входить в ритм.


Как говорят классики, для того, чтобы стать профессионалом в чем-то, нужно потратить на освоение этого чего-то 10 000 часов. О чем это говорит? О том, что, если я буду первое время уделять программированию 1 час в день, то в этом году на программирование у меня уйдет около 300 часов. Конечно, такими темпами мне светит потратить 30 лет и 3 года, но в конце мая закончится семестр, в июле отпуск, осенний семестр должен быть более свободным, так что, думаю, получится ускориться еще в этом году.

Из содержательной подготовки за прошедшую неделю – пошел на http://www.intuit.ru, вспомнил о своих пяти дипломах по HTML и CSS и одному по маркетинговым коммуникациям. Записался на два курса по программированию на Android, на курс по Java и по Ruby-on-Rails. Даже кое-что успел почитать. Последний курс оказался не для новичков, плюс сам язык не для мобильных приложений, поэтому я его пока отложил, несмотря на то, что его изучение прошлым летом взывает к завершению гештальта… Обращение к Android потребовало уточнить предпочтительную среду разработки – Eclipse или Android Studio (если у кого есть советы, буду благодарен). Последняя у меня стоит еще с прошлого лета, но установилась как-то криво, поэтому надо переустановить и освободить ресурсы на компьютере. Поэтому пока почитываю про Java. Уже какая-то динамика.

понедельник, 1 февраля 2016 г.

A programmer: Reasons and motives


Поскольку пока к «программированию» не приступаю, то хожу вокруг да около. Наткнулся вот на статью: 7 Reasons Why You Should Start Programming Today. Сами reasons меня не совсем мотивируют, но вот то, что автор пишет о себе, убеждает: 

You may be asking questions like "Who the heck is this Donovan guy?" or "What does he know about programming?" I respect those questions and this is a great time for you to get to know a bit more about me. 

I grew up using computers. This was great and all, but I felt like trying something else. Sometimes I wouldn't find a computer program that would do the things I wanted to do. This got me thinking, why can't I just do it myself? Yes, I wanted to make something; I wanted to create something. 

From there everything connected. I was able to make my own things to suit my personal needs. I liked being in control for once. At first I started making games, then programs, and finally websites. Now I do a combination of everything! All of these are a form of programming. 

P.S.: А будет совсем круто, корда я свой профиль на LinkedIn переделаю из «социолога» в «программиста»? со всеми образованиями, опытом и достижениями.

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

A programmer: Первая неделя комом


Начиная квест, я, конечно, подозревал, что начало будет не таким гладким, как хотелось бы. Так и получилось – к «программированию» я так и не приступил. Разве что просмотрел пару возможных оффлайн курсов по программированию в Харькове (пока неудобно для меня и дорого) и проверил одно название для моего планируемого продукта (занято). С одной стороны, это мало, с другой, – это уже кое-что, с третьей, – в голове прочно засела мысль: «Чем скорее ты закончишь свои текущие дела, тем скорее приступишь к программированию!». А это весьма мотивирует.

Что же за текущие дела? Собственно, из глобальных – переиздать свою книгу и написать хорошую заявку на исследовательский грант. Первое – совсем критично, так как я за это уже деньги получил, но, в то же время, на содержательную часть, по моим подсчетам, необходимо не более двух недель – а это как раз пока каникулы в вузах. Второе – не требует такой срочности, плюс в перспективе есть помощники. Так что пока что прикладным образом «программированием» заниматься не получится. А что получится? Получится параллельно думать над продуктом.

Собственно, «бытие программистом» мне видится в трех возможных ипостасях – наемный работник, фрилансер, создатель-продвигатель собственного продукта. Учитывая все, последнее мне подходит больше всего. Тем более, что я, собственно отталкиваюсь от продукта, который нужен мне самому: смесь планировщика-органайзера с проджект-менеджером с возможностью визуализировать желаемое – грубо говоря, держать перед глазами мотивирующие картинки того, чего хочешь достичь. Несмотря на то, что когда год назад вроде бы речь шла об изучении Ruby-on-Rails как относительно несложного и модного языка программирования, то сейчас, учитывая необходимость мобильности, более актуальным видится Android и Java.

Где же учиться? Онлайн-курсы, в основном, например, codecademy.com. Вкладки браузера открыты и ждут!

понедельник, 18 января 2016 г.

New Quest: Become a Programmer

Давно уже думал об этом, но вот теперь решил сделать очередной шаг – все-таки январь, понедельник и все такое. Итак.

Почти год назад я защитил докторскую диссертацию по социологии. Что это значит? Учитывая, что, во-первых, единственная оставшаяся мне ступень в академической карьере – это получение звания профессора, и во-вторых, для этого я уже и так сделал немалую часть работы, можно сказать, что я успешно (будучи действительно узнаваемым и признаваемым ученым и хорошим преподавателем) завершаю квест под названием «научная карьера», а значит, надо развиваться дальше.
Учитывая мой давний сентимент и незавершенный гештальт в отношении технических дисциплин вообще и программирования, в частности, а также желание наконец-то начать что-то зарабатывать и т.д., вполне логичным видится новый квест: «Стань программистом». Почему бы нет? Скорее, не стать программистом в Харькове, да еще и после физмата было бы странным. Особенно, если вспомнить, что практически все, с кем я общаюсь, или хотел бы общаться, или на кого хотел бы равняться, – программисты и есть, то надо только сказать себе – вперед! А блог весьма неплохо подходит для освещения процесса. Поэтому New Quest: Become a Programmer