Posts

Final Learning Journal Entry

 The three more important things I learned in this course were database design, transaction management, and data storage.  The database design chapter was very informative. When working on projects in the past, it was relatively easy to figure out the main entities and attributes I was going to use. But the hard part was always visualizing the relationships between them and the issues they can create in database tables if they're badly set up. I think this part of the course gave me a good amount of knowledge on how to avoid these pitfalls. I found the section on transaction management pretty interesting. It reminded me of material we learned in CSUMB's networking course. Particularly about how networking systems manage several competing network requests, and how internet traffic is managed. I found the section on data storage interesting as well. I wasn't aware that partitions and storage could be optimized to the degree shown in the book chapters.

Learning Journal Week 5

 What the author means by slow indexes is that indexes are supposed to speed up look ups on a data table. However, there are aspects of indexes that can slow down searches. For example if we're looking for several different cells that match the value we're looking for, the index has to traverse the tree to get to our first match, but but then has to follow the chain of nodes to capture all the matches. This can take pretty long if there are many table rows that match our search value. Also, the accessing of the table itself can increase the time it takes to search for a value as well. It seems consistent with our text's and how it recommends approaches to database design that avoid redundancy. The more unique our value, the faster it is to find all instances of it.

Week 8: CST438

 I gained many insights into software engineering through this course. I think the details about Agile approach to project management were really helpful, particularly for someone about to join the industry. I've seen parts of Agile used in past team projects but I think I like how the team project in this class gave us a more complete view of how Agile would be used. I enjoyed learning about the Waterfall approach. The main reason is that it's not something we're exposed to much as students. Most classes tend to utilize portions of the Agile approach instead. But it was nice to be exposed to both approaches in this class. The readings on Google's approach to testing were pretty informative. In other courses we tend to skip over testing or only learn about it from a technical (coding) aspect. In this class we got to learn in depth about the reasoning behind different types of tests and how a large company like Google handles their own testing. I liked practicing with Re...

Service Learning Reflections

 My experience went really well. I had the opportunity to learn about how nonprofit organizations operate. I also had the opportunity to help a community in another city. I learned a lot about the organizations that collaborated with my site and the projects they were able to put together for community members. Part of my role was to reach out to other organizations for opportunities to partner with my site. The most impactful part of my volunteer experience was seeing how many committed organizations and individuals are working hard to bring services to people in need. I think my main challenge was onboarding and getting that done as quickly as possible. But my site manager was extremely supportive and gave me everything I needed to succeed. My advice to future Service Learning students is to ask questions and ask for help when needed. People understand we're students and each site's processes are new to us. It's okay to ask.

Week 8: CST334

 One of my main goals after completing this class is to apply the knowledge I’ve gained to become a more effective engineer throughout my career. Having a stronger understanding of operating systems has already helped me make sense of many confusing error messages I encountered in the past when writing code. In particular, this course has shown me how problems can originate from layers deeper than the high-level abstractions developers typically interact with. Before, I would sometimes fix an error without fully understanding its cause. Now, after working through the material in this class, I feel much more prepared to dig deeper when diagnosing bugs and, hopefully, prevent some of them altogether. I also believe that with this foundation, reading and understanding documentation will be far less intimidating. Knowing what’s happening under the surface of a program gives me more confidence as a programmer and allows me to approach problems with a broader perspective, rather than rel...

Week 7: CST438

 The Plan and Document process is used in software development so that much of the requirements and planning are written at the beginning of the project, and the plan is mostly followed to completion, one step after the other. In contrast, Agile development is a more flexible process where there is far less planning up front, frequent face to face meetings, and constant adaptation to changes in plans throughout the development process. The Plan and Document process is more common in projects where little change is expected and adherence to requirements are more important than flexibility. The Agile method is more common for developing software in fast changing environments where clients are likely to change their minds or market demands change quickly.

Week 7 - CST334

This week we learned about the persistence mechanisms and interactions between operating systems and I/O devices. We learned about file systems and hardware interfaces. We covered the structure and management of I/O devices such as hard disk drives, including RAID configurations and file system abstractions. We also learned how operating systems communicate with devices using memory-mapped I/O or explicit I/O instructions, and about the architecture involving CPU, memory, and various I/O buses (like PCI, SCSI, SATA, USB). We learned about how a canonical device interface typically includes status, command, and data registers. We went over communication methods including polling, where the OS checks device readiness in a loop, and interrupts, which notify the OS when a task completes. Each method has trade-offs depending on device speed. We were introduced to Direct Memory Access as a way to offload data transfers from the CPU, improving efficiency. We also learned how file systems inte...