Faqa's .NET rant

GEC: Discuss gaming, computers and electronics and venture into the bizarre world of STGODs.

Moderator: Thanas

User avatar
Faqa
Jedi Master
Posts: 1340
Joined: 2004-06-02 09:32am
Contact:

Post by Faqa »

Destructionator XIII wrote:
What's the POINT of learning both Java and .NET? They're both useful for the same thing, programming OO without the lower levels.
Maybe their justification is both are useful in different jobs, and knowing only one locks you out of a portion of the job market.

Though, as you and I know, if you know one and the concepts behind it, learning the other is a relativly easy task.

Or maybe it is grants from Sun and Microsoft doing the talking.
Normally, I'd say the last. Considering the retards you seem to be working with, the first seems just as strong a possibility.
VB has a few advantages, like it is pretty easily accessable to newbies. I have a business friend who is not a programmer in the slightest who feels comfortable with VB since it is so easy to use and reads almost like English.

However, I don't think it is an appropriate starting point for CS majors. It promotes a few bad habits for professional programmers.
Learning programming from VB means starting from the assumption that programming is all about making the pretty buttons do this and telling pre-made tools to do that. That's not a programmer. Being able to comprehend ifs and loops doesn't make you a programmer. I'm not saying you should be able to spit out Half Life 2 in assembly, but come on. You need to know how to work against the computer, not against pre-made tools.
Why not start off a physics program with quantum mechanics? It is because assembly is pretty hard to learn and better approached if you already have a good idea what is going on. Only the most hardcore would remain if the first semester jumped to that level of difficulty.
I suppose the best approach would be to meld a low-level procedural language with assembly. My idea is that you should work your way up from the lower-levels, not get accustomed to magic memory games and THEN pop the hood to see how they work.

Gradually ramp up the difficulty in conjunction with other courses and I don't see the problem.
"Peace on Earth and goodwill towards men? We are the United States Goverment - we don't DO that sort of thing!" - Sneakers. Best. Quote. EVER.

Periodic Pwnage Pantry:

"Faith? Isn't that another term for ignorance?" - Gregory House

"Isn't it interesting... religious behaviour is so close to being crazy that we can't tell them apart?" - Gregory House

"This is usually the part where people start screaming." - Gabriel Sylar
User avatar
Durandal
Bile-Driven Hate Machine
Posts: 17927
Joined: 2002-07-03 06:26pm
Location: Silicon Valley, CA
Contact:

Post by Durandal »

mmar wrote:
phongn wrote:I suppose it'd depend on what type of programming you'd like to do - is that really important for an application programmer? Certainly, it's useful for an OS programmer but not neccessarily as much elsewhere. That said ... how hard is it to reimplement memcpy?
It's trivial, but you have to know how to allocate memory and use pointers, which is the point I guess.
Precisely. Whether or not something is important for what you want to do isn't really relevant. A computer science degree is about getting an education, not about becoming some glorified scripting monkey. But that's what it's rapidly heading toward because corporations end up having a lot of sway over smaller CS programs. State Farm told my university they wanted the students to know Java, not C++, so that's what happened. I didn't want to work for State Farm when I graduated, so why should I be subjected to their opinions about my education rather than my professors'?

In my opinion, CS programs should follow the evolution of computer science itself from procedural programming. OOP was invented because there were some things that were too much of a pain in the ass with procedural programming. It didn't just fall out of the sky. Students should take the same steps and come to an understanding of why on their own. We shouldn't just be saying, "Procedural programming blows, trust us, so here are objects. Have fun."
Damien Sorresso

"Ever see what them computa bitchez do to numbas? It ain't natural. Numbas ain't supposed to be code, they supposed to quantify shit."
- The Onion
User avatar
Netko
Jedi Council Member
Posts: 1925
Joined: 2005-03-30 06:14am

Post by Netko »

Faqa wrote:
Why not start off a physics program with quantum mechanics? It is because assembly is pretty hard to learn and better approached if you already have a good idea what is going on. Only the most hardcore would remain if the first semester jumped to that level of difficulty.
I suppose the best approach would be to meld a low-level procedural language with assembly. My idea is that you should work your way up from the lower-levels, not get accustomed to magic memory games and THEN pop the hood to see how they work.

Gradually ramp up the difficulty in conjunction with other courses and I don't see the problem.
Seems I'm living your ideal program. Yes, it's scary for those not really into CS, but hey, your problem for choosing a program that is not suited for your talents (and there are in fact a lot of dropouts who get scared, especialy if it is there first time contact with programming - a classical example are straight A students who thought this would be an good carrer but never had an intrest in CS before). First semester we got introduction into C plus the EE basis for computing. Second semester is algorithms and data structures (C/C++, all of it was done with parallel old fashioned and OO implementations) plus assembly. Only on the third semester you start moving away from the low level stuff.
User avatar
Mad
Jedi Council Member
Posts: 1923
Joined: 2002-07-04 01:32am
Location: North Carolina, USA
Contact:

Post by Mad »

Durandal wrote:In my opinion, CS programs should follow the evolution of computer science itself from procedural programming. OOP was invented because there were some things that were too much of a pain in the ass with procedural programming. It didn't just fall out of the sky. Students should take the same steps and come to an understanding of why on their own. We shouldn't just be saying, "Procedural programming blows, trust us, so here are objects. Have fun."
That's sort of like how the program at the university I got my CS degree from went. First you learn to program procedural programming in C++ and you get some basic hardware and assembler knowledge. Once that's out of the way, you learn advanced data strucutres (learn how to implement major portions of C++'s Standard Template Library) and object-oriented programming (learn OO for C++ and Java).

Other languages are electives. Once you know those basics, moving to another language is simple.

And, eventually, the language you use typically doesn't matter. The focus goes away from how to code (the student should know this by now, in any language) and towards learning how to be a successfull programmer in the real world and what kinds of development processes companies use to (or, all too often, attempt to) deliver working software on time.
Later...
User avatar
Dahak
Emperor's Hand
Posts: 7292
Joined: 2002-10-29 12:08pm
Location: Admiralty House, Landing, Manticore
Contact:

Post by Dahak »

We didn't learn any language in particular apart from the introductionary lectures (data structures, sorting, all that jazz...) in the first two semesters, which were performed using Modula/Ada.
We had to do two one-year long software projects, one was in C++/Java, one in Java/VB/obscure other things.
And then we had a shitload of other things where programming language is irrelevant for the topic, like theoretical computer science.
The study was not about to learn to program, but to learn the principles.
Image
Great Dolphin Conspiracy - Chatter box
"Implications: we have been intercepted deliberately by a means unknown, for a purpose unknown, and transferred to a place unknown by a form of intelligence unknown. Apart from the unknown, everything is obvious." ZORAC
GALE Force Euro Wimp
Human dignity shall be inviolable. To respect and protect it shall be the duty of all state authority.
Image
User avatar
phongn
Rebel Leader
Posts: 18487
Joined: 2002-07-03 11:11pm

Post by phongn »

Durandal wrote:In my opinion, CS programs should follow the evolution of computer science itself from procedural programming. OOP was invented because there were some things that were too much of a pain in the ass with procedural programming. It didn't just fall out of the sky. Students should take the same steps and come to an understanding of why on their own. We shouldn't just be saying, "Procedural programming blows, trust us, so here are objects. Have fun."
I had some OOP experience in high school before a several-year hiatus away from the land of CS - my Data Structures course was a pain without objects, I'll tell you that.
Faqa wrote:And VB as an intro to programming?! Are they on crack?
Honestly, why not? If the point of an introductory class is to teach the basics of branching, loops, function calls and whatnot - well, why not use a high-level language? Once some of the basics are established (and I've seen plenty of people struggle with a FOR loop early on) then we can push down from the low-level voodoo.
Faqa wrote:Learning programming from VB means starting from the assumption that programming is all about making the pretty buttons do this and telling pre-made tools to do that. That's not a programmer. Being able to comprehend ifs and loops doesn't make you a programmer. I'm not saying you should be able to spit out Half Life 2 in assembly, but come on. You need to know how to work against the computer, not against pre-made tools.
Well, of course, but you can be trained how to do so in VB as well - especially for newbies who haven't the foggiest clue about CS.
I suppose the best approach would be to meld a low-level procedural language with assembly. My idea is that you should work your way up from the lower-levels, not get accustomed to magic memory games and THEN pop the hood to see how they work.
I think assembly is too low-level for a beginner - the logic is not as concise and making them keep track of everything can be overwhelming. After a semester, though, it should be reasonable to expect it. Of course, I think a starting language should be something like Scheme or Lisp (though even MIT no longer uses it for their introductory class, instead choosing to use Python).
Mad wrote:That's sort of like how the program at the university I got my CS degree from went. First you learn to program procedural programming in C++ and you get some basic hardware and assembler knowledge. Once that's out of the way, you learn advanced data strucutres (learn how to implement major portions of C++'s Standard Template Library) and object-oriented programming (learn OO for C++ and Java).
My school started off with Java for the introductory class - the department felt that for learning basic ideas like branching, looping and functions a lower-level language might be too overwhelming. The next courses (a hardware and software course) taught 68000 assembly and C as you started delving down and then the next two after that continued using C and switched to MIPS assembly.

At that point higher-level languages became the norm (C++, C#, Java, VB.NET, PL/SQL, etc.)
skotos
Padawan Learner
Posts: 346
Joined: 2006-01-04 07:39pm
Location: Brooklyn, NY

Post by skotos »

I think that all of my thoughts on teaching/learning CS have been expressed by others, so all I can offer is the curriculum at the university where I got my CS degree (a BS, for whoever cares):

Intro to Programming: A basic programming course taught in C++. As an extra bonus, it was taught on Macs running a version of Mac OS that had no memory protection - so an error with a pointer would bring the entire computer down as often as not.

Fundamentals of Computer Science I: A course about learning the various basic algorithms in programming - writing things like hash tables, sorts, breadth-first search, some very basic game theory, etc. - all in C. It was a nice introduction to programming, and a good trial by fire in terms of learning the fundamentals of C.

How to Think Like A Computer Scientist: This was basically discrete math, but one in which every week's lesson was accomplished by a programming project in which we had to apply the principles that we had learned that week.

Fundamentals of Computer Science II: Depending on which track you took, this was either an introduction to OO (taught in Java) or an introduction to functional programming (taught in ML).

Programming Languages: Despite the name, this involved no programming whatsoever. Rather, it involved treating programming languages mathematically, so that we basically spent the entire class proving that various programs behaved in a certain way.

Introduction to Computer Engineering: This is the intro class in which we learned how processors actually work, and learned a fair amount about assembler. It was followed by:

Computer Architecture: In which you have to actually build a processor, using Verilog.

Operating Systems: A class where you write a very basic OS, consisting of a keyboard driver, memory manager, and file system. All in C, for obvious reasons.

Algorithms: A class where you learn some more advanced algorithms. More importantly, you learn how to devise algorithms, and how to prove that they are correct. None of the course work involved the slightest bit of programming, it consisted of questions saying, "Devise an algorithm to do this and then prove that it is correct".

At this point, students deviate into the fields which they care about. Quite a few of my friends went for the computer graphics classes, which also required Matrix and/or Linear Algebra and Calculus in 3D. I went the distributed computing route, doing a 9 month internship and taking a few courses.
Just as the map is not the territory, the headline is not the article
User avatar
Mad
Jedi Council Member
Posts: 1923
Joined: 2002-07-04 01:32am
Location: North Carolina, USA
Contact:

Post by Mad »

phongn wrote:My school started off with Java for the introductory class - the department felt that for learning basic ideas like branching, looping and functions a lower-level language might be too overwhelming.
One of the more prominent professors (the one who teaches the OO/Java class) at the university I went to is trying to keep Java from being the introductory language. He does this because seriously playing around with objects in Java doesn't make sense until one understands pointers, since that's essentially what they are. (How would someone even begin to adequately explain shallow and deep copy to someone without any background in pointers?)

And branching, looping, and functions can all be done in C++ just as easily as they can in Java. (If not easier, in the case of functions.)
Later...
User avatar
Gaidin
Sith Devotee
Posts: 2646
Joined: 2004-06-19 12:27am
Contact:

Post by Gaidin »

Last spring was the senior project semester for me and two people on my floor. The typical choice for 80% of the groups was some database thing, though there was one that did an internet radio project. We went for transferring a simple battleship game from gameboard to network. The big reason is the school never taught with visual studio in its basic programming classes until that semester and we expected that we'd have to use it at some point out the gate after graduation. So we picked it and ran with it.

I was the guy that ended up in charge of the user interface and I started messing around with visual studios feature for that. Let me tell you it was great...

...

...for getting an idea of what I wanted the screen to look like. :roll:

I couldn't tell what the fuck was what on that screen when I looked at the code. After two and a half years of working on class by SSHing over to the school server and writing all my code in PICO...I'd developed something of an ability to figure out what was what by reading the code, even if I didn't write it. But that shit threw it all out the window.

The usual happens...I figure out how to write it all and see what's going on, and blah blah blah. We get the project done and turn it in, so on and so forth.

The big kicker is this. CS 221 is the basic programming course for non CS majors at the engineering school, and mirrors the CS 115(for CS majors) exactly lesson for lesson now that the rest of the engineering department decided to shift from fortran. The last project of the semester *specifically* instructs the students to make a basic calculator with this interface design tool. I think the first words out of my mouth when someone asked me for help was "Please dear god tell me they're not allowing you to use this..."

Why dear god why? Image
User avatar
Dahak
Emperor's Hand
Posts: 7292
Joined: 2002-10-29 12:08pm
Location: Admiralty House, Landing, Manticore
Contact:

Post by Dahak »

Industry-wise, it's all about productivity. These tools and integrated suites, like Visual Studio, take a lot of things off your back that really don't matter. It's cool that you know how to program a listener class or how to make an interface, but what's really interesting (and productive) is the thing you want the software to perform.
Mercedes or Ford don't buy a slab of steel and start hammering at it until it becomes a car, either.
Image
Great Dolphin Conspiracy - Chatter box
"Implications: we have been intercepted deliberately by a means unknown, for a purpose unknown, and transferred to a place unknown by a form of intelligence unknown. Apart from the unknown, everything is obvious." ZORAC
GALE Force Euro Wimp
Human dignity shall be inviolable. To respect and protect it shall be the duty of all state authority.
Image
User avatar
phongn
Rebel Leader
Posts: 18487
Joined: 2002-07-03 11:11pm

Post by phongn »

Gaidin wrote:The big kicker is this. CS 221 is the basic programming course for non CS majors at the engineering school, and mirrors the CS 115(for CS majors) exactly lesson for lesson now that the rest of the engineering department decided to shift from fortran. The last project of the semester *specifically* instructs the students to make a basic calculator with this interface design tool. I think the first words out of my mouth when someone asked me for help was "Please dear god tell me they're not allowing you to use this..."
And what's wrong with using the UI tool? You still have to wire up all those elements in the backend.
User avatar
Xon
Sith Acolyte
Posts: 6206
Joined: 2002-07-16 06:12am
Location: Western Australia

Post by Xon »

  • Auto-completion(intelligent & fast, and applying to everything)
  • context sensitive help
  • Edit & Continue (OMG this is great)
  • XML documentation being automatically parsed on anything and showing up in the auto-completion
  • Intelligent search options automatically covering single, multiple files in in the solution/project
  • 1 button click compiling, no fucking with make files or similar fuckery.
  • Refactoring support in C# rocks.
  • Collapsable regions Which Just Work.
  • Automatic collection of things like //TODO //HACK etc into a tasklist.
  • Free (MsdnAA baby!)
  • A UI designer which doesnt make baby jesus cry. Just whimper a little.
  • UI designer with automatic wiring of events, with refactoring support being able to effect it as well
If I'm going to be doing anything beyond utterly trivial programs I sure as fuck want all that.
"Okay, I'll have the truth with a side order of clarity." ~ Dr. Daniel Jackson.
"Reality has a well-known liberal bias." ~ Stephen Colbert
"One Drive, One Partition, the One True Path" ~ ars technica forums - warrens - on hhd partitioning schemes.
Post Reply