I've just finished reading "Bad Science" and it made me think of how little science has been done about software development.
The only two areas where there has been some research that I can think of (off the top of my head - without doing any research about research) (and that seems very relevant to my day-to-day work) are about pair programming and test driven development.
While I think it is commendable that people have done some research for these topics - it's just not enough (in particular, not by enough different groups or people).
So - what good science is there about software development? Comments welcome.
Copyright © 2010 Ivan Moore
Saturday, September 18, 2010
Saturday, September 4, 2010
IDE effecting code
I don't write Java code exactly the same as I used to. Some of the ways my code has changed are due to using an excellent IDE.
One of these I mention in a previous article was about having fields public in some circumstances - I won't repeat the arguments here, I just want to mention that one reason I'd now make a field public when before I would have had a getter/setter is that it is trivial to convert a public field into a getter/setter when you need to (a refactoring called "encapsulate field"** in IDEA). (I still prefer not to have the internals of a class public whether accessed by fields or getters/setters though - tell don't ask.)
Another example is that now I only introduce an interface when it's really needed and not in anticipation of it being needed. Again, it's trivial to introduce the interface when it's needed using the "extract interface" refactoring of the IDE.
I was chatting to Nat Pryce about this and he was agreeing that using an excellent IDE has also changed the way he writes Java. I hope he and others will add comments to mention other ways their programming style has changed as a result of better IDEs.
I know for some people the idea of changing your programming style as a result of what a tool supports is heresy - but I think good development practice means using the tools and language so they work well together.
The examples given above refer to Java development where the team owns all the code rather than when writing an API - I'm not addressing API design here.
** BTW, I think calling the refactoring "encapsulate" is a bit of an exaggeration - really it is just replacing one form of non-encapsulation with another.
Copyright © 2010 Ivan Moore
One of these I mention in a previous article was about having fields public in some circumstances - I won't repeat the arguments here, I just want to mention that one reason I'd now make a field public when before I would have had a getter/setter is that it is trivial to convert a public field into a getter/setter when you need to (a refactoring called "encapsulate field"** in IDEA). (I still prefer not to have the internals of a class public whether accessed by fields or getters/setters though - tell don't ask.)
Another example is that now I only introduce an interface when it's really needed and not in anticipation of it being needed. Again, it's trivial to introduce the interface when it's needed using the "extract interface" refactoring of the IDE.
I was chatting to Nat Pryce about this and he was agreeing that using an excellent IDE has also changed the way he writes Java. I hope he and others will add comments to mention other ways their programming style has changed as a result of better IDEs.
I know for some people the idea of changing your programming style as a result of what a tool supports is heresy - but I think good development practice means using the tools and language so they work well together.
The examples given above refer to Java development where the team owns all the code rather than when writing an API - I'm not addressing API design here.
** BTW, I think calling the refactoring "encapsulate" is a bit of an exaggeration - really it is just replacing one form of non-encapsulation with another.
Copyright © 2010 Ivan Moore
Wednesday, August 18, 2010
miniSPA 2010 - Friday September 10th - BCS London
Mike Hill and I have been volunteered to co-chair the miniSPA conference.
SPA is a fantastic conference - miniSPA is a condensed (and free!) version - it'll be great - all the places will go, so book now.
Here's the announcement and registration link (sorry the registration system is really horrible):
Copyright © 2010 Ivan Moore
SPA is a fantastic conference - miniSPA is a condensed (and free!) version - it'll be great - all the places will go, so book now.
Here's the announcement and registration link (sorry the registration system is really horrible):
Experience some of the most popular sessions from this year's BCS SPA conference, for free, at miniSPA2010 on Friday September 10th at BCS London (near Covent Garden).
The miniSPA2010 one-day programme features five sessions, in two streams, that give an excellent guide to the variety and quality you'll find at every SPA conference.
We hope that attending miniSPA will encourage you to submit a session proposal for SPA2011, which will be taking place from June 12-15 (also at BCS London).
For more information visit http://bcs-spa.org/minispa-2010.html. Booking is essential. Places are limited so reserve yours now.
See http://bcs-spa.org/ for details of our programme of regular events.
©2010 BCS SPA | 5 Southampton Street | London | WC2E 7HA
Copyright © 2010 Ivan Moore
Saturday, June 19, 2010
Don't just put your documentation in source control
In the GS04 course at UCL I told the students to put everything into source control; not just source code but also things like documentation and configuration files.
That's all very well, but my current project at work has made me realise that you can do even better. You should not just put your documentation in source control, you should serve it from source control.
On my current project we have all our documentation served directly from our subversion repository, mostly as html.
What about Wikis?
I used to be a big fan of having a project wiki.
A wiki can be great but:
Taking my own advice
I've updated my semi-abandoned project build-o-matic, so its web site is now served directly from its source code repository. It's now so much easier to update the web site (just edit and commit) that I might even get the web site up-to-date.
But there again, the World Cup is on TV today ...
Copyright © 2010 Ivan Moore
That's all very well, but my current project at work has made me realise that you can do even better. You should not just put your documentation in source control, you should serve it from source control.
On my current project we have all our documentation served directly from our subversion repository, mostly as html.
What about Wikis?
I used to be a big fan of having a project wiki.
A wiki can be great but:
- they do have a tendency to get out of date easily
- they can accumulate lots of garbage
- they can be difficult to version control well (difficult to keep in sync with the project's source code repository - I know there are things like Trac but in a lot of companies you don't get to choose what systems you use)
- if the project is abandoned for a long time, the chances are that the wiki might disappear (I've seen it a few times - moving to another wiki system and not migrating old pages) but the source code repository will be around for a long time (and if it isn't then you're screwed anyway).
Taking my own advice
I've updated my semi-abandoned project build-o-matic, so its web site is now served directly from its source code repository. It's now so much easier to update the web site (just edit and commit) that I might even get the web site up-to-date.
But there again, the World Cup is on TV today ...
Copyright © 2010 Ivan Moore
Thursday, June 10, 2010
throw null
My colleagues told me of some code they came across which included the statement: "throw null".
I'd never seen that before - I didn't know what it would do or even if it was valid.
I'll let you think about it. Have a go if you want to check your answer:
Copyright © 2010 Ivan Moore
I'd never seen that before - I didn't know what it would do or even if it was valid.
I'll let you think about it. Have a go if you want to check your answer:
public class Surprise {
public static void main(String[] args) {
throw null;
}
}
Copyright © 2010 Ivan Moore
Sunday, March 7, 2010
Tools and Environments - SCM and CI
When I taught source control and continuous integration in 2007 (for the GS04 course at UCL) I used Subversion for the source control lab and build-o-matic for the continuous integration lab.
In the labs this year, I'll be using Mercurial instead of Subversion, and Hudson instead of build-o-matic.
What would you choose for teaching source control and continuous integration (and for bonus marks, why)?
Copyright © 2009 Ivan Moore
In the labs this year, I'll be using Mercurial instead of Subversion, and Hudson instead of build-o-matic.
What would you choose for teaching source control and continuous integration (and for bonus marks, why)?
Copyright © 2009 Ivan Moore
Saturday, February 27, 2010
Tools and Environments
Steve Freeman and I are teaching a course at UCL called "Tools and Environments".
The course we wish we’d had in college, only we didn’t know it at the time.
We cover subjects such as source control systems, automated builds, automated testing and continuous integration.
In preparing for the course, I've been reminded of how few books there are which we can use as a "course text". There are plenty of books for specific tools (e.g. Ant) once you know that you need those tools, but few books which explain the sorts of things that you need for real software development projects, and why you need them.
The book we're using for our "course text" is Practical Development Environments (and we'll also be recommending Continuous Integration as that also covers much of the material of the course).
If you have other recommendations please add a comment!
Copyright © 2009 Ivan Moore
The course we wish we’d had in college, only we didn’t know it at the time.
We cover subjects such as source control systems, automated builds, automated testing and continuous integration.
In preparing for the course, I've been reminded of how few books there are which we can use as a "course text". There are plenty of books for specific tools (e.g. Ant) once you know that you need those tools, but few books which explain the sorts of things that you need for real software development projects, and why you need them.
The book we're using for our "course text" is Practical Development Environments (and we'll also be recommending Continuous Integration as that also covers much of the material of the course).
If you have other recommendations please add a comment!
Copyright © 2009 Ivan Moore
Subscribe to:
Posts (Atom)