A Roadmap for Success in the Software Development and Infrastructure
Published: 2024-01-08 19:21:00

Introduction: 🚀 The Journey of a Software Professional:
In this article, we will explore my professional experiences and provide recommendations for aspiring software developers and infrastructure professionals. Drawing from my own trajectory, I will discuss certifications, study paths, portfolio building, and practical tips based on my years of work in the industry. To begin, let me present my journey to clarify the reasons behind the advice I will provide.

Who am I. About the author:
1.Nurturing the Passion for Technology: 💻 Early Exposure and the Role of Parents “The computer was born to solve problems that did not exist before.” — Bill Gate

My name is Rafael Levi, and I had the opportunity to start studying computers at an early age, 7 years old, in 1998. I took a basic computer course at my school, where I had my first contact with a computer running Windows 95. At that time, I learned how to turn it on, off, and use Paint to draw. For me, this experience alone was wonderful and sparked my desire to learn more about computers. I believe that parents play a crucial role in this process by providing their children with opportunities to engage with computers, which is much more accessible today than it was in my time.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/colhjrdet78hbg73p5ti.png)

2. Formative Years: 🖥️ Embracing Windows and Linux “Linux is not just an operating system, it’s a philosophy.” — Linus Torvalds

At the age of 11, in 2001, I got my first desktop computer, an AMD Duron with limited RAM and Windows 98. I started taking a basic Windows and Microsoft Office tools course in my neighborhood. During that time, there was a fellow student who was older than me and already had experience with Linux. The version he used was Kurumin Linux. From that moment on, I began studying Linux and started using it alongside the Windows operating system in my daily life. I continued with my basic computer courses, took courses on Corel Draw and Adobe Photoshop, and dabbled in digital graphic arts.

After completing these courses, I enrolled in a computer maintenance course. At the age of 13, in 2003, I started working at an internet café, installing games and providing computer maintenance. This job helped me reinforce theoretical concepts with practical, hands-on experience. After the computer maintenance course, I spent the years between the ages of 13 and 17 studying and working with computer and network maintenance, improving my knowledge and studying Linux at home.

3. Academic Journey: 🎓 Pursuing Higher Education and Beyond “The only source of knowledge is experience.” — Albert Einstein

At the age of 19, in 2009, I joined the Federal University of Salvador, pursuing a Bachelor’s degree in Science and Technology. There, I honed my skills and had my first encounter with programming languages, calculations, and physics. It was in the computer engineering disciplines that I found my passion. I took a CISCO course for CCNA certification and continued working in computer and network maintenance. Around the same time, I worked as a teaching assistant at the university, interned at a software development company, and worked with Lutus Script and Java EE in 2011. After one year of interning, I passed a public exam and became a substitute professor at the same university. I taught computer science and calculus and also started teaching networking and software development in technical courses. These experiences further solidified the knowledge I gained during my academic journey, spanning from 2012 to 2017.

4. Building a Professional Career: 🏢 From Academia to Industry “Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work.” — Steve Jobs

In 2017, I transitioned from being a professor to a software developer, as I felt more confident in this field. I had already established my own business as a sole proprietor and provided services to a multinational company called Assa Abloy, specifically at the Papaiz factory, which produced locks. They required an Industry IoT service with Raspberry Pi devices. At the same time, I pursued a master’s degree in Computational Modeling at SENAI CIMATEC. For this first project, I assembled a team with my students to develop a lock production counting system on the production line. I utilized Python, PHP, Raspberry Pi, and my knowledge of electronics, automation, embedded programming, and network infrastructure, which I learned during my academic and teaching experiences. From then on, I have been working on engineering and software architecture projects through my own company.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i56nge4e8uvwyjjf4j9q.png)

Over the years, many students and acquaintances have asked me how to start a career in the field, and here I have compiled what I would do if I were starting in the field. Before I begin, I want to emphasize that this is a career that requires many years of study, dedication, and initially, a job with little financial reward. So, please be aware that it took me over 10 years of studying and working, earning very little, until I achieved a privileged position in the job market.

*Guiding the Next Generation: 🌟 Advice for Aspiring Professionals “Education is not the learning of facts, but the training of the mind to think.” — Albert Einstein*

*1. Getting Started in Software Development*
• Importance of foundational knowledge
• Recommended areas of horizontal knowledge
• Practical experience and dual boot setup
• Online learning platforms for software development basics

