Hi,
I am new to programming. I would like to learn C programming language.
But, one of my cousin told me that, it is only suited for Computer
Science students and for learning that language you should know the
following things :-
1. Computer Organization and Architecture
C is completely agnostic about the organisation and architecture of a
computer by design.
What you really need to know is how algorithms work, i.e. how to split a
complex task into simple pieces, that can be used to program a computer.
But that more a topic of math and applies to _every_ programming language.
2. Assembly Language [ For good understanding of pointers ]
Not needed. Actually knowledge about low level pointers might add some
confusion, when it comes to how C deals with them.
You don't need a in depth understanding about how computers work, if you're
just starting to learn programming. C is as good as any other programming
languages. The only drawback is, that upon programming errors resulting in
program crashes, debugging tends to be a little more exhaustive, but not
much.
Once you figured out how to write simple programs and get to do more and
more complex things you also gain the knowledge to understand computers.
IMHO it's easier to understand assembler programming, once you've learnt
some high level languages, than in the other way. For assembler you've to
break up algorithms in so tiny pieces, that it's easy to get lost, if one's
not used to do that (breaking down algorithms to simpler and simpler
steps).
Learn C. And also learn other languages. Especially try to not focus on a
single paradigm.
C is a imperative language: Operations are in a given order (the compiler
might decide to do things in slightly different, but still equivalent
order) and will be executed that way. Most languages follow this paradigm,
among C these are Pascal/Delphi, Perl, Python, Ruby, Tcl, C++, C#, D,
Objective-C.
Then there are functional languages: In those everything is taken as a
function in the mathematical sense: A certain set of values put into a
function will always result in the same output values. A program is defined
by a set of expressions composed of evaluation of such function. What
matters is the result of the expression and its mathematical correctness.
The order of operation is of second rank, though it can be done by defining
iterative functions (i.e. parameters of the functions vary with each call).
Languages following this paradigm are: Haskell, Clean, OCaml, SML, F#,
Erlang, Lisp, Scheme.
And then there are languages that allow a mixed paradigm style of
programming, though the usually focus on the imperative part. Among those
are Python, Tcl and Ruby.
Then you'll probably get in touch with the paradigm of "object oriented
programming" (OOP). This paradigm is focused on data ecapsulated in opaque
object instances and every operation is a manipulation on such encapuslated
data. Object instances are of classes, and those classes can be derived
from other classes. OOP can be found on both imperative and functional
programming and can usually implemented with every programming language
capable of defining custom data types and scoped functions (it can be in
fact implemented with every turing complete language, but doing it with
BASIC or pure assembler will be a PITA). To ease up things some languages
provide out of the box support for OOP structures. Of the aforementioned
languages those are: Delphi, Perl, Ruby, Python, C++, C#, Tcl, D,
Objective-C, OCaml, Haskell, Clean, Scheme, F#, Erlang.
Wolfgang