The Oracle Problem, as it relates to testing [closed] - testing

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 12 years ago.
Improve this question
I'm brushing up on my software testing theory and came across an interesting phenomenon called the Oracle problem. I've picked up bits and pieces as to what the problem alludes to but haven't yet pieced it all together.
One rather dark version of the problem goes a little something like this:
An island has 100 inhabitants. Each of the inhabitants has either green or blue eyes. None of the inhabitants are allowed to communicate with each other to let them know what color eyes they have, nor are there any reflective surfaces in which the inhabitants can see their own eye colors. Basically everyone knows what color eyes everyone has but none of them know what color eyes they themselves have. The rule on the island is that if you find out that you have blue eyes you must kill yourself. The island's population remains stable until one day an oracle arrives and tells the inhabitants that some people on the island have blue eyes.
The question is what happens to the people?
An answer I found is that 100 days later the last person on the island kills themselves.
I have no clue how this makes sense and I was hoping that someone could help relate this problem back to software testing. Thanks for coming on the journey and I look forward to some interesting responses.

First, to understand the puzzle, add one detail: if you find out that you have blue eyes, you commit suicide at midnight, in privacy. Nobody knows you're dead until morning. Now try a few versions of the problem with fewer people:
There is only one inhabitant. The oracle arrives and says "there is at least one inhabitant with blue eyes". The outcome should be obvious.
There are two inhabitants. Again, the oracle says "there is at least one inhabitant with blue eyes. Try to figure out what might happen. Is it possible that neither of them dies on the first night?
Now try three inhabitants, same pronouncement from the oracle.
Now three, but the oracle says "there are at least two inhabitants with blue eyes".
And so on. You may have noticed that the oracle must have an interesting property for this to work: it is truthful, and everybody knows about this property. This means that everyone knows that everyone knows that the oracle is truthful, and everyone knows it, and so on. The fact of a death is also common knowledge: if Sam dies in the night, everyone knows that he killed himself, and everyone knows that everyone else knows it, and so on.
So what does this have to do with software testing? I don't consider it a very good analogy, but the idea is that you can test a piece of software against something, some standard, to see if it gives the correct answer. The standard might be another piece of software, or the same software in a previous run, or theoretical results, or whatever. But how do we know the standard is correct? It would be really good to have a standard which is correct, and which everyone knows is correct, and which everyone knows everyone knows is correct, and so on.
EDIT:
P.S.: there may be some confusion because in computer science the term "oracle" also refers to a theoretical device that can solve problems which a Turing machine cannot solve, such as the Halting Problem.

Related

Why is it so hard to get reputation on stack overflow? [migrated]

