?

Log in

No account? Create an account
walther_v [userpic]

Профессиональный рост

Сентябрь, 24, 2012 (10:08)

xxx: Хотя вот если смотреть по уровню ЗП, то неясно за что 1Сникам платят такие деньги? Ява, С++ и пр. программисты получают в 1,5 раза меньше.

yyy: За вредность. Ява, С++ погромисты как правило меньше работают с людьми. Сам когда-то писал драйвера, софт для управления оборудованием на С++. Дак там если 2+2 то ясно дело должно быть 4 и все. А при работе с бухгалтерами х.з. поймешь что хотят, нужно еще и за них думать что они хотят. Примерный диалог буха (Б) и программиста (П):
Б - Неправильно считает, тут должно быть 10, а показывает 11.
П - Эта сумма из нескольких сумм складываются, посчитанных ранее, 2+3+6. Какая неправильная: 2, 3 или 6?
Б - 2, 3 и 6 - правильные, неправильная - 11, должно быть 10.
.
((с)Баш)
.
.
.
А рост могу показать на ОЧЕНЬ простом примере.
.
Представим, что есть 48000 пар "КодТовара-ЗначениеРеквизита" и надо это ЗначениеРеквизита в справочнике обновить.
Причём, не один раз, а каждый день.
Т.е. время выполнения значение таки имеет.
.
.
В самом начале "карьеры" программиста я бы делал так:

Для сч=1 по 48000 Цикл
    Если СпрТМЦ.НайтиПоКоду()<>0 Тогда    //поиск товара по коду = 48000 запросов SELECT
        Если СпрТМЦ.Реквизит<>ЗначениеРеквизита Тогда    //чтобы сравнить - ещё 48000 запросов SELECT
            СпрТМЦ.Реквизит = ЗначениеРеквизита;
            СпрТМЦ.Записать();    //дофига обновлений
        КонецЕсли;
    КонецЕсли;
КонецЦикла; 

И оно бы выполняло свою работу ...
... но часа за 2. Тормозя всё это время работу других пользователей огромным числом селектов и блокировок.
.
.
.
Ещё месяц назад я бы вместо "НайтиПоКоду()" и сравнения (по 48000 раз) написал бы запрос, одним селектом выгребающий всё, что мне нужно.
И очень гордился бы этим, не замечая, что те самые дофига "СпрТМЦ.Записать()" тоже сервер грузят.
Но в общем, вместо 2х часов это занимало бы всего минут 20.
.
.
.
А на работе, на которую я недавно перешёл, я открыл новый уровень производительности.
:)
Раньше у меня рука просто не поднялась бы написать так:
update
	~Спр.Номенклатура~
set
	~Спр.Номенклатура.ЗначениеРеквизита~=Врем.ЗначениеРеквизита
from
	~Спр.Номенклатура СпрНом~ (nolock)
inner join
	#TempTMC Врем
On
	СпрНом.code=Врем.Код
	and trim(cast(~СпрНом.ЗначениеРеквизита~ as varchar(200)))<>trim(Врем.ЗначениеРеквизита) 

(для УРБД просто добавляется таблица "_1SUPDTS")
а ведь это снижает нагрузку на сервер вообще до одного запроса (запросы, заполняющие временную таблицу не считаю)
и уменьшает время выполнения аж до 2х минут,
включая сюда получение входного файла с интернета, заполнение временной таблицы и сам запрос.
.
.
От двух часов до двух минут.
Это ли не прогресс?
.
.
.
Другими словами, движение (на сей момент) выглядит так:
.
1. Работаю только средствами 1С.
.
2. Прямыми запросами к SQL получаю данные. Плюс создаю временные таблицы. (прошлая работа)
.
3. Прямые запросы на изменение данных, постоянные таблицы, хранимые процедуры, курсоры, использование условий, циклов и переменных прям в запросах. (сейчас)
.