Refactored from SpaceAndModularizingWebPages, these are thoughts I've been having since returning to programming web-sites.
Separation by language is common in most allegedly "good" practice. Firstly, the code in each language is placed in different files; and in larger systems, in different sub-trees of the filing system. Secondly, there's an expectation that different people, with different skills, will work in each language : some will define XML config. files, others will write Java, others will write SQL and designers will create HTML. We try so hard to separate the different activities, that we even write special AbstractionLayers simply to hide one language from users of another.
See also :
- SpikeSolutions are about driving the UserStory or functionality all the way through the layers, to get something working and to understand what's involved in getting the layers to work together. Perhaps the spike is the right module.
- ModularityMistakes in general.
- Example of the kind of separation demanded http://www.manageability.org/blog/stuff/5-rules-of-model-view-separation
- My discussion of ModelViewController
I suppose the natural outcome of this way of thinking would be a kind of SocialNetworkAnalysis on your code to establish which modules, objects and functions interact with which, most frequently. Is this something RefactoringBrowsers encourage?
On second thoughts, this is probably a famous technique which has been around since the 60s and which I should have been practicing all my life, but I'm just too ignorant to have heard of it :-(
- Reverse engineering MicroSoft software with BioInformatics techniques : http://www.wired.com/news/infostructure/0,1377,65191,00.html
Sounds like the problems with decomposition by language are really down to the way it is done (e.g. expectation that different people will be developing in each language) rather than any actual fundamental problem in using different languages?
Yep, that's exactly what I'm saying. Of course you can / should use different languages in your project. But don't assume that the boundaries between languages are the natural module boundaries; or boundaries that can naturally be mapped onto personel differences or should be enforced by putting chunks of them in different files in different corners of the file-system.
Okay then! In that case "probably a mistake" is a bit strong. I use multiple languages in the majority of my projects and like to think that I do a reasonable job of it :-)
What Martin Fowler and others call LanguageOrientedProgramming is an interesting perspective.
See also MultiParadigmCoding