I want to share part of the experience I gained over the course of the last four months. Some of them I have gained within the realms of the ICS 314 class, some in a different class and some outside of it. Diving into my first Software Engineering experience, the subject I would like to mention first are the different development environments I used and gained knowledge in. A development environment is a collection of procedures and tools for developing, testing and debugging an application or program. Over the course of this class, I have mainly been using the development environment, ‘IntellIJ’, to write my code in. Also, I have been using ‘Visual Studio Code’ at the beginning of the semester. For both two programs it was my first time using them and, speaking for ‘IntellIJ’, I gave gained a broad knowledge about shortcuts, additional features and the adjustments and usage of the settings. So far, privately and in College I have only been working with language specific development environment, like Oracle for Java or just plain in a file in Unix, so getting to know such a generic development environment will be of great benefit. In addition to that, I have used terminal to a good extent to run, check and invoke tests on my code.
To further share my experience over these several weeks I would like to mention the broad insight into the ethics of Software Engineering and computer science in general I gained. In ICS 314, I have gained firsthand experiences of how back-end data is retrieved, processed, and taken care of by the developer. We also briefly looked over monopolies like Facebook and how their handling of data goes against many ethical standards in Computer Science. One major discovery, perhaps obvious, I made is the ACM Code of Ethics and Professional Conduct.
A link to the ACM Code of Conduct is Here
I did not know that there exists a broadly agreed upon code of ethical standards in Computer Science. I briefly looked over some of those sections and not only was it very interesting, together with the articles we read, I could identify sections where Facebook does not meet or violates certain standards. I have not learned about computer security and data protection extensively in any class so far, but just to get a sense of how data travels on web applications will really help the understanding of further principles of that topic better, I think. In addition to that, one class that really goes well with ICS 314 and really any programming class is ICS 390. Although it is mostly based on ethics and there is no real focus on computers or technology until the end of the semester, just the introduction of ethical understanding this class teaches will, I think, build a great foundation for anyone’s future in Software Engineering and can be of great use. I first was skeptical when I read that this class is solely about ethics, but after having completed the class I can really recommend it for anyone that is looking for complementary classes to his/her course schedule.
Another mentionable thing I learned is the importance of adhering to coding standards. When I first started writing small programs in C, I did not really pay attention to the form and readability of my code. Up until college I argued that if the program works then who cares how the code looks, the end user cannot see it anyway. Of course, I was totally wrong with that assumption. Nowadays I cannot even imagine a collaboration on some sort of software that many people work on if software engineers would not adhere to coding standards. The final project in ICS 314 and my first real “long-term” group collaboration made me understand even more how important coding standards are and why there is no room to argue against it. Often, I would look at the latest commits of my team members and check out their new or adjusted code. If it were not for the useful comments they provided and coding standards they adhered to, I would have had a much more difficult time understanding what they wrote and what exactly the code does. We have been using ‘ESLint’ for the whole semester. It took me a few weeks to comfortably write my code within the standards of this coding style. I think it is part of coding itself, that you just must adjust to different languages and different required coding styles from time to time. What I would be interested in is to know if there are any attempts to generalize coding standards. Perhaps it could work in a way how accounting standards work, like the GAAP in the U.S. I know there might be some troubles adjusting those for all the different languages, but nevertheless something like that could be very useful.
To conclude this past semester, I can say that I have gained a tremendous amount of experience about Software Engineering. There were so many different things, like functional programming, semantic-ui, working under time pressure, etc. that I got an insight in and are now not foreign to me anymore. Even though I do not feel like I learned any of these subjects to full extend, which is unrealistic in four months, the foundation I have built on them will be very useful in my future in Computer Science and possible Software Engineering.