среда, 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. Посмотрим, что у меня из всего этого получится. ))

До        После