Sunday, April 28, 2013

C#, I Missed You!


My favorite programming languages are C++ and C#. I have been doing a lot of C++ lately, that returning back to C# made me feel a little weird. It definitely feels too easy, to the point that makes you doubt yourself sometimes. It's a lovely language, and Microsoft has put a lot of effort in it. It's very cleanly integrated with Visual Studio to the point that you feel you're not typing a lot and it's almost impossible to make mistakes because it keeps correcting you all the time. I wish that Visual Studio does this as cleverly for C++.

I'm done with the Data Driven assignment. I liked it very much. The idea of making your code very generic that it responds correctly to whatever data input it receives is amazing. This was a great preparation for the multiplayer game. The input could be read from a network or a file and the program will respond accordingly.

Sunday, April 21, 2013

TCP/UDP Client/Server

This last assignment reinforced some of my beliefs that I have about software development.

The Importance of Standardization
While studying the Winsockets API, I was excited and relieved. Since the API follows the BSD standard, it is likely to be very easy to port to other platforms with no or minor changes. This is really good for me, as I intend to a lot of Linux development in the future.

The Importance of Good Documentation
I have the admit, although I was happy that the API followed a standard, it wasn't the most elegant API I've seen. In fact, it's not elegant at all, and in some cases not very readable. What really helped me here was the good documentation, provided on MSDNA and on the book. Without that I would have never been able to complete the assignment.

The Software Engineer is the Architect
The assignment had some particular requirements. How those requirements are achieved was a design decision. For example, I was free to pick the format of some special packets, like the header packet or the acknowledgement packet. Software engineers encounter this situation all the time, and I think it's Ok to make these design decisions as long as they're for internal things that are not supposed to inter-operate with the outside world to worry about standards.

The Beauty of Abstraction
The OS abstracted those layers of the TCP/IP model other than the application layer. All I had to worry about is the design and implementation of the client/server applications using the abstractions provided by the OS. Other than that, magic happens.

Tuesday, April 9, 2013

Lagging Behind A little

Being in San Francisco over the weekend caused me to lag behind a little. I have some catching up to do in the reading assignment and also in my other class that I'm taking. Hopefully I'll be back on track as soon as possible.

I'm glad that we're using the forums! I just found out over there that it is mandatory to submit the "cleanMe.bat" file. Without the forums, I would have never found out about it, and I would have lost some grades for that.

I'm really excited to learn about serialization, and deserialization. It was also great to revise the alignment and padding stuff. Great class so far!

Wednesday, April 3, 2013

First Lecture Thoughts

Being present in the classroom during the first lecture was for me like taking a long trip down memory lane. Back in 2006 I took a CCNA course, and we studied a lot about networking in my undergrad. The first lecture reminded me of how much I used to like that stuff while I was studying it as an undergrad student before graduating in 2006. It also reminded me of how much I started to hate that same stuff after I started working as a telecom engineer after graduation.

My previous job gave the utmost frustration. It is why I fell in love with software development as a refuge to run away to from that frustration, and it is why I'm currently here. The reason behind this frustration was that back in college we studied a lot of things, mathematics, electronics, antenna theories, propagation theories, all the analog and digital communication systems, and everything we studied was very much details and proofs and equations and everything. We used to use MATLAB to write simulations of a whole communications system, starting at the base-band data, passing by modulation, channel coding (for error correction), the communication channel itself (simulating different types of noise environments), and then ending at the receiving end where the demodulation and error correction take place. I was having fun, because it used to feel like I'm an actual engineer.

But once I started working at a 3G cell-phone network operator (or carrier as it's called here in the US) and I was shocked. None of that knowledge that I acquired at college is needed anymore. All we had to do is to operate the network and enhance our network's coverage all over the country. I felt I'm not an engineer anymore. Unfortunately, most of the knowledge I acquired as an undergrad started to get rusty! What a great loss that I keep regretting everyday.

I'm so glad now that I will get to remember a lot of the stuff I used to know, but from a different perspective. From the only perspective that I currently love and care about, that is the perspective of a programmer.

Looking forward to get deeper into the subject.