• 1.63

  • +1.88

  • ,

Долгий путь к программисту (год спустя)

Свою историю успеха я писал работая пятый месяц, сейчас после моего трудоустройства прошел год с небольшим и наверное на самом деле пора подвести небольшие итоги.

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

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

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

В результате за год я получил опыт разработки системы от начала и до запуска.
Участвовал в планировании, видел какие неверные решения к чему привели и какими силами и ресурсами приходилось потом это исправлять.
Легко не было, javarush дает офигенный толчок, офигенный опыт в практике Java Core и основного стека технологий, чтобы вы не с пустыми руками приходили на собеседование.
Но дальше придется трудиться не меньше. В некоторых компаниях с новичком кучу времени проводит тимлид и буквально сам его учит, у нас было по другому. Я получал очень ценные советы, книги, ответы на вопросы и ревью моего кода, когда просил это, но я прекрасно понимал что у тимлида и без меня забот хватает и всеми силами старался его не беспокоить. Тут мне пригодился навык самостоятельного обучения, полученный на javarush, когда ты сам ищешь, разбираешься, гуглишь, дебажишь, думаешь, снова дебажишь и снова думаешь. В результате моя эффективность как программиста росла очень быстро.
Тут же стоит отметить что я практически каждый день проводил на работе гораздо больше времени, чем от меня требовали. Я был самым слабым по скиллам в команде и чтобы давать хороший результат я работал усерднее и больше. Я намеренно развернул мониторы так, чтобы их видел мой тимлид и у меня не было ни малейшего соблазна «залезть на минутку в вк» или «быстренько проверить почту»(это не было запрещено, тут скорее моральный аспект, чем административный). Я много трудился чтобы получить эту работу и не был намерен всё тупо слить из-за желания «поржать с котиков». Иногда я тайком приходил и работал в выходные))

Важный момент — меня никто к этому не принуждал. Я почти два года занимался программированием в свободное время, а тут я мог заниматься им ВЕСЬ ДЕНЬ! Вот это был кайф. Это не была работа в привычном понимании, как отработка повинности ради получения денежного вознаграждения. Это был чистый кайф от возможности заниматься любимым делом и еще и деньги за это получать. Развиваться как специалист, стараться, видеть результаты своих трудов. Очень круто.

При таком графике было очень важно не потерять равновесие, я уверен что общий успех человека состоит из трех пунктов:
1. Реализация в профессиональном плане, материальный достаток.
2. Физическое развитие и физические навыки, здоровье тела.
3. Социальное развитие, твой круг общения, признание в обществе.

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

Так прошел год.

Несмотря на то, что у нас в компании собралась отличная команда, из-за некоторых стратегических просчетов руководства объявило, что дела у компании идут не очень. Уволилось несколько ключевых программистов и встал вопрос поиска новой работы. Тут проявилась одна важная особенность — работа в команде. Когда вы работаете не как кучка разрозненных программистов, а именно как команда, единый организм, где каждый помогает друг другу. По факту мне даже не пришлось ходить по собеседованиям. По рекомендации одного из наших старших программеров меня пригласили в другую компанию и так как мой товарищ возглавил одно из направлений я прошел даже без технического собеседования. Компания в которой я сейчас работаю называется Юлмарт (ulmart.ru). Это один из крупнейших интернет магазинов в России. Сначала меня немного смутило то, что это не профильная IT компания. По классификации Зеппа — это компания второго уровня. Но пообщавшись на собеседовании с руководителем департамента я решил попробовать. Уровень технологий и проектов казался интересным и перспективным.

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

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

Мысли на перспективу.

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

Моя основная ветка развития из описанных Зеппом «Посмотреть весь мир, кроме Парижа и не умирать», а именно удаленная работа со свободным перемещением по миру.
Я обсудил это с моим текущим руководителем и как результат сейчас начал активно штудировать курсы по computer science на Coursera. Базы данных, алгоритмы, паттерны.
Имеет значение не большое количество сертификатов — это как раз по мнению руководителя скорее минус для соискателя если он хвастается сколько у него «корочек», а имеют значения получаемые знания. То насколько ты хорошо разбираешься в тех вещах с которыми ты сталкиваешься и с которыми тебе еще только предстоит столкнуться.

Спасибо javarush, как я уже писал, этот курс помог мне пройти самый сложный период становления меня как программиста и оглядываясь назад вряд ли я бы прошел этот путь читая книжки и занимаясь по более академическим курсам. Именно такая подача информации и огромное количество задач позволило мне набрать достаточный разгон, чтобы «расправить крылья». Дальше я могу уже лететь самостоятельно. Большое Вам спасибо!

Пожелание начинающим ученикам.

