mikeobrien.net Curriculum Vitae Blog Labs
Thursday, February 12, 2009

The recent exchanges between Joel Spolsky/Jeff Atwood and Bob Martin have been quite interesting. But I think what is more telling are the comments people have made about these exchanges. There really appears to be a huge divide amongst developers and I have to say it’s quite disturbing indeed. In my career I have worked with many apathetic developers who have spurned good practices, even to the point of ridiculing those who strive to learn/follow them. Critical, but with no gospel of their own. And ironically these same developers would also complain about the rot in the software they were developing. Instead of advocating SOLID (et al) principles they seem to promote what I call LIMP principles:


LRP - Least Responsibility Principle - A developer should have no reason to change.
IIP - Intelligence Inversion Principle - Depend on ignorance and misinformation, not primary sources.
MSP - Minimum Segregation Principle - Make fat interfaces that are application specific.
PSP - Pattern Substitution Principle - Ad hoc design is always substitutable for proven design patterns.


It's encouraging to see folks like Uncle Bob and movements like ALT.Net who encourage good practices, developer responsibility and quality. Although software design is a relatively new art we have learned a lot so far and there is no need to keep making the same mistakes over and over. Worst yet, there is no need to disseminate faulty thinking to newcomers to the field (Who seem to be rare these days).

Thursday, February 12, 2009 6:27:29 PM (GMT Standard Time, UTC+00:00)  #   |  Comments [0]  |  Trackback
Thursday, May 31, 2007

A while ago I posted a link to MIT's Open Courseware (OCW) site. Recently I have begun to make use of it and wanted to share some of what I have found. First of all, it rocks! It really is a great resource, especially for those who want to learn about a subject and would like to do self study. I didn’t realize this earlier but a number of the courses also publish videos of the lectures. For example 3.091, "Introduction to Solid State Chemistry" has all 35 lectures posted, thats almost 30 hours of lecture time! These videos (If available) can be found possibly in 3 locations, so keep that in mind. The first is on the OCW site. Browse to the course you are interested in, for example Introduction to Solid State Chemistry. Under the "Lecture Notes" (This label may be a little different between courses) section you will find the video streams and the lecture notes. The second location is on the regular class page. 3.091 has a tab called "Videos" and another called "Archives", both have links to lecture videos and notes. Now the third place you can check, if you want to easily download the videos, is Google Video. Searching for "3.091" brings up all but 2 of the course videos which can be downloaded in in a format that can be played by your video IPod. Actually Google Video has over 450 MIT Lectures available for download! There are also nearly 300 UC Berkeley lectures as well. If you want to download any of the lecture videos (to your hard disk) that are offered as a stream on the MIT website you can use a program like FlashGet to save the stream as a file and then convert the file to what you want. The MIT site publishes RealVideo streams (That use the RTSP protocol).

Other courses that offer video lectures are (To name a few):

Physics - Electricity and Magnetism
Physics - Vibrations and Waves
Physics - Classical Mechanics
Physics - General Relativity
Mathematics - Differential Equations
Mathematics - Linear Algebra
Chemistry - Principles of Chemical Science
Chemistry - Solid Sate Chemistry
Biology - Introductory Biology
Computer System Engineering
Circuits and Electronics
Atomistic Computer Modeling of Materials
Media, Education, and the Marketplace
Electromagnetics and Applications

You may want to look on the course listing to see if there is a newer version of the course as newer ones are periodically added.

The OCW site also offers the course syllabus, study materials, readings, exams and a number of other resources. They offer the option to download the entire course as a zip file so that you don’t have to download the resources individually.

Now a few words about the "Introduction to Solid State Chemistry" (3.091) course... If you are interested in learning about chemistry I would highly recommend the 3.091 course. Donald Sadoway is the lecturer for this course and he does an amazing job! You can tell he loves the subject and he knows it very well. He has a great sense of humor and he really makes the material come alive (At least for me anyways). This course lays an excellent foundation for other areas of study.

Thursday, May 31, 2007 4:48:07 PM (GMT Daylight Time, UTC+01:00)  #   |  Comments [2]  |  Trackback
Wednesday, January 10, 2007

Very cool, MIT is publishing all of their couse materials under a CC license. Great resource for self-study!

Wednesday, January 10, 2007 4:13:41 PM (GMT Standard Time, UTC+00:00)  #   |  Comments [0]  |  Trackback
Sunday, October 15, 2006

In OOP, type variance refers to the difference between a class and its descendant or ascendant. For example lets say we have three classes; Vehicle, Spacecraft and Shuttle. Shuttle inherits from Spacecraft which inherits from Vehicle. They all vary by type. Vehicle is the contravariant of Spacecraft since Vehicle is Spacecraft’s ancestor whereas Shuttle is the covariant of Spacecraft since Shuttle is a descendant of Spacecraft. Invariance simply refers to a lack of variance. For example a parameter or return type that must be invariant cannot respectively accept or return an ancestor or descendant of the type specified, they can only accept or return the specified type.

Sunday, October 15, 2006 7:33:35 AM (GMT Daylight Time, UTC+01:00)  #   |  Comments [0]  |  Trackback
Creative Commons License