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.

Create your Own Company as a means to gain experience

Here’s an excerpt I found very interesting from John Sonmez’s newly released book, ‘the Complete Software Developer’s Career Guide’. It is a good read and I recommend it.

I think I might try this option, and I think you guys might want to give this some thought too.


Many people laugh when I tell them this idea of gaining experience when you don’t have any, but it’s perfectly legitimate.

Way more companies than you probably realize are actually run by a single person or a skeleton staff of part-time workers or contractors.

There is absolutely no reason why you cannot create your own software development company, develop an application, sell or distribute that app, and call yourself a software developer working for that company.

You can do this at the same time you are building your portfolio and learning to code.

If I were starting out today, I’d form a small company by filing for an LLC, or even just a DBA (Doing Business As) form (you don’t even need a legal entity), and I’d build an app or two that would be part of my portfolio. Then, I’d publish that app or apps in an app store or sell it online in some way.

I’d set up a small website for my software development company to make it look even more legit.

Then, on my resume, I’d list the company and I’d put my role as software developer.

I want to stress to you that this is in no way lying and it is perfectly legitimate. Too many people think too narrowly and don’t realize how viable and perfectly reasonable of an option this is.

I would not advocate lying in any way.

If you build an application and create your own software development company, there is no reason why you can’t call yourself a software developerfor that company and put that experience on your resume—I don’t care what anyone says.

Now, if you are asked about the company in an interview, you do need to be honest and say it is your own company and that you formed it yourself.

However, you do not need to volunteer this information.

I don’t think being the sole developer of your own software company is a detriment either.

I’d much rather hire a self-starter who formed their own software company, built an app, and put it up for sale than someone who just worked for someone else in their career.

I realize not all employers will think this way, but many will. You’d probably be surprised how many.

Copyright Notice:

“Copyright Disclaimer Under Section 107 of the Copyright Act 1976, allowance is made for “fair use” for purposes such as criticism, comment, news reporting, teaching, scholarship, and research. Fair use is a use permitted by copyright statute that might otherwise be infringing. Non-profit, educational or personal use tips the balance in favor of fair use.”

Build Java experience by volunteering: location could be anywhere (Work from home)

Hello all

I would like to share something with you all. A platform has been created whereby companies looking for volunteers to work on their Java based projects can post and select applicants. http://www.code4socialgood.org

Code for Social Good is a nonprofit organization in the U.S. We have recently launched a global volunteering platform that provides nonprofit organizations and open source projects with free technical resources. We  hope this specialized technical volunteer network could better assist nonprofits and open sources identify potential volunteers, at the same time assist volunteers identify technical projects that fit their interest and skills. It is a good opportunity for Java developers to build real project experience. Please consider register on Code for Social Good! The web site is: http://www.code4socialgood.org

Resume format for the Novice

Hi everybody

I would like to share this resume which I cut out from the book ‘Java/J2EE Resume Companion’. This book teaches how to write a resume for the novice, the intermediate, and the advanced professional.

I’m sharing the novice resume. I think that it is particularly challenging for a novice to write a resume because he or she do not know what to include. The author Arulkumaran Kumaraswamipillai has laid out exactly what to include and in what order, and he claims it to be the most effective format.

Futhermore, I think almost all WSU CS students can fill the various sections of this format, because such is the design and layout of the curriculum.  I am going to try this format and see how it goes.


Also please don’t take offense at my posting of this copyrighted material. Copyrights were broken for educational purposes only, but if you think otherwise let me know and I’ll proceed accordingly.
“Copyright Disclaimer Under Section 107 of the Copyright Act 1976, allowance is made for “fair use” for purposes such as criticism, comment, news reporting, teaching, scholarship, and research. Fair use is a use permitted by copyright statute that might otherwise be infringing. Non-profit, educational or personal use tips the balance in favor of fair use.”


Hi everybody

Just wanted to share something with you all. So I came across this java learning road map, which I think is typical of the skills required for a Java developer. I like that it proceeds on a step-by-step basis, and thus, guides those who don't know where to start. However, I'm still trying to figure out what the colors indicate. Not sure why some blocks are colored the way they are.

While looking at the various job postings you would soon come to the realization that everybody and their mama require that you know these building blocks at a minimum — haha :). courtesy of in28minutes.com


Here's another one, presumably more in-depth.