This semester introduced me to software engineering which was different from my previous classes that focused on circuits, hardware, and systems. Prior to enrolling in ICS 314, I had only had experience in object-oriented programming in C/C++. However, completing this course has been very insightful, as it introduced me to various concepts and tools for web development. I have also gained an understanding of the uniqueness of software engineering as its own field aside from common engineering disciplines such as electrical, mechanical, or computer engineering. I always wondered why this wasn’t a part of the engineering department’s curriculum and found that it was more aligned with information technology sciences.
Among the various skills I learned, functional programming was an important aspect that caught my interest. I learned that functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids changing state and mutable data. A component that I learned was first-class functions which can be assigned to variables, passed as arguments to other functions, and returned as values from other functions. Another was recursion which is when functions call themselves with modified arguments until a base case is reached.
When considering Coding Standards, which are crucial for maintaining code consistency and organization, I had reserved thoughts about ESLint. While I disagreed with some of ESLint’s formatting conventions, such as positioning ‘else’ statements and minimal spacing, I acknowledged its purpose in improving code readability and structure. Especially in collaborative projects, ESLint has demonstrated strong coding standards in ensuring a consistent coding style across the team, ultimately facilitating the development process.
At the start of the semester, I had numerous questions regarding the essence of software engineering and its relevance to my major, which is computer engineering, along with exposure to other engineering disciplines around me. After conducting thorough research to gain clarity, I’ve come to understand that the term “software engineering” is sometimes not acknowledged as genuine engineering by many within the engineering community, largely due to its uniqueness. There’s a prevailing misconception that engineering strictly pertains to physical products; however, software can also be considered a tangible product in the form of developed programs. In this analogy, a program resembles a bridge constructed by a civil engineer. Both professions demand problem-solving skills to conceptualize, create, and rigorously test the quality of their respective products. Despite its attributes and challenges, software engineering can align with other engineering disciplines, though this recognition may not be immediately apparent based on who is asked.
In brief, I was overwhelmed but enthusiastic to learned the topics covered in ICS 314, with an addition of providing a solid foundation in practical skills. The exposure to a diverse array of concepts will be useful in my future coursework and professional development as a computer engineer.
Note: Chatgpt attributed in fixing punctuation and grammar.