Metaprogramming
614 subscribers
103 photos
1 video
156 links
μετά- «между, после, через» (греч.)

Жизнь программиста за пределами программирования: алгоритмы, психология, инвестиции, иное.
Download Telegram
Channel created
Почему НЕ надо становиться программистом. Из каждого утюга пишут про то, как классно быть программистом (автор - конечно, один из таких "утюгов"), для разнообразия напишем, почему (новичку) не надо становиться программистом:

1. Недостаток программистов - это миф. На самом деле существует недостаток только квалифицированных программистов. Чтобы стать квалифицированным программистом надо вложить время (и, зачастую, деньги) для первичного обучения + получить год-два-три опыта работы. Поиск первой (зачастую, и второй) вакансии - индивидуальный многошаговый квест с единственным верным решением, а не конвейерным процессом отбора выгодных вакансий.

2. Высокие зарплаты - это миф. Высокие зарплаты только у квалифицированных программистов (см. выше). Первый год (два, три) зарплата взрослого человека в любой новой профессии (и особенно в программировании) будет значительно ниже, чем в уже полученной. А ещё ведь семья, дети, ипотека...

3. Программирование - творческая работа. "Творческая работа" это не рекламный лозунг, а ругательное словосочетание. Это значит, что задачи и сроки всегда не конкретны; заказчик (начальник) никогда не понимает, чем вы занимаетесь (и терроризирует за это вас - в независимости от того, входит ли в ваши формальные обязанности объяснять ему содержание вашей работы или нет); периоды редкого вдохновения и "потока" чередуются с перманентным состоянием на грани профессионального выгорания.

4. Программирование - это техническая работа. Обдумывание формальных концепций, написание десятков и сотен строк кода ежедневно, разбор (отладка) идиотских ошибок и т.д. будет в течение дня настраивать вас на весёлые и занимательные сны, в которых вы также будете продолжать разбирать дурацкие ошибки, пытаться написать очередные строки кода, и объяснить начальнику, чем же вы занимаетесь...

5. Программисты - это люди со специфическим подходом к общению с коллегами. Если у вас есть особый дар "убеждать людей и заводить друзей", то в рабочих отношениях с программистами вы будете систематически промахиваться. Программиста в отношении вас, как его коллеги (начальника, подчинённого, смежника) интересует только два вопроса: умеете ли вы писать код лучше него? Платите ли вы ему деньги? Если ответ на оба этих вопроса отрицательный, то вы для программиста не существуете.

Резюмируем: не становитесь программистами; для второй профессии гораздо лучше выбрать дизайнера придомовой территории (следуя заветам нашего любимого агенства стратегических инициатив).

#programming
Забавная статья на тему "непогрешимости математики": https://habr.com/ru/post/511556

Математикой занимаются математики, а математики, как и все люди, ошибаются.

Приводятся примеры:

- В рецензируемых научных журналах публикуется пара статей, которые явно (указано в аннотациях) противоречат друг другу. Ни одна из них не получает официального опровержения от редакции.

- Спустя 4 года после публикации некоей важной работы появилось опровержение одной из лемм этой работы (в другом журнале). Редакция исходного журнала так и не опубликовала официальное опровержение.

- Найдено решение некоего уравнения, которое имеет важное приложение в арифметике. Найдено оно было с помощью проприетарной программы с закрытым исходным кодом, которая опирается на алгоритмы, которые не были доказаны публично. Можно ли это считать корректным доказательством и вообще наукой?

И т.д.

#science
Мысли каждого программиста - кого раньше, кого позже - в какой-то момент времени начинает занимать идея некоего "аналогового" хобби. Для кого-то это путешествия, для кого-то прогулки на природе, для кого-то спорт.

Для меня это идея научиться пилотированию.

В прошлый раз эта идея сконцентрировалась до неких конкретных действий лет десять назад. Я тогда набрал тривиальный запрос в Гугле, мол, "получить PPL без регистрации и sms"

Из результатов запроса следовало, что только вокруг Москвы имеют место десятки "любительских" аэродромов, на каждом из которых за умеренную плату примерно в 300к рублей готовы научить по любому удобному графику полётам с выдачей "авиаправ" (той самой PPL) на выходе.

