Итак, какой?
Я рекомендую « никакого конкретного ».
Неважно, начинаете ли вы с С++, Java, Python, JavaScript или любого другого языка. Изучение нового языка не займет много времени, и это не должно быть вашей целью №1
Языки программирования — это средства для достижения цели (вот я снова это сказал!), и на практике нужно постоянно переключаться на один или другой, который наиболее подходящий для выполнение конкретного задания.
Я начал свой путь с C++ в старшей школе, много времени провел за изучением Javascript в университете. Моя работа в Microsoft требовала, чтобы я много работал с C#/.Net и Typescript, и когда я перешел на Google, я начал работать над приложением Android Camera, поэтому я начал работать с Java. Вскоре я переключился на вычислительную часть камеры, и сейчас я пишу гораздо больше на C++ (производственный код) и Python для прототипирования.
И на протяжении всего этого пути стоимость изучения нового языка никогда не была высокой.
Я должен признать, что со временем мы создали разные «виды» языков программирования с точки зрения того, как они используются. Несколько языков используются исключительно для разметки, таких как HTML или XML, в то время как другие предназначены исключительно для сценариев, таких как сценарии оболочки или сценарии bat, некоторые из них функциональны по своей природе, другие - нет, и так далее.
При переключении с одного «вида» на другой могут потребоваться определенные затраты на обучение. Наличие фундаментального понимания этих «видов» сделает этот барьер для изучения нового языка очень тонким.
Подождите… Тогда на чем мы сосредоточимся?
По моему честному мнению, самый важный навык, над которым нужно работать, — это способность решать любую поставленную проблему.
- Если это должно быть веб-приложение, можете ли вы его создать?
- У вас есть приложение для Android, можете ли вы улучшить производительность?
- У вас есть проблема, которую потенциально можно решить с помощью обученной нейронной сети — можете ли вы пойти дальше и сделать все это?
Даже если вы «никогда» не работали над этим раньше! И какой бы язык программирования ни потребовался, чтобы это сделать!
Так что сосредоточьтесь на изучении новых технологий, попытайтесь глубже изучить концепции, которые выглядят как магия, в начале попытайтесь исследовать множество разных жанров, пока все это не начнет выглядеть как волшебство. В конце концов, выберите то, что вам действительно нравится, и углубляйсь!
Хорошо, но получить конкретные рекомендации было бы лучше!
У меня есть разные рекомендации для программистов на разных этапах их карьеры.
Если вы только начинаете изучать программирование
Я бы порекомендовал выбрать технологию, над которой вы хотите работать — это может быть веб, это может быть мобильная версия (Android/iOS), это может быть разработка игр, это может быть разработка других приложений, это может быть обучение моделей машинного обучения, построение настольных приложений и так далее.
Но суть в том, чтобы подобрать технологию и выучить соответствующие языки. Учитесь, создавая случайное программное обеспечение, если это возможно, и хорошо проводите за ним время. Если возможно, продолжайте задаваться вопросом, как на самом деле работает различная магия, которую вы видите.
В конце концов, начните копаться в более фундаментальных концепциях, которые абстрагируются используемыми вами библиотеками, такими как параллелизм или многопоточность, базы данных, рендеринг графики, обработка изображений, работа в сети и т. д.
Видите ли, программа, которую мы пишем на любом языке, либо напрямую компилируется в инструкции по сборке, либо в промежуточные байт-коды, которые в конечном итоге снова компилируются в инструкции по сборке для выполнения аппаратным обеспечением. Если вы примете этот факт, синтаксис разных языков станет очень похожим.
Определенное требование, скажем, «Увеличить каждое значение массива на 1», может быть обработано с помощью разных синтаксисов:
В Python:
y = [i + 1 for i in x] ## or for i in range(0, len(x)): x[i] = x[i] + 1
В JavaScript:
for (var i = 0; i < x.length; ++i) x[i]++; // Or var y = x.map(val => ++val); // Or var y = Array.from(x, val => ++val);
В Go:
for i:= range x { x[i]++ }
Все это компилируется во что-то вроде:
increment(int*, int): cmp w1, 0 ble .L1 mov x2, x0 add x1, x0, w1, sxtw 2 .L3: ldr w0, [x2] add w0, w0, 1 str w0, [x2], 4 cmp x2, x1 bne .L3 .L1: ret
Что более интересно здесь, так это то, что некоторые из них приводят к копированию массива, а другие нет, и я бы рекомендовал сосредоточиться на изучении этих типов проблем и их влиянии на программу.
Если вы опытны и владеете определенными языками программирования, но чувствуете, что многое упускаете
Я бы по-прежнему рекомендовал то же самое — сделайте шаг назад и подумайте, какие формулировки проблем вас волнуют. Затем подумайте, какие новые средства для достижения цели вам необходимо изучить.
Например, во время работы над приложением «Камера» у меня появилась возможность поработать над «Ночным режимом» в приложении «Камера», который требует от нас захвата серии изображений и надежного их объединения для получения хорошо экспонированного изображения с низким уровнем шума. Это очень затратно в вычислительном отношении, и нам нужно, чтобы наши алгоритмы работали на оборудовании с ограниченными ресурсами в рамках определенного бюджета задержки.
Для меня это была очень захватывающая постановка задачи, которая потребовала от меня повторного изучения современного C++, концепций обработки изображений и т. д.
Но это было так весело, что усилия, потраченные на обучение, не казались помехой. Я бы порекомендовал найти такие направления и начать учиться, чего бы это ни стоило.
Итог: не стоить ограничивать себя поиском только одного языка программирования. Учите все, что нужно для выполнения поставленной задачи
0 комментариев
Добавить комментарий