Contributing to Open Source Is ‘Better Than Any College Degree’

A week ago, I published my thoughts on the block system from a developer’s perspective. Taking a weekend-afternoon deep dive into creating custom block types meant learning some tough lessons and familiarizing myself with a programming language I had little experience using.

Programming has always been a trial-and-error affair for me: write code, refresh the browser, read the error message, and attempt to fix the problem. Then, simply rinse and repeat the process until the program is not broken. Those mistakes are woven into the art of coding, the layers underneath that poetry on the visible canvas.

I have absolutely made the same mistake twice. And, thrice. Probably a lot more than that if I am being honest with myself and you. Eventually, I stop making those same mistakes, and some method or procedure is permanently seared into my brain.

I have written a few hundred WordPress tutorials in the past decade and a half. I am a twice-published author of development books and served as a tech editor on another. However, I am not much of a reader of tech books and documentation. For one, programmers are not necessarily the most engaging writers. Plus, book smarts can only get you so far. You need the street smarts of programming to become good at it, which means learning from experience.

While I firmly believe that reading is a central part of that, there is no replacement for getting your hands dirty. Building things, making mistakes, and learning to fix them is what makes programming fun.

Working on open-source software like WordPress is one of the best ways to do that. There is no upfront cost, assuming you have access to a computer, a prerequisite to programming of any kind. There are usually people willing to lend a hand or answer questions, and there are always problems to solve for those ready to dive into them.

As WordPress Executive Director Josepha Haden Chomphosy chatted with Matt Mullenweg on the Openverse project a couple of months ago, there was a moment that I found myself nodding my head in agreement.

Because, of course, you know, contributing and being involved with open source is probably the best way to learn a technology, better than any college degree.

Matt Mullenweg, WordPress Project Lead

I have learned more about WordPress, PHP, HTML, CSS, and JavaScript by contributing to open-source software than I ever learned in a college course.

I grew up in a generation that was told that we must get a college degree. It was an integral part of the American dream that would result in suburban life in a neighborhood with perfectly aligned rows of houses, ending in a cul-de-sac. It was the first step toward a two-car garage, white-picket-fence, 2.5 kids, and a dog. College was the promise that my peers and I hinged everything on. It was expected of us, and so many of us did our duty.

Here is the thing that our parents did not know. The internet would change everything.

I graduated high school in 2002. This was during that stretch where the online world was exploding. All of the world’s knowledge would soon be at our fingertips. Today that is truer than ever. Anything you will ever need to learn about writing code is available through an internet connection.

My experience with college-level courses in programming was mixed, but I learned a necessary life lesson from them: I was not cut out for a degree in software engineering. I am glad I wised up early on and pursued a different degree, saving myself some time and money.

I rocked my half-summer C programming class, my introduction to writing code. I also had a passionate professor who once worked on U.S. missile projects as a bug-tester. It was probably not the most glamorous job, but he always made it sound exciting because he loved what he was doing. Our class was tasked with building various programs throughout the course, but we usually had a choice in what we were building. For my group’s final project, we created vending machine software.

I was on the fast track to becoming a software engineer after that first class. I had built a way for merchants to get paid for delivering sugary treats and soft drinks to customers. It was capitalism meeting programming, and I had a taste for it.

The fall semester rolled around, and I was motivated to move beyond the realm of procedural programming in C. Java, an object-oriented programming (OOP) language, would be my next challenge.

The most advanced thing our class built for an entire semester was a basic calculator. I skipped nearly every lecture because I could not stay awake watching the professor chicken-peck his way through programs for three hours every week. I attended the mandatory “labs” — basically a fancy way of saying an extra class where the professor’s assistants would teach the actual coursework.

Needless to say, my fire died down. While calculator programs are handy tools, I wanted to branch out and build things that mattered.

You know what reignited my flame for programming? At first, it was general web development. But, WordPress was what I really became passionate about. And, I have not looked back since I started using it in 2005.

WordPress was my gateway into a world where I could create things that interested me. I could jump ahead into a project far more advanced than my skill level, trial-and-error my way ahead, and eventually build something that others found value in.

