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

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.

Related

Getting My Hands on Something New [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I am not sure if this question is relevant to this Stackexchange site or not, but here it goes.
I have just graduated in Computer Science and I will be on my Job from next month onwards. Till now, during college, I did most of what was in the course structure without really exploring much. I like Algorithm Designing, and tend to keep working on that for the rest of my time by solving a myriad of problems available online. EDIT Apart from this I have covered Databases, the basic stuff that is how to retrieve, manipulate data and also the Indexing [though I scarcely remember much of it], Operating System, read about it, the processes, and file system [ a bit weak ], Computer Networks etc., that is the all the basic courses that are expected of a CS graduate.
Now, I wanted to learn something new in the field of Computer Science. I want to take it up, and read about it, and maybe work on some small and simple project, so that I feel confident enough, like I fee about Data Structures [though I am still learning, but having worked with it for a decent span of time, I have started to feel confidant about Data Structures.] I am in no rush, and would like to work for an year on it, since with my job at hand, it'll be difficult to devote time, like I could while in college.
Now, if someone were to suggest some branch of Computer Science, that fits my interests and will be interesting to work with. Also, along with it, a head start on where I can begin learning about the same, maybe, books or other material.
Interests : Logical Thinking, Algorithm Designing, Software Level [I never like Microprocessors or Computer Architecture].
Also, I read about different branches of Computer Science, and Artificial Intelligence really excited me, since it sounds cool, but I am not sure if it is as exciting to work with, as it sounds.
EDIT It's not exactly Artificial Intelligence That I am looking for, I just want to explore a new branch of Computer Science and would love to know from the people in those fields, about what to expect and what not to. I am as ignorant of AI as any other field.
I am not which Stack Overflow tag would go the best with this question, hence I just added Computer Science and Artificial Intelligence and all others that I could think of [Limit on tags is 5]
I've spent so much time with the basic coding stuff and solving problems [ though I still have not done even 0.1% of the stuff out there], but I think I would want to take on something new and exciting to keep me occupied and hooked even more.
PS : If this portal is not suited for such questions, let me know, if I can ask it on any other StackExchange website. I'll take it down.
EDIT
I am 22 years of age. I got a job offer from a decent firm right after college, and had planned to go for MS, after a couple of years of job, [having made some money for the college]. But a few days back I was going through the Courses offered by the universities like Carnegie Mellon, Cornell etc. and it hit me if I really needed a Masters Degree. If I really needed the certification that I know something , rather than knowing the stuff in real. And I inferred that all I want is to know stuff, and know it deep. I am fairly diligent student, and pretty sure of my capabilities. If I set out to achieve something that excites me, I do achieve that most of the times. And even after MS, my main motive would be to get a decent paying job, but I guess, I'd want to learn even then. And in the end, maybe own something of my own. Some little 'Technical Venture' that may be as simple as it could be,yet something of my own. And Hence for that, I guess, I don't really need MS, if I can study on my own. I know it will be difficult to maintain it with my current job at hand, but my passion for learning will drive me forward. I want to pick up something afresh, that is exciting and that I can work with for a good year or so. And if I feel that I've done enough with that particular field, I'll try to pick up something new.
So kindly pour in your valuable thoughts and help motivate a rigorous learner.
I remember studying Artificial Intelligence, and I think it can be as cool as you think it will be. It's just really hard! Also, not sure what the job opportunities are like.
If it's something you'd like to play with though, I'd recommend doing a bit of reading with neural networks. I think they're a little outdated now, but I remember they showed me what sort of things can be done with AI.
I'm afraid I can't think of any resources on it at the moment, but there should be loads of introductions out there.

The Oracle Problem, as it relates to testing [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 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.

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.

Iteration planning tool [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
I have several problems planning an iteration for a single week. We use XP and TDD in Pairs and it is hard to decide who is pairing with whom. Is there any tool support for planning an iteration that also supports planning of pairs?
In XP you don't plan who pairs with who and when. Team members just pick a task to work on at the start of the day, in the daily stand-up meeting. If someone else also wants to work on the task, they'll volunteer to pair on it. Team members who do not pick a task first will pair with someone who did. Sometimes the person who picked a task will want to use the expertise of another team-member and so will ask them to pair with them. But that person may have something more critical to work on and decide not to. Pairs often switch while a task is in progress, especially if it takes more than a day to complete.
So, pairing up on tasks is fluid and informal.
The one thing to keep an eye on is that everyone on the team pairs regularly with everyone else. If that is not happening, it can indicate a deeper problem in the team -- someone not pulling their weight or people who do not get on, for example. If left to fester this can lead to siloed knowledge and key-man dependencies that increase project risk.
In those situations, some teams like to use "pair stairs" to keep track of pairing and highlight problems.
However, that is just addressing the symptoms (uneven pairing) not the underlying problem. It's better to address the problem head-on in a safe environment (e.g. run a retrospective) and work out how to solve it.
I suggest using a product such as VersionOne.com. With this product you can either load up your projects (resources, etc.) into their online version or you can grab a copy of their product and install it to your local servers. This is not a free product but for the non-enterprise version you do have the first year to try it for free! It is similar to crack...give the first taste cheap to get you hooked. Great product though. I have yet to meet an agile team that didn't enjoy working in this environment.
If this is not your cup of tea though there is a product out from the folks at ThoughtWorks.com called Mingle which I have been eye-balling for a while now. This looks to be a wonderful product as well. I have not yet used it though...but have spent a fair amount of time researching it and chatting with others about it. Very slick product!
There are quite a few products available for agile/scrum teams... have a look at http://userstories.com/products for a decent list.
We use versionOne where I work, and it does some things quite well, and other things... not so much.
You'll need to use a product for a little while, at a low level and a high level to make sure it fits your needs.
As part of a scrum team, I deal most with planning and writing sprints/stories, and tracking progress of my work. Thus for me, those are the two most important pieces to get right.
That said, I don't know if this is addressing the "planning in pairs" question -- what exactly are you trying to achieve? Is there a reason you are trying to avoid your devs make that decision? Are you trying to rotate teams all the time? Does everyone always want to pair with one person? You could always just pair up people based on who wants to work a particular story...
Without a better understanding of you constraints, I wouldn't know how to answer that part of the question. I also doubt that how to pair up is something you should be using a tool for.
Make pairs based upon working style, or people who work well together and can communicate easily with each other, or have different strengths.
Avoid vastly different experience levels, since that doesn't always encourage discussions, and is more apprpriate for mentoring than pairing.
Glad to see you are pairing and using TDD. WIth pairing, rotating pairs is important. However, for any story card, it is important that a developer stay with the card from start to finish. That person is the primary half of the pair.
So you have two issues. How should you handle rotating pairs, and how to you track the burn down in XPlanner or some other iteration tracking tool.
Regarding the burndown, the primary developer can be assigned to the card and responsible for updating the burndown daily. For pairing, you should have a big visible chart (BVC) showing the pairing schedule. This will ensure that all developers pair with each of the team members and help ensure that the code is shared across the team.

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.