What we're about
CoderNight is to practice development. You write code in pairs or individually and submit the code to me. I post an anonymized repo and you have a week to look at all the solutions before a friendly night of code review.
CoderNight is a chance to practice your coding skills outside your work environment or help get started if you are just learning. CoderNight provides an ego-free environment to perform deliberate coding practice and to receive critical but judgement free feedback on your progress.
CoderNight welcomes people of all skill levels from "I just wrote my first line of code" to "I have invented my own language"
How does it work?
We will send out a homework statement a few weeks before the meeting. You'll complete the assignment and submit your code anonymously (you may submit more than one entry). About a week before the meeting we'll start sharing solutions for everyone to read and review. During the meeting, the group will review and provide feedback for the posted solutions. The sole purpose of the meeting is to provide feedback to those who submitted code and ONE guest.
Each meeting we will send out a challenge problem to work on. These will be non-trivial problems but not impossible to solve. We aren't going to make you solve the Traveling Salesman problem, but this won't be 2+2 either.
You can work on these problems in a manner of your choosing - individually, in pairs, etc. Code must be submitted before the meeting - 'night-of' submissions will not be accepted.
Submitting your code:
Submissions will be 100% anonymous
For now submissions will be emailed to me (gavin at gstark.com) and I will create a public github repository for everyone's code. NOTE: this is not 100% anonymous since I'll see your email address next to your code, but I'll try to ignore/forget.
You may submit more than one entry.
Your submission should also state what you are trying to achieve with the solution provided. Examples include:
Just learning to code so I just want this to WORK
Learning Ruby, practicing writing with the "Ruby style"
Trying "everything is an object"
Golfing (fewest possible number of characters/lines) attempt
100% Test Driven (include the tests)
If you consider yourself an experienced developer and you raced through the assignment, you are "doin' it wrong" and should find an area to focus on. You should attempt to solve these assignments using techniques that are outside of your comfort zone. For example, perhaps try "TDD as if you meant it" ( http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/ ) or try to avoid using primitives (eschew integers for objects).
We will publish a full catalog of submissions with enough time to review them prior to the meetup.
ONLY those who submitted code for review may attend the meeting.
Each person who submitted code may bring no more than ONE guest to the meeting. Guests may attend ONCE before being required to submit code in order to attend.
What the meeting IS:
A place to get honest, critical, and helpful feedback on your code either anonymously or face-to-face
A place to ask questions about the positive and negative qualities of many ways to solve the same problem (I guarantee there will be more ways than you'd expect)
A chance to identify areas of problem solving, coding and Ruby you'd like to improve on. (and perhaps focus on for the next meeting)
A great chance to help others.
What the meeting is NOT:
Grandstanding ("Look at MY code, I'm the king of the world") -- I'll kick you out.
Pick on the noob ("ZOMG, 200 lines, I could totally do that in 6!") -- Again, I'll kick you out
Hard recruiting to hire. Its fine to meet people and see they'd be a fit for your company, but if you use this as a screening process, guess what -- I'LL KICK YOU OUT.
A few meetings rules:
You have to submit a solution (or be an invited guest) to attend the meeting. Statler & Waldorf's are not welcome - no "I'm just here to criticize".
You MUST have reviewed solutions and be prepared to speak about them. We are NOT going to read each line of each submission as a group. The meeting only works if you have prepared notes.
You can be critical, but you must be kind. Otherwise, yeah, you got it, I'll kick you out.
You must be willing to follow up with people who want to ask questions or for additional detail regarding your comments.
You may not ask "Who wrote this anonymous solution?" -- 100% chance I'll kick you out.
Why am I doing this?
I learn by doing. I learn by practicing. I am always coding. I am always refactoring. I also learn by watching and helping others do all of the above. I'm always impressed by seeing how others solve problems and enjoy helping people improve and through that improve myself.
I understand people can be self-conscious of their code. It sometimes feels like an extension of yourself and you don't want to be criticized by others. This is why the anonymous option and "be critical but kind" is so important to the format of this event.