вторник, 6 сентября 2016 г.

Man shall not live by bread alone.

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

Если в списке требований есть что-то наподобие "At least upper — intermediate English level (both written and spoken)", то курсы уместно обещать, но при требовании от кандидата разговорного английского - это выглядит по меньшей мере глупо.

Почему, например, требуя в качестве необходимого навыка экспертные знания C++, никто не предлагает будущему сотруднику курсы по программированию на том же самом С++? А ведь заменив в предыдущем предложении слова "экспертные знания C++" на "Разговорный английский", мы получим, по сути дела, тоже самое. Хотя, если подходить к этому вопросу, руководствуясь тезисом "нет предела совершенству", то - очень может быть...

Таким образом, при создании объявлений используется некий стереотип как форма экономии собственных усилий, ибо каждая новая попытка увидеть все вещи заново и в подробностях, а не как сделанное ранее обобщение, утомительна, а для занятого человека, коим является индивидуум, подающий объявление, практически невозможна, что и обрекает ее на провал. Ох, не бредом единым жив человек.

Примечание:
"Man shall not live by bread alone." - (англ. библейское высказывание) Не хлебом единым жив человек.

понедельник, 5 сентября 2016 г.

C++: игра в константность.

Говорят: умней они...
Но что слышим от любого?
Жомини да Жомини!
А о водке — ни полслова!

(Д. Давыдов “Песня старого гусара”)
Вопрос кто такой этот Жомини константности в С++ - тема весьма интересная, на которую пишут все, кому не лень. :) Мне тоже сегодня было не лень, поэтому вот такой простой пример:
class Foo {
private:
    int x;
public:
    void f();
    void g();
};

void h(int*) {};
void m(Foo*) {};
void Foo::g() {};

void Foo::f() {
     x = 1;    
     this->g(); 
     h(&x);     
     m(this);   
}

int main() {
    Foo foo;
    foo.f();

    return 0;
}


$ g++ -Wall test.cpp -o test
В данном случае все компилируется без ошибок, но если сделать метод f() константным, то есть
void f() const;
то каждая из четырех строк в теле метода f() будет вызывать ошибку при компиляции. Почему? А вот поэтому:
x = 1;     // Нельзя: изменяется переменная класса
this->g(); // Нельзя: g – некоторая функция
h(&x);     // Нельзя: h может изменить x
m(this);   // Нельзя: не константный аргумент в m()
Вот так мир устроен.