Домены arhivach.top и arhivach.site временно не функционируют! Используйте домен
ARHIVACH.XYZ.
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
Напишу очень краткое руководство, которое позволит понять, как в середине своей жизни стать хорошим специалистом и иметь по мировым меркам приличный доход. Мое руководство будет описывать определенное профессию - software engineer. Но его легко можно переложить на другие области знаний, цель та же - стать специалистом мирового уровня.
Руководство скорее подойдет молодым людям 17-20 лет, у которых еще все впереди, хотя при умении и желании можно и позже начать идти по этому пути. Сразу уточню, это не текст типа "как я в интернете заработал 1000 долларов в день", предстоит пройти длинный и не простой путь. Такой путь подходит далеко не всем, и моя цель скорее показать молодым, но упорным и смекалистым ребятам, у которых есть интерес к программированию что их ждет в будущем при правильно поставленным целях.
Начнем.
Хороших программистов очень мало. Более того, сильные программисты, с серьезными знаниями в computer science и нужны то, максимум в 5 процентах всех проектов. А может быть и в 1% всех проектов.
Именно из за непонимания этого факта и происходят холивары типа "Зачем идти в ВУЗ, вон у меня Коля друг закончил ПТУ и теперь программирует на Java и получает 100k". Все верно, чтобы программировать на Java на энтерприсе проектах не нужны специальные знания. И все это можно делать без серьезного образования.
Чтобы добиться цели, нужно в итоге попасть в итоге в 1% этих программистов и работать в том месте, где ваши важные знания очень нужны. Поверьте Google, Apple, Microsoft и прочие все время испытывают нехватку людей для сложных проектов, которых там предостаточно.
Это долгие путь, поэтому не бойтесь. Все будет происходить постепенно. Поэтому даже если ты сейчас 16-17 летний парень, живущий в мухосранске с мамкой, количество собственных денег у которого ни разу не переваливало за 10 тысяч рублей, и другие страны и иностранные компании тебя кажутся какой-то сказкой. Но у тебя есть много интереса и желание двигаться вперед, то не бойся, все будет происходить постепенно и все получится.
Про образование.
Тут решать вам. Особенно если вы живете не в Москве и Питере, и вам недоступны вузы, типа МГУ, то пользы скорее всего будет не так много. Но все равно это создаст вокруг вас общество из относительно умных людей, какие-то новые знакомства, плюс, чему то, да научат вас в вашем ВУЗЕ.
Дальше напишу примерный список курсов, которые вы должны выучить и примерно понимать, что про все это как минимум нужно представлять как все утроено.
Это не узнать за месяц, скорее список на несколько лет, и никто не мешает вам уже в процессе работы изучать его и подтягивать то, в чем не сильны.
Courera вам в помощь. Все это в том или ином виде есть там. Английский конечно обязателен, но это не страшно, если вы его плохо знаете, выучите в процессе, сначала придется ставить на паузу лекции, смотреть субтитры, лезть в переводчик, но более беглое понимание придет быстро. Еще раз - Английский обязателен, все информация серьезная в нашем мире на Английском, про русский забываем.
1.Операционные системы. Важный курс, будете понимать вообще из чего они устроены, поймете что unix, windows, хоть и отличаются для пользователя, но построены все равно примерно на одних принципах. Очень рекомендую книгу с динозаврами:
http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/0470128720
2.Алгоритмы. Пожалуй один из самых важных курсов. Есть книга Кормана, есть курсы на coursera, есть задачки на topcoder. Все это очень важно - структуры данных, сортировки, поиск, алгоритмы на строках, распределенные алгоритмы, динамическое программирование, рекурсии.
3.Сети. Вокруг интернет, важно понимать как работают все взаимодействия по сети. Возможно ваша профессия вас приведет туда, где вам нужно понимать это очень хорошо, и лезть куда-то ниже tcp/ip, понимать как работает маршрутизация, итд.
4.Параллельные вычисления, распределенные системы, многопоточность. Скорее на серьезной работе вам придется с этим работать. Конечно все это легче изучать в процессе работы, но желательно и общее представление иметь.
5. Статистика, машинное обучение, calculus, линейная алгебра, оптимизация.
Сейчас очень многие компании завязаны на сложную обработку данных. Этот список знаний тесно связан между собой. Поэтому если вы будете заниматься машинным обучением, то это все тоже пригодиться. Не факт, что вы будете напрямую им заниматься, но как минимум нужно четко понимать, где и как его можно применить. Судя по тенденциям последних лет - скорее всего будете.
Я сознательно не включил языки, потому что язык это всего лишь средство. Пожалуй легче всего начать с Java, потому что работы на этом языке много. Но опять же, изучать ее стоит так: надо очень хорошо знать java core, все особенности языка, наследования, устройство памяти, многопоточность(happens-before, ага), как устроены внутри коллекции(тот самый курс алгоритмов в помощь). Всякие фреймворки уже не так важны, и это вторично.
Про работу. Какой выбрать карьерный путь.
Все зависит от стартовых данных. Если вы в Москве и учитесь в МГУ, то скорее вы все и без меня знаете. Но для крупных городов путь такой, крупная инженерная компания: яндекс, mail.ru, итд,(хотья стажером вначале, хоть разносчиком чая) там набираетесь опыта, понимаете, какие знания и направления нужны именно сейчас, дальше уже крупная международная компания. Как совет - работа, только в главном офисе, все дополнительный офисы это не то, там вы не будете не совсем в теме. Поэтому, если Яндекса - то Москва, Google - mountain view, MS - Редмонд.
Если вы в небольшом городе, то в любом случае рано или поздно нужно будет переезжать в большой. Возможно, пока еще учитесь в университете, то можно попрограммировать на java в какой-нибудь конторе типа epam, net-cracker, итд, которых сейчас много в регионах. Далее, все равно нужно будет уходить оттуда, потому что работа там другого толка и она не приблизит вас к тому желаемому 1%. Запомните, поменьше концентрации на знании всяких фреймворков и побольше на опыте решения сложных задач. Яндекс, Mail.ru в России вам могут дать это, но опять же, все зависит от отдела к отделу. Есть места, где и просто нужно фигачить код - вам не туда. Итого путь примерно такой - enterprise разработка, чтобы разогнаться, потом серьезная компания в России, где есть сложные задачи, потом запад.
Теперь про обещанный миллион. Он придет не сразу. Но когда вы станете специалистом, которому открыты все двери в топопые компании, и немного продвинетесь вверх(Это не означает менеджерские должности, это означает что вы будете отвечать за какой-то отдельный небольшой сервис и проект), то ваша зарплата вместе со всеми бонусами и акциями будет примерно 300-500 тысяч долларов в год. Простые инженеры получают там 150-200.
Пруфы?
http://www.glassdoor.com/Salary/Google-Staff-Software-Engineer-Salaries-E9079_D_KO7,30.htm
http://www.glassdoor.com/Salary/Google-Senior-Staff-Software-Engineer-Salaries-E9079_D_KO7,37.htm
Я написал очень кратко и возможно спутано. Сочинения не моя специализация. Если что-то хотите узнать - задавайте вопросы.