технологии, которые сейчас призваны решать проблемы, потенциально могут создать новые или усугубить уже существующие,
Это не взаимоисключающие вещи, естественный процесс и такое происходит столетиями уже — Amazon убивает физический ретейл, Uber убивает таксопарки, станки вытеснили работающих руками в массовом производстве. В итоге работники из старой отрасли переучиваются и уходят в другие — ничего нового или страшного.
ту же дискриминацию
Ещё раз: это происходит прямо сейчас и всё равно люди живут лучше, чем когда-либо — именно за счёт общедоступных технологий.
КГ/АМ — статья в духе Уэллса, описывающего Лондон в конском навозе. Алсо, алармизм и конспирология.
Что насчет социальных слоев?
Можно представить, что богатые и влиятельные заполучат доступ к новым дорогостоящим процедурам по усовершенствованию задолго
Замените процедуры на качественное образование и медицину и вы получите текущую ситуацию. У человека из Скандинавии настолько же больше шансов добиться в жизни успеха, чем у почти такого же(при рождении) человека из ЦАР/Сомали/далёкого замкадья.
Нас уже готовят к признанию «прокачки» человека?
Недавно я заметил возросшее количество фильмов/видеоигр
А ещё в последнее время популярны фильмы о зомби. Нас готовят к зомби-апокалипсису?
Думаю, в какой-то момент станет неизбежно, что усовершенствованные люди увидят в неусовершенствованных недолюдей
большинство американцев
Вы спросите у американцев, что они думают об affirmative action — программах позитивной дискриминации всяких меньшинств. Их существованиt — по сути, признание неравенства способностей людей.
Люди, которые отрицают эти технологии
неизбежного социального дна
Посмотрите на Свидетелей Иеговы, которые отрицают, например, переливание крови или на мормонов, которые не пользуются технологиями — это уже есть.
Сравнение с 4G
потому что у вас кляча дохлая.
тесты
Ещё раз:
Проблема не в технологии — 4G / LTE в тестах выдаёт 300+ Mbps. Этого было бы достаточно для любых целей, но в поле этот же 4G / LTE в поле едва вытягивает стабильные 5Mbps, а в мегаполисе с населением больше Финляндии или Норвегии(т.е. не мухосранске, куда не завезли оборудование) часто вообще не ловит и даунгрейдится на предыдущий стандарт.
Разница между идеальными условиями в лаборатории и реально предоставляемым сервисом на два порядка.
5G может в тестовой лаборатории выдавать хоть двадцать гигабит, как описано в спеке, но если оператор такой канал не выделяет и покрытие сильно ограничено — это остаётся цифрой на бумаге.
Больше того, 'безлимитные' тарифы часто имеют очень небольшой cap(уровня 10GB/месяц), после которого скорость обрезают до 64/128kbps, с которыми облачный сторадж становится неюзабельным.
Со скольки гигабайт вы перестаёте волноваться, что на смартфоне кончится место?
Последние пару лет на телефонах вместе с карточкой 32-64 и каждый месяц приходится сливать фото/видео на ПК.
Сколько гигабайт на ноутбуке нужно, чтобы не переживать, что их не хватит?
1TB+. Windows съедает 30-40GB с учётом апдейтов, VS в полном виде, включая эмуляторы — ещё 100. Игрушки со стима(да, люди играют на ноутбуках) — ещё столько же. Личных файлов на четверть терабайта где-то. Полтерабайта свободных оставить — под временные файлы.
5G, AFAIK, ещё нет в среднем нигде — ни сетей, ни устройств.
4G на бумаге выглядит хорошо, но мой ОПСоС выдаёт заявленные скорости(30+ mbps) только на станциях метро, где базовая станция находится в прямой видимости. В произвольной точке города — 5-10mbit, в старых зданиях в центре Питера вообще едва ловят телефоны и переходят на EDGE с четвертью мегабита скорости.
>Т.е. самостоятельно изготовить крепления, даже в самой беднейшей стране,
Чувак живёт в штатах, в статье написано же. $500 за нормальное крепление вместо DIY-хреновины либо просто покрываются сэкономленным временем, либо компенсируются сильно меньшим риском разбить камеру в стране, где нельзя будет её починить/заменить.
С каких пор это повод для подражания? Ну а в Rust'e они с первой версии и что теперь?
Я не говорю, что это повод для подражания. Я утверждаю, что отсутствие дженериков(и любых других фич языка) только усложняет работу, заставляя писать больше кода, но точно не стирает границу между сильными разработчиками и слабыми, как утверждает автор.
Пишите по-русски, английский, видимо, не ваше. Бессмысленная фраза какая-то получилась.
~.
would like a word — устойчивое выражение. Изначально выглядело как 'x would like to have a word with you', но в реальной речи большую часть текста выкидывают, гугл знает. Английский, вообще, достаточно гибок и содержит идиомы, на первый взгляд конфликтующие с грамматикой, вроде классического 'long time, no see'.
Могу на русском перефразировать.
LXC(вокруг которого, кстати, докер был изначально построен), Jail и подобные им проекты с вами не согласны. Они являются контейнерами, но не предоставляют средств доставки приложений.
Эм… что?
То есть помимо того, что нормальные типы то у нас есть, у нас строгая типизация, все-таки
в питоне вы не делаете это ручками.
Вы делаете:
Обеспечиваете типобезопасность.
Реализуете менее очевидные вещи, которые достаются с дженериками. В C#, например, все DI контейнеры выставляют наружу интерфейсы уровня
container.RegisterService<TInterface, TImplementation>()
where TImplementation : TInterface;
container.GetService<TInterface>();
Язык гарантирует совместимость типа регистрируемых интерфейса и реализации за счёт generic constraint.
Ни один из методов не требует передавать типы в виде аргументов — информация о типе доступна в рантайме через рефлексию / typeof(тип-параметр).
В java так нельзя из-за type erasure
В том же C# можно написать что-то вроде
class GenericAddList<T> : List<T> where T : new(){
public T AddNew(){
var t = new T();
this.Add(t);
return T();
}
}
...
var list = new GenericAddList<SomeClass>();
var newValue = list.AddNew();
Т.е имея информацию о типе для дженерика создавать инстансы объектов. Всё это можно сделать в питоне, но придётся в явном виде передавать типы и интерпретатор даже не ругнётся, если где-то типы окажутся несовместимы / код упадёт где-то дальше.
Поконкретнее можно, что подразумевается под «уже несколько лет». Я же верно понимаю, что «несколько» в вашем понимании = «не более двух»?
Странно таргетиться на .NET Standard ДО его выхода, правда же?
Не совсем.
MS проанализировали все существующие пакеты nuget перед выпуском .NET Standard и получили, что 98, IIRC, процентов библиотек опираются только на доступные в нём API(понятно, что там могут быть обращения к win-only нативным либам / файлам / etc). По этой причине nuget позволяет использовать пакеты, целящиеся на .NET в .NET Core и .NET Standard, хотя и кидает ворнинг. 'Миграция' для большей части либ заключается в смене таргета в проекте.
У вас реально с арифметикой плохо, простите. С 2012 года не то что «десятилетий» (во множественном числе) не прошло, одного десятка еще не исполнилось.
Именно десятилетий. Большая часть API surface, описанная в .NET Standard, существует с .NET 1.1/2.0, чтобы таргегитьтся по .NET обычно было достаточно просто целиться в основной фреймворк, не трогая win-only части.
Прям на серверах сидел? Или, все же, в мобильных приложениях?
В мобильных приложениях, но это такой же прод — если оно развалится, будут потеряны деньги. Почему-то доверяют для такой задачи 'альтернативной реализации фреймворков от сторонних разработчиков'.
И ссылка в гайд: что делать, если после обновления платформы «совместимое» с ней приложение вдруг перестало работать
Да. Потому что мажорные версии гарантируют API surface и то же поведение фреймворка, но не внутреннюю реализацию. Так, несколько раз встречался с тем, что клиентский код переставал работать при обновлении, потому что он лез рефлексией в кишки библиотек, а в новой версии переименовывали поля/приватные методы.
Контейнеры, в первую очередь, способ доставки. Как инструмент изоляции они не очень.
LXC, Jail and friends would like a word.
Собственно, погуглите 12-factor apps — достаточно годный список рекомендаций.
Всё это и так применяют — я работал над нагруженным продом, где были микросервисы на дотнете/winserver.
А вы точно знаете, что такое дженерики и зачем они нужны?
Я пишу на шарпе и не пишу на Go.
Ну и алсо, в питоне есть дженерики, как только там ввели подсказки по типам.
Они не энфорсятся интерпретатором — их по сути(т.е. они даже видны в рантайме, чем пользуются некоторые DI-фреймворки, но это скорее сайд-эффект) нет, если не учитывать сторонние линтеры.
И как бы, зачем вы требуете их в питоне?
Их и не может быть в питоне в чистом виде — нет нормальных типов => нет дженериков. На питоне делают руками то, что реализует компилятор и рантайм в том же C# и добиваются успеха, выдавая сложный и рабочий код — точно так же смогут и в Go.
Собственно, по этой причине я не согласен с автором.
Неизмеримое количество нетривиального и полезного софта написано вообще на сях, без дженериков(да, есть макросы, но всё же), вывода типов, исключений, чего угодно — посредственные разработчики просто бы просто не вытянули такие проекты. Опенсорсного, кстати — это не какой-то большой дядька решил, что они сэкономят бюджет, а выбрали сами девелоперы.
На F# же, который автор поставил в теги и, скорее всего, считает хорошим языком, я слышал только о FAKE, который не то, чтобы сильно популярен или не имел аналогов.
Где все те гениальные проекты, которым мешает простота языка и грязные решения? А нет их, не подтверждает реальность слова автора.
«реализует большую часть», вы сами это сказали. При выборе платформы для проекта эту фразу принято читать как «без гарантий совместимости» или, на крайний случай «никто ничего не обещает».
Нет, это именно означает 'большую часть'. WPF / WinForms / WebForms отсутствуют(первые два вернут в 3.0, бета уже вышла) — Core изначально позиционировался как лёгкий серверный рантайм, в котором не было десктопного UI и legacy.
Как .NET FX, так и .NET Core реализуют .NET Standard, под который уже несколько лет таргетятся все мажорные библиотеки на nuget — для них гарантирована совместимость.
— В критичных для бизнеса проектах не любят «альтернативные реализации фреймворков от сторонних разработчиков».
Как-то реальный бизнес прекрасно сидел на Xamarin ещё до покупки Microsoft'ом, который на тот момент разрабатывался командой mono.
К тому же .NET Framework 3.2, 3.4, 3.5, 4.6 и т.д. — несовместимы между собой
Внутри мажорных версий — совместимы. 4.0 был выпущен девять лет назад — за 3 года до Go 1.0.
Фреймворки автоматически определяются и ставятся sXs, по крайней мере, на windows.
Mono имплементирует их все разом, подсовывая чуть разные stdlib.
На основании чего ждать иного поведения от .NET Core, так ни разу и не вышедшего в LTS.
А .NET Core (и .NET Standard), еще и одного десятка нет.
.NET Standard описывает существующую функциональность, а не описывает новую. Так .NET Standard 1.1, релизнутый в 2016, совместим с .NET FX 4.5, выпущенном в 2012. Большая часть апи, описанных в нём, существует как раз десятилетия.
не пишут десятилетиями контейнеризованные приложения
Расскажите же об отличиях в коде для контейнеризованных приложений относительно любых других. Большая часть софта, написанного задолго до мейнстримных контейнеров, прекрасно запускается в докере без модификаций — контейнеры, в первую очередь, это просто способ изоляции.
в принципе не пишут контейнеризованные приложения.
Пишут.
windows containers существуют уже пару лет в релизном состоянии
на mono+docker всё работало ещё в 2015(возможно и раньше, но я тогда с таким комбо впервые столкнулся).
Именно. Программист — инженер, а не писатель, вы реализуете спецификацию. Ваш код должен быть безликим, чтобы человек, который будет работать с вами просто вносил необходимые изменения, не тратя время на осознание вашего 'авторского стиля'.
Момент, когда у тебя забирают возможность выбирать, как этот код будет работать — мой самый страшный кошмар. Представьте кейс: вы написали сложный перфоманс сенситив модуль, а вам говорят: «Послушай, он слишком сложный. Давай ты сделаешь его попроще, не важно, что работать будет хуже».
Напомню, что код пишется для людей. Если кроме вас его никто не может понять, то бизнес зависит от того, как успешно вы уворачиваетесь от автобусов. Завтра вы написали заявление по собственному — код можно выкидывать.
Впрочем, вы сами написали это ниже:
возьмут на моё место какого-нибудь дурачка, он легко сможет работать с моим кодом. Так компании будет намного комфортнее
Не можете написать просто и эффективно — страдайте.
Они не добавили дженерики в Go, потому что дженерики — сложные.
Это никак не мешает куче динамических языков — никто не жалуется на отсутствие дженериков в, например, питоне, на котором написано чуть более девяти тысяч сложного кода.
C# и Java обзавелись дженериками тоже не с первой версии, причём в яве на уровне рантайма они до сих пор не существуют — тоже как-то писали.
Это не взаимоисключающие вещи, естественный процесс и такое происходит столетиями уже — Amazon убивает физический ретейл, Uber убивает таксопарки, станки вытеснили работающих руками в массовом производстве. В итоге работники из старой отрасли переучиваются и уходят в другие — ничего нового или страшного.
Ещё раз: это происходит прямо сейчас и всё равно люди живут лучше, чем когда-либо — именно за счёт общедоступных технологий.
КГ/АМ — статья в духе Уэллса, описывающего Лондон в конском навозе. Алсо, алармизм и конспирология.
Замените процедуры на качественное образование и медицину и вы получите текущую ситуацию. У человека из Скандинавии настолько же больше шансов добиться в жизни успеха, чем у почти такого же(при рождении) человека из ЦАР/Сомали/далёкого замкадья.
А ещё в последнее время популярны фильмы о зомби. Нас готовят к зомби-апокалипсису?
Вы спросите у американцев, что они думают об affirmative action — программах позитивной дискриминации всяких меньшинств. Их существованиt — по сути, признание неравенства способностей людей.
Посмотрите на Свидетелей Иеговы, которые отрицают, например, переливание крови или на мормонов, которые не пользуются технологиями — это уже есть.
inb4: поговорил с переводом.
Поисковый пузырь / персонализация / предсказание последовательных запросов.
Аналогия точная.
Средний(a.k.a. average/mean) объём носителя — частное суммы объёмов всех носителей и их количества.
Медианный объём носителя — такой объём, где половина всех проданных носителей >= ему, а другая половина <=.
Примеры мои и qw1 показывают проблему со средним объёмом — аутлайеры сильно искажают средний объём, а вот на медиану так не влияют.
Ещё раз:
Проблема не в технологии — 4G / LTE в тестах выдаёт 300+ Mbps. Этого было бы достаточно для любых целей, но в поле этот же 4G / LTE в поле едва вытягивает стабильные 5Mbps, а в мегаполисе с населением больше Финляндии или Норвегии(т.е. не мухосранске, куда не завезли оборудование) часто вообще не ловит и даунгрейдится на предыдущий стандарт.
Разница между идеальными условиями в лаборатории и реально предоставляемым сервисом на два порядка.
5G может в тестовой лаборатории выдавать хоть двадцать гигабит, как описано в спеке, но если оператор такой канал не выделяет и покрытие сильно ограничено — это остаётся цифрой на бумаге.
Больше того, 'безлимитные' тарифы часто имеют очень небольшой cap(уровня 10GB/месяц), после которого скорость обрезают до 64/128kbps, с которыми облачный сторадж становится неюзабельным.
1TB+. Windows съедает 30-40GB с учётом апдейтов, VS в полном виде, включая эмуляторы — ещё 100. Игрушки со стима(да, люди играют на ноутбуках) — ещё столько же. Личных файлов на четверть терабайта где-то. Полтерабайта свободных оставить — под временные файлы.
RTFM на тему средняя vs медиана. На каждый топовый iPhone / Samsung c полутерабайтом хранилища приходится десяток смартфонов с 8/16гб.
У скайпа в 2015 MAU был 300M человек — 5% планеты.
Да, недостаточно.
5G, AFAIK, ещё нет в среднем нигде — ни сетей, ни устройств.
4G на бумаге выглядит хорошо, но мой ОПСоС выдаёт заявленные скорости(30+ mbps) только на станциях метро, где базовая станция находится в прямой видимости. В произвольной точке города — 5-10mbit, в старых зданиях в центре Питера вообще едва ловят телефоны и переходят на EDGE с четвертью мегабита скорости.
Чувак живёт в штатах, в статье написано же. $500 за нормальное крепление вместо DIY-хреновины либо просто покрываются сэкономленным временем, либо компенсируются сильно меньшим риском разбить камеру в стране, где нельзя будет её починить/заменить.
Я не говорю, что это повод для подражания. Я утверждаю, что отсутствие дженериков(и любых других фич языка) только усложняет работу, заставляя писать больше кода, но точно не стирает границу между сильными разработчиками и слабыми, как утверждает автор.
~.
would like a word
— устойчивое выражение. Изначально выглядело как 'x would like to have a word with you', но в реальной речи большую часть текста выкидывают, гугл знает. Английский, вообще, достаточно гибок и содержит идиомы, на первый взгляд конфликтующие с грамматикой, вроде классического 'long time, no see'.Могу на русском перефразировать.
LXC(вокруг которого, кстати, докер был изначально построен), Jail и подобные им проекты с вами не согласны. Они являются контейнерами, но не предоставляют средств доставки приложений.
Вы делаете:
typeof(тип-параметр)
.В том же C# можно написать что-то вроде
Т.е имея информацию о типе для дженерика создавать инстансы объектов. Всё это можно сделать в питоне, но придётся в явном виде передавать типы и интерпретатор даже не ругнётся, если где-то типы окажутся несовместимы / код упадёт где-то дальше.
Не совсем.
MS проанализировали все существующие пакеты nuget перед выпуском .NET Standard и получили, что 98, IIRC, процентов библиотек опираются только на доступные в нём API(понятно, что там могут быть обращения к win-only нативным либам / файлам / etc). По этой причине nuget позволяет использовать пакеты, целящиеся на .NET в .NET Core и .NET Standard, хотя и кидает ворнинг. 'Миграция' для большей части либ заключается в смене таргета в проекте.
Именно десятилетий. Большая часть API surface, описанная в .NET Standard, существует с .NET 1.1/2.0, чтобы таргегитьтся по .NET обычно было достаточно просто целиться в основной фреймворк, не трогая win-only части.
В мобильных приложениях, но это такой же прод — если оно развалится, будут потеряны деньги. Почему-то доверяют для такой задачи 'альтернативной реализации фреймворков от сторонних разработчиков'.
Да. Потому что мажорные версии гарантируют API surface и то же поведение фреймворка, но не внутреннюю реализацию. Так, несколько раз встречался с тем, что клиентский код переставал работать при обновлении, потому что он лез рефлексией в кишки библиотек, а в новой версии переименовывали поля/приватные методы.
LXC, Jail and friends would like a word.
Всё это и так применяют — я работал над нагруженным продом, где были микросервисы на дотнете/winserver.
Я пишу на шарпе и не пишу на Go.
Они не энфорсятся интерпретатором — их по сути(т.е. они даже видны в рантайме, чем пользуются некоторые DI-фреймворки, но это скорее сайд-эффект) нет, если не учитывать сторонние линтеры.
Их и не может быть в питоне в чистом виде — нет нормальных типов => нет дженериков. На питоне делают руками то, что реализует компилятор и рантайм в том же C# и добиваются успеха, выдавая сложный и рабочий код — точно так же смогут и в Go.
Собственно, по этой причине я не согласен с автором.
Неизмеримое количество нетривиального и полезного софта написано вообще на сях, без дженериков(да, есть макросы, но всё же), вывода типов, исключений, чего угодно — посредственные разработчики просто бы просто не вытянули такие проекты. Опенсорсного, кстати — это не какой-то большой дядька решил, что они сэкономят бюджет, а выбрали сами девелоперы.
На F# же, который автор поставил в теги и, скорее всего, считает хорошим языком, я слышал только о FAKE, который не то, чтобы сильно популярен или не имел аналогов.
Где все те гениальные проекты, которым мешает простота языка и грязные решения? А нет их, не подтверждает реальность слова автора.
Нет, это именно означает 'большую часть'. WPF / WinForms / WebForms отсутствуют(первые два вернут в 3.0, бета уже вышла) — Core изначально позиционировался как лёгкий серверный рантайм, в котором не было десктопного UI и legacy.
Как .NET FX, так и .NET Core реализуют .NET Standard, под который уже несколько лет таргетятся все мажорные библиотеки на nuget — для них гарантирована совместимость.
Как-то реальный бизнес прекрасно сидел на Xamarin ещё до покупки Microsoft'ом, который на тот момент разрабатывался командой mono.
У .NET Core есть LTS.
.NET Standard описывает существующую функциональность, а не описывает новую. Так .NET Standard 1.1, релизнутый в 2016, совместим с .NET FX 4.5, выпущенном в 2012. Большая часть апи, описанных в нём, существует как раз десятилетия.
Расскажите же об отличиях в коде для контейнеризованных приложений относительно любых других. Большая часть софта, написанного задолго до мейнстримных контейнеров, прекрасно запускается в докере без модификаций — контейнеры, в первую очередь, это просто способ изоляции.
Пишут.
Именно. Программист — инженер, а не писатель, вы реализуете спецификацию. Ваш код должен быть безликим, чтобы человек, который будет работать с вами просто вносил необходимые изменения, не тратя время на осознание вашего 'авторского стиля'.
Напомню, что код пишется для людей. Если кроме вас его никто не может понять, то бизнес зависит от того, как успешно вы уворачиваетесь от автобусов. Завтра вы написали заявление по собственному — код можно выкидывать.
Впрочем, вы сами написали это ниже:
Не можете написать просто и эффективно — страдайте.
.net core реализует большую часть .net fx, а тому скоро третий десяток лет пойдёт.
Предыдущий пункт — на оригинальном дотнете десятилетиями пишут.
Сначала они пришли за навальнистами.