Category Archives: CS@Worcester

Book Suggestions for Learning Design Patterns

Hi everybody, good morning  I thought I’d share my thoughts before I go about my day. If you are looking to learn Design Patterns, here are my suggestions. Not that I’m an expert, but you know, this is what worked … Continue reading

From the blog CS@Worcester – thewisedevloper by thewisedeveloper and used with permission of the author. All other rights reserved by the author.

Course Prep: Open Educational Materials Grant Proposal

OER Logo
The Worcester State University Library has called for proposals for Open Educational Resources Initiative (OERI) mini-grants to support Fall 2017 courses to the use of Open Educational Resources.

I have submitted a proposal to support the use of OER in CS 343 Software Construction, Design, and Architecture. This is the first required course in our Software Development Concentration in the Computer Science Major, and is taken by students in the concentration in the Fall of their Junior year.

Rather than repeat material from my mini-grant proposal, I’m just going to reproduce my submission here. Whether I receive the mini-grant or not, I will still be doing this with my course, and I will blog about it here as I work on it.


Course Number

CS 343

Course Title

Software Construction, Design, and Architecture

What type of course is this?

LASC
Check Box Noun project 10759 Required course in the major
Elective course in the major

Number of Students

Please estimate the enrollment of the course, either using data from previous semesters (average or aggregate), exact enrollment from the last time the course was taught, or, if proposing a new course, an estimate of anticipated enrollment.

Currently 33 registered for Fall 2017. (Another 5-10 are likely when transfer students register.)

(There were 26 students in the last offering in Fall 2016.)

(This course is a first-semester junior-year course required of all Software Development Concentration students in the CS Major, offered every Fall semester.)

Current Textbook(s) or Anticipated Textbook(s) that will be replaced

If more than one, please list all

Flexible, Reliable Software: Using Patterns and Agile Development, Henrik B. Christensen, CRC Press, 2010 (was used in Fall 2016)

Clean Code: A Handbook of Agile Craftsmanship, Robert C. Martin, Prentice Hall, 2008 (I will likely require this book for Fall 2017 in addition to any OER materials – although if I can find equivalent OER material, I will not require it. This book will be used in all 4 courses of the Software Development Concentration – CS 343, CS 348, CS 443, CS 448.)

New Cost of Current Textbook(s) or Anticipated Textbook(s)

Please list the current price on Amazon for a new version

Christensen – $79.49

Martin – $36.59

Used Cost of Current Textbook(s) or Anticipated Textbook(s)

Please list the current price on Amazon for a used version

Christensen – $51.30

Martin – $29.99

What are your goals regarding this initiative? What are your intended outcomes for your students’ learning?

I am redesigning this course from scratch and there is no single textbook that covers the range of material that I want to include in this course.

My plan is for this course to cover the design of software systems, as represented by design patterns and software architectures. The students will design software systems, and construct some of them from those designs, in some cases using available software frameworks. The unifying theme for these three design topics (design patterns, software architectures, and software frameworks) will be the concept of modeling these designs using the Unified Modeling Language (UML) as a representation.

To implement this plan, I will need to find resources covering four areas:

  1. Learning the most commonly used diagrams in the UML and learning to use a modeling tool to create the models and diagrams.
  2. Learning about the most commonly used design patterns, and to what types of problems they should be applied.
  3. Learning about a number of commonly used software architectures, to what types of problems they should be applied, and how to design with them.
  4. Learning about a number of commonly used software frameworks that correspond to some of the architectures, and how to implement a design/system with them.

By using OER materials for:

  1. The UML – I will be able to pick and choose which diagrams we cover, and to what level of detail. Students will not need a textbook that is larger than needed. In addition, we will have access to instructions for using the most recent version of the modeling tool, and students will not have to translate from a different tool that might be used in a textbook.
  2. Design Patterns – I will be able to pick and choose which patterns we cover, and to what level of detail. Students will not need a textbook that is larger than needed. In addition, I will be able to find more relevant examples of the design patterns for the students.
  3. Software Architectures – I will be able to pick and choose which architectures we cover, and to what level of detail. Students will not need a textbook that is larger than needed. In addition, I will be able to find more relevant examples of the architectures for the students.
  4. Software Frameworks – I will be able to pick and choose which frameworks we cover, and to what level of detail. Software frameworks are not typically covered in textbooks. In addition, we will be able to use the most up-to-date versions of appropriate frameworks, which change quite frequently.

