Текст написан на инглише, ибо он является копипастой из моего письма одному челу, который не знает русский. Переводить мне влом, но пост слишком хорош, чтобы его не запостить в рамках серии конфешнов.
First, and foremost - so far I view my projects as something that releases my internal idea-generator preferably with the least possible effort. They make me learn new practices, make me adopt new ways of thinking about programming, and sometimes get fleshed out as something useful to someone except their author.
My programming guru Alex always told me that it's better to test 10 ideas with rough and ugly code (that however has solid backbone, so that less qualified people can cut out it without breaking the main idea), and crystallize them in a single shiny jewel, rather than materialize 5 ideas in what is commonly considered to be "good" code: 100% coverage, little to no ugliness in the small, perfect architecture in the large.
1) Since most of all I value the ideas and their concise and beautiful expression, this is what gets most of my attention. Other things, like fighting with spaghetti that doesn't stand in the way of my ideas, or splitting code in a set of perfectly coherent and lightly coupled components get secondary priority. After all I have a full-time job and some RL, so unfortunately the time I dedicate to my projects is quite finite.
2) That's why a good percentage of my code might be more or less sloppy, not covered with unit-tests (what's more - since I'm still studying I've yet have to finalize the adoption of unit-testing techniques and integrate them into my development mindset), mostly not thread-safe, often performance-ignorant, and even containing bugs. However, I try to isolate ugly solutions (that come e.g. from harsh deadlines and my inborn weakness in planning) behind thought-out APIs (I can easily spend a day thinking out the best possible way to express the API) and firm architectural foundation. Performance-wise I'm pretty much sure (and this is backed up by my several experiences) that if it becomes necessary I'll be able to tune the speed and memset of the application up to reasonable values.
3) My way of learning something in my life is playing with contrasts so I might be overdoing things I learn, e.g. applying functional-style coding even over common sense. Regarding the example with FP-style, I'd love to refactor some of my code to apply e.g. lambdas and call-chaining in more liberal way, so that it doesn't hinder debuggability and readability, tho I understand that I'll never have time for this. Hope the source code in my projects is understandable to someone except me.
***Show me the code***
Without much ado, here are all of my published OSS projects: http://code.google.com/u/xeno.by/. I'd love to get any feedback, but here are some topics that I'd be especially delighted to hear about: 1) How do you find my programming methodology?, 2) What do you think about ideas behind my projects?, 3) How concise and fun to use do you find APIs that express those ideas?, 4) How would you suggest to improve any of my code: in particular or in general?
Elf4b. I think, this is by far the best of my public projects (I also have a working compiler of C#'s subset that includes such things as custom grammar, overload resolution and type inference, but unfortunately I had to remove it from being publicly accessible). As the project's page states it's a fully-fledged script language that can be both interpreted and compiled to IL. I've also planned to develop its debugger, but later that feature went out of scope. The project also provides multiple ways to put together multiple scripts and data they process into a reusable compound. I consider this piece of software to be finalized.
DataVault. Implements an API and corresponding GUI to access and modify hierarchical storage for arbitrary data with metadata. Storage can use multiple formats that include zip and plain fs styles. It began as a simple utility designed to conveniently store, access, and manually browse complex configs of moderate size. Now it has quite rich feature set and unfortunately quite a convoluted codebase that I think has bogged down in side-effects. However since it had been actively used in several commercial projects, it also has undergone significant testing and performance optimization, and it also has loads of unit-tests that somewhat aid me in not breaking working code every time I introduce something new. What I'd love to improve is to tame side-effects and memory usage, upgrade events API, and to
implement transactions in STM style.
XenoGears My bag of tricks I use in everyday coding. This is quite a mixed up utils library that includes: extensions to SQO, my vision of better events for .NET, better IL emit and parse, weak and observable collections, object graph logger, and actually loads of other stuff. Probably the least structured of my projects, since it's in constant flux due to being used with multiple projects simultaneously. I have no even approximate roadmap on this - well I'd love to add a decompiler there (for using in situations like at 1093th line (omg what a number!) of http://code.google.com/p/vsdslplotter/source/browse/trunk/DslPlotter/Impl/DslModel.cs?r150), but who knows when I will have time to do this.
I'll highlight other projects in much less detail. Rapt was my first ever OSS idea and it's still early in its infancy (SMT solver - one of insane ideas Alex taught me and showed how to use in practice). VsDslPlotter is anAPI to VS 2005/2008 DSL Tools that provides a better way to deal with models and also exposed a reusable winforms control that's capable of reading/writing/presenting DSL diagrams. TeslaDomainModel is a failed attempt to unite DataVault-based storage and DSL-based data design UI.