Simple reminder to keep it simple

This morning a tweet caught my attention prompting me to read this post by Gary Hockin also known as @GeeH. (There’s just something about that voice.[inside joke])  In the post he talks of his experiences while attempting to simplify code in a project, and in the process uncovers hidden dependencies that increased the codebase significantly in order to gain the benefit of a mere 100 lines of code.  He also highlights that in today’s mainstream PHP development, where many are using Composer to blindly include packages into applications, we may not fully understand code being pulled in with the consequence of accepting responsibility to maintain those additional packages as well.

I’ll wait a second while that sinks in…

Yes, that’s right.  If you include additional packages and libraries into your application you’re accepting the responsibility to maintain them.  No, I’m not saying you are responsible for contributing to the software package…unless you care to.  What I’m saying is you are now in charge of updating the software within your application, which now includes additional packages created by others.  As security holes get fixed, or new versions come out fixing bugs, it is up to you to ensure you update these packages in your applications which include them.

You’ve been living in a dream world Neo

Ha, didn’t think about that, did you?  If you did, Bravo, you’re behaving like a professional.  For the rest, welcome to reality.  Now go update the applications you’ve neglected.  But first a side note.

I’m not saying Composer is bad.  Actually I think the opposite.  Composer is awesome, and you should be using it if you’re not already.  As in the post by Gary above I’m simply saying it’s our professional duty to know what we’re asking Composer to do on our behalf.  Use it responsibly and do a bit of research so you’re not blindly including potential issues, bugs, security holes, and nightmares to maintain in the future.  Then if you’re satisfied with what you see, go ahead and “require” away.

But wait!  Don’t just look at the packages you’re including into your codebase.  Also take a look at their dependencies as well, because you are also accepting them in the process.  Know what you’re saying “yes” to.

Past knowledge

None of what I’m saying is new stuff.  A while back, in the beginning of 2012 (I thought it was earlier for some reason), Ed Finkler @funkatron wrote the original MicroPHP Manifesto to voice his concern over many frameworks starting to grow in size. (NOTE: Later there was a separate domain dedicated to housing the MicroPHP Manifesto, but I like the original better because the blog post associated with it helps highlight why it’s a concern.)  I encourage you to check it out and consider the meaning, and how it relates to your projects.

Again, nobody is saying large full frameworks are evil or other libraries should not be used.  The idea behind all of this is to caution, so you go in with your eyes open and “know” what you’re including in the codebase.  Know the responsibilities accepted by including other libraries.

Happy coding!

Developer advice

As the organizer of the SoFloPHP User Group I am often approached by entry to mid-level developers asking what they can do to advance in their career or become better developers.  Of course I am nowhere near perfect but have been around long enough to get a few bumps and bruises along the way, so below is what I usually share as some pointers:

