Posts Marcados projects
Some time ago, I started writing wsgid. It is a project that brings to you the ability to run any WSGI application with mongrel2 web server. Some time ago I had this idea of writing a web application that could help me test wsgid on a real production environment. Both wsgid’ official website and my personal website are hosted using wsgid and mongrel2 as the backend, but none of them even uses a database (and maybe won’t for a long time) and since they are very simple and low traffic websites, I think they aren’t good enough to test wsgid.
I thought about some type of applications that would be better to test wsgid and end up with the decision to write my own blog engine. This same engine will soon power my own blog, self hosted and managed by me.
Wait, another blog engine? Why?
Yes, it will be a blog engine, another one! =) Before you think about NIH, I will try to explain why I decided to start this project. The very first thing I did when I thought about writing one more blog engine was to find some existing ones. But it could not be any blog engine, they must obey some rules:
- Written in python
- Used a WSGI framework
- Bonus points for engines written in Django
These rules are obvious. If I’m trying to test wsgid (that is a WSGI gateway) the application must be written in Python and be compliant to the WSGI specification. The last one was a bonus point because I’m currently learning Django. I found that are there plenty of Django blog engines, but one decision made me not choose any of them: I want to learn something new, and I think the best way to do this is having a project. And not any one, but one that you will really use. And writing the code of my own blog is a good way to maintain the project alive, evolving and getting better and better.
Another point that helped me on this decision was the willing to self host my applications. This will give me very important knowledge and experience on system administration, servers, deployment, clusters and may more. Recently I had two amazing opportunities to work with these topics and I’m sure that if I were already managing my own infra-structure for a while I could have done much better on these two interviews.
Until the day of witting this blog post, my blog is still hosted on wordpress.com. I plan to migrate to my own servers as soon as this new project becomes minimally usable. This will be good for many reasons that I already said and one more is that I will be able to have my own domain name and not pay any more money for this, since I already own daltonmatos.com.
Starting a new project is always a great responsibility, first with yourself, second with the people that follow your projects and more important: with who uses your project. So today I decided to start this new project: The blog engine. It has no name yet, the only certainty is that I will create this project and host my own blog. The code will be hosted on github, where I publish all my codes. So if you are intersted follow me there and stay tuned!
Thank you for reading!
In this post I will talk about how important is to me to have side projects. And how these same projects gave me some considerable visibility to other developers and also to big tech companies. I talk also about what I learned after being part of the hiring process of Google and Facebook, both opportunities thanks to my projects and my publishing.
Sometimes you just want to learn something new, and one of the greatest ways to do this is having a project. You don’t need to have a project that is used by many people. That’s not what measures whether a project is good or not, a project is good when you care about it. More important, a project is really good when you learn something useful during its development.
Other than that, your project can be your showcase, so use it also to show others what you are capable of doing. There are other ways to show yourself to the world, and one of them is be part of the community around someone else’s project. But you can’t just choose a random project, the project must be important to you, either because you are interested or because you use it to solve an important problem. And remember, always give valuable feed backs, don’t just make noise. If you have nothing to say, so just don’t say it.
First, the Projects
I always try to convince who is near me that having side projects are a great idea! I’m always trying to help my friends with their projects, sending patches, doing pair programming or whatever I can do to help. Until 1 year ago I didn’t have any side project, but not because I didn’t want to, it was just because none of them were such a big deal. And then when I started to study python I saw the first opportunity to have one project. At that time I was deploying a Trac instance and because of this I started to read its source-code. When I realized how amazing Trac’s internal component management was I decided to create my first project, and then plugnplay was born. This project gave me the knowledge about the python language and at this time I already had chosen python as my language of choice.
The idea for the second one came when I found out about another project named mongrel2. Actually I don’t remember how I came across mongrel2, but as soon as I realized that it lacked python support, added the fact that I had just chosen python as my language, I decided to start wsgid. Wsgid provides WSGI support for mongrel2. As I wanted this project to be more presentable I also bought a domain name (wsgid.com) and made an official website (that runs using wsgid itself!). Over time, wsgid earned its place on mongrel2 official site, where it shows all supported languages. This was, with no doubt, a big move for the project and gave me even more motivation to move further.
The first contact, Google
So there I was, developing my projects as always when suddenly I see in my inbox an email from a @google.com address. At that exact moment I thought: “Ok, Gmail spam filter has failed. Let me mark this and go on with my life.” But then I decided to just do a little research about that message. I looked at the original communication between the smtp servers, and all that seemed real. The email talked about my contributions to the open source community and my blog, and the recruiter was asking if I was interested in a full-time opportunity at Google.
So I decided to reply to that message and two things could happen. Or I would be eternally without response, and then I would confirm that it was spam. Or I would receive another response and realize that is was real! And that’s what happened. I was absolutely happy and proud to know that Google was offering me the opportunity to be part of its hiring process.
This was January this year, and then I started chatting with the recruiter. I had two phone calls. The first was not technical, was just to know a bit more about me, my background, my time in college, my current work and some other things. After this we scheduled the first technical interview. I, obviously, was very nervous before and during the interviews, mainly because all them was made in English, that is not my mother language.
The second phone call (first technical) was ~20min chat with general questions about system administration, network, etc. I tried my best, considering the poor call audio quality. I had to ask the interviewer to repeat several times, some of them he didn’t. Some weeks later I received another call telling me that we were not moving forward with the process, and so my chances with Google were finished.
The second, Facebook
Some weeks ago, around end August, it happened again. And this time was from a Facebook recruiter. Same story, and this time they saw my blog and since one of my projects was server related (wsgid), they contacted me about a full-time sysops position. This time the domain of the sender was unusual to me, it was @fb.com. But a simple DNS query was able to show me that fb.com was in fact controlled by facebook. This made me feel more confident about all that story.
And, again, I decided to accept the challenge. So I started chatting with the recruiter and on the next week I was already with a scheduled phone interview. This first interview was an elimitaory one, just to know if they would continue with the process or stop right there. Again, the audio quality of the call was awful, but different from Google interview, every time I asked the person to repeat the question I was attended. This first call was very quick (~20min) and some of the questions were about protocols, command line tools and system administration in general. I answered right almost all the questions, and then the interviewer finished the call with a compliment. Saying that I was pretty good at Linux. =)
The next week was time for another phone call, this time a non-technical one. The recruiter just wanted to give me valuable tips about the overall process and specifically about the interview that was to come, the first really technical one. And the day has come, I already knew that the interview would be a ~45min call with 2 or 3 problems to be solved. They used collabedit.com to see the code I was writing.
During the one week I had to prepare myself, I studied algorithms, data structures, grabbed some problems from programming competitions and solved them. As I was focused on algorithms, during the interview I got stuck trying to solve the problem with an algorithm written in python. The position was to sysops, that is, heavy linux server users with great command line powers. Even though I simply didn’t try to use bash during the call. After almost 20 min trying to solve this with python code, the call was finished by one of the interviewers and he said that soon they would contact me again. As soon as I hang up the phone, a one-line bash solution came into my mind!
What I learned about all this?
Even not being selected on both opportunities, something good comes out of it. When all this ended and I started to think about it, I realized that my simple projects, started mainly to learn something new, went beyond all my expectations! All my projects are published on my personal website: daltonmatos.com. What all this taught me is that is all the effort put on my own projects, the contributions I made to other projects, all these worth it!
I also realized that big companies are always looking for good developers out there and one of these could be you, the same way these two times it was me.
So what can you do about this?
What I would like you to understand is that whenever you have some code that solves a specific problem for you, publish it! You can be sure that this your solution can be useful for many others. I already saw some friends not publishing their code because of many weird reasons, from “the code is still too bad, let me evolve it a bit” to “This is a super-secret project, somebody will end up stealing my super-coll idea”. If you also think like this, I hope that the story I just told you changes your mind, at least a little bit!
So go start your projects or publish an already written one!