Book (P)review: Living by the Code
2019.09.09. 13h • Márton Braun
What is this article about?
It’s a brief glimpse into the extensive, diverse wisdom provided by the interviewees who participated in creating Living by the Code, a book by Enrique López Mañas. Living by the Code is a series of interviews with dozens of developers, leaders, and innovators, who tell their stories and give advice about careers in technology.
I won’t spoil everything in the book here. Instead, I want to showcase some of the major themes and opinions that you can find in it.
Let’s start at the very beginning. What are some popular morning routines for these people?
Some of them simply admit that they can’t keep a fixed routine. For those who do have routines, it tends to be some combination of a workout, a shower, coffee, and breakfast to kick off each day. For most remote workers, this is followed by moving to a dedicated office to get started on work. For those working a regular job, getting up early and using the morning hours for side projects is a popular choice, so that they don’t end up getting to these late in the evening, already exhausted.
Opinions on social media, news, and notifications at this time are a mixed bag. Some read Twitter and news over breakfast, while others purposefully avoid all communication until later in the day, which helps them stay highly productive in the morning. Getting to the office early to get some work done before notifications come swarming in is also popular.
What are the opinions on remote work?
Remote work (and flexible work hours) seems to be a great way to take into the account that people are different, and have different ways of working effectively. The conclusion seems to be that remote work is here to stay. There are many who still want to work for companies (and not run their own freelancing business with all its complications), but want a degree of flexibility that remote work can offer. Cutting down on commute and spending more time with family are often cited.
What’s the benefit for companies, other than happier employees? They get to hire from a much wider pool of people. They’re not limited to those who are local or are willing to relocate to the location of the company.
There is one fundamental piece of advice coming up over and over again: If a company does support remote employees, remote work has to be embedded in the company’s culture. Everyone has to work as if they were remote - no exceptions. Everything has to happen through digital channels. Otherwise, information will eventually be confined to people who happened to be in the office, and issues that only affect remote workers will be easily overlooked.
Nobody says that making this work is easy, or that it’s without its drawbacks. Some of these are not interacting with your colleagues in person, or having to worry about whether they know that you are in fact doing work. It also requires discipline to dedicate time to work if you’re doing it at home, create boundaries, and avoid distractions. The benefits of remote work, however, often outweigh these issues.
What’s often mischaracterized about our work?
While the book does have some of the technical stories you’d expect from the participants, there are dozens of mentions of how getting technical things right is not everything. Our work is not just coding alone in a dark room, like stereotypes would have you believe. Having soft skills is also an essential part of creating software.
This includes gathering information from and communicating efficiently with other engineers, as well as stakeholders and other non-technical people. The more senior an engineering position, the more such skills are likely to show up as requirements in the job description. This part of the job is usually even harder than writing the code itself.
Having negotiation skills and not being afraid to raise your voice when required is also mentioned. Developers have to be direct, and be ready to explain if something just can’t be done within the given constraints.
Building a successful career will ultimately depend heavily on the connections you build in the industry. Though networking - much like soft skills - can be seen as unnecessary, it becomes vital over time.
What’s something that our industry is thought to be lacking?
To sum up many answers to this question in one word: empathy. We are too quick to take sides about which technology is superior or which method works best. All of us could learn a lot from listening to different people, keeping an open mind, and trying to be flexible about our opinions. And the entire community is better off if we don’t put down (or make fun of) people who make different choices.
Why are communities important?
Everyone needs a support system. You need to find a community where you feel like you belong. If you talk to others in the industry, you’ll find those who are going through the same issues that you are going through (imposter syndrome is a frequent one, for example). Find these people and support each other. Learning together will keep you motivated, and make everyone better at what they do.
Finding a community that understands you can be especially important after moving to a new country for work, where you might feel alone, having left your old communities behind. Several people in the book discuss dealing with this, as well as the language barriers.
What makes for a good leader, and a good company?
Good leaders should focus on enabling those that they lead to do their best work, and to grow continuously. They should create large scale plans, but also let everyone contribute to these, and then shape how they’re realized. Keep a close eye on whether their people need help, while letting them work on their own. Create the bridge between their own team and the rest of the organization that the team exists in.
Transparency is also a major theme in the answers to this question. Sharing information with everyone whom it concerns makes for happier, more motivated, and more honest teams. It helps eliminate barriers, and prevents many kinds of internal conflicts. It’s comforting for everyone to be in the loop about the important happenings of the company.
How do all these people stay productive for long stretches of time?
The core advice here is that cranking out code constantly is unsustainable, and burnouts are unavoidable that way. The solution is simply taking a break every once in a while, whether it’s 10 minutes in an hour, a couple hours in the middle of your day. The Pomodoro Technique with various time intervals is used by multiple people, which provides a framework for taking small breaks. For the longer mid-day breaks, taking a nap and going for a walk are both popular choices.
Making sure that you aren’t overwhelmed with tasks will also help prevent burnout. Understand your limits, and do say no to tasks if your plate is already full. To keep yourself going when you’re in the flow, try setting small goals that you can keep meeting over and over.
How can you beat the initial hurdles of learning programming?
When something you create doesn’t work, it can feel like failure, and be very demoralizing. Taking your time to debug it, and figuring out why it’s not working is one of the primary ways that you become better at the craft. With time, you’ll get better at tracking down issues, and understanding the ways that things might be broken. You won’t truly understand certain mistakes until you’ve felt them on your own skin. Make sure you learn your lessons from these experiences.
What’s the most important thing for a developer to learn?
The fundamentals of our trade are crucial to learn when you are starting out. These stay with you all throughout your career. The topic emphasized the most here is data structures and algorithms. Basics of technologies such as XML, Java, and object oriented design are also some of these fundamentals.
When you’re new, you might be tempted to solve everything yourself, and to seem like you know everything that’s required of you. It’s important to realize that not knowing everything and asking questions is natural as a beginner. Everyone started their career as a junior. Getting help from more experienced people can be a fantastic learning tool.
How can we keep up with all the latest technologies?
The answer to this question has to be the most widely agreed upon opinion in the entire book. Everyone shared the same basic idea: You simply can’t keep up with everything that’s happening.
There are more news, more libraries, more frameworks, and more patterns than you can possibly learn about. There’s simply too many of them. You’ll never need to use all of them, so you don’t need to learn all of them. Be selective, and pursue the topics that you actually need, and that interest you the most.
It might feel like you’re expected to know everything, all the time. You have to recognize that it’s okay to not know everything. Nobody does. Cut yourself some slack sometimes, and just skip the technologies that you don’t really need, at least for the time being.
With that in mind, when you do want to learn new things… Start sharing your existing knowledge with others in your community. If everyone does the same, you’ll all grow together.
What else is covered by the book?
Too many things to list, but here are some further highlights:
- Personal stories of the various ways people got started in software engineering, and projects they’ve worked on.
- Dozens of book, podcast, and other resource recommendations that you can use to learn fundamentals from, and to keep up with the latest and greatest in the industry.
- Chasing your dreams: stories about moving into freelancing, or starting your own business.
- The ethics of software development and using AI.
- Progressing in a career: whether becoming a manager of some kind is unavoidable, and if you can keep coding forever.
- How teaching is the best way to learn things.
- Various tools that people use to get things done.
- The experience of moving to and working in Silicon Valley.
- Issues of diversity in our industry.
- Advice on how to get started with public speaking, writing, or similar activities.
- A lot more on all the topics summarized in this article…
- And a hundred things more that I can’t even list here.
So where is this book available, again?
Thank you for reading :]
The @JvmOverloads annotation is a convenience feature in Kotlin for interoperating with Java code, but there is one specific use case on Android where it shouldn’t be used carelessly.
Retrofit's coroutine support has been a long time coming, and it's finally coming to completion. Take a look at how you can use it to neatly integrate networking into an application built with coroutines.
A perhaps overly thorough look at how extensible state saving is implemented in the AndroidX libraries, and how ViewModel state saving specifically is hooked into this system.
A quick preview of the new SavedState support for Android Architecture Component ViewModels.