Как побороть неопределенность в выборе языка?
Я довольно недавно программирую (ну уже лет так 5 как)
Большее время программировал на одном языке, предназначенном для написания разных скриптов для игр-steam.
Относительно недавно понял, что перспективную жизнь на этом не слепишь и тут встал в ступор.
Какой язык выбрать..
Ну окей, попробовал Java. Не затянул.
Перешел к WEB, тут признаться было много интересней, так как привлекало многообразие, хочешь сайт, хочешь десктопное приложение с красивым интерфейсом.
Не спорю, с Java можно творить не менее интересные фичи, но до этого как-то не дошел.
Но все же, так ничего и не зятунуло хотя-бы на пару лет.
У меня есть пару хороших идей для Android и Steam платформы, которые действительно кажутся интересными, да и с друзьями советовался, они дали такой-же ответ. Но тут опять встал вопрос, что выбрать?
С другой стороны Java, на котором пиши, что хочешь, для той и той платформы
С другой C#, у которого есть Unity, на котором сейчас пишутся многие топовые игры.
Но проблема в том, что я начинаю бегать из одного языка в другой. Из Java в C#, из C# в Java.
Иногда мне кажется, что данный круговорот может закончиться тем, что меня совсем перестанет интересовать программирование. Хотя в это сложно поверить, так как оно для меня уже нечто большее, чем хорошая отрасль.
Я можно сказать, им живу, я вижу его там, где многие не видят. Я пытаюсь в каждой повседневной вещи в жизни просчитать алгоритм. Но иногда погружаюсь в депрессию, так как знаю, что некоторые мои товарищи уже определились с областью, а я будто брошанный.
Я не спорю со словами "Тебе клеймом один язык написан по жизни или что? У тебя еще много времени, выучи несколько языков". Но как определиться? Я не задаю банальный вопрос - "Какой язык выбрать?". Я хочу узнать у вас, как вы в свое время боролись с данным выбором?
Я всегда следовал совету авторов всемирно известного бестселлера "Программист-прагматик" - Эндрю Ханта и Дэвида Томаса, которые пишут: «Изучайте по крайней мере один новый язык ежегодно. Разные языки решают одни и те же проблемы разными способами. Изучив несколько разных подходов, вы сможете расширить свой кругозор и не погрязнуть в рутине.» А перепробовав многое, легко определиться с собственными вкусами и предрасположенностями.
Томаса, которые пишут: «Изучайте по крайней мере один новый язык ежегодно.
Еще лучше, если это будет язык с совсем иной парадигмой, например Haskell, lisp, lua, Rust и.т.д. Учить С-подобные языки тем, кто знает с-подобный язык особого смысла нет, разве что ради экосистемы.
Лично я с выбором не боролся, потому что выбор изначально пал на World Wide WTF: начал с обычного PHP и плыл себе спокойно. Потом, когда я органически из него вырос, перешёл на Python для своих личных нужд и всяких чат-ботов, а там и Django подтянулся. И вот когда я уже знал кое-что о работе с кодом — смог перейти на Golang как быстрый, практичный и чрезвычайно сложный для отстреливания ног язык. А там уже подтянулись общие знания архитектуры приложений, так что как-то я стал полноценным разработчиком.
И уже сильно позже, когда появилась необходимость перейти на фронтенд, стал рассматривать разные языки, потому что чистый JS ну ни в какие ворота. А с высоты полученного опыта выбрать условный TypeScript для меня труда не составило.
Хотя, конечно, я пытался что-то писать на C++, Java и даже Haskell, но чисто ради развлечения. В общем и целом, на изучение всего, с чем я не работаю в настоящий момент, я потратил не меньше 10%, а то и все 25% от времени на изучение общего стека технологий, включая учебные проекты на тех же PHP/Python. Так что учиться новым языкам не сложно, сложно при этом поставить себе цель стать программистом. Обезьян и так полно.
Какую из перечисленных целей Вы преследуете на данном этапе?
1. Разрабатывать сейчас для себя и кросс-платформенно
2. Разрабатывать для других (брать заказы) за хорошие деньги
3. Разрабатывать на наиболее перспективном (в ближайшем будущем) языке, не обращая внимания на размер комьюнити, качество документации и количество заказов на этом языке.
Какой тип проекта планируется разработать?
1. Игра (клиент+сервер)
2. Системное серверное ПО
3. Системное клиентское ПО
4. Серверное ПО: интернет-сервис/web-сервис/web-сайт
5. Клиентское ПО: web-клиент/мобильный клиент/чат/etc.
Для каких типов платформ?
1. Мобильные
2. Стационарные
3. Игровые
Что нужно будет применять при разработке?
1. Аналитика
2. BigData
3. AI
4. Лингвистика
5....
Это базовые вопросы, которые помогут определиться с выбором языка.
Я бы нашёл все "ЗА"/"ПРОТИВ", проанализировав разные кросс-платформенные "движки" и выбрал бы исходя из максимального соответствия наших возможностей (моих знаний и нужных мне возможностей "движка") и перечисленных выше критериев.