Note: While some of these items are kind of PHP specific, others may find useful items as well.

  • No self-respecting person should be up at 4:05am sending emails.  Get some sleep. 🙂  It is OK to stay up late once in awhile, but force yourself to get to bed at a decent time (10) each day.  And try to get up early each day also (6 or 7), which will help you get much more out of your days. 😉
    • The myths about developers working all night on caffeine are false.  Yes, it happens sometimes, but it is rare.  Well rested developers learn more, write better code, and get more work done…period!
  • Track your time, and get in the habit of knowing what you did with each hour.  I personally use Hamster religiously, and find that I get much more done each day as a result. (I have it set to nag me every 15 minutes if I have not set an activity.)  If you are not using Linux as your desktop environment I am sure there are time trackers for the other operating systems, find one.
  • Certifications will not actually carry much value on your resume, so I would not make them a main focus.  Sure they do carry some value, but perhaps not in the way you desire.  Achieving a certification is a great personal accomplishment and will make you feel better about yourself, as well as give you bragging rights among developers.  (Most developers tell you they don’t care about certifications, but deep inside they are simply envious.)  While many certifications are not a true gauge of actual knowledge, they do represent a certain amount of skills.  However, I have found that most employers do not even notice certifications.  I am not saying don’t get them. What I am saying is to be aware the actual accomplishment may be different than you perceive.  When I started getting certifications it reinforced, in my own mind, that I knew what I was doing.  That gave me more confidence overall in my jobs, and was still a big “win”.  But do them in your spare time, not as a focus item.
  • Pick an IDE to use and learn it FULLY. I will not recommend one in this post, so explore and find one that fits how you want to work.  Then learn it COMPLETELY, and use it ALWAYS.
    • If an IDE causes you pain, don’t use it any more.  Pick another one.  This tool will be where you spend most of your day, so you should not be forced to spend your time debugging and fixing your IDE.  It should not crash regularly.  You should not dread opening it, instead you should look forward to launching it.
    • Use all parts of your chosen IDE. (FTP, version control, testing, coding, debugging, issue tracking, etc.)
    • Learn the keyboard shortcuts, they will save you time.
    • Just because an IDE is free does not mean it is good.  You should base purchases on value provided, not $$$.
  • Pick a plain text editor, and learn it well.  There are times you just need to do a quick edit, and opening an IDE, creating a project, etc. is just overkill for this.  Again, there are many of these available so I will not recommend a certain one.  Pick what you like best.
    • The best ones come with syntax highlighting.
    • There are some free ones, but don’t be afraid to pay a few bucks for a good one.
  • Pick a pet “full stack” PHP framework to learn, FULLY.  I recommend either Zend Framework 2, Symfony2, or CakePHP 2.* since these 3 are the most common.  But as with an IDE you should learn one COMPLETELY, and use it most of the time.  Each framework has its strengths and weaknesses, so choose one that works best for you.
    • Good frameworks have mechanisms in place where you can add plugins, modules, or helpers in case the framework does not fully support what your trying to do.  But stick to the framework as much as possible.
    • Feel free to write your own framework, but ignore the urge to use it for employers.  As professional developers we owe it to our employers to use more widely available frameworks.  It is just smart business.  It means businesses can find other developers easier, onboard them faster, and train the group more.
  • Always strive to make yourself replaceable.  If you are replaceable you are also promotable, and you can go on vacation pain free.
  • Learn to use GIT for source control, and use it for EVERY project you do no matter how small.  Sure there are other source control products out there, but currently GIT is the way to go.  All it takes is the command ‘git init’ in a directory and you are of and running.  No excuses!
  • Do things publicly so others can see.  Such as github, BitBucket, etc.  I recommend having code in some sort of public place for others to see how you code.  Don’t be shy.  I’ve had other developers provide feedback on code I posted on github, in a constructive way, and it helped me advance my skills.
  • Your LinkedIn profile is your best career tool as a developer.  Tweak it, adjust it, get everyone you can to contribute to it.  Add projects to it, etc. (See “Build your brand” below.)  Don’t connect with everyone who pops up, and be stingy with what recruiters you allow to connect with you.  If someone is not going to help your career in some way, they do not belong in your connections on LinkedIn.
  • Pick up small projects here and there that are NOT urgent, and you can take your time on.  These little projects will afford you a way to learn new things.
  • Get active in the PHP community.  I mean really active.  Sure, it’s OK to be a member of other communities as well, but the PHP community (world-wide as well as local) is what will really “do it” for you. (If you are going to make a career doing PHP.)
  • Give talks at local user groups, blog about your experiences, follow other blogs of good people (phpdeveloper.org is a good place to see activity of PHP community members blogs. Chris Cornutt does a great job at filtering out relevant posts and adds the best of them on this site.)
  • Get somewhat active on Twitter, join IRC channels, travel to a couple of conferences each year and get to know people “doing things”.  Then eventually start submitting talks to the conferences so you can go talk, and have your expenses covered to go to it.
  • Build your “brand”.  By this I mean to say YOU are the product.  Everything you say and do is your offering.  Your name is your “brand”.  Build the reputation carefully, and before you do anything ask yourself, “Will my customers like/buy this?”  If the answer is “yes”, then go for it.  If the answer is “no” re-evaluate.
  • If you are a woman, be careful.  While women are becoming a larger part of the tech community there are still many men who are not used to it yet.  They are jerks, and your feelings will get hurt sometimes in the process.  Learn to ignore them and focus on the good parts as you grow.  KNOW you are going to do great things, and work toward that progress.
  • Learn Linux via command line.  No need to go crazy with this one, but since most web servers are on Linux it is a good idea to have some knowledge in this area.  You should at very least know:
    • Basic vim commands to edit files on the server.
    • Be able to navigate the OS files and directories.
    • Be able to manipulate files on the server. (cut, copy, paste)
  • Spend some time each day on Stackoverflow.  Try to pick a problem someone posted and help them.  “Doing” is the best way to learn, and there are plenty of problems posted to Stackoverflow daily.  This is addictive, so manage your time and limit yourself.  But do it!

Of course there are many more tips, but I wanted to hit on some key items without writing a book on this blog post.  I hope you find this information helpful, and if you can think of some other hints and tips please feel free to share in the comments.

Good luck!!!

PHP usage statistics

Every once in awhile I stumble across someone who is trying to find their way and decide what they  will do in their career.  As the organizer of a PHP user group I see many new developers passing through.  Of course I always speak of how strong PHP is in the web markets, and encourage new web developers to pursue PHP as a tool in their box of goodies.  Because as a web developer it would be a career limiting move to not have any knowledge of PHP.  Here is why:

Stats on website technologies

http://w3techs.com/technologies/overview/programming_language/all

In the link above we can see some enlightening metrics on PHP usage in websites:

  • PHP is used by 79.8% of all websites where the server technology is known.
  • The next closest competitor is ASP.Net at 19.8%.
  • Java is seriously trailing in web at 3.5%.
  • Ruby is hardly represented at 0.5%.

NOTE: A website may use more than one technology, so the numbers are not a perfect 100%.

I was a little shocked to see how high the numbers were when I saw them.  I mean, what about github, and Basecamp, and other sites using alternative technologies?  Well, after more thought I realized that while these popular sites do use non-PHP technologies, they are just single sites.  However when taken into account in the scope of the entire web, they only count as one.

Note on limited career moves

Now don’t take what I am saying totally wrong.  I am not so naive to think a web developers cannot survive without PHP in their toolbox.  I realize there are many developers using alternative technologies who have never touched PHP, and they are able to survive.  I am simply saying that if a web developer really wants to do well they will run into PHP more often than not, and it would be a shame if they were not able to play in that ballpark.

The 20.2% of websites not using PHP is still a very large number.  According to Netcraft there are around 672 million active websites at last estimation.  Which means there are around 139 million websites not running PHP.

PHP Versions

To get a little more fine grain, lets look at what version of PHP is being used:

http://w3techs.com/technologies/details/pl-php/all/all

In that link we see:

  • PHP version 5 is used for 97.1% of all PHP websites.
  • PHP version 4 is used for 2.9%

For those still using PHP 4, it is time to make solid plans to get updated.  It has been almost 9 years since PHP version 5 was released.  That is a very long time, and those old PHP 4 sites and applications need to be updated. (Aim for the current version 5.4)

Now within PHP version 5 there are many sub-versions, so to gain more insight into how this breaks down we look at the following link:

http://w3techs.com/technologies/details/pl-php/5/all

So:

  • PHP 5.2 and 5.3 make up the largest share with 93.2% of the overall
  • PHP 5.3 is 49.6%, which I think should be higher
  • Newer 5.4 is very low at only 4.1%.

I was sad to see version 5.3 was not significantly higher than 5.2, but it kinda makes sense.  Because 5.3 was such a drastic change in the object model introducing namespaces, late static bindings, and closure, many developers feel intimidated to update their servers from 5.2 to 5.3 even though the upgrade would most likely not break anything in their code.

I would encourage anyone running their code on 5.2 to try out 5.3 or 5.4 on a “testing” server, then if all is well plan to migrate in production as well.  Then they can take advantage of more speed and include some of the new technologies that came with 5.3 and 5.4 in their code.

We can clearly see how much PHP rules the web space.  But what about elsewhere?

Overall programming language usage

I thought I would share another stat about programming languages as a whole, regardless of where they are used.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Here we can see PHP still ranks pretty high, and has been holding pretty steady for some time. While PHP rules where it was “intended” to be used (websites), it is versatile enough to still rank high overall.

In closing

So yes, there are many programming languages out there and I encourage all developers to learn as much as they can. But as professionals we cannot possibly learn them all and be good at all of them.  So I say pick one, and learn it very well while still dabbling with others.

There is nothing wrong with building a career around PHP, and it can be quite profitable since PHP is so wide spread.

Above all, live up to the title “Professional Developer” and always strive to learn more. And if you are a web programmer it would be a mistake in your career (in my opinion) not to know the most predominant technology in the space…PHP.

Hack-a-thons are not “normal”

In life I tend to do things a bit strange.  Not what most would consider “normal”.  For instance, I run thousands of miles each year and have been known to run up to 100 miles in a single week. (Yes, run.)  I am a black belt in Judo, and enjoy being thrown to the ground, only to bounce up and get my turn bouncing someone else.  I love scuba diving, and feel a great sense of relaxation while deep under water with only the sounds of my own breathing and bubbles around me.  I’m the organizer of a PHP user group, and the organizer of a PHP conference.  My family and I take vacations where we hike 30 or more miles over a few days, and come home feeling rested.  To top it all off, I love to refactor code!

So, no, I do not live life in the “normal” zone.

However, when it comes to coding PHP I do things pretty much as you would expect from a senior developer.  Most of what I do is pretty normal, with only a small dash of interesting here and there to satisfy some exotic needs.  Of course I spend most of my time these days refactoring other people’s code, but even then it is pretty normal and usually falls into a normal pattern.

Then a couple weeks ago I had the great opportunity to organize my first hack-a-thon for the South Florida PHP User Group (SoFloPHP), and it sure was an eye opening experience for me.  Things kicked off pretty normal as most attendees split up into groups and started discussing their projects for the day, and the coding began.  I also had a small project I intended to work on, but ended up spending most of my day pulled between groups to help out in one way or another.  Questions on how to set up hosting, how to use Git version control and github, as well as how to use CakePHP.  I loved it, and really enjoyed helping others with their projects.

Later in the day I was helping someone with a Git workflow when he said something that hit me squarely in the face.  He said, “I do not get to use Git in my normal job, so it is nice to do it here.”  Now this is not the first time I have heard such a thing, but for some reason it really sunk in this time as I realized that hack-a-thons are not for “normal” things we do every day.  Instead we enjoy hack-a-thons and other social coding activities because it affords us a chance to learn new things, use technologies we would not normally get to touch, and to go beyond our “normal” things.

This opened up a whole new world for me, and from now on I have another way of looking at these social activities.  Attending activities like this are educational, enlightening, and door opening as well as presenting a social aspect that really helps developers advance their skills and networks.

I can’t wait until the next one.

How to grow a tech community

I had the unique opportunity last night to attend a local community meetup where local businesses were brainstorming on how they can attract, and keep, technology professionals to the area.  Years ago Florida made a solid investment in technology when they brought a direct pipe to the Internet through the state.  However, most technology professionals still tend to leave Florida rather than stay.  I live in Boca Raton, Florida and the meeting was held close by, so I decided to attend and see what it was all about.

As most know, I am the organizer of the South Florida PHP Users Group and I am passionate about helping the PHP community grow in south Florida.  Over my years as a developer I have noticed the decline of technology in this market, and specifically the PHP community.  It was this that led me to organize a group dedicated to turning this trend around, and and grow the PHP community rather than continue to watch it decline.

The Meeting

 The meeting started with networking where everyone exchanged business cards and talked, then gathered around a HUGE conference table where the meeting began.  I quietly listened as a new co-working facility was announced, and as the idea of a “computer lab” was brought up as a way to help teach new college students learn things they were not getting in their classes.  Then the conversations gravitated to how local universities were not teaching students everything they needed to know.  The topic of how local businesses should use internships to also teach students “on the job”, then retain them as employees later.  One business owner quickly spoke up and said they did not have the time or money to take on such an endeavor. (Hinting at the true problem in the area, but quickly skipped over.)

The conversations highlighting each persons view of the same topics continued, and anything of real substance was not truly mentioned.  I turned to a fellow developer and said, “They really don’t get it, do they?”  His reply was, “Then tell them.”

After listening to this misdirection for almost an hour I could not take any more, and finally broke my silence.  In my opinion, these are the things that companies can do to attract, and keep, technology professionals. Below is what I covered:

Disclaimer

First, let me state that I realize all companies are not bad.  There are many good companies out there who do treat their developers very well.  I also realize there are companies who pay their developers well, and provide an awesome working environment.  And finally, I realize there are companies who treat their developers as professionals and trust their input rather than using them as a commodity.  I also want to go on the record as saying that south Florida is not unique in how the tech community is mistreated, sadly there are many others.

Also, I realize all people have differences.  Therefore some of my recommendations below might not apply to all.  However, I would assert that my recommendations fit the largest percentage and have been shown to work well with multiple teams I have built and managed.

Working Conditions

Technology professionals need a space with little distractions.  It has been shown that distractions severely hinder professionals because it takes a HUGE amount of time for us to get back into the groove. (some estimates put this number at 20 minutes to get back to where we left off)  So why do companies think it is cool to stuff a bunch of developers into a room sitting around a huge table, or multiple tables, where every movement in the room pulls their eyes away from the screen in distraction?  (So, every time someone moves it causes everyone to loses 20 minutes of productivity.  So how flexible are deadlines?  And how many developers can the company afford?)

Do not mix developers with the general population!  The other staff in the office has no reason to bother developers while they are working.  By not providing a “developer area” it literally cuts productivity in half, or less.

It has also been shown that office workers need their “personal space”.  Not only does this make employees comfortable, but it also allows the employee to “mark” their territory and make it their “home”.  Doing this has been shown to create longevity in employment.  If someone feels at home they are less likely to leave.  Allowing someone to create their space gives a perception of “ownership”, and humans do not leave things they own.

On the other hand developers do like to be able to communicate freely, and having them close together makes sense.  However, I have found that providing a personal space with low (waist high) dividers is wonderful.  It gives developers the personal space they need, and also allows for collaboration when needed/wanted.

Remote or Telecommute Workers

Please do not be alarmed, I am not going to say that all developers should work remote.  However, I think that many are capable of doing it and being more productive as a result.  Many smart companies do tend to stick their developer in a side room somewhere and instruct nobody to talk to them.  (See the Working Conditions section above for tips on how to do this well.)  So, does it really matter if this room is on-location?

Also, if a group of developers desks are put in a room, we notice that very little talking actually happens in the room?  Yet developers seem to “know” what each other is thinking?  This is not voodoo magic.  The developers are regularly communicating through IRC chat or instant messages so they do not disturb each other. (See the Working Conditions section above for why distractions are bad.)  So, if they are communicating without talking or even looking at each other, why do they need to all be in the same place to begin with?

Companies that allow remote working are still able to manage pretty well by having regular meetings, where everyone is required to attend.  This is often used when planning a new project or to relay very important events.  The rest of the time they do not really need developers to be “on location”. (Imagine the money saved for office space!)

Sweat Shop

Most developers actually work around 6 hours per day.  Please do not confuse this to be “Most developers do technology things 6 hours per day”.  That would be a lie.  Developers actually put many more hours into technology each day, but only around 6 of it is actually “work”.  No, just because developers are in front of the computer until 8:00pm does not mean they are getting THAT much work done.  The project will not magically get done faster by keeping developers around longer each day.

