Comments on: What Programming Language Should we Teach to CS Majors? http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/ I will not fix your computer. Tue, 04 Aug 2020 22:34:33 +0000 hourly 1 https://wordpress.org/?v=4.7.26 By: Anon http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-115903 Fri, 11 Jul 2014 01:52:14 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-115903

I’d be all for a beginning course in basic theory (all in pseudocode), followed by a choice of systems, mobile, client-side or server-side programming.

Reply  |  Quote
]]>
By: JuEeHa http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-21635 Thu, 08 Mar 2012 21:35:12 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-21635

Steve wrote:

The problem is similar. CS Majors are learning how to use specific applications, NOT how to program computers. I know guys that could program in freaking assembly language!

I don’t really understand why many people think programming in assembly is so hard. I have written over 30 programs and a multitasking operating system with assembly and I am just 14 years old. (Maybe my background with C on MS-DOS at the age of 8 has something to do with it. I actually ditched Windows 95 after I found how to use DOSSHELL in early 2005 and even after getting a new computer in late 2006, I usually booted to DOS using a boot floppy and only booted to Win2000 when I had to. Only after I started using linux in 2007 I stopped using DOS(at the time using FreeDOS instead of MS-DOS) as my main OS.)

Reply  |  Quote
]]>
By: Alphast http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8255 Thu, 28 Feb 2008 10:38:43 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8255

Funny. I am in no way a programmer, but I did study algorithms in high school and programming in my first year at University. And I had an Atari at home. So I actually began writing small programs in GFA Basic (that was 20 years ago) and later followed a Turbo Pascal course. But I dropped engineering at the end of that year and never had to write a line of code since then.

As for preposition at the end of a sentence, it is a feature of all Germanic languages (of which English is a far cousin). ;-)

Reply  |  Quote
]]>
By: ths http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8252 Thu, 28 Feb 2008 06:32:15 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8252

I started to learn programming end of the 70s on Sinclair ZX81 and Apple II (yes, the Applesoft Basic was licensed from Microsoft, and it was really good — technically, internally). It fitted in 10 KB ROM. Unbelievably today. It was so great when the assemler listing of the DOS and the Basic were sold as books. First thing on my wishlist for Xmas that year ;).

The BIOS of the Apple II was contained in the appendix of the user manual, and I still am fascinated what Woz did achieve in 2 KB ROM. He had the BIOS itself with IO, cassette interface for saving/loading, speaker and even code for lores graphics, a 6502 disassembler and a CLI for entering machine code (the “monitor” — call -151 ;) ). I think there are only a handful of people who could or can understand the Apple II disassembler and its inner workings.

Very soon I was annoyed by the lack of abilities in fpbasic (I missed if-then-else, local variables and so on), and switched to 6502 and Z80 assembler (a friend had a ZX spectrum then). Then I tried UCSD pascal on the Apple and liked it very much for some problems, and it had a nice graphics library, based on the vectorial Logo approach. I guess noone today remembers that language ;)

Out of interest I got me a Z80 card for the Apple II and tried CP/M. Then I wrote a CP/M clone in 6502 assembler, but it lacked applications ;), so I abandoned that. Anyone still remember the A.U.G.E. (apple user group europe)?

Still at school I started reading Wirth’s books about programming and compiler construction, then bought the dragon books (I later met Aho and Weinberger when I learnt awk ;) ), because they had more details.

When I had a 286 PC after starting university, I used Turbo Pascal a lot, but got annoyed by having to write everything myself — but for sure, I learnt a lot then. I bought the database module, and didn’t like it, so I rewrote the library to fit my needs, and learnt something about DBMSes.

I switched to Turbo C because I liked the C library very much.
Then I switched to OS/2 and IBM’s C; this was my first dive into GUI programming and the event-driven model there.
In the meantime I had met unix at university, and switched to gcc on my private OS/2 system with its wealth of Unix tools, and since this time I’m an unix addict ;); I even contributed to the gcc OS/2 C library a bit (emx runtime).

I learnt C++ out of interest, but had never a dire need to use it for anything; I could do everything in C, and with some decent tools for catching memory allocation problems and profiling I got quite stable programs with a userbase of ~100. I wrote a nearly complete BBS and mailer package for OS/2 to participate in Fido and ran a mailbox with 3 lines for nearly 10 years until a headcrash ended that in 2001.

At the computing centre of the university where I worked first I was hit with AIX, SunOS and IRIX. I learnt perl and love it until today. perl5 is a great sysadmin tool, and if you have selfdiscipline you can write readable programs. I’m not the guy for golfing, although I respect and enjoy some of their code ;)

I encountered Java at some occasions in my professional work and still loathe it. When IBM bought Tivoli they had a great tool with a good concept and good automation by CLI for installation and operations (it was written with gcc mostly). Then they bought more companies, added Java here and there, mostly for GUIs, some even for background (daemon) functions, and dropped some automation capability, and over time, gradually, it got worse. Now there are even daemon functions which use a Websphere framework, i.e. they are contained in an EAR. So bloated … ;(

To summarize it all: I think Pascal is a good language for learning concepts. Then you should go C to learn more about data structures and mistakes you can make. I firmly believe in Wirth’s principle that the data structures must be designed first, then the code follows the structures. I had very good experience with this concept in over 20 years. After C there should be some OO language, be it C++, C# or Java, I don’t care what exactly. The teacher must nail down the concepts, not the particular language. For databases it’s important not only to learn SQL, but the concepts of storage, indexing, and so on. There’s much more than coding — it’s understanding the problem and choosing your weapon wisely.

For my professional work I had to learn Prolog (still use it today), and it was not very hard.

I think the “how to shoot into your foot with programming languages” has a very good point, you can recognize goods and bads of each and every language there.

And remember: a good programmer only ever needs to ask 2 questions when learning a new language:
1. what’s the end-of-line character
2. what’s the comment character

Reply  |  Quote
]]>
By: Luke Maciak http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8251 Thu, 28 Feb 2008 04:13:42 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8251

Just to clarify, I firmly believe that every student working towards a degree in CS should at some point work with C/C++ (to see how things when you can’t or may not want to relly on garbage collection and other niceties like that) , some assembly language (to see how it is to work at this very low level), lisp (to get a taste for functional programming) and something like prolog or haskell (declarative programming).

They should also look at the theory behind programming languages and the way to formally define them. They should get well rounded education. But you have to start from something. And as much as I like lisp, I really think that the foundations should be laid in an imperative programming language – just because this is what most likely the students will be dealing with on the daily basis.

Again, this is the language you use to teach them how to make a loop, how to declare a variable, how to initialize an object and etc.. And for most people this first language becomes the primary language they will be working with for years to come – just because it will have that familiar and comfy feeling to them. And this is why the choice of this first language is important.

On one hand I would agree with most of you that C is probably a good place to start. But then again it is like teaching someone to swim by tossing them into the deep end of the pool. The mere fact that C++ doesn’t have a native string type or that you can gleefully write all over your available memory if you don’t check array bounds just adds to the confusion.

So teaching the basic concepts in a more abstract language nay not be such a bad idea, as long as you set aside the time to go back and do the hard stuff in C. :P

Reply  |  Quote
]]>
By: Miloš http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8249 Thu, 28 Feb 2008 03:53:31 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8249

I echo the comments made about C++ (and C for that matter). It is the first programming language I learned and it has proven to be the best for serious development. Since then I’ve experienced Java, Assembly and few others, but a lot of them are like piecing the puzzle together and are based on more rapid development then sound, structural code that works.

Reply  |  Quote
]]>
By: Ian Clifton http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8248 Thu, 28 Feb 2008 02:44:21 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8248

[quote comment=”8236″]Don’t even get me started with people ending sentences in prepositions…like “What are these address bars you speak of”[/quote]
That’s not “wrong” in English. In Latin, you could not do that and somehow people think that automatically makes it apply to English, but it doesn’t. We’ve been ending sentences with prepositions for centuries. In fact, we use phrasal verbs in English quite frequently, which can often require that a sentence ends in a preposition. If you ask me for the definition to a given word and I respond, “Look it up,” that is a perfectly fine use of English. In that case, you can’t transpose the pronoun and preposition.

As far as the subject of this post goes, I’d say C++ or Python would be best. C++ would teach the students a lot more, but it may scare some away. Concepts like pointers are very difficult for many people. Python is probably much easier to teach. The question is whether you want efficiency with the coders or the code.

Reply  |  Quote
]]>
By: D.Taylor http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8247 Wed, 27 Feb 2008 23:19:46 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8247

I agree with you that LISP should be taught before JAVA. But to tell you the truth ‘C’ should be the first hard language taught. They should also be exposed to the basics like Asembly, ADA, COBOL, and maybe a few more. Believe it or not those languages are still in heavy use in the World. It burns my buns to hear a couple of studdents goining on about a C# something or other, knowing that they will hit a COBOL wall in their first job. (think Banking, a big business here) Or Assembly, or even DOS in use on the machined factories running all automated. They need the Basics. IMHO -d

Reply  |  Quote
]]>
By: Craig Betts http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8245 Wed, 27 Feb 2008 22:28:12 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8245

I believe that pointers are the first serious abstraction that CS majors faced when I got my undergrad.

OMG! Really? I learned pointers and the whole dynamic data structures thing back in high school! (This was in the small hick town of Bishop, California with a population of 5000, so we were not special by any means) Pascal was the perfect language to teach these principles. Then again, it was UCSD Pascal on Apple ][ computers . . . a lot has changed since then . . .

Reply  |  Quote
]]>
By: Luke Maciak http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8242 Wed, 27 Feb 2008 20:31:46 +0000 http://www.terminally-incoherent.com/blog/2008/02/27/what-programming-language-should-we-teach-to-cs-majors/#comment-8242

[quote post=”2306″]CS Majors are learning how to use specific applications, NOT how to program computers. I know guys that could program in freaking assembly language![/quote]

Very true. You hit the nail on the head – they are not learning to program, they are learning how to use Java to accomplish tasks. And that is the problem. The language you learn in school does not need to be the language you use later. This is why Scheme kinda works for some universities. It lets them cover concepts without heavily relying on some particular framework, or tying users to some specific syntax – since it is implied they will need to pick up another language later on whether they want it or not.

Oh and btw, I could program in assembly and I’m really not that old. I’m probably very rusty but I bet I could do some simple stuff on SPARC if I needed to. Also, I can do Jasmin. So it’s not such a dying skill yet – although I have to admit that the only time I actually did assembly was in school – never needed to use it in the real world.

@Craig – heh, I started with BASIC. Then I learned some C in HS but my university was a 100% sold on Java. I didn’t have to use C or C++ until my last year of grad school when I got to do parallel programming on a linux cluster. Yay segfaults, unbounded arrays and pointer arithmetic!

I admit that my C++-foo is weak though. :P

@ZeWrestler – good point. But I guess the point of a BS in CS (hey it rhymes!) is to give you a well rounded background that would let you do just about anything later on.

If you know how to program in Java, you theoretically know how to program in C++ – you just need to sit down with a book and figure out which parts of these two languages are similar, which are different and then just adjust to the new syntax. The main concepts, data structures and algorithms remain the same though.

The problem is, like Steve said is that these people may know Java, but they do not know how to program. :P

Reply  |  Quote
]]>