Software Engineering and Computer Science – Part 1
September 27, 2006
I ask a lot of questions when I interview candidates for technical, usually development, positions. I have about thirty pages of questions that I cherry pick from, some closed, some open-ended. The stronger the candidate, the more questions I ask them. If someone says they have built web applications, one of the first filter questions I ask is:
Is HTTP a stateful or a stateless protocol?
It is just amazing how many people, supposedly with many years of experience, do not know the answer to this question.
HTTP is a stateless protocol. It has no notion of remembering client state. It cannot distinguish between one request for http://myhost/foo.htm and the next. In order to know that a request comes from the same client as a previous request, client side cookie technology is used if the browser has cookies enabled, or the technique of URL rewriting can be used, where a session identifier is passed back and forth between the server and the browser in every request and response. That is roughly the answer I’m looking for. But before you get too excited, I have lots more questions and they get a lot more difficult than this. Software engineering is just what is says: it is an engineering discipline. And computer science is just that, a science.