I am not necessarily a novice when it comes to computers, but on a scale of 1 to 10, 1 being incapable of turning on a computer without reading the manual and 10 being a master programmer, I rate myself about around a 5. Pretty predictable I suppose. Lets just say that I have no problems working around a computer, but don’t know even half of what is out there. I don’t necessarily want books on programming, but feel free to offer those too.
FWIW, the only computer book I have now is “Creating Web Sites, The missing Manual” by Matthew MacDonald. It is simplistic and easy to use, but what other books should I definately read. What are the must reads of the computer world?
I am starting a BS in Information Technology next semester, but I would love supplemental books and stuff to learn in the meantime. How about a Windows XP bible of some sort?
No book really should be offlimits, unless it is some very technical book about a specific program. I will be getting plenty of that in school, I just want books that cover the basics, and at the most only get into moderate detail.
So within those parameters, what books do I absolutely NEED to read?
This is highy, highly dependent on what you are going to be doing. Programmers and networking specialists need different sets of books with little overlap. People who write programs for Windows systems will need books useless, or nearly so, to people who write programs for Unix-like systems, and vice-versa. If you are destined to become a web designer you wouldn’t much appreciate shelling out the cash for Knuth’s The Art of Computer Programming, but a programmer would consider those three volumes a bible.
I don’t even know of Information Technology is a subset of Computer Science, a superset of it, or completely unrelated and on a different track entirely. I suspect it varies by the school.
I’d love to help you, but with my lack of knowledge I’m liable to give you some bad advice.
It doesn’t have to be detailed information or even pertinant to my field. Light reading, books you personally enjoyed, as long as they are about computers and aren’t textbooks or manuals.
Anything helps
IT at my school is light a light version of CS. Here is the curriculum if you are interested in recommending me books based off it. (warning: pdf)
Heh. I thought The C Programming Language by Kernighan and Ritchie was a good read, but it’s a textbook from start to finish. It is, however, probably the best book you can buy if you want to learn C, and it looks like you might have to depending on which classes you end up with. I’ll try to compensate for my odd taste in reading materials.
It looks like you will have to write some code most likely, and the best non-language-specific book I know of about that subject is The Elements of Programming Style by Kernighan and Pike. It gives examples in specific languages, but the lessons and precepts are applicable to any kind of programming.
I think everyone should know about security and have a good foundation in security theory and practice. Reading the books by Bruce Schneier is a good way to acquire that knowledge. Beyond Fear is a good place to start with him, and you can move on to Applied Cryptography if you want to know about specific algorithms or protocols. Applied Cryptograhpy could also serve as a basic introduction to the specific areas of number theory applicable to encryption, but that’s probably a bit too technical for you at this point.
If you want to get into the more theoretical aspects of Computer Science, you can read Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Sussman, and Julie Sussman. MIT uses it in an introductory CS course. The full text is available online from MIT, in fact.
If your education consists primarily of learning about specific programs, you’re getting badly shortchanged. The whole point of CS/IT is to learn about the principles behind the way things work.
That said, there is no general purpose holy book of computing. What’s essential really depends on what you want to do. What do you want to do?
Truthfully, I just want to learn as much about the field as I can. A self taught crash course of all the basics so I don’t have to go in empty handed. I want to teach myself as much as my brain can handle, and then squeeze in some more just to be safe. Any books that teach me anything that would be useful in my day to day life, or in fixing problems I come across. Of course no book has it all, but armed with book recommendations, I will be better off.
There are recommend me (insert topic) books on many different topics, but I couldn’t find any about computer books. Looking on amazon shows me thousands of books, and I don’t even know enough to group them in a fashion that is helpful.
To be realistic, I realize I am not going to sucessfully self-teach myself advanced things like computer language while taking 15 credit hours, but knowing what languages are out there, a brief knowledge of the pros and cons of each of them, learn basic web design, know the ins and outs of programs like Excel, Windows XP, know what kind of computer bugs, trojans, rootkits (something I just learned today, still don’t know much about it, but knowing it exists is better than not), and the like all are benificial.
I know enough to know that I don’t know enough. I just want to know more.
Epimetheus: Learning a specific language is pretty easy once you have a few under your belt. Most languages are kissing cousins, if not outright siblings or descendants, of many other languages, and by tracing back chains of relationships you can learn whole families of languages in much less time than the number of specific languages would suggest. There is a whole family of languages that borrow heavily from C, a smaller family of languages that are essentially variations on the theme of Lisp, and a lot of languages designed to be application-specific variants of BASIC.
On the flip side, there is probably no way you’ll ever learn about all the languages out there. Most languages in the world will never be relevant to your life. It’s far more important to learn about programming paradigms, the various ways to approach problems that are supported to various degrees by different languages. The bad thing is, I don’t know any books that explicitly teach paradigms as opposed to specific languages: The usual way programmers learn about paradigms seems to be to learn a language seen as representative of the paradigm.
It’s far more important to develop good security reflexes and judgement than it is to learn about specific exploits and attacks. Knowing about rootkits is good, knowing how to spot a social engineering attempt and how to assign privilege levels is a hell of a lot better. That’s why I recommended Schneier’s books.
(As an aside, what Sony put on those CDs wasn’t a rootkit. It was annoying as hell and should be illegal, but it, in itself, didn’t allow anyone root-level access to a machine. It would be easy to design a rootkit that used Sony’s ready-made security hole, however.)
The basic tenor of my points should be clear: Look for theoretical before practical, general before specific. Learning a specific system or tool is easy once you know the theory behind it, and general knoweldge is portable knowledge that doesn’t go out of date with the next software release or OS you work with. I think others will give you more book recommendations.
You may want to find some books on how computer works in general. When I was young, I keep grabbing those books - those are more for youngsters, but I learnt a lot this way.
I think you might need something which tells you about operating systems, binary numbers, RAM, ROM, programming and all these things. There used to be books like that – all sort of topics rolled into one – when I was young (Then, it was for old computers like BBC, Apple II, PC Junior and etc). I don’t have a title in mind right now, actually…
Looking at the curriculum I’d think you want to bypass the Windows XP book and pick up a couple Unix books.
“Unix in a Nutshell” is a pretty handy Unix reference book. Also “A Practical Guide to the Unix System” By Mark Sobell is not too bad, though it is pretty basic. Looking at the curriculum it appears that you will probably doing a reasonable amount of command line stuff. If you haven’t done command line stuff before definately pick up a good Unix book.
You might want to install a *nix on one of your computers with dual boot or, if you have a spare machine, just a straight *nix box. Xp is a nice OS (compared to other version of Windows like 95/98) but Unix and all it’s variants are more powerful and, if you know what you are doing, quite nice to work with.
Actually, Epimetheus, looking at the course website for CS 1000, it says the textbook is Computer Science Illuminated by Dale and Lewis. Although somewhat oddly sequenced from my way of thinking (and their specific coneptual layering system is far from a universal system of viewing the field, this is a superb introductory book of exactly the type you describe in your OP. We use it at the High School I teach at.
If you get yourself a copy ahead of time and peruse a few chapters, you’ll be in business.
The accompanying website is quite good as well, although they forgot to update some links when they changed things around from the first edition.
In a much more general vein (and more entertaining, also), might I suggest two books?
The first is called The Soul of a New Machine by Tracy Kidder (that’s a wikipedia link, read an excerpt of the book here), which tracks the development of a computer built by Data General in the '70s. It’s a required text at my university for the first undergrad hardware class in CS; not about the computer per se, but about the trials and tribulations of the development.
The second is In the Beginning Was the Command Line… by Neal Stephenson, which seems to be available online here. If you’ve read any Stephenson and like him, you’ll like this also.
Found an affordable copy online and purchased it. Looks pretty interesting. I was told to wait to take that class until next fall, as they were restructuring it, they may switch books, as they are also going to 1 credit hour instead of 3.
I will take your suggestiong and get me some Unix books, as well as look into installing a second boot. Thanks for the suggestions. (though I will also get a basic Windows XP book, thinking of Windows XP inside out By Bott, Siechert and Stinson, and/or Windows XP unleased. I would like to learn as much about it as possible, if anything to help friends and family with problems (if I am using Unix, I won’t have to worry about it myself).
I saw a second edition Code complete on Amazon, perhaps not as dated? I added those to my list though!
Thanks!
Definately, both look good, and I will check them out. General information and history type books are just fine. I am not all about practicality, history is important to education IMO, especially if it helps give me a good sense about the evolution of the computer, it’s systems, and theory.
Code Complete is a fantastic book, but if you don’t have any programming experience, I don’t think you’re going to get all that much out of it. Later on–maybe after you’ve started working–you’ll definitely want a copy.
This is a good read, but dated. And it is more of a philosophical text than anything else. The ‘updated’ version you might find online isn’t worth your time.
“Ultimate Turing” by B. Jack Copeland is the book that I’m reading now. It’s partly biography, partly a collection of Turing’s papers and partly an explanation of the concepts behind Turing’s ideas. If you want to read about the man who set the stage for much of theoretical computer science and AI and understand what it was that he discovered then it’s a good read (although it’s not particularly easy).
I seem to make at least one serious screw-up whenever I write a post that’s mainly from memory, and this is it. This book is actually called The Practice of Programming. It apparenly occupies the same mental shelf as Strunk and White’s The Elements of Style in my brain. Sorry for any confusion this may have caused.
If we’re going into history and deep theory with this list, I have to recommend Gödel, Escher, Bach: an Eternal Golden Braid by Douglas Hofstadter. It goes into computability, formal systems, recursion, and formal logic in ways both fascinating and useful to programmers of all stripes. It is most assuredly not a textbook; in fact, it doesn’t really fit well into any common classification of books. It will probably be a long read, especially if the idea of a ‘formal system’ as such is new to you. (Anyone who has studied mathematics knows a formal system, but relatively few people outside of math majors have studied formal systems per se.)
I’m pretty sure that The Elements of Programming Style does exist. You have the correct authors also. It might have been renamed since I read it, but it is a good choice.
I’m not sure I’d recommend reading the C book before a C++ book. No reason to get into bad habits.
Though I love The Soul of a New Machine, and even ran a panel with one of the microprogrammers from the book in it, don’t expect to get a clear picture of computer design from it. Kidder didn’t really understand what was going on, and it shows. The human story is great.
Let me add two timeless classics, not tied to any language. The Mythical Man Month by Fred Brooks tells how not to run a project. You’ll see Brooks’ Law referred to often. The Psychology of Computer Programming by Gerry Weinberg is as important to being a good programmer as any manual. He recommends egoless programming - understanding and admitting to mistakes makes it more likely you won’t repeat them.