What is the job of a programmer?
I was listening to a podcast called Voice of Design, and in the first episode the hosts ask themselves: "What is the job of a designer?" Now that got me thinking about the job of a programmer and what we're actually being paid to do.
I think a lot of people—including myself—sometimes confuse the job of a programmer as someone who knows the technical skills of programming.
There's absolutely no doubt that knowing how to program is important! But it's not the whole story. Other skills—especially the ones that are deemed to be "softer"—sort of take a back seat, and we forget how important they are to our job. So what other skills do we need to know to do our job well? What makes us good programmers?
- Communicating well. One of the biggest things that I've learned on the job is knowing how to communicate well with your coworkers, your stakeholders, and your managers. (Add clients to that as well if you work with them directly!) And I'm not just talking about being able to communicate your work to other people, but also being able to listen and being mindful of their work such as their code.
- Questioning things & assumptions. A programmer has to know why something is being built and what she can do to improve the outcome of a project. Questions such as: Why use this framework? Does this bug have a priority over this one? Why do we use this tool? Do we need this library in the first place? Is this the best workflow for the user? This was really hard for me when I first started—especially since I grew up in the Philippines where there wasn't a culture of questioning things and decisions. (Note that I'm not saying that everyone in the Philippines has this attitude or that this attitude is necessarily bad. I also understand that questioning things can be tough for women since our culture says that women shouldn't be "too assertive".)
I noticed that some people seemed untroubled by any such self-doubt—the ones who posted blunt statements, or dropped in links with no context. They responded to others’ statements with sharp critiques, “no,” or radio silence. This behavior—standoffish at best, boorish at worst—conveyed power.
Many of these people, I noticed, were men.
- Being able to organize things. One of my favorite things to do these days is refactoring. It feels like cleaning the apartment for me. (And I love cleaning my apartment.) I know that not everyone has the opportunity to do this, but having better comments, having better names for things, moving common elements to a separate module, and wrapping things up into methods and functions makes things better for both you and for future developers working on the program (or are things called "apps" these days?).
- Being able to handle feedback & criticism. Just like questioning things, I found feedback and criticism on my ideas tough. I used to feel dumb for not being able to offer good ideas. But ideas are just ideas—they're not you and it's not personal attack when people turn them down. Also realize that even if your idea isn't the right solution to the problem, other people hearing about it could build on top of it and make it into an even better idea! Yay! So don't be afraid of sharing your ideas.
- Supporting other people. First of all, take care of yourself. If you have the capacity to help other people, don't be afraid to do so! Talk to other programmers, join meetups, support other people's work, give compliments, and don't be a creep.
I wrote more about this topic in "Our Responsibilities".