I work on financial software--the kind that reads streaming data and static data from various sources, transforms these streams through various calculations and possibly decides to send out trades.
The logic inside this engine, how various decisions are made, what calculations are used, what data is touched, is usually designed by someone other than the programmer. Who ever works out the logic, it is basically exploritary in nature. The domain expert may have a general idea of what he wants and the 'design' is _always_ being changed. If there is a bug in the software or in the design, the bug often can't be allowed to linger for weeks or days. Ideally, the running server needs to be changed in matter of minutes. Again ideally, the server shouldn't be brought off-line since it would loose the state it has built up throughout the day (the stuff it has to 'remember') and the server may be running many other strategies need to respoond to the market in milliseconds. As I've already mentioned, systems such as these basically need to execute ideas in brains of non-programmers. These ideas change often, very often. Many ideas are tried, many of them are discarded. With such frequent changes, there is no way someone can build custom GUIs to interact with and monitor the running strategy and add the kind of logging which will allow "why the hell isn't this working" type of questions to be answered. Erlang is very good at concurrency and can probably handle working with streams of data. Haskell, F#, etc. are very good at building DSLs which let programmers quickly put together strategies. Java and C ++ (and C#) are very good as 'standard' languages which large libraries provided by vendors, open source and built-in packages. Excel, yes Excel, is great at combining user interface, simple logic and the ability to change programs on the fly. It looks like Clojure might be able to solve some of these problems as well. I'm trying to figure out how well it fits in this environment. I see that Clojure is designed to handle concurrent programming (useful for multi-cores). I also notice that Clojure has the ability to change programs while they are running; however, I haven't been able to find examples of this. From what little I know of lisp/ scheme, DSLs are quite natural to them (even if they retain the lisp syntax). Clojure obviously also has access to Java's libraries. Is there a good solution to the problem of observing the program as it executes, or easily peeking into the state of the server? The kinds of trading strategies I described are often called 'black-boxes,' but they are usually not true black boxes. There has to be an easy way to keep track of what the trading brain is seeing and thinking. I once saw a demo for small talk in which the programmer drew a little car, attached the car to some code on one end and attached a steering wheel on the other end and started 'controlling' the virtual car through the virtual steering wheel...and in the time-span of a demo! Is there any effort to bring FRP (FrTime, Yampa, etc.) library to Clojure? Any other ideas how Clojure can improve the kind of softare I described above? I'm not naturally inclined to like the lisp syntax, but there seem to be enough benefits to real-world problems and I'm trying to get a better feel for this paradigm. I'm also hoping tat Clojure is a 'jujutsu' language, where a single developer or a small number of developers can take advantage of the language to 'fight off' large problems or larger teams with bigger budgets and more unweildy weapons. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---