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
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.
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
pdf version of Clean code textbook.
pdf version of Software Developement textbook
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
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.
- 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....
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.
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: http://www.joelonsoftware.com/
And the book: http://www.amazon.com/More-Joel-Software-Occasionally-Developers/dp/1430209879/ref=pd_bxgy_b_img_y
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
- 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.
- 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: http://blogs.msdn.com/b/oldnewthing/
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: http://channel9.msdn.com/
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
-- 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.
http://stackoverflow.com/questions/4910138/unit-test-examples-- 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
-- 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
-- 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
-- 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.
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:
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.
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
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.
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
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
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
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”
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 Patterns---JavaCamp.org
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
codeschool.org, 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
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
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
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
a simple presentation on refactoring code
GoogleTech Talks about writing clean code
some basic rules to follow if you wanna start writing clean code
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
CC-TDD & Software Development:
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.
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:
<http://vimeo.com/8506325> (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...
is Quick & Handy, with simple hello-world-level code examples of
each pattern, minus long explanation. Kind of a reference sheet, if you
This is just a Factory & Singleton Exercise, but with no solution provided...
book, but with "do-this-to-the-following-code" exercises. The
exercises, while without solutions, are marked and would probably make
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.