вторник, 20 декабря 2016 г.

Прогул, клавиатура и фэйлы

Вчера я заболел и в первый раз "прогулял" учёбу ((. Кто-то нехороший с утра чихнул или покашлял на меня в публичном месте (в суде или в магазине) и к ввечеру моя голова уже просто раскалывалась пополам от боли. Пришлось "наглотаться" таблеток и лечь спать пораньше.

Вернул букву "Ё" на её место, т.к. переключать раскладку через "Ё" оказалось для меня чем-то противоестественным. Периодически забывался и пытался напечатать "Ё", а получалось что переключал раскладку клавиатуры, или, пытаясь не глядя переключить раскладку клавиатуры, попадал на клавишу "Esc" ))

Купил на работу новую клавиатуру с ножничным механизмом - Slim Line K7 W
Теперь мне не приходится долбить по клавишам, как секретарь-машинистка из эпохи печатных машинок. Правда, единственная устроившая меня клавиатура оказалась урезанного "ноутбучного" типа (без клавиш "Home" и "End").
В итоге, ту производительность, которую приобрёл, благодаря мягкому ходу ножничного механизма клавиш, потерял на отсутствии кнопок "Home" и "End", т.к. теперь приходится переносить курсор в начало или в конец строки мышкой. ))

Послушал записи нескольких "тренировочных" собеседований с кандидатами на должности junior и middle разработчиков... Это просто жесть. Особенно в той части, где кандидату предлагают в блокноте написать программку.
За 2-3 часа собеседования спрашивают вообще ВСЁ, что только можно спросить.
Интересно, потяну ли я такое собеседование?..
Вот так сходишь на пару подобных собеседований, потыкают тебя носом в то, чего ты не знаешь и комплекс неполноценности тебе обеспечен. ))

Уже 4 дня бьюсь над решением задачи по внешней сортировке текстового файла объемом 3 Гб. Отсортировать нужно строки по их длине. 
Уже 3 раза писал разные программы по 200 строк, но каждый раз натыкался на какую-нибудь неразрешимую проблему и понимал, что выбранный мной способ решения этой проблемы, в корне неправильный.
В интернетах подробно разбираются рекурсивные механизмы такой сортировки. О нерекурсивном алгоритме почему-то никто даже не упоминает... Однако такой нерекурсивный алгоритм откуда-то известен всем моим однокурсникам... Они что, все сами до него додумались или нашли книжку, где он объясняется, а я настолько глуп, что не смог ни того, ни другого?..
Хорошо, что один из однокурсников в общих чертах смог мне его объяснить. Сегодня постараюсь написать программу. 
И вот такие вот фэйлы здорово понижают мою самооценку... ))

Из-за сильно усложнившихся (похоже, только для меня одного) заданий по программированию уже неделю не занимался английским. Ну, вот, когда народ умудряется сочетать изучение java  с изучением английского? Я, например, каждый день с 19:00 до 24:00 - 03:00 занят программированием. Хорошо, если из этого времени удается выделить час - полтора на изучение книги по java. Так, когда ж английским-то заниматься? Если только во сне... Но, говорят, что на английском сны начинают сниться не раньше, чем через пару лет проживания в англоговорящей стране. ))


До        После        GitHub        LinkedIn

вторник, 13 декабря 2016 г.

Tips & Tricks

Частенько при написании программ по новым темам возникает необходимость "подглядывать" в ранее написанные мной программы. подумываю завести себе какую-нибудь "базу знаний", что-то вроде своего собственного "Tips & Tricks". Возникло затруднение? Открываем базу, смотрим, как это надо делать и делаем.
Можно, конечно, и по класс-файлам искать, но хочется, чтобы все было красиво: с описанием и возможностью поиска.
Пока еще не определился, как это сделаю. Присматриваюсь к MyTerra.

До        После        GitHub        LinkedIn

Прогресс

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

Неделю назад сдал ментору устный экзамен по 2 модулю (части) курса по java и перешел к изучению 3 модуля.
А впереди еще 12 модулей (частей).
Общая структура курса такая:
001. Базовый Синтаксис. (7)
002. ООП (8)
003. Ввод-вывод (3)
004. ООД (7)
005. Collections (7)
006. Garbage Collection (5)
007. Multithreading (6)
008. SQL, JDBC (5)
009. Serlvet JSP (9)
010. Hibernate. (5)
011. Spring (7)
012. Интеграция. (7)
013. Шаблоны проектирования. (6)
014. Алгоритмы. (7)
В скобочках указано количество тем, на которые поделен модуль. В каждой теме по 1 - 6 заданий на написание программ по пройденной теме.
По каждому модулю нужно устно сдать от веты на контрольные вопросы (около 30 - 40) и 1 - 2 контрольных задания.
Выглядит каждый модуль примерно так:


Задания по пройденным темам всегда предполагают самостоятельное изучение тонн дополнительного материала. Оно и правильно. Это приучает искать информацию самостоятельно и читать спецификации на английском. ))

На экзаменах, помимо 30 - 40 заранее известных вопросов, могут быть заданы около 10 дополнительных. Поэтому всегда найдется 1 - 2 вопроса, на которые не готов ответить. Нельзя объять необъятное.
Но это не беда. Вопрос, на который ответить не смог, записываем себе в специальный "white list" и ставим на котроль пополнить недостающие знания.

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

Сейчас изучаю потоки ввода-вывода. Если до этого программирование мне снилось только во время выполнения контрольного задания по 2 модулю (написать логику шахмат), то сегодня приснилось, как я разбирался с ByteArrayInputStrem (только второе задание из 3 модуля). Это показывает, насколько усложняются задания от модуля к модулю.

Еще, с 3 модуля ментор разрешил мне пользоваться IDEA. До этого все программы я писал в Sublime Text и gedit. Несмотря на все свои плюсы, IDEA в некоторых частях настолько сложна и запутанна, что проще то, что нужно сделать в gedit.
Например, на днях попробовал сделать каталоги и pom.xml для программ 3 модуля в IDEA. Такой фарш получился... И, главное, не исправляется в IDEA никак. Пришлось удалить все файлы IDEA из проекта, сделать все "ручками" и потом открыть как уже готовый проект в IDEA ))
В общем, есть еще к чему стремиться.


До        После        GitHub        LinkedIn

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

Мотиваторы, возраст, Ё

Очень важно в процессе обучения постоянно находить для себя какие-нибудь мотивирующие вещи. Например, вчера это был разговор с кам-то из сокурсников о том, как это здорово - стать программистом и как поскорее бы хотелось уже устроиться на новую работу. Сегодня это может быть чья-то статья, в которой рассказывается о том, что учиться никогда не поздно. Завтра - новая вакансия на LinkedIn, для которой тебе не хватает изучить всего-то ничего (какие-нибудь Spring's или Hibernate). Послезавтра - новый подкаст на IT-тему. Еще дальше - видео на Youtube про switche-ров и все такое.
Все эти вещи будут являться теми самыми "хлебными крошками", которые покажут тебе, что ты идешь в правильном направлении.

Замотивировавшись сегодня "по самое небалуй" вечером "ухну" следующее задание по Exception-нам.))

Про возраст. Я уже вроде бы раньше писал, что возраст - учебе не помеха. Хочу выложить здесь свои более структурированные мысли на эту тему.
Для сомневающихся, переучиваться или нет, есть еще один способ решения "проблемы" возраста. Это арифметический способ: 
Допустим, например, что возраст "сомневающегося" составляет 40 лет. Сколько из них он работает по своей последней специальности? Самый максимум - 20 лет без высшего образования и 18 лет - с высшим.
Сколько лет ему осталось работать до официальной пенсии? 20 лет. А обещают, что скоро это будет 23 года.
Таким образом, в возрасте 40 лет человеку предстоит работать дольше, чем он уже отработал до этого. Т.е. трудовая деятельность его еще не закончилась даже наполовину.
Если такой человек задумался о смене профессии и единственное, что его смущает, это вопрос о том, а не поздно ли он все это затеял, то после приведенных расчетов вопрос можно изложить в таком виде:
- сможешь ли ты продолжать дальше работать в той же специальности, что сейчас, еще 20 лет или лучше попробовать что-то другое?

Про "Ё". С недавних пор я настроил на клавиатуре на букву "Ё" переключение языка ввода. В Windows на работе это оказался единственно возможный способ сделать переключение языка ввода не alt+Shift  и не Ctrl+Shift. Устанавливать специальные программы для этого не захотел (зачем замусоривать систему). Зачем мне понадобилось изменять сочетание клавиш для переключения языка? Все просто: дома я работаю на Ubuntu в IntelliJ IDEA. В ней использую сочетание клавиш Ctrl+Shift+/ для комментирования строк. Одновременно при этом переключался язык ввода. Пришлось сменить сочетание клавиш на другое и дома и на работе, чтобы все было "безобразно, но однообразно" ))


До        После        GitHub        LinkedIn

понедельник, 28 ноября 2016 г.

Switche-боязнь

Уже довольно давно меня мучает вопрос о том, почему java-исты так боятся оператора switch().
Вот, написал я вчера программу. В ней указал:
String key = input.ask("Enter your choice number: ");
switch (key) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4": menu.choice(Integer.parseInt(key));
         break;
     case "5": return;
     default: System.out.println("Incorrect input. Try again.");
}
Ментор сказал, что всё отлично, вот только switch() надо убрать. Конечно, ранее он говорил о том, что якобы switch() - это усложнение чтения программы и надо его везде заменять на if-else(), но я почему-то думал, что это относится к случаям, когда после каждого case: пишут по несколько строк кода.
В моём же случае всё очень наглядно и легко читаемо. Отсюда и вопрос: почему java-исты так боятся оператора switch()?
Вот, сейчас поменяю это на if-else() и получится непойми что. Ну, да, ментору наверное виднее. ))


До        После        GitHub        LinkedIn

суббота, 26 ноября 2016 г.

"Программисты" vs "инженеры"

На днях в одном из подкастов услышал очередное "откровение" о том, что есть два подхода к разработке ПО:
1\ инженерный подход - если работает, то лучше это не трогать;
2\ подход программиста 80 лвл - всегда всё переделывать.

При этом ведущие были явно на стороне второго подхода. И вроде обосновывали это красиво, и я даже местами был с ними согласен... Но, блин, как же я понимаю "инженеров"... ))


До        После        GitHub        LinkedIn

пятница, 25 ноября 2016 г.

Куча новостей

Привет, привет, привет!
Давненько не писал ничего. Учёба набирает обороты и совсем нет времени заниматься графоманией. Да, что там блог, не хватает времени даже на то, чтобы выспаться как следует. Учусь ежедневно до 01:00 - 02:00 AM .
Программы пишу - только клавиши на клавиатуре летят.
На курсе изучения Java каждую неделю происходят какие-то глобальные изменения. То maven нужно подключать к проекту, то checkstyle, то cobertura, то из sublimetext нужно перебираться на IntelliJ IDEA. Инструкции по всем этим инструментам приходится искать в интернетах и как-то адаптировать их под свои проекты. А после этого - ещё и ранее написанный код исправлять и комментировать.
В общем, всё как в самых "взрослых" "полевых условиях". Cложно, но очень интересно. ))

Из новостей:

1\ Наконец-то меня избавили от этого глючного skype! Недавно всё общение между обучающимися на курсе перенесли из skype в Hipchat (интересно, название образовано от слова "хиппи" или "хипстер"?)) Теперь по каждой учебной теме есть отдельная "комната" для общения, стало меньше флуда и теперь легче находить нужную информацию и задавать вопросы о наболевшем.
А наболевшего - просто горы. Пётр (руководитель курса) любит давать загадочные задания. ))
Такие, на пару-тройку часов погуглить. Да еще и по англоязычным сайтам.

2\ Skype заблокировал свежесозданный аккаунт моей жены, т.к. не нашел у себя в базах привязки акка к конкретному лицу (она у меня та ещё конспираторша). Написали, что аккаунт "подозрительно активный" (ага, общалась всего месяц только со мной и по 1 фразе в 2-3 дня) и потребовали ввести свой номер телефона, чтобы, значит, снять все подозрения. )))
Что у всех за навязчивая идея такая: во что бы то ни стало установить, какому реальному человеку принадлежит аккаунт?..

3\ В грядущем году планирую пойти в отпуск зимой или в начале весны, чтобы меня не отвлекали от учёбы поездками на дачу или пляж. Надеюсь, что смогу за 4 недели отпуска освоить очень большую часть курса. Ведь в следующем году уже нужно искать новую работу (план у меня такой).

