JС: Жизненный цикл создания java объектов

В этой статье я расскажу про то, через какие этапы проходит java объекты при их создании. Другими словами, я расскажу про жизненный цикл java объектов.

Для начинающего java разработчика очень важно понимание жизненного цикла класса. Это поможет быстро решать возникшие ошибки компиляции и предотвратит появление многочисленных багов.

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

Пример 1

Например, мы имеем следующий код в файле Main.java.

При выполнение метода main мы увидим следующий текст.

Как Вы видите java без надобности не подгружает классы, которые не используются. Я говорю о классах ObjectCircle и ParentObjectCircle. Загрузчик классов (класс ClassLoader) не начнет их загружать в память без надобности.

Пример 2

Теперь давайте этот файл немного изменим. И добавим в метод main создание объекта класса ObjectCircle. Остальной файл Main.java остался без изменений.

Данный код выведет следующий текст в консоль.

Теперь есть уже о чем поговорить. Обратите внимание на то, что при создании объекта класса ObjectCircle конструктор выполняется в последнюю очередь. Еще раз немного изменим наш пример и после создания первого объекта допишем создание сразу второго.

Теперь в консоль выведется следующий текст.

Обратите внимание на то, что статический блок выполняется только один раз. Это происходит потому, что статические блоки кода выполняются при загрузке класса ClassLoader-ом в память. Когда мы создаем второй объект, этого не происходит т.к. этот класс уже был загружен в память при создании первого объекта. Еще обратите внимание на то, что перед выполнением статического блока первым делом проинициализировались все статические переменные этого класса, а уже потом выполнился статический блок кода. Об этом говорит то, что в консоли первым появился следующий текст.

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

Последнее о чем стоит сказать это то, что метод finalize вообще не вызвался. Многие новички полагают, что это некоторый аналог деструктора из C++. Но в отличие от C++ java не гарантирует его выполнение. Поэтому его и не рекомендуют использовать.

Пример 3

В следующем примере разберем немного измененный файл Main.java. Сделаем так, чтобы класс ObjectCircle расширял класс ParentObjectCircle.

Выполним снова метод main и посмотрим, что из этого получилось.

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

А затем выполняются статические блоки.

После чего идет инициализация уже статических переменных нашего класса.

И выполняются статические блоки.

После того как оба класса ClassLoader-ом загружены в память идет создание самих объектов. Обратите внимание на то, что сначала инициализируются не статические поля родительского класса, выполняются не статические блоки кода родительского класса, а уже потом выполняется конструктор родительского класса.

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

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

Опять обратите внимание на то, что метод finalize не вызвался!

Пример 4

Рассмотрим еще один уже последний пример на сегодня. Создадим файл ObjectCircle.java.

В этом примере мы полностью избавились от класса Main и метод main перенесли в класс ObjectCircle. Посмотрим, что выведется на экран, если мы запустим метод main.

Получился очень интересны результат. Выходит, что из-за того, что мы метод main перенесли в сам класса ObjectCircle, ClassLoader намного раньше загрузил в память классы ObjectCircle и ParentObjectCircle. Это конечно же объясняется тем, что метод main находится в классе ObjectCircle и для выполнения метода main его нужно загрузить. Но для загрузки класса ObjectCircle  нужно предварительно загрузить в память еще и класс ParentObjectCircle. Поэтому произошла инициализация статических полей и статических блоков кода в этих классах еще до выполнения метода main.

Настало время подвести итог.

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

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

Переопределении метода finalize может приводить к проблемам связанным с некорректным освобождением ресурсов. Это связано с тем, что нет никакой гарантии, что метод finalize будет вызван. Используйте его только, если на все 100% знаете к чему это приведет.

Подробнее

JС: Модификаторы доступа java для полей и методов класса

У многие новички часто путают или не могут понять разницу между default and protected модификаторами доступа. Цель этой статьи наглядно объяснить разницу.

В java существуют 4 модификатора доступа private, default, protected и public. Их можно применять как к полям класса так и к методам, а также к самим классам  и интерфейсам.

Далее будем говорить только о членах класса – полях и методах.

Теперь эту таблицу рассмотрим на примерах

