158 Comments
- Olle, on 10/12/2007, -0/+11We started with a functional language called ML. I believe the reason was that everybody should be on the same level. Had they started with C/C++ or something then some students would have been waaay more advanced than others. So I agree with that choice for that reason.
But in a general sense, I believe that Spolsky's argument isn't valid. People that argue that one should "start with C because that is needed to truly understand programming" is the same type of people that argued that people should "start with assembly instead of C to truly understand programming" 10 years ago.
10 years from now they will argue that we should start students off with Java because "AI-language 3.0#++" doesn't let students "truly" understand programming.
I think the reason that people who know C (for instance) think that is important is because they themselves are learning Java by comparing it to C and basing their understanding off of C concepts. People who learn Java directly doesn't do that. And that's fine. Otherwise, how did the people who learned C without looking at assembly without looking at machine code without looking at CPU design learn how to program?
Now, do people who know C/C++ learn Java faster than someone that doesn't know C/C++? Sure they do. But the real question is, who is a better Java-programmer after five years (or some arbitrary number of years). The person that started with C/C++ or the one that started with Java directly?
Now, I do agree that CS schools grind out morons that should have been weeded out. But there are other ways to weed them out.
Well, this is just my 2 cents. - Skrolnik, on 10/12/2007, -0/+10You know, I can directly trace my computer classes in Ada and COBOL to my current involvement in BDSM.
- Philipp_Lenssen, on 10/12/2007, -1/+9Give the kids PHP to learn. After that, they'll love every other language even more because they don't have to use stupid $ signs...
- dallen, on 10/12/2007, -1/+7Assembler? Kids these days need a challenge. Start em off with machine code.
- rdx80, on 10/12/2007, -0/+5I think the best language is one that gets least in the way of creating your ideas. I think python is pretty good in that respect.
- ascannerdarkly, on 10/12/2007, -1/+6python
- weiran, on 10/12/2007, -0/+3"The layers of abstraction between the bare metal of the machine and me -- the developer -- seemed onerous and unncessary."
Didn't a very good computer scientist say that any problem in computer science can be solved with another layer of abstraction?
Either way, I think Java or C# are the best languages to learn. Experience with OOP is more important than learning about pointers. Not everyone is going to become a C/C++ developer. Also, I know some excellent C++ developers who haven't learnt assembly. If you teach too low level, you risk teaching the students no real-world skills they can use directly.
No digg. - inactive, on 10/12/2007, -0/+3Scheme!
One of the best language to get your students to use their brains... and it broadens the students' perspective :) - dmorack, on 10/12/2007, -0/+3Tech 'em Scheme. They'll hate parenthesis after the first week.
My first college computer science course taught Pascal. For some silly reason, I loved Pascal. I still can't figure that out. I suppose I liked the way it forced me to write good structured code.
Is Pascal even used anymore in programming courses? - 808kick, on 10/12/2007, -0/+3C with focus on pointers and memory management. Too many university grads don't know it well enough.
- whfsdude, on 10/12/2007, -0/+3Scheme is a pretty good language to teach. You could spend a whole class creating abstract data types (stacks, queues ...). Then you can learn about variable scoping, recursion, Big-0.
Btw as a programming student I find this article BS. They teach Java or C++ to explain the OOP model so it needs to be taught. - WalterDirt, on 10/12/2007, -0/+2The issue shouldn't be what language, but getting faculty that can actually teach the concepts necessary to understand programming. The language itself is superfluous.
- stetic, on 10/12/2007, -0/+2Every generation is going to complain about the next. Remember, languages are only tools. It is good practice to select the simplest tool for a job, and of course, Java doesn't always fall into that category. As the tools become simpler, computer science schools should focus on teaching creativity and concepts. If you try to get a job with Google, Apple, or Microsoft, they focus on an interviewee's creativity more than what languages they know. Likewise, Spolsky should figure out how to discern a creative and talented interviewee, not pick the one who has been taught C. The author of this article is right, schools should work with assembly language for teaching the lower-levels, but for the higher-levels, Java and C++ are both fine.
- cppawnz, on 10/12/2007, -1/+3"Is Pascal even used anymore in programming courses?"
Yeah...Me sister is learning pascal.
BTW C++pwnz!!! //aswell as assembler - Narrator, on 10/12/2007, -0/+2I read a book on assembly language about midway through my computer science education. Up until that point I didn't really get what computing was all about. After I read that book everything in computing started making sense, especially hard to grasp concepts like pointers. In college I took a course on 386 protected mode programming and that made me understand how operating systems work which was also helpful. It's not necessary that you do a lot of work in assembly language, it's just good to know because it actually tells you what computers are REALLY doing.
- Olle, on 10/12/2007, -0/+2One more thing to add.
I also think that programmers that really enjoy programming are more likely to try to learn C/C++ even if Java is the standard programming language of their University. They might be trying to write a little computer game on their PC at home or try to tweak some Linux program or maybe even write a new open source package for Linux.
So this means that programmers that know C/C++ are likely to understand Java better, but not necessarily because they know C/C++ in itself. But because they are investing a lot of personal time on the subject of programming in general.
But then some guy takes ten steps back and asks himself the question, does people that know C/C++ understand Java better? He comes to the conclusion that the answer is yes. But he doesn't understand the reason. - inactive, on 10/12/2007, -4/+6
>My school is switching to .NET because that's the only thing used in the real world.
HAHAHAHAHAHAHAAHAHAHAHAHAHAHAHAHAHAHAHAHA! - TomRitchford, on 10/12/2007, -0/+2That article is teh b0gu5. er, no digg.
Let's start with recursion. Of course, Java does recursion just fine, despite what the article claims (what language could he be thinking of that *doesn't* support recursion?) but, more important is recursion such a fundamental part of day-to-day programming? Most certainly, not. Months go by before I'm required to use recursion in my programming, and I'm writing all sorts of things. Every computer science student should have a decent understanding of computability theory, and should understand the idea behind recursion and be familiar with something like Lisp, Scheme, ML etc -- but they also need to have a good grounding in some sort of standard procedural language like C++ or Java or one of the Microsoft languages.
Again, I deal with pointer arithmetic and memory management in C++ almost every day, but I still don't consider that fundamental -- it's an aberration of C++ that you have to do this. Trust me, if I could stop writing memory management code, I would. If could avoid every doing pointer arithmetic again, that wouldn't bother me one bit either. I'm good at these and they're fun if you're good at them but they don't add to the bottom line.
Every programmer needs an assembly language course as early as possible.
I'd teach in Java. I'd give people development systems like Eclipse -- but I'd force them once or twice to document each and every thing that goes on in the system so they knew from top to bottom what was going on. I'd teach classes in refactoring and design for maintainability and handling a large system and unit testing and provably correct programming.
Then I'd have special courses where you were taught those other skills that you might need -- "memory management"; "C++; pointer arithmetic, STL" but do these as advanced courses -- third-year or higher. By then you'd already be a good programmer and you could systematically and correctly learn these rather tricky disciplines, rather than "faking it" in first year when really you have no idea what's going on. - fillemvs, on 10/12/2007, -0/+1I agree with the author 1000%. I envision a two-course approach where the kids learn assembly in the first one, then move on to C in the second one.
- inactive, on 10/12/2007, -0/+1I have an idea. Go on the internet and look for job positions and what they require. If it seems like something you want to do, start working on meeting those requirements. Whoopdy doo, you know C++. Some people don't want C++. You know Java. Some people don't want Java. You know .NET. Some people don't want .NET.
Also "If they had taught that course in C++ I would have been lost the whole time worrying about pointers, mem. management, etc." (from cpher)
C++ is not about memory management and pointers. In fact, I haven't used pointers in quite a while. There's a little thing called the STL that has all sorts of fancy containers and functions you can use to complete everything you need. If you want memory management and pointers, use C. - Darkmoth, on 10/12/2007, -0/+1I've been in the industry for a long long time now, and if anything I've come to believe you simply can't teach people to be good programmers. You can teach them syntax, and you can teach them some standard constructs (link lists, quicksort, design patterns), but you can't teach them how to put it all together to solve a particular problem.
I know some astoundingly good programmers that don't use a language to it's fullest. You can look at their code and say "why didn't you do X?", but when you use their software you go "wow, how did you do Y?".
Software should be a black box. As long as it's reasonably maintainable, the inner workings are irrelevant. The only standard we should be holding our students to is "Does your software work, and if it works, does it suck?" Anything else is like asking whether great novels should be written with ballpoint pens versus quill pens. - LeegleechN, on 10/12/2007, -0/+1Bunch of old fogies whining about the "good old days". No digg.
- dupswapdrop, on 10/12/2007, -0/+1Assembler then make them write a working version of FORTH.
By the time they finish this project they will understand that a computer is not a magic box.
Also they will be able to write a version of any language they want.
- psylence, on 10/12/2007, -0/+1Scheme or LISP. Anything else is just programming...
Hell, anyone who knows a few ASM languages knows how freaking simple it is, it's practically BASIC on many architectures, assembly is NOT a weed out course. - kartoffel, on 10/12/2007, -0/+1The best language for teaching computer science is English.
As for computer languages, expose students to at least one each of the following:
- a procedural language
- a functional language
- an object-oriented language
- an aspect-oriented language
- a interpreted language
- a compiled language
- a machine language
- a loosely typed language
- a strongly typed language
- a language of curly bracket persuasion
- a language of lisp-y persuasion - jhelmer, on 10/12/2007, -0/+1In my current position I am the guy responsible for many of the IT hiring decisions. The place I work is 100% Java, but I won't even consider a resume unless either A) they have extensive experience or B) they have a C/C++ background. Given a choice between the 2 I tend to prefer B. Generally speaking I would recommend a hire for a programmer with 1 year of Java and 1 year of C over a programmer with 3-4 years of Java.
I have never met a Java programmer that could not function in C or C++ that was worth a damn while every really good programmer I have worked with knew either C, C++ or both. I am shocked by the number of Java programmers I have met that don't really understand the underlying difference between a List and a Vector. I don't know how many times I have had to argue with ignorant java-only people who think that "java passes primitives by value and Objects by reference", or that you don't need to close files and sockets because the garbage collection takes care of it. Hi level languages are great for getting the job done - there are few projects where C or C++ would be my language of choice - but for teaching purposes languages like Java and C# suck. - PlancksCnst, on 10/12/2007, -0/+1I think you need several languages to get the whole scope. So: an assembly language, a procedural language, an OO hybrid language, a pure OO language, a dynamic language, a funge language, and a just-for-fun language like ook! or *****.
- tolbs, on 10/12/2007, -0/+1Some kids these days can't even handle java.....
I'm currently a senior in college and i've seen my class size go from 100 to 50 to 25 to 15 in a matter of 3 years. 100 to 50 was Java 1, 50 to 25 was Java 2, and 25 to 15 was assembler.
That doesn't say much about my university, but lets face it, Computer Science just isn't for everbody, and it's not like any other science where most people can just pick it up and learn.
I do like the idea of starting out in assembly, but it really isn't *that easy* of a language to learn. I believe just teaching fundamental theorems and algorithms is probably the best way to go. Get your students thinking the right way before they even start programming. In my experience thats really why people have been leaving CS, they know how to program, they just don't know how to program correctly. Also, I believe teachers need to do a better job teaching students how to utilize whats available. When learning java and programming reasonably sized projects, the Java API is absolutely the most useful tool that comes to mind, the same goes for any other language, I believe that is one thing professors need to focus on..getting the best information available.
So in my opinion, I don't think its the language, I think its how it needs to be taught. - tylerni7, on 10/12/2007, -1/+2What's wrong with *****? lol
- d00d, on 10/12/2007, -0/+1Now is the time to go back to Ada! It has everything, therefore, it must be the best.
- inactive, on 10/12/2007, -0/+1excellent read! I concur with Assembler, they should've taught me that when I was in school.
- jarva, on 10/12/2007, -0/+1"Give the kids PHP to learn. After that, they'll love every other language even more because they don't have to use stupid $ signs..."
hmm...PERL - bjwest, on 10/12/2007, -0/+0Pascal was designed specifically for the purpose of teaching programming structure by forcing structure. CS majors need to know the inner workings of the computer before they learn how to program it, therefore they should start off with Assembly, then learn the structure Pascal can teach. After they learn how to structure a program with Pascal, they can pretty much learn any language from there. C, C++, .Net, Java, whatever, could be electives with at least two or three required. Remember, we're talking Computer Science, not Computer Programming. "Assembly line" programmers will most likely be directed by the CS majors, so don't need to know quite as much about the inner workings.
- Elranzer, on 10/12/2007, -0/+0My college starts with C++, then offers Visual Basic, Java, COBOL, XML, Perl/PHP (both in one course) and Assembler, each in sequenced courses. I guess they feel the need to give us an introductory level to a broad range of languages, rather than keep focus on one language throughout the major (though C++ has three courses, every other has one).
This is a state-school, though. - OneAndOnlySnob, on 10/12/2007, -0/+0Stupid article.
Not quite stupid enough to flag, though. So I guess that's a win. - FarcePest, on 10/12/2007, -0/+0They definitely should learn several languages. In my case, it was (roughly in chronological order) BASIC (a couple versions including Apple integer BASIC, Applesoft BASIC, and one or two mainframe varieties), FORTRAN (mostly 66, since 77 was very new at the time), 6502 assembly, FORTH, a smattering of Z80 assembly, Pascal, PL/I (not by choice), C, shell scripting, a bit of AppleScript, and Python. I can also read (and to a lesser extent, write, some better than others) C++, Java, Javascript, Lisp, Perl, PHP, and probably some others. Nearly all of the aforementioned (excepting Lisp and assembler and FORTRAN) have their roots in ALGOL-60 (FORTRAN predates it).
My instinct would be to teach a very high level language at first with a shallow learning curve, like Python, and then do assembly language (x86 is probably the obvious choice based on real-world deployment, though segmented address spaces are a bitch), and then C, and then maybe C++ or Java. - andyhunt, on 10/12/2007, -0/+0Actually, RUBY makes a great teaching language. You can teach important concepts -- references, recursion, polymorphism, closures, etc. -- without getting snarled up in a lot of messy syntax. Chris Pine even has a new book out teaching novices using Ruby.
- kaffiene, on 10/12/2007, -0/+0Java is an excellent language. So is C, C++, LISP.
Use the right ***** tool for the job, and Java is an excellent teaching language. - Darkmoth, on 10/12/2007, -0/+0"The article's defining the best language in terms of whether a teacher can use it to contrive a weeder class with problems requiring students to think concurrently at multiple layers of abstraction. The logic in his criteria being that if you can confuse or frustrate the majority of the class into leaving, then you'll be left with only the capable students with a natural aptitude for cs"
It's still a bit odd how they're focusing on the *language* though. Sure, Java might be easy, so ask your students to write a linear-time Traveling Salesman solver =). Or a help desk app that sorts incoming calls using Bayesian stats. Or something...hard. The problem domain is where the difficulty comes from, not the language syntax. - veritech, on 10/12/2007, -0/+0As a wannabe programmer, my research has led me to believe to be a good programmer in the real world you need C++, Java, a couple of scripting languages for the web(HTML+css, java-script etc. and python to fill in all the bits in between. My CS course focuses on java and .net as it's web application development.
I've been teaching my self java-script, Python and C++. I've made more head way in java-script, but python is nicer to learn because of the interpreter, Having to compile to test, makes low-level languages somewhat of a pain.
However the memory management skill learned with C and Assembly are key to understanding that a computer is basically a big calculator. As a newbie instant feedback is important to understanding each and everything that happens as you code. That's what makes scripting languages like java script cool, drag the file in to your browser and see what you've made.
That's my two pence - SidU, on 10/12/2007, -0/+0My high school uses Java in CS1, just cause its easy to get a handle of OOP, but for recursion we just stick to pen an paper for CS1, then later in CS2 AP we apply all the math from CS1 to Java and other languages like C++.
- nwagers, on 10/12/2007, -0/+0Anyone who actually engaged in an argument over what language is the best one to teach is quite removed from the CS scene. The fact is that most classes are mathematical in nature. I would estimate only 1/3 of the classes at my school actually write a single line of code. No single programming language itself can be considered a "weed out". Anyone can write code, but few can design algorithms that solve the most complex problems we have now.
- trogdoor, on 10/12/2007, -0/+0Hell, just give 'em punch cards.
- fsnuffer, on 10/12/2007, -0/+0Assembler! Unless you understand the fundamentals you will write nothing but garbage code.
XOR A,A or LD A, 00H
Which is more efficient? - saichele, on 10/12/2007, -0/+0python. absolutely. then teach c.
- sagaciousblonde, on 10/12/2007, -0/+0Scheme is versatile for teaching a lot of important concepts...following up with C or C++ is just icing on the cake. And then Java, Python, Perl for the real world.
But really: a good curriculum will teach you all of the concepts you need to know, regardless of the language. My school teaches a pretty balanced curriculum of practice (lots of projects!) and theory, and only dealing with Scheme and some assembly. If you want to learn any other languages, you do it on your own...but having that background in Scheme and practical programming makes it a *lot* easier. - kkassing, on 10/12/2007, -0/+0my high school uses java for intro level, accelerated, and AP compsci, then goes on to python for artificial intelligence, c and some assembler for computer architecute, and has a course on comparitive languages with a whole crapload of languages.
- Sblader5, on 10/12/2007, -0/+0I took the AP test in Java. I thought it was a good lang to learn in, but assembly umm yea that'd be tough. We did go over both pointers and recursion.
- Superfluous, on 10/12/2007, -0/+0because there is no recursion or pointers in java.....
-
Show 51 - 100 of 156 discussions



What is Digg?
Digg is coming to a city (and computer) near you! Check out all the details on our