About programing, a general question
David Liguori
liguorid at albany.edu
Wed Dec 22 17:07:46 UTC 2010
On 12/16/2010 12:02 PM, Parshwa Murdia wrote:
> hi,
>
> If one has to start from the scratch, from the zeroth level to do the
> programing, which programing language one should start with? In the
> ocean of the languages, to start with is really very typical. Can one
> justify it. Some say Python but again they say it is Perl which is
> better every time then the Python. Some say to start with C or C++ but
> again some emphasis to use Java or C#. Many say to go for .Net and VB
> or COBOL and some say to learn web based programing like HTML, PHP,
> ASP.Net. In this ocean who is just starting to learn which one he
> should prefer?
>
> Many say that what is the purpose of learning, then I say that to have
> the basic understanding of how exactly we can handle the machines like
> the CPU. Not to generate the big projects for the management
> processes, not even banking system but to know the basic of programing
> like how to handle the machines at the first, for that purpose, for
> the the scratch level purpose and for the one which is good even for
> Linux, what programing language should one like me, initiate?
>
> --
>
> Regards,
> Parshwa Murdia
I'm surprised no one has suggested this so far as I've read so I will,
but if one is really interested in learning about how the hardware works
the most obvious place to start is "assembly" or "machine" language.
You don't actually write machine code but rather, "nenomics" that
correspond to it. For example "MOV" for "move" followed by a source
register and a target register simply loads data from one internal
register of the cpu to another. When you are finished writing your
program in these symbols it has to be "assembled" and "linked", which
ultimately produces an executable file that is loaded into the "code
segment" register of the cpu by the operating system. Of course, it is
very tedious to write a non-trivial program like this. But higher-level
languages like C and Fortran ultimately produce a stream of ones and
zeros that correspond to these instructions, source and target
registers, and data.
Long ago I played with the Microsoft "Macroassembler" or "MASM", which
ran under DOS. I did this long before I learned C (though I had some
prior experience with Fortran and Basic). You may be able to find that
somewhere, or some open and/or free version--possibly for 'nix, or else
Dosemu. It should still work on any x86 cpu, though some of the
instructions probably won't be there.
Then, for an amusing read which may or may not tell you anything about
how a computer works, try Douglas Hofstadter's "Goedel, Escher, Bach: an
Eternal Golden Braid".
If there is one key concept it is that a huge number of trivial tasks,
like combining two bits in a NAND gate, can be automated and combined
into a non-trivial one. Programming works the same way: higher-level
instructions like the floating-point product of two numbers are built up
from machine-level instructions, sub-routines functions or classes are
built up from instructions, large programs are built up from these
smaller programs, etc. Hofstadter's analogy of the collective
intelligence of a colony of ants may or may not help you with this.
If I misunderstood and you just want to learn the most useful language,
it would probably be C. Later you could learn C++ and "object-oriented"
concepts. C gives you plenty of opportunity to interact at the
hardware-level, with the ability in principle to write significant
pieces of software like word processors or operating systems. The books
by Deitel and Deitel probably have everything you need to know.
More information about the users
mailing list