Beginners might be intimate by the amount of knowledge and available resources when getting into software development. Finding the right direction and discerning what’s most important can be challenging. On this basis, Tech Writer and DevRel Fernando Doglio shares his insights on the essential skills of a successful software engineer. We’ll delve into his two decades of experience in software development and explore his latest book, Skills of a Successful Software Engineer, as well as his thoughts on software testing and AI-assisted programming.
Fernando Doglio started as a web developer but moved to different roles over two decades, including data and system architecture. His diverse experience has helped him have a holistic view of how the industry works and has proven handy in his current role as Developers Relations (DevRel) in VoiceMod, a real-time voice changer for games and communication platforms.
As its name suggests, DevRel strategies how to nurture and improve the relationship between developers and the organizations they work with and help them effectively use the company’s products and services. As such, Fernando’s role is building and managing relationships between the company and the developer community, creating a positive experience for developers.
What to expect working in the industry
Aside from his career as a developer, Fernando has been a prolific writer. His Medium article “9 Hard Lessons I Struggled to Learn During My 18 Years as a Software Developer” granted him great feedback: “There were people actually saying, ‘I wish I had those bits of advice when I started,’ ’’ he recalls. In this article, he compiles what he considers would have been more valuable advice when he got into the industry, namely:
- Accepting feedback and being open to better alternatives
- Learning multiple languages to enlarge your toolbox
- Memorizing algorithms isn’t necessary, but rather the ability to quickly find and implement solutions
- Continually learning to stay relevant in the field
- Focusing on problem-solving
- Optimizing code only after it works
- Tackling the small details, even if they are time-consuming
- Automate repetitive task
- Learning from side projects
The article was well received, and publishing house Manning reached Fernando and encouraged him to turn it into a book now published under the title Skills of a Successful Software Engineer. Rather than a step-by-step guide on becoming a developer, the book “sets the right expectations for the type of career that we have as developers” and specifies “what you should aim for, staying away from the very technical aspects.” In like manner, while the book does provide some tech stack advice and testing advice, Fernando believes it is not as important as learning to “focus on how you write your code and what your aim when you’re writing code and the process to follow.” Besides, the book also offers advice in terms of job interviews and screening companies, everything up to the point of leading a team of developers.
Code testing: Rushing minimum viable product or choosing maximum reliability
Testing is perhaps the most fundamental skill in software development, Fernando argues, as every developer will rely on testing to ensure the code they produce works. He understands that “we’re all humans and the basic idea of thinking that you’ve covered every aspect of your code and the logic around it and that you know for sure that it’s going to work every time, it’s just foolishness.”
Testing is indispensable for all organizations. Fernando understands that there are companies such as early-stage start-ups that put all their efforts into building a minimum viable product, a product with just enough features to launch and provide feedback. As these companies lack the manpower or funds to ensure code quality, they postpone fixing bugs and setting tests. However, “you can’t go that way because the fact that you don’t have any tests is actively creating technical debt,” says Fernando; as time goes by and your product’s codebase grows, unattended bugs will become ” a huge snowball that’s going to eat you alive,” even if you decide to acquire a quality control team later on.
In this way, tests as a method of quality control are unavoidable. As such, Fernando recommends always setting automated unit tests; he understands that even projects with little time should be put into them since they can make a difference and take little time to set.
AI-assisted programming is the present and the future
Despite its massive use, AI is barely showing signs of what it can do for us. In this regard, Fernando affirms we are witnessing “the birth of the AI-assisted developer” in which developers ask themselves why they should write code if these tools can do it for them. While AI-written code may not work as is, developers can review it, check that it does what it is supposed to, or check if it is in the right direction and correct what’s necessary. Besides, Fernando points out that ChatGPT isn’t the only tool to be used in software development, as other open-source alternatives are available and can be helpful for specific tasks or areas of expertise.
On the other hand, Fernando views AI assistance as a continuation of the declarative programming paradigm, or rather, “a new level above declarative programming”. While imperative programming focuses on describing the specific sequence of actions the computer should take to accomplish a specific task, in declarative programming, the focus is on what the result should be, rather than how to achieve it. Declarative code describes the desired outcome or state and leaves it up to the computer to figure out how to get there. In turn, when working with an AI assistant, says Fernando, “you tell the computer what you want without thinking about code and the code comes your way and now it comes away.” Hence, he believes a developer can use an AI assistant to tackle a problem instead of asking for code, and while “the solution may not be perfect, it will give you some head start, which is also why it’s so useful.”
In this regard, AI assistance also brings up attention to prompting. While AI might be capable of doing a large number of things, “you don’t say, ‘I want to build this application with this and this and this and these are all the requirements I have; just give me the code’, that’s going to be just too much for it,” Fernando explains. Hence, knowing how to prompt is capital, as a new role known as prompt engineering appears.
AI assistance can also play the role of another developer to exchange ideas with and instead of giving you code it gives you suggestions and provides information to challenge your assumptions and make informed decisions. Even in cases where the output code doesn’t work, you can point it out to the AI and it will try to correct it or help you troubleshoot it.
While Fernando is positive about the use of AI, he advises against sharing property software with it, that is, you shouldn’t share with ChatGPT code that you are not allowed to share with anyone outside your company. However, there is a workaround to this; you can prompt about a certain function or problem and the AI will share a possible solution with you even if you didn’t share the code.
Lastly, Fernando remarks that AI is another step in the evolution of software engineering that, as others have done in the past, “allows us to build better software with less work.” To this extent, he affirms that developers have in their hands a tool that allows them to develop software without having to write code anymore: ” The code is the output because it’s needed but I think that probably in a few years we’re not going to be even looking at the code.”
The bottom line
Fernando is currently in conversations with Manning to write a new book on the influence of AI in software development, specifically on the tools ”that developers can use to incorporate AI-assisted techniques to their workflow to make sure that they don’t fall behind, to make sure that they can improve their workflow, their performance on the aspect of how fast or how much code they can produce in as little time as possible.”You can follow Fernando on Twitter. If you want to read his articles on software development, business takes, and computer stuff, check his Medium account and subscribe to his newsletter.