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 (insuran

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 uni

Some thoughts on redesigning education

Some time back I read a blog post on redesigning education. It asked some very good questions. Stuff which I had been thinking of myself. I left my thoughts on the blog, but I would also like to start a conversation around these ideas with those who read this blog as well. I would like to know what other people think of the issue of redesigning (college) education. I have often thought about how college education can be improved. To answer this question, we first have to ask a very basic question. What is the purpose of education? To me, we need education for 3 things: To learn more about the world around us To lead positive constructive lives To earn a good living / fulfill our ambitions I think education has to a large extent evolved to fulfill #3 (with a bias towards earning a comfortable living). The semester system, along with multiple choice tests, and grading, has made our education system into an assembly line. Students are pushed into the assembly line, given classes, admini