I've been a "passive user" of Stack Overflow and other Stack Exchange sites for years. I have derived enormous benefit from it (many thanks!!), and I finally decided to become more active. It seems difficult for a "new" user to get started.
A relatively short time ago, I finally created an account to start answering and editing and posting and commenting! I was full of excitement and vigor and immediately tried to upvote (nope!) and post a comment (nope!). I need (threshold) amount of rep to do comment on this or that, or even upvote certain things... which is totally reasonable (perhaps "necessary" is a better term).
So I browsed a bit (such as whats-reputation). Advice to new users seems to be: just ask, answer, and suggest edits! But there are so many questions and good answers, a truly good question and new question seems hard to create. To truly give justice to all previous questions on a topic requires as much effort (or more?) as posing a question. And there are so many users that to troll-and-pounce the new-questions board could be a full-time job. And BTW, you can only put 2 links in a question when you have <10 rep, so it's very difficult to show due-diligence and to pose a truly good question to begin with!
I didn't find any actual "question" on this topic of how to get started -- but found a few gems like six simple rules, walking a (presumably-intentional) delicate balance between productive debate and provocative cynicism.
So I decided to post a question on this topic! Meta.SO seemed like the right place. NOPE! I needed 5 rep to even post a question. Probably also for good reason.
Now that I have >5 rep (w00t), here I am. After all that background (sorry) --
How does anyone get started around here these days?
My understanding now boils down to the following:
You have no choice but to start slowly.
Be patient and try to do contribute where you can.
Be prepared to accept initial rejection and failure.
Learn how to edit and make stuff pretty.
What am I missing? Do I "get it"? Have I completely missed the point? How can The System encourage new users who are here for the "right reasons" to quickly start contributing meaningfully and harness their energy for the Common Good?
It seems like you get it. Long gone are the days of camping on the front page to gain fast reputation by quickly answering softball questions. The questions are coming in too quickly, site standards have changed drastically, and there's a lot more competition to either answer or close easy questions.
The one piece of advice that I'll give you that you haven't mentioned is to pick some favorite tags that you're an expert in and add them to your favorites list (in the main page right sidebar).
This will highlight questions with those tags when you view the list of Newest questions, and it will even filter the list of selected questions when you view the Stack Overflow home page so that you see more questions with your favorite tags. By focusing your attention on your favorite tags, you'll see more questions that you're interested in and may be able to answer. You'll also be better able to suggest good edits to questions in your area of expertise.
You can also block tags for languages that you don't know by adding them to your Ignored tags list. By default, questions with Ignored tags will just be greyed out, but you can hide them entirely from the Preferences tab in your profile.
If you need a little bit of inspiration, here are a few users that have gained a lot of reputation in a relatively short amount of time, despite not having joined the site at the very beginning:
akrun - Member for 2 years, 6 months with over 220,000 reputation
Wiktor Stribiżew - Member for 2 years, 5 months with over 150,000 reputation
Jean-François Fabre - Member for only 6 months, but already has over 24,000 reputation
What do they all have in common? They answer tons of questions!
There's an alternate route to obtaining basic privileges, if you're finding the competition here too intense.
Utilize the association bonus
If you hit 200 rep on any site, you'll automatically receive a +100 association bonus on all sites. In my experience earning reputation on the beta sites is extremely easy due to reduced competition. Find a topic you have some expertise on, become a valuable contributor there, and you'll quickly earn your basic privileges. Even better, now you're helping out two sites!
Think of it as someone else vouching for your trustworthiness, so don't let them down by coming back here and making a mess.
Take the tour, earn a badge.
If you are reading this, you are probably the sort of person who has the ability to succeed on Stack Overflow. Even so, the tour provides the big picture of how the site ought to work. It also gives you a badge. Another easy badge is Autobiographer, which has the advantage others can learn who you are as a person.
Consider editing.
The next easiest badge to earn is Editor. Anyone may submit a suggested edit for community review. If you find a mistake or outdated information on any post and you know how to fix it, click on the edit link and suggest a change. Editing is a good way to learn what the community expects from posts and also will familiarize you with how posts are formatted with Markdown. In addition, successfully suggesting edits earns a small amount of reputation.
Answering is often easier than asking.
It's almost certainly gotten exponentially harder to ask questions than when many of us earned our (now slightly dusty) beta badges. This chart tells the story:
year questions avg_score deleted_rate closed_rate dupes dupe_rate
---- --------- --------- ------------ ----------- ------ ---------
2008 70372 18.40 6.4 3.9 1145 1.63
2009 394567 6.19 4.5 3.6 4800 1.22
2010 820161 3.43 6.3 3.4 10162 1.24
2011 1445142 2.18 7.9 5.7 21103 1.46
2012 2065664 1.28 10.2 7.9 34471 1.67
2013 2759442 0.61 14.7 10.9 52002 1.88
2014 3040440 0.17 17.9 10.4 68500 2.25
2015 2061746 0.08 17.2 8.7 52759 2.56
New questions are more likely to be closed or deleted than in the past. It's gotten harder to ask questions that haven't already been asked. In the best of times, asking interesting questions is harder than answering them. So I'd recommend looking for questions you can try answering before starting to ask.
If you have a different way of looking at a question, it really doesn't hurt to add another answer even if there's an accepted answer. The goal isn't to just help the one person who asked the question, but to help anyone with that same general problem who might find the question via search. There's no guarantee that your answer will be upvoted, but as long as your answer is accurate, clear, and noticeably different than others, it's not likely to be downvoted.
Consider learning a new language.
There's a good chance that your question in C, C++, C#, Objective-C, Java, JavaScript, JavaFX, or JSF has already been asked. Less popular languages have less duplication and fewer grouchy grognards who have seen the same few questions asked over and over again. Newer languages tend to not reach that level of saturation, so it might be worthwhile to learn a new language for the purposes of getting started on Stack Overflow. Plus it's a great way to teach yourself programming in 10 years.
Debug before asking.
Sometimes, you just need some help solving a problem in your code at which point a question on Stack Overflow would be a good entry point. Don't make the mistake of posting your code verbatim. Instead, search for the handful of lines that seem to be buggy. Surprisingly, doing just that is often enough to discover the problem. If your goal is to participate on Stack Overflow, don't be afraid to ask and answer your own question. Be sure to check for duplicate questions before posting (in which case, consider posting your own answer), but don't feel as if your question is wasteful if you already know the answer. Remember that helping the initial asker is not the primary goal of Stack Overflow.
Learn from setbacks.
You will almost certainly be downvoted at some point using the site. You might get critical comments, have a question closed, or a post deleted. In those situations, it's important to know that:
it's not personal,
there's almost always something you could have done better, and
recovery won't be hard if you take a few minutes to understand what happened.
Far and away the biggest mistake people make when using the site is ignoring advice they don't immediately understand. When people continue to post without learning what those signals are trying to say, they start running into suspensions, blocks and rate limits.
Get help and get meta.
Most of the common problems people run into are answered in the help center. In particular, read how to ask and how to answer. If those don't help, look around on meta for other people who have had the same problem. If that still doesn't help go ahead and ask about your specific situation here on meta. Be aware that meta has very similar conventions to the main site. Much of the above advice applies here too.
Try answering at a time of day or day of week when there are fewer users on Stack Overflow and presumably less competition for answering questions. Yeah, I get that Stack Overflow is an international site and people are on it at all hours of the day, but there are times of the day with significantly less traffic as seen here:
Please note these times are GMT.
See this post for more details.
It appears that Stack Overflow's heaviest users are North America as seen here so the lightest times are when North Americans are sleeping.
I would imagine there are days of the week that are also that are lighter eg Friday
Perhaps it is just a coincidence, but I found this out the hard way. I was burning the midnight oil so to speak and posted a question at the lowest activity time and received no answers.
I started at the end of last year and it was easy enough to rack up a reputation score. I'm a Java expert so I just started browsing the latest Java questions and when I saw a question that looked interesting I posted an answer for it.
A lot of those questions only need a few lines or a paragraph to answer them. My first ever answer wasn't much over 3 lines but I was lucky and got 6 upvotes. My next few answers got 0 or 1 votes but I persisted and over time got better at answering - and as a result the number of votes I started getting for answers started going up.
Don't expect to get upvotes or accepts on all of your answers but it only takes a few upvotes to start removing the new user restrictions. One thing that does help a lot is replying both fast and accurately. With multiple correct answers generally the first one posted will get the upvotes.
It's actually much easier to get reputation on answers than it is on questions. There are always questions in your favorite topic waiting for you to answer them.
There are no limits on how many questions you can answer - so find a way to isolate the questions in an area where you have expertise and then focus on answering the new questions that do not have good answers yet or questions where the existing answers are incomplete. Duplicating existing answers will get you nowhere although sometimes people do post the same answer simultaneously but that cannot be avoided.
Bill the Lizard and Cupcake provide excellent answers. I would just add a few things.
Learn how to identify motivated question askers. If the asker has been responding to comments, he still needs an answer. If he hasn't, he's more likely to have abandoned the question, so you won't get rep for answer acceptance.
Consider looking at bounties, especially on tags where you actually are an expert. Anyone who is spending their own rep to get a question answered is likely pretty motivated to get that answer, and will probably be back to select a correct answer - and also to answer requests for clarification, which can help a lot in producing an accepted answer. It can be worth spending quite a bit of effort to answer these questions; for example, on my most successful bounty attempt, I learned parts of an unfamiliar library for a platform I don't write for, but I got 525 rep for it.
As you allude to, editing questions is a way to grind past the early newbie levels. In particular, lots of newbie questions have unformatted or poorly formatted code; edits that format the code properly are usually accepted and as a bonus are very helpful to anyone who subsequently reads the question.
There's something that isn't really touched on in the other answers, at least that I saw. I read them all but if this is covered in another post, well, oops.
The other answers seem to be focused on how to gain reputation and what not. And if that's your goal, cool, those are great answers.
But if your goal is to really contribute to the community, do your job (or hobby or whatever it is when you're programming) and when you run into something difficult, post a question. I know answers are much better than questions for rep, but for really learning Stack Exchange, you have to be personally invested.
If you go answer someone's question, you might have some attachment to it. Might. But when you ask your own question, it really brings it home. The question that really brought it home for me was this one. I had a problem at work I was given because I was a Java guy and that must mean I knew SQL. But I didn't. But I wasn't one to shy away from the task. So I sought to really understand the problem and thought to myself "I can describe this in English so easy... and this has to be a common problem... but I can't find the solution anywhere with the terms I'm using..."
And then this guy came along and completely saved the day. My manager was super happy, and when I told him I just made a Stack Overflow post, he about had to change his pants. He couldn't believe that someone out there just looked at my question and gave me the code snippet I needed to get my job done right. And so quick - it was about half an hour between asking and having it answered.
And ever since then, it's been personal. It's been "there's people out there with problems, and I want to help them like I was helped." I want to help get people out of a bind (when I can, I find I have stretches where there isn't much time). And if you want to feel driven to help people, you have to know what it's like to be helped. And that means you have to ask questions.
The only useful tip I can add, that I've found to be extremely convenient, in addition to following your favourite tags, is to make yourself a custom Stack Overflow bookmark; it really helps to weed out everything except whatever it is that you are interested in. Mine, for example:
Clicky
https://stackoverflow.com/questions/tagged/delphi+or+c%23+or+plc+or+.net+or+labview+or+assembly+or+x87+or+vb.net?sort=newest
This gives a landing page with posts curated to seven of my key tags and sorted with newest posts on top. Obviously you can customize as desired. It saves a lot of clicking around, and it lets you always drop in on new and active posts. In addition, I find that I'm always learning something new along the way, because nearly every question that shows up is automatically relevant. Also, regardless of how frequently people are posting in a given tag, newer posts almost always need answers more than older posts. This isn't to encourage bottom feeding, certainly, but all other things being equal... you still have to be mindful of what you shoot for.
Read through, pick things that are interesting to you, and just try to answer them. Even if you don't know the answer or even if there is already an answer, just do it anyway - pretend it's a test and you have to come up with a solution; like a personal challenge. Sooner or later you'll be the one coming up with the answer first, best, or both. It's excellent training for general problem solving skills even if you don't get the repuation points most of the time.
It's been seven hours and fifteen days*
It took me nearly three active months to get 2k rep and this thread helped me quite a lot, so I decided to contribute some findings.
I can do whatever I want, I can see whomever I choose*
Choose your favorite tags: Choose a topic you really know something about and have fun thinking and learning about. Be prepared to do some research in order to answer a question. You'll learn a lot. (And earn some rep along the way)
I go out every night and sleep all day*
Take advantage of timezones: You'll observe that most answers happen during certain hours a day, in my Tag when Europe or the States are working. At other times of the day or during weekends there is much more time to prepare a "fast" answer and less competition.
I could put my arms around every boy I see*
Be clear about your knowledge: Don't try to answer each question which sounds somewhat familiar. Only answer when you are sure you are right and you can contribute something useful. There are many smart people around here, you will get bad comments and downvotes when you say something 'silly'.
Tell me baby where did I go wrong*
Accept critique: It is unavoidable to do silly things in the beginning: bad answers, silly comments. You'll get downvotes and bad comments. Try to understand what they try to tell you and improve.
I went to the doctor and guess what he told me*
Imitate: Quite soon you'll discover that people from the same small gang tend to be faster, have better answers and get a lot of upvotes for the same questions you are working with. Try to find out what they are doing and try to do the same. In my tag it is #Jon Skeet: He is always well informed, gives very understandable answers with nice code examples, which are explained in layman's terms if necessary. Just study what he is doing and try to do the same.
I know that living with u baby was sometimes hard, but I'm willing to give it another try*
Don't give up: The very first active steps on SE are hard. In fact the first steps are the hardest. After your first upvoted answer things start to be fun and it becomes easier with every answer you write, later every comment, every edit. Try to survive the first few active days.
* Lyrics by Prince for Sinead O'Conner: Nothing Compares 2 U
Easy steps for getting started at SO.
Read the rules.
Learn the formatting.
Ask questions.
Understand that not even SO is immune from bullying, ignore the ones who are impolite, they are a very vocal minority, but JUST a minority
Enjoy the site
Contribute
Don't be a taker
Build your own rep, but remember, there are people who will vote you down no matter how good your question or answer is. Don't take it to heart. Keep trying until you get the feel for this place.
Use your up-vote power generously when you get it.
When someone gives you a good answer, choose it as the best answer. They get a reputation bump and it is the best way to say "thanks"
Don't take criticism too hard, to those of us who have been doing this for a while, it looks easy, we forget that it's not to a new
programmer, or to one who has switched disciplines.
Start slow, watch, and read. There are some helpful people in here, and there are some who are not, just like everywhere else.
The people here really care about the site. They may seem harsh at times, but it is out of a sincere concern for the site and for the people here.
Just like everywhere else, there are people here who are not helpful, while they are the most vocal, that does not make them the
most numerous.
Be patient. This place gets flooded with bad questions and by people who just want to take what they can get without contributing anything to the site itself. Because of that, they have created a "tiered system" to screen out people who are not serious.
You will not be cut any slack. This is a professional site, you will be treated as a professional.
You will encounter the occasional jerk, if this happens, flag for the staff to deal with, don't get into the mud.
As was already mentioned above, answering is the best way to gain reputation.
Here are some "pro" tips of how to maximize your reputation points per unit of time spent on Stack Overflow, based on personal experience (observing and answering):
Try not to answer questions that you do not understand. Chance is you will not get it correctly, and/or it will take unreasonable amount of time to argue with OP about "what they really wanted". If you feel like the question is unclear, consider leaving a comment, and skipping to the next question. If your comment is later answered, and the question becomes clear enough, and it's still unanswered - now it's your time to give an answer.
Try to only answer questions if you immediately know the answer, or can figure it out in 2-3 minutes by doing a simple Google search + maybe 1-2 minutes sandboxing in your development environment. This way even if you don't get any reputation points (for example, someone did it faster), you've only wasted 5 minutes of your time. It's very unrewarding to spend even 0.5 hour on someone's question only to find out they already accepted an answer, and never bothered to check other answers. This is relevant to the next point.
The faster you answer, the more reputation you can get. This is because other people visiting the question may upvote your answer. You posted late, they've already been to this question and are definitely not coming back just to upvote your answer. There is a caveat - you answer incorrectly - you may get a lot of downvotes. So your initial answer must be fast, precise and actually address the issue in full. You may later edit it and add links to documentation, relevant articles, other Stack Overflow answers, etc. to make it nicer. Don't even try to write a perfect answer from the first attempt. There is a high chance some other user will provide a "fast" answer, which will get upvotes, get accepted, and then you finally post your answer, to find out nobody's there to read it.
When answering a 1-2 hours old question, be prepared to waste your time. If a question was not answered immediately (within 10-15 minutes), and especially if it has no upvotes, or worse - a negative score, there is a high chance (I'd say 90%), you will not gain any reputation here (or get an accept 5 days after and that's it). Unless it takes you 5 minutes to answer (generally when it's a complicated subject, but you are an expert in this area), it's best to move on.
I stumbled on this Q&A and was surprised (or honored :)) to find me quoted in the accepted answer.
I feel I can share my experience in a detailed answer that I had written earlier but seemed to be off-topic for the question so I deleted it.
I think it will be more on topic here, and won't hurt people into thinking I'm providing techniques to accumulate rep unfairly. This still requires a lot of work on the site, and it's certainly not designed to game the system (I deleted some upvoted answers because they were wrong, so no, reputation is not the ultimate goal, it's just a consequence of being helpful)
A few hints to get started & get some reputation/badges on SO. Those are "techniques" I used, but I feel that those aren't gaming the system and are fair.
On the new questions:
You need to be ahead. Being to be one of the first to read the new questions is a real must have (to answer newer questions on popular tags like python, java, C++, C). That means you have to spend a lot of time on the site, or frequently check new questions all along your day.
To be ahead, tune your filters to avoid seeing all questions. You won't be able to follow, and you cannot know all the languages/technologies.
Don't lose time answering crap questions. A question with a score of -4 is very likely to be closed / ignored. You'll waste your time, and won't even get an acceptance from OP who doesn't have a clue (you might get 1 upvote, maybe or some downvotes). And in the meanwhile, you're missing better questions.
For some questions, you have to be a FGITW (be the fastest to answer), but your answer must be spot on. So stay sharp and drink coffee (with a straw so you can keep on typing)
For some questions, it's better to comment, ask clarifications, leave other FGITWs answer (and do it wrong because they actually didn't read the comments). While all bad answers are being posted, hone yours, make it better/more detailed/more performant than the others and post it afterwards. The combination of "a lot of comments" then "an answer" is appreciated by followers, because you took your time before answering properly.
Don't answer obvious duplicates. Instead, vote to close / hammer them if you can. You'll be punished by some (specially if you have a high reputation) by answering. You should know better. Instead, you can answer the "original" question if you feel something is missing. I did that once, and my answer now has a +10 score.
On the old questions:
There's a "new answers to old question" review queue. I think that's where I got my first +1, because I added a above average by answering to an old question and I was a newbie so someone wanted to encourage me.
Of course if you're a specialist of some obscure/less popular tags (like Ada) you'll get upvotes on older answers by followers of those tags / people who have the "active" setting in SO page to see not only new questions, but active ones (which is impossible to follow on the popular tags BTW)
On any question:
Once you posted, edit your answer to add details. If it's already good, you can get upvotes, but enhancing it makes it "active" again, and if it's better you may get more upvotes.
Answer the comments made on your answers. Some commenters upvote if you answer them (better: edit your answer to take their questions into account if worth it). Plus it means that you care.
If you feel it's wrong, delete it, edit it, undelete it. You'll save a stray downvote.
Upvote concurrent answers if they're good (you'll even get a "sportsmanship" silver badge for that eventually). It creates a gap between your score and the other(s) answers, which isn't necessarily bad. Some may even think that yours have not enough votes // the others and that could even play your way (don't do that just to achieve that result, though)
If the question is bad, but you still want to help, you can comment on what's wrong. Doesn't hurt, and you'll get known as a nice fellow.
Don't answer like you would comment. If you don't feel like answering, then don't, and just comment.
Also upvote the good questions. That'll make them visible, only if it's worth, not to indirectly promote your answer. A lot of people forget to do that. Good questions need love too.
A bonus: by keeping a spotless behaviour (asking for precisions in comments, be reactive to comments, helping some users with typo questions by commenting on the error "for free", not answering turds, not answering obvious dupes, closing as duplicates with a small personal note to the OP, creating excellent answers,being nice most of the time :)) you may get unrelated upvotes: people wanting to upvote you twice (not recommended, but not serial voting yet), people visiting your profile and finding other good stuff you wrote in the same style and upvoting it)
Asking (good) questions & answering on meta also proves that you care for the site, not only for the rep. That can have strange effects (I frequently get downvotes on my questions after posting on meta, but upvotes on some answers at the same time!!), but globally it has a positive effect on your "reputation" (the one you don't measure with points). Can't hurt.
Gaining a couple of reputation points is not all that hard if you know enough about a certain topic. Just filter for it and start helping people out. A lot of times there is plenty of stuff to add, even if a certain question is answered. Elaborating on a very old question is a good way to earn reputation points and improve Stack Overflow and Stack Exchange. Once you have those 10 reputation points you can edit and improve your own answers with more links.
If there are no more questions you can answer or improve and there are no more questions you can ask, then I'm wondering why you want to get started here. If you can not improve there is no reason to get started. On the other hand, I'm a novice hobby programmer, and I can still help out people here and earn some reputation points when I am active enough. I am sure everybody with some knowledge can improve Stack Overflow and Stack Exchange.
Finally, this site is about putting up good questions with good answers attached to them and not about earning reputation points or some kind of reputation points challenge. Just start, gaining the first 10 reputation points is a cakewalk and from there you can do everything Stack Overflow and Stack Exchange is intended for.
Edit question, +2 each time suggested edit is accepted => 25 edited questions for reaching the magic 50 threshold
Fact is if your domain of expertise is C++ or Java or any super well known domain , it is almost impossible to find a good enough question not answered/accepted, and if you pick up the newest, it will be answered before you have sent your response.
But there are thousands of questions out there that can be improved. Most of them have some Tags missing or some Tags not relevant.
Somes can be improved to help understand the issue.
I was full of excitement and vigor and immediately tried to upvote (nope!) and post a comment (nope!).
That's indeed the main problem with the blessed site of Stack Overflow. People take this site as fun, as a game, as anything but sharing knowledge.
So, I'd tell you how to really start.
Register.
Start answering.
NEVER read the question body, but only tags and title
Write an answer that just looks like a good one (preferably just copy and paste some code snippet from manual, or other answer, if you want to bring some explanation along), but has no real relation to the problem.
Get deserved and hard-earned upvotes a ton
Don't be afraid of getting some downvotes - as long as your answer looks like a good one, the only downvote you can get from someone who have a clue and time to bother, but such people are scarce. Yet for every downvote you will get a comforting upvote - this site is for fun and happiness - remember?
Start your desired "activity" with votes, comments and unicorns. That's the real fun and purpose of this site.
Enjoy!
Apparently my old advice was SO bad, it wasn't even good, it was just bad.
So, here is what NOT to do under any circumstances:
1. Write 'Any help would be greatly appreciated' at the end of each question, because that's obvious.
2. Do what I did, and pretend that someone's comment was helpful just to influence them into re-upvoting your question, even if it does give you better rep. Stand up for what you really think! It's better for the community.
3. Ask a question that you haven't researched, especially one that has a good answer on the very same website (you might embarrass yourself, or make people unreasonably angry).
Here is what you should do:
If someone answers well regarding a piece of code, but you realise that what you posted was a much simpler version of what you're actually attempting, and you now want active help for your HARDER piece of code, just post another question instead of editing your old one. It's not cheating! Someone told me this and said my EDIT was a completely different question, and more people would notice it if I dedicated it to a new question.
If programming, then post your precise error - it's easy to do, and it's really hard to get any sympathy without it.
Be concise with your English. It makes a difference: e.g, 'it is important to note that I have already tried X, Y, and Z' could be said as 'I have already tried X, Y and Z'. Or, 'overly complicated' could be said as 'too complicated'.
Also, don't include anything that DOESN'T help people answer your question. For example, backstory. No-one cares. This is an exaggeration, but e.g, 'I've been doing this really hard project at this workshop with an old version of X and we're not allowed to use imported modules for some reason, other than X, and it's taken me ages and I feel like I'm missing something totally obvious; lots of people I know seem to have managed it just fine, but by the way, I was never quite sure if it would be better to do X, Y, Z' will probably alienate your audience. Also, don't say 'I'm really a beginner, I only started python X months ago', because you may as well say 'I don't know anything, I'm so sorry, I'm completely wasting your time'. It's not going to make people answer your question any better.
I believe answering those questions which you feel comfortable with. Favorite tags will present you specific set of questions.
However, if you genuinely feel an urge to answer a question out of knowledge or interest, then you can go ahead. Don't worry about an up vote or reputation. If you are engaged in a programming language, you yourself got some errors at that particular time, but you resolved it with the help of Google or Stack Overflow. Try to answer such questions, which you are very sure of.
I don't think it is necessary to answer on a daily basis. Unless and until it's within your helping range, don't go for it.
You should first ask yourself why do you want to join this community.
Figure out weather this is a community you want to be part of. Spend some time and research the type of people that are active contributors here (especially the elitists that run this site). Make sure you take your information from sites that are not under the stack exchange umbrella, since the content of those sites is moderated.
In hindsight, that would've made a huge difference, at least in my case.
So, to sum up and answer your question, the first thing a new user that wants to join stackoverflow should do is to understand what he's getting into. Failing to do so will result in a lot of wasted hours.

When has a human-based service replaced an automated one? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 12 years ago.
Improve this question
I'm looking for examples where a human-based service replaced an automated one. For example, machine translation (although suboptimal in quality) largely replaced human translation in many areas -- can anyone think of where the opposite has occurred (especially with regard to today's industry)?
Edit: Before you downvote because this doesn't have the keyword C++, my reasoning is that programmers invariably create these technologies, and programmers are the ones who are either 1) displaced by the revival of human service, or 2) asked to somehow integrate the human element in a service. When there are questions like this one, it doesn't make sense to downvote this (unless you downvoted that, too).
reCaptcha is, I think, a direct counter-example to your machine translation example (since it's a form of visual translation, so to speak),
perhaps google image labeller counts
I recall something about yahoo running a "humans do simple tasks online for you cheaply, in the place of cpu cycles" scheme.
Crowdsourcing in general might be something similar to what you're thinking of.
Perhaps not the most exciting examples, but certainly among the most common--used everyday by pretty much everyone. Non-trivial as well.
Electronic Stability Control (braking-steering control in many (most?) automobiles
Auto-focus in some digital cameras.
It is an unlikely situation because for a machine to have been given the responsibility in the first place you would expect it to have been sufficiently good/cheap/etc at the task. So for it to then be replaced by a human, the human approach would need to have some how got better or cheaper at a faster rate than the technology driven one.
That's not to say that there isn't an example of this of course. I think it is an interesting question.
I've heard there are CAPTCHA-resolving centers in India. That may be a lie though.
Actually, I have an interesting example of this.
A few years ago I was working for a company writing a Dive School System for a Hotel in Sharm El Sheikh (in Egypt) along with a new "front of house" system. We were trying to come up with a fast check-in system for checking in an entire busload of divers arriving from the airport, the thing is, in Egypt labor is very very cheap, and the end it was more costly to do this with a computer system, than to continue with the old manual system of simply having 15-20 staff doing the checking in.

When is it too long for someone to return to a development role from other roles? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
What would be the best way to bring people back to "their first love", i.e. programming, from other roles, e.g. sales, management, support, testing, etc.
This may become an issue given the current state of the economy.
I'm not talker about the CEO who last programmed ALGOL using punch cards, but someone who has more recently moved away from programming into a role that they realise is not for them.
When is it too long "away from programming" for someone to make the switch back and make a useful contribution?
I don't think the time away should be used to define whether a person is ready to come back. I was a dev for a long time, moved into management, and then into executive management, and finally decided I had to come back to development. The key to my ability to do it was that while I was "away", I was still following the industry closely and I still did little side projects to keep my skills (and my lust for development) sharp.
So, I was away for almost ten years and I am back at it and having a blast.
HTH,
Colby Africa
You can always come back.
It's more a matter of; how long will it take to ramp back up?
I'm afraid the unhelpful answer is that it depends entirely on the person.
Just as I would never judge someone by how long they've been in the industry, I also wouldn't judge on how long they've been out of it - if they can be a useful member of the team and contribute, then that's all that matters.
If the person realises he's wrong at the new non-programming position, then "coming back" probably works even after quite some time. He might even be a better developer than before, since he had some helpful insight somewhere else, probably towards the "bottom line".
If not, if he's being demoted back to development monkey, then probably a single minute is tool long.
All in all it's a dynamic process. I've seen people changing roles in the lapse of 2 years, when in the beginning they seemed stuck to programming and did not feel good doing "the managment thingy" when later they could not develop properly anymore, liked the job they were now doing, and said they'll never get back.
And then of course, it's a personality thing: Personality of the person, and personalities of the surroundings: If somebody out of a group get's their leader, it might be harder to get back into the lines.
I hope we have learned from the Y2K era when many people from liberal arts areas were brought into IT to try and address a shortage of IT personnel. I am not saying people from other fields can't make great programmers, but I think they have to at least have the logic/problem solving skills and some training.

Did you ever get an unexpected answer during interview? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Closed 11 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
When interviewing for a programming position, did you ever get an answer to your question that you didn't quite expect? The answer could've been quite smart that you didn't even know or it could've been a dumbest answer you never expected. I'm expecting technical type of questions but anything interesting is fine.
Q: "Do you have any weaknesses?"
A: "Kryptonite"
A light-hearted one...
Towards the end of an interview, which I thought went reasonably well with the candidate asking sensible questions, showing interest and a good general rapport I asked a closing question because I wanted to know whether to proceed, "so what do you think, would you be interested in the position?".
He replied "I think it is the most boring job I have ever heard of and there is no way I would come and work for you and I think your whole company is lame" (the company was a nasdaq listed software house turning over around a billion dollars). I looked at my co-interviewer, who was a seasoned development manager who worked for me. He smiled and we showed the guy out.
In almost 20 years of interviewing that is the most surprising response I have had.
We were looking for an application programmer. After putting up some pseudo code on a white board I ask the candidate a question about it. His answer "is this some type of programming thing?"
As an interviewer I never had a big surprise, but as a candidate I was shocked and appalled at one company where I was not allowed to ask questions... WTF? I left pretty quickly.
Not really an answer, and a long dead question, but anyway... I was once one of several people interviewing a candidate. It wasn't going very well for him, but not a complete disaster either. At one point during the interview, his phone rang.
At this point, I kind of felt bad for him - he was obviously nervous and now had forgotten to turn off his ringer.
What I didn't expect to happen was for him to TAKE THE CALL, speaking for several minutes. In a foreign language. My coworkers and I looked at each other incredulously.
When he was finished on the phone, he simply hung it up and proceeded with the interview as if nothing out of the ordinary had happened.
He didn't get the job.
Not any questions, but I was once told that I had to hold a presentation about the company after he had given me information about it. Made me really pay attention to what he told me about the job and organization (I got the job).
I have also been doing a lot of interviews and hired several of my co-worker, something I wrote about for this question:
https://stackoverflow.com/questions/194543/for-interviews-how-do-you-gauge-whether-the-candidate-would-be-a-good-coworker#285594
I remember once I was interviewing at Microsoft and the manager told me that he was on the fence with me about whether to hire me or not. I told him, "Then don't hire me," which I think may have been a bit of a surprise to him.
I asked someone to sketch some Java code on a whiteboard when interviewing and was surprised to see the candidate put some Python up instead. Turned out the person's Java skills were, shall we say, over inflated on the CV...
Not an answer I heard, but one that I gave.
An interviewer asked me if it was possible to write object-oriented programs "using only a C compiler". I was a little bit amused by the peculiar word choice, so I jokingly answered that, in C, you could write a compiler for an object-oriented language and do it that way.
The interviewer didn't give me a chance to say how I understood that structs aren't really objects, functions aren't really tied to their data strongly enough, and there are a bunch of other OO features missing, so you can't really do it in C, which was probably the answer he was going for. I thought I had screwed up until he ended the interview with an offer for the position.
As an interviewer I had not been surprised very often. Most of the people have been respectful and intelligent. I had only been surprised by how quiet and nervous some people get or how little they tried to answer some of the technical questions.
As an interviewee I've given answers that were not expected. There was one occasion where I gave an answer at an early stage interviewer for large multinational company- and they simply did not understand the solution. Lesson learned: never give a 'different' or 'out of the box' answer unless it is in writing and the person receiving it is technical in that area. Otherwise, they may simply regard it as incorrect. Give the answer you think will be the norm- because in most cases the early interviewer has a very short list of the 'possible' answers.
Update:
The interview I was referring to was a 4th or 5th stage phone screen- so I guess it is not as applicable. The question was one of those ones that involve 'assume you have infinite memory' so I played on that coming up with some strange 'what if' scenario. The 'best' answer was one that was more to the point using traditional methods.
This doesn't apply just to the single item I mention below.
We did ask an applicant for a C++-centric software engineering position one time to talk about classes and objects in C++, which he could not answer. The final thing that ended it all was "do you even have any experience with C++?" The response: "No."
"You had a school class and you list it on your resumé..."
I interviewed a guy for a C++ job. He had lots of C++ buzzwords on his resume, including 'smart pointers'.
I wrote a little example program that used a raw pointer in a loop, the pointer was never deallocated. There were several if() statements that had if() statements inside of them, so stuff was going in and out of scope a lot.
I told him that this program ran fine for a while, but eventually it would bog down my computer or throw some kind of error message from the OS. I asked him to please take a look at this and see if you can see a problem or suggest an improvement.
After what seemed like forever, but was really on five or ten minutes, he noticed that several of the if statements would reassign my pointer without deleting the thing it was currently pointed at. He went through and added delete statements before these lines. So far, so good, if a little slow.
I asked him if there was anyway to make this code cleaner and less dangerous. I tried for over ten minutes to get him to say 'use a smart pointer', but I just could not do it. At one point I even said 'the answer is on your resume'. Still, total brain lock.
I really expected that using a smart pointer would occur to a guy who put 'smart pointers' on his resume would. I had anticipated we would discuss the different flavors of smart points that exist in the C++ universe, I didn't expect a total vacuum on something listed on his resume.
After more talking the fellow it came out that in his current position in a defense contractor he spent almost all his time going to meetings and wrote almost no code at all.
I liked the guy, but didn't feel good about putting in a full time C++ job so we passed on him.
Sorry, I misread the question. But since I've also done interviewing I can adapt my answer.
Where I work, the first question we ask in every interview is "tell us a joke". (Yes, I know, it isn't technically a "question"). This tends to lead to some unexpected answers, but they'd only be entertaining in person.

How to break bad news to high-ups in other non-IS departments? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
Recently we added a couple web service machines, and they couldn't successfully email out. We (IS) did not notice this, and the exceptions were being swallowed up and logged, but no-one noticed for about a month.
Needless to say, many purchase orders, and retraction of purchase orders, were never sent out for the past month.
While this isn't any one person's fault really, is there any GOOD way to break this to someone non-technical that is higher up in the company than you?
Thanks in advance for any advice, I'm freaking out just a bit. :)
Edit: Reading this over, I'm more asking for tips on how to break the news. I understand there isn't a GOOD way, just maybe successful tips that have worked for you in the past.
Resolution in case anybody was wondering...
new web service machines IPs weren't added to our mail servers list of trusted IPs. :)
Put emphasis on the fact that the problem was discovered and fixed swiftly by your team. Have detailed metrics on the number of failures, which customers were affected, etc. ready, in-hand. Have a contingency plan ready to describe that will prevent similar issues from happening in the future. Engender a sense of comradery with the higher-up because you are all on the same team and it's a team problem. If you convey a sense of urgency and give the impression that you appreciate the impact to the bottom line as much as they do, they will respond much better.
Lowly techs often make the mistake of going to upper management with their tail tucked between their legs, like a child who shamefully shows his parents the lamp he broke and waits for a spanking. You are an adult and a professional - leap into action and coordinate the right people to be in place to make the right decisions to fix it. In a case like this, that inevitably means bringing in upper management, but do so with an intention of solution seeking, not fear.
You bring shame to your department. You know what you must do.
http://en.wikipedia.org/wiki/Seppuku
Gee, bad news for ya - but it is someones fault.
The folks who built the server and installed the apps and signed off on putting them into production use without testing them. :-)
Pretty much the only way to break this to the management is to acknowledge the MAJOR FUBAR and show them the plan for making sure this kind of situation doesn't happen again.
Good luck. :-)
Raise the issue as soon as possible.
Come with a clear plan/lists of steps of how to mitigate the problem:
how to fix the issue, so further processing works fines
is it possible to determine which transactions are affected
what is necessary to ensure this does not happen again - automated tests for deployment, preproduction stage for new servers, anything else?
Be proactive in resolving the situation. As long as it's not a direct fault of yours, you might even benefit from the whole snafu.
Being honest and direct is the best, rather than trying to cover up certain aspects of what happened.
Don't blame anyone, simply accept that a problem happened, propose a solution, and execute on that solution. Communicate this plan to your superiors and be clear about why you are taking the steps you are taking to solve the problem.
The time to find responsible parties and blame comes after, solving issues having to do with collecting money from customers comes first.
Once the immediate problem is solved, then find a way to ensure that whatever caused this problem cannot happen again. Have a plan.
Point out
What happened
Why it happened
What you think the fallout was (ie, missed purchase order retractions)
What you've already done to fix it
What you need to do to (if there's more fixing needed)
What management needs to do, say, spend (if needed)
What can be done to prevent similar incidences in the future
Be proactive about reporting it and spin the negative into a positive ("we've learned the following valuable lessons").
Avoid pointing the finger wherever possible unless asked, and try to spin that in a positive light too. Techs make mistakes; they are human after all. If they can learn from the mistakes made they're probably worth keeping around.
Whatever you do, make sure you have agreed on it beforehand with your immediate superior, at least. Even if you are iS director.
lie or cover it up :-), if you can shed the blame to a new intern ill award you 10 kittens!