I often exchange messages with people who ask me for advice about their first milestones as software developers. I also regularly get to meet people who’ve just completed their studies, whether at university or through a vocational training program like the ones we have in my country.
What can I tell people who are just starting out in this field and are mainly interested in programming?
What can I say when everyone has their own experiences and professional goals? I can say that I’ve built up extensive experience across many very different projects, some of which failed while others are still running somewhere in the world. Your professional development and education will need to evolve in one direction or another. Can you see yourself working for a large company for the rest of your life? Or would you rather change jobs every few years, or even start your own business?
The first thing I’ll tell you is this: if you’ve spent several years doing the same kind of work… that’s bad; you’re on a very wrong track.
It’s also worth remembering that the local job market has different characteristics wherever you live. In the end, we have to adapt somewhat to the kinds of companies available to us—unless you realize early on that you can also work remotely and offer your services independently.
Here are some tips I hope will be useful, aimed at a novice but ambitious software developer who understands that:
- Our market is global, not local. Do you realize that? Why offer your services only to companies in your own city when you can offer them to the whole world?
- English is the natural language for everything related to software. Sorry, but that’s how it is: if you don’t know English, at least technical English, your opportunities are more limited.
- You don’t have to live or work in Silicon Valley to launch important projects.
- Attitude matters just as much as aptitude; you’ll need to develop and improve both.
- Software development has had a solid foundation for many decades, but it still evolves at a frantic pace. Either you keep learning almost constantly, or in five years you’ll be a technology dinosaur. Keep that in mind: you’ll need to learn continuously, and you’ll also have to let go of much of your technical knowledge as it becomes obsolete. Nothing is worse than clinging to knowledge whose market value is heading toward… zero.
A developer who’s just starting out and wants to improve:
- Should accept that becoming a good programmer takes several years of writing code—a lot of code. It really bothers me when people say things like, “I’ve already been coding for a couple of years…” You can learn programming basics in a weekend course, but delivering a professional project takes much more time and experience. Programming is a difficult art—just ask Uncle Bob…
- A good programmer always accepts that there may be a better solution than their own (= humility). Unfortunately, you’ll encounter plenty of inflated egos in this industry, people who think that writing a few lines on a computer is like sending a rocket to Mars… Get used to dealing with personalities whose egos are far too big. My advice: stay away from them; most are just defending their jobs.
- Reads other people’s code and likes browsing GitHub or similar sites to see what others have built.
- Keeps learning and reading about new technologies, trends, and so on.
- Investigates before reinventing the wheel to see whether something similar to what’s needed already exists; in other words, they integrate third-party libraries and services into their work. Our responsibility is to create value, not to redesign solutions others offer cheaply and much better than we could build on our own.
- Should master clean code and refactoring techniques.
- Can’t imagine writing code that isn’t backed by tests, and can’t sleep well if the software hasn’t been tested enough…
- Can master a few technologies at most (two or three—I mean “master” at an expert level), while still knowing “something” about many others.
- Keeps up with what’s happening in the software industry (at least in their own area): containerization, cloud, software as a service, microservices, and so on.
- The best developers I’ve known always work on their own personal projects outside their regular jobs (maybe that’s just a coincidence, but I don’t think so).
- Their best résumé is a personal website where they talk about their work and link to some projects they’ve built and published. They manage their personal brand as if it were a business.
- There’s nothing worse than working on the same project for too long. This can make you try to defend a position you think is unique within the company—and perhaps it is—but it keeps you from progressing and growing professionally in other areas. I dedicate a chapter to this dynamic in The Programmer’s Black Book.
- No professional is one-dimensional or masters only one area of software development. You need varied knowledge, even if it’s only superficial, of relational and non-relational databases, algorithms, web design, microservices, testing, software metrics and quality, and so on. Nobody is an expert in everything, and anyone who thinks they are is out of touch with reality. Our industry is increasingly specialized in completely different areas.
- Knows the difference between design and architecture.
- Embraces agile development, no question.
- Knows that the best way to improve at programming is to do a lot of programming…
- Always asks: “How can I improve and simplify this?”
- Knows that you absolutely need to work with some kind of methodology.
- Uses tools to track the project’s process (Visual Studio Online, Asana, Trello, and so on).
- Even if programming is their main job, also knows something about infrastructure, systems administration, and so on.
A good programmer (or someone who thrives as a programmer, which isn’t necessarily the same thing), like anyone in any profession, doesn’t develop only their technical knowledge and skills. I’ve known more than one son of a b… who could be “good” at their job but was unbearable as a person, and therefore missed out on opportunities. A good developer also builds and improves their attitude:
- Knows how to work in a team and fits in well when they need to share their work.
- Doesn’t feel threatened by people with more experience: they see them as an opportunity to learn, not as a threat.
- Knows how to withstand stressful times and manage them as just another part of professional life.
- Is organized at work and knows how to distinguish important tasks from urgent ones.
- Understands workplace productivity.
- Is kind to colleagues and takes care with how they speak to them.
- I’ve long realized that the wiser you become, the more humble you are. The opposite is the unbearable ego of people you should avoid like the plague—seriously.
- Clearly tells their manager what they need to do their job properly.
- Stays focused: avoids constant distractions and interruptions during a work session (no more than one or two hours at a time).
- Doesn’t try to do everything themselves, but knows that sometimes they need to delegate.
- Doesn’t always work on what they most enjoy at that moment, but on what needs to be done.
- Is committed to their work.
So, as we can see, attitude and aptitude are two very different things, and both matter to a good professional.
Finally, there’s no doubt that today’s fastest-growing markets are mobile and web application development, along with everything related to cloud services.
And, of course, a good professional avoids the mistakes I describe in detail in The Programmer’s Black Book….