The first mainstream computer programs were written in imperative (think assembly goto, etc), and became the defacto standard. As new programmers entered, many were taught by older programmers, so they would most likely learn imperative programming. Since it is arguably harder to learn functional programming after imperative programming, (rather than learning functional programming right away), the imperative cycle continued, and here we are today.
I also attended Waterloo CS, and I am really grateful to have been exposed to Racket. I am actually using Racket for my upper year courses as well, which is awesome.
I believe this is what happened:
The first mainstream computer programs were written in imperative (think assembly goto, etc), and became the defacto standard. As new programmers entered, many were taught by older programmers, so they would most likely learn imperative programming. Since it is arguably harder to learn functional programming after imperative programming, (rather than learning functional programming right away), the imperative cycle continued, and here we are today.
I also attended Waterloo CS, and I am really grateful to have been exposed to Racket. I am actually using Racket for my upper year courses as well, which is awesome.