На днях я, повторно поддавшись давнему вдохновению, ввёл тот же запрос.

И не нашёл вообще ничего.

Предлагали обучение в зарубежных школах или почитать статьи на общие темы, но никакой рекламы и ссылок на конкретные российские курсы (валидировать зарубежные "права" в Российские - организационная морока - поэтому этот вариант сразу исключим из рассмотрения).

В итоге, потыкавшись в поисковик так и этак, я так ничего и не нашёл. Решил забить на вопрос, но идея всё же требовала совершить какие-нибудь конкретные действия.

Пришлось нехотя включить свой аналитический перемалыватель: из списка всех лицензированных авиационных учебных центров (81 штука), путём внимательного пролистывания текстов каждого приложения к лицензиям, был выведен исчерпывающий закрытый список организаций, могущих обучать на частного пилота. Угадайте, сколько их оказалось?

Шесть штук (не берём в рассчёт вертолёты, аэростаты и автожиры).

В России примерно столько же лётных школ для частных пилотов, сколько в Латвии (напомню, население ~2 млн.).

Ну а для желающих стать пилотом - вот результирующий набор ссылок:

https://nebosvod-avia.ru/contacts.html
https://artraining.ru/
https://fs.aerograd.ru/
https://siberianairbase.ru/pilot-training/
https://a-54.aero/
https://s7-training.ru/

Медианная цена - 900к.

По всем признакам авиация у нас под прямым воздействием "ингибирующего поля". Но про это как-нибудь потом.

#hobby #economics
Дисклеймер: всё нижесказанное не является инвестиционной рекомендацией - более того, автор не является ни профессиональным инвестором, ни даже успешным инвестором-любителем - это просто фантазии на некую интересную тему.

Как известно, в период золотой лихорадки надо продавать лопаты. В период "инвесторской лихорадки" очевидными лопатами являются сами биржи и брокеры.

В России две биржи: Московская и Санкт-Петербургская. Ликвидны только акции первой (MOEX).

Рассмотрим десяток брокеров, у которых наибольший прирост клиентов за последнее время. Из них публично торгуемыми и, по совпадению, топом-3, являются (в указанном порядке) Тинькофф (TCSG), Сбербанк (SBER, SBERP) и ВТБ (VTBR).

Ну, Сбербанк и ВТБ много чем помимо популяризации инвестирования занимаются. В итоге получаем тривиальную идею покупать TCSG и MOEX - как-то не очень интересно, но всё равно забавный вывод.

Среди топ-25 (по капитализации - увы, по росту количества частных клиентов статистику не так-то просто найти) мировых бирж сравнительно доступны для покупки (т.е. торгуются публично + на доступных для иностранных инвесторах площадках) следующие (название - тикер владельца, все торгуются на своих же площадках):

- NYSE - ICE
- Nasdaq - NDAQ
- London Stock Exchange - LSE
- Hong Kong Exchange - 388
- Euronext - ENX
- Toronto Stock Exchange - X
- Xetra/Börse Frankfurt - DB1
- Singapore Exchange - S68

Список для желающих поставить на новую "биржевую лихорадку" :)

#investing
О замыканиях в JavaScript.

В JavaScript, на самом деле, не "настоящие" замыкания. Я бы даже сказал, что в JS нет замыканий, а есть некая отдалённо напоминающая их эмуляция.

Суть замыканий (closures) в двух вещах:
- в теле функции можно использовать переменные, которые определены до этой функции
- значения этих переменных "фиксируются" ("запираются") в момент определения функции

Посмотрим пример на Elixir-е — "настоящем" функциональном языке:

x = 2
plus_2 = fn(n) -> n + x end

plus_2.(10) # => 12

x = 3

plus_2.(10) # => 12

Итак, мы внутри функции plus_2 используем переменную x, которая определена до этой функции.

Прикол в том, что в момент определения функции значение этой переменной "фиксируется": внутри функции теперь это уже не какой-то там x, а конкретно оказавшаяся там двойка. На место свободной переменной x, фактически, подставляется конкретное содержащееся там в момент определения значение.

Поэтому в последней строке plus_2 всё также продолжает прибавлять двойку к своему единственному аргументу n, а не новое значение x. Исходное значение x "замкнулось" внутри функции.