Ну и конечно успехов всем тем кто еще только начинает. Могу дать один как мне кажется важный совет — постарайтесь научиться получать удовольствие от процесса. Если вы изо дня в день будете заставлять себя заниматься на javarush, насиловать себя, принуждать, то скорее всего скоро бросите занятия. Во всем важен баланс. Становление программиста это не спринт, а марафон. Спокойно делайте задания, общайтесь, спрашивайте, вас будут бесить некоторые задания — это нормально, некоторые вы не будете понимать как делать — тоже нормально. Вы каждый день будете сталкиваться с этим на работе. Зато по окончанию у вас будет такой багаж практики что вы сможете легко влиться в работу, хорошо зарекомендовать себя на проекте и быстро вырасти как специалист. Помните — удовольствие от процесса. Лучшими программистами становятся те, кто умеют получать кайф от того что они делают, он процесса сотворения нового, создания. Успешного Вам пути!

p.s. Если будут вопросы — пишите, всегда рад пообщаться с учениками javarush)
  • ,

Долгий путь к программисту

Эта история успешного обучения будет отличаться от других. Тут опубликовано много отчетов, когда ребята реально в короткий срок проходили практически все уровни, прорешивали задачи, стремительно писали свои проекты и успешно трудоустривались. Их путь похож на взлет ракеты, стремительно набирающей высоту. У меня по другому. Весь путь от первого уровня до того момента когда мне прислали job-offer на младшего java программера занял 2 года и два с половиной месяца. Были разные причины, в какие-то периоды я занимался много, в какие-то не занимался вообще. Сначала я хотел написать этот отчет больше с технической точки зрения, вроде того какие преимущества я вижу у javarush.ru как у образовательного ресурса (а я убежден что это лучший ресурс по изучению java и подготовке к реальной работе), что понравилось особенно и т.д. Но по совету Зеппа подумал и решил что будет лучше если он будет более биографический. Описаний преимуществ javarush.ru как курса достаточно много, не буду оригинальным если повторюсь что основным преимуществом является огромное количество практики на которой «набивается рука» и «качается скилл». После определенного периода постоянных занятий начинаешь чувствовать и понимать программирование. Любой кто осваивал какой-то спортивный навык знает это ощущение. Это чувство дистанции в боксе, это чувство мяча в футболе, это чувство кода в программировании. Это достигается только практикой, а точнее грамотным совмещением необходимого количества теории и более чем достаточного количества практики. А на этом курсе это всё очень грамотно учтено. Итак, сама история.

