Beyond Web Applications

10 May 2023
Source: Microsoft Bing Image Creator

Beginnings

When I first enrolled in ICS 314, I did not know what to expect. I knew it was about Software Engineering and that we would be learning how to make an application, but not much else. Now that it is nearly over, I can say that not only did I gain valuable experience in developing web applications but I also acquired skills and knowledge that will continue to help me as a software engineer. In this essay, I would like to explore two important topics that were covered this semester: development environments and ethics in software engineering.

The IDE-al Coding Environment.

Before this class, my preferred method of editing code was a simple text editor: Sublime Text. I never really put much consideration into the tools that I used to write programs other than wanting some color and the ability to keep track of where braces closed. However, as we delved into each module, I quickly gained an appreciation for using a more specialized toolset.

Philip Johnson describes an integrated development environment (IDE) as a software development tool that has:

So an IDE is more than a text editor. This language-aware editing means that the IDE understands the syntax and code that you are writing and can even offer suggestions or corrections as you are writing the code. This feature has been very helpful in saving time. Another time-saving aspect is the integrated compilation and stepwise execution - you don’t need to open terminal or command line tool in another window and you can go through your program one line at a time.

One of my favorite features of the IDE IntelliJ is the key bindings that allow you to quickly execute useful commands such as finding the declaration of a variable or quickly fixing simple lint errors.

Using an IDE has been so eye-opening. Learning to use one has saved me time and effort and allowed me to focus more on my code than the tedium of constantly fixing errors or renaming every instance of a changed variable. These tools aren’t just useful for developing web applications, but they are especially useful for creating software with large amounts of code. Nowadays, the idea of going back to a text editor is unappealing.

Ethical Codes: return action === good ? do(action) : !do(action);

When you google, “definition of ethics,” one of the first results that comes up is to a Canadian Government website for The Office of Public Service Values and Ethics (OPSVE). In the section, “What are ethics?” they write:

Derived from the Greek word “ethos”, which means “way of living”, ethics is a branch of philosophy that is concerned with human conduct, more specifically the behavior of individuals in society. Ethics examines the rational justification for our moral judgments; it studies what is morally right or wrong, just or unjust.

In a broader sense, ethics reflects on human beings and their interaction with nature and with other humans, on freedom, on responsibility and on justice.

Ethics and morals are the concepts that categorize how we behave as people in a functioning society. The extension of these behavioral rules/expectations to the field of technology and software engineering should be natural. Technology has become so intertwined with everyday life, our lives would be devastated if it were to suddenly “go rogue” or stop working as intended.

The ACM code of ethics can be summarized as follows:

I sometimes take for granted how much power a software engineer can have. When we picture a programmer “doing harm” we often envision some hacker breaking into a government network and accessing top-secret documents, but that’s mostly Hollywood fiction. Doing harm can be writing code that allows gross misinformation to be peddled to the masses for financial profit. Doing harm could include writing facial recognition software for law enforcement that is biased toward a particular group of people.

But it’s not enough to simply avoid harm. Following the ethical guidelines for software engineers includes using our skills for the benefit of the public. This could include volunteer work and it can also include developing educational software that aids teachers and students.

Source: Star Trek: Voyager S04E25

A question that continues to trouble me is: In the pursuit of doing good, how should we weigh the potential for harm?

An example of ethical concerns in software engineering is the topic of Artificial Intelligence (AI). Like many others, I have used ChatGPT. Even the first image for this essay was “created” using Bing’s AI image generator. The potential good for this technology seems endless. Salman Khan, the founder of Khan Academy, touted the potential impact of AI on education saying that it could give “…every student on the planet an artificially intelligent, but amazing, personal tutor.”

At the same time, many are concerned with the ramifications of letting its development go unchecked. Just recently, Geoffrey Hinton, “Godfather of AI”, resigned from his position at Google citing the dangers of AI. In an interview with the New York Times Hinton says, “It is hard to see how you can prevent the bad actors from using it for bad things.”

Additionally, several CEOs from Big Tech met with White House officials to discuss issues and safety concerns. Many people are worried about job displacement, privacy issues, the proliferation of fake media, and the risk of AI becoming too smart and acting against the interests of humanity. There is so much potential for good and yet there is also so much potential for harm.

It is difficult to act with certainty when there are so many variables that can have good and bad effects. I hope that as I develop as a software engineer I will continue to prioritize ethical practices so that I can avoid doing harm and do good.

To be continued…

This class has given me valuable experience and insight into software engineering. The exposure to various topics such as development environments and being an ethical software engineer has been beneficial in practical and intellectual ways. As a result, I have a better understanding of the tools that I use and how they should be used for good.