Sunday, December 7, 2014

Week 14

This past week was very intense aside from it having been the last week for our object oriented class. I one more 'last midterm' and I interviewed in Seattle from Tuesday to Thursday, which by the way did not go as good as I had planned. The midterm for our class was tough, I found it very challenging but thankfully so did the rest of the class. There were two questions that had to do with implementing singletons that only changed by one word and put together they were worth a considerable chunk of points, I found that curious. We will see how it goes when they give the grade cutoffs.

I found the class incredibly interesting and I think that I can safely say that it is one of the classes in which I have learned the most throughout my undergraduate career at UT CS. I think that the way prof. Downing teaches it also is very well complemented with it because you definitely have to stay on top of the material otherwise you will not do good neither on the test nor in the projects... nor will you be able to answer correctly in class and you will be humiliated for life. I would definitely recommend this course, especially since I realized that the material I used to prepare for my interviews this semester is exactly what we learned in the class so it is extremely relevant to what they are looking for out there and I am thankful for that.

Sunday, November 23, 2014

Week 13

This week has been pretty eventful. I successfully submitted my last undergraduate programming assignment! It was "Life." The assignment, much like Darwin, the previous one, consisted of a board. However, in this assignment each cell had an object (in Darwin there could be empty cells, which meant null values). Some values could hold a status of 'dead' and others were 'alive' but the whole board had some type of cell in each position. Looking back, I think that implementing AbstractCell, FredkinCell, and ConwayCell was relatively easy, you just had to have a good grasp about inheritance and virtual functions in C++. It was really interesting. Implementing the Life class got a little more complicated but I actually thought that the meat of the project was implementing the Cell class, which acted as a Handle class. From what I got, the objective of a Handle Class is to separate the abstraction from the implementation and provide a smooth transition between different types (in this case, when it is appropriate to do so, the Cell class switches a FredkinCell to a ConwayCell).

As far as class goes, we have one more day of class (tomorrow) and then comes the final week, which means last-midterm week. I am relatively nervous because I did not do as well as I had hoped in the first midterm so I will definitely change my studying method for this one so that I can get a better grade. That week I will also be interviewing in Seattle so it will be kind of tough to balance but such is life!

Sunday, November 16, 2014

Week 12

This week we started discussing the last programming project, which will be called Life. The assignment, much like Darwin, the previous one, consists of a board, which now will contain a cell in all the positions with a state of either dead or alive, and we have to simulate however many turns based on the rules of the game. However, the project is a little more complicated than what I described so even prof. Downing hasn't fully explained it yet. We are still missing a formal explanation for what one of the classes' behavior should look like. My partner and I got started during the weekend, we are relying on a couple of the concepts that were used in the Darwin assignment, such as a 2d array for the table. We are populating the board and updating the number of neighbors of each element so it's looking good in its early stages.

In class we started discussing heavily the concept of inheritance and, as we have been doing during the whole semester, its differences and similarities in Java and C++. We learned about friend functions, which seemed a little confusing to me at first but I have been getting it more and more as the days have gone by. It is basically a way for a non-member function to access the private and/or protected member of a class if it is declared a friend of that class. I also learned how to use virtual functions in C++ this week which is basically overriding functions in C++ (Giving different different implementations to the same function signature depending on the class from which it is called).

Monday, November 10, 2014

Week 11

This past week was pretty hectic for me. The "Darwin" project was due on Thursday, I had a Computer Networks project due on Friday, and I was interviewing in Chicago from Tuesday to Wednesday and in San Francisco from Thursday to Friday. However, I was able to complete all the activities more or less successfully. For Darwin, thankfully, my partner and I completed a considerable chunk before I left on Tuesday for Chicago. We just had to implement infecting and creating the best creature. I came back to Austin on Wednesday night and we met for about 6 hours, which allowed us to finish the project, create the tests, and do the rest of the Github protocol. I found the project just a tad less difficult than what I had imagined. I guess when you first hear about it, it seems a little overwhelming. It was interesting learning how to declare and use 2d arrays in C++, which wasn't intuitive at all. The computer networks project I finished the night before my interview in San Francisco.

As for the interviews I am extremely happy because I got my first offer from the company in Chicago, they do financial/investment research and the position they offered my is a rotational program in the development part. So I assume I will be exposed to development, testing, big data, among others. I think I did very well in the San Francisco interview but I haven't heard back from them, we will see what happens!

Sunday, November 2, 2014

Week 10

This past week we finally got to the next project, which is called "Darwin". It was released on Wednesday, which, compared to usual, gives us a little less time to work on it so it is definitely an added challenge. It is going to be especially challenging for me because this coming week I am going to be interviewing with two companies, one in Chicago and the other one in San Francisco and that is going to take approximately three days out of my week. Thankfully my partner and I already came up with a schedule of what days we will be working on the project (most of the times we will work on it together, but this will require a couple of times where we work separately and do the catch up when we meet again) and started working on Darwin early and we already got a head start. We started implementing the classes but we do have some doubts regarding the avoiding the getters and setters. It seems like that is the heart of this project, the coming up with a design that is good enough so that it doesn't need to rely on getters and setters, which, apparently, are always a sign of bad design. We will see how the project develops throughout the rest of the week.

