Computer Science major falls in love with open source
Open source love at first commit
The power to learn, the freedom to change, and the push for innovation. What is there not to love about open source software? The world of open source consists of a passionate community of individuals hacking away in their dens, all with the same vision for the future of programming: openness and collaboration.
Once you begin to get involved in open source software, you will never want to stop. The people you will meet, the skills you will learn, the amazing products you will develop—together all contribute to a great feeling of accomplishment. With the power of open collaboration, anything is possible.
How I got started in the open source world
A few years ago, after I took my very first programming course in college, where I was introduced to programming in the Ada programming language on Ubuntu using Vim as my text editor, I was introduced to a whole new world I had never seen before. I had previously heard of Linux before, but my mental image of the operating system was like many others, that of the scary command-line.
This intro class was very eye-opening in many ways as I was not only learning how to program for the first time, but also how to use Linux, Vim, and GNU Make. After staying up very late at night a few times a week finishing programming assignments for class, I felt it was a good idea to get myself more comfortable with my programming environment so I could concentrate more on what a struct was instead of how to move a file into a new directory in bash.
I begin to read small articles online to grab bits of information wherever I could to get me started. I would search "why use linux instead of windows," "what is ubuntu," "what is vim," and a few others where I was given in return forums, Wikipedia articles, and ISO image downloads. One site I found was, Why Linux is better, where I was instantly drawn in. I have always had quite a few annoyances with Windows for years, and this one website demonstrated to me that all of these annoyances would be resolved by just simply installing the Linux operating system on my machine. No more defragging, no more reformatting/reinstalling every few months, no more expensive slow bloated software, no more virus software memberships, no more wasted computers being thrown into landfills that are too slow for the most modern OS version. This was all music to my ears... then I found out it's free, it's secure, and it's fast. It's open source!
"I want to be an open source developer when I grow up."
Open source? What is this open source? After more searching, I soon found out that Linux is developed and maintained not from a corporation building a platform for profit, but from the collaboration of individuals all over the world who believe in Linux, believe in the idea of affordable computing, believe in an open world where all code is publicly available for others to review, learn from, secure, and evolve into something better then the original.
Open source software allows the future of computing to lay in the hands of the people, not a marketing strategy. Open source software encourages innovation to create products that are always better then the previous version. Open source software allows the young student living in poverty to be influenced by their creativity instead of the price he/she must pay in order to buy a computer with a text processor to write the next great novel. Open source software is an idea that brings passionate people together to come up with tomorrow's next great idea.
You can see why I instantly fell in love with the open source world and wanted nothing more but become active in the community.
Hooked with my first pull request
My first step into becoming active with open source software was when I created my GitHub account. I explored the trending list on GitHub (as I still do) for many months, starring projects that I would hope to one day contribute to. I would always look forward to the day when I felt I had enough knowledge and skill to write code for these projects. I was disappointed that I could not jump in and begin. I was scared that maintainers would rip my code apart and say my novice skills were not needed in their project or that the project was too complex in the first place for me to comprehend in order to add a feature to. Because of these fears, I continued to wait until I gained more experience.
I read stories online about the powers of open source software and the community the drives it. I found out about programming conferences, like LinuxCon, RacketCon, Strange Loop, and AnDevCon—just to name a few—as well as Linux User Groups (aka LUGs) where you can meet, in person, inspiring people who are contributing to open source projects. I began attending meetings at my local Linux User Group, and I eventually became part of the exec team. But I was still in the background of all the action. I wanted to be part of the action, so I decided in order to start writing open source software, I must write open source software.
I never realized it is truly that simple until the moment when I decided to tough it out and actually begin writing code. At the time I was reading, The C Programming Language by Dennis Ritchie and Brian Kernighan, to learn C for my networking and operating systems classes as well as my own personal interest. I was in the need of a reference sheet for the language for quick look-up in the future where I found learnxinyminutes.com, a website that hosts exactly what I was looking for. While reading my book, I noticed that this precious reference sheet was missing some parts of C that I felt was important, so I explored in hopes of finding contact info for the author, but what I found instead was Learn X in Y Minutes is open source!
I was pretty comfortable with git from my internship at Banno and a couple of class projects, and I had my lonesome GitHub account sitting there begging to receive some action, so I decided to add some content and create a pull request. After adding a pretty good amount of material to the C document, I held my breath and clicked the button...
My heart then began to pound (seriously), and I could not focus for hours because all I could think about was my code being tagged as worthless or that I would be harassed by the project's maintainers mocking my novice talents. All of that to find out that the community is actually quite kind. The code I wrote and asked to be merged into the project did have a few mistakes (and I quickly found out to always read over your pull request before submitting it). But, it was not ripped apart in the slightest. Everyone ended up commenting on all my mistakes and helped me work towards merging my code into the main project. Open source project maintainers want your source code in the main project no matter how much experience you have! So, after fixing all my typos and some small syntax mistakes, my pull request was merged into the master for the whole world to see. I went to the reference sheet I contributed to and saw my code live and available for everyone to learn from. I was moved, I was inspired, and I was hooked.
I ended up contributing quite a bit of code to Learn X in Y minutes over the next few months as I learned more languages. My original fears began to fade away as my experience and contributions grew and my mistakes naturally decreased. Eventually, I became a contributor of Learn X in Y Minutes to the level of reading the pull requests of other open source contributors around the world looking to help out on the project. Contributing to this one project alone got me very excited to login to GitHub every day as our community is filled with grateful developers who believe that Learn X in Y Minutes is the best site around to grow or refresh your programming language knowledge. It gives me hope that one day one of my projects can grow a community like it.
Pursuing a Computer Science degree
I am one semester away for fulfilling a Bachelor of Science in Computer Science degree at the University of Northern Iowa. Open source software is one big reason why I have gone from little programming knowledge to a never-ending passion for software engineering. With a large programming community active on the Internet, I have been able to find solutions to my common questions that has in turn helped me to become a better computer scientist in the classroom, while also helping others do the same.
When I began my first year of college, I had a web development business creating websites from scratch for local small businesses. At college, I became involved in entrepreneurship workshops and joined the campus business incubator where I was given the chance to further build my business with the help of an amazing staff and free office space. Being a startup, as well as a college student, I did not have the funds to be able to pay for expensive software or hardware equipment to develop my client's websites. Luckily, this period of my life collided with my discovery of open source software.
After replacing my Photoshop software with Gimp, my QuickBooks with GnuCash, and my Windows 7 installation with Xubuntu, I was able to affordably create websites for my clients without having the stress of business expenses. Then, I decided to make my business 100% open source where all software running on my server would be open source, every line of code would be written using only open source software in an open source language, and all graphics created would be done so using open source software. I advertised myself as an open source company even though most of my clients had no idea what that meant, all in order to spread the word of open source software and the openness my business was to provide. Unfortunately, for the business, I ended up terminating it as I lost interest in website development and fell in love with software development, but I still hope to see more businesses like this in the future to support.
During my second year of college, I took a Software Engineering class. Along with four teammates, I spent the semester meeting with a client (really, our professor) and building a custom software application for his needs. We met with our client every couple of weeks; he would ask us for new features, a progress update, and somtimes he would change his mind on something to keep us on our toes. The software we had to create was a personal surveillance software to: record video footage when motion was detected by a web cam, upload the video footage to an online hosting service, then send an email to the client with details on the detection motion event.
Everyone on the team had just completed our second semester of programming classes and had only very basic programming knowledge and experience. After our first meeting with the client, we went into a panic because the extent of our knowledge at the time was how to create a linked list or a binary heap, not a fully featured motion detecting software. But luckily, I had a game plan that helped us finish the project! My plan, of course, was open source software.
Our project, VSAS software (Video Surveillance Alert System), was written in Python 2.7 with help from these open source libraries:
Because of these open source libraries, our nervousness was calmed and we were able to implement the needed motion detection and video recording features. After all of the documentation, client meetings, research, and development were done, we delivered VSAS software to our customer (our professor). His feedback was that it was the best project he had ever seen from the course.
We all had only one year of programming experience before starting the project. So, completing the software gave me the feeling that I could create anything!
From the beginning of my search into open source, to my Intro to Programming class, to the other adventures of my college career, I have fallen in love with open source software development. It has given me the opportunity to gain more knowledge and experiences, build really cool software applications with others, save money for student expenses, and become involved in a world-wide community of talented software engineers that inspire me every single day. The most exciting part is, this is only the beginning!