Здравствуйте, undo75, Вы писали:
U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа U>переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Берешь и плавненько, в тех местах, где тебе код приходится так или иначе трогать — рефакторишь. Не по всему проекту и целенаправленно, а там, где так или иначе нужно вносить правки (на уровне файла, класса и функции — залез в код, причеши, разобрался что за хрень — поставь коммент, поставь TODO и тому подобное). Мелкими шагами, день за днем. Обучить подобному коллег, показать как нужно писать, внести практики code review и тому подобное чтобы остальные приучались к нужному стилю и перенимали компетенции. Максимально настойчиво это все делаешь, сам говнокодишь минимально, стараешься писать так, чтоб остальным гадить было стыдно (увы, не всегда и не со всеми работает). Плавненько зарабатываешь авторитет (как у коллег, так и у начальства) и когда его заработал — уже выдавливаешь из процесса принятия решений всяких необучаемых, через определенное время они сами уволятся. Полнейших говнокодеров необучаемых абсолютно будет меньшинство, это один два человека, остальные так или иначе обучатся.
Либо перенести во флейм (если истинная цель — покидаться какашками, выпустить пар и показать всем, какие они нехорошие, а ты д'Артаньян и весь в белом).
Либо же:
— успокоиться
— перестать истерить
— конкретно описать по пунктам, что не нравится, почему и своим вопросом
Пока ты просто истеришь без всякой конкретики и описал типичную работу и контору (в том числе из БигТеха).
Здравствуйте, CEMb, Вы писали:
CEM>А скоко платят-то?!? Быстрее пиши название конторы!!!
CEM>А по делу: ну включи пофигизм, трать "свободное" время на обучение и поиск новой работы.
Мне кажется, если проработать несколько лет, неторопясь копая говнокод "на отвали" за хорошие бапки, то можно и вовсе утратить профессиональный навык. Потом ничего другого уже и не захочется (да и не осилишь).
короче стремная контора
на меня сыпют инцеденты.
куча проектов. половина не собирается. везде говнокод типа
try
{
// куча кода
}
catch()
{
// тут кода нет
}
никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами.
задаешь простой вопрос на который можно ответить да-нет-не знаю
отклик день.
кто сталкивался? как вести себя? включить пофигизм?
по всемму коду раскиданы магические числа
переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Здравствуйте, undo75, Вы писали:
U>короче стремная контора U>на меня сыпют инцеденты. U>куча проектов. половина не собирается. везде говнокод типа U>
U>try
U>{
U>// куча кода
U>}
U>catch()
U>{
U>// тут кода нет
U>}
U>
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день. U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа U>переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Нужно уметь находить в каждой ситуации положительные стороны. Судя по тому, что ты пишешь, у этого кода нет настоящего хозяина и этим хозяином можешь стать ты. При желании, конечно.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, bnk, Вы писали:
bnk>Не ну начинать можно по минимуму, типа сначала все правила закомментировать и добавлять по одному. Сколько там может быть пустых catch? Ну не тысячи же.
Вы недооцениваете масштабы катастрофы обычно это десятки если не сотни тысяч
Здравствуйте, undo75, Вы писали:
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день. U>кто сталкивался?
Очень знакомая боль. Столкнулся в возрасте под 40 когда перешёл, как выше пишут, в бигтех. Сначала не понимал что вообще происходит и почему всем, как мне казалось, насрать. Начальство разводило руками. Коллеги говорили — ну да, у нас вот так, надо иметь навык пробивания нужного тебе человека.
В итоге нашёл людей, которые отвечают оперативно, с ними и работаю. Главное лишние глупости не задавать, а то тоже игнорировать начнут)
Забивать не вариант, нафиг ты такой тогда нужен? Нужно пробиваться и через не могу давать результат. Если задача горит, контакт один, долбить звонками
Здравствуйте, amironov79, Вы писали:
A>Здравствуйте, bnk, Вы писали:
bnk>>Это ты этот код писал что ли? bnk>>Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь
A>Tools, Extensions... имя им легион
Здравствуйте, amironov79, Вы писали:
bnk>>Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь
A>Tools, Extensions... имя им легион
Здравствуйте, amironov79, Вы писали:
A>Такого в условии не было Но в любом случае реагировать лучше явно в catch.
В условии сказано что таких мест чуть более чем дохрена, и сразу такие реакции не написать. Следовательно надо далать это постепенно, выявляя горячие места и последовательно раставляя заплатки.
И расставить подобные вставки можно скриптом. И их можно легко включить и отключить.
А централизованое реагирование позволяет анализировать и воздействовать на происходящее значительно проще.
Здравствуйте, undo75, Вы писали: U>короче стремная контора U>на меня сыпют инцеденты. U>куча проектов. половина не собирается. везде говнокод типа U>
U>try
U>{
U>// куча кода
U>}
U>catch()
U>{
U>// тут кода нет
U>}
U>
Заведи вспомогательный класс
типа AppHelper
public class AppHelper {
static string shortfilename(string fn) { return fn==null ? "" : Path.GetFileName(fn).ToLower(); }
static public void log(string fmt, params object[] args) {
Console.WriteLine(fmt, args);
}
static public Func<Exception, string, bool> hook_filter = null;
static public Action<Exception, string> hook_rethrow = null;
static string get_location(Exception e) {
string loc = "";
var st = new StackTrace(e, true);
if (st.FrameCount > 0) {
var f = st.GetFrame(0);
var m = f.GetMethod();
loc = String.Format("{0}:{1}:{2} {3}.{4}",
shortfilename(f.GetFileName()), f.GetFileLineNumber(), f.GetFileColumnNumber(),
m.ReflectedType.FullName, m.Name
);
}
return loc;
}
static public void exception(Exception e, string reference) {
bool skip = false;
var filter = hook_filter;
if (filter != null) skip = filter(e, reference);
if (skip) return;
var st = new StackTrace(true);
log("{0}(#{1}): {2}", e.GetType(), reference, e.Message);
string tab="";
for (var ce = e.InnerException;ce != null;ce = ce.InnerException) {
tab = tab + " ";
log("{0}{1}({2}): {3}", tab, ce.GetType(),get_location(ce), ce.Message);
}
for (int i = 1;i < st.FrameCount;i++) {
var f = st.GetFrame(i);
var m = f.GetMethod();
log("\t{0}:{1}:{2} {3}.{4}",
shortfilename(f.GetFileName()), f.GetFileLineNumber(), f.GetFileColumnNumber(),
m.ReflectedType.FullName, m.Name);
}
var rethrow = hook_rethrow;
if (rethrow != null) rethrow(e, reference);
}
}
И везде в коде catch() {} замени на catch(Exception e) { AppHelper.exception(e, "unique_name"); }
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день. U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа
Здравствуйте, alzt, Вы писали:
A>Не факт, что нет, просто может хозяин не считает нужным отвечать всем джунам. A>Сейчас ТС что-то сломает, поменяв какую-то неочевидную часть, и хозяин выскажет руководству — кого вы вообще тут наняли?
Зато, может, хозяин обнаружится, наконец. Я ж говорю, в каждой ситуации можно найти что-то положительное.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, kov_serg, Вы писали:
_>Заведи вспомогательный класс типа AppHelper
Это ты этот код писал что ли?
Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь
Вообще обработка ошибок — признак сеньорского кода, так что это нормально.
Но конкретно с вот этим вот выше даже линтер справится.
В смысле, я бы начал с его добавления на сборке (у топикстартера же есть автоматическая сборка, да? ведь есть же?), чтобы хрень с пустым catch хотя бы не пропускало.
Здравствуйте, bnk, Вы писали:
bnk>Это ты этот код писал что ли? bnk>Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь
Здравствуйте, bnk, Вы писали:
_>>Заведи вспомогательный класс типа AppHelper bnk>
bnk>Это ты этот код писал что ли?
Да вроде еще помню этот c#. Или где-то накосячил сильно? bnk>Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь
Там есть кнопочка refactor всегда можно поменять на более вменяемое.
bnk>Вообще обработка ошибок — признак сеньорского кода, так что это нормально.
А вот не обработка ошибок, признак того что всё писалось в спешке, в очередной дедлайн и надо было уже позавчера. И что б не вываливало исключения, пользователю в какой то момент всё было автоматически обёрнуто в try catch
Короче авдиевы конюшни появляются не сразу, это постепенный поцесс.
bnk>Но конкретно с вот этим вот выше даже линтер справится. bnk>В смысле, я бы начал с его добавления на сборке (у топикстартера же есть автоматическая сборка, да? ведь есть же?), чтобы хрень с пустым catch хотя бы не пропускало.
Ну не пропустит оно 45тыс файлов и не соберёт и что? Откуда начинать в первую очередь?
Здравствуйте, kov_serg, Вы писали:
bnk>>Но конкретно с вот этим вот выше даже линтер справится. bnk>>В смысле, я бы начал с его добавления на сборке (у топикстартера же есть автоматическая сборка, да? ведь есть же?), чтобы хрень с пустым catch хотя бы не пропускало.
_>Ну не пропустит оно 45тыс файлов и не соберёт и что? Откуда начинать в первую очередь?
Не ну начинать можно по минимуму, типа сначала все правила закомментировать и добавлять по одному. Сколько там может быть пустых catch? Ну не тысячи же.
Здравствуйте, m2user, Вы писали:
M>Какая информация добавлена в твоем "прототипе" относительно стандартного?
reference + hooks M>В чем состоит независимость от локали, если ты используешь Exception.Message?
Вы за деревьями не видите леса?
M>>Какая информация добавлена в твоем "прототипе" относительно стандартного? _>reference + hooks
Это средства фильтрации. Мой вопрос не про них, а про трассировку.
Зачем нужна своя реализация обхода InnerException, StackTrace и пр., если всё это делает и Exception.ToString()?
M>>В чем состоит независимость от локали, если ты используешь Exception.Message? _>Вы за деревьями не видите леса?
Вообще не вижу, причем здесь локаль, поэтому и спрашиваю.
bnk>Это ты этот код писал что ли? bnk>Вообще есть такое буддийское правило — все что имеет суффикс или префикс "Helper" или "Utils" должно быть утилизировано в первую очередь
еще могу назвать пару правил как нельзя лучше подходящих для моей ситуации:
— не тронь говно — вонять не будет
— инициатива наказуема исполнением
R>Ну вот и бери руль в свои руки. Через некоторое время станешь незаменимым спецом.
ощущение что наоборот. тут как я понял полный пофигизм и ощущение, что идилию разрушаю... вот на днях. приходит письмо типа какого хрена заявка (не на мне заявка) нифига не делается. ну там чувака по некоторым вопросам проконсультировал. под конец дня пишу ему, мол че там как с нервной женщиной? — не в курсе. не пишет — значит нормально все...
Здравствуйте, undo75, Вы писали:
U>короче стремная контора U>на меня сыпют инцеденты. U>куча проектов. половина не собирается. везде говнокод типа U>
U>try
U>{
U>// куча кода
U>}
U>catch()
U>{
U>// тут кода нет
U>}
U>
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день. U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа U>переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Потихоньку приводить в порядок, ставить начальство в известность чем и почему занимаешься.
Упд: выше уже написали, что это как бэ норма. Ничего такого особенного. Потихоньку разгребать, наметить план работ и т.п.
Здравствуйте, rg45, Вы писали:
R>Нужно уметь находить в каждой ситуации положительные стороны. Судя по тому, что ты пишешь, у этого кода нет настоящего хозяина и этим хозяином можешь стать ты. При желании, конечно.
Не факт, что нет, просто может хозяин не считает нужным отвечать всем джунам.
Сейчас ТС что-то сломает, поменяв какую-то неочевидную часть, и хозяин выскажет руководству — кого вы вообще тут наняли?
Здравствуйте, amironov79, Вы писали:
_>>И везде в коде catch() {} замени на catch(Exception e) { AppHelper.exception(e, "unique_name"); }
A>А почему просто не воспользоваться стандартным логгером?
A>
A>_logger.LogError(e, "skipped exception");
A>
Потому что помимо логирования иногда надо реагировать на эти исключения, причем выборочно или по определённым правилам.
Здравствуйте, kov_serg, Вы писали:
_>Потому что помимо логирования иногда надо реагировать на эти исключения, причем выборочно или по определённым правилам.
Такого в условии не было Но в любом случае реагировать лучше явно в catch.
Здравствуйте, m2user, Вы писали:
M>А вот эта самописная реализация Exception.ToString() она в каких случаях будет отличаться от встроенной?
Это просто прототип, стандартная не информативная. Более того она может быть разной в зависимость от локали.
M>>А вот эта самописная реализация Exception.ToString() она в каких случаях будет отличаться от встроенной? _>Это просто прототип, стандартная не информативная. Более того она может быть разной в зависимость от локали.
Какая информация добавлена в твоем "прототипе" относительно стандартного?
В чем состоит независимость от локали, если ты используешь Exception.Message?
S>Потихоньку приводить в порядок, ставить начальство в известность чем и почему занимаешься.
не вариант — кода подобно авердофига. никто ничего не знает (как вариант — пофиг) если на это подписаться — помнож на время отклика. или даже в степень возведи...
S>Упд: выше уже написали, что это как бэ норма. Ничего такого особенного. Потихоньку разгребать, наметить план работ и т.п.
M>Зачем нужна своя реализация обхода InnerException, StackTrace и пр., если всё это делает и Exception.ToString()?
Для примера. Можно сделать как удобнее. В том числе stacktrace использовать для фильтрации. В стандартной Exception.ToString() stacktrace нет.
M>Вообще не вижу, причем здесь локаль, поэтому и спрашиваю.
Локаль обычно приводит к 3.14 -> 3,14 и лучше выставить какую-нибудь CultureInfo.InvariantCulture что бы было единообразно, особенно если на разных компьютерах собираются логи.
J>Это не говонокод , это "заглушки" J>Так пишется когда надо быстрее передать клиенту "рабочую программу" . J>Обычная практика.
по рукам бьют за такую практику. когда продакту доступа нет, логгер отрублен (да и не помог бы если бы так писать) что-то происходит — хрен че поймешь что...
Здравствуйте, undo75, Вы писали:
U>короче стремная контора U>на меня сыпют инцеденты.
IT-проекты нельзя оценивать по внешним факторам — это главная проблема. Можно сделать быстро сиюминутно, но дорого или не возможно в поддержке.
По этому начальник, который за все отвечает, должен смотреть код. Ну или 100% доверять человеку, который код пишет — доверять как брату родному, знать что там все хорошо.
Часто код не поддерживаемый и все что можно — оттянуть крах еще на некоторое время.
U>куча проектов. половина не собирается. везде говнокод типа U>
U>try
U>{
U>// куча кода
U>}
U>catch()
U>{
U>// тут кода нет
U>}
U>
Логгер! Во всех таких случаях добавить логирование для начала.
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день.
Если они готовы платить за ожидание — не проблема.
U>кто сталкивался? как вести себя? включить пофигизм? U>по всемму коду раскиданы магические числа U>переменные с сокращениями. короче так бы код писал ни одного собеса бы не прошел
Постепенно рефакторить то, с чем приходится работать. Сколько размер исходников проекта в мегабайтах?
Здравствуйте, undo75, Вы писали:
A>>Деньги то хоть платят?
U>это да. причем первую контору в моей жизни встречаю, где бы платили за день до графика выплат )
Тогда всё в твоих руках Если тебя действительно беспокоит качество кода, то выходи на руководство, предлагай конкретные шаги по улучшению: попроси какой-нибудь проект, который можно зарефакторить или частично переписать, внедри на нем ревью кода. На основе этого уже сделаете выводы, эффективен такой стиль разработки или контору больше устраивает "херах, херах и в продакшен".
A>Тогда всё в твоих руках Если тебя действительно беспокоит качество кода, то выходи на руководство, предлагай конкретные шаги по улучшению: попроси какой-нибудь проект, который можно зарефакторить или частично переписать, внедри на нем ревью кода. На основе этого уже сделаете выводы, эффективен такой стиль разработки или контору больше устраивает "херах, херах и в продакшен".
Посмотрев предыдущие темы ТС можно заметить, что он весьма часто меняет работу.
Поэтому внедрять какие-то масштабные изменения в характере разработки несколько опрометчиво. Я бы даже сказал безответственно, и ТС это вероятно понимает.
M>Посмотрев предыдущие темы ТС можно заметить, что он весьма часто меняет работу. M>Поэтому внедрять какие-то масштабные изменения в характере разработки несколько опрометчиво. Я бы даже сказал безответственно, и ТС это вероятно понимает.
конечно понимаю. но ща надо бы из-за возраста залипнуть бы где-то надолго.
кстати почти всегда работу менял по разным обстоятельствам: переезд, женитьба и переезд, закрытие проекта, болезнь родственника и переезд. из субъективного было: не желание гробить себе жизнь в 25 лет в конторе без каких либо перспектив, нежелание чтоб мотал нервы руководитель, предложение большей зп и условий, собственно выгорание.... короче 50 на 50 у меня объективных причин и субъективных....
Здравствуйте, undo75, Вы писали:
U>конечно понимаю. но ща надо бы из-за возраста залипнуть бы где-то надолго. U>кстати почти всегда работу менял по разным обстоятельствам: переезд, женитьба и переезд, закрытие проекта, болезнь родственника и переезд. из субъективного было: не желание гробить себе жизнь в 25 лет в конторе без каких либо перспектив, нежелание чтоб мотал нервы руководитель, предложение большей зп и условий, собственно выгорание.... короче 50 на 50 у меня объективных причин и субъективных....
Ну тогда отличное место, чтобы закрепиться и наладить процесс разработки. При условии конечно, если тебе это интересно и сможешь получить поддержку руководства.
J>>Это не говонокод , это "заглушки" J>>Так пишется когда надо быстрее передать клиенту "рабочую программу" . J>>Обычная практика.
U>по рукам бьют за такую практику. когда продакту доступа нет, логгер отрублен (да и не помог бы если бы так писать) что-то происходит — хрен че поймешь что...
Например в финтехе это обычная практика. Мне часто приходиться работать на площадке клиента .
В этом нет ничего плохого . Клиент сам выбирает из "быстро ,дешево ,хорошо"
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Здравствуйте, rg45, Вы писали:
A>>Не факт, что нет, просто может хозяин не считает нужным отвечать всем джунам. A>>Сейчас ТС что-то сломает, поменяв какую-то неочевидную часть, и хозяин выскажет руководству — кого вы вообще тут наняли?
R>Зато, может, хозяин обнаружится, наконец. Я ж говорю, в каждой ситуации можно найти что-то положительное.
Да, останешься без работы, когда нужны денег и не ожидал увольнения.
Зато уйдёшь из токсичной компании.
U>никто не знает где че живет. информацию добываю по крупицам с очень большими проблемами. U>задаешь простой вопрос на который можно ответить да-нет-не знаю U>отклик день.
Это нормально. Просто вся предыдущая команда уволилась, а проект делать надо. Вот, нашли тебя. Ищи другую работу просто, да и все