On Recruiters

Note: This post is a draft; work-in-progress.

If you have ever been in the job market looking for the next move on your career, you cannot have failed to notice that job advertisements on various job boards fall in two distinctly different categories: those that disclose the identity of the employer, and those that do not.

As a rule, a job advertisement will not fail to state exactly who the employer is when the employer is doing their own hiring, either direcrly or via an exclusive partnership with a hiring agency. On the other hand, when the job advertisement keeps the identity of the employer a secret, referring to them as "my client", or utilizing subterfuges such as "a well-established company", "a leader in the field", etc., this means that it has been posted by an independently acting recruiter (henceforth simply "recruiter") who does not have an exclusive agreement with the employer. (And the term "my client" is almost always a lie.)

The reason for the secrecy is not understood by most candidates; a common misconception is that some employers wish to remain unidentified when hiring. This is true in such an exceedingly small percentage of cases that it is almost mythological. The true reasons for secrecy in job advertisement are the following:

  • To prevent candidates from bypassing the recruiter and directly contacting the employer.
  • To prevent other recruiters from finding out about the job and creating their own competing job advertisements for it.
  • To post advertisements about jobs that do not actually exist. (You might say, huh? -- I will explain, keep reading.)
Read more »

Debating with other Software Engineers

Stackoverflow and the whole Stackexchange network is good for asking very narrowly-scoped questions that can receive objective and preferably authoritative answers that cite documentation or definitions. Any kind of question which is subject of opinion, or liable to elicit debate, is off-topic there. This means that stackoverflow is only good for asking strictly technical questions, and there is an upper limit on how valuable this can be. Sure it can be very helpful when you are trying to solve a specific technical problem, but in the grand scheme of things, it is irrelevant; from a philosophical point of view, it is trivial.

I have been looking for ways to discuss with other software engineers (preferably experts) issues that are related to software engineering but are in fact very much subject of opinion. These are the interesting questions. I do of course already have my own opinions, which tend to either deviate or be diametrically opposite from the prevailing industry trends, so it would be very useful to me to debate these issues with others to see what they have to say. Clearly, either I am wrong, or the entire industry is wrong; wouldn't it be nice if we could debate this and have it settled?

To this effect, I decided to give a few forums a try, to see if it is possible to have debates in any of them. As it turns out, there seem to be very few options available, and things are rather quiet in each one of them; most people seem to be doing nothing but consuming content generated by influencers instead of participating in discussions. In this post I am listing my findings so far. I will be amending it as I gather more information.

Read more »

Definition: Collaborator

I have been coming across the term collaborator in software literature, and I have been using it too in my own writings, but without having seen it defined. I tried searching for its definition, but could not find any. In UML the term collaboration is vaguely described, but not the term collaborator. After asking on Software Engineering Stack Exchange I was pointed to what is in almost all certainty the original definition, but it turns out that it is very old, and slightly problematic, so I thought I should provide a modern definition here, at the very least for use in my own writings.

Here it goes:

  **A *collaborator* is a component invoked by another component to do a    job.**

(And since the context is software, these are, of course, software components.)

Origin of the term

Read more »

If you are using mock objects you are doing it wrong

Abstract:

The practice of using Mock Objects in automated software testing is examined from a critical point of view and found to be highly problematic. Opinions of some well known industry speakers are cited. The supposed benefits of Mock Objects are shown to be either no real benefits, or achievable via alternative means.

Read more »

Collaboration Monitoring

Abstract

An automated software testing technique is presented which solves the fragile test problem of white-box testing by allowing us to ensure that the component-under-test interacts with its collaborators according to our expectations without having to stipulate our expectations as test code, without having the tests fail each time our expectations change, and without having to go fixing test code each time this happens.

Read more »

Testing with Fakes instead of Mocks

Abstract

What are fakes, what are their benefits, and why they are incontestably preferable over mocks. Also, how to create fakes if needed.

Introduction

Read more »