My introductory software engineering course curriculum had base HTML and CSS, JavaScript, JavaScript’s Underscore library, the Bootstrap framework, Facebook’s React framework, and the Meteor-React framework for MongoDB integration. Apparently learning process of these web development tools is supposed to generalize to the rest of software engineering. I don’t feel like it has transferred over at all. Either I learn something that’s specific to front end web development, or I learn that web development uses the same tools and techniques used for other aspects of software engineering.
The only IDE used in this course is Jetbrains Intellij. Out of all the Jetbrains products, I’ve only used Pycharm. I only have passing familiarity with Rider through watching my friends use their preferred IDE for C# and C++. I’ve had a good experience with Jetbrains’ products and will likely purchase the developer suite in the future.
The final project for the course used a form of agile project management called issue driven project management, where incomplete and broken features are divided up into smaller todos. My group used projects in a GitHub repository to create a new milestone for every week we worked on the project. Each milestone is divided into ten issues distributed across the five members of the group. Ten was a project requirement for the class, so it sometimes resulted in unnecessary breakdowns in tasks and uneven workload distribution.
I do often look at my friends’ personal projects so issue driven project management is nothing new to me. A pattern I’ve noticed is that the issues for bigger projects are first categorized by function to maintain readability because there may be many tens or even hundreds of issues. There isn’t much for me to say about this topic as I can’t think of another way to keep track of the development of a project. It’ll be akin to explaining why the wheel is often the ideal ground interface for the transportation of mass in an environment with normal force and friction.
For much larger projects that involve many hundreds or thousands of programmers contributing code, such as of FAANG’s software as a service products, the “go fast break things” mentality probably stops working at the level of design decisions, where lining up many moving parts become important.
Given that there was one whole 75 minute classroom section dedicated to discussing a singular ethical problem in the entirety of the course, it seems evident that ethics isn’t one of its core aspects. It’s a shame that this part had to go, but this is a computer science course, not philosophy. Once, I might have thought that the current generation of computer science majors would have some discernment concerning what types of employers they would work under, because they must have seen the problems the tech sector caused in the course of their lives. Such illusions were cleared when almost half the class argued that working to develop shoddy identification software for law enforcement is an ethical act.
I could say something absurd such as the problems of mass data harvesting and social media induced radicalization would have been prevented if more developers gave ethics more brain space, but I don’t think this is true at all. I believe that these are the long term results of design decisions stemming from technological limitations of the time. The difficulty of payment options through the early internet made advertisements the predominant source of website revenue led to survival pressures for better advertisement effectiveness, cumulating to personalized ad targeting. The inability for social media platforms to scale moderation (along with corporate greed) allowed for radicalized speech to persist for long enough where consequences made their way to the real world, such as the Rohingya genocide. These are black swans, things that could not be predicted at the moment of decision but obvious in hindsight. We could take these as a lesson that the smallest of design decisions can lead to great consequences, and much more so if the upper bound of a product’s demographic is the population of the planet.