I think that this question is a good starting point to know a little bit more about your customers. Is well know that any product/service can be improved by gathering relevant information about the consumer needs.
In my own case, I really enjoy DIY projects. I am not a professional programmer, but I figure out how to maintain some "programming independence" in order to run my own research projects. I am extremely proud that the work I have done is being used by others. But enjoying Do It Yourself projects, I mean, just Yourself, is not better than contributing to open source community. Any scientist should contribute to and benefit from open knowledge. I believe in open source.
Following Behavioral Principles
As a scientist of behavior, I could try to give some fundamental explanations to the question "How to increase the chances of the returning behavior of each member of the community?". Of course, such a broad question would require a lot of data. But let me explore my own case.
In my specific case, I am convinced that the community, especially Jamal, have been following an important behavioral principle: To present a consequence for the "post behavior" as contiguous as possible. The community do this by editing in a polite and useful fashion, commenting with teaching intentions, up-voting for evident or useful work, and so on, as soon as possible. Immediate feedback is the best.
But contiguity is not enough. You/we need contingency.
The very existence of the "outsider" or "beginner" terms, indicates that the community have in some degree an established and alive culture. This culture must be taught in order to keep the community growing and sustainable. Good commenting practices, asking question practices, answering practices, editing practices, and and so on. Consequences should target some specific behaviors in a predictable way; in summary (as metaphor for a technical term) that is what it is called "Behavioral Contingency". And some behavioral scientists (for example, my self) call themselves as "Contingency Programmers". As you can see, a lot of things to learn.
Hence, one could take advantage of informative well written and well presented Captions, Help Instructions. In my opinion, as someone concerned with usability issues, StackExchange platform/framework is pretty advanced on this. But it can be improved even more, an need to be adapted to the CodeReview community needs.
Further, now about the dark side of the force, punishments. I am afraid that the Down vote practices are not well established, please correct me if I am wrong on this. Down vote is a message to the "post": "As its current state, we do not want this post in our community". If I am reasoning well, avoid down votes completely should be the rule when the user is new.
Why? Because a lot of people with normal development in a Work Culture tends to recognize their behavior as themselves, and then tends to exchange the meaning to "We do not want you in our community". Hence, before any down vote, the user should be informed that the target is the POST and not him, and that it should not feel bad about committing mistakes. As soon as the mistakes were resolved the down vote should be reverted. Fortunately, I am quite persistent. This kind of approach could be applied to other similar circumstances.
So, I can say now that I am having a good learning experience as someone that wants/expect to learn with the community. I can say that the consequences the community have been presenting were reinforces to my "returning behavior" and punishments to my "bad returning behavior". I just keep returning with good intentions and will try to engage in the best way of learning as soon as I feel comfortable to do it. You know... teaching/answering is the best way of learning.
How to design a teaching machine for humans with normal development? The behavioral science is pretty advanced in this issue. Unfortunately, the Politics around the world prefers to concentrate their investments in the "machine" side of the project. For instance, an illustration can be handy.
The South Korean efforts to provide a personal computer for each student without similar efforts to provide individualized teaching methods (providing well developed educational softwares, for example) results in a weird scenario: some students do not use the computers as intended. Some of they just prefers gaming, some with health risks involved.
As you can see, the "teaching" side is equally important, and should not be underestimated. The question remains. How to design teaching machines? Some important concepts:
- If you can not control it, respect the diversity. Each person have their own time. Some will rush, some will not.
- There is a lot of things to learn, a lot (the culture). Presentation Order and Unit information Length plays important rules. Each person should be presented to small pieces of information ordered by its complexity, from simple to complex ones.
- Advance to a more complex step must be a self decision. One should learn that he/she is in charge of their own learning. Skip (cheating) a necessary step should be impossible or lead to non comprehensive information, just like math does.
Reading is not enough, unless you are learning how to read. You need to get your hands dirty in most cases. One should engage and exercise. You will only be aware that you indeed learned how to vote by voting. In this sense, the piece of information can be a single task that must be accomplished.
I will be updating this when time permits.
For a comprehensive introduction to the theme:
Sulzer-Azaroff, B. (2004). The Shaping of Behaviorists: BF Skinner’s Influential Paper on Teaching Machines1. European Journal of Behavior Analysis, 41(2), 129–135.
Lucky in the chaos
At the end, it is very important for any business, project, aim, to be aware that the world maintain a lot of uncertainty. It can avoid unnecessary frustration and minimize the unbeatable ones. CodeReview data should be interpreted considering this natural scope. It is a worldwide full of people enterprise.
Be excellent to each other!