Лет 5 назад на Хабре была модная тема "я недопонял Functional Programming и сейчас вам объясню на примере говна и палок КАК ОНО НА САМОМ ДЕЛЕ". Сейчас эта тенденция добралась до С/С++.
> И здесь мы сталкиваемся с первой значимой путаницей между определениями и их интерпретацией. Дело в том что на самом деле язык программирования C является языком высокого уровня, а не низкого как многие его считают. > Почему же так? На самом деле потому что любой язык программирования является автоматически языком высокого уровня, так как сильно абстрагирует нас от вещей которые происходит на самом деле под капотом.
На самом деле надо пользоваться устоявшимися терминами. И если в мире языков программирования С/С++ называют низкоуровневым - то это соглашение.
А в качестве "общего развития" можно посмотреть на иерархию абстракций (в любом приличном институте дают). Низкоуровневые языки дают возможность взаимодействовать с ОС. Более высокоуровневые - начинают содержать библиотеки сложных алгоритмов или DSL-ориентированные имплементации отдельных задач уровня приложения.
Нам не надо бороться за высокое качество итогового продукта как целого, а надо разбить техпроцесс на такие этапы, чтобы качество на каждом было легче достижимо среднестатистическим бухающим михалычем, измеримо, предсказуемо.
Чем дальше вы пишите - тем страннее это выглядит. Именно качество продукта как целого интересует заказчика. А насколько хорошо сделан этап №10016 - его вообще не интересует. При этом качество целого - не сводится к качеству составных частей "на конвейре".
Не исключаю, что это корявые формулировки и какое-то непонимание.
Статья очень хорошая для тех, кто хочет вкатиться в IT, чтобы почитать "как оно".
Со своей колокольни, прочитав ваши мучения по изучению подходов - я бы сказал что у вас подход к работе не программистский. Те же паттерны (да то же ООО DRY / SOLID) - их не надо зубрить. Надо понимать "какие у нас есть проблемы", "как они в принципе решаются" и дальше - запоминать ли 23 частных решения из этих общих подходов - это дело уже ваше.
Страшная тайна: большинство успешных бизнесов‑проектов‑стартапов — велосипед. Но сделаный лучше конкурента, тем и ценится.
Всё так хорошо начиналось, но в этом месте вы сломались. Большинство успешных бизнесов 1. найти нишу 2. Сделат свою "раму от велосипеда" - которая даст ключевое преимущество 3. Всё остальное - сделать из готовых компонент, чтобы сесть на "существующую инфраструктуру".
То есть говоря вашим языком метафор: "большинство успешных бизнесов - это удобные красивые креслица в стандартном РЖД-шном вагоне метро". Объём завелосипеженого vs объём стандартного взятого просто даже близко не сравним.
Вот приходите вы в больницу, в первый раз (замечу в хорошую частную клинику). Вам выкатывают типовой договор на оказание медицинских услуга на 10 листах 10м шрифтом. После чего у 99.9% людей ровно 2 опции. - не подписывать, и уйти с приёма. - Подписать по-существу не глядя.
В типовом договоре содержатся, в том числе фразы: "мне было разъяснено и мною понято ..... " - разумеется девочки не ресепшне ничего объяснить, а тем более объяснить доступным для неспециалиста языком, не могут.
Ну и так далее.
То есть по существу только варианты "типовой договор по форме 2" (типа ЗоЗПП) - спасают потребителя от того, что он всюду и всегда не прав.
теплоёмкость, скажем металлов, очевидно не линейна с изменением температуры. гугл говорит, что как правило увеличивается - ок, поверим ему.
Вот в этом и сложность. Абсолютно чёрного тела, чтобы калибровать по его излучению, у нас нет. А смешинвание ломается на всяких эффектах типа "отсутствия достаточно длинной шкалы" и "нелинейности теплоёмкости".
Т.е. составить шкалу-то можно, но это не так просто сдлать как поначалу кажется.
Отдельный плюс за метод "ревью плохого кода". Один из немногих рабочих методов для hard-собеседования middle+ (ну кроме "поговорить по душам о прочих проектах").
По поводу "не может объяснять даже простые вещи" - тут следует уточнить. Иногда простые вещи объяснять сложнее всего - надо убедиться, что это это не тот случай (пример условный - буква S в SOLID ппц как сложно).
Если ваши слова читать буквально - то вам в Хэннеси-Паттерсон Computer Architecture: A Quantitative Approach (в принципе хорошая книга ближе к начальному уровню CS по архитектуре компьютеров)
Вы уверены, что хотите именно про микроархитектуру, а не про то, как правильно бэнчмаркать и оптимизировать программы?
П.С. Если что - я почти уверен, что по ссылке не про аппаратный кэш ;)
Проблема в том, что обыватели слабо различают (и как следствие путают) прогресс в интеллекте моделей от важной - но не являющейся прогрессом в интеллекте, оптимизации моделей перед инференсом.
Часто обывателей смущает то, что оптимизации бывают как чисто технические (квантизация, прунинг, дистилляция, спец-форматы ...) так и содержательные, например замена архитектуры на более лёгкую.
Дело в том, что множества "супер-компактных" моделей и "супер-умных" мало пересекаются и подходы и оптимизации в первых ничего не говорят о прогрессе во вторых.
Кажется вы придумали соломенное чучело и его же победили.
Неразумно - пытаться работать за деньги имея склонность и талант к профессии ниже среднего в ней. А долго заниматься таким неразумным делом - плохо. Начиная с "выгорания", заканчивая излишними расходами как для самого человека, так и для всего общества.
И да описанное выше - это куда ближе к "Милтону Фридману" чем к СССР.
Стажировки это прекрасно, но после месяца-другого оттуда берут на постоянку одного человека из десятков.
Ну реально же не может такого быть. (ну вот мы работаем со студентами и стараемся на входе отбирать так, чтобы конверсия была как можно выше).
Нормально провзаимодействовать со студентом (нагружая его норм работой и контролируя и понимая "толковый \ не толковый") - ну это час-в-день.
30(это минимум от "десятки") студентов - это полное время 3-4 миддл+/ синьёр, на 1.5 месяца. Вам не кажется, что дороговато для найма одного студента получается?
А на расте вообще кто-то пишет (в промышленных количествах)? У меня такое ощущение, что Rust существует для того, чтобы человек наклеил себе плашечку в профиль "пишу на расте".
Могу подтвердить ваши слова. На предпоследнем месте работы 2 года назад - набирал людей.
Те кандидаты, которые идут после курсов - их можно просто не рассматривать (такое указание и дали HR через 2 недели и пару дюжин отсобеседованных вкатунов).
А вот самоучки - пособеседовал двоих - реально порадовали по уровню понимания что происходит.
С одной стороны довольно очевидно, что у ИИ пока нет глубины понимания некоторых вопросов - грубо говоря у человека число уровней абстракции больше (*). С другой - ИИ уже что-то может. С другой - мы совершенно не представляем себе как с ростом "вычислительной мощности" растёт "возможности AI стать General AI". Возможно эта функция настолько слабо растущая, что всего нашего кремния (вплоть до A2 к 2037 году) не хватит для GAI (**)
А может быть ещё 5 лет - и сетки будут GAI и обгонять человека.
Тут вопрос в том, что мы просто гадаем на кофейной гуще.
*) Проще всего этот тезис показать на картинках, где очевидно, что у ИИ просто нет абстракции 3-мерного мира, движения тел в нём и проекции трёхмерного мира на двумерную плоскость.
В других областях сложнее - но в целом ИИ гораздо ближе к "заучившему учебник студенту" чем к "сообразительному студенту" - паттерны ошибок те же.
**) для простоты можно считать, что скорость "умножения матриц" будет расти пропорционально техпроцессу.
Однако мы точно упрёмся не в неё, а в скорость и troughput передачи данных. При этом что важнее - скорость или throughput - зависит от архитектуры нейросети ;)
Во вторых даже "в боле-менее стационарной" (в которой мы вероятно не живём) - именно ваше утверждение требует доказательства: не существует орбит небесных тел, которые никогда не упадут на планету или звезду.
без кэша - одно только row activation (чтение данных из конденсаторов в регистры) занимает 10наносекунд по порядку величины, то есть 30-50 тактов, при промахе в активную страницу DDR (* это не та страница, что в виртуальной памяти).
С кэшами и пересылками - порядка 100-200 тактов получается, зависит от.
Но радоваться не тому, что у вас зарплата растет, а тому, что у других падает - это честно говоря такое очень странное отношение к жизни.
Я, честно говоря не очень понимаю откуда появилась сентенция про "радоваться"? Это как сказать, что объясняющий что бывают сейсмоопасные регионы "радуется жертвам землетрясений".
Ну и да при средней ЗП 60к - условные 300к миддл-фронтэндеров в любом случае "перегретая отрасль". Коррекция ЗП в разумном соответствии с экономическими теориями - просто обязана была наступить.
В рыночной экономике это означает, что "предпринимательский навык" в России ценится выше (в фактическом вознаграждении), чем в остальном мире. То есть буквально "у нас не хватает предпринимателей, поэтому конкуренция между теми, что есть низкая, поэтому они получают повышенные доходы...". хм....
============================ Давайте прикинем на пальцах:
44% в России, против 55% (как средние между Германией-Японией и Норвегией). Предположим, что нет никаких "страновых особенностей" кроме ресурсных, а ресурсные мы уже учли взяв среднее между Германией и Норвегией (супер-ресурсная экономика).
Это значит, что ЗП можно поднять на 20%. Не мало, но и не разбежишься, мягко говоря.
Лет 5 назад на Хабре была модная тема "я недопонял Functional Programming и сейчас вам объясню на примере говна и палок КАК ОНО НА САМОМ ДЕЛЕ".
Сейчас эта тенденция добралась до С/С++.
> И здесь мы сталкиваемся с первой значимой путаницей между определениями и их интерпретацией. Дело в том что на самом деле язык программирования C является языком высокого уровня, а не низкого как многие его считают.
> Почему же так? На самом деле потому что любой язык программирования является автоматически языком высокого уровня, так как сильно абстрагирует нас от вещей которые происходит на самом деле под капотом.
На самом деле надо пользоваться устоявшимися терминами. И если в мире языков программирования С/С++ называют низкоуровневым - то это соглашение.
А в качестве "общего развития" можно посмотреть на иерархию абстракций (в любом приличном институте дают).
Низкоуровневые языки дают возможность взаимодействовать с ОС.
Более высокоуровневые - начинают содержать библиотеки сложных алгоритмов или DSL-ориентированные имплементации отдельных задач уровня приложения.
Чем дальше вы пишите - тем страннее это выглядит.
Именно качество продукта как целого интересует заказчика. А насколько хорошо сделан этап №10016 - его вообще не интересует.
При этом качество целого - не сводится к качеству составных частей "на конвейре".
Не исключаю, что это корявые формулировки и какое-то непонимание.
Статья очень хорошая для тех, кто хочет вкатиться в IT, чтобы почитать "как оно".
Со своей колокольни, прочитав ваши мучения по изучению подходов - я бы сказал что у вас подход к работе не программистский.
Те же паттерны (да то же ООО DRY / SOLID) - их не надо зубрить.
Надо понимать "какие у нас есть проблемы", "как они в принципе решаются" и дальше - запоминать ли 23 частных решения из этих общих подходов - это дело уже ваше.
Всё так хорошо начиналось, но в этом месте вы сломались.
Большинство успешных бизнесов
1. найти нишу
2. Сделат свою "раму от велосипеда" - которая даст ключевое преимущество
3. Всё остальное - сделать из готовых компонент, чтобы сесть на "существующую инфраструктуру".
То есть говоря вашим языком метафор: "большинство успешных бизнесов - это удобные красивые креслица в стандартном РЖД-шном вагоне метро".
Объём завелосипеженого vs объём стандартного взятого просто даже близко не сравним.
Вообще ничего не поменяет.
Вот приходите вы в больницу, в первый раз (замечу в хорошую частную клинику).
Вам выкатывают типовой договор на оказание медицинских услуга на 10 листах 10м шрифтом. После чего у 99.9% людей ровно 2 опции.
- не подписывать, и уйти с приёма.
- Подписать по-существу не глядя.
В типовом договоре содержатся, в том числе фразы: "мне было разъяснено и мною понято ..... " - разумеется девочки не ресепшне ничего объяснить, а тем более объяснить доступным для неспециалиста языком, не могут.
Ну и так далее.
То есть по существу только варианты "типовой договор по форме 2" (типа ЗоЗПП) - спасают потребителя от того, что он всюду и всегда не прав.
теплоёмкость, скажем металлов, очевидно не линейна с изменением температуры.
гугл говорит, что как правило увеличивается - ок, поверим ему.
Вот в этом и сложность.
Абсолютно чёрного тела, чтобы калибровать по его излучению, у нас нет.
А смешинвание ломается на всяких эффектах типа "отсутствия достаточно длинной шкалы" и "нелинейности теплоёмкости".
Т.е. составить шкалу-то можно, но это не так просто сдлать как поначалу кажется.
Статья классная. Чувствуется системный подход.
Отдельный плюс за метод "ревью плохого кода". Один из немногих рабочих методов для hard-собеседования middle+ (ну кроме "поговорить по душам о прочих проектах").
По поводу "не может объяснять даже простые вещи" - тут следует уточнить. Иногда простые вещи объяснять сложнее всего - надо убедиться, что это это не тот случай (пример условный - буква S в SOLID ппц как сложно).
Если ваши слова читать буквально - то вам в Хэннеси-Паттерсон
Computer Architecture: A Quantitative Approach (в принципе хорошая книга ближе к начальному уровню CS по архитектуре компьютеров)
Вы уверены, что хотите именно про микроархитектуру, а не про то, как правильно бэнчмаркать и оптимизировать программы?
П.С.
Если что - я почти уверен, что по ссылке не про аппаратный кэш ;)
Проблема в том, что обыватели слабо различают (и как следствие путают) прогресс в интеллекте моделей от важной - но не являющейся прогрессом в интеллекте, оптимизации моделей перед инференсом.
Часто обывателей смущает то, что оптимизации бывают как чисто технические (квантизация, прунинг, дистилляция, спец-форматы ...) так и содержательные, например замена архитектуры на более лёгкую.
Дело в том, что множества "супер-компактных" моделей и "супер-умных" мало пересекаются и подходы и оптимизации в первых ничего не говорят о прогрессе во вторых.
Кажется вы придумали соломенное чучело и его же победили.
Неразумно - пытаться работать за деньги имея склонность и талант к профессии ниже среднего в ней.
А долго заниматься таким неразумным делом - плохо. Начиная с "выгорания", заканчивая излишними расходами как для самого человека, так и для всего общества.
И да описанное выше - это куда ближе к "Милтону Фридману" чем к СССР.
Ну реально же не может такого быть.
(ну вот мы работаем со студентами и стараемся на входе отбирать так, чтобы конверсия была как можно выше).
Нормально провзаимодействовать со студентом (нагружая его норм работой и контролируя и понимая "толковый \ не толковый") - ну это час-в-день.
30(это минимум от "десятки") студентов - это полное время 3-4 миддл+/ синьёр, на 1.5 месяца.
Вам не кажется, что дороговато для найма одного студента получается?
А на расте вообще кто-то пишет (в промышленных количествах)?
У меня такое ощущение, что Rust существует для того, чтобы человек наклеил себе плашечку в профиль "пишу на расте".
Простите а откуда у вас такие данные ;)
Могу подтвердить ваши слова.
На предпоследнем месте работы 2 года назад - набирал людей.
Те кандидаты, которые идут после курсов - их можно просто не рассматривать (такое указание и дали HR через 2 недели и пару дюжин отсобеседованных вкатунов).
А вот самоучки - пособеседовал двоих - реально порадовали по уровню понимания что происходит.
С одной стороны довольно очевидно, что у ИИ пока нет глубины понимания некоторых вопросов - грубо говоря у человека число уровней абстракции больше (*).
С другой - ИИ уже что-то может.
С другой - мы совершенно не представляем себе как с ростом "вычислительной мощности" растёт "возможности AI стать General AI". Возможно эта функция настолько слабо растущая, что всего нашего кремния (вплоть до A2 к 2037 году) не хватит для GAI (**)
А может быть ещё 5 лет - и сетки будут GAI и обгонять человека.
Тут вопрос в том, что мы просто гадаем на кофейной гуще.
*) Проще всего этот тезис показать на картинках, где очевидно, что у ИИ просто нет абстракции 3-мерного мира, движения тел в нём и проекции трёхмерного мира на двумерную плоскость.
В других областях сложнее - но в целом ИИ гораздо ближе к "заучившему учебник студенту" чем к "сообразительному студенту" - паттерны ошибок те же.
**) для простоты можно считать, что скорость "умножения матриц" будет расти пропорционально техпроцессу.
Однако мы точно упрёмся не в неё, а в скорость и troughput передачи данных. При этом что важнее - скорость или throughput - зависит от архитектуры нейросети ;)
Вовсе необязательно.
Во-первых https://ru.wikipedia.org/wiki/Большой_разрыв.
Во вторых даже "в боле-менее стационарной" (в которой мы вероятно не живём) - именно ваше утверждение требует доказательства: не существует орбит небесных тел, которые никогда не упадут на планету или звезду.
На земле есть сейсмоопасные регионы, поверьте ;)
без кэша - одно только row activation (чтение данных из конденсаторов в регистры) занимает 10наносекунд по порядку величины, то есть 30-50 тактов, при промахе в активную страницу DDR (* это не та страница, что в виртуальной памяти).
С кэшами и пересылками - порядка 100-200 тактов получается, зависит от.
Я, честно говоря не очень понимаю откуда появилась сентенция про "радоваться"?
Это как сказать, что объясняющий что бывают сейсмоопасные регионы "радуется жертвам землетрясений".
Ну и да при средней ЗП 60к - условные 300к миддл-фронтэндеров в любом случае "перегретая отрасль". Коррекция ЗП в разумном соответствии с экономическими теориями - просто обязана была наступить.
Что не так-то?
В рыночной экономике это означает, что "предпринимательский навык" в России ценится выше (в фактическом вознаграждении), чем в остальном мире. То есть буквально "у нас не хватает предпринимателей, поэтому конкуренция между теми, что есть низкая, поэтому они получают повышенные доходы...".
хм....
============================
Давайте прикинем на пальцах:
44% в России, против 55% (как средние между Германией-Японией и Норвегией).
Предположим, что нет никаких "страновых особенностей" кроме ресурсных, а ресурсные мы уже учли взяв среднее между Германией и Норвегией (супер-ресурсная экономика).
Это значит, что ЗП можно поднять на 20%.
Не мало, но и не разбежишься, мягко говоря.