Inspiration

The inspiration for this project stemmed from the struggles I observed among my friends and aspiring programmers in my network, including myself when I was just starting. Most universities in Bangladesh teach C as the first programming language, and many individuals aiming to build a career in tech start their journey with C or C++. For those, setting up a development environment is often the first hurdle they face, and it's a significant one. Free IDEs tend to be limited and unattractive (for example, CodeBlocks), while paid IDEs are simply not affordable for students (like JetBrains IDEs). The alternative of using a modern code editor like VSCode with a compiler like MSYS2 is powerful but complicated to set up, causing many beginners to give up. I wanted to create a solution that simplifies this process, making it accessible and straightforward for everyone so that they can directly focus on learning the Programming Language.

What it does

The project automates the setup of a complete development environment for C and C++ programming. It simplifies the process of downloading and installing necessary tools like VSCode, a popular code editor, and MSYS2, a modern compiler. Here’s what it does:

  1. Single Click Downloads: The program downloads the latest versions of VSCode and MSYS2 from the internet without leaving the program.
  2. Seamless Installation: It installs these tools on the user’s system with minimal user intervention, ensuring all necessary components are correctly configured.
  3. Environment Configuration: After installation, it configures the development environment to be ready for immediate use, including setting up necessary extensions and tools within VSCode.
  4. Command Execution: For MSYS2, it runs essential commands to install additional packages and tools required for C/C++ development.
  5. User-Friendly: The entire process is streamlined into a simple, user-friendly experience, making it accessible even for beginners who are unfamiliar with the intricacies of development environment setup.

Overall, this project removes the complexity and frustration from setting up a C/C++ development environment, allowing students and new programmers to focus on learning and coding.

How I built it

The project was built using Python, with the requests library for downloading files from the internet, subprocess for executing installation commands and customtkinter for clean modern and beautiful GUI. The process involved the following steps:

  • Research: Identifying the most common issues faced by beginners in setting up a C/C++ development environment.
  • Design: Outlining a solution that automates the download and installation of VSCode and MSYS2, followed by configuring the environment for immediate use.
  • Implementation: Writing Python scripts to download the installers, run the installations, execute necessary commands in the MSYS2 terminal and showing a beautiful GUI.
  • Testing: Iteratively testing the script to handle different scenarios and ensure it works reliably across various windows systems.

Challenges I Ran Into

While doing the project, the first thing I thought about was which language to use. After some research, I found that Python is best for this kind of automated project. Although I have some knowledge of working with Python, it was mainly in web development frameworks like Django and Flask. So, for building a GUI, I needed to learn a new framework or library.

I did some research and found tkinter, so I learned it and created a GUI. However, the GUI I made with tkinter was very basic and unattractive. I looked for something better and found customtkinter. I then rebuilt the GUI with customtkinter, which was much more satisfying.

While working closely with the Windows file system, I encountered many Windows Defender errors that disrupted the development process.

Finally, after overcoming these challenges, I achieved a satisfying result.

Accomplishments that I am proud of

  1. Successfully Automating the Setup Process: One of my biggest accomplishments is automating the entire setup process for a C/C++ development environment. This involved integrating multiple tools and ensuring they work seamlessly together, which significantly reduces the complexity for new users.

  2. Creating a User-Friendly GUI: Learning customtkinter and building a polished, intuitive GUI was a major milestone. This user interface not only looks good but also makes the tool easy to use for beginners.

  3. Overcoming Technical Challenges: Dealing with Windows Defender errors and other system-level issues was challenging, but I managed to find solutions and ensure the program runs smoothly on different systems.

  4. Expanding My Python Skills: I broadened my knowledge of Python beyond web development, delving into automation and GUI development. This project allowed me to apply and enhance my skills in a new domain.

  5. Building a Scalable Foundation: While the initial focus is on C and C++, the framework I developed is scalable and can be extended to support other programming languages in the future. This sets the stage for further development and improvements.

These accomplishments demonstrate my ability to identify problems, learn new technologies, and create effective solutions, all while ensuring a positive user experience.

What I learned

  1. Python for Automation: I deepened my understanding of Python, particularly its use in automating complex tasks. This included learning how to handle file downloads, manage installations, and interact with system processes.

  2. GUI Development: I learned how to create user-friendly graphical interfaces using tkinter and customtkinter. This experience taught me the importance of aesthetics and usability in software design.

  3. Error Handling and Debugging: Working closely with the Windows file system and encountering numerous Windows Defender errors improved my problem-solving skills. I learned how to debug issues effectively and implement robust error-handling mechanisms.

  4. System Integration: Integrating multiple tools (VSCode and MSYS2) into a single cohesive setup process was a valuable learning experience. I gained insights into how different software components interact and how to ensure compatibility.

  5. User Experience (UX): I learned the importance of creating a seamless and intuitive user experience. Ensuring that the tool is accessible to beginners and reducing the complexity of the setup process were key considerations.

  6. Project Management: Managing this project from conception to completion taught me how to plan, execute, and iterate on a project. Balancing learning new technologies with implementation was a crucial aspect of this process.

  7. Importance of Teamwork: Most importantly, I understood that it is not always a good idea to work solo, especially in a competitive environment like a hackathon. When I realized the importance of having one or more teammates, it was already too late. This experience highlighted the value of collaboration and how diverse perspectives can enhance a project.

Overall, this project broadened my technical skills and provided valuable insights into software development, particularly in creating tools that simplify complex processes for users.

What's next for SetTheDevEnv

  1. Expanding Language Support: While the initial focus has been on C and C++, the next step is to expand support for other programming languages. This will include setting up environments for Python, Java, JavaScript, and more, making SetTheDevEnv a versatile tool for all developers.

  2. Cross-Platform Compatibility: Currently, the project is tailored for Windows. Future updates will aim to support macOS and Linux, ensuring that developers on all major operating systems can benefit from the tool.

  3. Enhanced User Interface: Improving the user interface further with advanced design principles and additional features, such as customizable setups and user preferences, to enhance the overall user experience.

  4. Community Feedback and Contributions: Opening up the project to the community for feedback and contributions. This will involve creating a GitHub repository where users can report issues, suggest features, and contribute to the codebase.

  5. Advanced Configuration Options: Adding advanced configuration options for users who need more control over their development environment setup. This includes the ability to select specific versions of software, configure additional tools, and customize the installation process.

  6. Educational Resources: Developing tutorials, guides, and documentation to help users make the most of SetTheDevEnv. This will include step-by-step instructions, video tutorials, and troubleshooting tips.

  7. Regular Updates: Ensuring that SetTheDevEnv stays up-to-date with the latest versions of software and tools. Regular updates will be rolled out to incorporate new features, improvements, and security patches.

By focusing on these areas, SetTheDevEnv aims to become a comprehensive and indispensable tool for developers at all stages of their learning and professional journey.

Built With

Share this project:

Updates

Submission history