Finally, it will be easier to have the course materials reflect the current state of software design for future semesters, as a textbook would go out of date quickly and not be updated as frequently.

Please give a brief description of the plan for which you seek support. This might include how you will go about identifying or creating resources to replace the materials used in your course, how students will access the assigned content (e.g., via laptop, mobile device or smartphone), how you will make your educational resources openly available, etc.

There are literally hundreds of online tutorials and blog posts about the four areas I want the course to cover. There may be some materials in some of the open content and open textbook databases, but I am not having as much luck with those. The difficulty will be determining which of the materials are of high enough quality and at the right level for the students. The bulk of my effort will be put into finding and reviewing the materials. Once the materials have been identified, compiling them into lessons and background reading for assignments will not be too difficult.

As the materials I am looking at are mostly Web resources, the students will most likely be accessing them on their laptops, although access through a mobile device will be possible.

All materials that I produce myself (syllabus, lists of readings and resources, lessons, assignments, project specifications, and tutorials) will be licensed CC-BY-SA (which I have been doing for years) and will be available on the GitHub repository for the course. I will look into which of the OER sites is the most appropriate for posting to as a directory to link to my materials.

What challenges do you anticipate in implementing your goals? (e.g., time constraints, technology barriers, etc.) How do you plan to address those challenges?

The biggest challenge will be having enough time to review the large quantity of web materials. Another challenge will be the fact that I am still designing the course, as I am researching materials.

I plan to address those challenges by adopting a “good-enough” approach and finding something good enough for each topic first, and then when additional time is available, looking for better materials before the topic is covered (or after the course has ended to prepare for the next offering.)

What library or other support will your project require?

I have not spent any significant time investigating library resources, particularly database and ebook offerings. Spending some time with one of the librarians to look at what is available will be helpful.

How do you plan to assess the effectiveness of this initiative? Will you be able to participate in library assessment?

I will blog about my efforts to design the course and select materials. I will survey the students on the materials themselves. I plan to have the students spend time looking for materials themselves and blogging about them as part of the course, in service of our program outcome:

“Learn new models, techniques, and technologies as they emerge and appreciate the necessity of such continuing professional development.”

I will give the students both the Pre-Test and Post-Test that the Library develops to assess the OER Initiative.

From the blog CS@Worcester – On becoming an Eccentric Professor… by Karl R. Wurst and used with permission of the author. All other rights reserved by the author.

Happy (Belated) International Weblogger’s Day!

Yesterday was International Weblogger’s Day, and in honor of the day I’m going to make a resolution to post on my blog at least once a week. (Let’s see how well that goes…)

From the blog CS@Worcester – On becoming an Eccentric Professor… by Karl R. Wurst and used with permission of the author. All other rights reserved by the author.

New Course Prep: Learning UML

I am preparing for a new (for me) course for the Fall 2017 semester: CS 343 Software Construction, Design, and Architecture. My intention is for this to be a course primarily about software design and I want to approach it through design patterns, software architectures, and modern software frameworks. These are all topics that I have read a little about, but not enough to really teach. So, I am spending my summer reading a lot about them.

For other courses, I’ve learned little bits of UML (mostly class diagrams, with a very small amount of use-case diagrams, sequence diagrams, activity diagrams, and state diagrams) and all very informal. So, I decided that, if I’m going to teach design, I need a representation for those design patterns and architectures and it’s time that I finally learned UML more formally.

I am currently working my way through the video series UML Fundamentals, Standardized Structural and Behavioral Modeling for System Design by Simon Bennett from O’Reilly Media (6 hours, 12 minutes). So far, it’s pretty good, although it seems almost more about how to create the diagrams in Enterprise Architect (a commercial product) than about UML itself. I’m going to have to read some books about UML also to supplement the videos, but it’s a good introduction.

Standardized Structural and Behavioral Modeling for System Design

The commercial tool he uses looks nice, but I would like to find a FOSS alternative to use, both for myself, and for the students to use in class. I’ve played around a little bit with some of the Eclipse tools for modeling, but I’ve not found them very easy to use. So, I’m still looking. If you have any suggestions, please let me know.

From the blog CS@Worcester – On becoming an Eccentric Professor… by Karl R. Wurst and used with permission of the author. All other rights reserved by the author.

The Software Craftsman, Chapter 9 & 10

For this week, I read Chapter 9 Recruitment and Chapter 10 Interviewing Software Craftsmen, from the book title The Software Craftsman by Sandro Mancuso. Chapter 9 takes a look at the picking process of hiring the best developers. Best developer’s identification is that developer must be passion for the craft. Chapter 10 explains the interviewing process that works both ways, the interviewer (who represents the company) and the interviewee (potential hiring candidate) looks for compatibility with each other. The interviewer checks whether the candidate is best fit for the company and the interviewee try to find out whether the company is best fit for him/her.

Chapter 9 explains in detail on attracting software craftsmen to a company. It also walks the reader on a journey on how to craft a job description. I feel like this chapter is the best read for anyone who would like to recruit or looking for the best developer for his/her company or organization. After reading this chapter, I would recommend this sole chapter reading to anyone who carries out the recruiting or hiring process at a company or organization. I believe the author did a fantastic job on covering and perfecting attracting and putting out description for a target and ideal candidate for a job.

In chapter 10, author covers the interviewing part of the hiring process. One emphasis of the author that I liked was when the author explains asking questions in the interview. According to the author, interview should not be only the company asking questions from the potential candidate, but rather the question process should be from both sides. If the candidate is a craftsman, then he/she must have questions for the company too. This way the company and candidate will insures that they both are best fit for each other.

This was very informative read especially on the job description and interviewing.

From the blog Software Learning and Development – Haider Hussain by hhussainsite and used with permission of the author. All other rights reserved by the author.

The Software Craftsman, Chapter 7 & 8

For this week, I read Chapter 7 Technical Practice and Chapter 8 The Long Road, from the book title The Software Craftsman by Sandro Mancuso. Chapter 7 explains adoption of extreme programming (XP) like Test-Driven Development (TDD), pair programming, refactoring, simple design, and continuous integration. Chapter 8 explains how to approach job choice and what it takes to have a job/career where you would be happy.

In chapter 7, the author describes and explains all aspects of extreme programming. For example, Test-Driven Development (TDD), pair programming, refactoring, simple design, and continuous integration etc. The best thing that I learn from this chapter was when the author states “Being pragmatic is one of the best quality that a software craftsman can have.” This explains that professionals are not limited to following certain practices and processes where they would always receive optimum results. But rather, as professionals we need to keep looking and searching for ways of doing our jobs better and satisfying the needs of our customers. Whatever it takes, at the end of the day what matters are happy clients. We should follow any practice that we believe will give us this result and we should be accountable for whatever decision we make and always take responsibility for the outcomes.

In chapter 8, I like when the author breaks down job choice base on three criteria: autonomy, mastery, and purpose. Craftsman must look and consider these three things before choosing a job. I believe that this is a good criteria to have, but to be able to choose based on these criteria, individual needs to overcome a lot of obstacle and challenges. You need tremendous focus and determination in order to excel and expand your knowledge and skills.

From the blog Software Learning and Development – Haider Hussain by hhussainsite and used with permission of the author. All other rights reserved by the author.

The Software Craftsman, Chapter 5 & 6

For this week, I read Chapter 5: Heroes, Goodwill, and Professionalism and Chapter 6: Working Software, from the book title The Software Craftsman by Sandro Mancuso. Chapter 5 explains the need and urgency of when and how to say “No”? Chapter 6 explains the effects of technical debts on companies and stabilization of existing code, and improving it.

In chapter 5, author explains one of the hardest thing to say in general which is saying “No”. As a professional, one must have the courage to say “No” when he/she does not think that his/her client or boss is not being reasonable or does not understand the scope of what he/she is demanding. As a professional it is our duty to stand up for ourselves and make people around us aware of the entire situation as transparently as we can. Always, be clear and careful at your decision and commitments. Be sure what you have been asked and what you are committing is achievable. I believe saying “No” is one of the hardest thing about being a professional and I hope that I don’t have to be the first one to say “No” as I am stepping into the real world. I wish that I see my senior say it first then I will follow.

Chapter 6 was my favorite chapter because it talks about a topic most software developers and companies ignore to pay attention to once they complete a job or project. I believe for any successful software company or business needs to constantly work on its old code and try to make it better in order to increase its adaptability. Companies need to hire craftsmen to refactor its existing code. I like how the author puts in the book, “rather than construction, programming is more like gardening.” this quote explains that rather than keep producing new code every time, it is more efficient to make existing code better so it is more adaptable. It can save companies time, money, and maintenance in the long run.

From the blog Software Learning and Development – Haider Hussain by hhussainsite and used with permission of the author. All other rights reserved by the author.