Cumulative Reflection
During my time at Iowa State University, I have learned a lot about engineering and the engineering world. I have learned numerous different processes and skills that I hope I will be able to apply to my future career. Many of these skills are technical skills, like how to design an object-oriented program well, but there are also non-technical skills that will be just as important, such as how to work with a team on a project. Looking back over my four and a half years at Iowa State, I feel that most if not all of my classes were helping me prepare for a career in some way, even the classes I did not particularly care for. Because of this, I feel that Iowa State has prepared me well for challenges I may face in the workplace.
I know that computer engineering can be a very challenging field to go into, especially when we need to do things quickly. Code that may be fine for a class will not work nearly as well in the workplace, when you need to return to it and fix some hidden bug three years later, after you do not remember what it does. This is especially important when dealing with large systems, since those can quickly become unmaintainable if you are not careful. One class in particular, Software Architecture and Design, has been very effective in teaching me different ways to write object-oriented programs that are easy to expand on and easy to maintain. It has also taught me some useful refactoring skills, so that if a code base does become unwieldy, I have a better idea of how to fix that problem. I feel that these skills will greatly increase my ability to work with large systems, and will help me design them more efficiently and effectively.
I also feel that my work with different algorithms will be very helpful in solving different engineering problems. Trying to do things quickly and efficiently while still doing it correctly seems to me to be one of the most challenging and important aspects of computer engineering. While technology is advancing quite quickly these days, you can still easily see the importance of a good algorithm with large enough data sets. While I did get some good work with algorithms here at Iowa State University, I do wish I had gone farther with it. The one class on algorithms that I took, Design and Analysis of Algorithms, was very good, and I learned a lot about different types of algorithms through that class. However, I feel like there is a lot more to algorithms than what I learned in that class and I wish I had dived deeper into that while I was here at Iowa State.
As far as more non-technical skills go, a lot of the classes I have taken have emphasized group work. While I am personally not a fan of group work, I understand that it is necessary, especially since most of my work in my career will be group work, since I will be working with a team of other developers on whatever project I am working on, no matter what I do in computer engineering. Because of all this group work that I have had to do, I feel that I am better prepared to work on a team in my career. I also feel that I have had a good amount of experience with identifying ethical issues in engineering. A few different classes talked about this issue of balancing business costs with different ethical problems. Before coming to Iowa State, I felt that ethics were fairly simple and that all you had to do was do the right thing. However, the part of doing the right thing can become extremely difficult, especially when business costs are involved. The cost of recalling a product to fix some flaw can be enormous, and you have to be able to judge whether that flaw is going to affect the product enough that it needs to be fixed. I still feel that any mistake that could cost people their lives needs to be fixed, but it becomes much harder to do when fixing those mistakes can cost people their jobs. It all has to come down to whether or not people could be severely injured because of this mistake, and you have to be able to own up to your mistakes when they happen.
While my classes certainly taught me a lot of different skills, I still learned some skills outside of class. Whenever I need to do some type of programming assignment, I often find myself looking at different programming references, such as Javadocs for the different libraries, in order to find the most efficient way to solve whatever problem I’m running into. I have also started using different types of tools to help me debug my programs, such as Valgrind. While Valgrind initially looked like a very complicated tool that would do more harm than good if I tried using it, thanks to the experience I got during my internships, I learned just how useful it is for debugging memory issues in C and C++. Finally, if I’m really stuck on some debugging task, I’ll use sites like Google and StackOverflow to see if I can find someone else who ran into the same bug and fixed it, since that’s a much better solution than spending hours trying to track down one bug.
I also learned a lot in my time spent outside of classes. Being a part of the Iowa Statesmen chorus was a good way to meet people. There are all types of different people in the choir, but being in the choir was something that we all had in common, so it was a helpful way to get to know someone. It was also a nice way to relax in between all the difficult engineering classes I had to take. Another club that I learned a lot from was the Iowa State Game Development Club. I really enjoyed my time with this club, and being a part of it made it even easier for me to meet people who are just as into video games as I am. I also learned a lot about the game development process, and even made a couple of games on a team with a couple other people during the game jams that the club hosted. These experiences really let me know for sure that I wanted to go into game development, and hopefully they gave me the experience that I need in order to be successful in the game development industry.
I have always felt that learning should be lifelong. There are always new things to learn, new practices to discover, and new ways of doing things that you had never heard of before. This has only been strengthened by my time here at Iowa State, as I have learned so many new things during my time here, but still know that there is much more that I could learn. Many new problems are created each day, and part of our job as engineers is to use the skills we have to find the best solution possible to those problems. Being able to solve these problems would not be possible if we never learned any new skills, so it is very important to continue learning throughout your entire life.
If I had to redo my undergraduate work again, I would make sure I took a closer look at the possible tech electives I could take, and make sure to pay close attention to their pre-requisites. While I enjoyed the electives I chose to take, there were some electives that I wish I had taken instead. One big example that comes to mind is that I did not realize when I was choosing electives that Iowa State had a video game programming class, called Computer Game and Media Programming. I really would have enjoyed taking this class, because part of the class focuses on programming games with consoles in mind, rather than just programming for a computer. This would be very useful for my career as a game developer. Unfortunately, by the time I realized that the class existed, it was too late for me to be able to take it, as it required me to take a computer graphics course that I was not interested in, and there wasn’t enough time for me to take both courses before I graduated. While this isn’t the end of the world, it would have been really nice to get some experience programming for consoles while I was in school, as it would make the transition into game development as a career that much easier.
Overall, my time here at Iowa State has been very helpful for my future career as an engineer. I have learned many skills that will be necessary for me in the future, both technical and non-technical. While there are things that I wish I had done differently, I do not think there is anything that is essential that I missed out on. There is a lot more I would like to learn, but I think I have enough of a base skill set that I can start learning these things outside of the classroom.
I know that computer engineering can be a very challenging field to go into, especially when we need to do things quickly. Code that may be fine for a class will not work nearly as well in the workplace, when you need to return to it and fix some hidden bug three years later, after you do not remember what it does. This is especially important when dealing with large systems, since those can quickly become unmaintainable if you are not careful. One class in particular, Software Architecture and Design, has been very effective in teaching me different ways to write object-oriented programs that are easy to expand on and easy to maintain. It has also taught me some useful refactoring skills, so that if a code base does become unwieldy, I have a better idea of how to fix that problem. I feel that these skills will greatly increase my ability to work with large systems, and will help me design them more efficiently and effectively.
I also feel that my work with different algorithms will be very helpful in solving different engineering problems. Trying to do things quickly and efficiently while still doing it correctly seems to me to be one of the most challenging and important aspects of computer engineering. While technology is advancing quite quickly these days, you can still easily see the importance of a good algorithm with large enough data sets. While I did get some good work with algorithms here at Iowa State University, I do wish I had gone farther with it. The one class on algorithms that I took, Design and Analysis of Algorithms, was very good, and I learned a lot about different types of algorithms through that class. However, I feel like there is a lot more to algorithms than what I learned in that class and I wish I had dived deeper into that while I was here at Iowa State.
As far as more non-technical skills go, a lot of the classes I have taken have emphasized group work. While I am personally not a fan of group work, I understand that it is necessary, especially since most of my work in my career will be group work, since I will be working with a team of other developers on whatever project I am working on, no matter what I do in computer engineering. Because of all this group work that I have had to do, I feel that I am better prepared to work on a team in my career. I also feel that I have had a good amount of experience with identifying ethical issues in engineering. A few different classes talked about this issue of balancing business costs with different ethical problems. Before coming to Iowa State, I felt that ethics were fairly simple and that all you had to do was do the right thing. However, the part of doing the right thing can become extremely difficult, especially when business costs are involved. The cost of recalling a product to fix some flaw can be enormous, and you have to be able to judge whether that flaw is going to affect the product enough that it needs to be fixed. I still feel that any mistake that could cost people their lives needs to be fixed, but it becomes much harder to do when fixing those mistakes can cost people their jobs. It all has to come down to whether or not people could be severely injured because of this mistake, and you have to be able to own up to your mistakes when they happen.
While my classes certainly taught me a lot of different skills, I still learned some skills outside of class. Whenever I need to do some type of programming assignment, I often find myself looking at different programming references, such as Javadocs for the different libraries, in order to find the most efficient way to solve whatever problem I’m running into. I have also started using different types of tools to help me debug my programs, such as Valgrind. While Valgrind initially looked like a very complicated tool that would do more harm than good if I tried using it, thanks to the experience I got during my internships, I learned just how useful it is for debugging memory issues in C and C++. Finally, if I’m really stuck on some debugging task, I’ll use sites like Google and StackOverflow to see if I can find someone else who ran into the same bug and fixed it, since that’s a much better solution than spending hours trying to track down one bug.
I also learned a lot in my time spent outside of classes. Being a part of the Iowa Statesmen chorus was a good way to meet people. There are all types of different people in the choir, but being in the choir was something that we all had in common, so it was a helpful way to get to know someone. It was also a nice way to relax in between all the difficult engineering classes I had to take. Another club that I learned a lot from was the Iowa State Game Development Club. I really enjoyed my time with this club, and being a part of it made it even easier for me to meet people who are just as into video games as I am. I also learned a lot about the game development process, and even made a couple of games on a team with a couple other people during the game jams that the club hosted. These experiences really let me know for sure that I wanted to go into game development, and hopefully they gave me the experience that I need in order to be successful in the game development industry.
I have always felt that learning should be lifelong. There are always new things to learn, new practices to discover, and new ways of doing things that you had never heard of before. This has only been strengthened by my time here at Iowa State, as I have learned so many new things during my time here, but still know that there is much more that I could learn. Many new problems are created each day, and part of our job as engineers is to use the skills we have to find the best solution possible to those problems. Being able to solve these problems would not be possible if we never learned any new skills, so it is very important to continue learning throughout your entire life.
If I had to redo my undergraduate work again, I would make sure I took a closer look at the possible tech electives I could take, and make sure to pay close attention to their pre-requisites. While I enjoyed the electives I chose to take, there were some electives that I wish I had taken instead. One big example that comes to mind is that I did not realize when I was choosing electives that Iowa State had a video game programming class, called Computer Game and Media Programming. I really would have enjoyed taking this class, because part of the class focuses on programming games with consoles in mind, rather than just programming for a computer. This would be very useful for my career as a game developer. Unfortunately, by the time I realized that the class existed, it was too late for me to be able to take it, as it required me to take a computer graphics course that I was not interested in, and there wasn’t enough time for me to take both courses before I graduated. While this isn’t the end of the world, it would have been really nice to get some experience programming for consoles while I was in school, as it would make the transition into game development as a career that much easier.
Overall, my time here at Iowa State has been very helpful for my future career as an engineer. I have learned many skills that will be necessary for me in the future, both technical and non-technical. While there are things that I wish I had done differently, I do not think there is anything that is essential that I missed out on. There is a lot more I would like to learn, but I think I have enough of a base skill set that I can start learning these things outside of the classroom.
General Education Reflection
During my time here at Iowa State, I have taken many different types of classes, not only in my major, but outside of my major as well. I feel that most if not all of these classes have been very helpful in making me a better worker, and have given me a better understanding of how different people may view things. This is a very important skill for anyone to have, regardless of their career choice, as just about everything we do involves other people in some way. My own personal career goal is to enter the game development industry. In the short term, I would be fine with any type of programming role, though in the long term I would prefer to work more on the gameplay and mechanics side of programming.
Looking at the game development industry, you can definitely see why you would want to be able to see things from a different point of view. Because of the way video games are, the game development industry is very multidisciplinary, requiring people from many different backgrounds to make. You need programmers to make the game function, but beyond that you need artists to make the game look nice, musicians to add music to the game, sound designers for sound effects, businessmen and advertisers to make sure the game gets sold... the list goes on and on. Working with all these different people can be very difficult, since they all have their own ideas on where the game should be headed, and what parts of the game need to take priority, so being able to see things from their points of view will make it easier to work with them. I feel that the classes I have taken will be helpful with knowing how others think, especially the diversity class I took. It will also be helpful for thinking of new ideas on how to make games better.
During my time at Iowa State, I tried to mainly take Psychology courses for my general education classes. I was interested in Psychology, and ended up making it a minor, so I felt my time would be best spent taking those classes, since I enjoyed them. I feel that Psychology is very helpful when working with devices that other people can use, as you want to make sure the user interface is designed in a way that makes it easy for the user. One of the classes I took in fact talked a lot about human computer interaction, and how we can design things so that the people using them understand what they’re doing and know how they’re going to do it. This type of class is very helpful for my ideal career, since there is a lot of work put into making games easy to pick up. These classes can also help me when solving more general problems, since I can get a better idea of how the players may want something to work, or how to make something work in a way that makes the most people enjoy it. Taking these classes has made it easier for me to see how different types of people could be affected by different solutions to the same engineering problem, so I can find a solution that helps the most people.
All in all, I feel that the general education courses I’ve taken are almost if not just as important as the engineering classes I’ve taken. Thanks to those classes, I have gotten plenty of non-technical skills that I will be able to apply in my career, as well as my personal life. While these classes didn’t teach me ways to directly solve an engineering problem, they have certainly taught me how to better consider how my solutions affect others, and how I can improve those solutions in order to help more people. While my ideal career path isn’t exactly something that people consider to affect many people greatly, I personally feel that it has the power to do just that. I’m hoping that my knowledge about Psychology will help me make games that not only make people want to play them, but help people learn something from them. This way, my work can not only be a form of enjoyment, but also help improve the world in some small way.
Looking at the game development industry, you can definitely see why you would want to be able to see things from a different point of view. Because of the way video games are, the game development industry is very multidisciplinary, requiring people from many different backgrounds to make. You need programmers to make the game function, but beyond that you need artists to make the game look nice, musicians to add music to the game, sound designers for sound effects, businessmen and advertisers to make sure the game gets sold... the list goes on and on. Working with all these different people can be very difficult, since they all have their own ideas on where the game should be headed, and what parts of the game need to take priority, so being able to see things from their points of view will make it easier to work with them. I feel that the classes I have taken will be helpful with knowing how others think, especially the diversity class I took. It will also be helpful for thinking of new ideas on how to make games better.
During my time at Iowa State, I tried to mainly take Psychology courses for my general education classes. I was interested in Psychology, and ended up making it a minor, so I felt my time would be best spent taking those classes, since I enjoyed them. I feel that Psychology is very helpful when working with devices that other people can use, as you want to make sure the user interface is designed in a way that makes it easy for the user. One of the classes I took in fact talked a lot about human computer interaction, and how we can design things so that the people using them understand what they’re doing and know how they’re going to do it. This type of class is very helpful for my ideal career, since there is a lot of work put into making games easy to pick up. These classes can also help me when solving more general problems, since I can get a better idea of how the players may want something to work, or how to make something work in a way that makes the most people enjoy it. Taking these classes has made it easier for me to see how different types of people could be affected by different solutions to the same engineering problem, so I can find a solution that helps the most people.
All in all, I feel that the general education courses I’ve taken are almost if not just as important as the engineering classes I’ve taken. Thanks to those classes, I have gotten plenty of non-technical skills that I will be able to apply in my career, as well as my personal life. While these classes didn’t teach me ways to directly solve an engineering problem, they have certainly taught me how to better consider how my solutions affect others, and how I can improve those solutions in order to help more people. While my ideal career path isn’t exactly something that people consider to affect many people greatly, I personally feel that it has the power to do just that. I’m hoping that my knowledge about Psychology will help me make games that not only make people want to play them, but help people learn something from them. This way, my work can not only be a form of enjoyment, but also help improve the world in some small way.