This minHour teaches you how to begin developing and maintaining free, open source software in a programming community. While people who do this are sometimes referred to as "software hackers", the position itself is more oriented toward creating and tweaking software than breaking into it. If you're interested in becoming the kind of hacker who looks for and exploits vulnerabilities in software or operating systems, please see our article on becoming a hacker instead.
Understand what software development requires.
Being a software hacker means that you’ll spend a large amount of your time building, tweaking, and updating free software to satisfy users and keep your software relevant. To this end, you’ll need to meet the following criteria:
- Have a decent grasp on both a system language (e.g., C++) and a programming language (e.g., Python)
- Know which platform(s) you want to program for (e.g., Windows, Android, etc.)
- Be willing to spend a large amount of time learning about your selected languages, platforms, and software genre
Know that anyone can become a free software hacker.
Contrary to popular belief, having an exceptional understanding of mathematics, previous coding knowledge, and/or a college degree in computer science (or similar) aren’t necessary for you to learn how to become a free software hacker.
- As long as you’re legitimately interested in learning how to develop software and you’re willing to accept criticism where appropriate, there’s no reason to think that you can’t successfully become a software hacker.
Figure out your end goal.
Software development can be used for anything from a simple side hobby to a full-time career; knowing what you want to accomplish before you set out to learn a programming language or select a platform will help keep you focused down the road.
- While not strictly necessary, a degree in computer science or software development will help expedite your employment if a career in software development is your end goal.
- If your goal is simply to create an app or a program which helps users accomplish a previously difficult or impossible task, make sure that the software in question isn’t already being developed.
Determine a platform on which you want to work.
Each main platform—Windows, macOS, iOS, Android, and Linux—has its own community, preferred programming languages, and individual needs. Knowing which platform to which your software will apply before you dive into software development is crucial.
- It’s best to work on the same platform for which you’re developing. For example, if you’re developing an Android app, using a Unix-based system such as a Mac or a Linux computer is better than using Windows.
- Linux is a commonly used (and free) solution for many software developers.
Select a coding language.
There are two types of coding languages; you’ll need to learn at least one of each before jumping into developing, though you’ll ultimately need to know several languages:
- System languages — A computer language used to interface with the system directly. Common examples include C, C++, and Java.
- Programming languages — A language used to design your software’s interface (e.g., what users will look at) as well as its function. Common examples include Python, Ruby, and Perl.
Get comfortable with the command line.
Every computer has a command line application (e.g., Command Prompt for Windows, Terminal for Mac and Linux, etc.). You can use the command line to communicate with the computer itself, allowing you to issue detailed commands as necessary.
- While you won’t perform the bulk of your software development from the command line itself, you’ll need to use the command line to run certain programs or integrate software commands with your computer.
Download and use Notepad++
Notepad++ is an invaluable programming resource as it both makes coding easy to keep track of by implementing visual aids and serves as an educational tool.
- While you’ll ultimately use different command line-based text editors and programs to write a large amount of your code, Notepad++ is a phenomenal (and free) learning tool when you’re first starting out.
Install a development environment.
Your selected programming languages and platforms most likely have development software which allows you to save and test your projects from your computer; such software is called a “development environment”. If possible, find and install a development environment for your selected language before you begin learning to program.
- If you’re developing an Android app, for example, you’d download and install the Android Studio development kit.
- Java users will often use a development environment such as Eclipse.
Start learning how to program
Once you know which language you want to use, it’s time to start learning how to use it. There are numerous online tutorials—both free and paid—in which you can partake, and most libraries will carry programming language-specific books (e.g., C++ for Dummies) which will allow you to pursue an entire language free of charge.
- Free programming resources are abundant online, so use these to your advantage before signing up for a paid class or bootcamp.
Find a community that operates in your preferred category.
Open source projects such as those found on SourceForge or GitHub often have avid followers; if you can find a project which uses the same programming language and/or has a similar goal to your own project, you can join the community in order to add suggestions and observe the development process.
- Like any skill, being involved in the creation process (even if you’re just an observer) is the best way to gain practical experience.
Interact with the community.
You can do anything from posting in the community’s forums to starting your own open source project, but the main goal is to run your ideas and obstacles by the community and listen to their feedback.
- If you do start your own open source project, be prepared to compromise with the community in terms of the project’s direction.
Look for open-source projects to contribute to.
As is often the case with software development, your main idea or pet project may already be underway by a community with far more experience than you have. If so, consider asking to join the project. This will both further your understanding of how software projects work and help you bring your project to life, albeit in a group setting.
- Open source projects may not be your end goal, but they serve as a great way to see multiple different perspectives come together to form a user-oriented product.
Accept public critiques of your work.
As you progress with your software development and submit your work, you’ll be subject to critiques. Listening to community feedback will help structure your future development, but it will also teach you valuable shortcuts and methods for approaching similar problems for subsequent projects.
- Not all feedback will be constructive. If you do receive rude or unwarranted feedback, remember to be polite if you choose to respond.
Participate in software development challenges, programs, or competitions.
You’ll often find challenges, bootcamps, lectures, classes, and outright competitions in your community’s forums, in places such as Craigslist, and on campuses. Signing up for any such event or camp will give you some guided experience while placing you in an environment with like-minded peers.
- One option is Google’s Summer of Code program, which helps students become familiar with open source projects and community coding.
Continue to develop your skills.
Software development is a field that will only continue to grow as technology evolves, so make sure that you’re constantly learning about new projects, languages, operating systems, and any other relevant information in your preferred area.
- Much of a free software hacker’s success is dependent on curiosity. As long as you keep asking questions and looking for answers, your time with software development will be productive and long-lived.
- Starting out by learning C (or C++) and Python will place you in relatively good standing, though Java is a popular starting point as well.
- Ultimately, you’ll end up learning several computer languages during your time as a free software hacker.
- Computer programming may seem intimidating, but it’s simply speaking to the computer in a language which the computer understands.
- Avoid asking any question related to fundamentals of programming or programming tools in an open source program’s discussion page. A free software programmer’s time is valuable. Instead, discuss the basics of programming in communities for amateur or new programmers.
- Sitting at a computer for more than a few hours at a time can have lasting effects on your overall health. Remember to get up and stretch, look away from the screen, and move around at least once every couple of hours.
- Be patient. Like learning any skill, becoming a free software hacker will take time and determination.
- It’s inadvisable to attempt to revive an abandoned project which has already lost its previous team.