Even for those who only want to pursue a career in software development, I recommend having at least a basic level of horizontal knowledge in areas such as network infrastructure, Linux, databases, object-oriented programming, and data structures. This knowledge is best assimilated through practical experience, so I suggest having at least a dual boot setup on your computer with Linux and Windows, or simply Linux with a user-friendly distribution like Ubuntu, especially in the beginning. In today’s IT education market, there are several companies that offer courses to teach the basics of software development. I would recommend some courses from Udemy or Alura for the basics, and RocketSeat. To study Linux and cloud infrastructure, I would recommend following LinuxTips and taking some AWS and basic Linux courses. For back-end development, the programming language doesn’t matter much, but here are a few languages I would recommend: Java, Python, C++, and GoLang. These are good languages for beginners. I suggest starting with strongly typed languages as they will help you grasp the solid foundations of programming.

*2. Web Development*

• Language recommendations
• Strongly typed languages for solid programming foundations
• Web development courses and frameworks
• Using GitHub or GitLab for code storage and portfolio building

Once you have a good understanding of the programming language basics, alongside network infrastructure, take web development courses such as PHP with Laravel, JavaScript, HTML, CSS, Python with Flask, or NodeJS with Adonis, preferably with TypeScript. TypeScript will be helpful as it provides type checking, which can facilitate learning more advanced software development techniques such as object-oriented programming and design patterns. Whenever you write code for practice, I recommend using GitHub or GitLab to store your code. This will make it easier to build your portfolio. While learning the basics of programming, study Git and GitFlow to align yourself with the job market, as all the code we produce needs to be managed and versioned using platforms like GitHub, for example.

*3. Advancing in Development*

• Teaching and pair programming
• Sharing progress on LinkedIn
• Regular training activities with tools like Exercism

Once you have solid foundational knowledge, if possible, teach someone else and try pair programming so you can share experiences with a colleague. If possible, always share your progress on LinkedIn. Regularly engage in training activities, using tools like Exercism, for example. With this foundation, it’s time to start developing applications that resemble real-life scenarios and the daily work of a professional in the field. Study databases, and I recommend starting with MySQL. Learn the basics of relational databases, understand what an API is, and start learning about web applications. Learn a bit about front-end development, and I recommend starting with ReactJS.

*4. Developing Realistic Applications*

• Studying databases and starting with MySQL
• Understanding APIs and web applications
• Front-end development with ReactJS
• Containerization with Docker
• Deploying applications with AWS and using RDS MySQL

By this point, you should have already created basic websites using HTML, CSS, and JS. Build a RESTful API with NodeJS + TypeScript + AdonisJS, create a front-end with ReactJS, and apply Docker to containerize your applications in your study projects. Learn about AWS so you can deploy your applications on an EC2 instance with Ubuntu Linux installed, access such a server using SSH protocol, and use RDS MySQL as a serverless database. After creating a few web applications in this format, start offering your services to relatives, friends, or local businesses in your neighborhood. This way, you will begin to monetize your skills by building web applications or websites while building your portfolio.

*5. Monetizing Skills and Building Portfolio*

• Offering services to friends, family, and local businesses
• Creating a portfolio with projects on GitHub
• Showcasing applications and providing access links

Always upload your code to GitHub and create a portfolio, which can be a simple PowerPoint or Google Slides presentation showcasing your applications, explaining what each one does, providing access links, source code links, technologies used, and screenshots. Once you have learned and practiced web development, it’s time to move on to the advanced level of software development. For this, you will need to read, study, and practice even more than before.

*6. Advancing to the Next Level*

• Recommended books for further study
• Learning about DevOps and automated testing
• Using Jira for project management
• GitLab CI/CD pipelines and source code management tools
• Deepening knowledge of AWS services like S3, RDS, EKS, ECS, and Route53
• Exploring software architecture and design patterns

Here are some book recommendations: “Clean Code” and all other books by Robert C. Martin, “Domain-Driven Design” and other books by Eric Evans. Study DevOps and automated testing. Use “The Twelve-Factor App” by James Lindenbaum et al. as a reference for best practices, along with “Domain-Driven Design” by Eric Evans, “Clean Code” and “SOLID” by Robert Cecil Martin, the Agile Manifesto, “Test Driven Development” by Kent Beck et al., “DevOps” by Patrick Debois et al., and “Changelog” by Olivier Lacan. Learn about SCRUM and use Jira software to manage your project tasks. Learn and use GitLab CI/CD pipelines. Explore different source code management tools like Bitbucket, GitHub, and GitLab. Study Kubernetes with LinuxTips and start using it in your applications. Dive deeper into AWS. Use AWS S3 as a data storage bucket for images and static documents in your applications. Use RDS for your database needs. Learn about NoSQL databases like Redis and MongoDB. Utilize EKS as AWS’s Kubernetes service to deploy your applications or ECS to manage your containers. Use Route53 and learn about domains and subdomains to apply in your projects. Learn about design patterns from any Design Patterns book. Study software architecture, including Hexagonal, Microservices, and MVC architectures.

