On 05/18/2016 01:38 PM, Bill McCloskey wrote:
I think we're starting to conflate separate concepts. I absolutely
believe that code should be modular. SpiderMonkey is a great example:
we're much more productive because of how well separated it is from
the rest of the browser. On the other hand, *people* should not be
modular. You don't need to be ignorant of one area in order to be an
expert at another.
The ignorance itself doesn't help, sure. But I still assert that there
are benefits to having fewer things in your head, to have your focus
wholly consumed by a more limited scope for the most part. It's not for
everybody, but imagine if we suddenly needed to hire a Sparc64 expert
and we made it part of our hiring criteria that they had to be willing
to chase bugs through CSS code if they happened to be triggered by their
work. We would drastically limit our hiring options, cutting out some
very qualified people. (Or say we didn't factor that into account when
hiring, but then expected it of them when they started working. I would
imagine that would feel pretty unfair and frustrating.)
I find that when I first learn a piece of code, it takes forever to
learn the basic invariants and high-level abstractions. But once you
learn those things, it goes much quicker. When you see a function
call, you can guess what it does rather than having to look at the
definition. When you debug a problem, you know the point where things
go wrong because you know how the data is supposed to look (and not
look). And the great thing about this sort of high-level knowledge is
that it stays with you for a long time. I forgot most of what I knew
about the JS engine a while ago, but it's still easy for me to look up
specific things that I need to know or to debug issues that relate to
SpiderMonkey.
I don't think there's any reason why a JS engine developer couldn't
learn this high-level stuff about other parts of Gecko or Firefox
while still being a great JS engineer. Yes, it takes some time. But it
pays huge dividends. When test failures happen, you'll find it a lot
easier to understand what's going wrong and who would be the best
person to investigate. It saves tons of time in the long run.
You're arguing the advantages of being a generalist. I agree; I think of
myself as a generalist too, and I'm no stranger to some of the weirder
corners of the Gecko codebase. But that doesn't address whether being a
specialist can also have advantages.
I suspect one reason that SpiderMonkey developers have such a dim view
of the rest of Gecko is that they usually only look at it when dealing
with test failures that are standing in the way of landing something.
That's going to be a pretty frustrating experience no matter what the
overall quality of Gecko is. And tests tend not to be our best code.
I don't think we need to argue this point, since I don't think there's
any disagreement. Though I suppose I deserve to have it brought up,
given that I complained about the difficulty of minimizing test cases. I
would challenge the assertion that SM devs have a dim view of the rest
of Gecko -- you may be right, or you may be partially right, but it's
certainly not universally true. I have a dim view of certain aspects and
areas of Gecko. And of SpiderMonkey, which I tend to be more critical of
given its amount of focused developer attention compared to the wider
Gecko. (It's actually a little weird for me to even separate them,
actually; I think of SpiderMonkey as part of Gecko. But it *is* a more
idiosyncratic corner than most, hence the original thread.)
On Wed, May 18, 2016 at 11:14 AM, Steve Fink <[email protected]
<mailto:[email protected]>> wrote:
On a related note, I think we're also organizationally weak about
taking advantage of ideas and new approaches. Specifically, you
can come up with all the great ideas you want, as long as you're
going to personally implement them. Anything that would best be
done by someone else or a collaboration of multiple people
requires strong salesmanship, which is not always the forté of the
person coming up with the idea. But I've rambled on too long
already, so I'm not going to get into that.
Working with people in other areas is a great way to earn their
respect. Once they respect you, they'll be much more likely to work
with you on your ideas. Or you might not even need their help because
you can do the work yourself. Either way, having more experience in
other areas makes it easier to try out new things.
Good points, and I'd like to work out my thoughts on this more, but I
already regret derailing this thread in that direction. If I can scrape
together enough coherent thoughts on this, I'll start a new thread...
somewhere. (Not having a good place is part of the problem, actually.)
_______________________________________________
dev-tech-js-engine-internals mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals