DariusSolluman, would you like toDariusSolluman/TalkShop? a little? I'm curious what GeorgiaTech?'s CS program is like. :) What languages do they have you working with? What kinda projects? Inquiring minds wanna know! -- DaveFayram
Well, since you asked so nicely :)
The program when I came in started with a semester of basic intro to programming using a procedural psuedo-code, although now a days their using Scheme (a LISP derivative), and there's talk of using Java. Then, an intro to object oriented languages teaches Java. Most classes in the future use either Java or C for large project things, although a later, more indepth study of OO design uses Squeak- the only language without primatives *shudder*.
We go over Lexx and Yac and the basic ideas of how programs are assembled and optimzied, as well as a low-level overview of how computers actually process instructions, and turn physical impulses into data switches and how networks work in our sophmore/junior years typically. After that, there's something like 7 or 8 different paths to specialize in (Software enginnering, Databases, Networking, Operating Systems, AI, Human-Computer Interaction, Graphics, and at least a few more I'm sure I'm forgetting). You're required to take at least 9 hours in one speciality and 3 hours in a second, and encouraged to spend some additional free electives in what interests you.
Project wise, there's not really a unifying theme. In the Freshman/Sophmore/Junior level courses, it's usually just an arbitrary example demonstrating whatever concept is being studied, while at the Senior level (from what I've seen) it's more whatever the professor is studying ;)
I'm currently specializing in Databases, and plan on ganking a bit more Software enginnering- the overview of networking terrified me ;) I'm a rare thing in the department; a CS Luddite who's primary interest in computers is as a problem solving, not causing, maching. I don't like the incessant calls for pointless upgrades or OS switching without purpose, and don't feel an overwhelming need to tear apart every bit of code my box runs before running it. I also avoid being a speed freak, although that's a tendency that is thankfully showing signs of starting to die away among the student body.
There's also a theory course I can't comment on, not having taken it yet, but it's supposed to be deeply hard. And the regular gammut of Calc/Lab science/humanities that everyone requires.
CS is so far an excellent vehicle to take philosophy courses in :)
We're also encouraged to co-op. So, every other semester, I get paid quite well to help maintain systems that rarely break after two years of my on and off again loving maintenance, as well as being one of two people who know exactly how said systems work. And the other, my supervisor, is contemplating leaving after I graduate :) There, I've mostly worked with Access, Visual Basic .Net and SQL stored procedure query optimization and writing.
And I didn't mean to pull idiot Internet credentials in the Upgrade page- I just wanted to lend some quick credence to the idea that not only don't I want an upgrade, but I have a litle background and reason to question the wisdom and need of such :) If you've got any more specific questions, I'll do the best I can to answer 'em :) DS
It warms my heart to hear that one university, at least, is trying to help you diversify. Even my beloved UCSB's undergrad program is all Java now, and it's depressing. I mean, you're using Scheme! Functional programming! That's awesome (a bit dated, but really interesting). I myself have been trying to get back into Haskell, which I like a bit more than Scheme and Lisp.
Squeak isn't a language, it's an environment to run. It's a bottom up Smalltalk OS/Interpreter (written in smalltalk, crazily enough). Do not fear Smalltalk, my friend. It is absolutely awesome. It is the language that was used to pioneer eXtreme programming / Agile Methods. You can download it and try it now if you like. Smallltalk is a really liberating language. You also might want to check out its cousin, Objective-C.
You're the first person I've talked to in months that's used anything besides C++, Java or Python. Bless you :)
Well, I'll depress you a bit ;) We get exposed to other languages (and environments, although I think of Squeak as a language myself. And not one I liked, while I was in that class ;) but for project classes, it's mostly either C, Java or Assembler. I don't know which flavor of the last, if any, is favored- I'm avoiding the lowlevel stuff like the plague ;)
And your welcome. :) I personally have tended towards Java in the past, but a friend of mine has been giving me a good sell on C# lately; I'm a sucker for well-documented OO languages for pet projects.
Heh, the fact you've been exposed to it at all puts you in a class above most, DS. I've talked to people who didn't even kniw what functional programming was... people who get payed more than me and are considered "better developers" with "more experience" :(. Even better, you aren't apeshit over a dead language because it must be better if it's so damn old or odd (LISP folks are notorious for this). Thumbs up, man!
Smalltalk takes some getting used to, but it's worth it. Squeak is odd though, I'll admit. C# is... interesting. I'm still unsure about statically typed languages. I can see the benefit when you start writing code/documentation generators, but when you get into coding it's a huge pain in the ass. Nothing is more painful than having to change dozens of subclasses because you changed one method signature to a better name.
But, it has some kickass features. Attributes and Reflection.emit are pretty badass, I must admit. But, I thought I'd note, C# doesn't really have primitives either. Everything gets treated as an object.
What makes me so leery is that C#, C++, and even Java have all decided(/decided in the past) to use Generics (templates). The thing is, these features are orthogonal to static typing. Especially in C++'s case. If the static typing path is key, why do generics need to exist at all? :)
Like I said, try ObjC. It comes with every gcc distribution, it takes everything that was good about SmallTalk and adds on optional static type checking (for when it's appropriate) and a crazily powerful reflection system (not to mention support for dynamically loaded plugins, a feature C++ cannot do portably).