pen
Chartley Designs
  • Home
  • Blog
  • The many hats of the modern programmer

    2024-03-26

    Introduction

    The modern programmer has to wear many hats. I started to lose my hair at a young age… I learned to wear many hats. But those were ball caps. What we’re talking about here is metaphorical hats, the kind you wear when you need to change your perspective on the fly. Here’s a few of the most important ones:

    • the coder
    • the engineer
    • the professional
    • the human
    • the artist

    If you wear these hats comfortably, it’ll show in the work you produce. It isn’t to say you need to master all of them, certainly we’re allowed our strengths and weaknesses. You could probably specialize in just one of these areas and bank your career on it. I think the important part is being aware of them, and allowing some attention into the constant improvement of all of them. So, without further ado, let’s start with the coder.

    The coder

    The Coder is proficient with their tools, especially their text editor. I think the fundamentals of a good coder are shared with many other computer-based professions. Most of it comes down to knowing your computer, its operating system, its software, and your accessories. But specifically, what skills make a really good coder?

    Typing

    I think we all hold an image of a coder being an extremely fast typist, but if you ask me, I don’t think that being an extremely fast typist is all that important. Programming is more about navigating your code base, making edits, thinking, and testing. Much like speeding in an automobile, the gains from extreme typing speed are marginal. All that being said, I think its crucially important to be able to type without looking at the keyboard. I think ability to focus and flow is important, and constantly looking up and down breaks this. So, master that home row, focus on being ergonomic and comfortable.

    Text editing

    The ability to type leads into the next crucial skill, the ability to edit text. The ability to edit text depends on both a coders proficiency with the keyboard and the text editor itself. The choice of editor itself is subjective, but it is crucial to know it well. Know its shortcuts, ecosystem, plugins, and its limits. Some editors, like Vim offer a novel way to navigate and edit text that can offer an efficient workflow after some practice. The effective coder uses an editor they’re proficient with.

    Plugins and IDEs

    The ecosystem of software for editing code is complicated. Some, like Vim are purely text editors but can be expanded with plugins to create a more complete editing environment. Others, like VS Code are text editors with a much more rich ecosystem of extensions and plugins. Others yet, are Integrated Development Environments (IDE), that offer a complete suite of software for authoring, testing, and automating the production of applications.

    Whatever solution you choose, its important to understand its ecosystem, and whats available for debuggers, linters, code completion, test runners, and other features crucial for development.

    To summarize, the coder knows their tools in depth. I think knowledge of these things is distinct from knowledge other aspects of programming, such as language syntax, programming patterns, or application architecture. Those fall under the umbrella of the engineer.

    The Engineer

    The engineer is wise and knowledgeable. They think in terms of problems, and the solutions to solve them. Some of the questions an engineer would attempt to answer include:

    • What are the requirements of the project?
    • What are the issues affecting its performance?
    • What might the most effective language and ecosystem for this task be?
    • What should the data look like? What schema should it follow?
    • What would the most effective algorithm be for a heavy computational task?
    • How should the project be structured, so that it can be effectively maintained?

    An effective engineer understands concepts common to all programming languages such as data structures, programming patterns, network and security protocols, and databases. I think it’s also important as an engineer to specialize and deeply understand one distinct area, whether it be a programming language or another area such as machine learning. In summary, an engineers greatest assets are their knowledge, experience, and ability to problem solve.

    The Professional

    Knowledge, and being good with tools isn’t always enough. It’s also important to be professional. This is what is really meant when we talk about ‘soft-skills’. A couple of things that define a professional:

    • They work well as a team member
    • They are accountable
    • They are humble, and constantly willing to learn
    • They have excellent communication skills
    • They are punctual, and respect others time

    Being professional is important. It’s not something you can easily display in a resume, so it may not help you get a job. But it can most certainly help you advance your career. Not only will it benefit your current position with your company, it will accelerate your networking prospects with others. The nature of how you interact with others can have compounding gains, because you will more quickly be the solution to problems.

    Being professional is also a less stressful way to live. Your interactions with others will avoid tension. Your commitment to learning means you’ll never behind the current needs. Being punctual means you’ll never be rushing or inconveniencing others. Negotiations will be easier, because others will have an inherent trust in you. Being less stressed means you’re going to be happier as a human.

    The Human

    The human knows how to take care of themselves, and this is something that is getting more difficult in modern times. Between work, family, and personal needs, life feels like a juggling act. To be effective in any role, it’s important to be in sound physical and mental health. Some things we can do to make sure we are effective at our work include:

    • Getting enough sleep
    • Eating well
    • Managing energy levels through adequate exercise and relaxation
    • Employing healthy habits and daily routines
    • Managing mental health
    • Having good relationships in their life
    • Pursuing personal hobbies, projects, and goals

    Nothing in a persons life exists in isolation. Personal, family, and professional matters can all have profound impacts on each other. A holistic approach is needed to manage the different aspects of our lives.

    The Artist

    The role of the artist in programming isn’t new, but I think it is increasingly important. I think the rise of AI exposes a problem. That isn’t to say that AI is the problem, because it really is an empowering tool. I think AI, and our suddenly heavy use of it helps diagnose a problem. The problem is, we are gradually losing respect for our own work. We have respect for our results, but not our practice.

    Prior to web development, my career was carpentry. As a carpenter, I saw a pattern that is familiar with what I see in the world of software. Many carpenters these days are much closer to ‘product installers’. We buy click flooring, pre-hung doors, assembled cabinets, and we just slap them in. We no longer work with raw materials, we are just after the fastest result. The problem with this approach is that the fundamentals are forgotten, and those fundamentals are most important when it comes to problem solving and planning. Increasingly, solving a problem means tearing out the old entirely and throwing it away, because we’ve forgotten how to ‘fix’.

    Fast results are important. Clients need solutions to their problems in a timely manner. The progression of our tools lets us reach new heights, just as power tools has with carpentry. I think though, that we should still be willing to work with a chisel, the smaller more primitive tools. Being close to your work informs decisions, and a slower pace results in a more productive iterative process.

    It’s easy to type a prompt, or reach for a component library. If you need to make a living, that’s the move. But we should also focus on expressing ourselves. It feels pretentious to call programming ‘art’, but it feels dismissive to say that it isn’t, or cannot be. The art comes from the perspective of how an idea is approached. If we reach for a tool that denies us the process of iteration, then we’re just product installers. By digging deeper, we can be more creative and adaptive.

    All good artists develop creativity and intuition from practice and iteration. Maybe the best idea is to remember that we can approach practice differently than work. Let practice be about using fundamental tools, employing creativity, and expressing ourselves.

    Summary

    In summary, the roles we take on as programmers go beyond simply coding. The same as true for all occupations. The requirements listed in a job description generally fail to outline the actual necessities to be effective at that position. The goal of this article was not to give precise advice or answer a lot of questions. My aim is really just to provoke questions on what it really takes to be better at what we do, what positions in our work are we really filling.