Showing posts with label Computer Science. Show all posts
Showing posts with label Computer Science. Show all posts

Thursday, August 18, 2011

Stanford CS courses!

Stanford University is offering a few courses next semester for free online. Here are the classes:

- Machine Learning
- Artificial Intelligence
- Databases

I've enrolled in the Machine Learning and AI courses for this Fall. Classes start on October 10th. I'm pretty excited. The courses will include lectures, assignments, and evaluations, just like any other course. It sounds very promising. I'd like to see how Stanford's education compares to Waterloo's. I will be taking AI in my final semester at Waterloo, so I'll be able to compare those two classes directly. Although I might not want to take Waterloo's AI course if I'm going to learn the material from this online course... I guess we'll see. You should consider registering in some of these courses if you aren't too busy next Fall. :)


In other news, I finished exams well and I'm enjoying a few weeks of relaxing before Frosh Week hits. After that, I start work at RL Solutions on September 12th. I'm also excited to start working there, as well as go back to the Microsoft development stack, that I love so much. :)

Wednesday, March 23, 2011

Should UI be required for a CS degree?

Yesterday, I went to a uxWaterloo event. There were a bunch of 7 minute talks on various topics in usability. One of the topics that caught my interest was the question if UI should be a required course for CS degrees?

Based on the discussion that followed the talk, the majority of people seemed to like the idea of including UI courses in CS degrees as a required component. After all, a lot of people with CS degrees go into the workforce as software developers working on user interfaces. However, CS isn't really about developing usable software. It's not really about developing software period. CS is more about the theoretical study of mathematical computation and information processing.

Software engineering is the program about developing software. I think that UI should definitely be a core part of a software engineering degree, but I don't think it's a good idea to included it as a core course in CS. CS is already this murky field that's half theoretical and half practical. I think a good solution is to make the theoretical courses required for CS degrees, but offer a wide variety of optional, practical courses. UI, of course, should be in that optional list of courses. Promoting these optional courses is also very important aspect of getting people more interested in UX.

So what do you guys think? Should UI be a core component of CS degrees?

Monday, February 21, 2011

Comparing IBM's Watson with Wolfram|Alpha

Here's an interesting comparison of Watson and Wolfram|Alpha. The article is by Stephen Wolfram, one of the designers of Wolfram|Alpha. It's interesting to see how they try to tackle the same problem in different ways.

Here's a great visual summary of the process:
source

Wednesday, February 16, 2011

An Insight Into Watson's Brain

I found a neat article briefly discussing how Watson derives solutions. A much more in-depth analysis can be found here. It's amazing to see so many different aspects of computer science come together to create something like Watson. Most, if not all, the techniques used by Watson have been around for years now, but Watson is probably one of the first to combine them all in such a powerful way. It probably helps that it runs on specialized (and expensive) IBM hardware. The impressive performance of Watson is a great milestone in artificial intelligence and computer science. It's a good time to be in CS. :P

Sunday, January 23, 2011

Healthcare Data Management

A friend showed me this video about visualizing medical data:



Some very cool images. I wasn't aware that CT scanners were that powerful. Also, that virtual table is pretty sick. Screw the iPad.

I think that the speaker in the video brings up very interesting problem hitting healthcare informatics right now: too much information. I've mentioned before that physicians don't have time to look at every detail in your medical record. They need concise summaries of all this data. I think that filtering this data in an intelligent way will be a great application of computer science in the future. I think that'd be a cool area for me to pursue later in career.

I'm going to go buy a CT scanner and scan some lions now. ttyl.

Monday, January 10, 2011

Sorting Algorithms In Your Favorite Languages

I found this cool article about which sorting algorithms are used by the major development languages. It's an interesting read. During most development you don't actually need to care, but it's interesting to know. There are a few times where it actually matters though.

