The why of the thing

I once watched a TED talk where the speaker was discussing the fact that generally, we approach things the wrong way when we communicate. We will tell others about what we are doing. We will tell them about how we are doing it. The thing which we do not do enough, though, is talk about why we are doing those things. I thought it might help everyone to understand me, and where I come from, a little better if I told you about my whys.

Why do I work on the web?

Prime Male Ingredients semenax pills side effects – The secret behind what are the ingredients in extenze Prime Male’s efficacy is in its ingredients.These are 12 clinically proven t-boosters that work what are the ingredients in extenze together to restore your t-levels to what they were when you testomax really work were a where do i get max performer teenager.Here is an what nuts go on red velvet cake in-depth look at semenax pills side effects some of where do i get max performer these ingredients:D-Aspartic Acid Calcium Chelate (D-AA-CC) where do i get max performer – D-AA is what are the ingredients in extenze an amino what are the ingredients in extenze acid that doubles up as testomax really work a what are the ingredients in extenze neurotransmitter.It triggers the luteinizing hormone release, which semenax pills side effects then what nuts go on red velvet cake signals the Leydig cells in the testomax really work testes to where do i get max performer produce testosterone.In one what nuts go on red velvet cake testomax really work testomax really work study quoted by the what are the ingredients in extenze manufacturer, where do i get max performer 23 men what nuts go on red velvet cake semenax pills side effects who took a testomax really work daily D-AA dose for 12 days raised their testosterone semenax pills side effects levels by 42%.Prime Male where do i get max performer utilizes the calcium chelate form of D-AA, which is 75 times more water-soluble semenax pills side effects than other forms.Better solubility means that the body will absorb it better without upsetting the stomach.BioPerine is extracted from what nuts go on red velvet cake black semenax pills side effects pepper seeds.It is used what nuts go on red velvet cake in this formula to where do i get max performer increase the body’s ability to absorb other nutrients.The patented form used what nuts go on red velvet cake in what nuts go on red velvet cake Prime Male semenax pills side effects increases bioavailability 20 times more than standard piperine.Mucuna Pruriens Seed what are the ingredients in extenze Extract – testomax really work Mucuna Pruriens, also known as the velvet semenax pills side effects bean, semenax pills side effects testomax really work is a natural source of L-dopa, which the brain needs to make dopamine.Dopamine is what are the ingredients in extenze testomax really work a where do i get max performer neurotransmitter that is clinically proven to increase testosterone production.It is also associated with pleasure, motivation, testomax really work where do i get max performer testomax really work and reduction of stress.This what nuts go on red velvet cake herb does raise not only t-levels but also improves the quality of sperm.Boron – This mineral is useful in building strong bones, muscle mass and what are the ingredients in extenze coordination, and semenax pills side effects what nuts go on red velvet cake testosterone production.In one study, men testomax really work where do i get max performer who took Boron daily semenax pills side effects for one week showed a 28% increase in t-levels.Prime Male utilizes boron amino acid chelate, which is more effectively absorbed where do i get max performer by what nuts go on red velvet cake the body.

Despite the above, testomax really work we have found that the product may testomax really work be testomax really work decent for men suffering from semenax pills side effects a low what are the ingredients in extenze sex semenax pills side effects drive. semenax pills side effects what are the ingredients in extenze An ingredient what nuts go on red velvet cake inside named Maca Root what are the ingredients in extenze has shown promising results in a study on men with low libido levels.The where do i get max performer semenax pills side effects Pros & what are the ingredients in extenze Cons Of EnhanceRXBelow we have rounded up the testomax really work main where do i get max performer positive and what nuts go on red velvet cake negative aspects of this product:The what nuts go on red velvet cake Pros where do i get max performer where do i get max performer May help with libido levels.The ConsIs not a what are the ingredients in extenze suitable product for those suffering from where do i get max performer genuine what nuts go on red velvet cake erectile dysfunction.Will not cause longer and harder erections as described.Potentially negative side what nuts go on red velvet cake effects.Very expensive for such a basic formula.Manufacturer has a terrible trading history.No money-back guarantee.What Are The EnhanceRX Ingredients?We have found the following nutritional information via the official website:One Serving Contains: what are the ingredients in extenze L-Arginine HCI, Catuaba, Muira Puama, Maca Root, Ginkgo Biloba, what are the ingredients in extenze Korean Red Ginseng, Cayenne Pepper Extract, Saw Palmetto, Schizandra and Bioperine?Non-active ingredients: Gelatin and Magnesium Stearate.

The Internet connects us in a truly unique way. It’s like a technological worm hole. Suddenly, because of the Internet, the distance between any two points becomes almost negligible. In a world where we measure commutes in minutes, hours, or sometimes days and weeks, the subtle difference between 50ms to a local point and 200ms to Bangladesh seems quite trivial. It connects us, across the globe. The web, then, takes our new connected society and gives it a (mostly) unified way to read, create, and share. And boy do we love to share. We love to share videos. We love to share music. We love to share cats, and babies. We especially love to share cats and babies with little witty sayings stamped out on top of them. The thing we love to share the most, though, is ideas. Sometimes those ideas are bad, sometimes they’re hateful, sometimes they’re beautiful, sometimes they’re funny, and sometimes, every once in a while, they’re magic.

Why do I care about building software?

Software has the unique power to change how we, as humans, interact with the world. Software, of course combined with the hardware it enables, allows us, as a people, to affect the world in amazing new ways. Whether you are writing code for a bank that helps ensure money transfers work efficiently, writing for a startup who has found a new way to deliver cheese, or writing software that enables better communication in third world countries: you are changing the world.

When you learn to program computers, you are teaching yourself that nothing is as it appears. Everything is moldable, variable, able to be adapted and adjusted. Fluid. You stop seeing the world as a finite set of things, and start to see it as a current, but changeable state. The world is a set of problems that has yet to be solved, and I want to help solve them. However, I can’t do it alone, there’s just far too much work. I need help. I cannot do it alone.

Why do I place so much value on community?

I see community as the heart of software, really. Everything we do is iterative. Everything we do today is built on the shoulders of giants which came before us. Everything the next generation of software workers will do will be built upon our giants’ shoulders. However, most often, giants do not grow in isolation. The giants I speak of, to be clear, are ideas, not people. Mostly small, many trivial, but ideas none the less. Inside each one of us is a giant, waiting to come into being. It just takes the right set of circumstances, the right set of knowledge, the right environment, to bring them to life.

I see community as a way to feed those budding giants. I see community as way to take a junior developer, show them the ropes, show them how … squishy … the world actually is, and seed them with passion. I see community as a way to take mid-level developers and fuel their passion with ideas. Finally, I see community as a way to take senior developers and give them an outlet where they can refine their ideas, vet them with peers, and share them back to the community, fostering growth and innovation, spurring more passion and ideas.

Why PHP?

I love PHP for so many reasons, but the reason I love it most in this context is because I consider PHP the “starter drug” of web development. Open almost any basic shared hosting account, upload an index.php file, and you’ve just taken your first step towards changing the world. Within the PHP community, we have the unique opportunity to catch these new developers just as they’re dipping their toes in the lake. It is incumbent upon us to welcome them, teach them how to swim, and more importantly, show them how to teach themselves to swim better. Faster. Farther. Even more, we can show them passion. Passion isn’t unique to PHP, but our proximity to those who don’t yet know that it exists is.

Why any of this is relevant?

I have an overwhelming desire to do. To create. To build. To teach. To do. But I want to do so many things, I’ll never get any meaningful amount of them done. The only way I am ever going to make any dent in my to-do list is to get some help. I’ll need more than some help, though. I’ll need an army. An army of ruthlessly competent individuals who believe they can change the world. An army who believes they will change the world. An army equipped with budding giants, prepared to tackle anything. Software is the great equalizer. Anything is possible. The solution may not be cheap, or the solution may not be practical, but there is always a solution.

Stay tuned for more! In the next installment of “The why of the thing” I will detail my ideas on how to build this army of ruthlessly competent individuals, and how that differs from the way we teach people how to program today.

What to learn to be a better developer

Back in 2013, I gave a brief talk at php[tek] which was about all of the things you need to learn along the way to be a developer. I promised I would put up the list from my notes — and as you can see from the date, I pretty much failed on that promise. However! I found the notes! So without further adu…

PHP Coder

  • Broaden your general PHP knowledge
    • PDO
    • Namespaces
    • OOP
    • PSR-0 (and other PHP-FIG initiatives)
  • Code versioning (Git, SVN, anything…)
  • Dependency Managers (Composer!)

PHP Developer

  • Design Patterns
  • SPL
  • Unit testing
  • Basics of encryption
    • Public and private key encryption specifically
  • Code smells

Web Developer

  • Javascript
  • HTML & CSS
  • UI integration tests
  • Protocols
    • HTTP
    • HTTPS
    • SMTP
    • TCP
    • UDP
  • Learn about build automation tools (phing, make, ant, jenkins, travis)
  • Learn about deployment automation (capistrano,, etc…)
  • Pick up some solid Linux administration skills
  • Code smells (MOAR!)

Software Developer

  • Pick up more languages
  • More design patterns
  • More code smells
  • Better your testing approach
  • Programming styles
    • Procedural
    • Imperative
    • Functional
    • Object Oriented
    • Event Driven
  • Build on a new type of platform (notice the “web” in “Web Developer” went away up there?)
    • Build a desktop, or mobile app.
    • Build a server daemon.
    • Build command line tools.
  • Learn to do Security Model assessment

Software Evangelist

  1. Pick a new thing to learn, and learn it!
  2. Teach others what you just learned
  3. GOTO 1

Introduction to building a programming language

I gave a talk at San Francisco PHP last week all about what it takes to start building a programming language. For the example, I have built out a small implementation of PHP in JavaScript I called PHP.js. We talked about the process of what it takes to build a programming language, as well as why programming languages are made, and some of the decisions that get baked into them while doing so. It was a fantastic group of people and I had a lot of fun giving the talk.

Additional resources:

Applying functional programming design principals to server architecture design

It occurred to me this morning that there are actually quite a few parallels between functional programming and infrastructure design and management.

It all started by what I realized that I said while talking about environments: Production is meant to go from one stable, working, vetted version of code to another stable, working, vetted version of code. Any state between those two is invalid and should (preferably) never occur.

If you cycle on that again, you start to see that most deployment processes you know about violate this One Basic Rule(tm).

I posit that if you are deploying new code to currently running hosts that are handling traffic, you are doing it wrong.

Think about it like this: what is the one core feature of every highly scalable functional programming language? Every one has (or has developed patterns which essentially create) immutable values.

So when we scale this out of software and apply it to infrastructure, your code is the value of your server. If you are changing the value of your server while other processes are trying to access it, you’re going to run into concurrency issues. Ask any developer about sharing data between threads, and they’ll quickly tell you it’s difficult. Why, then, do we improperly share data between releases of our software?

The simple answer is that you have two options for atomic deployments that follow the rules of immutability:

  1. Drop the servers you are deploying to out of the flow of traffic. This is the easiest, but still fails to honor the spirit of immutability because the value of the server is still changing, it’s just changing while nobody is looking.
  2. Spin up new instances, and slowly work them into live traffic, confirming along the way that you are in fact getting the expected behavior out of the code.

Now, I know this is all hand-wavy because it glosses over the important aspect of data migration: I don’t have an answer there, yet. I suspect the true answer to that part of the solution would be something to the effect of being able to seamlessly decouple your entire system from write traffic (using a request proxy which could ‘pause’ calls) for some period of time while data updates are done.

What if, to create a truly fault tolerant design, you simply create a nearly 100% asynchronous  API. All requests come in and go into a process queue, and are handled from there. This way you are never required to turn off traffic to do an atomic update of your software because you can simply tell it to stop processing while the update progresses.


Upcoming travels

This week, I am in Louisville, KY at Code PaLOUsa! Next week, I leave for SXSW Interactive in Austin, TX. Right as I get back from SXSW, I take off for Midwest PHP in Minneapolis, MN.

I’m speaking at Code PaLOUsa and Midwest PHP, so if you’re around, be sure to come check out why you should care about development environments, and how to go about implementing them in your organization.

I love to meet new people, so if you see me, please come say “Hi!!” and introduce yourself.