I called Dr. Lam today and got official confirmation that I can do COMP 490 in the fall, COMP492 in the winter and as projects for both those courses, work on a group SOEN 490 project. Dr. Murdur is going to be my supervisor and in September I’ll have to meet with him to determine what kind of extra report I’ll have to hand in for COMP 490 (Since the project won’t be done by the time I need a grade for it) but other than that it’s all handled.
Archive for May, 2006
A functional programming boom. Or at least that’s the way Dave Thomas sees it. He says that the same kind of buzz that was being generated before dynamic languages such as ruby hit it big (in a relative sense) is now happening in functional circles. He singles out OCaml and Haskell particularly.
“A friend of mine has a 40 000 line actionscript library that takes about 30-40 seconds to compile with macromedia’s compiler. A version of the actionscript compiler written in OCaml can compile the same library in 1.5 seconds.”
While that quote in itself is impressive, what I found funniest was when he added “so that speaks a lot. That first of all that you can actually write the compiler in that kind of language and secondly, it beats the commercial compiler by a factor of ten”. I guess he’s never actually read a book on functional programming because in every one I’ve read so far, in the first few chapters they’ve mentioned how great functional languages are for writing compilers.
At least we can be sure when functional programming becomes popular and the pragmatic programmers write a book on it that he’ll mention it also.
I just got back from Mad Caddies at the Spectrum tonight and the show was great. It had been so long since I’d been to one that I’d actually forgotten how insanely hot the pits are. I also fell for the first time ever. Well, not exactly fell but some random guy fell on my legs right behind my knees. So he was basically on the back of my legs and I was on my knees until a couple of people picked him up.
I couldn’t believe the set they played. They played ALL the songs I love. Road Rash, Goleta, The Monkeys, No Hope of course but also played some I love that I’m not sure everyone else likes as much as I do. I would’ve been happy if they had played either The Gentleman or Weird Beard but they played both.. along with All American Badass as well! It was awesome.
I also got a nice little flyer with some upcoming shows. For some reason there have been barely any decent shows in the past year and in the next couple of months there are a whole bunch. The Aquabats are playing on the 14th of june, Reel Big Fish and MxPx are playing on the 2nd of july, Yellowcard is playing the 15th of july, Lagwagon is playing the 25th of july, The Living End is playing the 2nd of august and of course the Warped Tour is also coming up, that’s on the 13th of august. I’m not sure if I’ll be going to The Living End or not but I know I won’t go see Yellowcard. They were ok and are a decent supporting band but I won’t go to see a show just for them. Way too faded. (See the irony there? The ska fan calling something faded.) So yeah, lots of cool shows coming up. I can’t wait.
I think windows was onto something but got lazy and killed it. It might still be around I guess, I don’t use windows help I use google.
Do you remember windows help in Windows 98? It asked you some questions and had a few bullet points that you chose as answers. It was a decent enough idea but you invariably ended up with a “sorry I can’t figure it out” response for pretty much every problem.
What if we took this and applied it to installation and such manuals? I just spent 3-4 days trying to get a server up and running properly. Many times I had to start over from scratch because if you did something out of order it permanently screwed things up (why? nobody knows). I had with me a pdf that I printed out. 98 pages of install procedures alternating between the windows and linux configs. Now that it’s up and running I have a good idea of how it’s supposed to be done and could probably do it again in about half a day. This was definitely a learning experience though. There are so many problems with installation it’s ridiculous. In the current state of affairs you basically have to know everything before you can learn it. It makes no sense. You flail around in the dark until you hit something, grab onto it, shine some light and hope that’s what you were looking for.
Here are a few of the problems with the system administration I was involved in.
Problem #1: Laziness. Having a mixed windows/linux guide is just lazy and confusing. Many times there were small notes on linux procedure that were forgotten and only the windows one was there. There were notes like “do this and see previous note on how”. After having looked 10 pages backward not having found any related note and only one vaguely appropriate windows note I gave up. I really doubt it’s a linux bias, there were probably windows notes missing also. I didn’t notice if there were any since I was installing a linux machine. Why wasn’t there a linux install guide and a windows install guide? Not only would it be a whole lot clearer, it would be much easier to spot error and omissions. It’s not like redundancy is that big of a deal when you’re just sending a pdf. Why? Because it’s easier and quicker to just mash everything together. While this is a great strategy for eating shepherd’s pie, it’s a really bad one for instruction manuals.
Problem #2: Flipping. Go here. Now go back there. If this obscure acryonym you know nothing about is what you want then go here otherwise go here and you spend 20 mins fishing around trying to figure out what that acronym refers to. An actual interactive guide that you could click next on with a search button would’ve been so much better. There could be a quick glossary of common acronyms and terms, along with common choices of system configurations with their advantages. While this guide tried to explain why someone would configure something one way rather than another, unless you already knew it wasn’t going to help you.
Problem #3: Laziness again. This time laziness of the admin. A couple of times I got bored, payed less attention that I should have and ended up skipping a step by accident. This would probably be solved with the interactive guide. Have you done this? By having the steps right there in front of you, distracted or not you wouldn’t be skipping them. At least not if you wanted a working system in the end.
It might be interesting to see a tool that could transfer pdf files (based on the table of contents and headings perhaps) into different menus, which you could then arrange in any sequence you’d like. This is once again somewhere where having TeX files as a source would be invaluable.
A few people know that I really like functional programming. I find it really fun and interesting because it’s so different. I recently got back into it reading On Lisp, which is apparently THE reference on Lisp macros and now I found another book called Type Theory and Functional Programming through John Kopanas’ blog. What turned this into a blog post though was another blog post about Haskell being used in Linspire.
I hope this will help the credibility of functional programming in general if you can just download an OS and hack away in it. It should also serve as a great proof-of-concept that functional programming isn’t really slow. I wish the Linspire guys good luck and I’ll definitely be checking Freespire out once it’s released now.
Why would someone avoid an event just because someone they don’t get along with _might_ be present? It’s so much fun that the little annoyance that other person might be should easily be outweighted if not totally avoided.
Sometimes I wonder what I have to show after 2 years of university. I’m definitely way better off than I was when I came in but it’s hard to pinpoint what you actually got out of it. Some more math, lots of java and, just recently, some decent software engineering techniques. I’ve gotten a good job here this summer in which I’m sure I’ll learn a lot and I’ve gotten some contacts.
Year 1 was pretty much just math. We learned a little about object-oriented programming but very little about programming in general. We learn about the structure of computers and that’s it.
Year 2 is a broad view of computer science. We do some os, some databases, some programming, possibly some networks (I didn’t because it doesn’t interest me) and I guess this is when we’re supposed to pick what we want to spend our last year on and try to specialize a little.
So, what’s in store for year 3? Basically options. I ended up a little ahead of my course sequence because I’ve been taking at least 15 credits each semester and I took a summer course. Hopefully I’ll get to work on a big year-long project to get some real programming experience from school. I’m also going to round out my programming skills a little with some C++ and possibly some algorithms. I’m not decided about the algorithms yet. It’s the kind of thing that I find incredible boring, that I’m not very good at but that I know if useful so I might take it anyway.
In the end, if I get to work on the capstone with the soen students, I don’t really see the difference between my cs degree and a soen degree, since I spent so much of my degree on programming. While soen students do more group work than us, the only difference I see is that they have more practice writing tons of documentation. They do spend a year more in school but most, if not all, of that is the useless engineering core. The only reason I could see to prefer a software engineering student over a cs student is that with the software engineering student you know what you’re getting. Soen students have a lot less specialization liberty so if you’re hiring a coder for a large product you have 2 choices: the soen student and the cs student that took a lot of programming options. If you’re looking for databases, networks, anything other than large project coding however, in general, the soen student is probably not the best pick.
I guess this turned into a soen vs cs rant as it usually does when I talk about curriculum. Sorry about that. At the end of it all I’ll basically be a much better programmer than I was going in. I can see why a degree is worth it now. I used to wonder what was so bad about just picking up a few books and teaching yourself programming. What’s bad about it is that you don’t know about what you don’t know. Let’s clarify that a little. Basically, the good coders don’t really need school. They’ll go through documentation, learn a lot and will be excellent coders. Average coders on the other hand will read a book, understand some and probably not all of it and start coding. In a job interview though, it’s really hard to tell who’s the really good coder that never needed formal education in the first place and who’s the average coder that knows some stuff who’s understanding of programming is full of holes? The average coders keep their same tools and things like, say, polymorphism, they’ll rarely use because they don’t think they need. Learning programming by experience alone has many pitfalls. It basically boils down to “when your only tool is a hammer, every problem looks like a nail”. This is often quoted as a reason for learning many programming languages but it’s not so much the languages that should be learned but the tools they provide. I find this should probably be expanded more in the curriculum and principles of programming languages, a quick intro course to many different kinds of programming tools and techniques, made part of the core because it’s still possible for people to get out of a cs degree with incredibly little programming experience. When you’ve been through your entire degree you’re normally supposed to at least know that the tools are there. You’re supposed to know that polymorphism exists and have at least a vague idea of what it’s useful for so that if you encounter a problem where it could be useful you can look it back up and apply it whereas the average coder who’s never known about polymorphism will use some other, probably much worse, solution to the problem. So while the university graduate didn’t necessarily remember all the details of polymorphism, he knew it existed. Polymorphism might not be a good pick for this example since it’s quite simple, I guess a better example would apply to documentation techniques such as use cases, SSDs, operation contracts, domain models, design class diagrams and the like but if I had used that this big paragraph would’ve turned into a book.
Overall, while a degree will give you a certain assurance that the candidate knows a decent amount, it’s really the options the person went through that determine his real school education. What’s bad about this though is that unless you went to that school yourself it’s pretty hard to know which options were the easy no-brainer options and which were the huge-amount-of-work options. I took a 4 credit Introduction to Expert Systems course which looks impressive especially since it’s a mixed grad/undergrad course which was a complete joke waste of time. I’m definitely not looking forward to interviewing people.
1 week down already! Still no actual training yet though. That’s going to be monday. I was sort of thrown to the wolves and said ok you’re going to be the developer on this project, it’s your job to track down and fix bugs. Now go read our wiki and figure out how to do that.
So day 1 I tried to familiarize myself as much as I could with the infrastructure I’ll be dealing with. There’s a lot more systems administration involved than I thought there would be. I’m basically in charge of 3 boxes with access to 4. I have my own development machine which hosts my applications. I also have a linux server that hosts what I run my application through and I have a windows server that hosts my voice recognition software. And it’s buggy. Very buggy. I still haven’t figured out what’s going wrong with the machines. It certainly doesn’t help that you don’t even have a working infrastructure to test with when you’re trying to learn _how_ to test.
Day 2 I gave up on the infrastructure and figured out part of what I’ll be programming in. Nuance has some proprietary voice app languages they developed (I can’t really say more since I signed a NDA) and I worked out how to program in one of them.
Day 3 I figured I had the proprietary language the app is developed in down enough that I could read the code fine if I had a reference with me so I started checking out the framework we use. It’s actually pretty good. We have unit tests for all past bugs so when I change something I’ll know if I break something else and it’s relatively easy to fake a system state for new unit tests.
Day 4 I wanted to get a proper understanding of how to write unit tests but ended up wasting most of the day. I hit a really weird bug that I wouldn’t have spent so long trying to track down if it hadn’t mysteriously dissapeared at one point in the day. My infrastructure was working just fine in the early afternoon even though I don’t remember making any changes to it and then just stopped working again for no apparent reason. Trying to get it to work again ended up wasting most of my day.
Day 5 I had the day off for one of the most difficult finals I’ve written so far at Concordia. I expected the databases final to be hard since everyone that’s taken the course always complains about it but for some reason, even though I knew it would be hard, I didn’t really believe it until I read the exam. I hate multiple choice. 40% of the exam was multiple choice but if you got all the multiple choice wrong you’d end up with -10% (+1 for a right answer, -0.25 for a wrong). The sql was really difficult and, surprisingly, there was a relational algebra question to which I didn’t have the faintest clue what the answer was. Weird, considering normally relational algebra is extremely simple. It was the same for a trigger and a couple of questions on nulls. All in all I really have no clue how I did. I guess we’ll see when the grades come in.
This summer should be pretty cool though. As far as I can tell (I’ll have a better idea monday), I’m working with 2 other interns and one full-time employee as a supervisor and we have to save a project. The project is already overdue and if we don’t finish it it’s going to be scrapped entirely. I’ve been told that the project timeline does have a fair amount of wiggle room so we should be able to finish this no problem.