This delayed blog post was the casualty of a very busy week studying at gSchool leading up to a two-day assessment (two hours each day). The assessment is meant to give a general idea regarding how we’re progressing toward becoming junior developers. Unfortunately, I got bottlenecked on both the Rails and Ruby assessments. For Rails (for reals), it was a dot (.) that curtailed me for most of the assessment time. Although I haven’t yet sat down to look over my code, rumor has it the ‘:post_id => nil error’ message could have been fixed if I’d written ‘:post.id’ instead of ‘:post_id’ for a nested route. At least I didn’t give up in trying to find the solution throughout the ‘dead air’ time. So I got that going for me, which is nice. I plan to use the assessment results to redirect study efforts as needed for the final six weeks before graduation. Tonight, Dave Hoover (author of the excellent book ‘Apprenticeship Patterns‘ and co-founder of Dev Bootcamp) spoke at the local Denver Ruby Meetup regarding the prospect and benefits of creating Apprenticeship Programs to cultivate strong junior developers. To summarize, there were several points he made regarding how to consistently grow viable software developers despite highly varied academic and professional backgrounds:
1) Mentor > Team > Business Owner This schema represents a mentor who is excited to work with a beginner, a team that’s willing to incorporate a beginner and business owners willing to allow beginners to participate and contribute to the company’s mission.
2) Sustainable Ratio Dave’s experience holds that 1:1 ratio of senior to junior developer is not in the best interests of the company’s growth. He’s found that a 2:1 non-apprentice:apprentice ratio is the ‘sweet spot’ that will grow a company by 50% relatively quickly.
3) Culture over Curriculum A beginner-friendly, learning-oriented culture takes a lot of the pressure off of mentors and is the most sustainable way to grow apprentices. Dave suggested that companies consider taking apprentices from programs such as gSchool, Turing and DaVinci Coders to seed their apprenticeship programs.
4) In The Trenches Apprentices need to learn on real projects with real problems to grow their comfort level and familiarity with workflow and tasks.
5) Pet Project Apprentices should similarly have an enjoyable and intriguing independent ‘breakable toy’ project on which to sharpen skills and play with desired technologies.
6) Milestones The suggestion put forth was to structure a six-month apprenticeship with milestones every two months to use as a baseline. These milestones would gauge whether the apprenticeship should continue toward a potential ‘hire’ situation or its alternative.
7) Feedback Loops Communication is key in focusing on progress, issues and upcoming plans. The feedback can happen daily with pair programming and code reviews or it can extend out to follow the two-month milestones. These feedback loops can be key in creating a successful apprenticeship environment. (Additional information about cultivating an apprenticeship program in your company can be found here or by contacting Dave Hoover directly.
As well, Cory Flanigan of the Denver/Boulder developer scene is creating a website for those interested in starting or listing existing Apprenticeship programs. If this sounds intriguing to you or your company, please post contact information and details here.
Additionally, I’m hoping to get an apprenticeship to continue my immersive learning experience (following six-months of intensive study through gSchool). If your company promotes further education and is supportive of new developers, please click here for consideration of my resume. Thanks so much.