Я уже 5 месяцев как работаю Java разработчиком в Санкт-Петербурге, но начну с начала.
При выборе профессии я думал о программировании, но усердием я в школе явно не отличался, а потому перспектива изучения огромного количества математических предметов меня совершенно не радовала. Я отучился в техникуме на железнодорожника, но после армии выбрал гостиницы как сферу более интересную. поступил на заочку и уехал из родного города в Сочи. Это был 2012 год, в воздухе витал аромат предстоящей олимпиады, все жили предвкушением. Мне очень нравилась эта атмосфера. Я устроился в крайне неплохой отель в Красной Поляне на разносчика багажа и благодаря своему природному усердию за 7 месяцев перепрыгнул несколько карьерных ступенек и стал менеджером по деловому туризму. Зарплата очень приличная для 21 летнего парня, пока еще без высшего образования, перспективы и всё вроде круто. Но тогда я и стал задумываться над этими самыми перспективами, мне хорошо удавалась профессия, но всё что касается «подковерной игры», интриг, подсиживаний и т.д.… я это никогда не любил, мне казалось и до сих пор это кажется «грязными технологиями» и никакого желания эти заниматься у меня не было. И тут простой расчет — я младший в отделе, следующая ступень — начальник отдела, а это уже (помимо того что надо будет туда пробиться и это возможно только если уйдет нынешний начальник и прочее прочее) управляющая работа. А быть начальником мне никогда не нравилось, не любил я тогда совершенно управлять, контроллировать, перепроверять… я хотел сам быть крутым спецом… а это потолок… Можно конечно было расслабиться, годам к 30 — начальник отдела, к 40 — директор департамента и всё вроде удалось, но это точно не мой путь. И неизвестно как бы сложилась моя жизнь и к чему бы привели все эти размышления, если бы одним теплым августовским вечером 2013 года я не наткнулся на javarush.ru. Я серфил инет на предмет «игр для программистов» (несмотря на то, что я не пошел учиться компьютеры меня всегда привлекали, причем не железо, а именно программы. Во всех предметах в техникуме или институте где так или иначе мы делали что-то на компах типичный урок проходил примерно так — мы проходим новую тему, дают задание, я его сразу решаю и мы с преподавателем ходим и проверяем у других) и забрел сюда. Первое что создало сильный положительный образ — это конечно статьи. В них ярко и четко чувствовался профессионализм, что человек, который это пишет на самом деле очень круто разбирается в теме и пишет именно то что нужно и именно так как нужно! Статья про высшее образование (сильно перекликалась с моими мыслями), статья про путь программиста… да я все их прочитал почти взахлеб и начал заниматься. Сначала конечно я и не планировал менять специальность, оставлять должность, которая для моих знакомых из родного города казалась недостижимой вершиной и «парень реально к успеху пришел». Но постепенно я стал замечать что провожу за задачами всё больше и больше времени, выходные, после работы, куплена подписка. Мой путь в этом плане получился долгим и не всегда гладким, олимпиада, почти сразу за ней дипломная работа, времени на занятия оставалось не много, но я занимался. И вот! Ключевой момент. Я стал всерьез задумываться над сменой профессии, над тем чтобы стать профессиональным программистом. Небольшое отступление
— я бы точно не встал на этот путь без javarush.ru, это сейчас я легко читаю техническую литературу на английском и могу легко воспринимать даже самую «сухую» информацию, но тогда вот эта игровая форма была
решающим фактором, открывшим для меня мир программирования. Я стал заниматься еще усерднее, купил «Философия Java» и активно штудировал. К июлю (учитывая что были периоды когда заниматься не получалось совсем) я уже уверенно чувствовал себя в сore и решил что нужно действовать. Я уволился из отеля, собрал вещи, уехал в Санкт-Петербург и устроился официантом на график 2х2 чтобы в свободное время готовиться к собеседованиям. Тут я получил от Хьюберта тестовое задание на реальный проект… только я стал думать что что-то понимаю и… Hibernate, Spring, Maven, Git, JSP, MVC… я понял что для реальной работы мне еще придется круто потрудиться. Туториалы, попытки запустить готовые, разбить на части, отдельно база данных, отдельно JSP, собрать вместе… уф… это было реально круто! Помню свой восторг от того когда удалось закинуть объект в базу и успешно его получить). Но тут встал другой вопрос, я нерационально использовал имеющиеся финансовые средства и в ноябре был вынужден отступить в свой родной город, до собеседований я так и не дошел (по факту у меня тогда был только сore, но стоило попробовать). Но это отступление нисколько меня не выбило, я видел цель и временные трудности меня нисколько не волновали. Я вернулся работать официантом в тот ресторанчик с которого уезжал в Сочи 3 года назад. Конечно окружающие восприняли это как моё сокрущительное поражение, но мнение окружающих никогда не было для меня особо значимым. И это очень мне помогло в тот период. Работа 2х2, все выходные за java, так прошло время до апреля. В апреле у меня было достаточно денег для еще одного рывка, я уволился и еще два месяца усердно готовился примерно по 12, иногда по 17 часов в день. Но тут случилось что-то вроде выгорания. Я начал задумываться а так ли мне интересно программирование (глупый вопрос конечно если я с большим кайфом мог прогать по 17 часов с перерывами на поесть и поспать). Но вопрос нужно было решать и я решил его кардинально, вместо отъезда в Санкт-Петербург к которому я уже был готов, я уехал в Крым к одному знакомому и занимался совсем другими вещами, программированием не занимался принципиально, хотел проверить насколько это «моё». В сентябре стало невыносимо, жутко тянуло программировать. Полтора месяца восстановления формы, рассылка резюме и отъезд в Санкт-Петербург. Не буду долго расписывать собеседования, но в итоге я работаю в той компании, в которой было моё первое собеседование. И тут я в полной мере ощутил что такое быть программистом… мне больше никогда в жизни не придется работать… никогда… я занимался программированием почти всё свободное время, а тут я могу заниматься этим ВМЕСТО работы! Мне предоставляют место, условия, кидают таски, а моя задача только ПРОГРАММИРОВАТЬ, и еще и денег мне за это платят! Думаю этого ощущения никогда не сможет понять человек, никогда не работавший на по настоящему любимой работе. Испытательный срок, который должен был быть 3 месяца, мне по ходатайству тимлида закрыли через три недели и подняли зп на 50%. Я быстро влился в проект и уже через две недели стал получать вполне «боевые» задачи наравне с другими. Профессиональная разработка это еще больший кайф чем заниматься самому! Никакой необходимости становиться «начальником», никаких «грязных методов», ты можешь развиваться как крутой спец! То что я так хотел! То к чему стремился и не знал как реализовать. Этот путь показал мне javarush.ru. Я даже по жизни стал более расслаблен и спокоей, на тебя не давит работа, у тебя нет «понедельников», ты занимаешься тем чем по кайфу. Вот такая получилось история и это несомненно только её начало, путь получился долгим, зато в выборе я абсолютно уверен. Подойдет ли этот путь каждому, не знаю. Но я точно знаю что при должных усилиях выучиться на программиста не имея спец образования реально! И если вы это захотите javarush сильно Вам в этом поможет.

