Code Evolution: Contact Form (part 2) – A2LAMP

On Saturday, February 16th, 2013, I talked my way through setting up the same sort of contact form we set up in Code Evolution: Contact Form (part 1) using Silex instead of creating our own framework. There was a lot of invaluable discussion around the room about the value frameworks bring to the table as well.

For code reference, you can see where we started from, and what the code looked like when we were finished.

Related links:

Why you want my old job

So, for those of you who haven’t heard, I have put in my notice at my current place of employment (the Democratic Communications at Michigan State Senate) and taken a position with Mashery effective March 4th.

Needless to say, I am really excited, but it does put my current team in quite a predicament, because they really need a developer!

So let’s talk about the elephant in the room, shall we?

The reasoning behind why I am taking a new job is multifaceted, but essentially it boils down to it feeling like it was time to look at what else was out there. There is a lot of interesting stuff going on here, and a ton of benefits, but nothing I was truly passionate about anymore.

About those benefits

The benefits here are great. 5+ weeks of PTO, great insurance, 401k matching, the list goes on and on. And that’s just the standard benefits. Let’s look at a few of the technical benefits:

  1. You get to pick your own platform for new projects — as the only developer, you decide how to solve the problems handed to you.
  2. You get to work with an awesome team — everyone here “gets it.” The people you will work with here are skillful and creative, and understand how the art/science mesh of things work.
  3. You get to solve actual pain points for actual people — most of your users are in the office, or next door. Real people that you can see as much (or usually as little) as you like. Building software that you can see the impact of directly is very cool.

The down sides

As with everything, there’s some “less awesome” pieces of the job as well.

  1. It’s on-site in Lansing, Michigan. No remotesies.
  2. You will be the only full time developer on staff. While that gives you a lot of freedom, if you can’t actually swim, you will want to stay out of this water. There is nobody else to blame when your project isn’t done on time.
  3. There are on very rare occasions (2-3 times per year, we will say) some very tight deadlines. New websites going up in a matter of days. Usually the scope on these is kept fairly tight however.

The skill set required

Realistically, you need to be able to handle everything involved with building a website beyond the html/css. You will have to set up vhosts in Apache, and understand the basic workings of source control (we’re set up with git and bitbucket). Deployment strategies are varied —  new stuff uses capifony and capistrano while older stuff deploys via FTP or (and I’m very very sorry) issuing a git pull on the live directory structure.

Current projects you will maintain will involve Symfony 1.4 (current CMS), Symfony 2 (some internal tools), and Silex (other external sites). Future projects can use… whatever you care to use, provided you’re not intentionally leaving a pile of junk for the next person to pick up.

You will be given all the rope you need to hang yourself many times over, so you have to really be self-reliant on completing your projects, as there is nobody else here who can do your job, for better or worse.

Interested? Check out the job posting on LinkedIn for more information.

If you have any questions, please feel free to contact me, or just ask in the comment area below!

2012 Recap

So I wanted to take a little time and document what happened in 2012 for myself.

I think the biggest things I want t take away from 2012 are a few key lessons:

Don’t Be Afraid of What Other’s Think

If you spend your life mired in worries about what others will think of what you are doing, you will never get anything done.

Just do.

Too much of our lives (collectively) are spent wondering about what others will think about what we are doing? So what. Who CARES if you are wrong. People are wrong ALL OF THE TIME. What matters is that you are not so attached to your wrong opinion that you don’t change it when presented a valid argument otherwise.

It’s said the most ‘thought to to be smart’ people aren’t smart because they’re right but because they are quick to change their minds.

I, of course, have the luxury of never particularly caring what others have thought of what I say or do. It’s lead to some pretty awful predicaments — but some pretty awesome ones too. Who, among my close friends, would have pictured me as being one of the ones to immediately volunteer for Symfony Jeopardy at Symfony Live? Especially when I am culturally dumb and (at time time) was quite technically deficient. That didn’t stop me from answering the only then-to unanswered question though!

Just do.

