Monday, September 26, 2016

CST 338 Week 4

Week 4

This week has been pretty difficult for me and I expect next week will be more challenging due to personal life conflicts with school. Despite that, while difficult, I feel that I was able to contribute to the group assignment pretty well this week. We worked really hard and I'd like to say we did everything correctly, but I'm still expecting to get a few points knocked off because that's how the past couple of assignment have been. My team has been great though and really powering through.

For the project, we focused on implementing a class based on the methods defined by an interface. We additionally got practice working with multiple java objects and having them interact.

Specific Prompts

Give an example of polymorphism and what what be inherited between classes.

An example of polymorphism would be a ProPlayer that inherits Player. ProPlayer would inherit the methods defined in Player, like getName(). However, ProPlayer can override methods in Player to create their own implementation. ProPlayer can add their player number to the getName() method. The only exception to this would be if the methods were defined as static.

After the learning this week, can you identify the difference between Abstract classes and Interfaces? Be specific.

Abstract classes and interfaces are similar in that they both will essentially contain method stubs that are intended to be implemented by a derived class (actually, they're enforced). The difference is that an interface is completely full of these stubbed out methods and an abstract class may have complete methods in addition to their stubbed out methods. Any class that inherits either of these will be required to implement the missing classes. In Java 7 and lower (I believe) one could only implement multiple interfaces and one abstract class, but I think Java 8 allows you to inherit multiple abstract classes now. The main difference is the method implementation differences, but there are other, more detailed, ones too.

Monday, September 19, 2016

CST 338 Week 3

Week 3

I've really enjoyed the time that we've been given in this course to focus on programming assignments. This assignment was surprisingly time-consuming and required a lot of focus. The assignment prompt wasn't as explicit as it had been in the past. It's been really great though because my group has been very on it and we are continuing to finish prior to the due date, which allows me to be obsessive (I am about everything) and check everything again before we submit it. I'm after those points!

The assignment focused mostly on loops and arrays, from what I can tell. We implemented 3 classes that work together (Card, Hand, and Deck). I like that this assignment was just the foundation for a future game and can be used with any card game. I think it displays the potential benefit of OOP very well.

Specific prompts

What is the largest multi-dimensional array that you have used?

A 3x3 array is likely the largest multi-dimensional array that I've used and it was most likely for an assignment. I find myself using objects the most frequently and don't usually need to model anything larger than a 2x2.

What is the largest that you think would be unwieldy and why?

I would definitely say that a 3x3 and up would be considered unwieldy. As multi-dimensional arrays grow, they quickly become more and more difficult to contain in your head. If the person writing them struggles to understand what they are, the person reading them will likely have a much more difficult time. I like to think I'm constantly writing for a future reader. That helps me keep my code in line and (hopefully) legible.

What does inheritance do for your classes? Have you used it in the past? How?

Inheritance allows like objects to share the same code through a base class. This can be useful, but it often leads to giant messes of hard-to-follow hierarchies. I very seldom use inheritance and, in my specific profession, generally just define completely separate classes. Sometimes I will extend classes, but I can't think of a specific example for when I used inheritance outside of course work.

Saturday, September 10, 2016

CST 338 Week 2

Week 2

This week has been great. We were assigned new teams, which was the first time since this program started and I am very glad to switch it up a bit. Working with my new team was great. Everyone is familiar with git and we utilized GitHub to keep track of our code and share updates between each other. It worked out well.

The material for this week has been Java-specific lectures. I'm very familiar with Java (though I haven't used it in a while), so it hasn't been an issue for me and I feel like I'm cruising along. Working on the program was very refreshing and I found myself getting into finding all of the bugs and squashing them! Once I start, it's really hard to put it down and it made me a bit sleepy at work the following days. I am going to try to settle down and give myself same rest in future weeks.

Specific prompts

OOP is not in all languages.  Have you used one that does not?

Many people don't follow OOP with JavaScript. I use JavaScript very often and most of the time it is not in an OOP way. However, I may be known to utilize prototypes to facilitate an OOP-style language. Other than that, I don't have any experience outside of OOP (unless you count bash).

What was your experience?

OOP has been drilled into my head over time in all of my previous courses. I find it very difficult to not follow it now. I don't feel like it's intuitive and reading through the code can be very difficult. I work with several people that have functional programming backgrounds and I always have a difficult time reading through their work. However, I find it beneficial for me to have exposure to their coding style.

How extensively have you used OOP outside of the classroom?

I have used OOP more outside of the classroom than within it. I work with large applications daily that rely on this principle. It has led me to believe that it's a strong foundation and many people would benefit from understanding it. I'm actually really glad that I am able to go back through and learn it from the ground up again because it never hurts to relearn something. There may be little bits that I have missed.

Are you experience with UML diagrams and do they help?

I'm experienced with UML diagrams, but I wouldn't call myself an expert. I often draw little (simpler) UML diagram for my own reference at work when I'm learning a new application. If the database isn't too large, I'll keep a little picture of one near to understand the application better. Having said that, my work does not use UML diagrams at all. They used to create them, but found that they were never referenced by programmers and the clients didn't care what the database looked like so they were not useful and were a waste of time (money). For my work context, my company is 19 years old and we're contracted out by other companies to build web applications.

Friday, September 2, 2016

CST 338 Week 1

Week 1

Here week go again with a new course! We began this course with a pretty straight-forward string manipulation assignment that is going to be our only solo assignment for the course. Starting week 2, we will be grouped into new groups for the following assignments. We haven't had to work in groups for the past couple of classes and I have enjoyed it because I can work on my homework on my own time. I'm not super excited about having group work again, but I understand the benefits of doing so.

The solo project went fine. I read in the material that we will be deducted points if we use functionality that hasn't yet been taught. That makes me a little nervous and I found myself going back to the lecture notes often to make sure that I wasn't using something that wasn't there. I have taken several courses in Java and have worked with it professionally (and still do every so often). It makes it a bit difficult to remember where we're at in our guided instruction.

Specific prompts

Have you used Eclipse before?

I have used Eclipse in both courses for school and professionally. However, I switched to IntelliJ and found that I prefer it for Java development. I primarily switched because the dark theme that I was using at the time for Eclipse wasn't consistent with the toolbars. So, the text editing portion of the editor was dark and the navigation and side panels were white. I look at a computer a lot and prefer dark themes for things that I spend a lot of time looking at. After getting used to IntelliJ, I couldn't turn back. Everything felt so much more natural in it compared to Eclipse. For this course, I will continue to use IntelliJ, while using the same style settings that the professor prefers.

What languages are you proficient in at this point?

The language that I'm proficient with varies depending on when you talk to me. Two years ago, prior to working my current job, I would have replied with Ruby. Shortly after, I would have said C#. Now, I would likely respond with Javascript or Java because that's what I've been using the most lately. If I were to list languages on a resume right now, I'd likely only put Ruby, Java, and JavaScript.

What is your desired field of Computer Science at this point?

I'm employed full-time as a web developer. I'm very happy with it and don't see that direction changing anytime soon. However, I'm not opposed to changing my career goals and I probably will at some point.