Изучение Java: мотивация, перспективы, краткий план?
Знаю, что подобные вопросы регулярно поднимаются на всех связанных с разработкой ресурсах, но все же решил обсудить свою собственную ситуацию. Благодарю всех, кто прочитает мое сообщение. А кто прокомментирует/посоветует/покритикует - благодарю вдвойне. И за ранее прошу прощения за много текста.
Собираюсь начать плотно изучать ЯП, а именно Java. Хотел бы узнать ваши мнения/критику/советы.
Вводная такова. Мне 30 лет, живу в Канаде. Первое ВО с IT не связано (языковое/юридическое), второе ВО в IT - Interactive Multimedia Development for the Internet + Information Security, всего 2,5 года учился в этой области. Первый год PHP/MySQL/CMS/JS/HTML/CSS/Action Script/Media Editing and Design. Еще полтора года Infosec - Networking/PenTesting/Access Control Tech./CISSP Preparation/InfoSec Management/Project Management/Strategic IT + самостоятельно Linux, Raspberry PI projects и много чего еще по мелочам в этой сфере.
Опыт в IT - за компом с 12 лет, с 286-х с модемом 2400. Потом был владельцем Dial-up BBS, поинтом/нодой в Фидо, немного кодил на бэйсик/паскаль/дэльфи (но ЯП знал на уровне школьного кружка программирования, не очень серьезно все).
На данный момент работаю в компании (довольно крупной), которая делает игры, но с разработкой не связан - работаю в Marketing/Tech Support департаментах. Основные технологии, которые используются для наших продуктов - С++, Lua. Я понимаю что C++ не совсем то, что мне нужно - очень сложен, привязан к конкретным архитекторам, для выхода на какой-то приличный уровень потребуются годы. Lua - слишком нишевый и не востребованный на массовом рынке труда.
Цели изучения программирования:
- Давно хотел попробовать по серьезному в этой профессии, еще с детства. В любом случае, даже если выяснится что это не мое - понимание процесса будет чрезвычайно полезно для например работы Information Security или Project Management в IT.
- Научиться, получить опыт и в дальнейшем иметь возможность в течении нескольких лет брать работу на фриланс, работать какое-то время без привязки к географическому местоположению.
- Разрабатывать собственные небольшие приложения - десктоп/internet/Андройд привлекает больше всего - уже есть идеи небольших приложений для себя/друзей, возможно они будут полезны и другим людям.
- Возможно в среднесрочной перспективе, когда позволит опыт - работа джуниором на девелоперсокй позиции.
- Возможность участвовать в интересных мне самому проектах типа openworm, drone autopiloting, neuro-interfaces, image recognition и пр.
Почему именно Java (а не Python, C#, JavaScript, Ruby, PHP):
- Средний порог вхождения. Не очень легко, но и не супер сложно по сравнению со многими другими языками. Понимания процесса программирования, ООП. Возможность довольно легкого освоения и перехода например на Python или C#.
- Много вакансий, серьезной работы full time на североамериканском рынке, требуются джуниоры, причем далее есть перспективы развития и дохода (в тоже время, таких перспектив, как мне кажется, меньше для других языков со сравнимым порогом вхождения). Также такое знание будет не лишним в Information Security Industry, однако связь этих двух направлений мне еще предстоит выяснить.
- Очень развитый и универсальный язык, практически в каждой области его можно применить, много проектов, множество поддерживаемых платформ.
- Много литературы и обучающего материала, примеров, разборов, очень живое коммьюнити и на англ. и на русском.
- Разработка под Андройд.
Целеполагание должно быть как можно более конкретным, достижимым в каких-то реальных и оцениваемых временных рамках, и главное - по настоящему желанным, я набросал себе следующий список:
Конкретные пункты и цели:
- Прочтение литературы (Thinking in Java, Effective Java и др.) и прохождение нескольких курсов (в данный момент прохожу JavaRush), просмотр видео и туториалов по Java Core. (немного скучно и нужно будет себя заставлять, но без начальной базы никак).
- Начало практики - написание совсем небольших программ (интереснее чем предыдущее, но тоже обязательный пункт).
- Поиск и нахождение энтузиастов с такими же целями, как у меня для совместного обучения, мотивации, обмена опытом (делаем это социальной вещью, возможно также внести элемент соревновательности).
- Поиск и нахождение ментора (получение обратной связи в процессе изучения).
- Создание пары-тройки простых приложений для себя самого, полирование их и выкладывания на гитхаб (уже какая-то реальная польза для себя; начало работы с собственным портфолио).
- Решение лабораторных для студентов за бесплатно/символическую плату, а при получения навыка и за реальное вознаграждение (практика на реальных задачах, внесение социального элемента в процесс, человеческая и возможно материальная благодарность).
- Взятие задач на фрилансе и решение их под руководством ментора. Возможна ситуация, когда на ментора я потрачу больше, чем будут платить за данную задачу, но при этом все равно очень много в плюс - Опыт выполнения реального задания, опыт получения реальных денег за этот труд что будет мотивировать далее выполнять уже с меньшей помощью.
Некоторые опциональные вещи, которые могут помочь (однако они не должны подменять собой главный процесс): ведение блога по своему обучению, общение на ресурсах по этой тематике, более расширенный поиск людей, которые преследуют ту же цель и возможно реальный совместный проект с ними.
Я знаю что вопрос "какой язык учить" - всем набил оскомину, что нужно учить "само программирование а не язык" и пр. Я также понимаю, насколько программирование комплексный и многогранный процесс, что знание синтаксиса определенного языка - верхушка айсберга. Но при моих вводных, когда я не сильно понимаю мое ли это в целом или нет, хочу ли я посвятить этому многие годы своей карьеры и жизни, или это так и останется в виде "периодически написать для себя/семьи/друзей небольшую софтину и взять мелкий заказ на фрилансе" - мне кажется что вопрос выбора языка довольно актуален.
Этап в жизни, когда меня что-то увлекало и я страстно посвящал этому всего себя у меня прошел, но на смену пришло умение работать над поставленной задачей даже при скромных запасах энтузиазма и при этом качественно выполнять ее, дисциплина, умение правильно распоряжаться временем и ресурсами, весьма аналитичное мышление.
Я не питаю иллюзий, что я стану гениальным программистом, сениором через какой-то короткий срок, но то, что возможно стать средним сотрудником-кодером, добросовестно работать и получать за это средние по рынку деньги - думаю при моих данных и образовании возможно. При этом у меня есть пару живых примеров как люди это делали.
Имея уже на руках какой-то освоенный язык и понимание того, что кодить - это то, что ты хочешь и можешь делать (как сам процесс - проводить 6-10 часов в день разбираясь в коде, ища решения и пр.) - можно включаться по ходу дела в глубокое изучение и планирования карьеры в этой сфере.
Также некоторые конкретные вопросы, которые я хотел бы обсудить:
- Какие технологии/фреймворки/ аспекты языка помимо Java Core следует изучать с точки зрения большой востребованности фриланса/рынка труда full time? И к изучению каких стоит приступать в первую очередь ?
- Насколько в Jave нужен скилл security programming, и как можно совместить вообще оконченную мною программу Information Security с программированием на джаве? Нужны ли рынку такие специалисты?
- Насколько развит рынок фриланса для джавы? Реально при грамотном подходе через какое-то время получать доход на этом рынке, ну хотя бы сравнимый с доходом в треть того, что получает джуниор на полный рабочий день в средней компании?
Еще раз благодарю тех, кто оставит свои комментарии. Также буду рад предложениям по менторству или совместному изучению - если кто-то будет заинтересован. Я сам тоже смогу что-нибудь вам подсказать/рассказать/помочь, например в изучении английского языка или о жизни в Северной Америке.
Извините, но посмотрите правде в глаза - вы ничего не умеете в этой жизни делать, кроме абстрактной, бесцельной и бесполезной учебы. Два высших образования и годы еще какого-то бесполезного чтения и просмотров чего-то якобы развивающего и полезного. Вы еще небось отличник. Лучше бы вы саус парк смотрели и брейкин бэд, но в остальное время действовали как мужчина - ставили себе задачу и методично ее решали. Не смотрели говнокурсы, а брали задание и кровь из носу выполняли его. А сейчас вам делать просто нечего, пишете тут многабукавы.
Пока не измените вообще методологический подход к своей жизни - у вас все и будет так-же.
Lici: Извиняю. Но очень удивлен этой фразой - "вы ничего не умеете в этой жизни делать, кроме абстрактной, бесцельной и бесполезной учебы"... Комментарий Ваш довольно колкий, причем даже с переходом на личность. Но что ж, и на таком спасибо. Только как из небольшого текста Вы смогли сделать выводы о том, какие методологические подходы я использую в своей жизни, для меня так и останется загадкой.
Да, когда учился - учился хорошо, так как на западе образование очень дорогое, а платил я деньгами, которые заработал сам. Но помимо учебы - у меня около 10 лет трудового стажа фулл тайм, в том числе и на высококвалифицированных позициях. "Лучше бы вы саус парк смотрели и брейкин бэд, но в остальное время действовали как мужчина - ставили себе задачу и методично ее решали." - ББ я смотрел, а вот остальное ко мне не релевантно, хотя я и сам согласен с таким подходом. В данный момент задача такова - выяснить актуальность и адекватность моего представления о том рынке, на который я хотел бы зайти в качестве начинающего участника и мнения профи об условиях такого захода при моем бэкграунде. И это при одновременном изучении основ самого предмета и получения рекомендаций по выбору правильного направления, повышению качества изучения и пр.
Будьте спокойны - мне хватит упорства, методичности, усердия и ума освоить ЯП. И получение мнения/советов/рекомендаций от профессионалов отрасли в начале изучения я считаю будет очень полезно.
JDK, IDE - установлено, запускается каждый день + естественно основы синтаксиса и пр. уже пройдено.
Если кроме голословных утверждений о моих "методических подходах в жизни" у вас есть какие-то комментарии по вопросам, конкретно затронутым в вопросе - изложите пожалуйста, буду очень благодарен.
Lici , т.е. человек работает, развивается, учится постоянно чему-то новому в жизни, ставит задачу и идет к ее выполнению, а Вы говорите, что он не умеет этого делать? Это как минимум - глупо, либо у кого-то был очень плохой день.
Денис Каракчиев: давайте разобью людей на 2 типа. Допустим, они хотят научиться программировать на.. чем-то там.
1) Ага, вот среда разработки, вижу пустое окошко, как его скомпилировать? Вижу, билд. Отлично, программа. Где exe-шник/app? Вот, прикольно, кину подруге в скайте. Аня, у тебя открылось? Охренеть! Збс! Теперь щас прикручу к ней кнопку. Вот, нашел, программа с кнопкой. Теперь щас разберемся как подвесить на нее действие.. так, чот я застрял, вот вроде пачечка теории, щас скушаю и дальше буду делать.
2) Так, значит вот есть такой язык как %названиеязыка%. Потом как-нибудь вообще включу компьютер, для начала мне нужно записаться на курсы и купить 4 большие книги. Хотя перед этим лучше пойти повторить дискретку. Хотя перед ней надо вспомнить как брать интегралы. Черт, надо поработать над своим почерком, не понимаю что я пишу уже. Ой, столько англ слов в коде, подучу английский. Да я ведь развиваюсь! Я учусь!
Так вот люди первого типа реально делают что-то и генерят охрененные результаты, а вторые "развиваются и учатся" как вечный студент или примерный школьник.
Lici: 1) Это очень похоже на хаотичных энтузиастов, 20-летних юношей бледных со взором горящим, охваченных страстью творить без оглядки (на свое и своей семьи будущее, т.к. скорее всего еще сидят на шее у родителей и могут позволить тратить свое время, которого очень много, как угодно и на что угодно - жилье, еда и прочие ништяки появляются сами собой). Да, такие люди что-то генерят, но никакими "охрененными результатами" там и не пахнет чаще всего. Как и дисциплиной, системностью, грамотным подходом, хорошо структурированными базовыми знаниями и много еще чем.. Все держится на энтузиазме, когда он угасает - все скорее будет брошено на пол пути, в угоду новой страсти, увлечению. Хотя и есть исключения.
2) Да, есть люди которые за слишком фундаментальным подходом теряют динамику и какое-то реальное движение вперед и увязают в болоте книг, видеокурсов, чтении форумов и прочем. Тоже не про меня.
Вы как то разошлись по крайностям слишком, чувствуется максимализм, и извините, какая не очень подкрепленная уверенность в собственной правоте и в праве классифицировать остальных по небольшим постам на форумах.
Все же если взрослый человек (у которого от силы час в день свободен - остальное занято работой и семьей) решил поменять профессию, освоить какой-то навык, на что потребуются скорее всего годы, пока он наберет какой-то нормальный и продаваемый на рынке скилл - уместнее всего подойти системно, я так считаю. Конечно, за системностью и теорией не должно теряться реальное движение и живая практика.
Lici: вы разбиваете людей на 2 типа, мните себя кем-то сведующим в социологии, по всей видимости? Так вот ваша разбивка не логична, не подкреплена фактами и расходится с реальной жизнью. Простой пример - квалифицированный специалист, работающий в Oracle скорее относится ко второй категории, нежели к 1-й. К 1-й категории скорее относится средненький фрилансер. Не хочу никого обидеть, сравнение примерное, но суть думаю ясна.
Поселил я тут к себе нового соседа недавеча, 20 лет джава программист удаленный, работает по 60 часов в неделю получает 5000 баксов в месяц играет в волейбол каждый день , через день в качалку. Ездит с нами на острова
Думаю спрос на джава программистов очевидно есть и он конский если люди готовы платить такие деньги двадцатилетнем юношам
Ну идешь в интернет смотришь вакансии устраиваешься, с учетом того что у него самая маленькая зп в фирме устроиться программисту вообще не проблема.
низкоуровневая джава
Cyrax2014: вы не поверите как быстро растут зп в этой жизни )))
На самом деле у него зп просто оказалась в другой валюте + ему подняли её совсем немного.
А еще он теперь трахает официантку из моего кафе )
* Вы должны понимать, что freelance - в основном проекты на одного человека, максимум - несколько.
* На java даже драйвера и приложения для sim-карт пишут, имею ввиду, что спектр направлений деятельности на этом языке - огромен. По этому тыкать пальцем в небо: "учи такой-то фреймворк" ка минимум не корректно. Для начала необходимо определиться с областью.
* Security Programming - вообще говоря нигде не помешает, тут все зависит опять же от области применения, например, у web-а есть золотое правило: "пользователь всегда врет, даже если он этого не знает - все равно врет". В случае, если вы делаете консольную утилиту, например конвертер чего-нить, тут требования будут совсем другие.
* На счет рынка freelance - в чем проблема то? Зайдите на oDesk / fl / любая_другая_freelance _биржа и посмотрите.
Но есть нюанс: java все же mainstream язык, и чаще всего используется не на freelance проектах.
Фриланс на самом деле сложнее, чем стационарная работа, потому как требует серьезной самодисциплины, так же без команды - расти будете медленнее. Сама работа - не постоянна, конечно вы можете сорвать куш в 1 месяц, но рассчитывать на то, что так будет постоянно - как минимум глупо.
Так что подумайте на тем, что бы дотянуть знания до стажера и работать не как фрилансер.
Тема интересная и меня самого давно занимает, я с очень похожими вводными данными 31 год, два высших, да не тех - учу java на протяжении 9 месяцев, уже сформировалось определенное видение как именно максимально продуктивно обучаться. Как раз занимаюсь поисками единомышленников и на среднесрочную перспективу планирую осваивать Канаду))
Оставляю свою электронку, p.pydzirov@mail.ru, пиши
поделюсь теми граблями на которые я уже наступил )))
Если есть желание то почему бы нет ? )
Я присоеденюсь к index0h ─ java для фриланса не самый лучший выбор, если это конечно не android я не говорю что не реально, просто большинство проектов на java действительно чаще всего используется не на freelance проектах. (сам фриласер, android разработчик)
Определитесь какое направление вам интересно, если это android то вам хватит основ java ─ по сути понимание механизма ооп, коллекции и чтоб не допускать глупых ошибок Маленькие хитрости Java , Маленькие хитрости Java. Часть 2 (банальнейшие вещи но часто встречаюсь с их незнанием) а дальше начинается чисто кухня android
Java для веба совсем другой мир, рекомендовать ничего не буду, сам только начал изучать spring (при написание разных api вконец достал php, душе захотелось чего то прекрасного =) )
#JavaRush ─ не счет платного варианта где вас определят в команду ничего не скажу, а так на редкость нудная муть
#На студентов не тратьте время время, мало результативно и в плане опыта и в плане денег
По поводу фриланса ─ почему вы не рассматриваете трудоустройство в местных конторах? с командой вы вырастите намного быстрее
- Какие технологии/фреймворки/ аспекты языка помимо Java Core следует изучать с точки зрения большой востребованности фриланса/рынка труда full time? И к изучению каких стоит приступать в первую очередь ?
По-моему, фреймворки разные и технологии это сильно меняющиеся с течением временем вещи, так что прямо целенаправленно их изучать в отрыве от реальности не очень-то и здорово. А вот с реальным задачами опыт придет, причем неизбежно и с фрейворками, и с технологиями. Главное просто выбрать область в которой вы будете писать программы, так чтобы вам самому это нравилось.
- Насколько в Jave нужен скилл security programming, и как можно совместить вообще оконченную мною программу Information Security с программированием на джаве? Нужны ли рынку такие специалисты?
Любые знания в Computer Science полезны будут. Хотя бы даже для собеседований.
- Насколько развит рынок фриланса для джавы? Реально при грамотном подходе через какое-то время получать доход на этом рынке, ну хотя бы сравнимый с доходом в треть того, что получает джуниор на полный рабочий день в средней компании?
Вот тут могу только догадываться, но похоже, что там (флилансе) java не так популярна, как на работе on-site. Хотя думаю и там можно чего-то добиться, но развитие будет сложнее и дольше (чем работа в команде).
Как итог могу посоветовать командную работу стажером, больше практики, возможно парное программирование с более опытными коллегами.
Попробуйте. Это единственный способ узнать нравится вам писать программы или нет.
Если приходится себя заставлять то не факт что вам понравится каждый день себя заставлять писать программы.
Если не понравится писать программы, то всегда можно заняться чем то другим, особенно с вашим образованием.
Из фреймворков для web весьма востребован Spring. Можно также посмотреть на фреймворки для других языков JVM: Grails (на Groovy), Play (Scala/Java). Наверно, неплохо будет изучить JUnit (написание тестов), а также Maven или Gradle
Я тоже решил заняться Java профессионально. Раньше я писал лишь небольшие программы как развлечение: приятно наблюдать, как что-то, созданное тобой, начинает работать. Сейчас я буду рад единомышленникам по Java. Моя почта для связи gyronode@gmail.com
Тоже недавно начал изучать Java. Читаю "Thinking in Java" и "Java. Библиотека профессионала (Хорстманн К., Корнелл Г.)". У самого такая же ситуация вобщем. И да, согласен, одному трудно и медленно..
Буду рад общению, если что вот alexei1452@gmail.com
Тоже начал изучать Java.
Решил начать с Head First Java, так сказать, с самого элементарного. Потом в плане Хорстманн и "Thinking in Java." Ну и подумываю на JavaRush курс пройти, хотя 200$ с нынешним курсом дороговато выходит.
Тоже буду рад общению: idler1010@gmail.com
Alexandr, как успехи по прошествии времени? Я как и вы (тогда) сейчас на старте так сказать. Пара курсов на Udemy видео с Yuotube и пара книг. Очень интересно узнать как у Вас сложилось и может быть узнать ваши шаги по изучению и не прошло ли все. Заранее спасибо!