semi-newbie | differences in solve



Greetings --

Using most recent build of Maxima under Windows and Linux. Am trying to 
move from Maple to Maxima, and am struggling with a few things (so far, 
Maxima is very impressive). I was fooling with Maxima over the week-end, 
to updates some lecture notes, when I realized I must not fully 
understand how Maxima handles 'solve' (meaning, it doesn't do what I 
though it would do, after my experiences with Maple).

For example,

f : p^y*(1-p)^(N-y);

  df : diff(f,p);

So, set up simple binomial, differentiate it, and then want to solve for 
p, which should yield y/N

However,

solve(df,p);

yield a fairly complicated 'mess'

[p^y=-((1-p)*p^(y-1)*y)/(y-N)]

whereas linsolve(df,p) yields p=y/N as expected. However, it isn't 
obvious to me (based on the helpfile) why (i) basic 'solve' yields what 
it does, and why (ii) 'linsolve' seems to be needed (apparently 
generally, in my tests to date) to yield 'simplified' solutions to 
fairly simply expressions.

Pointers to the obvious, or a quick explanation, most appreciated.

Thanks in advance...