Огромная благодарность Зеппу и всей команде javarush за то что они делают, это изменило мою жизнь и я думаю жизнь многих других людей! Это нереально круто! Успехов вам во всех начинаях! Здоровья! и Удачи!
Ну и конечно я рекомендую javarush как лучший обучающий ресурс по java всем товарищам, которые интересуются программированием. Еще раз благодарю!

p.s. Многое конечно осталось «за кадром», если что-то интересно, задавайте вопросы в комментариях, с удовольствием отвечу.
  • ,

Пишем сервлет для слежки за пользователями соцсетей. Проблема создания проекта.

В группе JavaRush в контакте недавно появился следующий пост — Пишем сервлет для слежки за пользователями соцсетей. Стало интересно, открыл страничку по ссылке, скачал Google App Engine SDK for Java. Создаю новый проект, но не могу найти где подключать Google App Engine SDK, у меня просто нет такого окна как на следующем скриншотеВ гугле нашел статью — Настройка Google App Engine в IntelliJ IDEA, начал делать по ней, но опять таки у меня нет такого выбораУ меня только Groovy в правой части окна Мне нужна платная версия IDEA или я что-то не правильно делаю?
  • ,

Задача level22.lesson09.task01

Коллеги, провел тестирование на всех вариантах, которые смог придумать. Программа отрабатывает как нужно.
Думал еще что проблема в кодировке, так как были задачи, которые не хотели приниматься без «UTF-8», но тоже в этот раз не прокатывает.
Подскажите, на каких входных данных моя программа отработает неверно, чтобы я мог дальше ее доработать, спасибо!

/*
 
/*
 Обращенные слова
В методе main с консоли считать имя файла, который содержит слова, разделенные пробелами.
Найти в тексте все пары слов, которые являются обращением друг друга. Добавить их в result.
Порядок слов first/second не влияет на тестирование.
Использовать StringBuilder.
Пример, "мор"-"ром", "трос"-"сорт"
*/

public class Solution {
    public static List<Pair> result = new LinkedList<Pair>();

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        reader.close();
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "Windows-1251"));
        ArrayList<String> dataLine = new ArrayList<String>();
        //Записываем все слова из файла в ArrayList.
        while(in.ready()){
            dataLine.addAll(Arrays.asList((in.readLine().split(" "))));
        }
        in.close();

        for(int i = 0; i < dataLine.size(); i++)
        {
            for(int j = 0; j < dataLine.size();)
            {
                StringBuilder stringBuilder = new StringBuilder(dataLine.get(i));
                String s = stringBuilder.reverse().toString();

                //Если перевернутая строчка равна обычной строчке, сохраняем данные в result
                //уже записанные данные из dataList удаляем.
                if(dataLine.get(j).equals(s))
                {
                    Pair pair = new Pair();
                    pair.first = dataLine.get(j);
                    pair.second = dataLine.get(i);
                    result.add(pair);
                    dataLine.remove(j);
                    dataLine.remove(i);
                    j = 0;
                }
                else
                    j++;
            }
        }
    }

    public static class Pair {
        String first;
        String second;

        @Override
        public String toString() {
            return  first == null && second == null ? "" :
                    first == null && second != null ? second :
                            second == null && first != null ? first :
                                    first.compareTo(second) < 0 ? first + " " + second : second + " " + first;
        }
    }
}
  • ,

level16.lesson10.task05

/* Один для всех, все — для одного
1. Разберись, как работает программа.
1.1. Обрати внимание, что объект Water — один для всех нитей.

2. Реализуй метод ourInterruptMethod, чтобы он прерывал все нити из threads.
3. В методе run исправь значения переменных:
3.1. isCurrentThreadInterrupted — должна равняться значению метода isInterrupted у текущей нити.
3.2. threadName — должна равняться значению метода getName (реализовано в классе Thread) у текущей нити.
*/

С пунктом 2 разобрался.
Но на пунктах 3.1 и 3.2 завис.
Никак не могу понять как можно из класса обратиться к нити, которая пока еще не создана. Подскажите в каком направлении копать?

public static class Water implements Runnable {
        private String commonResource;

        public Water(String commonResource) {
            this.commonResource = commonResource;
        }

        public void run() {
            //fix 2 variables - исправь 2 переменных
            boolean isCurrentThreadInterrupted =
            String threadName =

            try {
                while (!isCurrentThreadInterrupted) {

                    System.out.println("Объект " + commonResource + ", нить " + threadName);
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
            }
        }
    }
  • ,

level15.lesson09.task02

Товарищи, по условию задачи все сделал.
Программа запускается и грамотно работает, но проверку не проходит.
Посмотрите что не так.

/* Статики 2
1. В статическом блоке считайте две переменные с консоли А и В с типом int.
2. Не забыть про IOException, который надо обработать в блоке catch.
3. Закрыть поток ввода методом close().
*/