FW: Unit 4: cumulative exam


Hi all,


Someone mentioned on Twitter that the final exam for prospective developers isn’t public when I clearly said the public can try it, and for that, I sincerely apologize. Below is a oc0py of the cumulative developer exam sent to people who took a year-long course on NVDA internals and development.




From: joseph.lee22590@... <joseph.lee22590@...>
Sent: Sunday, June 17, 2018 11:07 PM
To: 'devlearning@nvda.groups.io' <devlearning@nvda.groups.io>
Subject: Unit 4: cumulative exam


Hi all,


A few notes for unit 4 people:


  • This exam is a cumulative exam in that concepts and skills from units 1 through 4 will be tested.
  • This exam could serve as a prototype for a possible developer certification.
  • To simulate certain programming (and other) environments, one question will have a time limit, hence I asked you all to have a stopwatch handy.
  • Unit 0 people are welcome to answer one or two questions (or take the whole thing), as this exam will count as an extra credit for unit 0 quiz. However, the exam requires rigor and critical thinking skills.
  • People outside of this group are more than welcome to take this exam, although only responses from members here will be scored.
  • Only the complete exam (all questions answered) will be eligible for scoring (exception is unit 0 people who are answering one or two questions for extra credit).
  • The exam format is way different than NVDA Expert exam (for those who had a chance to take it).


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 no later than June 22, 2018 at 5 PM pacific (8 PM Eastern, 00:00 UTC on the 23rd). Your answers will be reviewed by at least two outside developers (in case of question 4 extra credit, your evaluators will be those reviewing your pull request). Extra credit opportunities have their own deadlines.


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?



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
  • 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 45 minutes 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” 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
  • NVDA object
  • Event
  • Input and output
  • Object hierarchy
  • Review cursor
  • Object properties
  • One accessibility API (choose from MSAA, UIA, or Java Access Bridge)
  • Overlay classes
  • GUI subsystem
  • User configuration
  • Add-ons


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).


This extra credit opportunity ends on June 30, 2018 at 5 PM Pacific (8 PM Eastern, 00:00 UTC on July 1st).



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.


I will announce this on users list also. A the end of the exam, I will ask NVDA users group members to provide feedback.



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 master or next 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, five points): offer constructive comment on a GitHub issue.


Question 10 (extra credit, 10 points, highly encouraged): please provide feedback about this course (strengths, weaknesses, teaching style, what worked, what didn’t work, what can be improved, etc.).


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.