I think raganwald has already put the case better than I could, further up the thread: the mark of an advanced programmer is being able to use her knowledge of the language to write programs that solve interesting or difficult problems. Admittedly that's not JavaScript-specific, but one can easily specialise this general criterion by reference to specific language attributes and types of tasks which the language is commonly employed to solve (DOM scripting etc.).
That's all a bit hand-wavy, so here are some more concrete suggestions. Even in these days of Node.js et al, JS is mainly used for developing web frontends, so this will be heavily slanted towards those sorts of issues. An advanced JavaScript programmer should be able to:
* Develop her own DOM library along the lines of the functionality provided by jQuery or YUI: a CSS selector engine, DOM traversal, element manipulation, all wrapped in a clean and well thought-out API.
* Build an extensible UI toolkit suitable for writing the frontend of a CMS, capable of handling numerous different object types, and communicating with the backend via a specified serialisation protocol.
* Write a testing framework with an equal level of features and stability as common current ones, such as QUnit.
* Create a form validation DSL capable of handling not just simple binary cases and regex-based validation of input fields, but the specification of more complex dependency relationships and requirements. For bonus points, tie it into the backend so the same code generates the frontend DSL code and the backend validation rules, ensuring that they always harmonise.
* Develop complex (as in, complex to implement using the DOM) interface elements such as sliders, drag-and-drop controls etc.
Again, I'm not saying our hypothetical advanced JS hacker should have done all this—just that she should be able to. Note that while some of these require quite extensive knowledge of the DOM and cross-browser issues, one could easily construct examples which pitched more towards different specialities—those above are just problems I'm somewhat familiar with.
That's all a bit hand-wavy, so here are some more concrete suggestions. Even in these days of Node.js et al, JS is mainly used for developing web frontends, so this will be heavily slanted towards those sorts of issues. An advanced JavaScript programmer should be able to:
* Develop her own DOM library along the lines of the functionality provided by jQuery or YUI: a CSS selector engine, DOM traversal, element manipulation, all wrapped in a clean and well thought-out API.
* Build an extensible UI toolkit suitable for writing the frontend of a CMS, capable of handling numerous different object types, and communicating with the backend via a specified serialisation protocol.
* Write a testing framework with an equal level of features and stability as common current ones, such as QUnit.
* Create a form validation DSL capable of handling not just simple binary cases and regex-based validation of input fields, but the specification of more complex dependency relationships and requirements. For bonus points, tie it into the backend so the same code generates the frontend DSL code and the backend validation rules, ensuring that they always harmonise.
* Develop complex (as in, complex to implement using the DOM) interface elements such as sliders, drag-and-drop controls etc.
Again, I'm not saying our hypothetical advanced JS hacker should have done all this—just that she should be able to. Note that while some of these require quite extensive knowledge of the DOM and cross-browser issues, one could easily construct examples which pitched more towards different specialities—those above are just problems I'm somewhat familiar with.