Advice for Aspiring Career-Hoppers, Part VII
As promised, this is the seventh (and final) part of a short series to provide some quick guidance for people who would like to reach out feelers into a possible software development career. As I mentioned in the first post, a lot of this material is recycled from some of my old Quora answers, updated for current times and the tone of the blog. More and more of it turns out to be new, the longer this goes on.
To finish off this series (for now, at least), weâll talk about the non-technical issues involved in being a programmer that arenât related to formal education.
Note that I already covered some small parts of this when I wrote about colors and continued talking about graphic design tips in general. That is somewhat non-technical and will come in handy, but because I covered some of that ground there, I wonât repeat it here.
The Non-Technical, Non-Education Side
Everything so far has been a relatively straightforward process. Even if you have obstacles in your life that make it more difficult to program well, you can come pretty close to overcoming almost any deficiency with time, trial, and error. By contrast, these are your âsoft skills,â which isnât a reference to the difficulty (a distinction that a surprising number of podcasters and writers seem to have trouble understanding), but rather to the simple fact that you need to be careful not to cause any damage when solving a problem.
That is, âhard skillsâ can be simplified to brute force. But you canât really âiterate onâ communicating with a person. You canât bore your colleagues into being interested in your idea.
Obviously, this canât ever be a complete list. Every job and every project is unique. Every team has its own struggles. And you might get into situations that most people never see. But this should be a start.
Writing Comments
The most code-related interpersonal skill is commenting your code. Just about every programming language has the ability to add free form notes to your code for whatever purposes you please. And many programmers, unfortunately, will do exactly that, commenting whatever comes to mind.
The worst comments are the sort that provide information that already exists somewhere else. Some terrible comments follow.
x = x + 1 # Add one to x
# This is a fix for ticket #1234
x = 17
# The following is a bubble sort
for i in 0..numbers.size
for j in i..numbers.size
if numbers[i] > numbers[j]
store = numbers[j]
numbers[j] = numbers[i]
numbers[i] = store
end
end
end
# We shouldn't be doing this; it's stupid
x = 18
In the first case, the comment is explaining the programming language. In the second case, the comment is cluttering the code with information thatâs easier to find in the version control system. In the third case, the comment names the algorithm used with no context. And the last case doesnât tell us anything useful except that the programmer was having a bad day. Each of those examples, by the way, are based on comments Iâve seen recently.
By contrast, a good comment saves a colleague the time needed to contact you with questions. The comments I find most useful are those that explain why the programmer wrote the code that they did, and why the alternatives werenât used, such as the following hypothetical example.
# We need the list of numbers ordered in descending order, so
# we need to sort it. We can't use the in-built sort method,
# though, because we expect to need to sort multi-dimensional
# information in future versions, and it will be easier to
# handle that with custom code.
This explains the intent of the code (making it easier to find bugs) while also providing an explanation to a future maintainer as to why they shouldnât just replace the code, with conditions where replacement makes sense. Other comments that people will silently thank you for include the following approaches.
# 17 is the minimum number of hours a franchise can employ
# someone.
x = 17
# The following code comes from
# https://answer-site.invalid/q1234567
# under an MIT license.
# Whenever you change the next line, you'll also need to
# test the autoCorrect() method to make sure it handles
# the new data.
Simple enough, right? We have an explanation of what something means, where it comes from, and invisible dependencies. It takes some work to take a step back and think about what questions a person might have, but thatâs not difficult.
Asking Questions
Speaking of questions people might have, we all need help. None of us programs on our own, and you shouldnât expect to, either. But asking for help is difficult for two reasons. First, it shows vulnerability and most of us were raised (incorrectly) to believe that vulnerability is some moral weakness. Second, we donât want to waste the time of the person weâre asking.
Youâre on your own for the first problem, beyond just being aware that humans are social creatures who are more powerful in groups than alone. But for the other issue, structuring the request goes a long way to maximizing the chances of getting help without imposing. Consider the following format.
- Start with a headline, the simplest, shortest explanation of what you want to do. If you can explain the problem in a few words, itâs easier to get the attention of someone whoâs busy.
- Explain why you want the result you want. A lot of the time, we overlook much simpler solutions and fixate on an approach that isnât as good. Going through what you really want in human terms can open up that discussion.
- Give the details about your problem, like anything special about the data or any constraints.
- Provide your attempted solution. If you can reproduce the problem youâre having in a smaller program, supply that, instead. More often than any of us would like to admit, you might find your solution while creating that simplified version.
- Explain your expectations in your attempt and the results you see instead. Most people are not going to run the code you provide, and will instead just read through it, so comparing the expectations versus reality helps focus.
If youâre submitting this to a Q&A site or a bug-tracker, they might have a specific form to fill out with most of these pieces, but if you get in the habit of gathering all of this information first, getting help through e-mail or in person (assuming we ever set foot in offices again) becomes much easier.
Writing in General
We all need to be better writers and most of us need to write more deliberately. Especially as more jobs become remote positions, you need to make sure that your intent comes across to the people youâre communicating with. That responsibility ranges from the smallest written works (a text message or a tweet) to the largest, and from the informal to the formal.
How do you get better at writing? By writing! You need to listen to feedback, too, but that feedback gets incorporated into writing.
The obvious advice is to always write with a specific audience in mind, a person you can visualize having a conversation with. That solves the problem of knowing when itâs OK to use jargon or abbreviations. It also helps keeping from seeming rude, something that generally happens when a person abruptly acts overly familiar or overly polite without escalating or deescalating the relationship; visualizing the relationship in concrete terms makes it hard to overlook such breaches of trust.
Less obvious advice is to review everything before you send it and (as Iâve mentioned before) take advantage of tools that will do the hard work of recognizing clichĂ©s or mismatched verbs. Itâs always trendy to dismiss spelling and grammar as a shibboleth of sorts and, while technically a valid interpretation, isnât going to stop a colleague from dismissing you because you canât spell.
If nothing else, you should at least consider starting a blog documenting the various tools youâre learning along the way. Not only does that give you the practice of writing on a regular basis, but the blog then becomes a place for you to refresh your memory when you need to return to a tool after some time away. On top of that, if it was useful information to you, itâs probably useful information to somebody else. Thatâs a lot of use out of a blog.
Helping Others
The blog is a starting point on the path to realizing that thereâs only so much you can accomplish on your own. Human beings donât scale economically, because there are only so many hours in a day. If you want to be the sort of person who wants to contribute more to projects, youâll want to think about how you can enable others to do more work as well.
This may involve supplying information to people (as with blogging, teaching, or speaking), taking on the boring tasks on a project, providing a safe environment for people to vent, introducing people who have similar interests to each other, or any number of other interventions.
Estimation
You should be able to figure out how long things are going to take, because that tells you how much a task will cost, making it easier to understand when itâs worth arguing for or against a certain plan.
My rule when estimating is to break the task down into pieces that will definitely take less than an hour, when youâre starting out. As you gain experience, half a work day is probably a better threshold. Regardless, for each of those sub-tasks, you want to think about the best-case scenario where everything works on the first try, but also the worst-case scenario, where every difficulty you can imagine delaying you comes to pass.
Then, the most useful rule Iâve ever found is to realize that every task has three parts:
- One third of your time will be spent designing and planning.
- One sixth of your time will be spent doing the specific work.
- Half the time will be spent testing, debugging, and fixing what youâve done.
You can (and probably will) mix up when these pieces happen, but I havenât found a case where someone has âcheatedâ those guidelines on a project that successfully made it to a customer; it just drags out the time fixing things. So, once you have your estimate, multiply it by six, because your estimate only accounts for the work. Or only three, if somebody else is responsible for testing, but still be aware that they need as much time as you do. (The time you spend on the estimate qualifies as design, since youâre thinking about how your solution will be structured.)
When you work on a task, itâs useful to estimate it (even if nobody cares about your estimate) and keep track of where your estimate went wrong, so that you can improve your plans in the future. It takes extra time to do this, of course, but we spoke about reputation, last time, and itâs hard to go wrong being known as the person on a team who can see earlier on when the project is starting to fall behind.
Negotiation
Yes, you should negotiate your salary and benefits for a job, if you want to maximize the amount of money you earn. But on a day-to-day basis, youâre more likely to need to argue for (or against) a feature or a deadline.
As mentioned above, it helps to have numbers on your side, which is one reason that estimates are so important. But you also need to understand your colleagues well enough to be able to pitch your idea in a way that actually speaks to them instead of merely hoping that they agree with you.
Itâs tempting to lie or otherwise trick someone into agreeing with you, but that always results in a more adversarial work environment, and you donât want that. Instead, just argue the merits, but make it clear to each person involved in the decision what benefits theyâll see from the change.
Visual Design
As mentioned at the top, I have almost an entire post on how to get by on designing things without having a real background.
Ethics, Accessibility, and Inclusion
Probably since the first human learned to speak, weâve been arguing over whether technology is âpolitical.â If you think about it, though, technology is obviously political, because a design embodies the values of the designer in the projectâs context.
However, I can already hear the screaming. Youâre about to say that itâs possible to design something with no regard to values at all. But thatâs wrong, because value-based decisions are being made whether they are deliberate decisions or unconscious accidents.
Because of that, itâs worth making sure youâre thinking about your values (and the values of the organization), starting with ethical frameworks.
To be clear, I am not recommending that you study everything from Aristotle to Nietzsche to decide on some prescriptive world-view. Many have tried that and precisely none of them have succeeded. Instead, Iâm talking about the basics, like being familiar enough with the ACMâs Code of Ethics that you can push back if an employer asks you to do something youâre uncomfortable with.
Likewise, give thought to making your work more accessible (since we will all suffer various kinds of physical and psychological impairments in our lives) and making sure that terminology or images donât exclude people from the productâs audience.
Taking Care of Yourself
That stereotypical nerd working twenty-hour days and refusing to bathe? Those people do (basically) exist, andâŠnobody wants to work with them, because they canât focus and cause themselves other health problems.
So, do all the things that you know youâre supposed to do.
- Wash up regularly,
- Wash your clothes and linens regularly,
- Figure out what you need to get a good nightâs sleep regularly and do it,
- Avoid overworking,
- Try to get into shape,
- If you have any medical or emotional problems, talk to a professional about resolving them,
- Eat better, and so forth.
If youâre not doing those things, your brain wonât give you its best results. If you can only do one of those things, start with sleeping, which will give you more productive time in the day and more clarity, giving you the opportunity to look at the other issues.
Where to Go from Here
Iâm wrapping up this series for now, just as quite a few states and municipalities (probably inappropriately) will start lifting their self-quarantine orders. But there isâof courseâa lot more that can be said. Probably any of the headings above could be spun off into their own posts.
More to the point, though, if this is something youâll stick with, you have projects, arguments, communities, and jobs ahead of you. By all means, keep me informed of how itâs going, in the comments or by any of the other means to contact me.
Good luck!
Credits: The header image is Untitled by WOCinTech Chat, made available under the terms of the Creative Commons Attribution 2.0 Generic License.
No webmentions were found.
By commenting, you agree to follow the blog's Code of Conduct and that your comment is released under the same license as the rest of the blog. Or do you not like comments sections? Continue the conversation in the #entropy-arbitrage chatroom on Matrix…
Tags: quora career