Archive for December, 2017

Week 30 at an Unbootcamp

Wednesday, December 6th, 2017

N steps forward, one step back

During my 30th week at Learners Guild in Oakland, California, ending on 1 December, I worked mainly on a web application that manages a document repository. Its ostensible purpose is to let users find and retrieve relevant documents from a collection. The collection might be your own, and you might be the only user. Or it could belong to an organization that has users of various kinds. In addition to this purpose, it has two ulterior purposes: (1) to make me learn or relearn methods for developing complete web applications, and (2) to show others, someday, what I can and can’t do as a web developer.

My inspiration has been a collection of documents in my possession, generated within an organization, with various categories of users having various rights to see and retrieve documents. Some of the documents are open to the public, some only to members of the organization, some only to its current directors, and so on. In my previous work at the PanLex project, I also encountered several archives of language documents whose donors had attached various access restrictions to them.

In designing the application, I decided to focus initially on three functionalities: (1) managing the application’s users, (2) regulating user access to documents, and (3) facilitating user discovery of relevant documents. In addition to making decisions about these functionalities, I also decided how generic to make the application.

Initially I semi-consciously chose to give the application a generic tentative name (“DocSearch”), but in reality to embed into it dozens of assumptions specific to a single use case. While working on it I gradually became more conscious of, and committed to, genericity. As I did, I undid and redid many things to separate the specifics from the application logic. The specific messages to users came out of the code; I put them into a file of their own, where they could be replicated in another language for a user community using that language. Then I isolated into one file the customization decisions that an administrator of a DocSearch site would make and protected that file from being overwritten in an upgrade of the software. Initially, I hard-coded into the application a set of user categories. Later I recognized that as anti-generic, so I redesigned the system of user categories to allow an administrator to define them afresh.

In addition to the genericity problem, there is also a problem of ambition creep. I produce something and make it work, but in a day or two it becomes obvious that this feature is confusing or inelegant. I have a great idea for improving it. So I do. And that improvement breaks something, turning a working inelegant application into a more elegant application that crashes. That sends me into debug and repair mode.

This develop-reconsider-revise rhythm isn’t the only possibility; one can do more thorough initial planning. I sometimes do. But I more often jump into development with only roughly formulated ideas, and then there’s backsliding along with the progress.

I’m not willing to claim that more thorough initial planning is always better. I respect it, but the most difficult problems seem to exist in both scenarios, and attacking them early by starting ad hoc may help solve them sooner. In any case, progress has eventually been outrunning regress. In a few days I may be ready to release the zeroth version for you and others to test. “May”, I said.


Week 29 at an Unbootcamp

Tuesday, December 5th, 2017


Learners Guild in Oakland, California, where my 29th week ended on 24 November, has been further adjusting its web development training program.

When I arrived in May, the program was 40 weeks long, distinguishing the Guild from so-called coding bootcamps, most of which claim to prepare their students for programming jobs in about a quarter of that time. Now the Guild has announced that it intends to trim that duration 10%, to 36 weeks, still leaving it an unusually long program. After 29 weeks there, I can testify to the value of a program that lasts 9 or 10 months. There is far more worth learning, even in the JavaScript ecosystem that the Guild concentrates on, than anybody can assimilate even in that long a period. Sure, the learning might be made more efficient than it has been, but, to dramatically increase my learning rate, the Guild would have needed to spoon-feed me, and then I would not have had abundant practice in figuring things out for myself, something that is hard to learn except by doing it.

The month after I arrived, the Guild adopted a new progress model, partitioning the Learners into 5 “phases” involving increasing levels of complexity. Later phases 4 and 5 were combined. And now phases 1 and 2 have been combined, too, leaving 3 phases, named the foundations, practice, and apprenticeship phases, in increasing order.

The actual work in the phases, too, has been modified during the last months in various ways. It’s hard to describe these changes, because, while they have been going on, the Guild has relaxed the requirements and Learners have taken initiatives to adopt specialties beyond the existing curriculum. Blockchain development, React/Redux, React Native, and Python are the most common additions I have seen Learners deciding to make to their skill sets. The Guild is considering bringing some of these hitherto unofficial subjects into the curriculum.

In adopting phases, the Guild created a mechanism for moving from one phase to the next. Initially, it was a one-week evaluation, starting with a multi-day take-home coding exam followed by a one-hour interview on the work that the Learner had done on that exam. There were 3 of these, for moving into phases 2, 3, and 4, with phase 5 being entered, instead, by choice or at the end of 8 weeks in phase 4. Experience taught that this regime consumed more Learner and staff time than seemed reasonable. Now the Guild has drastically abbreviated the evaluation: It lasts for 60 minutes total and consists of a live coding exercise.

The Guild’s position on placement, early in 2017, was that Learners would be prepared to find good jobs on their own, partly because of the unusually in-depth and holistic program offered by the Guild. That position has changed. Now the Guild has made it part of its mission to help Learners get employed when their time at the Guild will come to an end. This effort takes various forms. Its first manifestation has been regular opportunities to practice performing in a type of technical interview that has traditionally been prevalent in the screening of software-development candidates. Such interviews require a candidate to try to solve an algorithmic problem under time pressure. The problem is typically one that no programmer is likely to need to solve in real life, and this mismatch and the imposed urgency have led many observers to deem the entire interviewing system “broken”, but the Guild still offers simulations of such interviews to its Learners in all phases, and the staff indicates a belief that, broken or not, this interviewing system is still widely practiced in industry. Beyond interview preparation, the Guild is working on industry partnerships and has begun bringing visiting speakers in from industry. And, later this month, we are told that an outbound recruiter will join the staff.

Finally, until May the Guild was admitting monthly cohorts of new Learners. In May this changed, and it began admitting weekly cohorts. About September, however, it stopped admitting new Learners altogether. The explanation was that the Guild wanted to stabilize its new program first, and help existing Learners manage amidst the changes taking place under their feet. Then, it said, prospects would know what kind of program they were applying to, and the Guild would be able to treat them well. The enrollment suspension is still in effect, but the Guild is considering reopening itself to new enrollees early in 2018.

These are some of the main changes I have observed. The Learner population is diverse, and the changes have affected Learners variously. Some have left early, finding the program did not meet their needs. Others have prospered and already gotten good jobs while in later stages of their enrollment. Others, like me, have kibbitzed throughout the process, letting the Guild have our recommendations for program improvements, and otherwise focused on the job of becoming ever better software developers. The Guild has indeed listened to its Learners and has adopted some of the major proposals they have made. And it says explicitly that the changes have not ended.