Material-wise we finished off talking about the (priority) queue and stack data structures and started discussing class variables, and the similarities and differences between Java and C++ of these two.

Tuesday, October 28, 2014

Week 9

This past week our Allocator project was due. I am very satisfied with the way my partner and I delivered it. We finished our solution relatively fast and got an efficient, well-performing memory allocator. I think it is definitely amongst the sexiest projects I have done in UT C S. And, like the rest of prof. Downing's projects, what took longer than expected was the "secondary" requirements, a.k.a. creating the issues in Github, closing them with each commit you make, getting the unit tests to work and testing most of the corner cases! This one definitely took longer than expected. But altogether I think it is for sure a project worth bringing up during an interview. Prof. Downing has not posted the next project yet but I am excited for it and, as mentioned before, I will definitely be using a partner given the rough time I had with the first project given I didn't do pair programming.

I could not come to class on Friday but from what I can see and have heard we are starting to discuss to major data structures: Stacks and Queues (as well as Priority Queues, which I have always liked more than regular queues). I still remember the first time I was exposed to these Data Structures in my C S 314 class. I think they are fun to implement, especially the Priority Queue given that it has an added element of 'difficulty' which is the constant checking of priority level to determine whether an element should go in front of the next one or not.

Sunday, October 19, 2014

Week 8

This past week we had two major things happening. One was the release of the new project, called "Allocator," which is due this coming Thursday and we also had Twitter come to class as a guest speaker. Unfortunately I could not come to class on Friday so I did not hear what they had to say but I am sure it was awesome. We also received our grades back for the test, which in my case were a bit disappointing. I am very certain that, among other questions, I missed the first one, which was implementing the pre increment and post increment functions without using the ++. I already discussed with my study group that we need to improve the way we study for the second test but it's definitely tricky to study for this type of test.

For the project "Allocator" prof. Downing walked us on Monday through the behavioral structure of it. I remembered much of it from my CS 429 Computer Architecture course where they went in depth to explain how a memory allocator chooses which blocks to give out what it does with them when it gets them back. So the theory I understand pretty well. My partner and I are in the process of starting to implement it. I think that one of the key aspects of the memory allocator is the fact that when it gets back small blocks it needs to merge them to always keep large blocks free. We will see how this project turns out.

Sunday, October 12, 2014

Week 7

This week was "first midterm week." The test threw me off a bit because I was expecting a very similar format to what prof. Downing's S E class's tests. But for this test we had no multiple choice. It was all code and, what was a bit weird for me, writing tests of our code. One of the questions that I am kind of mad at myself because I know I should have known it better than I did during the test was the one about writing the overridden pre increment and post increment functions without making use of the '++'. I just remembered that post increment has to make a copy and it stores before incrementing the variable. Pre increment, increments and then stores. But still, I think I didn't do as hot in that question as I would have liked. We will see how I did on the rest of the test, I'm kind of nervous for getting back my grade. 

Other than that, project 3 has been posted already. It is called allocator but Prof. Downing hasn't gotten a chance yet to explain it (probably on Monday). I definitely learned my lesson and I will be working on it with a partner (given that I did last one by myself). Doing pair programming really is much safer and efficient than working by yourself. So far I have enjoyed the class very much. There are so many principles of object oriented programming that you need to put in practice in order to fully understand them. I think this is a great class for that.

Sunday, October 5, 2014

Week 6

This past week has consisted in a lot of preparing for the test. For example, Prof. Downing gave us a hint: We need to know how to implement any function, such as Fill, Count, Reverse, etc. that takes in three parameters, two of which represent a pointer to the first element of each array, and one of which represents the size. These, among other examples, have been what this week has been about. Preparing for a Downing test, as I have mentioned before, is not easy and very different from the way you prepare for other tests. There is little or no concepts you memorize, you just need to know how to implement stuff. You need to know how to make software on the spot with a time limit, and this, my friend, is not easy.

On the other hand, Prof. Downing has been very generous and given us an extra credit opportunity, which consists in solving another problem from the UVa online judge repertoire. This one is called "A Node Too Far." I already took prof. Downing's Software Engineering course and there we weren't given a programming exercise as extra credit. I can only imagine that this is because Python is a much more simple and user friendly language than C++ (mainly because of the absence of memory allocation) but it also leads me to think that in his Object Oriented Programming course, students tend to need more extra credit at the end of the course and therefore the extra credit programming exercise. Who knows, I'm definitely doing it though!

Sunday, September 28, 2014

Week 5

Our "Voting" project was due Thursday of this week. I think that, along with building Pintos for our C S 439 Op. Systems class, this project makes part of the darkest hours of my C S degree. This time around, I had much more trouble getting UVa, the online judge hosted by a Spanish university, to accept my solution. And after getting it to accept it I had very little time to complete the rest of the requisites so I think it suffices to say that Thursday was an incredibly stressful and unpleasant day. One of the takeaways is definitely to start next project much earlier. However, this time around instead of having another project due in two weeks we are having our first midterm. Prof. Downing's midterms, from my experience as a former S E student, are tough... You need to study for them much differently than you do for the rest of the C S class's midterms. We will see how it goes in two Thursdays.

