Software Boot Camp: Where I’ve Been

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 later phases of the program add more breadth (getting to that “full stack” part) with some necessary sacrifice of depth. In the Java cohorts we do a very significant amount of work with the Spring framework, especially for MVC web applications, and are introduced to the power of that framework to facilitate dependency-injection and aspect-oriented programming. Validation (server and client) and security basics are addressed. Late in the cohort we work with relational databases and SQL. We cover client-side development enough that by the end of the program just about everyone could lay out a responsive website using Bootstrap and a good amount of jQuery. I came in with enough existing JavaScript exposure (and spent enough of the Thanksgiving break and later weeks of the cohort reading JavaScript the Good Parts and any number of other, newer, online JavaScript content) that by the end of the capstone project I felt quite comfortable writing decoupled websites, ably handling the client half of AJAX, and building websites and single-page web applications to work with REST endpoints and Web APIs.

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.

I’d also have liked to have seen more JavaScript, but there is no way this could have been provided within the 12-week scale of the boot camp. The programming paradigm (prototypal inheritance, fully first-class functions, etc.) is sufficiently different that it could easily merit its own three-or-four week intensive instructional module. Perhaps there’s room for later (hopefully employer paid!) “master’s classes” to provide similar intensity to other, later, topics. I can think of a few!

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.

While I was one of those who didn’t really have any significant formal programming background, I had worked, somewhat naively, with PHP and JavaScript when building the law library’s website (mostly in 2010) — an experience I now understand much better in retrospect after this more rigorous programming experience. I also had accumulated a lot of experience with CSS and with HTML, especially over the last five or six years, and stayed very up to date with the development of HTML5 and emergence of mobile-responsive design. I was pleased to be able to help my colleagues with semantic markup and responsive CSS toward the end of the cohort. (I especially enjoyed introducing a project partner to @media queries and to web fonts.) I was surprised how able I was to call up earlier exposure to relational databases and normalization going all the way back to my time at the School of Information. And the one area in which I think I had a fair amount more background than even the far more experienced programmers in my cohort was with some of the networking fundamentals and background of the HTTP protocol, messages, and status codes. I have, after all, taught enough Internet policy and governance that this was background information I’ve had to impart to students. This helped when it came to building REST endpoints and services later in the cohort.

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.

This entry was posted in Design Patterns, Java, JavaScript, Programming, Software Bootcamp, SQL, The Software Guild and tagged , , on by .

One thought on “Software Boot Camp: Where I’ve Been

  1. Adam

    I am considering the guild and curious about employment opportunities right out the door. Are you working in programing? How is the job search going?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *