It’s our final week in Software Design! Our final was fairly open–use at least one of the concepts we learned in the class. Since we barely got a taste of Android Studio, I decided to make a simple Android game. I learned a lot about implicit and explicit Intents. If I had more time this week, I would go deeper into the tutorials for this assignment. I would definitely like to continue the humble game I created for the final this summer.
I am excited to announce that I have officially filed the paperwork for a year-long leave of absence from teaching so I can put 100% of my attention on my CS degree and my internship coming up this summer.
Have you ever created an app before, either for Android or iPhone? How did it go?
I have been meaning to learn Android Studio and Swift development for some time now, so I am glad we got the opportunity. I was supposed to use Android Studio during the last Hackathon I attended, but the team I had formed and made this plan with dropped out last minute. I had a lot of fun learning app development with Android Studio. It is very similar to what I use to teach my Computer Science Principles class (App Labs on Code.org), so I am glad they get that experience as well.
Do you have any ideas for apps that you could create for recreation? What about business?
As I mentioned, I had a plan with a Hackathon group to create an app on Android Studio. I would still like to do it! The idea was for a game that navigates through a female protagonist’s barriers in “making it” in the tech industry. As for business, I would be interested in fleshing out “Call Out” — the web-based environment for women I helped develop for HackXX.
Update your learning journal from what you experienced this week with class.
Between this class and AP tests coming up for my students, this week has been very busy! But I am incredibly glad that I got to do some practical Android app development. I learned how to create multi-screen apps using Intents and Activities.
I use a simplified version of UML diagramming with my AP Computer Science A students, so I am familiar with the concept of representing has-a and is-a relationships with a UML diagram.
Are they used at your workplace?
Yes, I use them with my students. I am curious to see if, when I begin my internship with Qualcomm, if they use UML diagrams or something similar.
Have you done multithreading in any language before?
I guess I have with physical computing (Arduino) without realizing it was multithreading. This is the first time I used multithreading with the full understanding of what I was actually doing. I really enjoyed learning about this concept.
Did you find Patterns to be helpful?
Yes, I found the MVC (Model-View-Controller) pattern helpful, although I had to figure out which features of the timer to integrate in which component. Ultimately, I decided the Timer class (which extends Thread) should be declared as an inner class within the Controller class since the multithreading should occur at the Controller level.
Update your learning journal from what you experienced this week with class.
I had a lot of fun learning about multithreading and different patterns (although the focus what just on one pattern–MVC). I felt like my approach to this week’s group assignment was much more effective. Being in charge of integrating a timer that uses its own independent thread, I decided to create a simple timer using the MVC pattern that at first only displayed to the console. Then, I worked up to using Swing to make a GUI timer with a START button. After I got this working, I worked towards integrating it with the base project that one of my partners laid out. It went pretty smoothly!
GUI is learned late in the game with Java. Do you think this is helpful or harmful and why? I don’t think GUI necessarily has to be learned late in the game with Java. In fact, in some ways it is harmful to hold off on programming GUIs because many students want to make a “real” program like the ones that they use in their daily lives, which usually have GUIs. I feel like many young students are turned off by introductory programming classes because they do not get the sense of achievement of creating what looks like a “real” program right away. However, I do see the merits of establishing a good background of the fundamentals before approaching GUI programming.
Why do think that coding the Swing elements in Java would be more difficult compared to some other languages? I think the biggest drawback of coding Swing elements is the fact that it is quickly becoming outdated by the newer JavaFX.
Update your learning journal from what you experienced this week with class. This week our group started using Trello to better divide up and prioritize tasks. This made our teamwork stronger and the project easier to manage.
This week was also exciting because I attended HackXX at UCSD–a women-centric hackathon that took place within a 24 hour period. I arrived without a team, met some amazing people to team up with, and our project won first place!
In other news, this past week I had the opportunity to interview with Qualcomm. I went through three 30-minute back-to-back phone interviews with people from their Enterprise Project Management Office (EPMO) and then I was invited to meet with them for coffee on site. It was an amazing and welcoming experience, and I am proud to announced that I will be interning with this team over the summer for 14 weeks!
Give an example of polymorphism and what will be inherited between classes. Polymorphism literally means many forms. In an object oriented programming language, we can make methods take different forms through dynamic or late binding. For example, we may want to represent geometric shapes in our program, such as circles, rectangles, and triangles. We could simply code these classes independently. However, we might find there are some commonalities between each of the shapes and what information we want to encode about them. For example, it may be important to find the area of each of these shapes. We can declare all these common functions into an abstract class named Shape.
Shape would declare but not define the method int calculateArea(). We would create subclasses–Circle, Rectangle, and Triangle–that extend Shape. When these subclasses extend Shape, we are making a promise that we will define calculateArea in each of these classes. However, how we calculate the area for each of these geometric shapes is going to differ based on the individual formulae for each geometric shape. Although we have the same method defined in each of our three subclasses, they take different forms. This is the notion of polymorphism.
After the learning this week, can you identify the difference between Abstract classes and Interfaces? Be specific.
Abstract classes
Abstract classes AND Interfaces
Interfaces
CAN contain instance variables
CANNOT instantiate an object
CANNOT contain instance variables
Subclasses can extend ONE class (can be abstract)
Subclasses can implement more than one interface
Can provide implementations for some of its methods in addition to declaring abstract methods.
Declares abstract methods to be defined in subclasses
Interfaces don’t provide implementations for its methods (*as of Java 8, interfaces can define default methods)
Update your learning journal from what you experienced this week with class. I enjoyed this week’s project in creating an implementation of a barcode scanner. There was a lot of information to digest in the specifications and, after doing the UML (see below), I found it particularly helpful to draw out the various pieces and how they interact, especially when it came to implementing the DataMatrix class.
Below, you can find illustrations of my approach to most of the DataMatrix class implementation:
What is the largest multi-dimensional array that you have used? For the scope of my previous classwork, I have only used 2D arrays (matrices).
What is the largest that you think would be unwieldy and why? I would imagine that anything above a 3D array would be hard to conceptualize as we live in a three-dimensional world.
What does inheritance do for your classes? Have you used it in the past? How? Inheritance allows us to generalize behaviors (methods) and characteristics (instance variables) from superclasses to subclasses. Overriding methods specified in superclasses allows us to redefine the behavior more specific to a subclass. For instance, you can create a general Bird class with a speak method that returns a String “chirp”. You could extend this Bird class in a subclass called LoudBird that returns the uppercase version of this String (super.talk().toUpper()).
Update your learning journal from what you experienced this week with class. This week was my first experience using an enum. I discovered that comparing two enum types via the class’ equals method really just utilizes the == operator so comparing with the method and comparing with the operator are essentially equivalent.
OOP is not in all languages. Have you used one that does not? Previously, I have the LISP language (more specifically Common LISP or CLISP) in a course in Artificial Intelligence.
What was your experience? My experience with functional programming was fun. I learned functional programming before OOP, but I see the merits of both depending on whether or not one wishes to isolate data (classes/objects) from behaviors (methods/functions).
How extensively have you used OOP outside of the classroom? Besides my own personal projects, not a whole lot. I am currently seeking opportunities to exercise this skill more through internships.
Are you experienced with UML diagrams and do they help? I am familiar with creating UML diagrams and I believe they do help me visualize and plan out a program with many different classes and methods.
Update your learning journal from what you experienced this week with class. So far this week has been more review for me since I am familiar with OOP using Java.
Have you used Eclipse before? While I have used Eclipse before, I am more proficient with and used to Jet Brains’ IntelliJ. Therefore, I will be sticking with IntelliJ, as permitted by the professor.
What languages are you proficient in at this point? I am most proficient in Java and Python. I have some experience with C, but I would like to continue to developing my experience with it. I’d also like to spend some time with C# working with the Unity Game Engine this summer. For web development, I have experience working with JavaScript, HTML, and CSS. After having recently completed the databases course, I feel pretty proficient with MySQL as well.
What is your desired field of Computer Science at this point? Software engineering. I’d also like to maintain a presence in CS education as well.
What have you learned this week? This week primarily focused on String manipulation. Having taught AP Computer Science A for the past three years at the high school level, in which the language of study is Java, this was a review for me. However, it was necessary to adhere to the professor’s programming guidelines, so I did have to review his guidelines as well. They are not dissimilar to what I expect my current students to follow.