CSC 430 Useful Links from Fall 2012
Online resources from 430 students:

Bu, Ruwei    Burton, John   Byrd, Daniul   Cain, James   Clark, Jason    Clifford, Josh    Conner, Steven    Gertig, Jonathan
Green, Conal    Harper, Demis    Holt, Michael    Ladendorf, Kurt    Lott, Jessica    Owen, Michael    Vinson, Jonathan

Jason Clark: 
This is a five video series on YouTube from GoogleTechTalks
Here are 7 tips on writing clean code
This is a somewhat humorous but very informative on code maintenance
Here are lots of design patterns with nice examples
This is another site with lots of design patterns with examples
Here are lots of design patters.. I especially like the "Where to use & benefits" section
Yes, this is just a blog, but it is a very informative blog on cleaning bad code.
This is a pdf that has a great deal of rules to follow when cleaning your code.
This is a nice powerpoint presentation on TDD.
This is a nice powerpoint presentation on TDD.

Steven Conner:
Clean Coders is all about educational videos for software
professionals, by software professionals
pdf version of a book called clean coder about a code of conduct for
professional programmers
pdf version of Clean code textbook.
(maybe illegal)
pdf version of Software Developement textbook
(maybe illegal)
pdf version of Design Patterns
Is your code full of if statements? Switch statements? Do you have the
same switch statement in various places? When you make changes do you
find yourself making the same change to the same if/switch in several
places? Did you ever forget one?
This talk will discuss approaches to using Object Oriented techniques
to remove many of those conditionals. The result is cleaner, tighter,
better designed code that's easier to test, understand and maintain.
shows bad code then 50 steps to clean it up
7 tips on writing clean code
4 simple steps for clean code
a bunch of stuff for clean coding
John Burton:

I found many sites for bad programming but was not able to find many that clearly showed how to fix it, nor could I find a great compilation of code that was badly programmed in need of correction code.

Sadly because I really like to fix bad code. Something that might could assist in making better code might simply be having us rewrite code from one language, e.g. Java, and change it to C++ or another language. It would seem easy to tell what could be made better and might be done naturally adjusting comments and bad code.

Kurt Ladendorf:
 -  A different view on strict coding standards.
 -  Acts as a good summary to the clean code and design patterns book.  It puts them in a realistic perspective.
-  Gives explanations and examples of multiple design patterns.
-  Gives the author's opinion on how to write readable code.  It might be a good thing for people to read and critique.
-  A tutorial on re-factoring C# code.
-  TDD in Java in the Eclipse environment.
-  Rather lengthy, but this is a series of posts that discuss cleaning Java code.
- Covers a few software development styles.
-  A few good coding principles to live by.
-  This might spark a lively discussion in a classroom setting....

Michael Owen:

Code examples that could be cleaned up: 
     This site has lots and lots of code for many languages that could be used to clean up a bit
     A funny collection of bad code examples.
     Lots of Java code that could be used for cleaning up.

Sites that would go well with the Clean Code book:  
     This page is hilarious.  It talks about what to do if you want to right BAD code!  It makes it pretty clear what you should avoid and it is an enjoyable read.
     A good summery of things to consider when writing code to keep it clean

Design Pattern book:
     Includes a lot of information about many different design patterns and also some good information about refactoring and UML diagrams.
     A useful reference for determining what many design patterns are good for and deciding what situations would be good for that pattern.

     The most useful thing I've found!  Very informative and very useful!  Highly recommended!  Talks about the importance of Unit Testing.
     Good information about how to implement unit testing.
     Good introduction to TDD.

Ruiwei Bu:

Based on my experience, design patterns are designed to solve the problems with OOP (Object Oriented Programming). And the patterns actually differs from language to language.

The “PPP” Book: Agile Software Development Principles, Patterns, and Practices

A awesome blog on software development 
Joel on Software:
And the book:

Scrum Development (What we are trying to apply):

Refactoring: Improving the Design of Existing Code:
This book provides very detailed examples of code refactoring, which is extremely worth reading.

Code Complete: A Practical Handbook of Software Construction

Actually, for the code part. I have two suggestions
  1. Refactor old code written by students, explain why the choice is not so good and ways to improve it. However, there are difficulties to apply design patterns to student codes since design patterns only show their powers when the code base goes large, for example, thousands of lines. Applying design patterns to projects with only hundreds of lines just slows the development speed.
  2. Read open-source programs and libraries, especially libraries. Every popular libraries is a live example of what a good architecture is and the beauty of interface design.

Architecture of Open-Source Applications:
This is a open source book and every one can contribute to it.

The Old New Thing:
This is a blog written by a Microsoft employee, providing some explanations of the design choices behind the development of Windows and Windows softwares. There is also a published book that selects part of the blog posts.

And, all newer project hosting websites are extremely useful places to learn. For example, Github is actually a social network for project hosting.


I don’t suggest GoogleCode or SourceForge because, these traditional platforms are only good for store project, but not communication and view the changes. For example, on the platforms mentioned above, you can view the diff of every commit. That gives the user a good chance to learn how a developer make changes to his/her code through the development.

One of the most useful site to get answers for questions related to programming.

Channel 9:
Microsoft’s video share site. There are many useful videos on this site.

The best way to practice design patterns is to write projects. For example, after learning the instruction pattern, the best way to practice is to write a simple calculator or text editor that supports undo/redo.

A old book about design patterns in Java is

Demis Harper: -- This site has several examples of design patterns we go over in the book,and a few we that aren't in the book.  For each design pattern, there are example codes in languages ranging from C# and Java to PHP. contains a very good example and explanation of a unit test one I'm iffy about, but it does list some reasons problems with the observer design pattern, as well as why it is still useful. I think it gives a pretty good all around look at that one. This gives a pretty good explanation of how good code can go to bad code if coders aren't careful, and how it can be difficult to maintain code quality. -- this site details an open source project that relies on contributes to clean the code.  Perhaps the code could be used in class? -- this book has great reviews on Amazon, and is oriented towards gui software design, which may help get a jump on the gui class -- I know our class focuses on how to keep the code clean and which principles to use to help maintain it.  --This site lists principles on how the interface itself should be handled. -- another highly recommended book from the author the Apache programming language.  It focuses on what makes a good coder, not just good code. -- now this pdf isn't a thrilling read. It's a copy of a powerpoint turned into a pdf.  However it does go over and some of the topics discussed in class, and phrase them in a different way.  It feels more like a stepy-by-step guide which might help drive the point home for some students. -- Out of all the material we covered, I felt I grasped unit testing the least.  I mean I understand what it is, why it is, and how to do self contained tests in the small, but I feel like there's something I can't put my finger on I don't grasp.  The book has good reviews and is supposed to have great examples in it.

Daniul Byrd:

Some articles about good programming practices:

This one has some good tips about writing clean/readable code:

About cleaning bad code:

About Agile Development:
This one has a lot of resources/links for Agile Development:

I couldn't find any good site for code that needs cleaning. Maybe you could find some old java projects and remove student names or give some code bad variable names/functions.

Jessica Lott:

1.) Book that teaches design patterns by looking at code:

2.) Possible test question or assignment: Choose a design pattern and tell about its features and where you would use it. List of Computer Science Design Patterns:

3.) Interesting article on Clean Code by IBM:

4.) Possible test question: Tell which piece of code is cleaner and explain why. This would be better when just learning about clean code. It is much easier to see the differences when comparing two programs that do the exact same thing, then to just look at a program and tell what is wrong.

5.) Interesting blog on Unit Testing:

6.) Another blog that has many different topics, including entries about how to write clean code:

7.) Top 15 tips for writing clean code:

8.) I have used code project tutorials several times to learn new subjects. Here is one of their tutorials on writing your first unit test:

9.) Jeff Atwood is just a fun guy to learn from. Here is some more on Unit Testing:

10.) Here is a link to a complete guide on Software Construction. I am not sure how it would compare to the Head First books, but it has good reviews.

Joshua Clifford:

    Exploring the Observer Design Pattern in .NET. This resource does a good job of explaining the pattern both generally, as well as through C#/VB code and .NET Framework Patterns.

    In addition to #1, this professor has a series of lectures on the Observer Pattern that takes a look at an application he wrote and rewrites it to fit the Observer pattern. The lecturer rewrites the application in both a direct clone of the Observer pattern, as well as using the .NET implementation of delegates and events.

    This link goes through the Factory Pattern in C#, using a fairly straightforward example, correct C# naming schemes, diagrams, and more to explain the pattern.

    This link I found to be extremely helpful. It helps explain Git in a very informal, colloquial manner. It starts by explaining graphs and then relates graph theory to the concepts in Git.

    A walkthrough for creating and running unit tests for managed code in C#.

    Cheat sheets for both Clean Code and TDD.

    Great, user-friendly site covering topics like design patterns, refactoring, and UML by using diagrams and pictures for visual learners.

    A mixture of different Git resources such as a cheat sheet, beginners guide, screencaps, behind the scenes looks, etc.

    A good exercise that tests students' knowledge on the different design patterns.

    This resource goes into more detail about four different agile development methods and can be used as a jumping off point for students to investigate other real world examples.

James Cain:

Web Pages

1. Good Programming Practices: What to Do (or Not)
Kim Moser, a computer consultant and web programmer, offers a few good programming habits that are widely accepted but rarely used.

2. Design Patterns | Object Oriented Design
This website contains a large number of known design patterns in programming, grouped into three separate categories: creational patterns, behavior patterns, and structural patterns. Each pattern is explained in detail, as well as its applicability and examples of where it can be used. Some also include “When to Use” and “Common Usages” sections.

3. Lecture Notes | Elements of Software Construction | Electrical Engineering and Computer Science | MIT OpenCourseWare
These lecture notes have been collaboratively authored; this collection of PDFs (and supporting ZIP files) contains helpful information on a variety of subjects, such as test-first programming, state machines, concurrency, and graphical user interfaces.

4. Design
This website covers many details of design patterns in detail, as well as many specific ones. Its focus is on Java programming, but can be used to learn about object-oriented programming in general.


1. Design Patterns by Mike Abyss
Mike Abyss, a Vietnamese-Canadian who is enthusiastic about programming (specifically C#) has created a series of online videos in which he describes several different design patterns, using Visual Studio and Wikipedia to walk through the details of each pattern, as well as an example program that uses it. The real-time application of each pattern will make them easier to learn -- Mike even learns a few things himself in his videos!

2. Code Practices by Brian Will
This playlist, part of a larger series of programming material at, is provided by Brian Will; it focuses on the essentials of good software, such as correctness, robustness, and security. Its format is similar to that of a Powerpoint presentation, but with live narration added.

3. Design Patterns Video Lecture, IIT Bombay
This video lecture (part of a series presented by IITBombay, India, under the program NPTEL), covers a few details of design patterns. If you can ignore the instructor’s accent, this will be a helpful resource!


1. 7 tips on writing clean code | Larsblog
This blog entry includes some helpful programming tips from Lars Marius Garshol, a Norwegian technologist living in Oslo. These tips are based on problems that tend to recur again and again in code written by other people.

2. Coding Style and Good Computing Practices
This article appeared in the Political Methodologist; it includes helpful practices related to modularity, formatting, documentation, and other topics that can be used to make it easier for code to be “replicated” -- thoroughly explained and reused.

3. Why clean code is more important than efficient code | TechRepublic
Chad Perrin, an IT consultant, developer, and freelance professional writer, discusses his reasons for putting clarity ahead of efficiency at certain times, while putting more emphasis on efficiency at other times. As an example, he talks about a program that he once made, which became very inefficient due to its surplus of clarity and lack of efficiency.

Jonathan Vinson:
a condenced version of clean code.
a good example of step by step refactoring using ideas from clean code etc.
step by step methods of using agile programming methods
all about XP agile programming
an easy read with a lot of info on 7 agile programming methods
some ideas on when to refactor code
some code to be cleaned with steps of cleaning it,or.r_gc.r_pw.r_qf.&fp=e48dc5e2e2f95bfb&bpcl=39650382&biw=3456&bih=617
a simple presentation on refactoring code
GoogleTech Talks about writing clean code
some basic rules to follow if you wanna start writing clean code

Michael Holt:
Source code version control with Concurrent Versions System (CVS)
Introduction to source control using centralized version control tools
10 Principles for clean code
About keeping clean code with examples
Seven habits of highly effective programmers
Examples of bad comments and how to avoid them
How to develop a good programming style
How to improve programmer productivity
10 traits of a good programmer
A visual guide to version control

Conal Green:

CC-TDD & Software Development:

A TDD Problem Repository... it has good ideas, but possesses no resources for pursuing them. However, they may be handy in developing labs, or for students to pick from on their own.

This is a neat lab/kata, and it has a video solution in eclipse/LamdaJ (terribly fuzzy), and another for NetBeans, the Video Solution for which is found at:
<> (use HD for goodness sake, or you can't read a thing!)

A full lab assignment emphasizing TDD, but also ustilising a software development approach, as it is team based. You could use it part-and-parcel, or adapt it as you see fit. Oh, and its linked lists, which is always good.

Another TDD exercise, this time implementing the game "Go". As it stands, it is an example, but it seems it was and possibly again could be a Lab, and might be used as the template for a custom Lab.

This supposedly works, but the code (c++) is hideous!! It has several hundreds of lines, obscured by as-much commentary, which apparently is all the documentation. Overkill.

A simple project to clean and/or enhance, but there is some *.form stuff that I know nothing about... oops. Each student could try and then later compare the results as an exercise.

Straightforward, yet big enough for teams. It is a game, but is AI primarily concerned with emergence. Perhaps the class could develop project for it as part of software development section? For cleaning projects you get (100+ files / 20 students) = 5+ each. (it didn't look really grubby though...)

Probably a bit too big to tackle in its entirety, but some of its components might be worth a look.

-- Big project; under "\borg_src\BORGCalendar\src\net\sf\borg\model" there're a bunch of 500-liners...

Design Pattern Specific:

Seems to be a really in-depth hands-on pattern walk through, especially this next guy:
But that column actually starts here:

This seems to follow a more "and so, class" approach, which may be useful to contrast alongside HeadFirst for some folks.

22 Pages of summary, a handy tourist version before jumping in HeadFirst Design Patterns...

 This is Quick & Handy, with simple hello-world-level code examples of each pattern, minus long explanation. Kind of a reference sheet, if you follow me.

This is just a Factory & Singleton Exercise, but with no solution provided...

Another book, but with "do-this-to-the-following-code" exercises. The exercises, while without solutions, are marked and would probably make good homework.

Jonathan Gertig:
Cool project using android phones as game controllers for PC over wifi.
Awesome this site has examples of different code in a lot of languages on every page. Nice for code translation.
A interesting example of re factoring a project from a guy in the business.
jFront is cool it allows you to to operator overloading in JAVA! Sort of you write it as if you had oo then it translates you code in to the nasty nested function calls you need for Java.
A nice view on how Model View Controler works. This is from a .NET stand point.
Ryan Baits is really good at explaining and giving examples. Want to learn ruby on rails Well his web casts are great. He has all the basic beginner videos free so don't worry.
Wanna learn to mod video games here is a simple learning tool for minecraft.
Understand how to mod now get the Mincraft coders pack a look at the code behind the game.
What is the best structure in MVC?
Nice web design tutorial and info site.