At each Open Source Comes to Campus event, participants ask unique, thought-provoking questions. We decided to write down these questions and answer them more fully on our blog. If you have any additional suggestions or advice, please add them in the comments!
These questions are from our Wellesley College event. This post was co-written with Asheesh Laroia, with contributions by Paul Tagliamonte.
What is an integrated development environment, and why would you use it, and which one do you use?
An integrated development environment (IDE) is a program on your computer that does a lot of tasks which help you program. Typically it has an editor for writing text, a way to publish your changes through version control, and a way to run your program, which might include the ability to run your program through a compiler. IDEs might also provide syntax highlighting and auto-formatting, making it easier to read your code, and quick links to documentation. They might provide debugging tools like the ability to step through your code line by line and check the state of your variables and objects at any given time.
Whether you want to use an IDE depends on what features you find useful, and which you find cumbersome. Many programmers, as they become more familiar with the command line and with the various tools out there, find they prefer “just using a terminal and an editor”. For example, it can be easier to use Emacs or Nano to very quickly open, edit and close a file, whereas in an IDE one must typically create a “project” first. If they want to use a feature of an IDE, they can usually find some other way to get it. For instance, pdb is a tool for Python programmers which lets them step through their program line by line the way an IDE might. But a beginning programmer who’s not as comfortable juggling multiple tools might find it helpful to have them all bundled into one convenient package.
The type of project you’re working on will also influence whether you want to use an IDE. The Eclipse IDE is popular with Java and Android developers in large part because Java is a very verbose language. IDEs help programmers keep track of their work, and features like auto-complete can be a big time saver. On the other hand, if you’re doing web development, you might not need an IDE as browsers like Chrome and plug-ins like Firebug for Firefox provide a lot of development tools.
There are no obvious answers here. In the end, you’ll just have to see what tools are right for you and the project you’re working on.
How do you make time to contribute to open source when you’re a busy student?
By simply using open source programs, you are uniquely positioned to help other users. Don’t forget that helping people use the software is a substantial contribution to the community! By becoming an expert in whichever programs you use, you will also gain the knowledge to help convert bugs filed by others into actionable reports for the main developers. And once you reach that point, you might find it easier to just fix the issue!
That said, it can be daunting to add another activity to schedules already stuffed full of classes, paid work, and student life. One way to approach open source is to see it not as an alternative to doing schoolwork but as part of your education. For computer science majors, open source projects are a great way to practice the concepts you’re being taught in class. In the others sciences, learning how to use and contribute to open source tools such as R or Octave (or ImageJ or PsychoPy or JMARS) can help you excel when doing laboratory work – and looks great on your cv. Even in the arts and humanities, learning about open source tools such as Processing can help you succeed.
For students who work while they’re at school, open source projects can be potential employers. You can apply for Google Summer of Code or the GNOME Outreach Program and do a paid internship at an open source project. Individual companies working with open source may hire students that show enough interest and ability. You can even employ yourself using open source – for instance, doing freelance work making websites and apps using open source tools like WordPress and Drupal.
You can make open source a part of your social life as well. Make or join a Students For Free Culture chapter on your campus or invite friends over for a ‘bug-fixing party’. We promise you’ll be super popular. 🙂
Finally, remember that your contributions to open source can be as big or as small as you want them to be. If you only have time to spend a few hours a month writing documentation or fixing small bugs in a project, that’s great – the skills you’re learning and connections you’re making will serve you well if you ever decide to get more involved.
What open source music projects are out there?
Looking on Wikipedia finds a list of apps and categories of apps. Another great source of news about free software projects is freecode.com, where you can search for the keyword “music”. A great way to find open source projects that are actively-maintained is to search the list of Google Summer of Code mentoring organizations.
Often, the best way to find out which software project to contribute to is to find a program that you enjoy using. There is no substitute for running a program and using it for a while.
Here are a few particularly exciting programs that are worth mentioning:
There are a few programs for editing music scores. TuxGuitar is a guitar tabulature editor, and it runs on Windows, Mac OS, and Linux. There is a call by a new community to test the latest code in svn and report back about its quality. Another, more full-featured project is MuseScore. Their community is very active, and they’re participating in Google Summer of Code.
For rendering music scores, LilyPond is a well-known tool based on LaTeX.
There are many music-playing programs, from Miro to Banshee to Rhythmbox to Amarok, just to name a few. If you run Ubuntu, you can find more in your “Software center”. Worth special mention are Zeya, which runs in the web browser, and Tomahawk, a very active project oriented around letting you listen to music from a variety of sources.
You might be interested in specialized tools within the field of music, such as Echoprint for music identification, or Audiveris, for turning scanned printed music into digital files, or Audacity, for simple editing of sound files. Ardour is one of a few advanced open source audio mixing tools.
If you’re interested in live audio programming, there’s a great library named Overtone. Overtone uses the SuperCollider engine, another open source audio project, written in its own language. A more recent project, Sebastian is similar to Overtone and implemented in Python.
The best way to search the space of the hundreds, or thousands, of open source projects in music is to find people using them and see what they say. Two great ways to do that include finding music communities and asking what tools they use, and reaching out to Reddit and posting in the open source sub-reddit to see what people recommend. You can also follow open source music blogs, watch videos on the topic, or check out cool groups like the Princeton Laptop Orchestra and see what tools they’re building and using.
What is the difference between source downloads for developers and downloads for users? What’s a stable release?
Open source projects often release the program in a few different ways. Typically, if you are trying to contribute, you will want the latest source code cloned or “checked out” from the project’s version control system. If you are just trying to use the program, you typically want a user-oriented download.
May programs’ source code can’t be executed directly on a computer — they must be “compiled,” which turns it from human-readable text into machine-executable binary. The most common languages where this is true are Java, C, and C++. Therefore, the most useful download for a person who wants to run a project like OpenOffice, which is mostly written in C++, would be a compiled version specific to their operating system (for example, a Windows-specific build). By contrast, if you want to contribute to the program, you should act similarly to how the main developer acts — that is, by using a version control system on the editable program text, the source code.
Another important concept is the stable release. During development people make contributions that break the program, conflict with other changes, or are simply unfinished. At any given point the most recent version might be completely unusable. So maintainers periodically work towards releases (noun), which are tested to make sure they’re usable. If they are, maintainers release (verb) it.
So if you’re a user, you’ll want the stable release most appropriate to your operating system and computer. If you want to contribute, you’ll want the latest, non-compiled version.
Why are CS programs so theoretical? Do they really help with practical programming work?
CS stands for computer science, which is an academic discipline about computation, data structures, algorithms, and many other mathematical concepts. It also covers how the computer works at a low level, typically by teaching computer architecture.
By contrast, being a professional programmer mostly involves writing code that connects other, existing pieces of code. It can seem like pure computer science would never come into the picture.
Most crucially, a CS program provides you homework assignments through which to gain experience programming and problem-solving tools that turn the infeasible into the feasible, as two examples show:
When asked why your program is slow, you will be able to use theoretical tools like “big-O” notation and engineering tools like memory locality to comprehend why one program can run faster than another, even when doing the same task.
When writing multiplayer game software, you might apply what you learned in an Internet Protocols class to understand why different players missed messages from each other.
CS concepts are very useful, but it is also true that you can write a great deal of software without knowing pure computer science. It is fair to say that the more general knowledge you have about computation, the wider variety of programs you can build.
Most professionals who have computer science degrees start their careers as “software engineers,” and the field of software engineering has tools and practices that enable people to build on top of other programs, or to share their code in a way that helps others to understand and review it. Those applied tools, like creating stable APIs or using version control, are in heavy use within open source development.
Are all open source projects welcoming to newcomers? How can you tell when the communities around a project are filled with jerks?
Not all open source projects are welcoming to newcomers. Not all open source projects need to be. Some projects benefit from keeping their communities small and experienced. And some maintainers simply don’t have the energy or the inclination to mentor new people.
There’s nothing wrong with that, but it’s a shame when newcomers try to get involved with a project that isn’t interested in involving them. It’s a frustrating experience for everyone, and unnecessary when there are plenty of people who’d be excited to work with them.
So how can you find a good project for you, a newcomer, to contribute to? Here are some good signs to look for:
A large, active community is more likely to have members who can take the time to mentor. It also means that contributions will be acted on more quickly.
Good documentation and demos mean that developers have thought about how to introduce people to their project.
- Some projects have Codes of Conduct/Diversity Statements, which demonstrate that the community is trying to be a safe and welcoming space.
- Projects that are part of Google Summer of Code or the GNOME Outreach Program have made a commitment to being good environments for newcomers.
At OpenHatch, we try to identify projects that are especially good for newcomers. We’re also developing a list of OpenHatch-affiliated projects that are working with us to make contributing to their projects as easy as possible. (If you’d like to be on that list, let us know!) Feel free to contact us and ask us for recommendations or if a particular project is known to be good for newcomers.
Of course, there’s a difference between not having the time and energy to help newcomers, and being actively mean or even abusive. If you experience the latter and our comfortable telling us about it, we’ll do our best to support you. OpenHatch people are always willing to provide advice on projects to join, either to help you find a great experience or to make the most of a bad experience. Find us on on IRC (#openhatch on irc.freenode.net) or ask firstname.lastname@example.org. You can also join groups such as Systers or the Empowermentors Collective, which may help you navigate the free software community.