I looked at the LW code again, because in the meanwhile I had some very short experience with Python. Now some parts of the code make more sense than before. But still:
The code uses so many different technologies, that making all of them run is already a full-time job. The overhead for an individual volunteer working in their free time is insane. And contributing code that you are not able to run on your own machine is, uhm, unlikely to result in a correctly working code. -- Luckily, some people are already working on this issue by building a virtual machine that has everything installed, so that everyone else can simply download the VM and start coding.
Adding a new feature often requires you to get familiar with all layers of the code. (How the URLs are mapped to function calls; how the parameters are passed, how the page is rendered, how the data are stored in the database and how they should be manipulated.) Each of these layers uses some specific solutions with many sparsely documented details, so you more or less have to find an existing functionality that seems similar to what you want, and then track step-by-step how exactly it works. Even there it is easy to get stuck. I spent a few hours this weekend just finding the most simple existing functionality (shortly: setting an integer value for a user, and storing this value in the database), and trying to connect all its pieces together; some connections are still missing (for example, I already found a controller for the functionality, and the HTML template, but I have no idea how the program knows that this controller is connected to this template; searching the name of the template in the source code gives no results, so there probably is some code that says something like “take the name of the controller, remove the Controller suffix, convert to lowercase, etc.” but good luck finding it).
I mean, the code is not completely bad. It’s probably better than most projects. But there are many frustrating things, for example functions that receive five or seven arguments, the names of the arguments are 1-3 characters long, and most of those arguments are just passed to other functions, which pass them to other functions… I have only an approximate idea of what those arguments mean, and the documentation says nothing about it. (Such code would definitely not pass code review at my current job.) And it doesn’t help that many of these functions are not called directly from other functions (so that I could backtrack where the value came from), but instead there is some dispatching system, for example in some configuration file you write “controller = promoted, action = listing”, and then when you access the given URL, a method “PromotedController.GET_listing” is called (but you have to do a separate investigation to find out where do some of the method’s arguments actually come from). Essentially, if you are able to contribute a new feature to the LW code, Reddit should be happy to hire you, because you will save them money they would have to spend on your training otherwise.
Anyway, as soon as someone gets the virtual machine running, the mere mortals like me at least get a hope of providing a useful contribution.
For a more constructive approach, there is a lot of low-hanging fruit, and one can make a very useful contribution simply by writing comments to the existing code, and renaming variables; i.e. by making obvious the things every contributor would otherwise have to discover independently.
I looked at the LW code again, because in the meanwhile I had some very short experience with Python. Now some parts of the code make more sense than before. But still:
The code uses so many different technologies, that making all of them run is already a full-time job. The overhead for an individual volunteer working in their free time is insane. And contributing code that you are not able to run on your own machine is, uhm, unlikely to result in a correctly working code. -- Luckily, some people are already working on this issue by building a virtual machine that has everything installed, so that everyone else can simply download the VM and start coding.
Adding a new feature often requires you to get familiar with all layers of the code. (How the URLs are mapped to function calls; how the parameters are passed, how the page is rendered, how the data are stored in the database and how they should be manipulated.) Each of these layers uses some specific solutions with many sparsely documented details, so you more or less have to find an existing functionality that seems similar to what you want, and then track step-by-step how exactly it works. Even there it is easy to get stuck. I spent a few hours this weekend just finding the most simple existing functionality (shortly: setting an integer value for a user, and storing this value in the database), and trying to connect all its pieces together; some connections are still missing (for example, I already found a controller for the functionality, and the HTML template, but I have no idea how the program knows that this controller is connected to this template; searching the name of the template in the source code gives no results, so there probably is some code that says something like “take the name of the controller, remove the Controller suffix, convert to lowercase, etc.” but good luck finding it).
I mean, the code is not completely bad. It’s probably better than most projects. But there are many frustrating things, for example functions that receive five or seven arguments, the names of the arguments are 1-3 characters long, and most of those arguments are just passed to other functions, which pass them to other functions… I have only an approximate idea of what those arguments mean, and the documentation says nothing about it. (Such code would definitely not pass code review at my current job.) And it doesn’t help that many of these functions are not called directly from other functions (so that I could backtrack where the value came from), but instead there is some dispatching system, for example in some configuration file you write “controller = promoted, action = listing”, and then when you access the given URL, a method “PromotedController.GET_listing” is called (but you have to do a separate investigation to find out where do some of the method’s arguments actually come from). Essentially, if you are able to contribute a new feature to the LW code, Reddit should be happy to hire you, because you will save them money they would have to spend on your training otherwise.
Anyway, as soon as someone gets the virtual machine running, the mere mortals like me at least get a hope of providing a useful contribution.
For a more constructive approach, there is a lot of low-hanging fruit, and one can make a very useful contribution simply by writing comments to the existing code, and renaming variables; i.e. by making obvious the things every contributor would otherwise have to discover independently.