*Pathway to Becoming an Expert in the Software Development Field: Strategies and Guidelines*
Building a Solid Foundation: Mastering Software Development Basics

• Choosing a preferred programming language
• Specializing and advancing skills in the chosen language
• Exploring different career areas within software development
Choosing Your Career Path: Specialization Options

• DevOps Engineer
• Python Backend Specialist (Flask or Django)
• JavaScript Specialist (Node.js, TypeScript, AdonisJS, NestJS)
• Java EE Specialist (Java, Spring, Spring Boot, Lombok)
• Front-end Specialist (React.js, Next.js)
• Mobile Specialist (React Native, TypeScript, Flutter)
• iOS Specialist (Swift)
• Android Specialist (Java, Kotlin)
• Focusing on SQL databases (MySQL, Oracle DB, PostgreSQL)
• Exploring NoSQL databases (MongoDB, Redis)
• Deepening knowledge of cloud platforms (AWS, GCP, Microsoft Azure)
*Diving Deeper into Specialized Areas*

• Software Management: SCRUM, UML, computational modeling
• Artificial Intelligence: Machine learning, neural networks, complex networks
• Business Intelligence: AWS QuickSight and BI tools
• Pursuing specialized certifications to enhance professional profile

*The Generalist Approach: Broadening Technology Expertise*

• Gaining professional experience in various technologies
• Transcending technology boundaries and bringing innovative solutions
• Balancing general knowledge with specialization (e.g., Python and AWS expertise)

*Continuous Learning and Academic Advancement*

• Emphasizing intellectual and professional growth
• Considerations for pursuing academic degrees (e.g., Master’s)

Upon reaching this point, you already have a solid foundation in software development. By now, you should have chosen a preferred programming language. Try to specialize in that language to reach the next level: becoming an expert. At this stage, you should first choose the area of your career. It could be as a DevOps Engineer, a Python specialist focusing on Flask or Django for back-end development, a JavaScript specialist with Node.js, TypeScript, AdonisJS, or NestJS, a JavaEE specialist with Java, Spring, SpringBoot, and Lombok, or a front-end developer with ReactJS or NextJS. Alternatively, you could specialize in mobile development with React Native and TypeScript or Flutter, or become an iOS specialist with Swift, or an Android specialist with Java and Kotlin.

Select a SQL database to focus on, such as MySQL, Oracle DB, or Postgres. Choose a NoSQL database like MongoDB or Redis. Additionally, pick a cloud platform to deepen your expertise, such as AWS, GCP, or Microsoft Azure. If you’re interested in software management, learn more about SCRUM, UML, and computational modeling. For those pursuing artificial intelligence, study machine learning, neural networks, and complex networks. Business Intelligence specialists should explore tools like AWS QuickSight. Once you have a solid foundation, consider pursuing certifications in your specialized field. Certifications can enhance your profile during the job selection process, although I believe their real value lies in personal and professional growth. In my case, academic advancement to at least a master’s level has also been beneficial.

I saved for last the path I chose to follow: a generalist approach across these technologies. This requires knowledge and professional experience in each area mentioned above. Personally, I engage with new technologies daily, allowing me to navigate between them and bring concepts from one to another. This facilitates innovation in my solutions. However, when pursuing a generalist senior developer role, it’s important to note that, despite having broad knowledge, you will still need to specialize in certain areas. In my case, it’s Python and AWS, where I feel most comfortable working with cloud infrastructure and programming.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q2c43mkvjidbah8qrk4p.png)
*Conclusion:*
In conclusion, the path to becoming an expert in the field of software development encompasses a journey of continuous learning, specialization, and practical experience. By building a solid foundation in software development basics, choosing a specific career path, and deepening knowledge in specialized areas such as DevOps, backend/frontend development, mobile development, or artificial intelligence, individuals can unlock new opportunities and excel in their chosen fields. Additionally, pursuing certifications and academic advancement can further enhance professional growth. Whether one chooses to specialize in a specific domain or adopt a generalist approach, the key is to embrace lifelong learning, stay abreast of emerging technologies, and consistently innovate to create impactful solutions. With dedication and a passion for growth, the possibilities for success in the ever-evolving field of software development are endless. Feel free to ask questions in the comments. I will respond to all, keeping in mind that this article is based on my experiences throughout these years in the industry.