Модификатор private.

Для такого класса A.

Модификатор default.

Для такого класса A.

Тоже самое, что и модификатор private. Плюс следующее.

Модификатор protected.

Для такого класса A.

Тоже самое, что и модификатор default. Плюс следующее.

Модификатор public.

Для такого класса A.

Тоже самое, что и модификатор protected. Плюс следующее.

Вот и все.

Подробнее

Как стать программистом 4

Как стать программистом? Часть 4 – Топ 7 технологий для java junior разработчика.

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

 

Надеюсь Вы понимаете, что от junior не требуют глубоких знаний. Когда-то, кто-то мне сказал, что junior должен знать все, но чуть-чуть. Поэтому не кидайтесь учить все, вплоть до ассемблера. Короче, подробнее буду описывать по ходу.

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

Первое место! ООП

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

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

Раз Вы новичок, то Вас скорее всего, на собеседовании, попросят объяснить, как работает ООП на том языке, который Вы изучаете. Может дадут кусок кода, в котором иерархия классов и скажут определить, какой метод вызовется при тех или иных условиях.

Второе место! Java core

Вторым по важности идет java core. Это достаточно широкое понятие. На знание java core, Вас могут попросить решить тест. Этот тест будет из разряда, что будет если выполнится данный код. Вы заранее можете потренироваться решать такие тесты. В интернете полно ресурсов, которые позволят пройти такую проверку бесплатно. Поищите OCJP(SCJP) tests online.

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

Обратите внимание на то, что я сказал, что вам МОГУТ дать такой тест. Если его не дадут, то скорее всего спросят устно. В этом случае Вы можете проскочить.

Третье место. Java Collections

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

Первым делом выучите основные интерфейсы и поймите для чего они нужны и чем отличаются. Список не большой это Collection List, Set, Queue и Map. Не нужно заучивать все их методы, лучше научитесь пользоваться ими.

Затем выучите основные реализации. Также список не большой, это LinkedList, ArrayList, Vector, HashMap, Hashtable, TreeMap, HashSet, TreeSet. Их недостаточно просто уметь применять. Понимайте особенности реализации и то, когда их нужно использовать. Желательно знать временную сложность выполнения тех или иных операций.

Четвертое место. Servlets

Сервлеты – это тоже очень важная штука. Очень часто на собеседовании меня спрашивали о жизненном цикле сервлетов.

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

Пятое место. Synchronization

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

Научитесь пользоваться ключевым словом synchronized. Так получилось, что я устроился на свою первую работу не зная о существовании классов Semaphore и СountDownlatch. Поэтому я считаю, что это не сильно важно, но если будет свободное время, то поковыряйте их.

Шестое место. JDBC

Практически в любом тестовом проекте, который Вы получите, будет работа с базами данных. Тема, мягко говоря, важная. Знаете, что такое CRUD редактор? Если нет, то поищите в google.

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

Седьмое место. SQL

Раз уж мы коснулись JDBC, то и SQL не обойдем стороной. Вы достаточно неплохо познакомитесь с SQL, когда будете писать CRUD редактор на JDBC. Но я подчеркну еще, что Вы должны понимать следующие операторы языка SQL: SELECT, WHERE, INSERT, DELETE, UPDATE, JOIN (все типы), GROUP BY, ORDER BY.

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

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

Итог

Как Вы могли заметить, самые крепкие знания Вам потребуются по Java core. По всему остальному можно создать видимость наличия у Вас опыта использования. Это объясняется тем, что обычно только по Java core могут дать решать тест. А тест, как Вы понимаете уже сложнее, обмануть. Хотя может попасться такой интервьюер, который так будет придираться, что пиши пропало.

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

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

Все!

 

Подробнее

40 летний программист

Зарплата программиста. 40 летний программист. Часть 1.1

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

Начало

Помню, когда я учился в университете, то большинство моих сокурсников не хотело работать программистами. Основным аргументом было: “Я не хочу стать 40-ка летним кодером”. Поначалу меня это забавляло. Я не вижу особо большой разницы между 40-ка летним админом, тестировщиком или, к примеру, кандидатом наук. Честно говоря, последнее для меня вообще – тихий ужас.

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

Конечно, кто-то сейчас напишет в комменты сопливую фразу, что заниматься нужно тем, что приносит максимальное удовольствие. С этим спорить сложно. Да. Заниматься нелюбимым делом трудно. Но заниматься любимым делом, все дни на пролет и получать от этого смешные деньги – это просто тупо. Жизнь же не ограничивается только любимым делом. Тебе опять же захочется завести семью. Нужно задуматься о том, на что можно обеспечить свою жену и детей, занимаясь любимым делом. У голодного художника и дети голодные.

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

У многих из Вас может возникнуть вопрос, почему эта статья относится к серии “Как стать программистом”? Дело в том, что я посчитал, если среди Вас есть люди, которые хоть и решили учиться этой “забавной профессии”, но несильно видят свои перспективы. Если я обрисую радужную картину, того что Вас может ожидать, это придаст Вам дополнительной мотивации.

Перспективы

Стандартный пакет

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

Как я уже сказал, велика вероятность, что Вы не получите от жизни, то о чем мечтаете, но в замен Вы можете получить небольшой бонус –  ежемесячную компенсацию в размере…. Так стоп. Давайте определимся с тем какой вектор Вы выбрали.

Рис. 1. Статистика зарплат с сайта dev.by

Если Вы управленец – super project manager с опытом работы, скажем, лет 10. То Вы можете рассчитывать на ЗП в Минске до 6 штук баксов. Может кто-то заработает и больше. Я не беру в расчет людей которые доросли до топовых должностей. Мои цифры основываются на статистике с сайта dev.by (Рис. 1). Нечто подобное можно ожидать и в Киеве. В Москве, думаю, что процентов на 20% больше.

Но что если Вы выбрали путь развиваться как технический специалист? Опять же берем человека с опытом около 10 лет super senior developer. Тут дела обстоят чуть по хуже – 5 с половиной штук в месяц(Рис. 2) тоже самое я нагуглил и в Киеве. Думаю Москва опять будет впереди планеты всей.

Рис. 2. Статистика зарплат с сайта dev.by.

Сделаем промежуточный вывод. Помимо уважения или, другими словами, позиция альфа самца в Вашей компании, с таким доходом Вы сможете, ни в чем себе не отказывая, накопить на квартиру стоимостью в 100 000$ за 2-3 года. Или за те же деньги отправиться в кругосветное путешествия. Конечно, если Вы уложитесь в 3-4 недели отпуска. Хотя, когда Вы достигните такого уровня, то Вы сможете диктовать свои условия работодателю и начать работать удаленно.

Пакет “Демократия наше все”

Если для Вас работа в офисе не кажется каторгой и Вы достаточно амбициозны, то для Вас есть пакет “Демократия наше все”.

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

Чтобы начать получать такие предложения от Вас требуется совсем немного. Зарегистрируйтесь на LinkedIn и если у Вас достаточно лет опыта скажем 2-3 года. То через некоторое время, Вас достанут десятки предложений о работе. Некоторые из них будут предлагать работу за границей.

Если задаться целью и поискать самостоятельно, хоть это и не обязательно, то есть варианты переселиться куда-нибудь и подальше. На тот момент что я работаю в IT несколько моих знакомых переехало жить в Польшу, Германию, Нидерланды и США.

Поначалу может оказаться, что Вы работаете на условиях, которые ниже среднего по рынку, но со временем все может стать хорошо и даже отлично. Мне друг рассказывал, что он жил у одного парня в Париже, который работает в Гугл и, если мне не изменяет память, то он зарабатывает по 10 штук в месяц. Не знаю точно, но скорее всего, эта цифра без вычета налогов. Так что дерзайте, Google или Apple ждут Вас.

Пакет “Я не такой как все”

Нет. Вас перспектива торчать в офисе годами совсем не греет? Вас ничего не держит и Вам хочется повидать мир? Не беда, у нас есть для Вас пакет услуг “Я не такой как все”.

