A couple of days ago I came across this nice post titled The Joel Test For Programmers which was stating some characteristics that make a good software developer, but of course not all of them. This test is based on 12 criteria, which are simple questions that one should answer honestly in order to realize what kind of software developer/programmer/coder is. Score above 8 is great, but even below 8 is not a big deal. These things can be learned.
The 12 questions of The Simple Programmer Test are these:
- Can you use source control effectively?
- Can you solve algorithm-type problems?
- Can you program in more than one language or technology?
- Do you do something to increase your education or skills every day?
- Do you name things appropriately?
- Can you communicate your ideas effectively?
- Do you understand basic design patterns?
- Do you know how to debug effectively?
- Do you test your own code?
- Do you share your knowledge?
- Do you use the best tools for your job?
- Can you build an actual application?
I would score somewhere between 9 and 11, because I am not really practicing some stuff I’d like to (don’t ask why). Anyway, while reading through the article, I was thinking of something else. It is not a secret anymore: something very nice is going to happen at Things Lab, and everyone who loves to code will want to be part of it. Things Lab has been doing some PHP-MySQL trainings and also one for HTML and CSS. Now, the next thing in the list is building an actual web application. Reading these 12 questions gives me a better look into what we can do.
Source control, A.K.A version control, is the management of changes into source code. There are a lot of programs used for version control, such as CVS, Subversion, Git, Mercurial, etc. Some of them are distributed, but there are also Version Control Systems that are local-only. At Things Lab, we have done a previous presentation about Source Code Management with Git, so this is what we are going to use during this training.
Programming in more than one language
The other team will develop on the back-end, they will write PHP code and will build the database. This team will develop the underlying algorithms that will make the application work. They will develop an API (Application Program Interface) that will work as an abstraction layer between the database and the client-side code that will show into the user's browser.
Increasing the skills
Things Lab moto is Learn | Make | Share. Focus on the first word, “Learn”. We all start as noobs, knowing nothing at all. Then we start learning and ever stop. Increasing the skills is something that should be done everyday, constantly. Whether you know web programming or not, we encourage you to join this event. We actually encourage you more if you don’t know web programming. This event, or better, this project will be focused on Learning, as well as Making. So everybody will learn by doing something practical, and in the end we aim to develop a product which can be shared with everybody.
Testing and Debugging
It is virtually impossible to write bug-free code. But it is something that we expect, actually, we want you to fail in writing bug-free code. In this way we can go through testing and debugging. This project will involve Unit Testing in order to test the functionality of the application and every small detail of it. Good developers don’t commit code that doesn’t pass all the tests, and you will do the same.
Don’t forget to Share
After learning and making something, why don't you tell everybody what you did? And the best way to do this is by showing what you did. The code of the application will go online into a GitHub repository, so everyone can see your code, modify it, and so on. In the end, everybody will be happy to have learned something useful from this experience.
I have had some suggestions on what kind of application to develop. It might be a to-do application, or a library management system (I’ve tried that before), or a student management system, but the best thing of all this is that the participants will be in charge. They will decide what application to develop and what technologies to use.
Now we are still looking for ideas of applications. Do you have any suggestion? You can write down on the comment section.