Skip to main content

Refactoring To Patterns

I learned design patterns when I was in grad school. Later when I started work, I used some patterns, but some were never used, and their knowledge became rusty over the years. I thought it was time to refresh my knowledge of software design patterns, sometime last year.

Back then I was enamoured with the concept of web based learning (and I still am). I was also contemplating to take my Java workshops over the Internet. So instead of just re-reading the GOF book, I thought of taking a web based course on design patterns. This way I would learn what I needed to, and also get a hands on feel of how elearning works. When I Googled elearning and design patterns, I stumbled upon Industrial Logic's online course "Refactoring to patterns". Now the concept of refactoring to patterns is'nt just about learning design patterns. It involves understanding design patterns, but also involves identifying code smells (bad code), that should be refactored to use a design pattern. I was delighted. This course would not only help me refresh design patterns but also teach me something new. I registered for it.

I found the course to be very well made. The explanation of each design pattern started with some reading suggestions, typically from the GOF book and Joshua Kerievsky's excellent book - "Refactoring to patterns". After that there was a little conversation on that design pattern. This is really good, because after reading the text, I had many questions in my mind, and they were all answered by reading the conversation (which I am presuming Joshua must have had with participants of his course). Now that the theory had sunk in, the next step was to understand some code and refactor it to use the pattern. I could verify my solution by running the tests. The interesting thing here is that the tests not only verify that the code still works properly, but also verify if the refactoring uses the design pattern correctly. These tests make many assumptions, but they are very well written and do verify the solution correctly. Once you are done you can upload the solution. The course also has screencasts for the refactoring if you need any help. Finally there are some questions to reinforce the concepts.

I still have not completed all the patterns in the course, but have had a great learning experience with the stuff that I have completed.

In time to come web based learning will provide an excellent way for people to update their knowledge at a time, place, and pace of their convinience. The ability of the Internet to serve multimedia and enable collaboration is extremely powerful. I think we are just begining to scratch the surface if this potential for educational applications. The social web and the web of participation will bring several changes to the way we teach and learn. We will see many interesting eLearning content come up in future. Also, be on the lookout for educational podcasts and screencasts.
BTW, this is NOT a sponsored/paid post! ;-)

Notes: This text was originally posted on my earlier blog at http://www.adaptivelearningonline.net

Comments

Popular posts from this blog

Running your own one person company

Recently there was a post on PuneTech on mom's re-entering the IT work force after a break. Two of the biggest concerns mentioned were : Coping with vast advances (changes) in the IT landscape Balancing work and family responsibilities Since I have been running a one person company for a good amount of time, I suggested that as an option. In this post I will discuss various aspects of running a one person company. Advantages: You have full control of your time. You can choose to spend as much or as little time as you would like. There is also a good chance that you will be able to decide when you want to spend that time. You get to work on something that you enjoy doing. Tremendous work satisfaction. You have the option of working from home. Disadvantages: It can take a little while for the work to get set, so you may not be able to see revenues for some time. It takes a huge amount of discipline to work without a boss, and without deadlines. You will not get the benefits (insuranc...

Testing Groovy domain classes

If you are trying to test Grails domain class constraints by putting your unit test cases in the 'test/unit' directory, then your tests will fail because the domain objects will not have the 'valdate' method. This can be resolved in two ways: Place the test cases inside test/integration (which will slow things down) Use the method 'mockForConstraintsTests(Trail)' to create mock method in your domain class and continue writing your test cases in 'test/unit' What follows is some example code around this finding. I am working on a Groovy on Grails project for a website to help programmers keep up and refresh their skills. I started with some domain classes and then moved on to write some unit tests. When we create a Grails project using grails create-app , it creates several directories, one of which is a directory called 'test' for holding unit tests. This directory contains two directories, 'unit', and 'integration' for unit and ...

Planning a User Guide - Part 4/5 - Get Your Toolbox Together

Photo by  Fleur Treurniet  on  Unsplash In the previous post , I had discussed how to organize the team for creating your software's user manual. With the team ready, the next step is to select the tools. Working with the right technical writing tools is as important in technical writing as it is in building software. The right tools will help you be more organized, productive, and accurate in your work.  In software, we use an IDEs, testing tools, and version control tools to manage our work. In technical writing, at a bare minimum, we use a content authoring tool, an automated grammar checker, and visual tools to assist us in our work.  I'll discuss various tools that are available in the market, link to comparisons, and share my opinion to help you make the right choice. Help Authoring Tools A Help Authoring Tool (HAT) offers several features that go beyond simple word processing software for writing technical documents. HATs s...