В императивных языках, которые эмулируют эту функциональность (простите за тавтологию) функциональных языков, всё не так:

// js
let x = 2
plus_2 = n => n + x

plus_2(10) // 12

x = 3
plus_2(10) // 13

# ruby
x = 2
plus_2 = ->(n) { n + x }

plus_2.(10) # 12

x = 3
plus_2.(10) # 13

Как видим, в JS (и Ruby) функция не "запомнила" (не подставила) значение переменной внутри её тела. Вместо этого, она каждый раз заново обращается к этой переменной, используя текущее значение.

Конечно, одно из типовых использований замыканий — в "фабрике функций" (функциях, которые возвращают другие функции). И когда вы пишете код "внешней" функции (= самой фабрики), ничто не мешает тщательно контролировать самого себя на предмет того, какие переменные "утекают" во "внутреннюю" функцию (= результат работы фабрики, который будет возвращён коду, вызвавшему фабрику). И убедиться, что эти переменные никто не будет изменять вне внутренней функции, или их изменение учтено by design — например, с "неправильными" JS-замыканиями можно тривиально реализовать функцию, которая считает, сколько раз она была вызвана — а с "правильными" замыканиями это, фактически, невозможно:

// js

timesRunFactory = () => {
let count = 0;

return () => {
count++;
return count
}
}

timesRun = timesRunFactory();

timesRun(); // 1
timesRun(); // 2
...

#programming #fp
Прошла онлайн Ruby-конференция: https://noruko.org/ (доступ разрешили без регистрации).

В докладе Матца (создателя Ruby) были все обычные заявления: добавим type annotations, нужно больше сторонних инструментов (линтеров, тайп чекеров), интерпретатор будет быстрее, улучшим JIT, думаем над созданием некоего супербыстрого "микроруби" (интерпретатора, реализующего подмножество Ruby).

Мне лично интересно было глянуть на три нововведения в синтаксисе языка (собственно, той части, которая на виду у пользователя):

1. Pattern matching

case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [*, {name: "Bob", age: age}, *]}
p age
in _
p "no Alice"
end

- В целом, мне нравится, как реализован этот оператор case... in
- Не понятно, почему в качестве плейсхолдера "что угодно" используется *, а не _
- Удручает, что нет планов распространения паттерн матчинга на сигнатуры метода в стиле Elixir или JS (декомпозиция аргументов метода прямо в его сигнатуре + возможность определить/"перегрузить" одноимённые методы с разной сигнатурой)

2. Оператор "правого присвоения" (right assignment).

# было
top_five =
(1..100)
.map{|x| rand(x)}
.sort
.reverse
.take(5)

# стало
(1..100)
.map{|x| rand(x)}
.sort
.reverse
.take(5) => top_five

- Мне нравится, как Матц не ставит пробелы перед и после фигурных скобок блока - такое написание удобней и практичней традиционного по "западному" кодстайлу
- Пример не убедительный - следовательно, убедительного примера, где бы правое присвоение могло быть удобным придумать сходу Матцу не удалось

3. Порядковые аргументы блока

# умножить каждый элемент на 2
[1, 2, 3].map{_1 * 2}

- Идея мне нравится - такая возможность была бы весьма востребована
- Выбор имён _1, _2, ... выглядит как-то несовременно

Общее резюме, цитируя-перефразируя Матца: Ruby будет становиться лучше (если американцы традиционно помогут японцам сделать из их кулибинских идей красивый коммерческий продукт), и вы тоже :)

#programming #ruby
Дисклеймер: всё нижесказанное не является инвестиционной рекомендацией - более того, автор не является ни профессиональным инвестором, ни даже успешным инвестором-любителем - это просто фантазии на некую интересную тему.

1. Китай был нетто-экспортёром еды в 2003 (+6 млрд. долл.). По данным на 2017 год - нето-импортёр (-45 млрд. долл.). Из 105 млрд. долл. импорта почти 20 млрд. приходится на США (второе место; на первом Бразилия с чуть больше чем 20 млрд. долл.).

2. Взрывной рост, среди прочего, пришёлся на импорт сои (соевых бобов — в основном как корм для скота). И здесь среди источников китайского импорта США на втором месте после Бразилии (правда, уже с существенным отрывом).

3. США является нетто-экспортёром еды. Экспорт в Китай — на первом месте.

4. Крупнейшими производителями сои в США являются: ADM (Archer Daniels Midland), Cargill, Bunge, Ag Processing.

5. Дальше смотрите сами.

Источники:

[1] CSIS ➤ How is China feeding its population of 1.4 billion? ➤ https://chinapower.csis.org/china-food-security/

[2] Mother Jones ➤ Don’t Look, But a Couple of Mega-Companies Are About to Take Over Your Food Supply ➤ https://www.motherjones.com/food/2018/01/archer-daniels-midland-merger-bunge-soybeans-monsanto-farmers-grain/

[3] Mary Hendrickson, Ph.D. ➤ The Dynamic State of Agriculture and Food: Possibilities for Rural Development? ➤ https://www.fca.gov/template-fca/download/Symposium14/hendrickson19feb2014.pdf

[4] China: Top Market for U.S. Ag Exports ➤ Minnesota Department of Agruculture ➤ https://www.mda.state.mn.us/sites/default/files/inline-files/profilechina.pdf

#investing
"Функциональное программирование" (ФП) - модный термин.

Автор имеет опыт разработки веб-приложений на Elixir-е (с использованием фреймворка Phoenix). Можно ли Elixir считать функциональным языком? Большинство отвечают, мол, конечно, это один из референтных представителей группы. Тот же JavaScript или Ruby могут назвать "языком с *элементами* ФП", но никому не придёт в голову назвать "полноценным" "функциональным языком".

Мне кажется, точно также, как отсутствие диплома о техническом образовании не делает человека гуманитарием (впрочем, верно и обратное), также и отсутствие на уровне базовых конструкций языка "экземпляров классов" не делает язык "функциональным". В случае Elixir, отсутствие "экземпляров" не делает даже язык "не объектно-ориентированным".

В самом деле, ООП (объектно-ориентированный подход/программирование) зиждется на следующей формуле: "состояние" + "поведение". У нас есть некие автономные чёрные ящики (объекты), у которых в каждый момент времени есть некое внутреннее (не видимое снаружи) состояние и есть возможность получать сообщения.

Сейчас обычно говорят не "получать сообщения", а "вызывать метод". Впрочем, обратите внимание, что в Ruby проверка на то, существует ли у объекта метод, делается с помощью метода `respond_to?`— "отвечает ли?". Наследие Smalltalk, где объекты таки посылали друг другу именно "сообщения". В каком-нибудь Objective C (базовом языке для разработки под iOS) до сих пор официально "посылают сообщения".

Но, простите, а что наши разработанные на Elixir "процессы" делают, когда работают в экосистеме Erlang-а? Посылают друг другу сообщения. И так, Elixir-овский "процесс":
— имеет внутреннее состояние (минимальное разнообразие типовых способов работы с состоянием заложено в стандартную библиотеку, называющуюся OTP);
— отвечают на "сообщения".

QED, господа — Elixir это объектно-ориентированный язык (где роль "классов" играют "модули", роль "объектов" — "процессы", роль "методов" — сообщения и функции).

Отличие Elixir в том, что, когда вы пишете код, язык вас вынуждает явно себе представлять, как ваши объекты "раскладываются" по процессам (параллельным потокам выполнения) — какой объект живёт в каком "домике"-процессе на каком "островке"-сетевом узле. Традиционный объектно-ориентированный язык позволяет инкапсулировать даже сетевой вызов к REST-ресурсу, избаловывая программиста этими непрозрачными стенками абстракций.

#programming #fp #ruby #javascript #elixir
Элементы ФП в императивных языках

Мода на "функциональное программирование" задаётся, несомненно, как раз привнесением в более распространённые императивные языки пресловутых "элементов ФП".

Среди всех таких элементов можно (условно — реальная "генеалогия" чуть сложнее) выделить два класса:

1) Элемент LISP: лямбда-функции. В Ruby "лямбды" изначально были заложены в язык в виде "блоков кода" (конечно, в оригинальном LISP это сделано несколько более органично). Вслед за взрывным ростом популярности Ruby и большим признанием удобства использования "лямбд" со стороны прикладных программистов, стали потихоньку добавлять их и в другие языки: кажется, первым среди невымирающих динозавров была Java 8. Ну а теперь даже в C++ вы можете встретить нечто похожее.