Как-то я залез на одну из зарубежных фриланс бирж. И у меня глаза на лоб полезли от тех расценок. Как Вам перспектива заработать 20-50$ в час? Да. Вы, скорее всего, не будите никем управлять и это способ потешить свое самолюбие для Вас не катит. Но в замен, у Вас ненормированный рабочий график. Вы не слышите и не видите чавкающих, сморкающихся, что-нибудь грызущих или чуть ли не пускающих шептунов коллег вокруг Вас. Те кто знакомы с openspace офисом, меня поймут. Кстати, Вы не знаете сколько лет сейчас дают за преднамеренное убийство? Что-то я замечтался.

Вернемся к вопросу о деньгах. Если учесть что Ваши расценки 20-50 $ в час и Вы, скажем, работаете пять дней в неделю по 4 часа то выходит, что в месяц Вы заработаете 1500-4000$. Согласитесь, это очень даже не плохо, если учесть что Вы работаете пол дня, а все остальное время катаетесь на серфинге где-нибудь в Таиланде. Или если Вам не нравится сидеть на месте, то постоянно перемещаетесь. Вы даже можете залезть в любую пещеру или опустить на дно Марсианской впадины. Главное чтобы там был Wi-Fi и источник питания для Вашего ноутбука.

Что если у нас нет фантазии и мы не знаем как себя занять в свободное время? Тогда мы можем попытаться найти работу по 8 часов в сутки. И это уже почти 8 штук в месяц. Когда я писал этот текст, то так и не смог придумать новых примеров на что можно тратить такие деньги. Хотя? Я бы ходил стричь бороду в самый дорогой салон красоты, причем меня бы обслуживал леприкон на ходулях, специально прилетавший из Ирландии.

Пакет “Мастер Йода”

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

Данный вариант может переплюнуть все что я говорил до этого. Можно попробовать начать зарабатывать каучингом. У меня был разговор с очень интересным человеком по этому поводу. И я насчитал минимальный доход в 4000$ если обучать 20 человек по 200$ в месяц. Если Вам кажется, что обучать одному 20 человек это не реально, то подумайте: людей можно разбить на группы или наработать материал с небольшим количеством людей. Если все сделать грамотно то можно помечтать о доходе в 10 штук. А если попробовать работать на западную публику, взвинтить расценки до 1000 баксов и набрать группу больше 20 человек, то мы насчитали 20-25 штук.

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

Самый крутой пакет

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

Заключение

Я специально не рассматривал случай, когда Вы попытаетесь открыть или принять участие в стартапе. Потому что, этот вариант один из самых непредсказуемых и мало вероятных.

Хоть в статье и не было практических рекомендаций, надеюсь что он был Вам интересен. Также, надеюсь, что больше у Вас нет идиотских мыслей по поводу того, кем Вы станете в 40 лет. На крайняк, Вы можете податься в видеоблогинг!

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

Также не забывайте про группу в контакте.

Подробнее

Как стать программистом пр

Как стать программистом? Часть 1

Проанализировав статистику поисковых запросов Google и Яндекс, я решил немного отойти от тех тем и типов сюжетов, которые записываю обычно. Я обнаружил, что ключевой запрос и слова “Как стать программистом” в месяц набираются в 100-200 раз чаще чем запросы по шаблонам проектирования. Было решено провести небольшой эксперимент: посмотреть на то, как эта тема повлияет на статистику просмотров данного ролика по сравнению с другими. Так же, возможно, как это хорошо отразится на скорости роста подписной базы моего канала.

“Как стать программистом?” — довольно философский вопрос. Поэтому на него трудно сформулировать однозначный ответ. Я вспомнил как изучал программирование и попытаюсь сформулировать свои мысли на тему того, как бы следовало это делать. Планируется, что это будет серия роликов и возможно, ближе к концу, я опишу как я учусь сейчас. Также постараюсь поговорить о более практических вещах. Где найти время, как ускорить прогресс обучения и т.д.? Постараюсь мотивировать вас посвятить этому делу побольше времени.

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

Первое о чем я хочу поговорить — это Цель.

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

Точка Б — это то чего Вы хотите достичь, это Ваша цель. Если цель — “Стать программистом”, то я спешу Вас огорчить: Вы неправильно обозначаете цели. Постараюсь объяснить, что в моем понимании хорошая цель.

