Nice guide. I'm trying to get my wife to use Emacs and she has been struggling to make sense of the built in tutorial (as a point of reference, she had practically never used any computing device other than a cell phone before a few years ago). I'll send it to her and see what she thinks.
You may ask, "Why the heck are you getting her to use emacs???". I started doing consulting this year and initially for tax reasons decided to have my wife run the company (while I did the programming). It has worked out spectacularly in that my wife loves the job and I can concentrate only on working with the clients. We have to do double entry accounting, though. We're using ledger-cli which has great Emacs org-mode support, so I'm hoping to get her going on that.
Wow, ledger is pretty hard-core. I haven't used ledger-cli though so I probably shouldn't comment on that. Out of curiosity, have you tried using GnuCash?
Yeah, I started with GnuCash. Unfortunately (or maybe fortunately as it turned out), I desperately needed good support for currency trading accounts: http://www.mathstat.dal.ca/~selinger/accounting/gnucash.html
(I am a Canadian, living in Japan, consulting for a UK company :-P My company has to calculate capital gains on transactions in 3 different currencies...). At the time I was using it, GnuCash had some annoying UI bugs with the optional currency trading accounts feature. A friend suggested that I try out ledger.
Now that I'm using ledger I would never, ever go back to GnuCash. It's not that GnuCash is bad -- it isn't. But when I started doing actual accounting (especially with foreign currencies), I could never get anything to balance in ledger. After working at it I finally understood why -- I was doing it all wrong! Being a complete neophyte I had no idea what the difference was between LIFO, FIFO and average cost or how I could represent it in my accounting. GnuCash would say "You made this much capital gains" and I just accepted it. With ledger I would look at the reports and go, "Hey... what the heck... why isn't that number zero???".
There are some other big, big wins with ledger. The first is that you are working with a text file. As a programmer, this is massive. Why do I need a stupid GUI? A nice descriptive DSL is waaaaay more convenient. Ledger itself is just a reporting tool that takes the data that you enter into the file and answers questions that you give it (which forces you to think of appropriate questions, which in turn showed me what I didn't understand...) I actually use vim (there is a vim mode as well), but emacs org mode is unbelievably fantastic (I'm a converted emacs user) and probably worth learning emacs for. The mixture of ledger and org mode is probably the best possible interface for an accounting program.
The other really big win is that you can put your accounting in source control. I can not express to you the amount of ass-saving this has brought me. Every time I make a change into the ledger I commit the change to git. Real accountants (which I hire to take my amateur stuff and do real accounting with) aren't supposed to change things in their ledger. It's kind of a law or something ;-) They can only add things (including notations). I do the same thing with ledger and git. I can find out what the ledger said at any given date. And I have incredibly readable diffs.
This last point is so incredibly important that I could not ever possibly think of using GnuCash again. This is not to say that ledger isn't without its faults. There are also some competing programs that were inspired by ledger which are worth checking out (bean-counter is one and there is a haskel implementation whose name I forget -- hledger???). There are also some things you can not do in ledger. There is no integrated payroll calculator, or invoice tracker, or anything like that. However, since the DSL is pretty easy to generate, it's quite easy to write scripts to do pretty much everything you might want to do. For my company (me and my wife), it is perfect. I don't think I would want to power a large corporation on it. I believe the Software Freedom Conservency still does their accounting on ledger, though.
I'm an on-again, off-again contributor to GnuCash but I really like ledger too, and especially hledger because just knowing it's Haskell puts my mind at ease about several things.
What you described about source control is really interesting because there are a lot of parallels between Git's commits and double-entry accounting's journal entries. There are some really close correspondences--like Git's revert and a reverting journal entry (i.e. the opposite movements of money to the transaction being reverted). Of course in accounting the master branch really is the one 'true' view of the world but it's interesting to think in terms of the Git analogy and imagine divergent branches which could be e.g. explorations of different scenarios for your business.
Afaik no one has ever implemented such a system....
Wow, hledger looks impressive. I think I'll use it as an example for when people ask for a "real world haskell program" as it has a web interface, gui (I think I saw one), is cross platform, and only requires downloading the executable.
Did I get everything correct? Do you think recommending hledger as a "real world Haskell program" is a good strategy?
Sure! Hledger is a great tool for people willing to invest a certain amount of time into learning some new tricks.
Another cool real-world Haskell app is Silk.[1] Looking at the site, there's no mention of Haskell and no obvious way to tell that that is the implementation language. And that's the beauty of it! :-)
You may ask, "Why the heck are you getting her to use emacs???". I started doing consulting this year and initially for tax reasons decided to have my wife run the company (while I did the programming). It has worked out spectacularly in that my wife loves the job and I can concentrate only on working with the clients. We have to do double entry accounting, though. We're using ledger-cli which has great Emacs org-mode support, so I'm hoping to get her going on that.