2) Элемент LISP: итераторы. Аналогично с итераторами: map, select, reduce, zip, и т. д. и т. п. можно найти в любом уважающем себя современном языке. Популяризирует их в наше время JavaScript, в очередной ревизии которого они наконец появились, чтобы язык не выглядел совсем уж позорно на фоне любительской поделки фанатиков Rails — CoffeScript-а (как раз после появления "лямбд" и итераторов в JS "коффискрипт" и умер).

3) Элемент Haskell: "монады". Мало кто, в сущности, знает хоть что-то о системе категорий, но антураж "матана" привлекает неуверенных в себе программистов. Точно также, как психолог в связи с массовостью профессии и отсутствием профессиональных стандартов считается неполноценным психиатром, и программист на заре развития программирования мог бы считаться неполноценным математиком. В какой-то мере сохраняется подобное смутное чувство и сегодня. Из всего Haskell-а (этакого "языка программирования от математиков") выдёргивают обычно так называемые "монады". Элементарная, в сущности, концепция, которая на языке ООП описывалась бы простым интерфейсом контейнера с 3-8 методами, превращается в жупел, которым неполноценные математики, так и не сумевшие стать программистами, формируют неуверенность в своём интеллекте у программистов, которые не желают становиться математиками.

4) Элемент Haskell: pattern matching. Опять же, JavaScript популяризирует концепцию в наше время, переназвав её как "destructuring". На мой взгляд, впрочем, в таком терминологическом изменении нет ничего страшного: надо быть ближе к народу. Destructuring позволяет, например, прямо в сигнатуре функции (в перечислении аргументов) "выдернуть" ключ хеша или элемент массива из входящего параметра (таким образом "сопоставив", match, входящую структуру некоему "образцу", pattern). Ruby идёт с отставанием: на коленке сделанный case... in в свежей версии это хорошо, но мало: даёшь "перегрузку" функций в зависимости от структуры аргумента, как в том же Elixir.

А кроме этих четырёх пунктов, что-то больше ничего и не приходит на ум.

А вам каких "элементов ФП" не хватает в любимых языках?

#programming #fp #ruby #javascript #elixir
Очередное важное международное событие, о котором стоит поговорить нам, программистам (и сочувствующим). Программист — гражданин своей страны и дееспособный член общества, профессионал, человек с достаточно высоким уровнем интеллекта и самосознания. Программист не должен оставаться в стороне от важных событий, и должен в меру сил и средств поддерживать свою школу, свой цех и профессиональное гражданское общество в целом.

Конечно, вы уже верно поняли, что я намекаю на тему выборов. Выборов модераторов RU сектора StackOverflow. RU сектор всепланетного сайта "вопросов и ответов" на темы, касающиеся разработки программного обеспечения (и сопутствующие) представляет из себя в данный момент жалкое зрелище. Низкое количество активных пользователей, культура сниженного общения, не развитое самоуправление: русскоязычный программист (я подчёркнуто говорю русскоязычный, обращаясь к дружному космополитическому международному сообществу трудящихся) находится в настоящий момент в трудном положении.

Некуда обратиться за помощью (за исключением узкотематических сообществ), и негде реализовать своё стремление поделиться сокровенным знанием и подать руку своему коллеге по цеху, брату (сестре) по профессии и по духу и носителю родного языка. Класс программистов угнетаем, и, казалось бы, не видно этому конца.

