Over this course I learned that software engineering is a lot more than just writing code. It’s about process, people, constraints, and making tradeoffs that still lead to reliable, maintainable software. We also talked about how large language models like ChatGPT and Copilot are changing development, and why they’re tools in the workflow, not replacements for understanding or communication.

On the practical side, I got comfortable using VS Code, extensions, Git from both the command line and the UI, .gitignore, branching, pull requests, and GitHub Pages. I used GitHub Issues, labels, and standup notes to structure work more like a real team. I built and validated semantic HTML pages, then added CSS for layout and responsiveness using the box model, flexbox/grid, media queries, and web fonts. I also spent time in Chrome DevTools inspecting the DOM, watching network requests, and debugging.

For JavaScript, I practiced var/let/const scoping, objects, loops, callbacks, and timers like setTimeout and setInterval. I created custom web components using the Shadow DOM and stored data with localStorage. Finally, I dug into error handling and monitoring: different console methods, try/catch/finally, throw, custom error types, global error handlers, and integrating a third-party error tracking service to see client-side issues in a more realistic way.

This class also had a team project which can be read about here.