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
-~----------~----~----~----~------~----~------~--~---

Reply via email to