News for hackers. Stuff that matters.
Re:Learn C, Then Learn Computer Science by Kapura on Sunday February 09, 2014 @03:08PM (#7206947)
This article resonated deeply with my own experience. Like Rohlf, I learned to program TI-Basic in middle school, and like him, I've had the ability to see several different teaching paradigms when it comes to computer science.

In the high school computer science courses I was able to take, the programs were relatively simple with an, in my opinion, too-overt emphasis on object oriented programming. It was in java, and very little of the class focused on the "how" aspect of the language.

My first CS courses at university were in Ada. I don't know how many of y'all have programmed in Ada, but I think about it like a wordier C that doesn't let you just get away with shit because it's strongly typed. This was the language we were taught basic control structures in and, to be fair, the way we were taught focused on good styling so that our code would be unreadable mush.

The UNIX class was in C, and it is, in my opinion, the most rigorous course that most of the students will take on their way to the bachelor's degree. The students build, across a series of projects, a shell that can execute commands and run simple scripts. The sorts of problems encountered introduce the students to the nature of C at a very low level, as well as the sorts of structures that can be used to solve practical problems.

Many of the high level more theoretical classes are language-agnostic, and many of the students use either Python or C#. I think that it's good that these higher-level theoretical classes allow us to choose our own language, because I think that the ways in which different programmers attack the same problem might bias them towards one or another language.

Recently, the lower-level classes had their programming language changed. Heeding the argument that Ada wasn't super relevant in the higher-level classes, the faculty changed the language to Python. This was, I think, a mistake. My opinion is that the lower level classes should be taught in C for many of the same reasons Rohlf mentioned. I think it's important that the students have an idea of how their data is being represented on the disk so that they could better understand the costs associated with certain tasks.

The best argument that I heard for Python was that not everybody taking these into classes go on to write the sort of code that requires something fast or efficient. Python makes data processing easy, which is really the most important thing that students should learn in intro-to-programming classes. I'd say this is a fair point.

Re:Learn C, Then Learn Computer Science by GuiA on Sunday February 09, 2014 @03:34PM (#7207091)
I have a similar experience, and agree with your sentiment.

I taught myself TI-Basic in the 7th grade. Then when I was really fluent in it and started hitting its limits around the 9th grade (I was mostly interesting in writing real time games), I picked up z80 assembly. Later (10th grade) I wanted to write programs on my computer, I installed Linux and learned C (not that they're related, but the hacker world really intrigued me. It also means that I spent my first "real" programming years as a member of the broad Linux community; I even submitted patches to large FOSS projects like Gnome, which still shapes me as an engineer to this day).

Then in university we used Ada for algorithms/application programming the first semester (partly because I'm French, and French professors love the fact that Ada is French; and partly for the reasons parent poster mentioned), before transitioning to C (at first for Unix programming, and then more general programming), and finally doing C++/Java in our final year (we also had a few domain specific classes where we used a different language: SQL for databases, assembly for electrical engineering, PHP for webdev, etc.).

I really like the progression I followed, as I feel like it was logically consistent, exposed me to a lot of different aspects of computer science, and forged me into a fairly solid programmer. I've tutored students whose first language was Java, and their mental model of programming/computer science was a big mess. The best of them figured things out a year or so in, but a lot of them remained confused throughout their college years.

Now I volunteer with a program that teaches kids how to program, and we use Ruby. I think Ruby/Python are great for giving beginners a taste of programming; and it's enough for the kids who don't fall in love with it. But with the kids for whom programming just clicks and is clearly going to be their field of predilection as a teenarger/college student, I'm starting to believe that C (ideally on an Unix system) is the way to go.

Re:Learn C, Then Learn Computer Science by blt on Sunday February 09, 2014 @09:37PM (#7208759)
I agree. I think the ideal is something like 6 months Python/Ruby, 1 year C, then one OOP and one functional language.
Re:Learn C, Then Learn Computer Science by DiggityDug7 on Monday February 10, 2014 @11:29AM (#7211884)
I also started programming with my TI Calculator and also had a few lessons from my Dad in Pascal. Then in my college, I started with Lisp, then C, then Java. C was definitely the primary language for my college education: Operating Systems, Architecture, Software Development, Compilers. Although C allows you to understand the computer at a low level, I had no intention to get a career in it.

I appreciate C, but wish I learned more high level languages to be more prepared come graduation. C is important to know, but it can also be overemphasized in some colleges.

Re:Learn C, Then Learn Computer Science by pjmlp on Monday February 10, 2014 @02:47AM (#7209677)
> then one OOP and one functional language.

They are already exposed to it by making use of Python/Ruby.

Re:Learn C, Then Learn Computer Science by com2kid on Monday February 10, 2014 @02:28AM (#7209634)
Ah may I ask which university? Mine also did Ada, then Unix in C, also Scheme thrown in there. Awesome progression, having learned Ada is really nice, it made me aware that there is a better way to do things, even if I never get to use that better way in real life!
Re:Learn C, Then Learn Computer Science by pjmlp on Monday February 10, 2014 @02:48AM (#7209681)
That's the thing, many that learn only C think it is the only way to do system level programming.
Re:Learn C, Then Learn Computer Science by com2kid on Monday February 10, 2014 @01:35PM (#7212753)
This is the #1 habit I have to break new developers of! If my team wasn't already so busy I'd hold classes on learning other languages.

The last team I was on held regular classes on F#, I'm sad the team got disbanded before I picked up a significant chunk of the language.

Re:Learn C, Then Learn Computer Science by cturner on Sunday February 09, 2014 @05:59PM (#7207806)
Ada's powerful. The typing system is the best of the mainstream imperative languages. You can write good cross-platform code without thinking about endian issues. Almost as fast as C, strong gcc support.

It's a shame it's so damn verbose. A fortnight ago I was trying to brainstorm how I could put a tighter syntax on it, possibly with some kind of pre-processor. Ideas welcome!

Re:Learn C, Then Learn Computer Science by pjmlp on Monday February 10, 2014 @02:50AM (#7209684)
> It's a shame it's so damn verbose.

When a big part of your job is to read the code from others of various skill levels, one learns to have a soft spot for verbosity.

Re:Learn C, Then Learn Computer Science by ori_b on Monday February 10, 2014 @06:47PM (#7214636)
After reading probably millions of lines of code, I find myself wishing people would learn the difference between verbosity and clarity.

More words do not necessarily lead to clearer, more understandable code.

Re:Learn C, Then Learn Computer Science by smorrow on Sunday February 09, 2014 @07:44PM (#7208344)
I can't understand what you're saying about endianness here. If some file format or network protocol has a specific endianness in it, it has a specific endianness in it.