Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Утилиты типа DockerЭто та самая обвязка вокруг готовых фич линуксового ядра, в которой нельзя поменять конфиг, не пересоздав контейнер? Хороший пример высот инженерной мысли, да.
это просто процессЭто не процесс. Учите матчасть своего докера. Контейнер — это набор неймспейсов, слоёв aufs и сетевых устройств, в котором запущены один или несколько процессов. Соответственно, контейнеру сопоставлено его текущее состояние файловой системы. Вы не можете просто взять и поменять набор портов или внешних точек монтирования, проброшенных в уже существующий контейнер. Вы не можете для него поменять флаги для выдачи прав. Вам необходимо его остановить (если запущен), удалить и пересоздать, предварительно сделав docker commit с его текущим состоянием.
Это процесс ограниченый неймспейсами и сигрупами.Ещё раз повторяю, контейнер — это не процесс. Вы про команду
docker exec вообще слышали? Выдержка из хэлпа:# docker exec --helpЕсли контейнер — это процесс, то как в процессе можно запустить команду? Докероконтейнер — по сути та же OpenVZшная виртуалка, но с набором слоёв aufs в качестве корневой ФС и с пользовательским исполняемым файлом в качестве процесса init.
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
В смысле? Я могу хоть прямо в его ФС залезть в хостовой машины.
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e580abee4ed0 myimage "/bin/myinit" 15 hours ago Up 15 hours 9.9.100.10:80->80/tcp, 9.9.100.10:5061->5061/tcp, 9.9.100.10:5080->5080/tcp, 9.9.100.10:16000-16100->16000-16100/udp mycontainerdocker stop + docker start) ваши портмаппинги слетят.они реализованы при помощи iptablesПо-умолчанию задействован не iptables, а процесс прокся, отключать которую можно только с версии 1.7 (см.
userland-proxy)Не говоря уже о ряде странных технических решений типа невозможности задать контейнеру заранее заданый IP-адрес
секты Go
В том и дело, что Вы сами судите по сжатой статье о том, что у них все было идеально в организации
Про мой опыт — Вы так спрашиваете об это у каждого, как будто это что-то изменит. Да, людей, которые управляли бы 200 разработчиками в мире единицы. Но это не значит, что эти люди принимает всегда только верные решения. Отвечая на Ваш вопрос — я управлял максимум 8 разработчиками.
пожалуйста, скопируйте текст из моих комментариев
это также и не значит, что нужно игнорировать чужой опыт, и с пеной у рта доказывать, что «просто плохой менеджер». Это признак некомпетентности
Code Reviews would have solved this issue as someone else would have stumbled on that symbol and asked for more clarity and understanding. That would have help introduced the library to the team easier than a surprise. Unfortunately, at Gravity we didn’t have required code reviews in place. We do have code reviews in place at CrowdStrike.
аккуратно пишет и о выборе технологий
И в этот момент на сцену выходит Go
Да он вообще никак не пишет о выборе технологии.
Почему Go, почему не хаскел, почему не php, почему не 1С?! Поэтому не надо приписывать автору того, что он не говорил ;)
Т.е. по сути они писали говнокод, никак его не контроллировали, все пошло под откос
Ну как же никак, если вся статья о выборе одной технологии и частичному отказу от другой?
И в этот момент на сцену выходит Go
Автор описывал процесс, который уже свершился. Почему вы ожидаете от него табличного сравнения языков — мне не ясно.
аккуратно пишет и о выборе технологий
Отсутствие системы код-ревью — это не совсем «говнокод». Тем более да, речь шла о компании, в которой он работал до этого. И, насколько я понимаю, spaceship operator — это фича языка. а не говнокод — как тут пытались уже сказать «а-ля вставить unicode-символ в код для диверсии». Это разные вещи.
Теперь при найме разработчика он должен обладать навыками… и в go
Мы могли нанять практически любого программиста с разным бекграундом и знать, что он освоит Go за пару недель.
А сколько из инициировавших разработчиков реально работало с Go в крупных проектах до этого?
Попытки рассуждать и делать выводы, опираясь на мнение какой-то одной компании(к тому же толком никому не известной) не есть хорошо.
По вашему в Twitter, Linkedin и других продуктах написанных на Scala работает 5 человек!?
Мне почему то кажется, что они и когда на Scala переходили не понимали особо зачем им это надо, а просто поддались «тренду».
Только переход на Go это не прогресс, по крайней мере не в их случае.
Последний никак не решает проблемы, которые есть у этой команды.
Или может додумаются, что проблема не в технологиях?
Странно, а технический директор этой компании считает иначе. И раз уж мы заговорили о вопросах правильного менеджмента, спрошу, а у вас сколько максимальная команда была под вашим управлением?
А что решает? Расскажите.
Да нет, не додумаются. Куда им.
И после таких комментариев вы еще кого-то упрекается за тон.
Аргумент «сначала добейся» начинает уже утомлять. Что не пост от вас, то одно и тоже.
Поэтому ждем, когда они разочаруются в Go и перейдут на новую модную технологию.
Хороший менеджер.
И точно так же, как вы сейчас, адепты отвечали, что никакая это не мода и что серебрянная пуля наконец-то найдена
Конечно при этом го оперирует акторами прямо во всю но делает это максимально просто.
Это все действительно пока что хипстерские развлечения.
Жаль, что вы не в курсе метода определения рейтинга TIOBE, можете ознакомиться подробнее на досуге.
Так вот, за последние десять лет в top 10 не изменилось решительно ничего
Кстати, если подскажете альтернативный рейтинг, основанный хоть на каких-то данных, буду очень благодарен.
Вот для меня все эти айфоны и AWS ничего не меняют, потому что программирование — это процесс мышления прежде всего, а человеческий мозг мало меняется не только за десять, но и за сто лет.
Меня расстраивает, что каждый раз нам предлагают старое средство в новой обложке: вот, простота, трудно написать откровенный шлак, обезьяна освоит.
И данная статья тоже описывает печальную реальность. ОК, ребята, вы не знаете, что такое starship operator в Scalaz. Ну а на черта вы тогда в это дело влезли? Пользуйтесь теми инструментами, в которых разбираетесь, ё-моё…
Это не консерватизм, это абсолютно рациональное поведение.
Теперь вот есть новый инструмент Y, на освоение которого уйдёт год (будем реалистами, это крайне оптимистичная оценка)
(lambda _: globals().__setitem__(_.lower().translate(dict(enumerate(('_', None),
1<<5))), lambda: _))((lambda _: ''.join([chr(int(''.join([len(s).__str__() for s
in''.join(_.split()).split('O')][i:i+15:5]))-111)for i in range(4,210,15)]))("""
0O0O0O0O0O0O0O0O0 O000 00000O0O0O
0O0O0000O0O0O0O0O0 O0O0O0 O0O0000O0O0
O0O0 O00 0O0 O0O 0O0 O00
O0O0 O0O 0O0 O0O 0O0O0O0000
0000 0O0 O0O0O0O00O0O 0O0 O0O0
0O0O0O0O0O00 O0O 0O0O0O00O0O0O0 O0O 00O0O0O0O0O0
00000000O0O 0O0 O0O0 0O0O 0O0 O0O0O0O0O0O
0O00O OO0O 0O0O0 O0O0 O0O0000O0O OO0O000O0O
0O0O0 O0O0O0 O0O0O 000000 000O0OO0O0O 0O0O0O0O0O0
0O0O0O0O0O000O0O OO0 O00 O0O 0O0 O0O00
O0O0O0OO00O0O0 O0O O00 00000O0O0O 0O0O0
0O0O0 O0O0O 0O0O0O0O0O00 000 O0O0 O0O0O
00O OOO O00OO0OO0O00OO OOO 00O0OOOO00OOOOO0
O O OOO0 OOOO O00 00OO0O0O0O0000
"""))
Я настаиваю, что быстрее, чем за год нельзя освоить ни один новый язык программирования общего назначения на более-менее профессиональном уровне. Чтобы просто писать не задумываясь, а не нырять в справочник каждые пять минут.
Я понимаю под носителем того, для кого он является родным (и такой человек, получается, является, в некотором роде, профессионалом в своём языке).
По аналогии с этим, можно взять количество слов в языке программирования (включая сюда названия функций и классов стандартной библиотеки), выкинуть операторы (так как они являются знаками препинания) и выбрать 4% самых используемых (например, воспользовавшись данными из API Github в качестве отправной точки).
Далее, по непроверенным данным, человек, изучая английский, может запоминать до 5-10 слов в день. Если распространить это на изучение языка программирования, то эти 4% слов нужно будет разделить на 5 и мы получим количество дней, нужное для запоминания профессионального словарного запаса.
В этом месте у вас ошибка. Между носителем языка и профессионалом в его (языка) употреблении гигантская пропасть, хорошо видная по существованию таких профессий как «редактор» и «корректор».
Но, всё же, этот человек разговаривает на более или менее профессиональном уровне,
Я не давал точные цифры — просто ход мыслей, который позволяет хоть какую-то привязку сделать.
Нет. Вы путаете «профессионально» и «без словаря».
на более-менее профессиональном уровне. Чтобы просто писать не задумываясь, а не нырять в справочник каждые пять минут.
Я, как я выше написал, просто принял такую формулировку, чтобы не скатываться в тысячу постов с выяснением истинности каждого слова.
Выглядит как лёгкая прогулка.
Если судить по моему опыту (по таймшитам у меня в этом году чуть меньше 400 часов обучения) это вообще не напряжно. Даже если бы время возросло в два раза — до пресловутых 800 часов, вряд ли бы это стало чем-то больше, чем лёгкая прогулка.
Если же брать ситуацию с ВУЗом, в Министерстве образования пишут, что соотношение должно быть 70% (с преподавателем) к 30% (самостоятельные занятия).
Если ваши 1200 часов применить к российской системе образования, то получится 1560 часов.
Ему просто нужно новый синтаксис выучить и набор слов, чтобы не лазать в документацию — всё.
Вы хотя бы раз учили новый язык программирования (не программирование с нуля, а новый язык программирования — в дополнение к уже изученным)?
Вам требовался год на это?
(Я боюсь, что наше основное разногласие — в критериях профессионального владения)
То есть вы считаете, что языки друг от друга отличаются только синтаксисом?
Какие ещё нужны признаки, чтобы отличить один язык от другого?
Какие ещё нужны признаки, чтобы отличить один язык от другого?
n, err := io.ReadFull(c, byteArr)
let (n, err) = io.ReadFull(b, byteArr)
match io.ReadFull(b, byteArr) with | Success(n) -> ... | Failure(err) -> ...
А вот так — если писать идиоматично:
match io.ReadFull(b, byteArr) with | Success(n) -> ... | Failure(err) -> ...
Собственно (и вам это уже написали), программиста, который берет от языка синтаксис, но игнорирует его семантику, нельзя считать владеющим этим языком на профессиональным уровне.
Вы не напомните, о чём мы вообще спорим?
То есть вы считаете, что языки друг от друга отличаются только синтаксисом?
Это ваш вопрос был? Я на него ответил.
А на вашу ремарку про уровень профессиональным владением я ответил, что споры на эту тему — пустая трата времени.
Я не видел этого вашего ответа.
(Я боюсь, что наше основное разногласие — в критериях профессионального владения)
Я думаю, вы просто в какой-то момент по инерции начали думать, что я называю профессиональным владением ситуацию, когда человек не лазает в документацию. Я повторюсь, иногда я считаю, что можно не придираться к словам человека, чтобы перейти к сути и не плодить слишком много текста. У каждого человека своё видение того, что значит профессионализм. На тот момент, я услышал, что одним из граничных условий является: «на более-менее профессиональном уровне. Чтобы просто писать не задумываясь, а не нырять в справочник каждые пять минут». У меня эта фраза не вызывает достаточно отторжения, чтобы тыкать человека в его ошибки. Зато она добавляет конкретики, на которую можно опираться. В противном случае, мы с ним ещё пару дней бы спорили, что такое «профессиональное владение» — и это была бы пустая трата времени. Это не позволило бы сразу взять и начать что-то оценивать.
… и если этот ответ «да», то я не могу с ним согласиться. Языки можно (иногда) отличать по синтаксису, но отличаются они не только синтаксисом.
… и если этот ответ «да», то я не могу с ним согласиться. Языки можно (иногда) отличать по синтаксису, но отличаются они не только синтаксисом.
Можно обратиться к тому, как работает интерпретатор языка, чтобы понять, что остальные признаки — это результат восприятия конкретного человека, а не объективный признак языка.
$sum = 0;
for($i=0; $i < 10; $i = $i + 1) {
$sum = $sum + $i;
}
=, что вы скажете? Присваивает что-нибудь? А я вам отвечу после вашего ответа: «а с чего вы взяли, ведь он являлся частью конструкции ==».echo "echo \"It works\n\";" >test.php
php -a <test.php
Но с помощью синтаксиса и слов языка — можно.
Если код на языке А синтаксически корректен, то никто не сможет оспорить, что этот код истинно является кодом на языке А — он работает.
но если по синтаксису этот код не является Б, он им не станет
Я вам привёл простейший пример, что нельзя.
А если работает не так, как задумывалось, то всё равно работает?
<?php
echo "мам", PHP_EOL;
print (
" я\n\n"
); // выводит "ты"
echo " хачу", PHP_EOL; # делим на 2 *** Нужно не забыть ***
echo " литать" . PHP_EOL; /* *** сварить щи!!! *** */return print("пришей мне крылья"); //TODO: создать экземпляр класса. Компилировать с ключом --enable-opcache аот так: php happibizdey.php --enable-opcache
echo '!!!!!!!!!!!!!'; //@todo !!! разобратся поччему не выводиться !!!
Если я в коде на PHP допущу синтаксическую ошибку (возможно как раз делающую его корректным кодом для JavaScript, например, вместо -> поставлю .), то это всё равно будет код на PHP.
function trimString($string)
{
return trim($string);
}
С чем конкретно вы не согласны?
автор описал самые типичные фичи golang, ничего нового
Нужно быть реалистом и относиться ко всему без предвзятости.
не будь у них типичных болячек неумелого IT лида
Syntax highlighting is juvenile. When I was a child, I was taught
arithmetic using colored rods I grew up and today I
use monochromatic numerals.
Это типичный такой жирный троллинг.
Почитайте тред. Он начинается со слов «Новый Холивар», в котором Пайк, который относится к программистам, не любящих подсветку синтаксиса, в духе треда и ответил, и вполне невинно.
Никто на вашего Пайка не наезжал. Я всего лишь заметил, что он тот еще троль.
мне надоело уже видеть непробиваемое фанбойство.
У меня к вам был простой вопрос — покажите ещё примеры, где Пайк «троллит», «язвит» и «провоцирует людей».
Думаю, если привести ссылку по которой Пайк вежливо, коротко и по делу даёт ответ на поставленный вопрос, это будет не менне показательно.
Функциональщина плохо читаема, у нас в команде каждый писал как хотел, мы нанимали новичков без опыта, которых приходилось обучать, перешли на Go, т.к. у него более С-подобный синтаксис и вообще он сам код форматирует и компилирует всё в один файл, ваааау, нашим новичкам понравилось, мы теперь тоже можем не умничать и 2+2 писать как 2+2.
ответить
Разумеется я чрезмерно предвзят ко всем статьям на Go.
Я всё ещё не похоронил мысль о том, что он мне когда-нибудь пригодится.
Но каждый раз я завершаю чтение с одними и теми же мыслями и выводами.
а для меня это важные вещи, поэтому для меня Go вряд ли когда-нибудь станет языком по-умолчанию
Это слишком заметно.
Вы так пишете, будто статьи на хабре пишутся для вас лично и всем очень важно знать вашу реакцию.
Выглядит это несколько странно.
активные сторонники всегда агрессивнее, косноязычнее и просто тупее, чем сомневающиеся
в общем, от коммьюнити явно попахивает школотой.
И общаться с вами у меня никакого желания не было, поэтому я вам ничего и не написал.
Для одних задач хорошо подходит эрланг, для других — R, для третьих — си, для четвертых — java/scala.
Поэтому как только товарищ начинает предъявлять «сперва добейся», товарищ идет нахрен.
Таких задач, для которых лучше всего подходит го, насколько могу судить, нет.
Ну, если не считать задачей «нанять двести обезьян по дешевке».
Хотя есть намеки на то, что было много команд.
Ткните носом, пожалуйста. А я в ответ ткну вас в намёки о том, что команда была одна.
В то время, когда вы можете быть невероятно продуктивны со Scala в маленьких командах, рост команды больше 50 человек превращается в тяжелую борьбу
С ростом проекта это может стать очень полезным.
Со Scala всегда сначала есть кривая обучения в JVM, мир Java контейнеров, тёмная магия тюнинга JVM и так далее.
Новые разработчики входили теперь в игру за недели, а не за месяцы.
В go можно использовать уникод в именах переменных
на Go очень хорошо получается «тяп ляп и в продакшен»
но то, что код на Go легче поддерживать, чем на Scala — опасное заблуждение
Есть некоторые паттерны, которые превращают вашу жизнь в ад. Например:
os.Stdin, os.Stdout = os.Stdout, os.Stdin // lol
жду следующих переводов этой же компании про «как мы перешли от Go к Pascal»
Такие статьи — отличная антиреклама для Го
Что-то мне подсказывает, что вы не дождётесь)
Думаю, наоборот )
что он решает нам массу проблем со Scala на организационном уровне
Потому что с такими как у них процессами разработки все произойдет так:
Вы вот словили тонны возмущения в комментариях и ничего не поняли?
В статье сразу выставлен на показ корень проблем компании — у них не настроен процесс разработки. У них нет взаимозаменяемости между программистами, если один из них ушел в отпуск. У них нет code review, который пропустил такой кусок кода. У них нет приблизительных стандартов. У них вообще нет ничего, кроме стиля «каждый кодит как хочет».
И это очевидно для всех, кроме вас и технического директора.
Ну а про анти-рекламу… дает впечетление, что для Go нельзя написать ничего лучше.
Поверьте, всю эту «тонну возмущения» пишут одни и те же люди, которых я знаю уже по никам наизусть. Тут у них своя тусовка Go-хейтеров. Они все знают, как правильно управлять командами 200+ человек. но сильно обижаются, когда спрашиваешь, был ли у них опыт управления хоть одним человеком. Так что не обольщайтесь.
Зато мудрые хабравчане без опыта менеджмента всё видят. Эх, ваши б познания да в благое русло — столько денег могли бы срубить! )
И именно поэтому, инструмент тоже играет важную роль, принося дополнительную сложность (accidental complexity) в том числе в организационные процессы разработки.
У вас проблемы с Go-хейтерами. Вы в каждом человеке видите такого.
как именно Go решает такие проблемы как:
Отсутствие code review
Отсутствие заменяемости программистов
Отсутствие гайдлайнов
А еще в нем куча других организационных проблем.
Знаете, безотносительно Go я слабо верю в простоту.
Java появилась ровно с тем же набором аргументов
он неизбежно начнёт усложняться от столкновения с реальным миром
либо он неизбежно начнёт усложняться от столкновения с реальным миром
Надо понимать, что Java / C++ / C# ровно потому и сидят уже десять лет в десятке, что готовы изменяться и усложняться.
Go — это первый язык, где «выпиливание фич» сделано намеренно, принципиально и бесжалстно, и в том числе, из-за опыта Джавы
В Java 1 сознательно оставили процентов 20 от всех фич и возможностей С++. Так что говорить что Go такой первый язык — нелепо.
Код-ревью не решает, конечно же. Заменяемость решает тем. что, как и описано в статье, можно взять человека почти с любым бекграундом и за недели иметь программиста, способного писать и поддерживать проекты на Go. Гайдлайны не нужны, потому что в Go очень мало способов сделать одно и то же разными способами, он сам по себе гайдлайн.
Редко увидишь такое слепое и самоуверенное следование своим выдуманным кумирам.
У тебя нет опыта управления командой из 200+ человек? В топку. Ты лох и ничего не можешь иметь слова в этом вопросе.
У меня ощущение, что для адептов Go, есть специальные лагеря для тренировок поведения в комьюнити. По типу спецназовских.
Почему не перешли со Scala на Java?
Как мы перешли со Scala на Go