Когда-то в давно я занимался олимпиадным программированием. Побеждал на школьных олимпиадах, поступил в университет без экзаменов, выступал за вуз (тут правда без особых успехов). С тех пор утекло много воды, почти двадцать лет я после этого занимался промышленным программированием, тимлидил команды. И вот, интереса ради решил тряхнуть стариной, зарегистрировался на https://leetcode.com/ и порешал задачки. Честно скажу, было страшно: возраст все-таки, мозги стареют, костенеют. И с удивлением обнаружил, что я сейчас себя 20-летного в олимпиадном программировании бы обыграл по полной. У меня 20-летного бы просто не было шанса ни единого. Раньше я как задачи решал: писал много лапша-кода, потом долго его отлаживал, потом время заканчивалось. Сейчас я думаю в более высокоуровневых абстракциях и код начинает работать почти сразу, на задачу много времени не трачу. В общем, возраст в программировании не так уж и решает даже в алгоритмических задачах, не говоря уже об архитектуре. Может быть, конечно, если касаться условно "спорта высших достижений", то там молодой возраст может дать какое-то преимущество, не знаю. Я говорю про обычного программиста, то есть себя.
Здравствуйте, mrTwister, Вы писали:
T>В общем, возраст в программировании не так уж и решает даже в алгоритмических задачах, не говоря уже об архитектуре.
Мне становится лень, очень лень изучать новые фреймворки и переписывать под них код. И поймал себя на мысли, что хочется всё оставить по старому, лишь только сменить фасад. Но иногда это очень плохо, надо именно что следовать рекомендациям от авторов, чтобы добиться максимума.
Здравствуйте, Nuzhny, Вы писали:
N>изучать новые фреймворки и переписывать под них код.
А насколько часто нынче встречаются не фреймворки, куда нужно вставлять свой "вторичный" (то есть, вызываемый из фреймворка, который сам всем рулит) код, а библиотеки, функциональность которых можно гибко задействовать из своего "первичного" кода (с возможностью организации обратных вызовов, само собой)?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>А насколько часто нынче встречаются не фреймворки, куда нужно вставлять свой "вторичный" (то есть, вызываемый из фреймворка, который сам всем рулит) код, а библиотеки, функциональность которых можно гибко задействовать из своего "первичного" кода (с возможностью организации обратных вызовов, само собой)?
Кажется, что в нейросетях сейчас рулят исключительно фреймворк, где ты лишь собираешь из кирпичиков свою архитектуру и как-то жонглирует процессом обучения (TensorFlow, PyTorch, Keras, Darknet).
Потом, когда дело доходит до продакшена, то становится поразнообразней. Тут уже C++ вместо Питона, можно всячески оптимизировать пайплайн, параллелить, что-то придумывать. Потом код вырастает до того, что поддерживает выполнение на куче устройств и куче разных библиотек. Тут случается чуть ли не комбинаторный взрыв: Windows или Linux, x86 или ARM, CPU или GPU (OpenCL, CUDA, TensorRT). Библиотеки: TensorFlow, TensorRT, OpenVINO, OpenCV, Darknet. Многие умеют разные комбинации, что-то где-то быстрее, а где-то нет. Кому-то хватает видеопамяти, а другим нет.
И это я ещё для мобильных не пишу и для спецвычислителей. Потом ещё думать, откуда видео и картинки получаются. Можно видео декодировать на разных устройствах разными декодерами. Иногда выгоднее запускать ffmpeg с декодером на CUDA, чтобы кадры сразу копировались во входной тензор, оставаясь в видеопамяти. Иногда нет, лучше аппаратным декодером. Как-то много телодвижений.
Здравствуйте, mrTwister, Вы писали:
T>Когда-то в давно я занимался олимпиадным программированием.
Наверно повезло с работой. У меня та же фигня, но когда 20 лет спустя взялся за leetcode — освоился не сразу, hard задачки шли со скрипом. Пришлось освежать знания в разных местах.
Зато выписал себе детских журналов с олимпиадными задачками и "отжимаюсь" там. Разнообразие оч. помогает.