4\ На LinkedIn изменил свой профиль с "адвокатского" на "программерский". Сразу увеличилось количество просмотров профиля, количество интересных вакансий и вообще теперь всё просто здорово! ))

5\ Роскомнадзор заблокировал LinkedIn и кто-то ушлый уже через пару дней его "импортозаместил". Этот "заместитель" - это просто смешно. Судя по описанию, может быть ЛинкЮ и станет популярным среди той прослойки населения, для которой очень важно, какой ты рассы, вероисповедания и, какой у тебя любимый питомец. Т.е. среди тех, кто сейчас активно обитает в одноклассниках, вконтактиках и прочих своих мир@мэйлах.
Мне на такое "замещение" даже посмотреть не захотелось. Мы, профессионалы, остаемся на LinkedIn, т.к. умеем преодолевать административные барьеры. ))

6\ Поисковые сервисы хором "зажали" результаты поиска по запросу "расширение chrome для доступа к luinkedin". В первый день блокировки в любом поисковике можно было найти минимум 2-3 расширения в первых же строчках результатов.
Через два дня - уже нет.

7\ Вчера на рабочий комп хотел поставить программулину, скачанную из "недоверенного источника". Вместо программы установилось столько малвари от мэйл.ру, сколько до этого я не видел одновременно в одно время и в одном месте. Потратил пару часов на то, чтобы вычистить её ото всюду. Они что себе думают, что я после такого хамства стану их преданным пользователем?

8\ Наш Президент наехал на "учёных" - чиновников, которые для получения большей з/п "пролазят" в Российскую Академию Наук. Видел этот сюжет краем глаза по ТВ. Больше всего поразила реакция главного "академика" на вопрос Президента о том, действительно ли все эти чинуши являются "видными учёными", без которых наука "зачахнет". Этот самый главный "академик" ответил, что, они (чинуши), дескать, сказали, что начальство им разрешило стать академиками.
Мне моё начальство тоже разрешило стать академиком. Только при чём тут наука? ))

9\ Ежедневно пополняю свой репозиторий на GitHub новыми учебными программами.


До        После        GitHub        LinkedIn


понедельник, 14 ноября 2016 г.

Не сдаёмся

На курсе по Java уже больше 100 учеников. 
Второй модуль курса порадовал очередным "сюрпризом" - нужно было создать UML диаграмму классов для системы учёта заявок пользователя. при этом пользователю должно выводиться меню и предлагаться выбрать возможные действия с заявками (создать, изменить, удалить и т.д.). В UML диаграмме должны быть расписаны какие у классов должны быть методы, их параметры и что они будут делать.
Ну, что тут можно сказать, после первой лекции посвящённой наследованию и ничему больше... Что такое UML? Понятно, изучаем самостоятельно. На что должны быть заявки? Заявки каких видов могут быть? Зачем системе учёта заявок самой выводить пользователю какое-то меню и как-то обрабатывать введенные пользователем данные?

Пару дней потратив на изучение UML и принципов построения диаграмм, наваял нечто несуразное в таком духе:
Блок-схема
UML-диаграмма классов
От недостатка исходных данных получилось непонятно что. Преподаватель курса тоже ничего не понял и попросил расписать класс Tracker в словами в виде текста. ))
В виде текста получилось сделать что-то более-менее похожее на план программы.
После этого ещё день смотрел на youtube лекции по ООП, читал книжку по Java и писал конспеты.
Надо будет потренироваться с написанием родительских и дочерних классов, чтоб не забыть пройденный материал.

По сложившейся у меня дурной традиции, английским и спортом на выходных не занимался, т.к. все силы бросил на Java и UML. Новых программ за выходные тоже не написал.

До        После        GitHub

понедельник, 7 ноября 2016 г.

Первый экзамен

Вчера состоялся мой первый экзамен на курсе Петра Арсентьева "Программирование на Java".
Пётр ошибочно полагал, что до Java я изучал программирование  на Паскале. Поэтому все его вопросы были направлены в основном на отличия между Java и Паскалем (например, про динамические и статические массивы). Я же Паскаль видел только краем глаза, да и то издалека, и до Java изучал C. Поэтому не сразу понимал, что от меня хочет услышать Пётр, отвечал сбивчиво и задавал много уточняющих вопросов. Другими словами, "тупил". ))
Но, вроде как, сдал. Перешёл на второй модуль курса (а всего их 14). 

В скайп-чате среди студентов курса ходили слухи о том, что только один человек смог пройти весь курс за один год, все остальные застряли где-то посередине. Пётр говорил, что можно пройти весь курс за 8 месяцев. Значит, это и будет мой план на ближайший год - пройти весь курс и найти работу.

В качестве итогового задания по первому модулю курса Пётр попросил написать программу, которая объединяет два отсортированных массива в один, который также должен быть отсортирован.
Сначала я хотел сделать одновременную сортировку с объединением (т.е. брать по одному элементу из каждого source-массива (источника), сравнивать их и класть в destination-массив (результирующий). Но, по здравом размышлении, решил, что написать такой код сложнее, чем написать классу, копирующий 2 массива в один и прикрутить к нему имеющийся у меня класс-сортировщик (сортирует методом перестановки или, как ещё называют, "пузырьковым" методом).
Итоговый алгоритм получился таким:
1) копируем первый source-массив в destination-массив;
2) следом за ним копируем в destination-массив второй source-массив;
3) после этого сортируем destination-массив.

Получился код в духе Java-way и в ООП-стиле - из уже имеющихся классов создал новую программу. Написал только один новый класс Copier - для копирования двух массивов в третий. Ну, и, соответственно junit-тест писал только для класса Copier, т.к. тесты для всех остальных классов уже были написаны в другой программе.

На правах рекламы буду в каждом сообщении указывать ссылку на свой GitHub.
В ближайшее время добавлю на GitHub в chapter_001 ещё 2 программы из первого модуля и создам новый каталог chapter_002 для программ второго модуля.

До        После

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

00:00 - developing

Уже второй день подряд к 00:00 часам заканчиваю писать программы. Если  и дальше так продолжится, то пора будет вводить новый термин, обозначающий стиль такой разработки: 00:00 - developing. ))

Где-то на GitHab будут лежать все мои "две" учебные программы. ))

Что интересного заметил в курсе программирования на Java:

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

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

Странным мне представляется подход к написанию программ, при котором для программы сначала пишется Junit-тест, а потом уже код, который этот тест должен проверить. Это похоже на поэтапное написание класса с методом main()
Так как я пока не могу сходу написать программу или тест без ошибок, то одновременное написание программы и теста для неё усложняет написание программы, т.к. приходится придумывать "заглушки" для кода, увеличивает в 2 раза количество ошибок и сильно усложняет их поиск.
Поэтому я пока что пишу тесты к программе в таком порядке: сначала пишу программу и класс с методом main() и отлаживаю её, а потом уже на основе кода из метода main() делаю тесты к работающей программе.

Эх, поскорее бы пройти начальные модули курса и приступить к более серьёзным вещам, чем расчёт площади треугольника. ))

До        После

вторник, 1 ноября 2016 г.

Очередной выверт мозгов

Java  в очередной раз выворачивает мне мозг.
Вчера весь вечер вникал в приведённый на курсе Петра кусок из программы для расчёта площади треугольника. В конце-концов, как это работает я разобрался. Только не понял, зачем было так всё усложнять:
1\ есть класс "точка" с координатами (х, у):
- в этом классе указывается, что: this.x = x, а this.y = y: (надо, кстати разобраться с этими this. , а то что-то везде их пишут, а что это - не рассказывают),
- в этом же классе пишется метод, рассчитывающий длину стороны по формуле Герона;
- этот метод принимает в качестве параметра второй объект-"точку" с координатами (x, y).
2\ далее, есть класс, в котором будет вызываться метод расчёта длины стороны из одного объекта-точки и передавать ему в качестве аргумента второй объект-точку;
3\ создаются два объекта-точки: точка-А и точка-Б;
4\ создается метод, который будет вызывать метод расчёта из объекта точка-А и передавать ему в качестве аргумента объект точка-Б...

Пётр пишет, что это правильный код в духе ООП, метод расчёта длины стороны в нём более лаконичен и т.д. Как это работает, я разобрался. Но не понял, для чего нужно было всё так усложнять? Почему нельзя было сделать проще: в один метод расчёта длины стороны передавать в качестве аргументов координаты двух точек? Такой метод можно вызвать столько раз, сколько точек вершин у фигуры, а в качестве аргументов можно передавать ему массив с координатами точек.
Зачем было городить такой "огород" из объектов? Ладно, в задаче всего 3 точки, а если их будет 6, 12 или 24? Никак не могу понять, в чём тут выгода по сравнению с одним методом... Точки и их координаты постоянно "летают" от одного объекта в другой. Очень сложно отследить их "траекторию".

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

До        После




понедельник, 31 октября 2016 г.

Git, TrackStudio, Maven & Junit - выходные

Первая лекция из курса Петра Арсентьева традиционно была посвящена...
Даже не так. Начну с того, что ей предшествовало.
А предшествовал первой лекции тот факт, что перед тем, как начинать что-то изучать на курсе нужно научиться работать с TrackStudio: создавать там себе проекты и задачки, назначать по ним ответственных и комментировать ход их выполнения. Для этого в курсе имеется инструкция в картинках. на перевод которой с... ну, мягко скажем, непонятного русского языка на понятный язык, у меня ушло около пяти часов... Изучение TrackStudio проходило в следующем цикле:
1\ читаем пункт инструкции,
2\ пытаемся в TrackStudio найти что-то похожее на ту кнопочку, на которую нужно нажать по инструкции,
3\ если не получилось, то повторяем п.2 до тех пор, пока не получится что-то похожее на картинку из инструкции,
4\ если получилось, пишем в инструкцию перевод этого пункта на русский язык (правильное название кнопочки и места, где она на самом деле находится),
5\ переходим к следующему пункту инструкции и возвращаемся к началу этого цикла...

Раздосадованный таким началом, написал Петру длинное письмо в духе того, что его инструкция к TrackStudio больше похожа на машинный перевод с китайского на русский, чем на инструкцию.
Занимался этим всю субботу. Бессмысленно и беспощадно потраченное время. Минус 5 часов из жизни. Остаток светового дня субботы (до 01:00 AM воскресенья) наслаждался книгой по Java.

В воскресенье было ещё интереснее. ))

Здесь самое время вернуться к тому, с чего я начал этот пост: первая лекция из курса Петра Арсентьева традиционно была посвящена базовым вещам: что такое Java и т.д.. Первое задание было тоже традиционным: написать программу Calculator, которая должна вывести в терминале "Hello World"... ЧТО?! 
Почему Calculator  должен писать в консоль "Hello World"? Calculator должен производить указанные ему арифметические действия с переданными ему числами.
Что запрещало назвать программу как-нибудь "HelloWorld", "Program" или "MyFirstProgram"?
Если это какая-то Java-традиция называть первую программу калькулятором, вне зависимости от того, что она на самом деле делает, то нужно же предупреждать об этом. Эффект на меня был произведён примерно такой же как от фразы: давайте выпустим новый автомобиль и назовём его стиральной машинкой.

Дальше ещё интереснее.

Думаю, дай, гляну следующий видео-урок, там наверняка будет что-то про этот модный "калькулятор" рассказываться. Я не ошибся. В следующей лекции был мельком показан код "написанной нами ранее" программы Calculator, которая принимала в качестве аргумента строку и три раза выводила её на экран... И при чём тут был "Hello World"?
Но "HelloWorld" нужно было не просто написать, а ещё добавить в проект Maven и сделать его модульным. Maven? ЧТО ЭТО?! Он здесь откуда взялся? Это ж была только первая лекция по основам Java, в которой про Maven не было ни слова.
Поискал по видео-урокам Петра, нашёл урок о том, что такое Maven. Просмотрел ещё часа 3 видео с других курсов, чтобы понять, что это такое. Установил, настроил. Идём дальше.

Лекция №2 "Типы данных". Задание после лекции: написать тест к калькулятору. ШТА?! Какие тесты? Что это такое? Откуда это? Как их писать?.. Ещё несколько часов просмотра на youtube видео-уроков на тему тестирования Java-программ. Узнал, что существует множество инструментов для автоматического тестирования Java-программ. Какой из них нужно использовать в курсе Петра? Полез опять смотреть его видео. Увидел в одной из строчек кода знакомое по просмотренному на youtube слово Junit. Ещё несколько часов просмотра на youtube чужих видео-уроков на тему Junit...