Мои родители живут в небольшом городе в Республике Беларусь. Периодически я езжу к ним в гости и иногда речь заходит о моих ровесниках. Я слышу от родителей про некого Вовку, который якобы мой ровесник. Вовка работает на местном маслозаводе программистом и получает 200-250$. Они еще удивляются, как хорошо что я остался работать в Минске. Полбеды, когда они называют программистами еще админов или продавцов в компьютерных магазинах. Мне от таких рассказов хочется смеяться. Если Ваша цель “быть программистом”, то я Вас обрадую — на маслозавод пробиться не сложно. Но я думаю, это не то чего Вы хотите.

Пока пишу данный текст, вспоминаю старый фильм “Ослепленный желаниями”.

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

Ладно, вернемся к основной линии рассуждений. На мой взгляд, цель должна быть конкретной. “Я хочу зарабатывать энную сумму денег”, ” Хочу работая программистом на языке Java, путешествовать по миру каждый месяц.” Кстати, я знаю такого человека. Или такая: “Я хочу жить в США и работать в Google” — это тоже хорошая цель, если Вы не собираетесь быть там уборщиком. Нужно больше конкретики.

Теперь нарисуйте точку Б и напишите рядом свою конкретную цель.

Шаг номер 1: Поставьте правильную цель.

Поговорим о том как попасть из дочки А в точку Б. Нам нужен путь и понятно, что путь это некая последовательность действий. О том, какие это действия, я расскажу дальше. Сейчас поговорим о том, как сделать Ваш путь максимально коротким.

Нарисуйте точку В на одной прямой с точками А и Б. Это Ваша другая цель и она не связана с программированием. Скажем, это цель накачаться и догнать вес своего тела до 100 кг. Вы начали свой путь из точки А, идете в точку В и в конце концов достигнете точки Б. Но путь от А до Б увеличился т. к. Вы тратите часть времени на посещение спорт зала. Чем больше у Вас дополнительных целей между точками А и Б – тем дольше у Вас путь. Подумайте, может есть менее важные точки в Вашей жизни и Вы перенесете их за приделы отрезка АБ? Это не значит что Вы их достигать не будете — Вы их просто отложили.

Не бойтесь что-то переносить на потом. Если Вы чего-то действительно хотите, то снова вернетесь к этому. Что это дает? Вы не распыляетесь и это сокращает путь от А до Б. Может кому-то это покажется очевидным, но я Вас уверяю, для многих это очень сложно сделать. Я сам, до сих пор, не отучился от дурацкой привычки усидеть сразу на двух стульях. Например, многие из Вас пытались читать сразу 2 книги, а по итогу было хорошо, если дочитывали хотя бы одну из них. Или ночью пытаешься отладить программу для лабораторной работы по программированию и параллельно поджарил гречку на плите, да  так, что оплавились пластмассовые ручки кастрюли.

Делайте свои дела последовательно, Вы не мультипроцессорная машина, поэтому Вы только имитируете параллельность.

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

Шаг номер 2: Отложите менее важные задачи на потом.

Теперь поговорим о той скорости с которой Вы будете двигаться.

Скорость нашего движения зависит от нашей эффективности. Пусть Вася стал изучать язык на 1-м курсе университета, а работать он стал курсе на 3-м. В то время как Коля, также стал изучать язык на 1-м курсе, но работать стал на 2-м. Получается, что Вася на изучения необходимого минимума потратил 2 года, а Коля 1 год. Откуда делаем вывод, что Коля более эффективно учится т.к. он потратил меньше ресурса времени чем Вася, на достижение одного результата. Еще известно, что Вася и Коля небыли задротами, они находили время на учебу и на тусовки. Но как Коле удалось достичь результата за год? Просто он эффективно управлял своим временем.

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

Конечно, Вы пропустите некоторые тусовки. Подумайте, а во что Вы потом сможете конвертировать время потраченное на них? Да не во что. А время потраченное с пользой — в более высоко оплачиваемую работу и в последствии, заработанные деньги в крутую тачку или на путешествие. Те чудо-программисты, с маслозавода, которые зарабатывают сейчас 200-250$, в то время когда могли учится — занимались ерундой, бессмысленно тратя время в клубе и бухая по вечерам.

 

