How of many of you remember Compuserve? What about Prodigy? I'm asking because, back in the good 'ole days, they were popular services that allowed you to communicate with other people from all over the world. In many cases, they offered complementary services, such as forums or classified services, not to mention a pretty appealing user interface (for the time).
Some of you may be too young to even know about those services, but I'll go out on a limb and assume that everyone's used either AOL Instant Messenger, Skype, or Yahoo! Messenger at some point. The main thing is that they were meant to facilitate communication. In the ever-growing world of remote teams and worldwide collaboration on projects, the ability to get good, immediate feedback is critical to solving problems. Interestingly enough, all of the services that I noted above, while awesome in their own way, have taken a backseat to another medium for developers: IRC.
Everything Old is New Again
What I've noticed in the last couple of years is a resurgence in using IRC as a primary means of communication.
IRC (Internet Relay Chat) is a protocol, created in 1988, and was meant to help facilitate group discussions, via various channels. The channels served to identify different discussion topics you could pop in on. Having been on the Internet for some time now (I used to dial-in with a 2400 baud modem), I remember using IRC, but gravitated to many of the services that I mentioned earlier, because they just seemed more user-friendly and feature-rich.
What I've noticed in the last couple of years is a resurgence in using IRC as a primary means of communication, especially for open source projects. While there have been group-based services for a while no (Skype, Campfire, Google Hangouts, etc.), the relatively open nature of IRC makes it easy for large groups of people to hop on a channel and collaborate easily.
I'm also going to say (and I'm sure I'll get some grief for it) that I think there's a little bit of "geek cred" action going on here when you can tell someone, "let's chat about it on IRC".
So you want to get into this "IRC thing". That's actually a good thing because to be honest, a LOT of great discussions are happening on there and in some cases, going to a channel is the only way to get any decent support, especially for some open source efforts. So let's first break down how things work.
Picking the Right Network
The first thing that you need to understand is the lay of the land. IRC works by using some type of client that connects you to an IRC network. The networks are just machines that are setup to allow users to connect to IRC. There are a number of networks out there, and most are targeted to specific interests. For example, Aniverse is geared toward the Anime crowd, while QuakeNet targets video game players - especially Quakeworld players. According to IRCHelp.org, the major networks are as follows:
These are networks that average 10,000 or more users, and tend to have the largest, busiest channels. There are also regional networks for different countries as well, but in terms of development, from my experience, most developers tend to jump on Freenode - and rightfully so. Here's how the Freenode network describes itself:
"An IRC network providing discussion facilities for the Free and Open Source Software communities, not-for-profit organizations, and related communities."
And with open source software so vitally important today to just about every major web property, it makes perfect sense why so many of the popular development channels are on Freenode. Wikipedia lists it as the largest of the major networks, with approximately 85k users on it at peak hours. It's the network I'll be focusing on in this article.
Tune in to the Best Channels
IRC does support 1 to 1 private chats.
I referenced the termm "channels" before; just as when you're watching TV, specific networks have specific channels for specific topics. By joining a channel, you're choosing to jump into a discussion group about a specific topic. The discussion is typically free-form so don't expect to go into a threaded UX with everything tightly organized or hierarchical. In fact, depending on the number of users in the channel and how active they are, discussions can be challenging to piece together. That description isn't meant to dissuade you from using IRC, but more to get you mentally prepared, especially if you're used to highly organized mediums like online forums or threaded email discussion lists. IRC is a wide-open, free-for-all discussion medium so you'll certainly see a number of discussions being carried on at once, in some cases overlapping. The key thing is to have patience so that you can filter through the noise and get your interests met.
You'll typically participate in group chats, but IRC does support 1 to 1 private chats as well, along with the ability to transfer files. As always, safe Internet practices are essential. Chances are high that you DON'T know the person on the other end of the wire; so you need to be careful when accepting anything from anyone. In addition, IRC allows scripts to be run, which provide additional capabilities. Again, be safe and DO NOT run any scripts from anyone unless you're absolutely 100% sure of what it's meant to do. As a general rule, I don't accept any files or run any scripts through IRC. I don't think IRC is any more insecure than other services on the Internet, but I'm hyper-vigilant because I probably won't know the person sending me something. Common sense in my opinion.
I recently asked publicly which channels developers are using and I got some nice feedback. The following list is a little long, but I think worth posting since the channels are incredibly useful:
This is NOT an all-encompassing list of every awesome web development channel so if you think there are others that would be useful, drop them in the comments section.
The hash ("#") in front of the channel is purposeful and meant to identify channels that are available across a whole network.
One thing to note is that channels are typically managed by channel ops (short for operators). These people help to set the channel up, and generally keep things running smooth. They also have the power to manage users on the channel and can kick or ban you if you get out of line. You don't need to pay them homage or anything, but do understand that, in spite of it's openness, IRC is a managed service and most channels, especially those for open source efforts, will expect a certain level of courtesy and professionalism so be cool.
The quickest way to get onto IRC is installing client software. Whether you use Windows, OSX or Linux, there are a number of great choices available to you. I've used clients on both Windows and OSX and find the following to be great options:
HexChat - This is my client of choice for Windows. It's a fork of the popular XChat client, but is actively maintained and updated. It's also open source and freely available. I was using XChat before and even purchased a license for it, but I haven't seen any development activity on it since Aug, 2010 and can only assume that it's not being supported any longer. HexChat has stepped up and taken XChat's place, at least for me.
mIRC - mIRC has been around forever and is a solid IRC client. I used it many years ago, and it's probably the most widely used Windows-based client available. It does require user registration after 30-days if I recall - and that runs $20 - but it's a one-time, lifetime registration fee that, according to the site, "will work with current and future versions of mIRC." I'm certainly not averse to spending money on good software, so I may revisit mIRC in the future.
Colloquy - This is my client of choice for OSX. I find the user interface to be much more intuitive than other software, like LimeChat. It could be that it reminds me of HexChat, which makes switching between OSes easier. Either way, Colloquy is the best OSX-based IRC client. It's also open source and there's an app available for the iPhone, which is very cool.
LimeChat - Seems like all the cool kids are using this now. I gave it a run and it's not bad; however, I don't think it's better than Colloquy. There was something about the way the UI was structured that "just didn't feel right" to me. Like Colloquy, it's open source and also has an app available for iOS.
Textual is also a new alternative that seems to be quite good.
Don't want to install software? No problem. Just hop on over to Freenode's Web Chat. Using any browser, you should be able to jump onto Freenode and visit channels of your choice. The only downside is that you can't store preferences so if you want to visit a set of channels regularly, it can become cumbersome re-entering your channels.
Here's the login screen:
And here's the channel's chat interface:
If you look at the this screenshot and compare it to that of HexChat or Colloquy, you'll see that, from a usability perspective, using a dedicated client is MUCH easier, since it lets you organize and connect to your channels every time you startup the program. If we look at HexChat, for example, I can easily choose the network to connect to:
as well as define the default channels I'd like to join everytime I connect to Freenode:
While the web interface for Freenode makes it convenient to connect from any device without installing anything, it does limit me specifically to Freenode, and forces me to manually join each channel I want to participate in using the "/join" command like this:
If you have a list of IRC channels as long as Paul Irish's, typing all of this in over and over will get boring really quick:
In HexChat, all I have to do is specify a comma-delimited list of my channels in the "Favorite channels" field for the network and when I connect, I get auto-joined:
Getting Your Own Nick
When you join a network, you're going to have to identify yourself using a nickname, commonly referred to as a "nick." It's really no different than creating a username on your favorite site, and helps people to get to know you as you participate in discussions. I recommend not only getting a nick, but password protecting it so that someone else won't take it from you (accidentally or purposefully) later on.
Setting up a nick is really simple. First, you specify the nickname that you'd like to use, and then connect to Freenode. Once you've connected to the network, you'll use the following command to create your password and associate your email address to your nickname:
/msg NickServ REGISTER password email@example.com
You would substitute "password" with your password and "firstname.lastname@example.org" with the email you'd like to associate to your nick. You'll then get the following message in your IRC client (I've blocked out my password for obvious reasons):
[14:16] NickServ REGISTER ***** email@example.com
[14:16] -NickServ- An email containing nickname activation instructions has been sent to firstname.lastname@example.org.
[14:16] -NickServ- If you do not complete registration within one day, your nickname will expire.
[14:16] -NickServ- bangoboom is now registered to email@example.com, with the password *****.
You're not done, as Freenode will send you an email with an activation command. Here's what I got:
/msg NickServ VERIFY REGISTER bangoboom cikdmbzhrflr
I put that into the Freenode IRC command line, which returned the following message:
[14:20] NickServ VERIFY REGISTER bangoboom cikdmbzhrflr
[14:20] -NickServ- bangoboom has now been verified.
[14:20] -NickServ- Thank you for verifying your e-mail address! You have taken steps in ensuring that your registrations are not exploited.
The last sentence reinforces what I noted earlier:
"You have taken steps in ensuring that your registrations are not exploited."
Your nick is your identity on IRC, and you should protect it as best as possible.
Common Commands You Should Know
Once you're in the mix and chatting away, there are some commands that will make your life easier. I'll list them below:
/who <nick> - This allows you to get more information about someone in a channel.
/list - This will return a list of all channels available on a network.
- This allows you to join a channel via the Freenode command line. Remember to prefix the channel name with a hash ("#")
- This allows you to have a private chat with the person whose nick you've specified and will send them the message to kick off the chat
- This allows you to invite a user to another channel for a chat.
/away - Tells users that you're away from your PC for a bit
/quit - Tells the network you're done and are leaving
Etiquette (or How Not to be a Jerk)
It should be common sense by now, but, unfortunately, the perception of anonymity on the Internet leads people to believe that they can act any way they like. Just remember that, no matter what, you're talking to another person on the other end of that wire. So my typical advice is don't act online like you wouldn't act in person. Don't forget that most channels have channel ops, and they will boot you if you get out of hand. Don't be "that guy".
In terms of how to communicate, here are some of the things I've observed:
Don't use all caps. Should be obvious but you'd be surprised.
If you have a question, try to be as detailed as possible. Trying to decipher an issue online is tough.
Creating a reduced test case before posting in a channel will get you much farther in solving your problem quickly. The community will also appreciate the fact that you've taken the time to narrow down the issue.
Avoid flooding a channel with a ton of noise. What I mean is do your best to keep the discussion brief and on-topic so that it benefits everyone.
Some channels will have banner messages when you first come into it. READ THEM as they're generally there to outline channel guidelines or offer important updates about the channel or project. Here's the banner from the jQuery channel:
"jQuery 1.9.1 http://jquery.com | jQuery UI 1.10.2 http://jqueryui.com | jQuery Mobile 1.3.0 http://jquerymobile.com | Docs: http://api.jquery.com http://learn.jquery.com | Paste code at http://jsfiddle.net or http://jsbin.com | Dev Channels #jquery-dev #jqueryui-dev #jquerymobile-dev | http://try.jquery.com for learning the basics | Channel publicly logged to http://irc.jquery.org/"
Notice that it tells you the most current versions of the libs, and offers links to resources to help solve your jQuery-related issues.
I can't stress enough that IRC offers no anonymity. Don't assume anything you say is private and can't be seen (unless you've gone to great lengths to anonymize yourself). Conversations can be logged and in fact, most IRC clients have that feature built-in. Your IP address is also easily visible by simply using the "/who" command.
As I mentioned above:
Don't accept file transfers
Don't accept direct connection requests (you're bypassing the IRC server and directly connecting to another computer)
Don't run commands that someone tells you to run
Don't run scripts that someone has sent you. You can get backdoored.
This is my own personal feelings and you can do as you please. If you think someone is being malicious, report it to a channel op so they can check it out.
This page offers a great outline of what to look out for so you don't get burned.
IRC is the new black, when it comes to online communication and it's important that, as times change, we adjust to how people are talking with one another. IRC offers a great opportunity to get developers from across the world together and share a wealth of knowledge. The interface is simple and explicit, making it incredibly easy to pick up and be productive. And with the numerous clients available, getting involved is straightforward. So, if you haven't yet tried IRC or you're a veteran that needs to re-grease the wheels, IRC is back and ready for you.