

What are the best programming books around? - rishabhverma

I am currently 15, studying in 10th grade in India. I have been experimenting with Semantic Web technologies since like the past 8 months or so.  I want to improve my core skills and would be great if could get some recommendations for some good books. I am planning to read Don Knuth's  TAOCP, is that the right way to go or should I start with another book?
======
pjscott
Structure and Interpretation of Computer Programs is a classic for a good
reason. And it's available online:

<http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html>

You can get a lot out of SICP, if you take the time.

------
Mithrandir
C is a good language, but if you're just starting off with computer
programming, you should try Python.

Otherwise, TAOCP is a good book. MIT also offers some free course work at:
[http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-087-practical-programming-in-c-january-iap-2010/) and
[http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-088-introduction-to-c-memory-management-and-c-object-oriented-
programming-january-iap-2010/)

Full list at [http://ocw.mit.edu/courses/#electrical-engineering-and-
compu...](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-
science)

Good luck! :)

~~~
rishabhverma
Actually I am versed with computer programming , but the thing is I am not
well versed with computer architecture and related stuff, so what are the best
resources I should follow to get well versed with computer architecture?

~~~
Mithrandir
At MIT OpenCourseWare, there are several good courses on computer
architecture.

6.033 Computer System Engineering: [http://ocw.mit.edu/courses/electrical-
engineering-and-comput...](http://ocw.mit.edu/courses/electrical-engineering-
and-computer-science/6-033-computer-system-engineering-spring-2009/)

6.823 Computer System Architecture: [http://ocw.mit.edu/courses/electrical-
engineering-and-comput...](http://ocw.mit.edu/courses/electrical-engineering-
and-computer-science/6-823-computer-system-architecture-fall-2005/)

6.828 Operating System Engineering: [http://ocw.mit.edu/courses/electrical-
engineering-and-comput...](http://ocw.mit.edu/courses/electrical-engineering-
and-computer-science/6-828-operating-system-engineering-fall-2006/)

~~~
NonEUCitizen
don't forget 6.004:

[http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-004-computation-structures-spring-2009/)

------
omermuhammed
Knuth's TAOCP may be too much too early. Here are some links that will help
you further your study. [http://stackoverflow.com/questions/194812/list-of-
freely-ava...](http://stackoverflow.com/questions/194812/list-of-freely-
available-programming-books)

[http://stackoverflow.com/questions/78955/what-are-the-
best-p...](http://stackoverflow.com/questions/78955/what-are-the-best-
programming-and-development-related-blogs-closed)

The first is list of free online books, the second programming related blogs.

Fair warning, programming is a life long learning job. I am not trying to
discourage you, but you need to understand that you will need to LIKE learning
to be good at programming. Good Luck!

------
tjr
TAOCP is awesome. If I had been advised to read it when I was 15, I probably
would have either studied it as hard as I could, or given up after the first
few pages. It's pretty intense material for a beginner, in my opinion. But
only you can judge for yourself. Take a look at a copy of it, if you can,
before you buy it. TAOCP focuses on algorithms and other microscopic aspects
of programming; it may not offer much insight into building whole software
applications.

Also, you might consider looking at Don Knuth's book _Concrete Mathematics_ ,
which is a somewhat more casual coverage of the math chapter in the first
volume of TAOCP.

You mention in a comment that you want to learn software architecture. I
really like this book:

[http://www.amazon.com/Software-Architecture-Primer-John-
Reek...](http://www.amazon.com/Software-Architecture-Primer-John-
Reekie/dp/0646458418/)

If you're into web applications at all, perhaps the best book to understand
the basics of design is:

<http://philip.greenspun.com/seia/>

Either way, don't give up on TAOCP. Whether if you're ready for it now, or if
you want to wait a few years, it's great that you're interested in reading it,
and I would encourage you to study it as much as you can, if you discover that
you are indeed intrigued by the topics it covers.

~~~
rishabhverma
Thanks, and which language should I focus on the most? Currently I know PHP
and lately have started playing around with python too. Should I stick with
pyhton or try out C or C++ before too as I have really less experience with C.

~~~
tjr
I suggest Python. PHP is okay enough for web applications, but suboptimal for
just about anything else. C is certainly worth learning, but can be
challenging to use. Python is a pretty good language to learn with, and is
perfectly usable for real projects.

~~~
rishabhverma
What are the best books for pyhton, I have started reading How to Think Like a
Computer Scientist, is it good enough or should I start with some other book?
P.S. I know pyhton, but want to further improve my skills in it.

------
Archan
I think Knuths work might be too Mathematical in nature for you. If you wish
to work on sematic web its better you start with Collective Intelligence its a
good book to start with . However it uses Python for its examples. As far as
Computer Architecture is concerned do you imply Software architecture or
Computer Architecture

~~~
rishabhverma
Thanks for your advice. So what is the best stage to read Knuth's work? With
computer architecture i basically imply software architecture, but I want to
know the basics of computer architecture too.

~~~
hga
For low level software architecture, at the level of the firmware that drives
processors (plus the electronics that are below that), as NonEUCitizen
recommended MIT's 6.004 is a good bet ([http://ocw.mit.edu/courses/electrical-
engineering-and-comput...](http://ocw.mit.edu/courses/electrical-engineering-
and-computer-science/6-004-computation-structures-spring-2009/)).

For the medium level, assembly language and on up a fair bit (at least to C),
CMU's got what looks like a great course and book:
<http://www.cs.cmu.edu/~213/> There's enough meat on the web page for the
course that it should give you an idea if you want to get the book.

For the higher levels, in addition to the MIT Computer System Engineering
courses mentioned by Mithrandir
(<http://news.ycombinator.com/item?id=1850311>), especially 6.033, check out
this classic from the '70s: _Lions' Commentary on UNIX 6th Edition, with
Source Code_
([http://en.wikipedia.org/wiki/Lions%27_Commentary_on_UNIX_6th...](http://en.wikipedia.org/wiki/Lions%27_Commentary_on_UNIX_6th_Edition,_with_Source_Code)).

Me and a _lot_ of other people learned the basics from it, and while it's
certainly dated, it has the advantage of being lucid and complete while not
being too big or overwhelming, and of course nowadays if you want to go so far
as running a Version 6 UNIX there are PDP-11 simulators that you can use for
the purpose. I.e. it's a good foundation, like SICP is for languages and TAOCP
is for algorithms (although there are less detailed and difficult books to get
you started on algorithms that you might want to try first).

Good luck and enjoy!

------
malandrew
The Little Schemer <http://www.ccs.neu.edu/home/matthias/BTLS/>

------
alina24
The C Programming Language(K&R) and The Unix Programming Environment are the
best to start off with.