К 24:00 воскресенья имею:
- git-репозиторий на GitHub;
- модульный проект;
- подключенный и настроенный Maven;
- установленный Junit;
- Calculator, который производит прописанные в нём вычисления с определёнными (инициализированными) в нём самом переменными;
- тест для Calculator.


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

Написал Петру свои замечания и обратил его внимание на то, что его курс называется "Java с нуля до профессионала". Пётр позвонил мне в воскресенье вечером, сказал, что исправит все недостатки курса к концу ноября...
Только мне от этого что? Я этот этап курса уже прошёл. И два дня непродуктивно потеряны. Домашние дела не сделаны. Кот не вымыт. Английский заброшен. Курс "Научное мышление" - тоже. Спорт? Его туда же. Вместо изучения и практики Java изучал и практиковал Maven и Junit. Дошло до того, что когда в воскресенье вечером сел писать Calculator, то понял, что напрочь забыл всё, что прочитал на первых 100 страницах в книге по Java. В голове только git, Maven и Junit. Придётся начинать сначала...

Теперь в полной мере понимаю смысл поговорки: шаг вперёд и два назад...

До        После

пятница, 28 октября 2016 г.

Господа, рекомендую

Как говорится: господа гусары, рекомендую.
Книга К. Сьерра, Б. Бейтс "Изучаем Java" - это реально стоящая вещь! В ней и только в ней мне, наконец-таки удалось получить ответ на такой элементарный вопрос, как "что такое класс и метод?". При чём, об этом рассказывается в очень доступной форме и на первых же страницах книги.
После прочтения первых 50 страниц книги я уже смог ОСОЗНАННО написать свою первую программу на Java с циклом for().
Короче, MAST READ для начинающих программистов, у которых возникли проблемы с переключением мозгов на "философию Java". ))
В общем, я пою и пляшу от радости, как в индийских фильмах. Можно вздохнуть свободно. Ведь теперь я понимаю основы Java. Отныне, этот язык для меня больше не является "китайской грамотой". А вышеуказанную чудо-книжку - читать, читать и ещё раз читать!

До        После

четверг, 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. Библиотека профессионала".

До        После




среда, 26 октября 2016 г.

Starting Java

Началось.
Вчера я успешно закончил курс программирования на C и приступил к изучению программирования на Java. Решать несколько дней задачи на C я не стал, т.к. решил, что чем быстрее изучу Java, тем раньше начну искать работу по новой специальности. Кроме того, не вижу большого смысла в закреплении основ языка C, т.к. не нашёл нормальных бесплатных курсов по изучению профессионального (углублённого) программирования на C, в которых рассказывалось бы о том, как работать в C с графикой, видео, аудио и т.п. вещами.
Лучше буду больше задач решать на Java. Кстати, синтаксисы C и Java очень похожи. Так что изучение основ C не должно пройти даром.
Насколько я понял из того, что рассказывают об обучении программированию более опытные чем я товарищи, моё желание сосредоточиться на изучении одного языка не лишено смысла.
До выходных планирую изучать основы Java, git и Eclipse. В субботу-воскресенье начну проходить платный курс Петра Арсентьева. Что называется, "отсчёт пошёл". ))

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

Английский идёт по плану: утром - видео-курсы, днём - аудио-курсы. Временами новые темы даются легко. Временами - со скрипом. Аудио-лингвальный курс очень помогает в плане произношения. Спасибо "школе разведчиков".

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

До        После

понедельник, 24 октября 2016 г.

Java

Скоро, скоро уже приступлю к изучению Java...
На Stepic.org записался на курс "Основы программирования для Linux". Что называется, "синдром плюшкина". Хочется сразу успеть изучить всё и везде. Уже от нескольких курсов пришлось отказаться, т.к. не было времени на их изучение и выполнение тестовых заданий. Посмотрим, получится ли изучить этот курс.

Из курса программирования на C осталось просмотреть только один последний модуль по работе с файлами и итоговое занятие. Планирую ещё 1-2 дня порешать задачи на C для закрепления пройденного материала и буду переходить к Java.

Курс английского языка для начинающих неожиданно закончился на тридцатом уроке. Дальше начался другой курс от этого же преподавателя "Английский язык. Времена глагола". После него в одном и том же плей-листе идёт курс "Английский язык. Практика речи". А я-то планировал, что за 200 уроков от одного преподавателя смогу освоить английский на приемлемом уровне. Сейчас думаю пройти указанные два курса и переходить на другие курсы: от "Полиглот" и ЛингваЛео.

До        После

среда, 19 октября 2016 г.

Интересное

Нашёл несколько интересных статей и видео по Java и карьере начинающего разработчика. Выложу здесь ссылки:
1. Выступление Стаса Лозенко: "Level up для джуниора: конкретные шаги":
Стас рассказывает про то, как можно за пол года изучить программирование на Java до уровня, при котором можно претендовать на должность middle-developer, какие книжки обязательны к прочтению и, как создать своё портфолио начинающему разработчику.
Дума, что по мере освоения Java я буду не раз ещё возвращаться к этому видео.

2. Статьи Стаса Лозенко по Java.
Пока что их не читал. Но обязательно займусь этим до начала курса программирования на Java.

3. Выступление Сергея Немчинского: "Как создаются и поддерживаются Enterprise системы":
Сергей рассказывает о том, как правильно разрабатывать и поддерживать Enterprise системы,  с чем при этом придётся столкнуться разработчику, что при этом нужно делать, а чего делать нельзя, приводит перечень часто применяемых анти-паттернов.

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

5. Вводная лекция Сергей Немчинского по джедайским техникам Максима Дорофеева:
В видео Сергей рассказывает: про особенности работы мозга человека, о том, что нельзя хранить в оперативной памяти много информации, что мозг человека состоит из двух неравнозначных частей ("обезьянки" и "человека"), что "обезьянка" любит развлекаться, а "человек" не любит работать, что "человек" может "дрессировать" "обезьянку" и перекладывать на неё часть своей работы.


Буду пополнять пополнять этот пост по мере обнаружения всяких интересностей.

До        После

вторник, 18 октября 2016 г.

Рекуррентные вычисления

Вчера на курсе программирования на C изучали рекуррентные вычисления на примере создания программы для печати чисел Фибоначчи. Было очень интересно и познавательно. Осталось научиться вспоминать о возможности таких вычислений при написании подобных программ самостоятельно. ))

На курсе английского изучаем модальные глаголы. Мне эта тема показалась немного запутанной, как будто ведущая чего-то не договаривает. Посмотрим, что будет дальше. Если в видео-курсе ничего толком не объяснят, то придётся почитать ещё какую-нибудь книжку.
Помнится, лет 15 назад изучал английский по книге А.Н.Драгункина (тогда ещё не было "этих ваших "интернетов"). Вроде бы там про правила употребления глаголов было очень доступно расписано.

Книжку по программированию не открывал уже дня 3-4. Надо это исправить.

На выходных по наступлению "мягкого" дэдлайна прошёл очередной модуль курса "Научное мышление".

До        После

понедельник, 17 октября 2016 г.

По традиции

По традиции, эти выходные прошли в режиме интенсивного обучения. Но на этот раз они были целиком посвящены изучению курса программирования на C. К текущему моменту я изучил уже 6 модулей по 1 - 4 урока в каждом. Осталось изучить ещё 6 модулей и можно начинать изучение Java.

Также на выходных успел написать несколько программ на C:
1\ очередное решение первой задачи из курса программирования на C (и чего она мне покоя не даёт). На этот раз решение состояло из использования новых изученных мной функций atoll(), strlen(), описанных в заголовочных файлах string.h и stdlib.h;
2\ простейший калькулятор, выполняющий действия +, -, *, / с двумя числами;
3\ небольшой кусок кода в #define, позволяющий включать и исключать из текста программы команды печати отладочной информации. Записал его в качестве снипета VSCode.

Нашёл много сложных и не очень задач по программированию на C. Планирую параллельно с изучением Java выделять время на их решение на языке С.

На курсе "Научное мышление" зачем-то ввязался в спор со сторонниками теории "магического увеличения вероятности правильного выбора в зависимости от количества изменений игроком своего выбора". Это наверное потому, что "в интернете кто-то не прав". Торжественно обещаю больше этого не делать. Хотят ребята верить в "Поле Чудес", пусть верят. ))

До        После


воскресенье, 16 октября 2016 г.

Ещё решение

"Покой нам может только сниться". ))
Вот ещё одно решение тестовой задачи с курса углублённого программирования на C:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main()
{
    long long int Num = 0;
    long double n;
    char stringNum [21];
    int length = 0;

    if(scanf("%s", stringNum)!=1 || strlen(stringNum) > 20) return 0;
        
    length = strlen(stringNum);
    
    for(int i = 1; i < length; ++i)
    {
        if(stringNum[i] < 48 || stringNum[i] > 57) return 0;          
    }

    Num = atoll(stringNum);
    n = (sqrt(1 + 8 * (double)Num) - 1) / 2;
    
    if (Num > 0 && Num <= 9223372036854775807 && ((long long int)n*((long long int)n+1)/2) == Num)
{
   printf ("%lli\n", (long long int)n);
}
        
    return 0;
}
 В этот раз программа принимает треугольное число как строку символов и после проверок корректности ввода преобразует его в число. Интересно было бы прогнать эту программу через тесты с курсов углублённого программирования на C. 
Всё вроде бы хорошо делает программа, вот только при подаче ей на вход количества символов, превышающего размер массива (например: 11111111111111111111111111111111111111) она выдаёт:
*** stack smashing detected ***: ./triang-num terminated                                                    
Аварийный останов (сделан дамп памяти)
Интересно, это посчитали бы как несоответствие условиям задачи? Ведь по условиям задачи при некорректном вводе программа должна возвращать 0...

До        После

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

Снова ускоряемся

Учёба набирает обороты.))
Вчера подал заявку на курсы обучения программированию на Java. Курс называется "С нуля до трудоустройства, Java SE + EE". Стоимость за 8 месяцев обучения на этом курсе составляет примерно половину стоимости обучения в течение 1 года в ВУЗе. При этом организатор курса гарантирует, что по прохождении (не по окончании!) курса у меня будут достаточные навыки для трудоустройства программистом на Java.
Отлично. 8 месяцев - это не 5 лет. А 35 тыс. руб. - это не 350 тыс. руб. (за весь период обучения в ВУЗе).

Сейчас в ускоренном режиме досматриваю курс программирования на C и с ноября планирую начать курс обучения программированию на Java.
Вчера разговаривал с организатором курса по Java. Он дал мне кучу ссылок для ознакомления с первичной информацией, необходимой для того, чтобы начать проходить его курса. Ещё вагон и маленькая тележка новой информации. ))

По C прошли до конца операции (арифметические, присваивания, отношения, логические и битовые). Следующая тема будет про операторы ветвления.
Но, прежде, чем переходить к новой теме, мне предстоит сегодня написать решения для более, чем 20 задач. При этом без использования операторов if, for и while. )) 

Также усиленно учу английский. В любую свободную минуту - в наушниках звучит аудио-курс по английскому. И ежедневно смотрю 1 видео-урок по английскому дома.

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

До        После

среда, 12 октября 2016 г.

Корректировка курса

Вчитался на днях внимательнее в требования, которые предъявляют работодатели к соискателям на должности программистов. Одним из требований является наличие "высшего" или "высшего по специальности" образования. Подумал, что разные работодатели могут по-разному писать свои требования к образованию кандидатов неспроста. Погуглил на эту тему и выяснил следующее:
1\ Для программиста желательно иметь высшее образование. Причём, зачастую, не важно, какое это было образование.
2\ Высшее образование - это не показатель наличия у программиста необходимых навыков программирования. Все, кто что-либо рассказывал о высшем образовании, сходятся во мнении, что в ВУЗе студентов не учат программировать. Их там учат самостоятельно учиться.
3\ При трудоустройстве диплом никто не смотрит.

Сделал для себя следующие выводы:
1\ Высшее образование в сфере computer sciense мне особо ничем не поможет. Зачем тогда тратить на него деньги и, самое главное, время?
2\ Высшее образование у меня есть. Следовательно, способностями к самообучению я не обделён.
3\ Переквалифицироваться можно на курсах программирования. Курсы позволят мне начать карьеру программиста гораздо быстрее, чем ВУЗ.

Решил пока не спешить платить за учёбу в ВУЗе. Всё равно, первая (установочная) сессия начинается в январе 2017 года. Решил для начала пройти какие-нибудь курсы по программированию. После завершения самостоятельно изучаемых мной видео-курсов программирования на C попробую сначала пройти видео-курсы по Java, а потом  запишусь на какие-нибудь онлайн-курсы по Java. Чтобы не забывать C, буду писать код одновременно на Java и на C.
Возможно, что я в чём-то принял неправильное решение. Но я этого не узнаю, пока не сделаю первый шаг по его исполнению.))
Что ж. примерная дата начала прохождения курсов по Java - середина ноября 2016 г. Посмотрим, что у меня из всего этого выйдет.

До        После

вторник, 11 октября 2016 г.

В судах

Вчера весь день провёл в судах. Времени писать в блог совсем нет. Едва удаётся найти время, чтобы пообщаться с женой.))

Новостей пока никаких: продолжаю изучать операции в C (этому посвящено несколько лекций).
Английский тоже идёт своим ходом.
А в книжке по программированию (уже на 400 странице) всё никак не может закончиться Паскаль. ))

Ещё я уже несколько раз переименовывал свой блог. Это чтоб его труднее было найти и прочитать. Шутка. ))

До        После

воскресенье, 9 октября 2016 г.

Много интересного

Вчера прошёл третий модуль курса "Научное мышление".
На уроке программирования на C изучали операции и их приоритеты. Лекция скучноватая, но полезная в том плане, что напоминает о том, что компилятор "думает" не так, как человек, и то, что мы привыкли считать для себя "очевидным", на самом деле является результатом наших определённых мыслительных процессов. Только наш мозг устроен так, что он стремится упрощать для себя выполнение типовых задач путём исключения из процесса мыслительных операций и подстановки вместо них готового ответа на типовые исходные данные. Компилятор же при компиляции программы каждый раз должен выполнять все свои операции в определённом порядке. Необходимо знать, в каких случаях и в каком порядке он будет эти операции выполнять, и, что этот порядок может отличаться от того, в котором мы привыкли делать то же самое, либо может быть неочевидным (таким, который невозможно заранее предсказать).
Вот так немного путано, но кратко можно изложить суть того, что я понял из этой лекции.

Ещё кратко ознакомился с различными онлайн-сервисами, предлагающими обучение программированию. В очередной раз убедился, что возраст не помеха в обучении программированию.
Из видео на каналах IT PropagandaПетра Арсеньтева и GeekBrains узнал, с чего нужно начинать в программировании и как выбрать, куда двигаться дальше, какие уровни зарплат предлагают программистам на различных языках, какова их востребованность на рынке труда.
Оказывается, самый популярный сейчас язык программирования - Java. Но и конкуренция среди Java-программистов значительно выше.

Что ж. Пока что я изучаю программирование на C. Возможно, что после него буду изучать C++ или Java. Хотелось бы также пройтись по Haskell - об этом языке пишут много лестного. В частности, что он позволяет писать не менее эффективный код, чем C++ и не такой громоздкий, как Java. Посмотрим, что у меня из всего этого получится. ))

До        После

пятница, 7 октября 2016 г.

Я сделал это!

Мне кажется, я сделал это!
Наконец-то на курсах по C дошли до явного приведения типов и вроде как мне удалось дописать решение тестовой задачи.

Вот её условия: 
Определить номер введённого треугольного числа. Числа положительные и начинаются с 1. Если введено число, не соответствующее условиям, программа завершается и возвращает 0.

Вот моё решение:
#include <stdio.h>
#include <math.h>

int main (void)
{
long long int tn;
int kaka;
long double n;

if (scanf("%lli.%d", &tn, &kaka) !=1) return 0;
n = (sqrt(1 + 8 * (double)tn) - 1) / 2;

if (tn > 0 && tn <= 9223372036854775807 && ((long long int)n*((long long int)n+1)/2) == tn)
{
printf ("%lli\n", (long long int)n);
}

return 0;
}
Эх, надо было не отписываться от курса углублённого программирования на C - сейчас была бы возможность протестировать программу. ))

До        После

И тут меня понесло

В наушниках в каждую свободную минуту звучит английский.
Общение по WhatsApp с сестрой - только на английском.
Куча бесплатных интернет-курсов в закладках браузера.
Миллионы планов по обучению программированию на выходных.
Все новости - только об IT. Новые знания - только по программированию.
Видео - только обучающее по программированию и английскому.

И что самое интересное, мне это нравится. Впитываю, как губка. Где я был до этого? Чем занимался? Почему не начал изучать программирование раньше? Не беда. Главное - начать и довести до конца.

Информации, которую надо усвоить - море. Времени на всё это - кот наплакал. Отлично! Прорвёмся!

А пока побежал работать.

До        После

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

Уже лучше

Весь вечер изучал английский, писал задачки на C и читал книжку по программированию (на Паскале =__= ). Когда уже этот Паскаль закончится и начнётся, наконец, C...

Изучение английского по-прежнему идёт неторопливо. На последнем уроке проходили причастия (ing-овые формы глаголов).
Так как записи IT-подкастов прослушиваю очень быстро, то скачал себе аудио-курс английского "по методу доктора Пимслера" - будет, что слушать в те моменты, когда мозги свободны, а видео смотреть нельзя (в дороге или когда занят физическим трудом).
Ещё хочу закачать себе в плеер каких-нибудь детских или адаптированных для изучающих английский язык аудио-книжек. Хорошо, если к аудио-книжкам будут прилагаться их печатные версии.
Заметил такую интересную вещь про изучение английского языка: есть много разных курсов, но ни одного отзыва о том, что кто-то смог выучить по ним английский. Интересно, я смогу стать первым в этом? ))

Все из 20 задачек на C решил. Правда, без заморочек с проверкой вводимых данных, как на углублённых курсах по C. Сначала хочу просто научиться нормально писать код, чтобы не "спотыкаться" на элементарных вещах вроде использования правильных типов данных.
Ну, вроде уже неплохо получается. Компилятор с флагом -Wall уже редко выдает предупреждения или сообщает об ошибках. Да и те совершаю, скорее, по невнимательности при copy-paste кода из одной части программы в другую и быстро нахожу и исправляю.
Так что берегись, молодёжь! Скоро (через пару лет, надеюсь) на рынок труда выйдет дядя Миша.

