Re: Request for comments: an outline of a complete course on NVDA internals and code contributions
This sounds like an excellent idea. If it ever comes into being, I would be more than interested in taking it.
Since I started working with general-purpose programming I began to see that programming was more about the problem-solving than the coding.
I learned so-called “programming” fifteen years ago, which I now realise was only scripting. In my experience, in scripting, you have a strict API to work with, so the problem solving comes more in debugging. Hence, I think, the reason I grasped JAWS scripting in a month, and was writing my own scripts in around three months.
In programming, you need to work out what dependencies to use in order to accomplish a certain task or create a certain product. The only coding you really do is to improve on that dependency, chain it into a meaningful item, and then maintain it, which of course includes bug tracking, working out how you want your release cycles to work, working with version control in order to branch out your code in case you need to fix bugs, work on new features, experiment with new ideas etc, all at the same time without one compromising the other...Since I started looking into all this and realised just how little I knew, almost makes me feel sick.
While I have written a couple of basic NVDA addons, I’m still not overly satisfied with how they function (one available addon definitely has a bug that I’m unsure how to fix, one has problems reported by some users that others including myself don’t have, and some barely work at all hence me not releasing them). Also, coming from a more scripting background, general purpose programming feels, at least to me, like the difference between learning to jump and learning to fly, or stepping up from preschool to university, with very few, if any, resources to bridge that gap.
While I have read several Python tutorials, I still feel like my Python knowledge is very limited. Reading a document can leave gaping holes at the best of times. A small thing can distract you and you can read over a line, knowing you’ve read it but not taking it in. Add the concept of reading it in audio and that becomes even more of an issue. Add in synthetic voices and you’re simply asking for trouble. I have always learned much better with somebody teaching and guiding me through the process – that way I can ask the question right there and then: “What did you mean by ...”
I learned this the other day while writing some of my own articles on various things – make it too short, you don’t fill all the gaps. Make it too long, there’s too much room for distraction meaning you have several square miles of solid golden floor but with areas of useless forgery where you have either made your own theories or don’t know anything at all and wouldn’t know where to start looking because you’ve read the tutorial and didn’t think you saw it there, blah blah.
Also like you said. There’s more than just Python programming. I couldn’t help but be slightly put off, when I first read that you need a Python background to work with NVDA, but then when you look deeper into it you not only need Python knowledge, but Git, automated building environments (Scons, Make, doc generators, and somehow I think that’s also where Appveyor fits in as well) etc. It even looks like some of NVDA is written in C++, a language in which I am even more hazy.
Let’s not forget that it also doesn’t help an out-and-out Windows user such as myself with no Unix experience whatsoever seems to find nothing but Unix resources when it comes to programming. Because let’s face it, Microsoft does seem to be the oddball when it comes with unix systems. Nearly every other system has some form of Unix, whether it be part of the Linux brand, or even the proprietary MacOS.
So yes. The upshot of my long rambling rant of an email. I definitely, definitely think a course would benefit many.
From: Joseph Lee
Sent: Sunday, August 20, 2017 12:44 AM
Subject: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions
Those of you on the users list may have heard about a subgroup over there that aims to teach people how to contribute code to NVDA. After going over some membership intros and looking at skill sets represented, I came up with a rough outline or a six to twelve month course on NVDA code contributions and internals. Obviously most of the course content will require working knowledge of Python, but for those who lack this, I’ve included a one unit outline on Python.
Unit 0: Review of Python
Skills test and preview 0: come up with solutions to two other problems via Python, write a design for an add-on, or write about how a student would solve an NVDA issue on GitHub.
Unit 1: Basics and the big picture
Skills test and preview 1: explain in your own words how you would teach your friend to download NVDA source code.
Unit 2: NVDA at a glance
Skills test and preview 2: in your own words, describe ui.message function.
Unit 3: feature and command internals 1
Skills test and preview 3: in your own words, describe either one property of a navigator object or how a first letter navigation command works in browse mode.
Unit 4: Feature and command internals 2
Skills test and preview 4: in your own words, define what a speech synthesizer driver is.
Unit 5: Code contributions
Skills test and preview 5: write a solution for a minor issue on GitHub or a small add-on that uses any concept from previous units.
Unit 6: Beyond code contributions
Unit 7 (advanced): thinking outside of NVDA
Final skills test:
I expect the minimum time to complete this course would be six months (excluding Python intros and advanced topics), with most people taking up to a year to master the concepts above and become comfortable while providing basic code contributions. The Python version to be employed will be a mixture of 2.7 and 3.6.
Comments are appreciated.