Что стоит прокачивать накануне эры постпрограммирования?
Публичный постКак показывает практика, порой возникает необходимость менять используемые языки программирования, как перчатки: кардинально меняется задача, платформа или концепция в целом. Либо вовсе предыдущий язык "умирает" - морально или фактически.
Освоение новых ЯП - дело небыстрое, плюс как правило они эволюционируют, развиваются. То есть обычно стоит задача "догнать и перегнать". И вот трата времени на "догнать" (не говоря уже о "перегнать") выглядит не особо эффективной, причём наверное не мне одному.
К тому же повальная мода на нейросети даёт ощутимую надежду на скорое появление постпрограммирования. Как когда-то высокоуровневые ЯП "отодвинули" человека от ассемблера и железа, а позже фреймворки усугубили разрыв, нейросети имеют возможность "нарастить" на это всё добро ещё один слой абстракций и интерпретаций. И всё во имя снижения порога вхождения и увеличения эффективности и универсальности утилизации рабочего времени.
Так вот. Отбрасывая шутеечки и ответы в стиле "Учить Java никогда не поздно и выгодно", "А кто сказал, что на ассемблере уже не пишут?" и "Земля большая, программеры с устаревшими навыками всегда найдут себе применение" - что стоит прокачивать на пороге подобного постпрограммирования, как думаете?
Фундаментальные вещи в языках программирования не так часто меняются. Алгоритмы, методы сортировки, деревья и подобные фундаментальные знания на мой взгляд должны быть в приоритете.
Помимо этого как долгосрочный тренд это Soft Skills и желание разбираться не только в технических аспектах проекта, но и в бизнесе. Аля продуктовый программист с некоторыми знаниями продуктового менеджмента.
Ко мне относительно регулярно стучатся в личку разные люди, которые умеют делать математику для нейросеток и хотят получить из нее кусок кремния, но не знают, с чего начать. Понимание того, как работают куски кремния, может оказаться полезным в эпоху постпрограммирования, потому что все больше и больше функциональности сейчас переносится в спецвычислители в железе.
И, в более широком смысле, доступные в железе мощности общего назначения уже скоро упрутся в потолок, и будет полезным понимание сферы низкоуровневой оптимизации кода под железо, процессорных архитектур, компиляторов и всего такого.
Это полная противоположность "backend as a service" и "программированию без написания кода", но есть мнение, что ещё один слой упрощения работы кодеров за счёт увеличения требований к железу железо просто не вытянет.
Я думаю, никакого "пост-программирования" не будет. Да, будут появляться новые языки и парадигмы, новые инструменты и методики; но для кардинальных изменений нет никаких предпосылок.
Более того, я давно уже заметил такую штуку: каждый прорыв откатывает нас в каком-то смысле назад. Только мы вздохнули, что наконец у всех мощные десктопы и большие мониторы - хуяк, здравствуй, мобильная революция. Только привыкли работать с мощными инструментами - хуяк, привет, k8s и голанг, мы снова пишем мейкфайлы, C-подобный говнокод и баш-скрипты, снова срем логами в stdout. Мы вырвались из XML-ада Java только для того, чтобы очутиться в YAML-аду helm.
Это вечная спираль.
Политэкономия всему голова.
Инструменты вторичны, запрос общества - наше всё.
Я буду не столь оптимистичен и неросети немного перехайплены. Но и настоящее "программирование" умирает в среде энтепрайзов и прикладной разработки. Все эти круды, формочки, ворочанье jsonов, бизнес-аппы, финтех старатпы и прочая работа для IT-сантехников – это просто чудовищно. Надеюсь скоро все это минимизируется испльзованием backend-as-service решений, nocode, генераторами интерфейсов и прочими вещами, а для бизнес-логики хватит и AWS Lambda." С этим всем справятся продуктовые менеджеры, аналитки etc, без привлечения кодерков. "Настоящее программирование" останется как узкоспециализированная работа: мб системное программирование, embedded, какой-нибуь геймдев etc...
Только если это плюсы или ,например, какая-нибудь скала с cats, то да, тогда долго.
Я вот иногда мечтаю, что через лет этак 5-10 большая часть из нас может оказаться безработными и рынок прикладной разработки схлопнется. В лучшем случае можно попробвоать переквалифицироваться во что-нибудь смежное не связанное с разработкой. Главное не унывать и помнить, что жизнь прекрасна сама по себе, не важно кем ты работаешь, а важно с кем, и чтоб на жизнь хватало.
Ну а всё настоящее и важное, оно происходит за пределами наёмной работы, как хобби, пет проекты, собственные проекты или другие активности. Поэтому сказать, что прокачивать очень и очень сложно.
Попробую ответить с двух позиций.
I. Узкое понимание вопроса - про языки программирования
Рекомендую изучать языки, предлагающие новые концепции и идущие в сторону строгости. В этом смысле языки с динамической типизацией - тупик. Для тяп-ляп-уяк-впродакшн или прототипирования сойдёт, для построения сложных систем с 500к строк - уже нет. Слабое звено - всегда программист с кривыми руками. Чем больше работы и проверок перекладывается на компилятор, тем лучше всем - и бизнесу, и программерам. Пример старых языков с подобным подходом - сдохший Паскаль с очень строгим компилятором. Примеры новых строгих ЯП с новыми концепциями - Haskell и Rust. Первый - жемчужина функционального программирования, там обкатываются все новые идеи. Второй - низкоуровневое программирование, сопряженное с безопасной работой с памятью.
II. Широкое понимание вопроса - про программирование вообще
Освойте смежную профессиональную прикладную область, чтобы программирование было в этой области инструментом решения задач. В постмодерновом мире чистые программисты (кодеры) не нужны, их пучок за $100, гляньте на Индию и Юго-Восточную Азию. Люди за крохи готовы "войти в IT" и программировать. Конкуренция высокая, а качество никого не интересует, главное быстрее тяп-ляп-уяк-уяк.
Становитесь не просто программистом, а человеком, решаюшим проблемы.
😱 Комментарий удален его автором...