О выборах модераторов RU сектора SO (https://ru.stackoverflow.com/election/4) я сам узнал случайно. Классово враждебные силы не просто замалчивали это событие всесоюзного (а может быть и международного, учитывая, что речь идёт об одном из шести языков ООН) масштаба, не уведомив правоспособных пользователей по электронной почте. Но специально генерировали повестку дня в ведущих СМИ в течение всего последнего времени, вытесняя информацию о данном мероприятии за третьи полосы газет, отвлекая и рассеивая внимание трудящихся.

Самопредставление кандидатов на текущих выборах не приносит удовлетворения. К сожалению, мы уже пропустили момент, когда могли бы выдвинуть, проведя демократические и открытые праймериз, своего, народного, представителя. В самом деле, самовыдвиженцы, из-за отсутствия демократических и прогрессивных традиций выборов:
- игнорируют заполнение персональных данных - о большинстве кандидатов не известно ни ФИО, ни род занятий, ни место жительства с точностью до города, ни основные профессиональные навыки, ни их мотивация для выдвижения
- приводят несущественную информацию в своих агитационных материалах
- не имеют внятной, а некоторые и вовсе никакой, предвыборной программы

Мы должны сами стать кузнецами своего счастья.

Следующие выборы через год. Все неравнодушные представители свободолюбивого сообщества профессионалов призываются — а, учитывая их занятый график, буквально упрашиваются — зарегистрироваться на RU-домене Stackoverflow: https://ru.stackoverflow.com/ — и, качественно сформулировав вопросы или ответы для участников сообщества, набрать 150 баллов рейтинга (минимальный порог для того, чтобы иметь возможность отдать свой голос за кандидата). Через год прогресс должен восторжествовать.

Нашим первым действием будет требование прекратить затуманивать разум электорату и просьба кандидатам предоставить чёткую базовую информацию о себе:

1. ФИО и год рождения.
2. Краткая биография, тезисно: пол, возраст, образование, специальность, текущее место работы.
3. Краткое описание профессиональных навыков и текущей работы (в уместных для публичного пространства рамках).
4. Рабочий распорядок дня - сколько часов в неделю планирует посвещать общественной деятельности.
5. Краткое описание собственной мотивации - какую выгоду надеется получить от позиции?
6. Свободное поле.

(Вместо простого и понятного списка вышеуказанных вопросов сейчас реакционные элементы, притворно действуя от имени народных масс, предлагают кандидатам тратить своё и наше время на ответы на малозначимые вопросы, выдуманные аппаратчиками.)

Вместе победим!

#programming
В продолжение темы "виды онлайн курсов" (https://www.youtube.com/watch?v=mDKl1EaxVqI).

Некая широко известная в специализированных кругах образовательная онлайн-организация предлагает:

— Курс «Профессия Data Scientist» с трудоустройством

Впрочем, с точки зрения автора данной заметки, слова "профессия" и "трудоустройство" стоило бы выделить отдельными кавычками. Заявлено, что освоить "профессию" можно, занимаясь по 4 часа в неделю(!) в течение около полугода.

Профессия, бесспорно, интересная, и описание курса сопровождается вот такими слоганами:

"88% студентов <широко_известная_организация> находят работу до защиты диплома"

Автора, как практика и исследователя онлайн-образования, конечно, заинтересовали подобные данные об эффективности онлайн-курсов. Учитывая, что Coursera даёт выхлоп в 4% получивших сертификат по отношению к записавшимся на курс, а качественные "крафтовые" онлайн-курсы дают результативность в примерно 30% освоивших программу от числа записавшихся — данные революционные. Требуется публиковать статьи на международных семинарах, оформлять патенты, и обобщать методики на все отечественные платформы.

К сожалению, в переписке со службой поддержки выяснилось, как в известном анекдоте ("и не в покер, а в дурака; и не выиграл, а проиграл"):
— 88% из тех, кто "обратился за помощью в трудоустройстве", "получил работу"
— помощь в трудоустройстве "обговаривается" (т. е. не предоставляется безусловно всем студентам из тех, кто успешно освоили программу)
— "консультант помогает составить резюме и организовать собеседование с работодателем" (т. е. не делает ничего более)

Кто любит рекламу и лапшу на уши — выбирает <широко_известную_организацию>. Кто любит честный труд и работу — выбирает <замечательных_разработчиков>!

#education
Вышла свежая новость с повторением известных цитат:

— Согласно среднему варианту прогноза Росстата, в период 2019–2030 гг. общая численность населения трудоспособного возраста снизится на 2,1 млн человек (при низком варианте прогноза — на 4,3 млн). В российских реалиях использование иностранных работников позволяет снизить издержки на фонд оплаты труда, так как их зарплатные требования на 30-40% ниже, чем у россиян. Возможность экономить на заработной плате является одним из основных факторов, который приводит к появлению на российском рынке труда миллионов иностранцев.

— На запущенном летом 2018 году в Московской области крупнейшем в Европе заводе по производству сырокопченых колбас компании «Черкизово» вся производственная цепочка полностью автоматизирована. На это предприятие будет приходиться 30% всех сырокопчёных колбас, произведенных в России. Общий объем инвестиций в производство составил 7 млрд рублей, при этом на заводе будут трудиться всего 170 сотрудников: IT-специалисты и инженеры. Можно предположить, что если все сырокопчёные колбасы в России будут производить по данной технологии, то в их изготовлении будут участвовать не более 570 человек.

— В Ставропольском крае готовится к вводу в эксплуатацию первый в России завод по производству лактозы, который должен на первом этапе выпускать 1,8 тыс т готовой продукции в год, что соответствует 10% импорта. Трудиться на этом предприятии будут только 5 человек. То есть для производства всей лактозы для нужд России будет необходимо не более 50 человек.

— «Сбербанк России» посредством внедрения систем искусственного интеллекта сократил 70% менеджеров среднего звена в 2018 году.

https://myfri.org/2020/09/04/ekonomist-aleksandr-grebenyuk-o-rabote-budushhego/

— Российская компания-разработчик беспилотного транспорта и сельскохозяйственной техники Cognitive Pilot заключила контракт на автоматизацию 242 комбайнов компании «Русагро». Система управления способна полностью автономно передвигаться по полю, отслеживая объекты на нем, в том числе различные структуры, такие как кромка, рядок и валок.

https://proteh.org/news/27052020-rusagro-vyvedet-na-rossijskie-polya-bolee-200-bespilotnyh-kombajnov/

(Всего у компании Русагро, как пишут в открытых источниках, около 800 комбайнов — т. е. автоматизировали в первый/пробный заход сразу четверть.)

К вопросу "вымирающих деревень" (хотя не в меньшей мере актуален вопрос "вымирающих офисов").

#economics
Часто считается, что (любой) программист должен знать, для начала:
— обязательно язык Си (почему именно Си, обычно уточняют неубедительно)
— матан на уровне второго курса технического ВУЗа
— алгоритмы и структуры данных на уровне книги Кернигана и Ритчи

Это вроде как даёт "прочную базу". До идеи "прочной базы" потенциальный бросивший учиться программированию заинтересованный студент доходит не своим умом, ему это наглядно объясняют либо старшие коллеги, либо вопросы к собеседованиям FAANG (устоявшаяся аббревиатура по названию крупнейших IT-компаний: Facebook, Apple, Amazon, Netflix, Google).

Старшие коллеги, конечно, хотят применить весь багаж полученных за все пять или шесть тяжелых учебных лет знаний хотя бы в качестве средства для интеллектуального снобизма и эксгибиционизма. Ну а в FAANG такая очередь желающих, что лучше всего было бы просто отбирать по лотерее каждого сотого, но, видимо, считается что это будет выглядеть совсем неприлично, поэтому придумывают иные испытания, не связанные с реальной производительностью после найма.

В целом, конечно, и жалко человека, застрявшего в вечных "поисках базы"; с другой стороны: падающего подтолкни. Поэтому добавим к списку выше следующее:
— знание системы команд x86 и языка ассемблера
— знание основ дизайна схем на языках высокого уровня (Verilog и т. п.) и основных архитектур процессоров
— знание основ API целевых операционных систем (Windows, Linux, ...)
— знание принципов разработки языков программирования (парсеры, лексеры, грамматики, и т. д.)
— знание многоуровневой модели сетевых протоколов и основных протоколов стека TCP/IP

...Но на самом деле по-хорошему-то и этого мало. Транзисторы-то маленькие, это сверху кажется, что они работают как простой цифровой вентиль, а на самом деле это целый мир. Поэтому как минимум ещё надо знать:
— работу полупроводников приборов: основные принципы и мат. модели
— уравнения электродинамики их приложение к полупроводниковым приборам

Но на самом деле электроны состоят из кварков, так что неплохо бы ещё и квантовую физику изучить. А кварки из суперструн, так что и физики суперструн стоит пройти базовый курс. А чтобы уложить это всё в голове — заполировать историей и философией науки. Ну и Маркса в довесок — не знаю, честно говоря, зачем, но его любят цитировать последнее время, наверное столь же полезен для прикладного специалиста, как и всё вышеперечисленное.

#programming #education