Is there anything *enjoyable* about our development process?

Neil Williams linux at codehelp.co.uk
Fri Oct 14 19:13:07 EDT 2005


On Friday 14 October 2005 8:54 pm, Derek Atkins wrote:
> Quoting Martin Preuss <aquamaniac at gmx.de>:
> > What frightens me most is scheme...

Join the (v.small) club! (int i = 1; i++;)

I have no knowledge of scheme and despite many appeals from Derek and others, 
I have absolutely no intention of learning it! 

What little I've seen and tried to follow has put me off - along with the 
perception that anyone who uses emacs must like lisp and can move to scheme 
with graceful, effortless ease. Well, sorry, I cannot use emacs. I've tried 
many times and it just does not make sense to me. Don't let's start any flame 
wars here, but I am happy with vi.

> > I'm quite firm in C/C++, but having 
> > to learn another language just to get some things into Gnucash is
> > currently no option for me (I simply don't have the time right now).

Absolutely agree. 100%.

> I wish I could stamp out this FUD about GnuCash.  The archives and
> the FAQ try to be quite clear on this:
>
> 1) GnuCash is 80% C
> 2) Scheme is limited to an extension language
> 3) Scheme is only used /strongly/ in the QIF Importer and Reports

?? gnc-module ?? The modules are written in C but it is scheme that loads them 
- it breaks the flow and makes it hard to follow the program in the source.

What was that quote about 20% of a project requiring 80% of the effort?
;-)

> To sum it up:  unless you're hacking on the QIF importer or a Report,
> it's VERY VERY VERY unlikely you need scheme to do what you want.

Do what you want, maybe. To *understand* what you are doing and where it fits 
in the program flow, sorry, I strongly disagree. I know to my cost that 
making changes without that understanding only causes grief for everyone.

Scheme/guile/gwrap get in the way of all manner of processes within the tree 
*when the developer doesn't already know scheme*.

It IS a significant barrier to new developers, it is off-putting because it 
"hides" essential components of program flow in a form that a C developer 
cannot easily follow.

One of the most important stages in learning a new program is to have a clear 
understanding of how it gets from main() to return 0; gnucash uses a bash 
script and guile and I still don't understand *anything* about how it gets 
from $ ./gnucash to gnc_engine_init().

I've been recommended to learn scheme so many times within gnucash but NEVER 
outside it. Why should new developers be treated in that way? I've mentioned 
this before, we are not flushed with offers of new developers, we cannot 
afford to make gnucash *less* appealing than A.N.Other project. People will 
gravitate to one of two projects:

A) The one they enjoy working within the most, or
B) The one they REALLY need to fix for some personal itch.

Developers who join for reason B will be pre-occupied with their own needs, 
reticent about taking on things like scheme (because they just want to 
scratch their itch) and prone to leaving immediately their need is met.

The original article that started this thread was all about making gnucash 
appealing for reason A.

I enjoy working within QOF - that is my emphasis and all my work in QOF is for 
reason A. 

Unfortunately, I am working within gnucash more for reason B than reason A. I 
sincerely hope that this will change and I want to encourage a climate that 
tips the scales in favour of A.

Learning scheme just to get under the skin of gnucash is simply too much of a 
barrier to many prospective developers. I guess that may be why it's been so 
hard for me and why I've had so many problems getting under the skin of 
gnucash. Those problems have inevitably caused problems to other members of 
the team.

Scheme is another of the hidden barriers in gnucash. Others could be:

1. Hard to follow code layout - src/engine in particular has caused lots of 
confusion on this list when trying to relate to QOF. CVS is the main problem 
here, preventing file system re-organisation. (I like CVS but I recognise 
it's problems too).

2. Confused function naming conventions and file naming conventions. (Again, 
filename problems are related to CVS - function names are just historical and 
a lack of time to change them).

3. Lack of developers (catch 22 - the fewer active developers, the less time 
is available to help prospective new developers).

4. This isn't gnucash's fault but such a large project is a *difficult* one to 
take on. We can't reduce the codebase but I feel we all need to make it 
easier for new developers to get "under the hood". One BIG problem for me has 
not been "code" but *code management*. Each developer here has their own 
scripts and tools, procedures and routines for updating from CVS, test 
builds, separate test trees, favourite editors, tab conventions, etc.etc. 
Some of this DOES need to be formalised somewhere. I've lost count of the 
number of commits where one of the other developers has rounded on me for 
some problem that I had not anticipated. We can't all telepathically know how 
to manage the code and the commits. Sometimes I do wonder if it is worth the 
(seemingly inevitable) hassle. I should not dread making a commit, or have to 
set aside most of the following day to answer queries and explain why I did 
certain things. Maybe it's all down to me being self-taught but if the 
unwritten conventions of a computer science degree are seen as unbreakable 
rules, then those who have a different degree of training need to know - in 
advance - how to check for those. Yet at the same time, we can't bombard 
prospective developers with a 70kb HOWTO. This is the area that causes me the 
most angst but I have no real answers, just lots of messages in the archives.
:-(

Despite all that, I've been lucky and I am extremely grateful for the 
encouragement provided by Derek and others but if gnucash could dump the 
guile/gwrap dependency I would be a very happy developer. I'll settle for 
removing guile from all areas EXCEPT the ones highlighted by Derek above: QIF 
importer and reports. (QIF != QOF!)

Sadly, there is more work to be done before that becomes possible and most of 
it is not urgent for G2.

> > But since Gnucash uses scheme for so long I believe there must be a good
> > reason for using multiple languages in such a big project, so currently I
> > must resign.

That is a desperate shame, Martin. Please reconsider. I may upset the other 
developers (often) but I can make a contribution to the codebase *without* 
knowing any languages except C. (I'm OK with perl, bash etc., but I haven't 
specifically needed those for gnucash.)

Hacking on gnucash is a big enough learning process on it's own, don't be put 
off by the scheme, you don't need it and although it makes things hard 
sometimes, you can work without it - you just need a thick skin!

-- 

Neil Williams
=============
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20051015/601ca094/attachment.bin


More information about the gnucash-devel mailing list