Go up in front of everyone, be a goof ball, have fun, laugh, be silly. Anyone who actually cares in a bad way isn’t anyone you want to associate with anyway.

Just do.

Don’t be afraid of what others will think. Seriously. Most commonly, what most other people will be saying is “Gee, I wish I could do that!” And you know why they can’t? BECAUSE THEY ARE AFRAID! 99% of the people who would say anything negative would never have the nerve to do anything like what you are doing. It’s 100000x easier to criticize than to produce. Be sure to check the background of those who give you negative feedback and take their input with the appropriate level of expertise it warrants.

Just do.

Get out in the community

The PHP Community in general is AMAZING. It’s full of brilliantly smart people you can talk to, and gives you external input to your internal processes. If your local community isn’t as as deep into the things you are? Learn to teach them! Learn about how to talk to other developers, how to share your skills and techniques. You’d be surprised what you’re capable of.

If you haven’t spoken to groups before, consider giving a few talks to a local user group. Most likely they’re running their regular speaker lineup through the wringer, week after week, and offering to talk about something (anything!) that you know even passingly well enough to talk about (I once essentially winged a talk about design patterns — shhhh!).

The other thing being in the community will do is give you a feel for the pulse of where things are heading. There are currents and drafts in the community which you don’t catch unless you’re paying attention. See what’s on the horizon, and pay attention. You’ll never know what you’ll miss if you’re not paying attention.

Prove you can ship

I can’t reiterate this enough. The value of someone who can actually ship a product is waaaaay above someone who can only point to minor contributions in a larger project. If you’re one of those nameless cogs in a giant organization, it’s time to join an open source project or build your own thing on the side. Seriously. Nothing shows your value more than being able to to actually ship something. In the world of business, ideas are cheap, and execution is everything. Show people you can execute, and you will open doors.

Know your stuff

Read up on the important things core to being a high quality software developer: Patterns, Anti-Pattens, and Code Smells, among other things. These will teach you the do’s and don’ts of our industry, our trade. They will show you what to do, and often more importantly, what not to do. It’s the same as new inductees into Martial Arts learn Kata’s, new developers need to learn these patterns, anti-patterns, and code smells. It gives you the tools to reflexively approach similar problems in the future, and tools to expand on when you need to create something out of thin air.

Don’t be afraid to be wrong

Look at my blog, or the advice I give out in #symfony — I’m “wrong” all of the time. There’s usually a much more efficient way to do something than I recommend — but I don’t know it! I help people get stuff done. The academic stuff can be left for those Ivory Tower folk. I’m much more interested in what gets stuff done in the trenches. Getting something done is more often much more important than doing it in the best possible way. Working implementations refactor much quicker than potential implementations grow while wandering in the sea of WTF I HAVE NO IDEA WHAT I AM DOING?!. Being wrong is not a bad thing. It means both that you were strong enough in your opinion that you could voice it, and that when presented with solid contrary evidence, you changed your wrong opinion into a right one. How awesome is that?!

Enjoy what you do

We’re in this because we have a passion for either building better code, or building things people love to use, or hell, even just building things. But if you’re not enjoying your work — seriously the door is right over there. Life is FAR TOO SHORT to spend your days doing things you loathe. If you’re going to do something for your career, make sure it’s something you enjoy. I avoided doing development as an actual full career for many many many many many many many many years, because I was afraid that if I took what I loved and made it a job, it would never be the same. Interestingly, I was right — it was never the same. Now I love going to “work” almost every single day. Seriously, it’s that simple. Do what you love and you never work a day in your life. Honest.

Now with that out of the way

You may be asking yourself “But this is a recap — what do YOU do during this year?” Well, let’s see:

  1. I went to Symfony Live.
  2. I started blogging more regularly.
  3. I was more active in #symfony, #silex, #phpmentoring, #protalk, and #symfony-dev (yikes, right?).
  4. I contributed to the Symfony Documentation.
  5. I started attending User Groups regularly (in Lansing, and Ann Arbor).
  6. I gave a talk in front of 100+ people.
  7. I gave a talk over 30+ minutes.
  8. I have at least one person using one of my open source bundles for Symfony2
  9. I have given three people technical feedback on their technical products which have (I feel) reasonably improved the quality of their product (I think I have a knack for this — have sent an email to php|arch to be a technical reviewer — look for this in 2013’s recap!).
  10. I convinced my 4 best business friends to all be business friends together.
  11. I started mentoring officially (Uzo, Luis, and Yitzchok — you guys are the best folks a mentor could ask for, really!).

What do I want to do, going forward?

I’ll tell you what’s on my list.

  1. I want to launch a product (in the works)
  2. I want to give a mainstream talk at a conference (not an unconf talk)
  3. I want to be more involved in the community (you guys are awesome, seriously!)
  4. I want to help more people hate their jobs less (hey, it’s what I do…)
  5. I want to blog more (is this cliché?)

Anyway — 2012 was great, let’s make 2013 even better!

Why developers outside of Symfony should care about Symfony Live

If you haven’t checked them out already, go to Symfony’s “Talks” section.

Now, this is great for all of us Symfony developers, but it’s also a good thing for php developers in general.

If you’re a Symfony developer already, you know what you’re interested in there, so I’m going to focus on what non-symfony developers can get out of this treasure trove. Also, these videos are also available in French through the talks section.

Talks that apply to everyone

Designing HTTP Interfaces and RESTful Web ServicesDavid Zuelke gives an excellent presentation on what restful web interfaces mean, and was actually the driving inspiration behind my dedicating my Symfony Live hack day project to the Accept Header Service Provider for Silex, as well as this pull request for the Symfony core.

Talks for programmers

Behat by example (Behat best practices)Konstantin Kudryashov walks you through how to do approach BDD in a way that makes sense. I haven’t watched it yet myself, but it is definitely on my list.

Symfony2 components to the rescue of your PHP projectsXavier Lacot goes over how you can use symfony components in your every-day php projects to make your life easier.

Using MongoDB responsiblyJeremy Mikola gives a talk about Mongo DB. Really, who’s surprised? I haven’t seen it, but it’s on my list, and I’m sure, knowing Jeremy, that it is “web scale.”

PHP developers, what can Postgresql do for you?Grégoire Hubert gives a talk about Postgresql, why you should use it, and what advantages it has in store for your next project.

ORMs don’t kill your database, developers do!Guilherme Blanco shows you some ways to optimize your setup when dealing with an ORM. I’ve heard there is some controversy on some suggestions within, but I think that just makes it juicer.

Dependency Management with Composer — If this is anything like his talk in San Francisco (and I’ll just go ahead and blindly assume so!), Jordi Boggiano gives an excellent overview of what you can do with Composer and how to take advantage of it right away.

Talks for frontend developers

How we built the new responsive BBC News site — Really. Need I say more?

twig.js: The Templating Engine for the Client-SideJohannes Schmitt gives a talk about the very interesting twig.js javascript templating library. I seriously need to look at this one as well.

Still need more?

Richard Miller gave a talk on what you get from a full stack framework. I haven’t watch this, as I have already drank that particular kool-aid, but if you haven’t made the leap yet, I’m sure he presents some compelling arguments. If, after it, you’re still not sold on full stack frameworks, just wait until Dustin Whittle’s Silex talk from San Francisco is up. It will blow. Your. Mind.

Working with Silex

Update: Gregorie Pineau pointed out to me that this was already done, so I will refer you to the more canonical resources: Silex Skeleton and Silex Kitchen Edition.

Update #2: However it does seem that my setup may be even more minimal than even Fabian’s Skeleton, which could be a benefit to some.

One of the inherent problems of micro frameworks is the tendency to just go … willy nilly … and put your files in any ol’ spot. It makes the code look awful and hurts your brain trying to comprehend where to handle your changes, and then your project turns against you.

To that end, I want to help! Who’s surprised? Awww, c’mon! Pretend? Ok. Thanks.

I have created a Sample Silex Install on GitHub that shows some of the best practices for working w/ composer, and getting off to a great start with your next Silex project.

Questions? Comments? Please leave them below!