мне нужен адекватный, думающий, самостоятельный человек с опытом работы на C++ (с отсутствием детских болезней) и с опытом работы с Qt (в частности QtGui). нужен для удаленной работы, часа по 3-4 в день для начала, а дальше будет видно. денег, опять же для начала, в районе $1000 в месяц.
чтобы не тратить мое и ваше время, ниже несколько вопросов из серии "проверь себя". если будут затруднения, переходите к следующему объявлению
чеклист для самопроверки по С++
я знаю зачем деструкторы бывают виртуальными
я знаю чем отличается delete от delete [] и почему они оба — зло
я знаю что будет, если вызвать виртуальный метод в конструкторе и в деструкторе
я понимаю чем std::vector отличается от std::list
я в жизни хотя бы три раза писал конструктор копирования и оператор присваивания по памяти (и смогу написать еще раз)
чеклист для самопроверки по Qt
я смогу сам собрать Qt из исходников под определенные требования (и я проверил, что реально смогу, прежде чем поставить галочку)
я могу, не глядя в гугл, сказать как в Qt принято делать undo/redo
я обрабатывал перетаскивание элементов в дереве на Qt
я знаю что делает qobject_cast
я знаю что такое stylesheet
напоследок "бонусный" чеклист:
а еще я умею юнит-тесты (гугловские)
а еще я умею пользоваться git
у меня нет кошки, которая внезапно заболеет и я пропаду на две недели
кто дочитал — пишите сюда. только не резюме, они всегда крутые давайте ссылки на проекты, скриншоты, программы итд итп — это интереснее.
Здравствуйте, ov, Вы писали:
ov>мне нужен адекватный, думающий, самостоятельный человек с опытом работы на C++ (с отсутствием детских болезней) и с опытом работы с Qt (в частности QtGui). нужен для удаленной работы, часа по 3-4 в день для начала, а дальше будет видно. денег, опять же для начала, в районе $1000 в месяц.
если добавишь один нолик, то можно будет поговорить.
Здравствуйте, Nik_1, Вы писали:
N_>если добавишь один нолик, то можно будет поговорить.
Омг. Нолик за то, чтобы клепать формочки и работать с репозиторием?
Здравствуйте, andyag, Вы писали:
A>Здравствуйте, Nik_1, Вы писали:
N_>>если добавишь один нолик, то можно будет поговорить. A>Омг. Нолик за то, чтобы клепать формочки и работать с репозиторием?
Удар кувалдой стоит $1, знать куда ударить стоит остальные $9999
Здравствуйте, ov, Вы писали:
ov> я знаю чем отличается delete от delete [] и почему они оба — зло
то есть по вашему очистка динамически выделенной памяти это зло?
или вы имеете ввиду что для очистки динамически выделенной памяти лучше минуя оператор delete лезть сразу в кучу процесса и там делать очистку выделенной памяти?
или зло есть в принципе динамическое выделение памяти в куче с помощью new?
то есть нужно ни в коем случае не использовать в программе динамическое выделение памяти и юзать исключительно глобальные статические объекты или объявления на стеке?
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
Здравствуйте, sumson, Вы писали:
S>Здравствуйте, ov, Вы писали:
ov>> я знаю чем отличается delete от delete [] и почему они оба — зло S>то есть по вашему очистка динамически выделенной памяти это зло? S>или вы имеете ввиду что для очистки динамически выделенной памяти лучше минуя оператор delete лезть сразу в кучу процесса и там делать очистку выделенной памяти? S>или зло есть в принципе динамическое выделение памяти в куче с помощью new? S>то есть нужно ни в коем случае не использовать в программе динамическое выделение памяти и юзать исключительно глобальные статические объекты или объявления на стеке?
Здравствуйте, Zhendos, Вы писали:
Z>Здравствуйте, sumson, Вы писали:
S>>Здравствуйте, ov, Вы писали:
ov>>> я знаю чем отличается delete от delete [] и почему они оба — зло S>>то есть по вашему очистка динамически выделенной памяти это зло? S>>или вы имеете ввиду что для очистки динамически выделенной памяти лучше минуя оператор delete лезть сразу в кучу процесса и там делать очистку выделенной памяти? S>>или зло есть в принципе динамическое выделение памяти в куче с помощью new? S>>то есть нужно ни в коем случае не использовать в программе динамическое выделение памяти и юзать исключительно глобальные статические объекты или объявления на стеке?
Куда-то исчез мой ответ.
ИМХО имеется ввиду, что самостоятельно вызвать delete во всех
нетривиальных случаях типа выброса исключения, довольно сложно.
Поэтому для всех выделяемых ресурсов обычно используют классы обертки.
Для динамеческой памяти это например std::shared_ptr, std::vector и т.п.
Таким образом программа может выделять и освобождать память, но в исходниках
самой программы (не считая библиотек, который она использует), нет ни одного
delete.
Здравствуйте, sumson, Вы писали:
S>Здравствуйте, ov, Вы писали:
ov>> я знаю чем отличается delete от delete [] и почему они оба — зло S>то есть по вашему очистка динамически выделенной памяти это зло? S>или вы имеете ввиду что для очистки динамически выделенной памяти лучше минуя оператор delete лезть сразу в кучу процесса и там делать очистку выделенной памяти? S>или зло есть в принципе динамическое выделение памяти в куче с помощью new? S>то есть нужно ни в коем случае не использовать в программе динамическое выделение памяти и юзать исключительно глобальные статические объекты или объявления на стеке?
Здравствуйте, коллеги!
Извините за оффтоп, но :
Согласен с ранее комментировавшими, что объявление так себе, но утверждение про delete наверняка зацепило многих. Вирусное объявление прямо И ладно бы про перегрузку delete/delete[] утверждалось, так нет же.
Здравствуйте, Zhendos, Вы писали:
Z>ИМХО имеется ввиду, что самостоятельно вызвать delete во всех Z>нетривиальных случаях типа выброса исключения, довольно сложно. Z>Поэтому для всех выделяемых ресурсов обычно используют классы обертки. Z>Для динамеческой памяти это например std::shared_ptr, std::vector и т.п. Z>Таким образом программа может выделять и освобождать память, но в исходниках Z>самой программы (не считая библиотек, который она использует), нет ни одного Z>delete.
ну так прекрасно, кто же против!
тогда ТС должен был убрать этот бред про delete а написать что типа:
— я знаю что такое безопасное программирование <тут аббревеатура, щас запамятовал>, знаю что такое не использовать голых указателей в виде членов класса итд.
ну и тогда можно смело в топку отправлять про копирующий конструктор и оператор присваивания...
ибо например пишем в безопасном стиле и уже каждый объект сам знает как себя копировать-присваивать ну и собственные операторы нет нужды делать.
ну или если и надо, то редко как правило...
у меня так кстати и получается...использую парадигму безопасного программирования, использую STL, shared_ptr из буста и ещё что нить по нужде — и вперёд, последний раз копирующий-присваивающий конструктор я делал...ммм...на собеседовании
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
Здравствуйте, sumson, Вы писали:
S>- я знаю что такое безопасное программирование <тут аббревеатура, щас запамятовал>, знаю что такое не использовать голых указателей в виде членов класса итд.
RAII
S>ну и тогда можно смело в топку отправлять про копирующий конструктор и оператор присваивания...
Нельзя, если не говнокодить.
S>ибо например пишем в безопасном стиле и уже каждый объект сам знает как себя копировать-присваивать ну и собственные операторы нет нужды делать.
Чушь
S>у меня так кстати и получается...использую парадигму безопасного программирования, использую STL, shared_ptr из буста и ещё что нить по нужде — и вперёд, последний раз копирующий-присваивающий конструктор я делал...ммм...на собеседовании
Здравствуйте, sysenter, Вы писали:
S>Здравствуйте, sumson, Вы писали:
S>>- я знаю что такое безопасное программирование <тут аббревеатура, щас запамятовал>, знаю что такое не использовать голых указателей в виде членов класса итд.
S>RAII
S>>ну и тогда можно смело в топку отправлять про копирующий конструктор и оператор присваивания...
S>Нельзя, если не говнокодить.
S>>ибо например пишем в безопасном стиле и уже каждый объект сам знает как себя копировать-присваивать ну и собственные операторы нет нужды делать.
S>Чушь
S>>у меня так кстати и получается...использую парадигму безопасного программирования, использую STL, shared_ptr из буста и ещё что нить по нужде — и вперёд, последний раз копирующий-присваивающий конструктор я делал...ммм...на собеседовании
S> Жуть
Словарь Вильяма Шекспира, по подсчету исследователей, составляет 12000 слов. Словарь негра из людоедского племени «Мумбо-Юмбо» составляет 300 слов. Эллочка Щукина легко и свободно обходилась тридцатью. Вот слова, фразы и междометия, придирчиво выбранные ею из всего великого, многословного и могучего русского языка:
1.Хамите.
2.Хо-хо! (Выражает, в зависимости от обстоятельств, иронию, удивление, восторг, ненависть, радость, презрение и удовлетворенность.)
3.Знаменито.
4.Мрачный. (По отношению ко всему. Например: «мрачный Петя пришел», «мрачная погода», «мрачный случай», «мрачный кот» и т. д.)
5.Мрак.
6.Жуть. (Жуткий. Например, при встрече с доброй знакомой: «жуткая встреча»).
7.Парниша. (По отношению ко всем знакомым мужчинам, независимо от возраста и общественного положения).
8.Не учите меня жить.
9.Как ребёнка. («Я его бью, как ребенка» — при игре в карты. «Я его срезала, как ребенка» — как видно, в разговоре с ответственным съемщиком).
10.Кр-р-расота!
11.Толстый и красивый. (Употребляется как характеристика неодушевленных и одушевленных предметов).
12.Поедем на извозчике. (Говорится мужу).
13.Поедем на таксо. (Знакомым мужского пола).
14.У вас вся спина белая (шутка).
15.Подумаешь!
16.Уля. (Ласкательное окончание имен. Например: Мишуля, Зинуля).
17.Ого! (Ирония, удивление, восторг, ненависть, радость, презрение и удовлетворенность).
Оставшиеся в крайне незначительном количестве слова служили передаточным звеном между Эллочкой и приказчиками универсальных магазинов.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
HT>Согласен с ранее комментировавшими, что объявление так себе, но утверждение про delete наверняка зацепило многих.
я плохой солдат, но стараюсь
рсдн — такой рсдн, объявления о работе пишу каждый раз с трепетом. тут же как бы меньше сотни в месяц предлагать вообще страшно — съедят. к счастью отклики идут, назло врагам
F>зачем акцент на гтесты?
потому что они в проекте используются. это же бонусный чеклист, есть опыт с gtest — отлично, есть с бустом — тоже ничего — переучиться вопрос 15 минут.
Здравствуйте, sumson, Вы писали:
S>да, забыл добавить...про виртуальный деструктор... его тоже можно убрать. S>если использовать бустовый shared_ptr. S>будет вопрос — поясню.
взято из Beyond the C++ Standard Library: An Introduction to Boost
The following example shows how to store shared pointers in a Standard Library container.
#include "boost/shared_ptr.hpp"
#include <vector>
#include <iostream>
class A {
public:
virtual void sing()=0;
protected:
virtual ~A() {};
};
class B : public A {
public:
virtual void sing() {
std::cout << "Do re mi fa so la";
}
};
boost::shared_ptr<A> createA() {
boost::shared_ptr<A> p(new B());
return p;
}
int main() {
typedef std::vector<boost::shared_ptr<A> > container_type;
typedef container_type::iterator iterator;
container_type container;
for (int i=0;i<10;++i) {
container.push_back(createA());
}
std::cout << "The choir is gathered: \n";
iterator end=container.end();
for (iterator it=container.begin();it!=end;++it) {
(*it)->sing();
}
}
The two classes, A and B, contain a single virtual member function sing. B derives publicly from A, and as you can see, the factory function createA returns a dynamically allocated instance of B wrapped in a shared_ptr<A>. In main, a std::vector containing shared_ptr<A> is filled with 10 elements, and finally sing is invoked on each element. Had we been using raw pointers as elements, the objects would need to be manually deleted. In the example, this deletion is automatic, because the reference count of each shared_ptr in the container is 1 as long as the vector is kept alive; when the vector is destroyed, the reference counters all go down to zero, and the objects are deleted. It is interesting to note that even if the destructor of A had not been declared virtual, shared_ptr would have correctly invoked the destructor of B!
пипец, я тоже в шоке.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
Здравствуйте, sumson, Вы писали:
S>It is interesting to note that even if the destructor of A had not been declared virtual, shared_ptr would have correctly invoked the destructor of B! S>пипец, я тоже в шоке.
Зачем тогда они объявили в А деструктор виртуальным, если всё так красиво?
Здравствуйте, sysenter, Вы писали:
S>Здравствуйте, sumson, Вы писали:
S>>It is interesting to note that even if the destructor of A had not been declared virtual, shared_ptr would have correctly invoked the destructor of B! S>>пипец, я тоже в шоке.
S>Зачем тогда они объявили в А деструктор виртуальным, если всё так красиво?
я привёл код из книги, теперь привожу со своими поправками для верности утверждения.
можете сами проверить, деструктор B вызывается...
class A {
public:
virtual void sing()=0;
};
class B : public A {
public:
virtual void sing() {
std::cout << "Do re mi fa so la";
}
~B(){std::cout << "~B()";}
};
boost::shared_ptr<A> createA() {
boost::shared_ptr<A> p(new B());
return p;
}
int main() {
typedef std::vector<boost::shared_ptr<A> > container_type;
typedef container_type::iterator iterator;
container_type container;
for (int i=0;i<10;++i) {
container.push_back(createA());
}
std::cout << "The choir is gathered: \n";
iterator end=container.end();
for (iterator it=container.begin();it!=end;++it) {
(*it)->sing();
}
}
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
Здравствуйте, sumson, Вы писали:
S>я привёл код из книги, теперь привожу со своими поправками для верности утверждения. S>можете сами проверить, деструктор B вызывается...
Значит B удаляется через указатель типа B, а мог бы и через указатель типа A, что привело бы к утечке.
S>я привёл код из книги, теперь привожу со своими поправками для верности утверждения. S>можете сами проверить, деструктор B вызывается...
чем мне такая "книжная" магия не нравится, так это тем, что как оно работает понимает разве что автор книги. счастливый девелопер, окрыленный прочитанным, начинает это использовать не влезая под капот, потом другой девелопер, уже и не читавший ничего, добавляет что-то от себя и поддержка этого кода потом выливается в одно сплошное удовольствие, когда о проблемах простого delete'а приходится только мечтать
я вот с бустом поверхностно знаком, расскажешь мне (своими словами) как shared_ptr<A> понимает, что ему подали указатель на B и где он запоминает это дело, чтобы потом вызвать правильный деструктор? но без цитат, я посмотрел ту книжку, теперь хотелось бы оценить понимание предлагаемой магии.
Здравствуйте, sysenter, Вы писали:
S>Значит B удаляется через указатель типа B, а мог бы и через указатель типа A, что привело бы к утечке.
это всё понятно, он затем и нужен виртуальный деструктор в родительском классе чтобы таких утечек не было.
вопрос именно про использование shared_ptr вместо голых указателей.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
Здравствуйте, sysenter, Вы писали:
S>Здравствуйте, placement_new, Вы писали:
_>>Код посмотреть тяжело?
S>Предположение, определяет реальный тип через передачу параметра функции в которой инстанцирует шаблон с реальным типом.
template<class T> class shared_ptr
{
private:
// Borland 5.5.1 specific workaround
typedef shared_ptr<T> this_type;
public:
typedef T element_type;
typedef T value_type;
typedef T * pointer;
typedef typename boost::detail::shared_ptr_traits<T>::reference reference;
shared_ptr(): px(0), pn() // never throws in 1.30+
{
}
template<class Y>
explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete
{
boost::detail::sp_enable_shared_from_this( this, p, p );
}
видно, что сам shared_ptr параметризуется одним типом (class T) а принимает в конструктор другой тип (class Y)
а далее похоже запоминает или указатель на реальный тип(и при разрушении делает ему delete) или деструктор переданного класса(в чём я сомневаюсь).
можно ещё полазить в исходниках...времени нема)
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
S> template<class Y>
S> explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete
S> {
S> boost::detail::sp_enable_shared_from_this( this, p, p );
S> }
S>
Дык, как я и говорил делается через передачу функции, в функциях всегда известен реальный тип:
template< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr<X> const * ppx, Y const * py, boost::enable_shared_from_this< T > const * pe )
{
if( pe != 0 )
{
pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) );
}
}
Здравствуйте, sysenter, Вы писали:
S>Здравствуйте, sumson, Вы писали:
S>>
S>> template<class Y>
S>> explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete
S>> {
S>> boost::detail::sp_enable_shared_from_this( this, p, p );
S>> }
S>>
S>Дык, как я и говорил делается через передачу функции, в функциях всегда известен реальный тип:
S>
S>template< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr<X> const * ppx, Y const * py, boost::enable_shared_from_this< T > const * pe )
S>{
S> if( pe != 0 )
S> {
pe->>_internal_accept_owner( ppx, const_cast< Y* >( py ) );
S> }
S>}
S>
спускаемся ещё глубже:
public: // actually private, but avoids compiler template friendship issues
// Note: invoked automatically by shared_ptr; do not call
template<class X, class Y> void _internal_accept_owner( shared_ptr<X> const * ppx, Y * py ) const
{
if( weak_this_.expired() )
{
weak_this_ = shared_ptr<T>( *ppx, py );
}
}
private:
mutable weak_ptr<T> weak_this_;
};
вот интересная строчка:
weak_this_ = shared_ptr<T>( *ppx, py );
читаем в книге:
template <class Y,class D> shared_ptr(Y* p,D d);
This constructor takes two arguments. The first is the resource that the shared_ptr should take ownership of, and the second is an object that is responsible for releasing that resource when the shared_ptr is destroyed. The stored resource is passed to the object as d(p).
значит есть шареный ресурс типа <T> и есть объект которые релизит этот ресурс типа <Y>.
в переводе на наш пример: шареный ресурс типа A, объект который будет релизить этот ресурс — типа B.
потому при разрушении shared_ptr вызывается деструктор класса B, хотя класс параметризован классом A.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
Здравствуйте, Nik_1, Вы писали:
N_>Удар кувалдой стоит $1, знать куда ударить стоит остальные $9999
Не пойму, вы — генератор случайных чисел или расказчик притч?
Здравствуйте, ov, Вы писали:
ov>я вот с бустом поверхностно знаком, расскажешь мне (своими словами) как shared_ptr<A> понимает, что ему подали указатель на B и где он запоминает это дело, чтобы потом вызвать правильный деструктор? но без цитат, я посмотрел ту книжку, теперь хотелось бы оценить понимание предлагаемой магии.
сейчас попробую сформулировать без цитат:
shared_ptr<A> это ресурс шареный, то есть ты его можешь передавать куда хошь, копировать присваивать, у него есть счётчик ссылок внутренний.
когда его создают ему подают в explicit конструктор указатель на B, он не производит преобразования B к A. Он просто считает переданный объект B как объект для очистки шареного ресурса shared_ptr<A> когда счётчик ссылок придёт в ноль и ресурс будет разрушаться.
То есть в моём понимании shared_ptr реально умный указатель...а не просто обёртка.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
S>сейчас попробую сформулировать без цитат:
спасибо. последние несколько сообщений в треде убедили меня, что иногда простой delete не такое уж и зло в продакшен такой код, да с таким пониманием как оно работает я бы не пускал полюбому. контрольный вопрос в голову (тут конечно это не важно, но чтоб жертва не мучалась): какие в итоге накладные расходы на хранение одного такого указателя?
S>То есть в моём понимании shared_ptr реально умный указатель...а не просто обёртка.
угу, пока эта магия не перешла на темную сторону силы через полгода активного использования.
Здравствуйте, ov, Вы писали:
S>>сейчас попробую сформулировать без цитат: ov>спасибо. последние несколько сообщений в треде убедили меня, что иногда простой delete не такое уж и зло в продакшен такой код, да с таким пониманием как оно работает я бы не пускал полюбому. контрольный вопрос в голову (тут конечно это не важно, но чтоб жертва не мучалась): какие в итоге накладные расходы на хранение одного такого указателя?
зла нет в delete или в каком ещё инструменте языка. зло есть в том как мы это используем и чем наделяем в программе.
я думаю что использование shared_ptr вместо голых указателей+delete — есть меньшее зло.
по поводу вашего продакшена:такое ощущение что ни вы ни те кто писали ваш продакшен код в глаза не видели смарт указателей.
по поводу накладных расходов...я думаю что вместо хранения одного указателя в shared_ptr мы будем хранить два указателя и плюс счётчик ссылок.
то есть вместо 4 байт указателя мы будем получать ещё минимум 8 байт дополнительных издержек памяти. ну плюс некоторая потеря производительности в процессе разыменовывания и вызова других ф-ций для доступа к указателю. существенные издержки или нет — каждый решает сам.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
S>зла нет в delete или в каком ещё инструменте языка. зло есть в том как мы это используем и чем наделяем в программе.
абсолютно правильно рассуждаешь.
S>я думаю что использование shared_ptr вместо голых указателей+delete — есть меньшее зло.
и здесь тоже. я не имею ничего против умных указателей, я наоборот за и именно об этом был пункт в чеклисте про delete. я против извратов с вызовом невиртуального деструктора через shared_ptr, указывающий на его предка.
S>по поводу вашего продакшена:такое ощущение что ни вы ни те кто писали ваш продакшен код в глаза не видели смарт указателей.
нет конечно. все я и видел, и использовал и сам делал ради интереса. я за подход без фанатизма: удалять все руками или городить страшные ужасы на бусте, которые удивительно как работают — вот это фанатизм. а просто std::auto_ptr, std::vector или бустовские поинтеры — да почему нет, если в тему. главное чтобы все участники команды понимали _как_ это работает.
S>существенные издержки или нет — каждый решает сам.
вопрос был не о существенности, а о понимании принципов работы. я об этом абзацем выше написал. если разработчик не понимает как инструмент работает внутри, стоит подумать или над продолжением его использования или над его устройством. иначе это потом может аукнуться. замечу, что тут речь идет исключительно об инструментах (контейнеры, хелперы всякие итп).
UVV>Предлагаю потешить ЧСВ в другом месте. За штуку баксов довольно до хера ты хочешь.
если внимательно перечитать сообщение, то там видно, что я хочу не так уж и много. хотя если отсутствие говнокода на выходе ты оцениваешь как "дохера", то лучше сразу это оговорить на этапе собеседования.
насчет предложения — там есть кнопка с бомбочкой. если тебя задела тема — нажми, уверен, тебя поддержат миллионы
UVV>И да, мне таки интересно с чего вдруг delete стал злом?
no hire, как уже было сказано выше. вообще, почитай тему, там ответ уже обсудили.
Здравствуйте, Abyx, Вы писали:
ov>> я знаю чем отличается delete от delete [] и почему они оба — зло A> прекрасный вопрос, ответы сразу показали кто есть кто ))
Полностью согласен с Вашим высказыванием, коллега, любопытно только было бы увидеть Вашу классификацию по "кто есть кто" Вы также считаете, что ответы разделили ответивших на две группы — 1) Те, кто считает, что ни одна конструкция языка априори не является злом 2) Те, кто буквально заучил фразу "delete — зло"?
В данном контексте про некорректность постановки вопроса "Почему delete зло?" и проведение аналогий с вопросом "Давно ли Вы перестали бить своего отца?",полагаю, уже говорить не будем
Здравствуйте, ov, Вы писали: ov> хотя если отсутствие говнокода на выходе ты оцениваешь как "дохера",
Это стоит вразы больше штуки баксов. Чтобы не писать говнокод — нужно много лет опыта и набить много шишек. Понимание как писать код не превращающийся в спагети приходит лишь с годами, а не врожденное на уровне днк. А опыт стоит денег.
1.new/delete зло потому c++ зло, язык уродец и любой проект на с++ обречен, многолетний опыт лишь оттягивает провал проекта.
Написать и контроллировать гигантский проект на с++ невозможно физически, код в мусорку и с++ годится только для написания хелловорлдов
с++ ТУПИКОВАЯ ветвь программирования и кто понял это давно быстро перешли на Objective C, C, C#, Java, PHP, JavaScript
N_>Это стоит вразы больше штуки баксов. Чтобы не писать говнокод — нужно много лет опыта и набить много шишек. Понимание как писать код не превращающийся в спагети приходит лишь с годами, а не врожденное на уровне днк. А опыт стоит денег.
тебя послушать, так штуку надо платить уже за умение запустить студию. не, так дело не пойдет. ты перечитай еще раз исходное сообщение. где там про спагетти и про годы опыта? я вообще-то привел требования, которые отфильтруют ну совсем уж непрофессиональных людей, за которыми потом придется переделывать вообще все. дальше посмотри повнимательнее насчет примерного количества часов в день, которое мне нужно, подумай. вспомни, что кроме москвы есть еще другие города, где за ту же штуку люди в офис радостно ходят на весь день. я понимаю, что получать полторы сотни в месяц и при этом безвылазно торчать на форуме это и есть для многих работа мечты, но это не ко мне, это в газпром.
кстати, что интересно, полгода назад давал объявление со схожими требованиями и зарплатой, но без списка самопроверки. в тот раз откликнулись десятки, в этот — единицы. я все понимаю, инфляция, но не в несколько же раз. и вот в тот раз было немало откровенно неграмотных специалистов. это объявление я составил уже с учетом предыдущего опыта, в итоге потратив куда меньше времени нашел даже двоих людей вместо одного. профит.
к чему я это все? надо трезво оценивать свое "хочу" с учетом своего "могу". а то один с головой на плечах набивает себе цену, а десять без опыта и шансов наслушаются и начинается потом "штука на удаленке — мало", "две в офисе — идите нафиг", "никаких тестовых заданий делать не буду — проверите на реальной работе". а до дела доходит — начинаются велосипеды, утечки памяти и "не знаю, у меня на компьютере все работает".
Здравствуйте, ov, Вы писали:
N_>>Это стоит вразы больше штуки баксов. Чтобы не писать говнокод — нужно много лет опыта и набить много шишек. Понимание как писать код не превращающийся в спагети приходит лишь с годами, а не врожденное на уровне днк. А опыт стоит денег.
ov>тебя послушать, так штуку надо платить уже за умение запустить студию.
Да. Это какраз зарплата для юниора.
ov>я понимаю, что получать полторы сотни в месяц и при этом безвылазно торчать на форуме это и есть для многих работа мечты, но это не ко мне, это в газпром.
Здравствуйте, ov, Вы писали:
UVV>>И да, мне таки интересно с чего вдруг delete стал злом?
ov>no hire, как уже было сказано выше. вообще, почитай тему, там ответ уже обсудили.
Мне абсолютно фиолетово, что ты не хочешь меня нанимать =)
Наличие и использование контейнеров не делает delete злом или таки обоснуешь?
Здравствуйте, ov, Вы писали:
N_>>Это стоит вразы больше штуки баксов. Чтобы не писать говнокод — нужно много лет опыта и набить много шишек. Понимание как писать код не превращающийся в спагети приходит лишь с годами, а не врожденное на уровне днк. А опыт стоит денег.
ov>тебя послушать, так штуку надо платить уже за умение запустить студию. не, так дело не пойдет. ты перечитай еще раз исходное сообщение. где там про спагетти и про годы опыта? я вообще-то привел требования, которые отфильтруют ну совсем уж непрофессиональных людей, за которыми потом придется переделывать вообще все.
Останутся только те, которые на выходе не дают говнокод, и которым штуки за половину рабочего дня мало. ov>дальше посмотри повнимательнее насчет примерного количества часов в день, которое мне нужно, подумай. вспомни, что кроме москвы есть еще другие города, где за ту же штуку люди в офис радостно ходят на весь день. я понимаю, что получать полторы сотни в месяц и при этом безвылазно торчать на форуме это и есть для многих работа мечты, но это не ко мне, это в газпром.
Тут соглашусь, для регионов вполне нормальные деньги, конечно при условии наличия жилплощади.
ИМХО, загрузку я в этом случае распределил бы не как 3-4 часа в день, а как 10-15 часов в неделю.
ov>кстати, что интересно, полгода назад давал объявление со схожими требованиями и зарплатой, но без списка самопроверки. в тот раз откликнулись десятки, в этот — единицы. я все понимаю, инфляция, но не в несколько же раз. и вот в тот раз было немало откровенно неграмотных специалистов. это объявление я составил уже с учетом предыдущего опыта, в итоге потратив куда меньше времени нашел даже двоих людей вместо одного. профит.
ov>к чему я это все? надо трезво оценивать свое "хочу" с учетом своего "могу". а то один с головой на плечах набивает себе цену, а десять без опыта и шансов наслушаются и начинается потом "штука на удаленке — мало", "две в офисе — идите нафиг", "никаких тестовых заданий делать не буду — проверите на реальной работе". а до дела доходит — начинаются велосипеды, утечки памяти и "не знаю, у меня на компьютере все работает".
Что характерно, те, кто так говорит, в итоге не производят говнокода и утечек памяти, но ты об этом уже не узнаешь... =)
UVV>Наличие и использование контейнеров не делает delete злом или таки обоснуешь?
хорошо, замени в исходном сообщении "и почему они зло" на "и почему не стоит их использовать". разжевывать, как тут предлагали, до "я знаю что не надо использовать голые указатели" я не хочу. считай это тестом на "быть со мной на одной волне".
Здравствуйте, ov, Вы писали:
N_>>Да. Это какраз зарплата для юниора. ov>ты забыл добавить "в офисе" и "на фуллтайме".
В офисе на фултайме гораздо больше получают.
ov>картинка хорошая, согласен. но если ты отшучиваться пришел, то дай знать, чтобы я время не тратил, ок?
Ну так соотношение зп и требований в обьявлении ничего кроме улыбки не вызывают
UVV>Останутся только те, которые на выходе не дают говнокод, и которым штуки за половину рабочего дня мало.
нет конечно. я не первый раз ищу людей на "мизерные" по мнению этого форума деньги и каждый раз нахожу несколько вполне адекватных вариантов. а вот бурление говн на тему "мало, мало, мало" порождает жадных юниоров с завшенным самомнением. и это фигово.
UVV>ИМХО, загрузку я в этом случае распределил бы не как 3-4 часа в день, а как 10-15 часов в неделю.
это уже детали, парт-тайм подразумевает определенную гибкость.
UVV>Что характерно, те, кто так говорит, в итоге не производят говнокода и утечек памяти, но ты об этом уже не узнаешь... =)
ну так я и не претендую на звание самого щедрого работодателя есть задачи (не рокет сайнс) и есть бюджет. ну вот пока такой.
N_>В офисе на фултайме гораздо больше получают. N_>Ну так соотношение зп и требований в обьявлении ничего кроме улыбки не вызывают
ладно, я не вижу смысла продолжать этот разговор. ты во всем прав. кроме одного: надо все-таки читать сообщения перед тем, как на них отвечать.
Здравствуйте, ov, Вы писали:
UVV>>Наличие и использование контейнеров не делает delete злом или таки обоснуешь? ov>хорошо, замени в исходном сообщении "и почему они зло" на "и почему не стоит их использовать". разжевывать, как тут предлагали, до "я знаю что не надо использовать голые указатели" я не хочу. считай это тестом на "быть со мной на одной волне".
Ну с утверждением "я знаю что не надо использовать голый указатели" я как бы не согласен, на это и намекаю =)
Здравствуйте, UVV, Вы писали:
UVV>Здравствуйте, ov, Вы писали:
UVV>>>Наличие и использование контейнеров не делает delete злом или таки обоснуешь? ov>>хорошо, замени в исходном сообщении "и почему они зло" на "и почему не стоит их использовать". разжевывать, как тут предлагали, до "я знаю что не надо использовать голые указатели" я не хочу. считай это тестом на "быть со мной на одной волне". UVV>Ну с утверждением "я знаю что не надо использовать голый указатели" я как бы не согласен, на это и намекаю =)
Ну получается, если послушать топикстартера, все архитекторы QT дураки и не умеют программировать.
UVV>Ну с утверждением "я знаю что не надо использовать голый указатели" я как бы не согласен, на это и намекаю =)
несогласным предлагалось перейти к следующему объявлению. вот ты мне предъявил ЧСВ, а как ты назовешь свои ответы тут? считаешь свое мнение по поводу указателей реально важным в контексте этого топика, с учетом совета в самом первом сообщении?
Здравствуйте, ov, Вы писали:
ov>несогласным предлагалось перейти к следующему объявлению. вот ты мне предъявил ЧСВ, а как ты назовешь свои ответы тут? считаешь свое мнение по поводу указателей реально важным в контексте этого топика, с учетом совета в самом первом сообщении?
А как же =)
Вот представь, что твой кандидат столкнулся с кодом, где без delete ну никак не обойтись.
Представляешь психическое состояние будущего работника, которого заставляют пройти через зло? :D
Здравствуйте, Nik_1, Вы писали:
N_>Здравствуйте, ov, Вы писали: ov>> хотя если отсутствие говнокода на выходе ты оцениваешь как "дохера", N_>Это стоит вразы больше штуки баксов. Чтобы не писать говнокод — нужно много лет опыта и набить много шишек. Понимание как писать код не превращающийся в спагети приходит лишь с годами, а не врожденное на уровне днк. А опыт стоит денег.
Как-то не заметил я в исходном сообщении требования "много лет опыта и набить много шишек", вполне адекватное предложение, за, кстати, адекватные же деньги. Для фрилансера, наверное, было бы удобно иметь такой долгосрочный проект на подстраховке. Треть рабочего дня с гарантированным доходом — вполне себе заманчиво.
Здравствуйте, Conr, Вы писали: C>Как-то не заметил я в исходном сообщении требования "много лет опыта и набить много шишек",
Список перечисленных обязательных требований подразумевает это. C>Для фрилансера, наверное, было бы удобно иметь такой долгосрочный проект на подстраховке. Треть рабочего дня с гарантированным доходом — вполне себе заманчиво.
Выделенное не соответствует требованию
у меня нет кошки, которая внезапно заболеет и я пропаду на две недели
Т.е. вариант "раз вмесяц уменя бывают несколько свободных вечеров, в которые могу чтонить поделать" я так понял не расматривается.
Здравствуйте, Nik_1, Вы писали:
N_>Здравствуйте, Conr, Вы писали: C>>Как-то не заметил я в исходном сообщении требования "много лет опыта и набить много шишек", N_>Список перечисленных обязательных требований подразумевает это.
Да ну, 2 летний опыт работы с Qt и c++, не более.
C>>Для фрилансера, наверное, было бы удобно иметь такой долгосрочный проект на подстраховке. Треть рабочего дня с гарантированным доходом — вполне себе заманчиво. N_>Выделенное не соответствует требованию N_>
N_>у меня нет кошки, которая внезапно заболеет и я пропаду на две недели
N_>Т.е. вариант "раз вмесяц уменя бывают несколько свободных вечеров, в которые могу чтонить поделать" я так понял не расматривается.
Не рассматривается, согласен. Но вот если нет потока заказов и есть регулярно 3 свободных часа, то подходит. При этом остается еще дофига времени на окучивание фсяких odesk, elance и тп, с возможностью не бросаться на любые заказы, так как определенный минимум уже есть. Да и, как мне кажется, ключевое слово не "кошка", а "внезапно".
Здравствуйте, humanist-TPV-, Вы писали:
A>> прекрасный вопрос, ответы сразу показали кто есть кто )) HT>Вы также считаете, что ответы разделили ответивших на две группы — 1) Те, кто считает, что ни одна конструкция языка априори не является злом 2) Те, кто буквально заучил фразу "delete — зло"?
Нет, коллега, я имел ввиду другое разделение —
1) те кто понимает что ценность автоматического управления ресурсами в частности и защитного програмирования вообще
2) и те кто думает "ну подумаешь, пару-тройку delete в деструкторе своего класса написал" (и еще несколько if(p) { delete p; p = NULL; } )
Конечно конструкция языка не может быть злом.
Но обычно есть выбор из нескольких конструкций, и редко когда надо выбирать явное написание delete.
Здравствуйте, Conr, Вы писали:
C>Как-то не заметил я в исходном сообщении требования "много лет опыта и набить много шишек", вполне адекватное предложение, за, кстати, адекватные же деньги. Для фрилансера, наверное, было бы удобно иметь такой долгосрочный проект на подстраховке. Треть рабочего дня с гарантированным доходом — вполне себе заманчиво.
3-4 часа фрилансера это половина и больше рабочего дня. Разумеется я имею ввиду честного фрилансера, который считает именно рабочее время. Например я не считаю время на туалет, еду, ебтю, чтение форумов и т.п.: отошёл от компьютера — выключил счётчик.
Мне трудно представить фрилансера, регулярно работающего с 9 до 6, и при этом не просерающего пару часов на не рабочие вопросы.
Короче, я за то, чтобы фрилансеры и ремотеры измеряли именно рабочее время (конечно в этом случае рейт должен быть выше). И при таком измерении 8 часов чистого рабочего времени получится далеко не каждый день.
Здравствуйте, Conr, Вы писали:
C>Здравствуйте, Nik_1, Вы писали:
N_>>Здравствуйте, Conr, Вы писали: C>>>Как-то не заметил я в исходном сообщении требования "много лет опыта и набить много шишек", N_>>Список перечисленных обязательных требований подразумевает это. C>Да ну, 2 летний опыт работы с Qt и c++, не более.
Только если 2 года — это командная разработка в комерческих проектах на фултайме, а не клепание сиди-инжекторов повечерам после школы.
И даже так далеко не все через 2 года начнут выдавать не говнокод.
C>Да и, как мне кажется, ключевое слово не "кошка", а "внезапно".
Что бы небыло "внезапно", это должна бать основной работой приносящей основной доход. Тогда ей будет присвоен высокий приоритет при распределении времени. Но для основной работы 1к — очень мало. А в случаи если это подработка — в любой момент может надолго пропасть при поступлении большого заказа или большой загруженности на основной работе