CS448 Intro blog

Hi everybody, I’m Buvan, and I’m enrolled in CS448 with Karl Wurst, Ph.D.

Software Craftsmen, chapter 1, week-1

Chapter 1. Introduction (Summary)

The authors tell us that the concept of apprenticeship is one that encourages cooperation among the experts and novices. This cooperation results in the enrichment of the novice with respect to the expert’s know-hows. Apprentices eventually become experts, but only after proving their mastery of their master’s skill-set. Nevertheless, this mastery is only attained by studying the master meticulously. Indeed, one must learn as much from one’s self as much as one learns from his master. An apprentice, the author tells us, welcomes “challenge[s]” and perceives “errors as routes of mastery”. Perhaps, this could also be a distinguishing feature between experts and novices. The author tells us that apprentices must make effort to learn from past struggles and mistakes; keeping a blog or a journal – although the former is preferred in this digital-age – facilitates this seamlessly. Publishing a journal publicly could be beneficial to other people or communities; it is also, often, not always, but sometimes, seen as a duty.

The author lists out some of the attributes that facilitates a novice’s transformation into a master. An ideal ‘software craftsman’ would possess, among other attributes, a “growth mindset” (essentially recognizing problems and makes effort to solve it), realism, flexibility, acceptance, dedication, focus, commitment, skill-centric, and “situated-learning”; indeed, these attributes are seen in some of the finest and most accomplished leaders, irrespective of their field of focus. An apprentice, nevertheless, must also strive to incorporate these values into their character. The authors, thus, define apprenticeships as follows:

“apprenticeships are the state/process of evolving and looking for better ways and finding people, companies and situations that force you to learn those better/smarter/faster ways”.

One characteristic that tells us that an apprentice has evolved into a master is sole ownership of projects; once competence is achieved, the transformed novice is mature enough to monitor projects autonomously.

Particularly, the authors tell us that software engineers must be proficient in recognizing solutions to recurring problems. Essentially, software engineers must be skilled in pattern-recognition. Yet, unlike algorithms, patterns are “tools that solve one set of problems and create new ones”. Thus, a good software engineer must use a combination of patterns for certain cases.

Often, we as human beings look at prominent, accomplished people to gain insights and learn lessons from their successes and failures. Plenty of books are being published about the characteristics of these accomplished members of society. People want to know the secret to success. Yet, often we overlook the smaller members of our planet. We can learn life lessons from even the smallest and insignificant creatures of this planet. The philosophy of ants is of interest to our discussion. I believe that following these principles exhibited by ants makes for a better software engineer.

  1. Ants never quit; they are resilient.

Ants do deviate from their goal; they accomplish their goal sooner or later. This resilience can be observed by simply obstructing ants. The ants simply keep moving around, or on top, of the obstruction; this is true no matter the size or the number of the obstructions. So, too, should we computer scientists be resilient towards our goals. We, humans, are much more capable than animals in many aspects; perhaps, the most prominent of which is intelligence. If we can’t solve a problem, we ought to find ways to solve it; indeed, this is the essence of computer science. Student often, after securing a job at technical firms, realize that nobody is going to spoon-feed them; they must figure solutions by themselves. This is especially true the more senior one’s role is. Thus, software engineers must learn to be independent and less dependent of others. Indeed, such is life, such is engineering.

  1. Ants think about the future; they plan.

Plan for the foreseeable future. Of course, the future is not accurately foreseeable; still, it is nominally predictable. Certain things are sure to happen. Correspondingly, software engineers should be encouraged to plan for the worst. While ants are working throughout summer, they, nevertheless, also bear in mind winter, a time when they are dormant. Like ants, software engineers, too, ought to bear in mind the times of less work. This encourages planning, preparation, arrangement, forecasting and prioritizing; Indeed, these are the essence of software engineering. The ants, likewise, plan for the summer during winter (dormancy). So, too, must software engineers plan and prioritize work during times of less labor. Dormancy does not mean less work; rather it means you are preparing for times of more work. There is no room for procrastination. The ants get to work the first second summer hits. Similar, human beings (who are not animals) must get to work as soon as possible.

  1. Ants try their best; they work hard.

Ants never rest; they keep moving. Keep busy and keep active; eventually you’ll get somewhere. There’s no need for rest during work hours. Rest is for the periods of dormancy.  Donald Trump tells us in his past interviews that his life philosophy is “not to make tremendous amounts of money” but “to keep busy and to keep active and to enjoy what I [he] is doing”. Americans love Donald Trump so much; yet, sometimes, not always, but sometimes, some of us could be very lazy – myself included (although I am not a citizen). Ants often carry with them, to their place of destination, materials, often sources of food or shelter, observably larger than them. A single ant can be seen carrying materials many, many times larger than its size. Not all the ants carry the same amount, but they all carry the best they can. Likewise, each engineer in a team must work to their best ability. Not all the engineers can work equally fast on a task; thus, the allotment of work must be varied depending on the capability of the engineer. Certainly, this makes for a more proficient team. Each developer contributes to varying extents, yet all the developers have put in their best effort.

Finally, it is important to realize that we are human beings and not animals. We ought to behave like human beings not animals. Nevertheless, we can learn lessons from our fellow creatures as much as we do from our developers (as the authors try to do). Ants travel in a line. No single ant deviates from its master. Each ant helps its group. These are, essentially, disciplines and morals. Similarly, the authors write about the morals and disciplines of an efficient software engineer.  I’m going to try these philosophies in my capstone course.


Hoover, Dave H., and Adewale Oshineye. Apprenticeship Patterns: Guidance for the Aspiring Software Craftsmen. O’Reilly Media Inc., chimera.labs.oreilly.com/books/1234000001813/index.html.

Law of Momentum

I find this rule to be very helpful. The Law of Momentum states that incompletion[s] drain your energy and that completion replenishes your energy. The “Two Minute” rule follows from this. If something comes across your desk and it will take less than two minutes to complete it, then stop what you are doing and complete it. You will feel rejuvenated after.