What does it take to become a Software Engineer? 🙎
Intro
Becoming a software guru usually requires an iteration of tasks that one usually do in repetition. These tasks make up part of the process most self-taught developers go through while learning software engineering. Most of the times, there are a lot of tasks one has to do for a while doing software engineering, but these are the major ones according to my journey and experience as I really started diving deeper into the tech world.
Research & development
Reading documentations and developing prototypes is becoming the norm now for techies to get their feet wet with technologies they are interested in. Regardless of any field right now, most startups and other established companies push forward to have their documentation up-to-date with semantic versioning so as to capture the interest of all the techies who want to experiment with their technologies. While researching, one has to experiment further with what they have discovered so far. Mostly you just take the source code from the documentation, and either compile, and run it so that you can see the output. Now having a goal that you want to achieve you can start writing code, during the development phase, that can really be used to solve real world problems in production environments.
Debugging
It reaches a point in your software engineering journey where you run or compile your code and your just see a long stack trace of errors and you usually don’t know what specific line of code is causing it. For self-taught developers this can be annoying and frustrating as some errors may take almost days if not hours to resolve. Previously, debugging using StackOverflow answers was (and still is) the normal go-to place to get help. Most of the time you usually find out that the error is caused by copying code from the documentation and not refactoring it to your specific use-case. Discord has also become another place to resolve issues quickly especially if a platform provides a common support channel to support their technologies and track issues. AI tools are also being embraced as a way to resolve issues in a codebase evident with technologies like GitHub Copilot, Code Whisperer, Codeium, Tabnine and etc but to some extent cause they usually introduce code smells and other inefficient code so it is recommended to be used sparingly. Lastly, one of the ways of debugging code that is always overlooked is through thorough reading documentation of the technology one is using as this is always the best way to get things right especially if you are implementing things incrementally. Reading documentation has been my go to for solving bugs before raising issues on support channels.
Documentation
Not only does reading documentation sharpens a developer’s skills but also documenting what they have learnt through one’s own blog or other social platforms like Dev.to and Hashinode. This allows you to engage with people and also demonstrate that you are truly learning. This is the part that is the most crucial cause without documentation you cannot really reproduce later in the future what you did because the mind is always quick to forget unless the technology being used is put to practice on a daily. Personally to incorporate this into my workflow, I decided to develop my documentation site away from my personal blog so that there is a separation of concerns, that is my blog only hosts the written articles tailored for my mail list and the documentation site itself that hosts the in-depth walkthroughs and explanations of specific topics.
Collaboration
To battle-test your developer skills you should also do collaborations and making contributions to open source projects using version control tools and platforms like Git and GitHub respectively. Collaborating increases your understanding and knowledge of a given codebase so that you can make effective contributions to a project that enhances usage of the technology being built. This move definitely increases one’s credibility and also increases your chances of being hired by companies when they see the projects you have contributed to on your portfolio.
Consistency, patience and persistence
Through my experience over the years as a developer, I truly stand by the notion of consistency, patience and persistence. Consistently checking up relevant tech news in your field of work and upcoming technologies coming into the market is also an underrated skill that should be captivated as this helps with decision fatigue that comes with choosing which tech stacks to use for different problems ones tries to solve. Be patient to always take time understanding problems you are solving by again thorough research and documenting your findings so that you can truly understand why you chose a certain technology over another. All of this and persistently raising issues and opening discussions on one’s technology of interest makes you truly in-expendable in a workplace because apart from possessing hard skills, soft skills like these also makes you stand out as an all-round developer and also makes eligible for promotions in managerial roles.
Conclusion
In conclusion, for you to become a proficient software engineer, it is a journey that requires a multifaceted approach. It involves continuous research and development, honing your debugging skills, documenting your learnings, collaborating with others, and cultivating essential qualities like consistency, patience, and persistence. By consistently reading documentation, experimenting with prototypes, and actively addressing coding errors, you can deepen your understanding of technologies and refine your problem-solving abilities. Documenting your knowledge through a blog, tutorials, or a personal site will not only reinforce your learning but also contribute to the broader tech community. Collaborating on open-source projects and using version control platforms like GitHub will foster teamwork, expand your understanding of codebases, and enhance your credibility. Ultimately, your success as a software engineer hinges on consistently staying updated with industry trends, patiently tackling challenges, and persevering through obstacles. Embracing this iterative process of learning, practicing, and refining your skills is crucial for your personal growth and professional advancement in the dynamic field of software engineering.