Depends what you mean by “novice”.
If you’re novice at programming, I would suggest starting with Python, write a few simple scripts to get comfortable, then go and dig into a project. The Ubuntu MATE repository has plenty of simple applets written in Python. The best approach I’ve found is to scratch your own itch: find a project that has bugs that you can reproduce, or a feature that you really want added to it. Don’t be afraid to break code, you can always undo/revert it.
When it comes to contributing, here’s how I usually do it:
- Go to the repository (e.g. https://github.com/mate-desktop/caja)
- Fork the repo (click on the Fork icon on the top right corner)
- Clone your fork of the repo locally (
git clone [email protected]:vkareh/caja.git)
- Once inside the folder, create a new branch (
git checkout -b fix-foo-bar-bug)
- Code, test, etc (
./autogen.sh && make - often there’s build documentation in the README file)
- Commit and push your changes (
git commit -am "This fixes foo bar" then
- Back on github, create a pull request (there will be a button allowing you to do this automatically right after you push)
Now someone else, often the project maintainer, will take a look at your code, test it out, and make recommendations. You go back and forth this way a few times until everyone is happy and then they’ll merge it into the codebase. Sometimes it’ll get rejected - that’s fine and a normal part of the process, maybe try a different approach at coding or work on a different feature/bug.
For the coding/building part, every project is slightly different, but generally speaking you can do this:
- go into the project directory and run the configuration command:
./autogen.sh - this configures all the build files for your system. It also tells you if there’s any missing dependencies needed for this program. Once this succeeds, then
- Run the build command:
make - this actually compiles the program and create an executable, then you can run it.
- Run the program. This varies by project. Sometimes you’ll need to install the program to be able to run it (
sudo make install). This is usually ok for small scripts and applets, but it can mess up your system if it’s a core component. Sometimes you’ll find the executable directly inside the project directory. Look for a file that wasn’t there, usually named after the project, that is marked as executable (running
git status -uall will give you a list of files that were added during the compile phase). Try running it directly from the terminal and see what happens!
Hopefully this helps to steer you in the right direction. Feel free to reach out to with more specific questions, or if there’s a specific project/feature/bug that you’d like to address I can help you get set up. Sometimes it seems daunting, but after you get set up with a project, you’ll start finding it easier and easier to go deeper in the complexity scale