Надеюсь, это мотивирует Вас на свершения. Лично я, работаю 40 часов в неделю, 1 вечер после работы я уделяю своей подруге, 1 вечер друзьям, 2-3 раза в неделю хожу в спорт зал, а все оставшееся время я уделяю блогу. И у меня, почти всегда, на это находится время, конечно если не случится форс мажер.

Составьте какое-то подобие режима. Это будет способствовать тому, что Вы регулярно движетесь к результату.

Шаг номер 3: Составьте план ваших занятий и придерживайтесь его.

Хорошо, теперь поговорим о более интересных вещах.
У многих студентов и у меня в том числе, возникал вопрос: какой же язык изучать?

Вы когда-нибудь задавались проблемой выбора смартфона? Если да, то наверно замечали, что выбрать его не так-то просто. Я не учитываю случаи, когда Вы приходите в магазин и сразу покупаете смартфон распиаренный рекламой. Я говорю о том, что очень сложно сделать правильный выбор, когда Вы начинаете сравнивать смартфоны разных производителей. Вы сравниваете десятки моделей по десяткам критериев и никак не можете остановиться на одной модели.

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

Вот вопросы, которые определяют ключевые критерии при выборе языка:

— для чего используют этот язык и хочу ли я этим заниматься?

— сколько можно заработать работая с этим языком?

— количество предложений работодателя?

— простота в изучении данного языка?

Почему важно понимать предназначение конкретного языка программирования? Попробуйте есть суп вилкой, китайскими палочками или “на крайняк”, пальцем? Думаю, ответ сразу приходит на ум. Как и любой инструмент, язык программирования используется для чего-то. Для чего-то он подходит лучше, а для чего-то хуже. Есть языки для разработки под мобильные устройства, есть для разработки веб-приложений, а есть для разработки игр. Также, часто бывает, что их используют для нескольких целей. Обращайте на это Ваше внимание, может вам данный род деятельности не понравится.

Сколько можно на нем заработать? Не буду лукавить — я, помимо того что больной ублюдок, еще и жадный ублюдок(но я с этим честно борюсь! =)) Для себя этот критерий я рассматривал наравне с первым. Но тут есть небольшой нюанс. Высокие зарплаты в этой сфере говорят о том, что есть спрос на программистов. За какие-то знания платят больше, а за какие-то меньше. По большему счету, ЗП не очень сильно разнится для программистов владеющих разными языками. Больше зависит от уровня конкретного специалиста, чем от языка на котором он пишет. Думаю, исключением может быть специалист, который владеет какой-то новой технологией и на рынке таких парней очень мало. Но со временем, ЗП скорее всего, опустится до уровня остальных технологий.

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

На основании таких критериев, я бы выделил Java, C#, ObjectiveC и PHP. Так сложилось, что на втором курсе университета мне пришлось познакомиться с Java. Это был годовой курс прикладного программирования.

Java значительно проще в изучении чем С++, например. Давно есть огромный спрос на Java и думаю, что он еще продлится долго. По поводу зарплат, тут как я уже говорил, все зависит от уровня специалиста и от его жадности.

Еще, большим достоинством языка Java я считаю то, что он используется для разработки как больших корпоративных веб-приложений, например из банковской сферы, так и приложений под Android. Также может использоваться для обычных оконных приложений для Вашего компьютера.

Беглый поиск выдал, что на нем написаны многие приложения для Amazon, поиск Bing от Microsoft( я тут вижу небольшую иронию) и серверная часть для Google+.

Если Вы еще не определились, то рекомендую выбрать язык Java. Даже если Вы ошибетесь в выборе, что мало вероятно, то переучиться не составит большого труда.

Заключение

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

Как я уже говорил, вопрос “Как стать программистом?” довольно философский. Это подразумевает, что у кого-то может быть другое мнение относительно данного вопроса. Что абсолютно нормально и потому я не претендую на истину в последней инстанции.
Пока!

Подробнее