Saturday, December 21, 2013

ICS 314: Software Engineering, A semester in review.

The semester was challenging. Every week there was a substantial amount of homework to be done. In hindsight, however, I feel like I benefitted a huge amount. I learned and developed my skills as a programmer and just by completing this class I am rewarded with a humongous sense of accomplishment. I am taking away from this class a set of skills that I can apply in the future. Here is my final blog of my journey, my trials and tribulations, and thoughts of ICS 314: Software Engineering.



ONCE UPON A TIME




As a Information and Computer Sciences student, I've always heard about ICS 314 & 414, Software Engineering I & II. I've heard that they were intense classes, but came highly recommended. I remember one fellow student (ahead of me by a few semesters) tell me (a wide-eyed, innocent, beginning ICS student) that "it was a tough class, but I wouldn't feel ready to go out into the job market if it were not for those two classes." That really stuck with me. So, when I registered for this class I was a little excited, a little more scared, and a lot determined to develop my skills as a programmer.



The first one or two weeks of class, I remember the work load that was dropped on us and thinking, what did I get myself into. But I remembered what my fellow student had previously said and pushed on. Ultimately, I was glad that I did. I learned a lot about software development, managing time, stress, and collaborating with others.



During the first or second week we got introduced to the WOD or workout of the day. It was Professor Johnson's concoction to get us to learn and become fluent in the material for the rest of the semester. WODs were stressful, they were intense, but I learned and, just as important, retained everything in the WODs. Being able to understand and remember what a particular piece of code could/was doing really allowed me to become a fluent programmer in Java, Bootstrap, the eclipse IDE, and the Play! framework. This fluency also extended to the concepts in Software Engineering like authentication, pagination, application frameworks, and version control. Fluency in these skills will definitely come in handy in the future as I pursue a career in .



STARTUP WEEKEND



I received a taste of the benefits of having fluency in these skills while participating in . EVERY group leader was looking for application programmers and if it is like that in the job market, well I am going to be a happy man. Participating in startup weekend really put my and the other ICS 314 students collaboration skills to the test. We discussed, planned out, and programmed our Hawaii Hoops Network application. Our collaboration there was face-to-face and I couldn't imagine our group doing that project over google hangouts or purely email because I think that there would be too much mis-communication. Perhaps if there were only small issues to be discussed non face-to-face collaboration could work.



Since Startup Weekend was also only two and half days, our time was really limited. It really came in handy that we were being "trained" (well more like ) into programming under intense stress and pressure with limited time constraints, through the WODs.



Oh, and we won "Most Likely to Succeed"



During startup weekend I also learned the importance of project management. Although wehad learned about version control with GitHub at that point we did not learn about project management through GitHub's milestones and issues. Looking back I wished we had learned about it sooner so that it would have allowed us to keep track of who was doing what, what was finished, what else needed to be done, etc. Without it there were some efforts duplicated during Startup Weekend. Thankfully during our Final Project we learned about about projectmanagement and GitHub's milestones and issues.



FINAL PROJECT



In our Final Project we were to build upon the Surferpedia application everyone had individually been working on all semester. We were partnered up and tasked to apply everything we had learned that was not already in our current working version of Surferpedia. I was partnered up with , who I already had the honor of working with during Startup Weekend and in previous group WODs.



Going into the final project, we were introduced to milestones and issues in GitHub. The practice of project management was fairly new to the two of us. So, what we ended up doing was just gung-ho-ing it. For the most part,going through the requirements for the Final Project and making each requirement into an issue. That was pretty naive of us. We should have spent more time, thinking through each requirement and figuring out how to establish an issue that could be completed independently of another issue.



Because we did not plan well our project plan changed and boy did it change a lot. There were issues of mine that "bled" into AJ's issue. In other words my issue depended on an issue of AJ's to be completed and vice versa. So, what ended up happening was we worked on each other's issues where need be. We also ended up adding more and more issues, so much that by the end of the project we had more than doubled the total amount of issues. But many of the new added issues were small and easy to implement, so I guess I should be less hard on ourselves. Many of the new issues were also tacked onto the end when we got to implementing JUnit testing.



We were also tasked to create comprehensive tests that checks the functionality of the web application. The tests were to basically test the navigation, links, and queries that the site had. We used FluentLenium and JUnit to create these tests and once I got the hang of creating tests all other tests came into fruition quite easily.



Home Page of Surferpedia



Once finished with the project we deployed the application to CloudBees. It can be found . The GitHub Repo of our project can also be found . For anyone who would like to expand or implement their own functionality feel free!



BACK TO THE FUTURE



After this semester I'll say it again I learned a ton. I really do feel like I am fluent in the technologies taught, especially Bootstrap, Java, and the Play! framework. However, some weaknesses that I need to work on became apparent throughout the semester.



One, I need to practice reading docs. Only at the end of the semester during the final project could I make sense of programming docs. To the point where I could implement a method by looking up the associated document. Before, I would only learn through example and sometimes it is hard to find a correct implementation of the method. Two, I need more experience with project management. My first experience with project management definitely shows room for improvement. Three, I need to keep exploring for new technologies. Before this semester I did not know about Bootstrap, but now I can build sleek look websites in no time. So, looking for new technologies like Bootstrap will increase my ability to get more done and do it better.



Looking ahead I think that this course, along with other courses in GIS and Remote Sensing, will help me to pursue a geospatial developer position, as there are not many Geospatial practitioners that can program. It will also help me in upcoming courses like ICS 414: Software Engineering II and GEOG 489: Applied GIS. Both being programming courses. This course may also help me in courses I take when I pursue a graduate degree in GIS.



CONSPECTUS FOR FUTURE STUDENTS



ICS 314 can be thought of an entire semester of honing your programming skills. Through the WODs, you'll be pushed to learn, retain, and become fluent in the skills necessary for any programmer with great aspirations. You'll also learn to deal with stress, think under pressure, and collaborate. It is a hard class, but every time you hit a obstacle keep working at it. Like one of my inspirations once said:



"The brick walls are there for a reason. The brick walls are not there to keep us out. The brick walls are there to give us a chance to show how badly we want something. Because the brick walls are there to stop the people who don't want it badly enough They're there to stop the other people." -



So, keep programming, keep learning, and keep "It was a tough class, but I wouldn't feel ready to go out into the job market if it were not for those two classes" in mind.
Full Post

No comments:

Post a Comment