A few weeks ago on a subgroup of NVDA users list, I announced the availability of an exam that tests people’s readiness to become beginning NVDA developer. A few days after that, I announced that this exam will be made available to the public, and here it is. I recommend test driving this exam (answering all questions) and let me know if you have feedback on this.
A prototype certification exam for beginning NVDA developer:
Instructions: the questions below will let you meet different facets of NVDA development (both add-ons and Core, although emphasis will be on Core for now). For those seeking to move onto NVDA development should answer ALL questions. Total points will be 100, with passing score being 70 or higher. There will be up to 10 extra credit points, and they will count when calculating scores (if you choose to do them). Answers should be submitted to me Joseph Lee (me) via email no later than July 31, 2018 at 5 PM pacific (8 PM Eastern, 00:00 UTC on August 1st). For some questions, have the NVDA source code in front of you.
Additionally, for questions 3 and 4, you can select one of them to be a time-limited question where you have an hour to answer it (be sure to have a stopwatch handy). The timer should begin the moment specified by the question(s). In the answer sheet (email reply), you need to provide how long it took you to answer this question, and without that, five points will be deducted from your score.
A special note for folks who took the NVDA Development course: you don't have to take the exam again, and you'll notice slight increase in difficulty with this version.
Question 1: a new user of NVDA wants to know the answer to the following questions (write your answer in complete sentences, and answer it as though you’re talking to this user, not me; points: 20, five points per question):
* How does a screen reader work?
* Can you tell me how I can move to a control that can’t be navigated with a keyboard?
* If I press NVDA+Tab, what information will I hear?
* If I found an issue with NVDA, where do I go to report them and what info should I include?
* Extra credit (five points): I want to use my favorite settings before I log onto my computer. How can I do that?
Question 2: pick four commands from the following list. For each command, give its command, a short description, and a trace of how the command works. Then if you want, explain in your own words how the command really works. Write it as though you’re producing a video tutorial for power users who wants to know more about how a command works (points: 20, five points per command):
* Read title
* Read focused object
* Read current navigator object
* Move to the next object
* Move to the previous object
* Move navigator object to focus
* Move system focus to the navigator object
* Read foreground window
* Developer info for the navigator object
* Move mouse to current navigator object
* Move between table cells
* Save and revert to saved configuration
* Current app module
* Navigator object location
* Opening NVDA settings panels (any panel will do)
* Review cursor (any cursor command will do)
If you choose to answer settings panel or review cursor commands, choose only one command, as they are a collection of commands. If your answer consists entirely of four commands from one or both of these, you’ll get zero points.
The next two questions are “time limited” questions and you need to mark one of them as such. For example, you can mark question 3 as “time limited”, which means question 4 will not be subject to time limits. Once chosen, you’ll have one hour to answer the marked question. The purpose of this exercise is to simulate time limited research (question 3) or programming lab (question 4). If you are adventurous about providing code-based solutions, choose question 4 as time limited question. If you feel writing or research is your strong point, choose question 3 as time limited question. After answering the time limited question, be sure to record how long it took you.
Question 3: These days, one of the biggest things software development firms (and projects) look for is ability to research things and communicate with others. To get you to experience this, choose two terms from the list below and write an “internals” (explanatory) paragraph (or two) as though you’re giving a talk at a developers’ conference. Your answer must contain definitions, explanations (in your own words), use cases, examples, and a place in NVDA where it is used. Extra points will be given for one or more of the following additions: actual NVDA code that demonstrates the concept, a reference or two outside of NVDA, and an offer of code or concept redesign to make it useful in the future, or a flaw with current implementations (overall points: 20, ten per item).
If you chose to mark this question as “time limited”, you can just write definitions, use cases, explanations, examples, and if time permits, actual NVDA code examples; no need to include references, design flaws and such, but you’re more than welcome to do so within the time limit (hence extra points). Your time begins once you choose the two items you’d like to write about.
* NVDA’s overall architecture
* History of NVDA development and the community
* NVDA object
* Input and output
* Object hierarchy
* Review cursor
* Object properties
* Text infos
* Browse mode internals
* One accessibility API (choose from MSAA, UIA, or Java Access Bridge)
* Overlay classes
* GUI subsystem
* User configuration
* NVDA release process
Scoring for each term:
* Three points: gave definitions.
* Five points: definitions and explanation in your own words.
* Seven points: definition, explanation, use cases and examples.
* Ten points: definitions, your explanation, use cases, examples, NVDA code example or two.
Question 4: when it comes to screen reader development, theory isn’t enough; now it is time to showcase your programming skills, and to do that, choose an NVDA issue on GitHub that you think you can program a solution (quickly if you mark this as “time limited”). Be sure to provide a link to the issue, your rationale for choosing it, a short description, and a basic solution design and code. Extra points if you can demonstrate that your code actually achieves something, complete with tests (points: 25).
If you mark this question as “time limited”, then you DO NEED to have at least a basic solution design and code ready within the time limit. If you chose question 3 as “time limited”, then a solution design will be acceptable; time begins the moment you choose an issue, SO CHOOSE IT WISELY!
* Five points: identified an issue you wish to work on, complete with links.
* Ten points: identified and described the issue in your own words.
* Fifteen points: identified, described, and wrote a solution design in your own words.
* Twenty points: identified, described, designed, and programmed a solution in your own words (and your own code).
* Twenty-five points: identified, described, designed, programmed, and tested your solution.
Extra credit (eligible if you did ALL of the parts above, including coding and testing):
* Three points: your solution was posted as a pull request.
* Five points: your pull request was reviewed by at least one reviewer, including NV Access people and noted third-party contributors (including I).
Question 5: being a developer means more than programming a solution. Users matter, and you need to always remember that you are users also. To help you understand this, I’d like to ask you to serve as a resident tech support engineers for users for the next few days: subscribe to the NVDA users list and answer questions on at least three topics until the end of the exam period. Be sure to provide helpful answers when asked, and show respect to users (points: 15, five per topic).
* Zero points: disrespectful answers, or answers that showed no effort from your part to understand users.
* Two points: beginning steps, such as phrasing issues in your own words.
* Three points: showing efforts at trying to reproduce the issue, or if not reproducible, telling users (with respect) that it cannot be done.
* Five points: professional answers regardless of if the solution was found.
The following questions are all extra credit and won’t count toward your final score. As they are community activities, your participation is highly encouraged.
Question 6 (extra credit, five points): review at least one NVDA add-on marked for review (for details, see NVDA Add-ons mailing list archive).
Question 7 (extra credit, five points): test-drive NVDA alpha or beta snapshots throughout the exam period and report bugs if any. Extra points if you can offer solutions.
Question 8 (extra credit, five points): find a developer outside of NVDA community that you think can contribute to NVDA in the long run.
Question 9 (extra credit, ten points): offer constructive comments on at least two GitHub issues. An extra five points for reviewing a pull request.
As noted above, anyone who gets a 70 or higher will be recognized as beginning NVDA developer.
P.S. You may have noticed that programming didn’t take the center stage at this exam. The reason: coding alone won’t define you and your talent as a developer. Through this exam I want you all to experience what it is like to be an actual screen reader developer: introducing new users to NVDA, coming up with helpful overviews and tutorials, networking with others and showcasing the project, proposing and programming needed solutions under possible constraints, and providing ongoing technical support for a product.
Good luck with the exam.