tags:

views:

129

answers:

5

Hi,

This is not really a technical programming question, but has more to do with best practices and programming / project management processes. Here's some background information:

I'm a consultant with an agile (scrum) software development company that specializes in the Java, J2EE, Flex technology stack.

Here it is generally perceived by many that the quality of PHP related people, projects etc. isn't up to the mark as compared to Java. While I often contest that claim, I do accept that there is an overall low barrier to entry into PHP which does occasionally attract lower quality people who then produce lower quality work.

For us, quality comes first. Over the course of the next few quarters we also are looking to develop a very high level of competency in PHP. And we want to achieve the highest level of quality and our processes should be such that we are constantly improving all the time while starting off as a high level.

Our new recruits are going through a rigorous selection process where there is a very hands on technical assignment. We evaluate how they code, we evaluate how they test their code, we evaluate their skills with industry standard frameworks (Zend, CakePHP, CodeIgniter/Kohana, Symphony).

We have a bi-monthly (twice a month) knowledge exchange event where individuals are encourages to present. We have hands on events as well.

I would request you to share your experience on how we as individuals and an a flat, agile, relatively small organization can instill good PHP development practices and constantly improve ourselves.

Thanks, Sri

+7  A: 

I personally believe good development practices go beyond language. Your requirements for PHP projects should be the same as those for Java. For example, the code should be clear and commented, formatted well and tested, just like for any other language.

Jon
@Jon, thanks...
Srirangan
+2  A: 

Obvious techniques would be regular code reviews and pair programming; the latter is especially important if you can use it as a tool to instill best practises into the new members of staff. Ensure that the developers who are closer to your ideal of writing good code can spend enough time teaching the other developers.

All that is unfortunately quite pointless if you hire people who have decided that they already know all they need to know; ensure that you hire candidates who want to become better programmers and are willing to work on that.

Timo Geusch
@Timo, thanks...
Srirangan
+4  A: 

I think one of the most important first steps is to set standards. Set a mandatory coding style (no one-line if/for/while/etc. statements, tabs instead of spaces, docs on every function, etc.); having a minimum requirement for the cleanliness of code is very important to maintaining a high level of quality control.

A good next step is to find where your employees are competent and where they aren't. Figure out which parts of the language your employees are having trouble with (i.e.: new PHP 5 features, efficiently using DOMDocument, writing secure classes...) and assign mandatory reading.

That leads me right into my next suggestion: have a "company library". For the places I've worked, it's been a bookshelf that employees can borrow books from to either reference or study. Keep it stocked with a variety of books from different publishers. From what I've seen, employees are more than willing to learn something new if it isn't forced on them and they're able to do it at their leisure. A good programmer is always looking to learn.

Lastly, start a blog/mailing list/forum that employees are encouraged to participate in regularly. Post tidbits (and encourage your employees to also post) about best practices. You might post on how using gettype with a switch statement is bad or how to properly disable magic quotes programmatically.

Good luck!

mattbasta
@mattbasta, thanks..
Srirangan
+2  A: 

The best way to get better is to ensure that you only hire people who want to get better. Then, you must support those people when they make mistakes in the quest for getting better. That way they are not afraid to try new things.

There is a saying I've heard in the USA: "Hire people with a less than 3.9(out of 4.0) GPA"; that reflects the goal to hire people who have not done perfectly(that is, they have learned how to not be perfect).

One of the best ways to become better is the "Lean" mindset, which has spawned the Agile methodologies, as well as a significant number of success stories in manufacturing.

The general idea is to be continually involved in an iterative process of self-evaluation and never wasting resources or having blocks in your workflow. That, of course, needs to be treated with care: research projects are so ill-defined they nearly can't be put into a assembly line, and much of software development is research.

For a language, your developers need to be kept aware of the latest security questions, their installations need to be kept up to date by the IT staff, the company should fund some number of learning materials, be they courses, books, conferences, or what-have-you.

In general, the overarching concept is that quality is everyone's business, and it's ok to take the time to do it right.

Paul Nathan
@Paul, thanks..
Srirangan
+1  A: 

All the above answers have good points to listen to. Hopefully this will just be in addition.

The bottom line is that it takes practice. Definitely don't take on the people that think they're perfect or don't need much growth. I think I'm a pretty good programmer but I can see many, many opportunities for growth.

Rely on the wisdom and experience from other programmers. Give them some good reading materials with sections that are highlighted as to how they address or impact your organization.

It's much easier to "WANT" to get better if the importance of getting better is known. The support to make mistakes and grow is present and the goals are clear and attainable.

jerebear