For example, if your real-time application requires something to run in O(n*log(n)), you can't rely on your language's built-in quick sort. If sorting is the bottle-neck in your code, and you know something about the input(say that the numbers are bounded by some number, k), then you can optimize that code by implementing a non-comparison model sorting algorithm, like counting sort (O(n+k)). Probably the most useful thing I learned in CS 241 is that if you know something about your input, you can usually do much better than the generic algorithms.

In other news, work is going really well. I am learning a lot about user interfaces and web development. It's a different and fun way to approach development. I'm enjoying the breadth of new technology I get to work with on a day-to-day basis.

Wednesday, January 5, 2011

Sloppy Arithmetic Chips

Recent research from MIT has come up with imprecise CPU chips. These chips can perform some calculations much faster, but at the cost of accuracy. The results it would generate can be +- 1% of the correct value. Of course, the uses for such a device are somewhat specific. Obviously they won't be used to calculate how much radiation to deliver to cancer patients, but they can be used for things like video and audio processing. Pretty cool. It would be nice to see these sorts of chips integrated with more traditional ones. Apparently there are a lot of difficulties with that. I can imagine.

In other news, I realized that I use the three most popular operation systems on a day-to-day basis now. I have my Windows-Ubuntu dualboot at home, and Macs at work. Neat. Hopefully, I can get Ubuntu to not hate me though.

Tuesday, December 28, 2010

The Joys Of The Craft

Perhaps my favorite programming quote is this one by Fred Brooks, author of The Mythical Man-Month:

"...There is delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures..." 
- Fred Brooks in The Mythical Man-Month

If you haven't read The Mythical Man-Month, I really recommend you do. It's a fantastic read for software engineers. It's funny that it was first published in 1975, and yet its completely relevant today. The problems Brooks describes in the book can still be encountered in the software development world today.

Saturday, December 11, 2010

The Sound Of Sorting

This is a little old, but it's cool nonetheless. The sounds of various sorting algorithms.



I am in exam study mode. Bleh. Starting Tuesday, I have an exam every two days until the end (22nd). Unfortunately, my two hardest exams are first. I have to learn first year physics by Thursday. Woo! At least it should be smooth sailing after that.

Wednesday, November 17, 2010

Wolfram And Natural Language Programming

I just read Stephen Wolframs's most recent blog post on programming with natural languages. He talks about some really cool features of Mathematica 8 and Wolfram|Alpha. The examples he shows are quite impressive.

Wolfram talks about a future where programmers would be able to communicate with a computer using natural languages like English. The programmer would specify the requirements in English, and the computer would synthesis a program to actually satisfy these requirements. Although this sounds like a really interesting idea, I can see a lot of problems for them to overcome before this becomes practical.

Perhaps the largest of these problems is that natural languages are very imprecise. The amount of text required to specify a requirement accurately in pure English is huge. Massive programs with really complicated requirements would create a huge wall of text when encoded in English. Maintaining and expanding programs that are encoded like this sounds like a nightmare.

Further, English is an inconsistent language. That is, you can derive many contradictions and silly results using the English language. For example,

Consider transitivity. If A > B and B > C, then we can conclude that A > C.
Now,
let A = "A Cheeseburger"
let B = "Nothing"
let C = "True Love"

So now,
A Cheeseburger is better than nothing (A > B)
Nothing is better than True Love (B > C)
so it should follow that
A Cheeseburger is better than True Love.

Silly result is silly, but it just shows that English sucks at being precise. This silly proof was originally shown to me by Professor Shai Ben-David in Logic class. He was explaining why we can't use English as a language for Logic. The reasons are essentially the same as the reasons why we can't use English for programming.

We could solve some of these issues by creating restricted English, but figuring our a working subset of English would be a huge task in itself.

It is interesting to see how software engineering techniques would change if this were to be come popular. MVC would translate to separate paragraphs talking about views, models, and their interactions. Most design patterns could be specified with an additional paragraph. Would these design patterns even be useful anymore?

In any case, the progress in free-form linguistic parsing is really interesting, but we will probably see it applied to other fields effectively before we see it as a substitute for traditional programming languages.