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

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

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

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

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

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

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

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

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

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

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

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

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

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

И т.д.

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

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

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

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

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

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

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

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

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

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

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

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

http://nebosvod-avia.ru/contacts.html
https://artraining.ru/
http://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