Unless universities have changed, most teach step-by-step foundational lessons to their pupils. Some students may luck out and land in that unique professor’s class who gives them leeway to explore various ideas. However, there is no substitute for creating something of your own, solving a problem that you see.

And, that is what programming is all about — solving problems.

In 2007, I released my first WordPress plugin into the wild. It automatically listed all of the subpages of the currently-viewed page. Dozens of similar plugins have been written since and probably before (it seems WordPress would have a simple “list subpages” function by now).

Last week, after writing a new plugin, I was reminded of the free education that the WordPress community has given me over the years. Some of it has been reading documentation. Some from WordPress Stack Exchange answers. Other bits have been studying from those who came before me, building upon their open-source code. All of it was from other people giving something back to our community.

This is not necessarily a knock on college. Some people perform better in that structured environment, and there is value in all forms of education. However, there are alternatives for those who cannot afford college or learn better in a different environment. And, there is no discounting the experience you get from contributing to something bigger.

If you are one of our readers thinking about getting into programming, just dive in. Make some mistakes. Build. Learn.

16 responses to “Contributing to Open Source Is ‘Better Than Any College Degree’”

  1. Great share. I think you have to be willing to break things and live with a fair amount of frustration, but you feel good when it all works. We have all learned a lot from WordPress by jumping in and figuring it out, with help from our fiends and the community.

  2. The great sociologist Manuel Castells says exactly that: schools keep working exactly as in Middle age. A perfectly aligned excerpt from an interview:

  3. This is a fantastic resource. I believe you must be willing to break things and live with a fair lot of aggravation, but it is rewarding when everything comes together. By stepping in and figuring it out with the support of our friends and the community, we’ve all learned a lot about WordPress.

  4. I have a Computer Science degree and would like to comment.

    The points you make are excellent. I had a EE professor in college who got the class a discount at a local electronics store so it would be easier to experiment with real circuits. I also interned for a year or so, and that practical experience was quite helpful.

    Yet there’s something that people who writes on this subject seems to miss. The purpose of an actual Computer Science degree (or even Software Engineering) is not to teach programming languages. That’s certainly a part of the degree program, but it’s only a means to an end.

    A Computer Science degree gives you a core foundation for the entire field. People who don’t have a degree typically don’t realize they’re missing it, but I’ve seen it manifest every so often. The first time was while I was an intern. One of the programmers described how they’d had a severe problem using fork/exec to spawn another process. They didn’t fully understand how fork() worked, and it brought the system to a standstill. As she explained how they discovered and fixed the problem, my thought was I’d learned about that in my Systems Programming class and I wondered how they hadn’t known.

    I was trained on sorting, linked lists, hashes, curve fitting, recursion, grammars, and data structures. While these aren’t nearly as important as they used to be, due to the extensive libraries of modern programming languages, that knowledge gives me an understanding of what’s actually going on in the code and helps with debugging, optimization, etc. I once decreased the execution speed of an I/O-bound program by 90%, simply by increasing the size of the fwrite() buffer (run time went from 45 minutes to 4½ minutes). Not sure I’d have been able to figure that out without the solid understanding of I/O fundamentals I’d received from my classes.

    Also, since I was trained in programming language fundamentals, learning a new language is trivial. I can be up and running just by reading a book, and sometimes even without that. As you noted in the article, of course, such knowledge is useless unless it’s refined and expanded by actual coding. And modifying someone else’s code is a great way to learn. But it baffles me when people think that learning a new language is a difficult task. Note: let me make it very clear that I do not consider myself superior to non-degree programmers; rather, it’s that many things are easier because I received the foundational skills in college. People who learn programming in a specific language, environment, or project often have a partial foundation. How this foundation manifests in me is that I consider all the major modern programming languages (C++, C#, Java, Python, JavaScript, etc.) to be essentially the same — a variant of C with some differences in syntax and library functions.

    Another thing that baffles me is front-end vs. back-end specialization. It’s all just programming. I’m as comfortable with database normalization as I am with CSS3. Again, it’s that foundation.

    I have a sense of ease and comfort regarding computer skills that seems to be less prevalent in those without a degree. Anyone with a Computer Science degree who is reading this is probably nodding their head in agreement and smiling.

    I’ve seen a number of articles like this one, and they’re always written by people who don’t have have a Computer Science degree and are explaining how a degree isn’t necessary. And in many cases the non-degree folks are very, very good. But my experience is that the lack of foundational knowledge tends to manifest in subtle ways. I’ve noticed it over the course of my career. I don’t think non-degree people can really see it, because to them it’s normal.

    I wholeheartedly agree it’s not necessary to have a Computer Science degree in order to be an excellent programmer, nor is a degree suitable or preferable for everyone. But it certainly makes things easier and enhances your versatility and flexibility. I think this is why some larger companies still place value on a degree and ask interviewees how to do things like invert a binary tree.

    I believe the optimal situation is to have both a degree and the practical open-source experience discussed in this article. I got my PHP chops, for instance, by heavily customizing the open source osCommerce program. I learned HTML and CSS by creating websites. I learned SQL by creating and manipulating MySQL databases and working on existing database projects. I learned WordPress by creating my own theme and serving as webmaster for a couple WordPress sites. I was thrown into the deep end of the C# pool and managed to keep my head above water as I learned to swim.

    Anyway, thanks for letting me talk. Hope this helps you understand where we degree folks are coming from.

    • Thank you for sharing your experience, Chad. And for the reasoned response.

      Another thing that baffles me is front-end vs. back-end specialization. It’s all just programming. I’m as comfortable with database normalization as I am with CSS3.

      That has always baffled me too. I like it when folks say they specialize in solving problems.

  5. Chad Cloman expresses it beautifully above.

    There’s also the problem that us oldies without degrees learned quite close to the metal, and moved up the stack as time passed. So I’ve done everything from raw machine code, to assembler, BASIC, PL/I, C, Python and PHP amongst many others. I got to grow as the industry grew. A newbie to the industry doesn’t have that luxury of spending years solving how to make something reasonably interesting work quickly on a microprocessor by directly addressing the graphics memory. I was on a huge government project in 2001 and even then, it was amazing how few people who’d come through the bootcamp approach pioneered by the big consultancies had heard of bitwise operators. Which mostly didn’t matter, except on the day when something couldn’t be made to work because it relied on being able to find out the value of a single bit stored somewhere. The dev who’d done that was solving a problem for some low level compiled code to run super-fast, and he didn’t honestly care that later devs working way up on the UI would struggle. But hey, every coder knows bitwise operators, no? Well… actually no. Surprisingly few do. But because I’m old and coded from 1983 on, I kind of had to know that stuff in order to modify sprites on the screen.

    So us oldies have to realise that the industry is not at all in the same place as it was in when we stepped in. A degree can help people know a lot of this and stop them making mad schemas or storing PHP objects in the database.

    • Excellent example, David Coveney!

      I started on the Apple II series of computers. The reference manual included a fold-out schematic of the motherboard, which I incrementally learned to understand during the years I was in high school. Close to the metal indeed!

      The stories we have to tell…

  6. Matt’s quote makes total sense in his context — the best way to learn a technology. The article title, however, is a bit misleading. Though college degrees aren’t always the path for everyone, I’m certainly happy to have mine as it’s helped my career tremendously.

    My degree is BA Liberal Studies with an Emphasis in Psychology which I used to become a licensed multiple subjects teacher in California. This helped me contribute to WordPress in a better way — leading the Make WordPress Marketing Team for over two years.

    Computer science is a core engineering degree that may teach you how to think in the context of the whole but isn’t mutually exclusive to learning technologies that evolve quickly — like Javascript.

    Though I appreciate the sentiment of this article, it’s a little bit discouraging and slightly dismissive to those of us who have degrees and are considering master’s degrees later in life.

    Though we all know that our skills learned on the job and during Open Source contributions are valuable, they don’t always translate well on a resumé/CV to get the best possible position, furthering our career and economic independence.

    • I have a degree as well and would never be dismissive of the idea of earning one. I may even get my master’s and doctorate down the line. Education, through school or otherwise, is always valuable. We should never stop pursuing it.

      The title got people talking and, perhaps, reading the article, so I’d call that a success. Writing perfect headlines is the toughest part of the job, and no matter which direction you go, you never end up pleasing everyone. Or, you make it so generic that no one reads the article. I won’t quibble over it anymore than that though.

  7. In 2002, two days into my second semester at community college, I took one look at the website my web design instructor’s prior class designed for the local nature center and dropped out. It was clear I was on a slow path to mediocrity. All the training I needed was free online, at my own pace. And applying what I was learning in the real world often came with a payment!

    Nearly all the web developers I know with a degree have it in a field not directly related to what they are doing for a living. They essentially ran up a college bill while messing around for fun until they got good enough to make a living out of it. I’ve always been amazed at the opportunities offered by a computer with Internet access and the ability to speak English.

    Technical schools need to make a serious comeback. A university education is definitely not the right path for every person or every career. It’s nuts how expensive the college experience now is. I feel like young people are being taken advantage of. The schools would have you believe a six figure education is actually worth paying for career X, Y or Z when those jobs, practically speaking, either don’t really exist or don’t provide a justified return on investment.

    “Study” in Europe, acronym-shaped swimming pools, artificial ski slopes… Now I’m ranting. ;)

    • You make a good point about the variety of degrees in the programming field.

      I’ve noticed a number of programmers with a B.S. in Mathematics. Makes sense because you pretty much have to have a Ph.D. to make money in that field.

      Once had a boss with a Ph.D. in music. Asked him why he made the switch to programming. He said, “The grants ran out.”

  8. I found WordPress shortly after Myspace. The two set me up for life. I built my first WordPress blog to teach people how to “PIMP OUT” their myspace profile. I was making money and building friendships. After my

    Most of my blog posts ended in “Paste this code in the About Me Section”. Which is similar to the WordPress tutorials of today that end with “Paste this code in your themes functions.php file.”

  9. A great read, thanks. My experience is slightly different, I would argue that university education – as I experienced it myself last year – is largely obsolete. I believe the best thing besides the paper is probably a wide variety of topics a person gets introduced to which can help make a decision on what to focus on and set a course for the future.
    I was excited about going to university as a working adult and it has been many years since my formal education ended. At the moment I made the decision, I was already after an online course for a software tester, and I was working for several months on a fascinating course in Unreal Engine and C++, as my dream was always to get into gamedev. I enrolled on a C++ course at a major state university in my city, thinking I might be up to the task at Uni now, with the online courses I was doing in my spare time.
    However, the university course was a huge disappointment for a number of reasons. The teachers lacked both communication skills and expertise, especially when compared to the online counterparts. The courses were poorly organized, jumping from one topic to another without much sense or flow. We constantly heard we had to do things on our own, which was fair, but I would expect to receive SOME knowledge in the classroom, instead of just being told to look things up at home. I mean, I was used to learning things from the internet and it worked great, but I was expecting to be also taught something at Uni by professionals. I had the impression I was just wasting my time. I decided to quit Uni after the first semester and get my money back. I learned far more in the same time by doing cheap, high quality, well organized online courses than with people that had degrees at the university. When I reach out to my classmates after more than a year now, all of them working adults as well, I am happy with the decision I made. To sum up, again, I would say that a uni degree will probably help choose the direction, but for real, practical knowledge, everything is available online.

  10. Colleges/University degrees aren’t so much about the piece of paper you earn or the education but, rather, the life-long connections and friendship you’ll make and the people you meet, fraternities/sororities, etc. This is what most people really don’t get and this is the true (hidden) value of the experience.

    You know how many contracts I’ve picked up pretty much by default because I was friends with the person back in University? So, yes. go ahead and skip college/university. Stay in your lane. That’s exactly what the powers that be want you to do.

    • Some college educations make sense and some don’t. It depends what a person wants to do. There are ways for aspiring programmers to network and make friends that don’t cost anywhere near six figures and four years. The important thing is for young people and their parents to be discerning.


Subscribe Via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

%d bloggers like this: