Re: Book questions
On 04/14/2015 12:35 AM, Petter Adsen wrote:
I see that a lot of people advice me on going
with something other than C, and I can understand that there are good
reasons for this advice. While I still want to learn C at some point,
I'm beginning to think that it might be wise to consider getting a good
foundation in another language first.
Would Python be appropriate? I see a lot of software these days that is
written in Python, so it would be helpful in that way. The person I am
most likely to go to for help knows Python, so that's a bonus.
I consider machine code to be the "foundation" programming language of
most "general purpose" computers. It is the most powerful and flexible
of all programming languages, because it can execute any instruction the
processor implements. Macro assembler makes machine code accessible. C
is the next level up. C++, C#, Java, Python, Perl, PHP, Ruby, etc., are
still higher. The downside with high-level languages is that you lose
low-level detail and control -- e.g. branch on carry bit set, select
indexed indirect addressing mode, etc.. Shell, Make, regular
expressions, SQL, are domain-specific languages, and very useful for
solving specific problems. Sophisticated programs and systems integrate
multiple pieces. It's a pyramid of hidden complexities (or a house of
cards, if you're a cynic).
There is also a hierarchy of concepts, founded in mathematics and
Good CS/ programming books explain both, and their the connections.
If you want to understand the guts of Unix, then you need to learn
assembly language and C because those are what Unix is built from (and
more, as noted by others).
If you want to write applications that run on top of Unix, higher level
languages can produce working programs with fewer KLOC's. (As can good
libraries called from any language.)
I mentioned SICP before. The concepts are great, but the Scheme
programming language and REPL environment aren't my favorite. If you're
serious about computer science and computer programming, read it first
and then choose what's next: