Enterprise PHP Development

While working at EZYield, we’ve come across a shortage of qualified Enterprise Level PHP Developers. While that term might sound a bit nebulous, there’s really just a handful of things that separate the men from the boys in PHP. Honestly, those traits really aren’t even that hard to learn. They’re contradictory to the “rockstar” persona so commonly heralded by developers though; which is likely why there aren’t enough good developers around.

Basically, there’s 4 things that make a developer ready for the big leagues: design patterns, unit testing, versioning systems, and experience.

Design Patterns can’t be emphasized enough. Almost every situation a typical developer has encountered, someone else has already solved. While the solution was likely in a different language, the concepts are universal. If a candidate cannot answer questions about basic design patterns like Singleton and Factory, they’re ability to adequately handle the responsibilities of a large scale application is seriously in question.

Unit Testing is an equally critical skill for any developer to understand. 90% of developers I interview typically work alone on small projects. this scenario doesn’t reveal the necessity for unit testing. Imagine that you work with 50 other developers on a project that’s hundreds of thousands of lines (if not millions) of code that’s distributed across hundreds of servers over multiple continents. Your amazing class that handles some unique circumstance will be modified by someone else who didn’t know you’re awesome intentions. How will you ensure your code works as intended without automated testing? Unit testing ensures that the concepts that sparked the intent of some software are held for posterity

Versioning systems are another area of knowledge that are surprisingly deficient in PHP Developers. CVS, SVN, Perforce, Mercurial, and (preferably) Git are software packages that any software business relies on. Not knowing the concepts of distributed software versioning software is like not knowing how to push the brake pedal on your car. You might get pretty far without needing it, but eventually you’re going to get into a situation which will crush you.

Experience. Nothing substitutes this. The brilliant young developer can make an awesome idea for his own company. He cannot serve a large company with existing ideas any better than a mediocre developer that listens to what he’s told to do. Software development is still more of an art than a science. Actually, it might be better denoted as a trade. Experienced artisans are able to accomplish things that younger folks cannot.

To re-iterate the point. Know design patterns, know unit testing, know version control software, and keep doing it. If you’ve been developing for years and are short on some of these points, take the time to learn. These skills are paramount and no one skill makes up for another. They are all indispensable in separating junior developers from enterprise level developers.

HTML5 and CSS3 Works in IE

Well, kinda …

CSS can be a major headache for unseasoned front-end developers. The intricacies of layout design and how different browsers interpret them is the bane of a designers existence. The most common problem we have is how IE has handled this.

With a few tools though, sanity can be restored to UI development.

First, always use a CSS reset stylesheet. This reduces the number of things to keep track of when doing styling by a ton. I’m personally fond of Eric Meyer’s CSS reset code.

Second, get the Modernizr javascript code on your site. There’s a number of things this will do for you, including adding css classes to the html tag indicating the browser’s capabilities, and modifying HTML5 markup to work in IE6. Trying to work in IE6 without javascript? Let it go. Somethings aren’t worth fighting for.

Third, I really recommend the HTML5 Boilerplate. Actually, just reading through that is a learning experience. Even if you d on’t use the templates, you’ll know much more about how to make a very accessible and cross-browser / cross-platform usable site.

So, with all of these tools in place, you can do a few things in your CSS that should work safely for any browser. I’m partial to Facebook-style transparent borders, so let’s start there. (Note: There is an excellent demonstration of this at CSS-Tricks that explains this very well)

HTML (5ish)
<section class="clear-borders">
<article>
<p>Lipsum, oh yeah</p>
</article>
</section>

CSS
.clear-borders {
/* the borders (older browsers will only read the first definition */
border: 10px solid #999;
border: 10px solid rgba(170,170,170,0.5);

/* again, older browsers won't understand these definitions, so they'll be skipped */
-moz-background-clip: border; /* Firefox 3.6 */
-webkit-background-clip: border; /* Safari 4? Chrome 6? */
background-clip: border-box; /* Firefox 4, Safari 5, Opera 10, IE 9 */

-moz-background-clip: padding; /* Firefox 3.6 */
-webkit-background-clip: padding; /* Safari 4? Chrome 6? */
background-clip: padding-box; /* Firefox 4, Safari 5, Opera 10, IE 9 */

-moz-background-clip: content; /* Firefox 3.6 */
-webkit-background-clip: content; /* Safari 4? Chrome 6? */
background-clip: content-box; /* Firefox 4, Safari 5, Opera 10, IE 9 */
}

The end result here is that older browsers will use the hex color border. So, when you create these colors, try to be pretty close to what your transparent color looks like in actuality. Newer browsers will pick up on the rgba and background-clip definitions.