I recently completed the software “boot camp” at The Software Guild in Akron, Ohio. While I both enjoyed the experience and feel that I learned a very great deal, such programs are indeed demanding and not for everyone.
Ever since I hinted at an upcoming “deep dive,” in a post back in August, I’ve been quiet on this site. Where I have been is at The Software Guild, in Akron, Ohio. The Guild is one of the new breed of software-development ‘coding boot camps’ that provide intensive exposure, over a relatively short period of time, to coding and related development skills. I entered the September Java cohort, which meant that I spent time in July and August on “pre-work” and participated in “boot camp” proper from September through December. As a career change, this represents the pursuit of long-time interests on my part. Even in my administrative and managerial library roles, I’ve particularly valued my contributions as the “accidental” or “incidental” technologist and developer. Time spent on wireframes, code, and software design decisions was always among my favorite working time.
So, What’s it Like?
At the Guild, the emphasis is on full-stack development with a foundation in either C# or Java. The first several weeks, in many ways the most intense, are a race through object-oriented programming fundamentals and one of the two (ultimately quite similar) languages. The pace through this portion is, um, really something. While most students do seem to begin with some prior background in at least amateur or hobby programming (and all have done related pre-work) the curriculum starts with basics: statements, variables, program flow. But it moves very quickly from there. By week four we were designing (small) tiered applications that were expected to adhere to good object-oriented design practices, have unit-test coverage, and make effective use of basic data structures.
The curriculum for these first weeks is beautifully designed. The pace is, well, kind of awe-inducing. Yet — both in the moment and in retrospect — nothing seems cursory or like just skimming. As someone who had worked (more like ‘naively tinkered’) with code a fair amount but had no real prior formal instruction in computer programming, I loved the opportunity to take things I’d “seen” and only partially understood and really build context and cognitive structure for them. And the language fundamentals at the Guild, apart from the sheer amount accomplished, succeed as the kind of education that builds the structure to make more learning and growth possible. This part of the experience even feels pretty rigorous, and lays groundwork to become a developer who takes object-oriented design principles and patterns seriously and uses them effectively.
Part of the “secret sauce” is that this portion of the curriculum has been very well worked out to optimally combine “coverage” with real hands-on work. A lot of hands-on work. Far more hands-on time than could be expected, even over the longer time-horizon, in traditional college or university instruction. Coding all day, every day. I regret, slightly, that I didn’t write anything reflective about the experience while in the midst of it, but my colleague Jonathan did, and he gets it about right.
Many apprentices do move into the apartments across the street from the Guild, and in addition to seven or eight hours of time in “class” put in four to eight more hours in the evening. I was commuting from Cleveland while keeping up with my regular life and family obligations. I was lucky never to struggle in the program, but did always feel constrained in the amount of time I had available to put in to coding assignments, labs, and projects. It was a testament to the Guild’s curriculum — and perhaps also to my having made the right choice in pursuing coding as a vocation — that I always wanted to put in more time than I had in my post-commute, post-child-care, day. This didn’t feel like “homework” in a drudgery kind of way. It felt like what I wanted to be doing.
The Guild provides at least “exposure”-level instruction on the software-development life-cycle and makes some effort to emulate aspects of an Agile workflow. Test-driven development is addressed enough that when I attended a weekend Coderetreat during the program, at which I really “saw the light” (or “drank the Cool-Aid”?) about TDD and started writing unit-tests first, I already knew quite a bit more about testing than many working developers there.
There was a little bit of a disjointed feeling, for me, in transitioning from the “language fundamentals” part of learning Java to the rest of the curriculum. In some ways I think this transition might have been a bit easier for the C# cohort, owing to the somewhat more tightly-coordinated nature of the .Net “world,” compared to the big, wild, woolly, world of JVM-platform technologies. I still think the later weeks were very good, on balance, and I learned a lot while being exposed to even more. But it wasn’t quite as masterful and coherent a blend of speed, depth, and rigor as the first four to six weeks of the program.
Given the short time-line, there is also relatively light coverage of a couple of areas I have begun to explore more on my own. While we do briefly address efficiency and “big-O” notation for asymptotic analysis, we don’t spend a lot of time on the analysis of algorithms and data structures. I left with an appetite to learn more, and have begun some reading and a related Coursera MOOC. There is also not a lot of formal or explicit discussion of design patterns or exploration of how/when they appear in either our own coding or in outside frameworks and libraries we implemented. We certainly did address (and work with) n-tiered architectures and with model-view-controller (and, in a more cursory way, with factory methods). But the curriculum doesn’t include a broader discussion of patterns or of the “idea” of patterns, history of the concepts, etc. This is another thing that I don’t think could really be done justice in the time scale of the program, and also another area in which I’ve been doing my own reading and exploration. Also, apart from what Tomcat and Spring handle “for us” in Web applications, we don’t really work with threads or concurrency within the scope of the Guild curriculum.
Prior Background: Mine, and What an Apprentice Should Have
Some of the marketing material for this program and for other ‘boot camps’ is aimed at those with no prior technical, and certainly no prior programming, background. Few, if any, of the students in my cohort really had no relevant background at all. The optimal starting point might be to have a good general familiarity with some aspect of computers/networks/digital-technology outside of programming, and to have done some of the online, Codecademy-level, training yourself while remaining hungry for more (more rigor and, well, just more quantitatively). And successful boot camp students should certainly be the kind of people who are good at teaching themselves. You do get a lot of face time with instructors — that is after all part of the value proposition — but you are also going to be doing so much so fast that you are going to need to be competent at working through problems and sticking points for yourself, and looking up resources to assist in solving them.
Students in my cohort included some with little programming experience, to several with undergraduate-level CS degrees, to at least one student — perhaps the single best prepared — who had done a very large amount of self-education with online courses. We had all done a variety of mandatory pre-work assignments that we were given by the Guild. For those who had the least prior software-related experience, the first several weeks (at least) were very hard, but catching up was certainly possible. I got the impression that my specific cohort was on balance quite strong relative to past cohorts, and that we may have collectively pushed ourselves in ways that allowed our experience to be even more accelerated. But my sense is still that anyone who lacks either drive or smarts could get very lost very quickly, even with instructors and very good “TA”s there to provide a pretty much limitless amount of hands-on coaching, review, assistance, etc.
I was the only one who was making a career change from as far into another field or level of seniority as I was. If only by default, this did mean I had the longest, if far from the most focused, prior background. After all, I made computers loop “Help, let me out of this box!,” in BASIC, in the early 1980s. And I’ve been a consumer and user of the Web since it has existed and (although not avidly) of online services before that. The first HTML I specifically recall writing was for the masthead page of the Michigan Telecommunications & Technology Law Review in 1994. In the mid-1990s I took a leave of absence from law school, during which I worked for a company that configured and sold computer equipment and networking, mostly to the education market. This meant that I was tasked with the thankless work of, mostly unsuccessfully, selling Macintosh computers during the darkest days of Apple’s pre-Jobsian-Renaissance years. But it also meant that I got to do some double duty in the service and support operation because I had more experience building and configuring commodity PC hardware (which an increasing number of customers were requesting/using) than the Apple-trained techs did. I still regret not having taken up the offer to stay on, in service and repair, part time when I returned to law school.
It did help to have done “hard things” in this vein before — occasions on which I’ve had to learn new things or accomplish new projects at a mad sprint. Although I’m not sure I’d worked at “bootcamp” pace for as long as this 12-week stretch before. As I noted above, I also was juggling the work-life balance in a different way than my colleagues were. With Abigail’s career continuing apace (and, for now, paying all the bills) I remained responsible for school deliveries/pickups and a lion’s share of the afternoon/evening care of our two children. And the commute to Akron was viable but certainly at the longer end of what I’d consider reasonable… enough to cut further into the amount of day available to me. While it did take more than a few late-night sessions to manage, I don’t think this was a problem for me in keeping up and being successful in the program. But it could well have been a big problem if I hadn’t turned out to be a strong ‘apprentice’ in terms of both preparation and, especially, aptitude. Had I needed to book a lot of TA time or looked for extra support in mastering the concepts covered I’m simply not sure how I would have found the time. I would certainly advise those considering this program to take the “boot camp” tag quite seriously and prepare to put in as many as possible of your non eating and sleeping (and perhaps what would normally be eating and sleeping) hours into it.