In class we talked about different ways you can reference variables (going very deep into the by-reference vs. by-value comparison). And we also talked about how to create a function to work generically for any data type. This is a very efficient and sexy way of coding so it's nice to learn how to be able to do it in C++. One concern I have been having lately is that I haven't been doing so hot on the quizzes. I need to keep doing the readings and staying on top of it

Sunday, September 21, 2014

Week 4

Another week has gone by, it was also an intense one because of the career fair. Job hunting has officially begun, and that means info sessions, interviews, phone screens, among others; so it is an added challenge on students who are looking for either an internship or a full-time position, like myself. In class we also started discussing the next project, "Voting," which is quite the opposite of Collatz. Here, the "learning software engineering" part is really a minor thing, and it deals more with being able to crack a given problem. Downing himself said that if Collatz was 80-20 between Software Engineering skills and problem solving, then Voting is a 20-80. I already started working on it and I am a little nervous.

In class we talked a little more about overriding operators in C++, and then on Friday we had our very first guest speaker, whom actually was a Software Engineering student of prof. Downing about four years ago if I recall correctly. He came representing Bloomberg and spoke about the way that Bloomberg conducts its operations on a daily basis. It caught my attention how he said that, even though Bloomberg is associated often with Finance and the TV channel, they think of themselves more like a Data company. That's what they do really, collect data and present it. So software definitely comes in on a daily basis. He spoke about the different tools they use, including an open-source one that was created by Facebook. I thought it was a really interesting talk. I'm looking forward to meeting the rest of the guest speakers!

Sunday, September 14, 2014

Week 3

This week was a little hectic given that Project 1, Collatz, was due on Thursday and there were so many requirements that we had to take care of Github wise. As Downing himself said, this was mianly a project to get us familiarized with some of the most common software engineering technologies and to polish our skills for the upcoming projects. On a frustrating note, I already got 20% of my points taken off because I apparently didn't add the TAs as collaborators even though I could've sworn I did. During class we discussed exceptions in depth (checked vs unchecked, advertising exceptions in method headers, try-catch blocks, etc.). I have been having some trouble with the quizzes because I do think some of them are trick questions, or simply things that in the moment you think that you understand completely but it is at the moment of the quiz where you actually feel you don't really know it backwards and forwards. Anyways, just have to keep doing the readings.

Project two has been announced already so we will see how that one goes. Up until now I just know that it is called "Voting" and that you can do pair programming, he said he would discuss the project on Monday. I'm kind of excited for being able to work in groups. I have done pair programming before, both in school and in my internships, and there are a lot of benefits to it. Having two pairs of eyes is always better for many reasons including error checking, ingenuity, brainstorming, etc.

Monday, September 8, 2014

Week 2

Last week was our first week in business. We started learning more about optimizations and coding conventions in C++ and always bridging the new concepts with their equivalent in Java given that most of us, UTCS students feel the most comfortable with Java.
We also started talking more in depth about Collatz, our first programming project in this class. It also goes by the name of the "3n + 1" problem, given that the claim is that given any positive number N, you will divide by 2 if N is even or multiply times 3 and add 1 if N is odd. The theory says that if you repeatedly run that loop you will arrive at 1. I guess those who have taken Software Engineering (me amongst them) had it a bit easier than the rest because Collatz is also the first project in that class; the only difference is that it is in Python. So I grabbed my Python solution and translated it to C++. I still had to come up with the logic at one point so it is still my own work. I would say that the most tedious part about this project is everything else you have to do besides the function you have to write. Because, really, this project is about getting us to feel familiarized with the repository convention that is so predominant "out there". Thankfully, I feel very comfortable with git so it's been a very pleasant first week. Can't complain! I am looking forward to the rest of the class

Saturday, August 30, 2014

Week 1

This week we started our Object Oriented Programming class with professor Glenn Downing. I took him for Software Engineering last Spring and from my experience I can say that he has a very unique style of teaching. One of the aspects that make him different to the rest of the professors that I have had is the fact that he constantly calls students out during class so that they answer to whatever question he has asked. I definitely consider it to be one of the most efficient ways of making a student stay concentrated and on top of the topics that are discussed in class.

I couldn't come to class on Wednesday but from what I could tell on Friday, we are starting to get familiar with C++, a programming language that I haven't ever touched, I don't know about the rest of the students. Although I have heard it has similarities with both C and Java given its features of memory allocation and object oriented "ness" respectively. One of the more odd facts that we heard about on Friday was that in C++ you can import libraries in as narrow a scope as the user would like. A library can be included in a function or in a class. This is very different from Java and C where libraries have to be included outside the class. Even though Java includes classes to shorten the amount of code the user has to type, while C++ includes libraries so that the user gets access to different objects and classes.