Материал также доступен в качестве видео:
Привет.
Меня зовут Никита, и я профессионально занимаюсь программирование более 15 лет.
Помимо работы кодером, я также выполняю руководящие функции, и приличное время посвятил преподаванию программированию. За плечами 2 высших образования - техническое и экономическое.
Работал я в крупных производственных, строительных компаниях, а также в весьма крупном банке. Это значит, что у меня накопился довольно большой багаж профессиональных знаний, которыми я хотел бы с вами поделиться.
В нынешней экономической обстановке, в первую очередь людей, изучающих программирование, волнует тема денег.
То есть, вопрос ставится так: какие конкретные шаги, по схеме 1-2-3 мне сделать, чтобы вписаться в индустрию выйти на некий средний заработок?
И в этом сразу заключается первая проблема.
Я могу лишь сказать, не какие шаги я бы сделал на вашем месте, а не то, какие шаги следует делать вам. В этом есть огромная разница и она заключается в ответственности.
Вся ответственность лежит на вас.
Например, лично я занимаюсь спортом, начиная с первого или второго курса института, и на в своей нынешней форме могу выжать лежа 150-160 килограмм.
Это значит, если в моей машине садится аккумулятор (чего довольно давно не случалось), я просто толкаю ее и моих сил хватает, чтобы завести мотор.
В вашем случае, сил может не хватить, и нужно придумать что-то другое, например, подключить провода к другому аккумулятору.
Возможно, ваша машина - тяжелый джип или грузовик. Другими словами, ваши цели слишком крупные и сложные, чтобы применять к ним именно эти методы.
Тем не менее, слушайте.
Ни для кого не секрет, что рынок регулирует сферы деятельности человека, и больше денег платят за работу, которую могут выполнить меньшее число людей.
Так вышло, что программирование, кодинг - такая сфера, где людей пока мало.
Причины этого таковы, что в этой сфере применяется абстрактное мышление, использование которого требует усилий. Мало этого, стоимость входа на первый взгляд слишком высока, и люди не могут понять, надо ли в это лезть.
Посидев в кабине автомобиля, мы уже понимаем, хотим ли быть водителем.
Побывав на производстве, наблюдая за рабочим, тоже вполне понятна суть его работы.
Что же до программирования, обычно до первого результата нужно идти довольно долго, и эта дорога может выглядеть как обучение в институте сроком 4-5 лет, а потом еще 1-2 года стажировок.
И если в итоге человек понимает, что не справляется, что это не его ремесло, ему очень обидно.
Обидно потерять даже 1 вечер, который мог бы провести с семьей на какое-то предприятие без результата.
Я знаю по меньшей мере 15 человек моего потока института, которые в итоге
Итак, овладевание компьютерными науками на примере семейства языков Java.
Начнем с азов.
Уже давно программы работают не в вакууме, а посредством сетей общаются с друг другом. Называется это клиент-серверным взаимодействием.
Java машина - среда, в которой выполнение Java байт-кода приведет к более-менее одинаковому результату.
Дело в том, что операционные системы отличаются разнообразием, и код, чтобы работать на них, должен быть скомпилирован в машинный код по-разному под каждую из них.
Java создана для того, чтобы решать эту проблему.
Программисты на языках Java зарабатывают так много именно по этой причине - продукт их труда заработает повсюду, если мы говорим о серверах.
Но не только. Дело в том, что в телефонах с ОС Андроид тоже имеется Java машина, хотя и иная, чем на обычных компьютерах, с иными библиотеками.
Кроме этого, Java код может с определенным успехом скомпилирован к код для браузеров (Chrome, Internet Explorer и т.д.), который по чистому совпадению называется JavaScript.
Таким образом, Java закрывает:
1. Серверную часть
2. Клиентскую часть на обычных компьютерах
3. Клиентскую часть на мобильных устройствах с Андроид.
4. Иногда даже клиентскую часть в браузерах, компилируясь в JavaScript.
Вот почему Java кодеры так востребованы.
Теперь о грустном.
Java язык имеет отвратительный дизайн. Избыточный, нелаконичный. Он улучшается довольно медленно (хотя и улучшается).
Но существует огромный объем кода, написанный на версиях 1.7, 1.5, и даже еще более ранних. Работа с ним - тяжкий труд, хотя за него и платят деньги.
Как по мне, лучше всего использовать Java машину, но пользоваться более красивыми языками под нее, например Scala. Существует также российская разработка - язык Kotlin, на который тоже стоит обратить внимание. В любом случае, решать вам.
....
Итак, с чего начать вход в мир Java?
Для начала, нужно определиться, есть ли у вас склонность к программированию вообще.
Дело в том, что образование в России позволяет выявить математический склад и склонность к программированию на ранних этапах.
Существует сегрегация в школах на умных и не очень детей, и для условно умных начиная лет с 12 проводят специальные тренинги, в которых ребенок может написать первые простые программы, и сразу получить отдачу от них.
Примерно те же упражнения вы можете выполнить и во взрослом возрасте, а после заглянуть в свое сердце и понять, интересно ли вам это вообще.
Если оказалось что нет, не нужно унывать. Дело в том, что в индустрии есть и другие пути, по которым вы можете прийти к успеху, и зачастую они более быстрые.
Все мы помним Стива Джобса, за которого работу делал Возняк, а Джобс пожинал все почести.
Такова жизнь, она несправедлива, но, возможно, именно таков ваш путь.
Как правило, в командах присутствует такая роль как аналитик (пониже) и менеджер (повыше). В связи с тем, что всегда требуется активно общаться с людьми, попасть на вершину пищевой цепочки, в менеджеры, проще всего как раз из аналитиков.
Если вы чувствуете, что у вас недостаточно влечения именно к коду, скорее всего, не стоит пытаться проломить головой бетонную стену, и надо идти по этому пути.
---
Если же вы твердо решили войти в профессию, то вот что вам следует знать.
Тот формат, что я читал для студентов в учебном центре при МГТУ имени Баумана, предполагал движение от общего к частному. Предполагалось, что студент сам поймет, способен ли он двигаться самостоятельно, и прекратит изучение.
В конце трека были совсем уж экзотические технологии, который, если честно, мало кому необходимы.
Так вот, на первом же занятии я предлагал студентам прямо сегодня разместить объявление о работе, резюме, и пытаться зарабатывать с помощью кодинга.
Я делал так для того, чтобы люди сразу же чувствовали отдачу от этого ремесла.
Ведь оценки, которые я ставил за упражнения, были не более чем цифрой напротив их фамилии.
Что же могло случиться с человеком, взявшимся за настоящую работу?
1. Он мог получить какой-то заказ, и успешно выполнить его. В этом случае, возросла бы его самооценка, уверенность в своих силах. Он бы посмотрел на настоящие деньги в своих руках, и сказал - да, общество благодарно мне, за то что я делаю, и мне надо продолжать.
2. Допустим, у него возникли бы затруднения. Как правило, люди в большинстве честны и старательны. Взяв на себя обязательства, они постараются найти решение вопроса, и в 99% оно имеется в интернете.
Достаточно лишь грамотно задать вопрос на StackOverflow. И даже если бы человек не смог сформулировать вопрос сам, я бы помог ему (делать работу за него я бы конечно не стал, предпочитаю дать удочку, чтобы он был сыт каждый день).
3. В самом крайнем случае, если бы выяснилось, что заказ таков, что его объективно нельзя выполнить, мой студент получил бы ценный опыт, за что не стоит браться при определенном бюджете.
Иногда такой опыт даже более ценен чем 100% успешный, так как дает возможно увидеть предел собственных возможностей.
В том же случае, если вы не чувствуете морального права учиться на реальных задачах, придется, конечно же, заняться выполнением учебных.
Какова же на мой взгляд оптимальная программа для обучения Java c самого начала?
1. Я бы начал с визуальных приложений.
2. Я бы пропустил Swing и начал с Андроид.
3. Я бы попытался реализовать какую-то простую игру - Lines, Tetris и что-нибудь такое.
У меня есть еще один пункт, который может оказаться нелогичным - использовать Scala вместо Java. Казалось бы, используя Java машину, следует и писать на Java, но тут не все так однозначно.
В любом случае, читать Java код нужно уметь обязательно, т.к. большая часть примеров на StackOverflow на этом языке.
А вот нужно ли писать на нем, это большой вопрос. Помимо прочего, оплата за Java/Scala разработчика выше чем за чистого Java.
Для этого определенно понадобилось бы знание теории:
1. Переменные, простые типы (но не с точки зрения old school программистов) - Integer, String, Boolean.
2. Списки, прочие коллекции.
3. Ветвления, условия, циклы.
4. Окружение, в котором запущено приложение: экран, ресурсы, события.
Создав простое приложение на Андроид, можно дополнить его функционал взаимодействием с компьютером, написать серверную часть.
Возможно, эта часть будет реализована в виде REST сервисов, а кроме этого иметь доступ, например, к статистике игр, через браузер (web-страница, несколько страниц, сайт).
Храниться результаты игр на сервере, будут не абы как, а в базе данных, их выборка может производиться через язык SQL, или же через ORM (вообще говоря, в Java и в Android не советую использовать ORM, но изучить о чем это надо – пригодится на собеседованиях).
Выполнение этого задания может затянуться на месяц и более, в зависимости от целеустремленности студента и наличия у него свободного времени.
Удачи!