Hacker News new | past | comments | ask | show | jobs | submit login

C is as essential as electronic engineering. More generally, a programmer's learning path should go through (a) understanding how machines work (b) understanding C and (c) understanding the rest. You will never truly get the idea of Lisp or Python unless you know the lower levels, including the intermediate ones, which is C in particular.



I totally disagree. C is definitely *not a good language to learn to program in. I actually think that programming should be learned the other way around.


I think C is pretty good as a first language. It's not fraught with too many concepts and the few concepts it has are essential for many kinds of programming. If people use languages with mutable variables they have to know how pointers work. C makes that very explicit. You can't use it without understanding pointers and that's a good thing.

I'm not saying C is the best language to learn how to program, but it's definately better than Java, C++, Ruby or JavaScript. I can't tell how Lisp would work as a first language because I haven't seen anyone try to learn or teach it.


"If people use languages with mutable variables they have to know how pointers work" -> wrong. They don't. That's the idea of a high-level language, to hide how the computer interprets your instructions so you can focus on giving instructions.

Now, understanding pointer would help a lot, but that's a different argument.


I don't agree. The difference between copying a thing and referring to a thing is not some low level technical detail that you can abstract from. It's a fundamental structure of any system, not just computer systems.


I have no strong opinion about whether C is a good learning language or not. I'd tend to say no.

However, if I was designing a practical college curriculum, I would require a course early-on that involved detailed instruction on how C actually works, as well as extensive practice using it and exploring its tricky areas. It might correspond with an introduction to assemblers, computer architecture, or operating systems. The catch is having an instructor that actually knows C well enough to teach it.


Agreed. I think one of the easiest languages to learn at first would be Python. I unfortunately took the path of Basic, Pascal, Visual Basic, C++, Java, Python, Lisp and I wish I would have run across Python much sooner.


I learned in Pascal too. It's not bad.


Why?


There's too much to worry about; besides, being efficient isn't an issue when you are a beginner. Better to learn with a language that hides the low-level details so you can focus on actual programming.

In other words, I think that you should learn first how to teach the computer to do stuff and only after having done that for a while should you try to understand how the computer interprets the instructions you give it. Of course, you could take the very first steps in any language (except maybe Intercal), but once you get to strings and the like, C is more likely to make it more difficult instead of easier.


It's interesting trying to watch a non-programmer try to learn a language like C, C++ or Java and try to figure out the reason for all the boiler plate code to get something simple done. They ask questions like: Why does printing "hello, world" require more code than "print 'hello, world'"?


i once let a friend use my TI-89 for a couple of minutes. he wanted to program a game for it. when i checked to see what he had written so far, it said "there is a ball"

although hilarious, it's an ideal that shouldn't be laughed at


See? At first you just want a simple language to give instructions to the computer, so you can worry about learning how to come up with the algorithms that you need to translate.


A thesis that we want the machines to understand our high-level vision of an algorithm existed long before computers were invented. However, we failed to create such a system that would interpret our vision of a program ("there is a ball") and execute it appropriately. Wish you good luck in inventing such a system.

The reality is, programmers who don't understand how computers work can write ridiculously bad code. I saw it a lot. Efficiency does become an issue when a program is so bad and slow and unreliable that a computer can't execute it in a reasonably useful way.

I'd never hire a Python programmer who doesn't know what dynamic array is all about or what CPUs are dealing with when they run a program -- essentially addresses and numbers.

A recent YCnews post comes to mind: if you want to find a good PHP programmer you have to announce a C++ vacancy with no single word about PHP.


I'd take a C++ expert who also knew language X over somebody who just knew language X any day of the week. Being able to do something hard without shooting your foot off and understanding how the bits and bytes work make you better no matter what language you're using.


the problem is that the layers aren't very connected or related. in particular the higher-level languages essentially stand on their own by their altitude, and the lower-level languages likewise by their ties to machinery




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: