Another semester draws to a close, and with it ends this short, yet significant, journey. I have gained a multitude of skills and experiences, all of which, I have found infinitely interesting and intriguing, yet at the same time I am unsure as to how I will use them. It is impossible to say how what I have learned in this course will affect me in the future, however, I can say with certainty, that this course has changed my perspective on coding, and has made the field all the more exciting.
One of the first concepts we were introduced to in this course was functional programming, a type of programming based around keeping computations as succinct as possible through specialized functions. We experienced this type of programming with the underscore library, a collection of functions that perform relatively simple computations, but reduce it down to one line of code. making what could be several lines of code, only one or two lines goes a long way in making the code more efficient and easier to read.
Learning functional programming was rather difficult however, and I found myself struggling with it quite a lot in the beginning. The hardest hurdle for me was the memorization aspect of functional programming, since this method of programming uses functions to focus on computations, there are large libraries of specialized functions for me to use. We used the Underscore library in this course, and the hardest part was probably learning how to implement it, and then when it came time to use it, when to implement certain functions. I eventually got the hang of it, and our instructor forcing us to use these functions instead of having if statements in our code, certainly made things initially much harder, but as I continued to learn I gained an appreciation for how streamlined code became when you properly use functional programming. This lesson was the hardest due to how unintuitive it was, and how much effort was put into learning it, however at the end the benefit of being able to use functional programming in my own code is well worth it.
Creating code isn’t always about what you are able to do however, while in large part the work I do is mostly my own, it does not mean I cannot turn to the internet for sources and code that other people have spent the time for fellow programmers to use in their own code. In this way, I found our lesson on open source software development to be quite interesting, delving into code and programs that are online and open source, what that means, how that works, and how to use it. In essence, when you license something as open source, you are giving the essentially creating a working program that works and users can use, that can also be taken by any developer, and modified or changed so that the program can be enhanced, or modified to fit a developers needs.
The open source way of licensing is infinitely intriguing to me, to think that a developer could spend so much time to create a product, and put it only only to allow people to muck around in it and change it. I see it as much the same as someone buying a tool or machine and then modifying them or tearing them apart to make something new, yet with open source projects, a lot are for free. The difference though is that you can hold copyright over that modified piece of code, and so it leads to an interesting thing where you can be associated with a project, just through that team of developers choosing to use your code. It was an interesting thing to delve into and unravel and certainly played with my imagination about what a community of people could do with a program, and how all those minds could possibly improve it. Open Source Licensing feels community based to me, and that aspect appeals to me in many ways, and it’s certainly an aspect of software engineering that will stick with me throughout my career.
Out of all the lessons of this course; however, I found one to rather impactful and incredibly important; that would be the ethics of software engineering. As with any field of study, there are ethics and standards that are expected to be upheld, so that those that will eventually use whatever knowledge or product we create, can be confident in the product, whatever this may be. For software engineering, ethics are especially important as we will most likely be creating products and software that will be used by a multitude of people in a multitude of ways, but usually in very personal or professional ways.
In software engineering, the primary rule of ethics is to be as beneficial, unbiased, and respectful to the people and the society using as possible. This includes, making sure your software is for some benefit to society, that it does not violate the privacy or our users trust, that it conforms to coding standards, etc. The focus on ethics was never something I have seen in a coding class up until this point, but it was incredibly valuable, it really put into perspective just what we had the capability to do, and how we should use said knowledge. This lesson put into perspective the ethics of programming, and in a way, made me realize that I could help make society better and improve the lives of others, even if it is a rather small in impact.
These are the core lessons I took away from this course, but there was so much more I learned, however, I fear that if I continued, I might end up rambling more than I already have. Still, as I look back on this course, I must appreciate the perspective it gave me of the software engineering landscape, introducing me to concepts that excited me and itched the creative spot in my mind that most general coding classes I had taken up until this point had failed to scratch. In the end, I still feel I have much to learn, that I have only scratched the surface of software engineering, but I can safely say that this is a field I am incredibly interested in, and I can attribute my excitement towards this field all to this course, and the lessons I have learned from it.