Also, please do not fall into the old habits of over-working employees to cut cost.  Forcing a group of 4 developers to regularly work an extra hour or two each day, or God forbid weekends, means another developer hire is needed.  Do not over-work developers.  Adding hours to their schedule does not really get more done, and it will ensure developers leave to work elsewhere.

If you are asking, “What are developers doing after this 6 hours of work each day?”  The answer is probably not as bad as we may think, unless they are not treated well.  Usually they are learning new technologies, or reading blogs and communicating with other developers to keep current, and unfortunately looking for new jobs if they are over-worked regularly.

Future Community Hurt By Moving Too Fast

Many graduates and entry level technology people in south Florida have a very tough time finding a job.  Companies in south Florida, and perhaps everywhere, are moving so fast and have very little money to help grow these entry level folks into a contributing member of the tech community.  To companies who already have a few developers, please augment the team by hiring one entry level person.  Trust me when I say the entry level developer will quickly learn and will be contributing very soon, and may even be the best developer later because they will learn things the “right way”.  Companies will get much more than their money’s worth.

Training (I did not mention this, but should have)

Technology never stands still and is constantly on the march.  New things come out every day, and technology professionals work very hard to keep up with all of this information.  Yet companies do not seem to realize how helping technology professionals learn will inevitably help them.  Companies that help developers learn will benefit.  I am amazed at how many companies will not send their people to developer conferences, or other training events happening.  Not only do these conferences teach new things, but it also allows developers to network and build friendships to help them with problems later.  Then these same companies expect their people to somehow “know” these new things.

On the other hand, if there is a “sales” conference going on, many companies jump at the chance to send as many people as they can.  Then the salespeople re-learn the same techniques and practices that have been taught for decades.  Sales technology has essentially not changed for a very long time.  Seems a little backward, yes?

Respected as professionals

Companies are not professional developers, and many of them have no idea of how to develop.  That is OK, because it is not their expertise, so they hire developers to fill that need.  However, it seems that very few companies actually allow developers to provide their professional advice.  Instead of listening to developers for time estimates, functionality tips, testing requirements, and hardware needs, these things are all ignored to meet some fictional perception the company has for building the application.  Of course the result is typically failure of the application, and ultimately failure of the company or startup as well.

That is kind of like seeing a doctor because we’re sick, or a carpenter to build a house, then telling them how to do their job.

Companies, please respect developers professional advice.  Don’t force them to write bad code to meet unrealistically short time requirements, lack of testing, and poor hardware.  If you hired a professional, let them be one.  Insist they be one.

Salary

I saved this for last because while salary is a concern, it is usually not the largest concern for developers.  If a developer is treated professionally, encouraged/supported to attend training and conferences, not over-worked, and given a nice working environment, they generally are more forgiving of a lower than average salary. (within reason)

Speaking on behalf of developers in south Florida, salary is an issue.  Not only do most companies not follow my recommendations above, but they are also the lowest paying companies in the country for technology related jobs. (By around 10%.)  Meanwhile the cost of living in Florida is among the highest.  This has led many technology students graduating from south Florida universities to leave Florida and go to other areas where salaries are higher.

Now I’m not saying companies in south Florida should immediately start paying 10% more to their developers.  It takes time to make that move.  But perhaps companies should pay less attention to salary when hiring, and focus more on job requirements.  They may find their projects get done faster, better, and more professional because of hiring more qualified developers versus cheaper developers.

Closing

As I found in the meeting I attended, companies do not seem to know how to truly attract technology professionals to the area.  So I decided to help them by writing this post.  Of course there are other things that also help attract technology professional, but if the items I mention in this post are not present then they will not stick around.  We can have the best hackathons, the most awesome coworking spaces, computer labs, and the most funded community events.  But if the developers are not happy at work, they will slowly migrate to areas that offer happy work places.