Прочитал в одной статье о том, что нужно знать начинающему разработчику. Добавил в закладки. Попозже сделаю план самообучения и буду "пилить" гранит науки в этом направлении.

До        После

среда, 5 октября 2016 г.

Свет решает всё

Вчера в середине рабочего дня до вечера отключили электричество у всего нашего микрорайона. И "жизнь" в нашем офисе замерла. Сегодня придётся выполнить двойную норму по забиванию букв в электронные документы. ))

Особых новостей по учёбе нет. Вчера нагло отложил на потом все курсы и книжку и решил догнать участников курса "Научное мышление". Этот курс идёт с сентября 2016 года по январь 2017 года. И я отставал в его освоении на 1 месяц. Вчера всех догнал. Теперь смогу в спокойном режиме изучать этот курс по выходным в качестве "разгрузки" для мозга.

Вечером буду решать задачи по программированию на C из нового курса, изучать английский и читать книжку по программированию (снова этот Паскаль...).

А к тестовой задаче я всё-таки когда-нибудь вернусь... ))

До        После

вторник, 4 октября 2016 г.

Баба с возу

В общем, попробовал я вчера и так и эдак тестовую задачу порешать, и снова ничего у меня не вышло. Вот мой последний вариант:
#include <stdio.h>
#include <math.h>

int main ()
{
unsigned long long int tn, n;
int kаka;
if (scanf ("%llu%*c%d", &tn, &kaka) !=1) return 0; //по условиям задачи при ошибке должен возвращаться 0
if (tn > 0 && tn <= 9223372036854775807) unsigned long long int n = (sqrt(1+8*tn)-1)/2;
if ((n*(n+1)/2) == tn) printf ("%llu\n", n); //последняя проверка (на всякий пожарный)
    return 0;
}
И почему-то дальше 3 теста (а всего их 12) задача не прошла. На третьем тесте вместо номера треугольного числа программа почему-то выдает всякие непонятные числа (в основном, дробные). Даже в том случае, когда на вход ей подают "правильное" треугольное число, а не всякий мусор.
В комментариях к задаче многие писали, что в этом случае их спасало декларирование long double n. Я попробовал. Не получилось. Понял, что у меня проблема с типами используемых переменных. Что ж, будем изучать основы дальше.))
А от курса "Углублённое программирование на языке C" я отписался. Либо не время мне ещё этим курсом заниматься по причине недостаточности знаний, либо курс построен не совсем правильно, так как тестовое задание не соответствует предшествовавшему ему лекционному материалу. В любом случае, на нынешнем этапе моего обучения этот курс не даёт мне новых знаний и отнимает немало времени.
Что ж, как говорится: баба с возу - кобыле легче.

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

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

До        После

понедельник, 3 октября 2016 г.

Информация

Выходные прошли в "информационном угаре". Помимо новых лекций по программированию на языке C изучал также основы работы с Visual Studio Code в режиме: скачать-установить-запустить-настроить. Вроде бы всё получилось установить, настроить и даже подключить к git (правда, непонятно пока, когда мне этот git пригодится). Осталось научиться с ней работать ))

Продолжаю думать над решением тестовой задачи. От идеи передачи программе числа как аргумента решил отказаться.
Писать очередной вариант решения задачи пока не берусь, т.к. всё ещё есть парочка вопросов, на которые пока не знаю ответа. Как только получу знания, достаточные, чтобы ответить на все свои вопросы, то обязательно допишу решение. Для этого нужно более основательно изучить работу функции scanf(). В частности, как она реагирует на то, что ей пытаются "скормить" больше символов, чем она способна принять.
Например, мне нужно, чтобы она принимала строку не более, чем из 10 символов. Но что, если ей подсовывают 11 или больше? Как я узнал, лишние символы scanf() оставит для следующего ввода. Но непонятно пока, просигнализирует ли она о том, что на вход ей подали больше, чем нужно, или нет.
 Хотя... можно попробовать обойти этот момент так: сказать  scanf(), что можно принять до 12 символов, а потом самому проверить: если поступило больше 10, то была попытка ввода большего числа символов, чем нужно. Попробую сегодня что-нибудь написать на эту тему, а то если ничего не писать, то так и "квалификацию" потерять недолго.))

Немного огорчает книжка, которую читаю. В ней автор всё больше и больше "закапывается" в Паскаль и при этом сам не перестаёт напоминать, что Паскаль - это не тот инструмент, который нужно изучать для профессиональной разработки, и, что скоро автор перейдёт к описанию языка C. У меня тогда вопросы:
- зачем были нужны 200 страниц текста о программировании на Паскале?
- почему бы сразу было не перейти к программированию на C и не показывать все примеры на нём?
Так что пока "продираюсь" в книжке через Паскаль к C. ))

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

До        После

пятница, 30 сентября 2016 г.

Взгляд в "будущее"

Как много можно узнать, "заглянув в будущее"?
Можно, например, узнать, что есть такая функция, как strlen(), которая поможет мне точно и без лишних заморочек ответить на вопрос, сколько элементов в массиве символов.
Осталось только разобраться, что там происходит с символом конца строки (учитывается ли он при подсчёте или нет), и можно сказать, что ещё один шаг в решении задачи пройден.
Ура, что ли? ))

До        После

Учимся

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

Краткий отчёт по учёбе:
По языку C - последняя лекция оказалась сложной. Было много новой информации, вызвавшей много новых вопросов, и мало времени над всем этим подумать. Нужно будет повторить её ещё раз.
По английскому языку - продолжаем изучать способы образования прилагательных. Здесь по-прежнему пока всё идёт ровно и без особого напряжения.
Книжка по программированию - "завяз" в районе 300-х страниц. Автор начал приводить много примеров на языке Паскаль. Приходится разбираться и прикидывать, как всё это могло быть сделано на языке C. Что интересно, некоторые из примеров в книге можно использовать для решения моей злополучной тестовой задачи, но только на языке Паскаль, т.к. в языке C таких команд нет. ))

Хм... Меня только что снова осенила "гениальная" идея по поводу решения тестовой задачи.
Сегодня вечером нужно будет её проверить. В следующем сообщении обязательно напишу, что у меня получилось.

До        После