I'm working in a project called Gaab Web Chat, and I want to share my expiriences.

First of all I want to say that I'm doing it for fun. Is not for satisfying a need or doing a job that somone has ask me to do.

Working in a small project is a way of learning tons of new things. For example, we can review the tools/programming languages I'm using in my project:

  • An editor, of course. You have to configure and feel confortable with it. In my case I'm using Vim.
  • A programming language. In this case, Erlang. You have to know well the language, have a very good sources of code/ideas, know someone/somwhere you can ask questions about the problems you can have, etc... The language itself is not enaught, you have to learn to use external libraries, such as ErlyDTL,MochiWeb, etc.. and of course you have to know too how to distribute the files in a proper structure, how normally the code is used (with imports, modules, domains or just all-in-one-file?).
  • My application have a web front end, so, I need to use HTML+CSS+JavaScript for having all beautiful, being able to send AJAX requests and all this stuff. Of course I have to use some JS library (Mootools) and always have in mind the cross-browsing compatibility.
  • A repository. This is mandatory when you are writting code. Be able to make regressins, see the last changes of a file, or the files modified yesterday, etc... Very useful because it forces you to not commit stuff like debug comments, and this kind of things. In my case, I'm using Mercurial. It's very useful use a nice tool for making diffs, like Meld. I makes your life easier.
  • Of course, you want to have a backup of your code, so, you will need an account in BitBucket, for example. That's something easy but that you have to do. Create a pair of RSA keys, remember to push your last commits int he remote repo, etc... Mandatory if you want to share code with somebody and work together.
  • It's very helpful to know a basic console commands like find, grep or sed for being able to develop faster.
  • Scripts for launching the application. And easy way to recompile the project and fix bugs.
  • Install the system dependences and all the enviroment needed for running your application in your OS.
  • A little bit of knowlage of Sistem Administration beacause you will needed if you want to deploy your App in a VPS, por example (VPS that you will have to contract and manage, of course)
  • I use the HTTP protocol, and I have to know the main features of this protocols. HTTP Headers (Keep-Alive, E-Tag) HTTP Codes, Cookies, REST-ful APIS, etc...
  • Create and static "corporative web" where you explain all the good stuff about your web chat, how to used or to sing up.

What I want to say is that if you want to learn some new language, improve your actual knowledge, have fun, or just have something to do in the evening, start a Small Project. The positive side efects will be basically: you'll learn a lot.

A Small Project just requires two things:

  1. A very Simple Idea...
  2. ... that someday will be deployed

About the Simple Idea. It's not necessary to create something new. It's now necessary to find something hiper-futuristic. Just do something that already exist, you know that is well documented (somwhere) and put of a lot of effort in create you "own version" of your Simple Idea. I'm doing a Web Chat. There are tons of web chats out there. But that's a good thing, because there are a lot of information (very useful if you get stuck somewhere) about it, I can get ideas or try differents approaches and I will end up with: Another Web Chat. But it will be my web chat.

And why someday the app have to be deployed? Easy. Because if you are thinking about what you need, you probably will do crappy code, you'll avoid the complicated parts and you'll just give up if you get stuck in part of the process. Just having in mind that someday you'll deploy the code you will procude better code, you have to force yourself of commiting just "good code" and not something that breaks the whole application, to make the things beautiful and useful and someday you'll be able to say: this is what I've done. And show your app in production to your firends or colleagues. And... who knows? Maybe you application starts getting used!! =)

So, think in something that always has called your attention, wanted to know how it works or just something you feel curious about, and do it!!!!!

Have fun!