General IT Books?
Torulf would like to start an ongoing discussion on books that anyone in the IT field would benefit in having in their library: "Here's a topic that might generate some interesting discussions. I'm a student trying to get general knowledge of the IT business. The question here is about what is regarded 'basic knowledge' and where to find it. As we all know (I hope), a lot of knowledge can really only be learned through experience. In many cases, however, a read through the theory will save you a lot of time. As books are also easier to look up than experience, below is a suggestion of a reading list that might give a decent general knowledge in the field. Please fill out the gaps with what you think is required
knowledge for anyone working in the industry. Mostly this is about a general overview of the
different areas of the IT industry, but if you have suggestions of good material for becoming an expert in some particular field, by all means, share your knowledge." Torulf has compiled a fairly long list of books, below, however your own suggestions are always welcome.
For any non-trivial task, it is suggested that you design before you code. User Interfaces:
A lot of programmers are more than clueless in this area. These at least won't hurt: Graphics:
Some general knowledge about graphics. Business/Management:
Here's something about management and financing. I don't really know about a good reference for marketing applied to the IT industry. This is the area where the average geek is even more ignorant than concerning UI. Security:
Alright, this list should be a lot longer. Misc.
And last some stuff that didn't fit in any of the categories above.
"To start off the discussion, here are a few suggestions as to likely candidates. The
books are linked to Amazon since they can provide a fairly quick and complete description of the books online.
Programming:
Learning a few languages certainly won't hurt. Here are some suggestions:
- The C programming language
- The C++ programming language
- Programming Perl
- Programming Python
- A Book about Java
- A Book on SQL
- A Book about Functional languages (LISP, ML, etc.)
For any non-trivial task, it is suggested that you design before you code. User Interfaces:
A lot of programmers are more than clueless in this area. These at least won't hurt: Graphics:
Some general knowledge about graphics. Business/Management:
Here's something about management and financing. I don't really know about a good reference for marketing applied to the IT industry. This is the area where the average geek is even more ignorant than concerning UI. Security:
Alright, this list should be a lot longer. Misc.
And last some stuff that didn't fit in any of the categories above.
- Modern Operating Systems
- Computer Networks
- A few operating systems
- A book about markup languages, ie HTML, XML, DHTML, etc
- A book about Algorithms and Data Structures in general
- At least some basic knowledge about Hardware
- Wireless systems seem to be growing. It might pay off to learn something about Symbian, J2ME etc."
Now that's a start to a comprehensive IT Library if I've ever seen one. How do you all feel about this list (if not the specific selections, then at least the material being covered)? If you were to make changes or additions, what would they be?
Add Michael Abrash's Graphics Programming Black Book. It's not really for true beginners and much of the techniques are probably out of date in today's SDK-driven development world, but it's a great book regardless, and has a lot of theory that's applicable in non-graphics areas (optimization, mostly).
--------
Bleah! Heh heh heh... BLEAH BLEAH!!! Ha ha ha ha...
Knuth's "The Art of Computer Programming" is an absolute essential. Read it. Then read it again. Do what he says.
This book gives the basic foundation of how to program instead of teaching you how to operate the latest GUI or how to generate the latest buzz-language. It should not be optional for any computer science curriculum.
These are the guide to proper systems administration.
But seriously, I cannot immagine anyone learning the "basics" better than fiddling around with things, and learning how they work (by breaking them more likely than not).
I wholeheartedly recommend Newton's Telecommunications Dictionary, its not exactly IT but has plenty of crossover with most IT stuff. Its a great reference that has quite a bit of info and background to almost all of the telecom industry jargon.
Degaussing scares the bad magnetism out of the monitor and fills it with good karma.
For the Java book, I recommend Thinking in Java
She came sliding down the alleyway like butter dripping off of a hot biscuit.
You should definitely add a book on a non-strict language like Haskell. beta-contraction rocks!
There are reasons why democracy does not work nearly as well as capitalism.
-- David D. Friedman
and
The Practice of System and Network Administration
Time flies like an arrow, fruit flies like a banana.
Debunking the Myth of a Desperate Software Labor Shortage by Dr. Norman Matloff.
If you still want to get into IT after reading that (warning: it's very long), then you can continue with the programming courses.
Nathan
Seems like you would want at least a few books that are more, well, abstract / philosophical? I would recommend Godel, Escher, Bach or Metamagical Themas both by Hofstadter. Man can't live by tech alone.
Best Windows Freeware
How about: "Numerical Analysis" Burden and Faires "Computational Geometry" deBerg, et. al. "Matrix Computations" Golub, van Loan
word.
Having a nice library is good, but reading books is better. Do you know how long it takes to fully assimilate one of these books? At least weeks for some of them. So you don't really have time to understand them (unless you're 1) employed, 2) rich).
My point is: pick something and get good at it. As you move to more complex projects, everything will come together and you will avoid the "why in hell did I learned that" feeling. Heck , my last project uses J2EE, PostgreSQL, a geographical information system, a graphic toolkit, some shells scripts and some C programs, plus the obvious OO design.
Nobox: Only simple products.
TCP/IP Illustrated by Stevens. At least volme 1, if not the next two.
I like lots of people. That doesn't mean I go carting them around the galaxy with me. --Dr. Who
The Art of Computer Programming
Indispensable...
Winton
I would have a section on relational database management systems and some good general/specific books to go w/each.
Depending on interest you could lean towards administration/development/programming/etc.
.
It's hard to believe that's how Micronians are made. Why don't we see it right now by having you both kiss one another?
Where are Donald Knuth's books? You should have all three volumes: "The Art of Computer Programming" if you are serouse about writting code. They are the 'blue-print' of programming.
Karma stuck at 50? Add 2-5 inches.. err.. 2-5x Karmas Count to your pen1es.. err.. Karma all naturally and private
I guess blatent referrer links in a story to a vendor we are all supposedly boycotting
Gee, am I out of the loop. I didn't get the official authorized vendor list. Guess you're cooler than me.
Best Windows Freeware
If you don't unix regularly a nice intro book on shell scripting followed by a reference book on your favorite shell will work.
And if you plan on interacting with management I highly recommend Pressman's "Software Engineering: A Practicioners Approach".
In the future, I would want to not be isolated from my friends in the Space Station.
Every time I see that acronym used, it's in a context far and away from what I would call traditional software engineering. I think of it as somewhere between web programming and corporate database programmer. As such, it seems that the recommended books are lean too far away from what the typical IT worker needs to know.
Or the _Unix Administration Handbook_ by the same authors. I read it straight through, and enjoyed it.
Although it is a Unix book, because so many of the issues of modern IT (and especially networked systems) have already been addressed under Unix, even (particularly) an NT admin would benefit. I was referring someone to it for Serial communications information yesterday.
Newton's Telecommunications Dictionary, as mentioned by another poster is great too.
_TCP/IP Illustrated_ W. Richard Stevens
_Interconnections_ 2nd Ed. Radia Perlman
Assembly is the reverse of disassembly.
This is from memory, so it's a little rough.
:-)
Unix Books
----------
*The Unix Programming Environment - Ker./Pike (Great book on the Tao of Unix)
*The Design of the Unix Operating System - ? (Good book on design and internals)
*The Design of the 4.4BSD Operating System - (The book the BSD folks rave about)
Hardware Books
--------------
*Upgrading and Repairing PCs - Scott Mueler (While kinda Windows centric, the PC Hardware bible)
Fun
---
*Mr. Bunny books - Some Guy III (Funny books make fun of Java and ActiveX)
*Programming Linux Games - Jon Hall (Good intro to Linux gaming, another fav)
Security - My specialty
--------
*Hackers Beware - a great book of stories from the trenches
*Hacking Exposed series - Great, up-to-date references on many platforms.
*Security Engeneering - The best book on comprehensive security design
*Know Your Enemy - The Honeynet Project (Great book on real hacking)
*Computer Security Basics (outdated, but still relivent. Not basic, though, by any measure)
*Applied Cryptography - Bruce Schiener (_The_ book about crypto)
*Secrets and Lies - Bruce Schiener (A management type book, but good)
Programming
-----------
*{Beginning, Professional} Linux Programming - Stones & Neal Somebody, et. al. (A good Wrox book that covers Perl, PHP, PostgreSQL, MySQL, C, shell programming, etc.)
*The O'Reilly Perl Library - Written by the guys that write and maintain Perl. Nothing short of spectacular. Everything from Perl regex to cgi to bioinformatics to databases is covered.
*Applied Cryptography - Bruce Schiener (_The_ book about crypto)
*ANSI Standard Lisp - Haven't read it yet, but it looked good.
*The K&R book, ANSI and Classic - 'nuff said.
*The O'Reilly SQL book and database-specific books - Cover all the DBA knowledge anybody needs
Non-Technical
-------------
*Secrets and Lies - Bruce Schiener (A management type book, but good)
*C for Dummies - Gookin (See section placement)
*The Mr. Bunny Startup Game
Sysadmin
--------
*The Complete FreeBSD - A great fBSD book
*Linux: The Complete Reference - Another great sysadmin books
*The purple Unix book with the animals on the cover - The Sysadmin bible, if I could only remember the name
If someone could fill in the name and author holes, you'll be all set.
My email is real.
Anything by W. Richard Stevens is well worth having. The TCP/IP Illustrated series and the Unix Network Programming are both excellent, though the new editions of UNP are unfinished, since he died before UNP3 was published (and apparently, finished). Advanced Programming in the Unix Environment is an excellent in-depth look at Unix system calls.
Experience is the first essential, so like others, I say: Hack! (In the original sense, not the crack sense).
Beyond that, I've found:
The Art of Computer Programming, Knuth
Internetworking with TCP/IP, Comer (3 vols.)
Operating Systems: Design and Implementation, Tannenbaum
these are essentials. Every other dog-eared book on my shelf is product or language specific, and thus, I would say, non-essential.
You missed what I consider the most important book. Actually, it's a set of three books. Knuth's The Art of Computer Programming. I understand there's a fourth book in the works too, but I'm not sure. This piece of work is more important to IT (or whatever marketbabble it's called today) than any book on C or C++ or UML or whatever. Those are all a bunch of pesky details. Knuth's work is one of very few authoritative sources on anything related to the processing of information. I'd call it the Computer Programming Canon, and I think it should be required reading, even if you don't plan on doing any programming yourself. If you're in IT, you should understand the concepts.
I would recommend "Learning Python" over "Programming Python" for anyone with little or no experience of the language. I have both, and while Programming Python is an excellent book it is not at all suitable for beginners. Unlike "Programming Perl" (which is a classic text book no matter what level you are) "Programming Python" is more of a cook book - it discusses several more complex areas of Python in depth such as GUI coding and network / web server stuff but does not have much of use to language newbies. "Learning Python" on the other hand covers the whole basic language and does it in a very complete way - it's probably the best learn-a-language book in my collection.
by Bruce Schneier
A must for every PHB, this book gives a good overview of network security from a systems design standpoint.
The ultimate compliment to his other book about encryption algorithms. I find "Secrets and Lies" to be an ejoyable read. Not much of a reference, though, so give it to your PHB when you are finished reading it.
Get "Structured Computer Organization" by A. Tanenbaum. It's a really good beginners book on how computers ACTUALLY work. No fancy stuff in it, just plain old basic knowledge of how it actually works, which is really necessary to truly understand what is going on. And some good book on how compilers really work - that way, you can far better grasp the reasons for lots of decisions made in the design of various compilers and programming languages. I find that I apply that knowledge pretty much *all the time*.
Anyway, just my DKK 0.17 worth...
Black holes are where God divided by zero
Oh! Pascal is the best text I've ever seen on programming. The language may not be that useful anymore, but the concepts are universal. I learned all about recursion, data structures, pointers, etc. from that book. The descriptions are engaging and well illustrated. It really is a good read for any programmer.
t'nera semordnilap
seems to have done OK in the IT business and wrote a nice book about it.
the road ahead
IANAL, but imagine a beowulf cluster of in Soviet Russia all your belong are base to us welcoming the new SCO overlords.
"Rapid Development", should have been called "preventing project management fsck ups for dummies".
Dave
I write a blog now, you should be afraid.
I have a list of titles I think people should have if they do Web Development, especially JSP/Servlet programming.
Check out http://www.starvingmind.net/tech.php
I am an amazon affilate. I'm love business and tech books, and have quite a collection of both. I'm am trying to build up a site that will make enough in sales on a regular basis to pay for site hosting on a real provider...right now it's on my cable modem.
A little project of mine. I plan to expand it into a much more complete site as time goes on. Kinda the slashdot for tech and business books. Has a long way to go, it's only been up three weeks, so don't be to hard on my lack of features and content yet.
If anyone has any suggestions, I'd be happy to add them.
-Pete
Soccer Goal Plans
Are we talking about a career in Support or a career in programming / development.
I only ask as i think it's a relevant point - some of the subjects and books you have posted are irrelevant to someone supporting Servers for example whilst the sort of books desktop support staff would need most are others - for example i have worked 10 years in IT support in roles ranging from SYS admin to IT manager and have never even picked up a book on software design or user interfaces...
If you support systems for a living things like hardwareand operating systems are more valuable than books on code, so maybe what we need is a definitive list of books by proffesiona class - IE programmer, support operator, web developer etc.
Still a damn good idea and a got me thinking.
I refuse to argue with Anonymous Cowards - if you want a discussion get an account....
yes kinda funny how every one of thoose links has the "obidos" in it which means the guy is lookin to make some cash off every one of thoose links he provided.
gotta give him credit for creative thinking though, thats more views than most affiliates can get in a year!
People don't always associate compromise and complacency with business goals, as long as you're not losing sight of your values and recogize the greater good, then I think having a little of both will cut your levels of stress immensely.
Slashdot had a review a while back of The Practice of System and Network Administration This is a really wonderful book about system administration methodoligies and best practices. It stays completely away from the technical aspects of administration, and instead focuses on the logical and organizational aspects. This should be required reading for all SAs. Many will think it's pretty basic, but even experienced SAs will pick up a nugget or two of information, and it's a great introduction to the career for newbies.
= programs.
Wirth, IIRC.
> A book about Algorithms and Data Structures in general
Other than the business-oriented stuff, this is probably the most important pair of items on the list, not something to be lumped together with the odds-and-ends at the bottom.
This is the stuff that takes programmers from an intuitive approach to the extremes of well-informed effectiveness.
Also, it's not specific to any particular language, OS, or other technology that will be out of the limelight before you finish reading your booklist.
Sheesh, evil *and* a jerk. -- Jade
I agree. I like this kind of initiative. Didn't bother me at all. It doesn't hurt a soul, and I don't know why anyone would be offended. Isn't making money off of interesting content how journalism generally works?
Best Windows Freeware
Let's turn this topic around a bit and collect links to free books that can be found on the net. My favourites are:
- Dive Into Python - an excellent Python book aimed at experienced programmers
- Thinking in Java - concentrates on OOP principles. Check out Thinking in Python/C++/C# on the same site
- Secure Programming for Linux and Unix HOWTO - calls itself a HOWTO but it's practically a book
- Linux From Scratch - build your own linux distribution
There have to be more out there - post links below.I'm not suggestion that the poster of the parent thread poster was offended, but a few on the board seem to have been.
Best Windows Freeware
The book Programming Pearls by Jon Bently is an excellent book on programming practices, interesting to read, not too heavy.
There is this remarkable device called a printer. I hear it is quite usefull for these applications. Maybe you should look into it.
The number one reason to use dead-tree and not digital?
eye-strain
my sig's at the bottom of the page.
-Peace
Dave
Free as in "the Truth shall set you..."
Hi,
If Martin Fowler's Refactoring is not on your list, it should be added.
This book is changing the way people write code, and is up there with Knuth's books, Kernighan and Ritchie, and Design Patterns in terms of influence over software development.
I'd suggest _Crossing the Chasm_, which explains why so many magnificent products disappear after hitting the early adopters (and what to do about it).
But let's face it, if you want a general book to take the place of practical experience in the IT field, pick up one of the Dilbert collections.
Compliers by Aho, Sethi & Ullman "The Dragon Book"
Information Rules by Shaprio & Varian, an IP/biz book
Learn some real hardware:
The Art of Electronics by Horowitz & Hill
Something about VHDL or Verilog
Also, get a free subscription to EE times
The link from the article:0 596000278/ qid=1024393791/sr=2-2/ref=sr_2_2/103-7208254-47838 47
0 596000278/ qid=1024441260/sr=8-1/ref=sr_8_1/103-3058045-04934 53
http://www.amazon.com/exec/obidos/ASIN/
The link from going to it manually without any Amazon cookies:
http://www.amazon.com/exec/obidos/ASIN/
Those different numbers _could_ be referral stuff, but most likely it's just some random transaction ID.
No conspiracy here, move along!
"People that quote themselves in their signatures bother me" - athakur999
The best book out there on understanding how to make IT teams work well is DeMarco & Lister's "Peopleware." It's a great read and full of advice on how to effectively manage an unruly bunch like us. Going through it, I recognized their suggestions as the traits of the best managers I've had.
Actually, I disagree with this as well. I dont know why, but reading electronic books is much easier on me. I have never had any probelms with eye strain, but if I read a dead-tree edition of anything, I have a ba dhabit of leaning on one side far too long. this gets me neck cramps etc etc.
If I had my way, every single university textbook I have bought would have been in electronic format. Not only do I find it easier to read, but you also get benefits like searching, etc. And if you need a more portable version of a section, you can always print a chapter or two.
Funny how even though people here seem to be against Amazon.com, they almost always link to their site when supplying links about books and such...
--
http://www.aikiweb.com - AikiWeb Aikido Information
If you're looking at software engineering as entire practice, I *strongly* recommend this book. Covers quite a lot and a lot of great points.
-Bill
SlashSig Karma: Excellent (mostly affected by moderatio
UNIX programming
"UNIX Network Programming" Vols 1 & 2 by Richard Stevens
Compilers
"Compilers: Principles, Techniques and Tools", by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman (AKA the Dragon book)
Help find a cure for cancer!
(but you still need your vendor's documentation, because no one really implements standard sql correctly.)
There aint no pancake so thin it doesn't have two sides.
As an experiment, I went and deleted all of the amazon.com cookies from my browser. I then headed over to www.amazon.com and searched for "C programming language". The "obidos" thing still appears.
My guess is that these links have nothing to do with the guy who posted it, but have more to do with how amazon.com implemented their web site and searching.
Hard to believe no one has mentioned Structure and Interpretation of Computer Programs. While Knuth is a great set of reference bibles, SICP is a perfect textbook. It's funny, well-written, incredibly comprehensive and appropriately mind-expanding. Work through all of the exercises in that book and you've got a solid grasp of programming fundamentals.
Chris
If you're trying to be `green' or to save money you're probably better off buying the book. Unless, of course, you have the money for a duplexing printer and a lot more money for printer paper (Priced it at the big office supply stores lately? It ain't cheap). And you're time had better not be worth anything as you'll want to punch holes in that print out and slap it in a binder.
:-)
CUR ALLOC 20195.....5804M
I have to agree with this in relation to "Learning Perl" over "Programming Perl". Yes, Programming Perl is a great book, but I find myself referring more and more to the examples in Learning Perl simply because the layout of the book is more logical.
First they ignore you, then they laugh at you, then they fight you, then you win. -- Gandhi
First they ignore you, then they laugh at you, then they fight you, then you win. -- Gandhi
Rapid Development : Taming Wild Software Schedules by Steve McConnell. Teaches software project management through the avoidance of "classic mistakes". His list of classic mistakes reads like a diary of all the places I've been.
I consider Bruce Eckel's Thinking in Java to be the standard-bearer of Java programming books and one of the better overall programming books. He also wrote Thinking in C++. Very worth your time if your a Java neophyte.
First they ignore you, then they laugh at you, then they fight you, then you win. -- Gandhi
First they ignore you, then they laugh at you, then they fight you, then you win. -- Gandhi
The Wolf Book is one of if not the best algorithms book going even if you don't like Perl. The language is very accessible, something most college texts on the subject of algorithms are not.
A great collection of entertaining/insightful anecdotes about Bill Gates and the group of CEOs Nathan Myhrvold calls "Captain Ahab's Club" (Ray Noorda, Larry Ellison, Scott McNealy, Philippe Kahn, Jim Manzi, Marc Andreesen, et al) -- CEOs who are so consumed with taking down Gates they risk destroying their companies in the process.
If you're interested in the business end of IT, you're going to run into Microsoft eventually (the first question Silicon Valley venture capitalists ask aspiring entrepreneurs is usually something like "So what's to stop Microsoft from doing the same thing and putting you out of business?"). If you want to learn from the successes and failures of companies that took on Microsoft, this book is a must-read.
Name one circumstance in which I would need to have more than one chapter printed off (for bathroom reading?) and I'll conceed. Seriously, if you ar eon a plane and nee done of these books its cause you're coding on your laptop. And if you have your laptop then you have access to the material electorniclly. SO whats the point?
Soul of a new machine - Tracy Kidder - inside the creation of the data general eagle mini comp - a great look at IT in the late 70's early 80's - considered a classic of tech writing
Fire in the Valley - Frieberger and Swaine - Considered the definitive history of the PC revolution and silicon valley.
Infinite Loop - Micheal S Malone a good look inside Apple computer - real insight into what went on behind the scenes
Hackers - Steven Levy - the classic of computer tech writing - the reality of hackers and an insight into where open source came from
Free as in Freedom - Sam Williams - Fascinating look at RMS and what makes him tick, even someone who often disagrees with him(like me)found a new insight into him and the book is GPL and available in full online
Thats just a few with links for you - PS i also love the following books myself - theyre a great read for many reasons...
-The unix Haters Handbook (dont laugh - its a funny read and so much of this stuff still bugs me)
-Sluggy Freelance Books
-The Bastard Operator from hell books
-Underground - Sulette Davies (great book about hackers and available online if you lookat www.underground.com)
-Insanely Great and Crypto - Newer books by steven levy
-The Cathedral and the Bazzar - Eric Raymonds book on open source
-Takedown - The pursuit of Kevin mitnick (a bit biased but a good read) let me know your favourites ok.
I refuse to argue with Anonymous Cowards - if you want a discussion get an account....
Once you have your BCS and know the basics of coding, just about everything under the sun is a "little question" or "quick howto". All I need to get a handle on a new language or technology is a short tutorial, an example, a link to the reference documentation, and a day or two. Sitting down and reading through a book for 8-12 hours is a waste of time I could be using actually learning the technology hands-on. The only real way to learn is by getting your feet wet.
I have compiled a list of IT books available online for your reading & enjoyment.
The description that I wrote for each of them is in spanish, but they are written in english. I've read all of them and I can assure you they are among the best.
Fh
I noted some in the Misc should be categories themselves:
- A couple of Data Structures books are essential. Mine is Weiss' "Data Structures and Problem Solving" and "Data Structures and Algorithm Analysis", available "in" different languages (C++, Java, at least).
I think they're great, but then again, I took that class with Weiss and the book was heavily recommended anyway. I'm sure there are other outstanding books out there I don't know about.
- An Operating Systems book is essential. I have the "Dinosaur book", however it's called. It's not bad, but it's not great either. I heard good things of Tannenbaun's "Modern Operating Systems" and it's on my buy list, but unless you're in OS development only one competent book is necessary.
- A hardware book is essential. Tannenbaun's "Structured Computer Organization", for example.
- An SQL reference is essential, and a good theoretical introduction to relational calculus as well. For the first, almost any decent SQL reference is good enough (O'reilly has a bunch of PL/SQL books) and some "Enterprise" references include 80% of what you'll ever need in some appendix. For the second, you need a good database class.
But the point is that SQL is not exactly "programming", although it may be hard to explain to someone who's not a programmer (HR departments included). It's relational calculus, which deserves a whole category by itself, and solves different problems than what we normally call programming.
In Design:
- "Design Patterns" by the GoF. It's essential. Even if you don't get into the hype of Patterns, a student will learn a lot of neat solutions to complex problems without stumbling his/her way through at first. Which, incidentally, is what the hype of Design patterns is all about.
- "Refactoring" by Martin Fowler.
Refactoring is not yet another experimental methodology, it's something we will probably do sooner or later, and doing it sooner and having a methodology just makes life that much easier. This book is great.
In Programming:
- "Thinking in *" by Bruce Eckel, where * is whatever language you want to learn.
Not only is it free, and online, I think it's one of the best series of introductory books I have read. I learned Java with it and found it the only reference for the core language that I needed... my college's required book (Dietel & Dietel) is still collecting dust.
I keep both the Java and C++ versions as references on my hard disk, and plan to learn Python from "Thinking in Python" at some point.
I recommend these because they're good "learning to program" books. Having a basic reference for each language your using is essential, but every student should have a good "basic programming" reference, whatever the language it uses. They're two different kinds of books, the latter is harder to find.
- "Programming in SML" by Robert Harper. There should be at least one functional programming book in the student's bookshelf. You may want a theory-oriented book too, but I think a practical manual for the language and lots of experimentation are what is essential to grasp the concept, SML is a good choice, and Harper's book is a great reference. It will help anyone to develop better in any modern language.
Things that are useful but should not be considered essential:
- Wireless books. Useful if you're interested in the subject, but not essential and a bit too specialized for "basic knowledge". For the interested student it is vital, but for the typical student it will not make a difference.
- Graphics: same as above.
- "Mastering Regular Expressions" (O'Reilly). Regex can save a lot of programming time and provide simple solutions for some common needs.
- For J2EE and web-development references, "Web Development with Java Server Pages" (Manning editorial) is my favorite book in the subject, with "Server Progamming in Java" (Manning again) for heavier, more general stuff and "Core Servlets" (Sun) for reference.
But that's only if that's of interest to the student. I would recommend getting familiar with the concepts, but it would only be part of the "core library" if it's part of what they want to do.
- Cryptography: "Applied Cryptography" is the book to get. But for most people it's an obscure subject and should be dealt with as a black box. Too specialized to be considered "basic".
A good security book should cover all that really matters in the application of cryptography (when to use it and how) anyway.
Freedom is the freedom to say 2+2=4, everything else follows...
If you are bored, pick up your copy of Kernighan and Ritchie and look up "recursion" in the index. Okay, I know it's lame. But I found it at eeggs.com which is kind of a cool website, if you like that sort of thing.
I'm actually kind of interested to see what people say on this subject, as it's something I've been thinking about recently.
Seems to me that "IT" is a much broader subject than what is suggested by this list, and that an "IT Professional" is much more than a programmer. To me, an IT Professional is someone who can walk into a business, assess their situation and needs, recommend a solution, and see through the implementation of that solution.
This obviously requires solid programming skills, but it also requires real business knowledge, finance, operations, knowledge of the IT industry, people skills. Let alone software and hardware architecture.
The fact is, that code is becoming largely a commodity. A growing percentage of business problems can be solved more cheaply using off-the-shelf components. So "implementing a solution" is more and more a matter of tying together pieces.
What becomes valuable and in demand, then, is your integration skills, your knowledge of business needs, your experience dealing with vendors, and your ability to nurture your customer relationships.
So I would conclude that yes, it's critical to have a solid tech background, and all that stuff should be on your bookshelf, but you really need to succeed as an IT Professional is a global view of the IT Industry and its relationship to business.
What I'd like to see added to the list is recommendations of books that would help one achieve this sort of perspective.
...is Just Java by Peter Van der Linden. As an almost-middle-aged engineer, technical writer, and beginning programmer, I combed through every Java book I could find. Most of them either explained everything in terms of C++, which was useless for me, or they were too basic, or they were just badly written. Just Java is a really well written book by any measure. It's suitable for any level of programmer, and a great reference.
Sorry, but I think Knuth's The Art Of Computer Programming is massively overrated as a general-purpose text. It's like that presentation edition of The Complete Works of Willy Wagglestick that sits on the shelf looking splendid and making you very proud that you own it, but never actually getting read.
For most purposes, a good book on basic data structures and algorithms is far more useful in the real world than Knuth's complex explanations with examples implemented in MIX. Maybe I just don't need the deep stuff behind it regularly, but if I don't then surely neither do most other professional programmers, and that pretty clearly contradicts the "essential" status. If it was a choice between making computer science students read TAOCP or making them read Sedgewick, then I'm sorry, but I'm choosing Sedgewick every time.
This is not to say Knuth's work doesn't have immense value as an authoritative academic treatise on its subject matter; clearly it does. But that's very different to calling it "absolutely essential" for just anyone.
And to preempt the obvious replies... Yes, I've read several bits of TAOCP. Yes, I do like other things Knuth has written (notably his TeX-related stuff). And no, I don't much like Numerical Recipes either, for exactly the same reasons.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
You could read every book on the list and in the threads (I have and many more besides,) and still fuck up when you realize that you're working for people who didn't read any of these books but who got there before you did, haven't learned squat in all the years they've been working there, couldn't manage to find their ass-holes with both their hands and still they have the power (authority is something else,) to TELL you to do your job wrong because they don't know what the fuck you're talking about but they've never done it your way and they're not about to start now, nobody ever went broke buying IBM, yadda, yadda.
/. but now I won't give a shit. :-) Man there's NOTHING like walking away! :-)
I've just tossed in the towel and bought a dog grooming salon.
High-tech businesses and their (mis)managers?
Fuck 'em where they breathe.
A less than satisfied high-tech struggler in the trenches. Make that an EX high-tech struggler in the trenches.
I'll keep reading
MSBPodcast.com The opinions expressed here are my own. If you don't like 'em... Think up your own stuff.
The ACLU voted this book best C++ book of 2001.
Michael Feathers of ObjectMentor described this book as "Porno for Programmers"
With accolades like that, it is obviously an, umm, ah, unusual, book.
Let me start with a "Once upon a time story...."
Once upon a time, I wrote a C++ library that should have become the Standard Template Library. But Stepanov didn't play fair. Whilst I, in my third worldish corner, dreamt up arcane workarounds for the deficiencies of the C++ compilers of the day, Stepanov walked next door to Bjarne Soustroup's office and told him to do it right.
I remember the frustration, I needed template template parameters. I needed traits, above all I needed ways of manipulating types and getting information about types. I did some amazingly convoluted and tricksy things to make it work. My library did work, but bygorrah was it arcane.
I gave up on C++ as an "almost" language that didn't quite make the grade.
After Stepanov's bullying, C++ was better but it still lacked things. RTTI is deficient. Types are not first-class objects.
I had given up hope of it ever becoming my dream language.
Now there is a new player on the C++ scene. Andrei Alexandrescu.
He is starting from the base that Stepanov, Moo and Soustroup created. The nifty template template stuff is now in every compiler. We all have partial specialization. We have traits.
Now he tackles the rest of the deficiencies with a bullheaded aggressiveness that is amazing. He does horrible things. Truly evil things. Things that make me blush to read. He then sweeps all the nasty stuff under a nifty carpet called the "Loki Library".
Its neat and usable. All the deficiencies of C++ are gone.
The grand promise of very efficient reusable generic code lies open before us with all the obstacles blasted away.
Java will never compete with C++ for efficiency and flexibility. Alexandrescu has created a new future.
Now we know this book is important, so what is in it....
Policy Based Class design.
Every design has trade-offs. What works in one situation is slow in another. What is safe here is a disaster there. Some situations allow some really good optimizations, but other places not.
We want reusable components, but if we make it generic, we end up with a "Lowest Common Denominator" kitchen sink mess.
Policy Based class design is the answer.
Read the chapter on Smart pointers. It is the best example of generic, flexible, efficient, reusuable design I have ever seen.
Part I Techniques and Typelists.
This is the "porn" in the "porno for programmers". What he does here is pure horror. This the Steven King of the software development literature. This is why people who have looked deep into the heart of C++ templates shudder.
But don't worry. He neatly prepackages it all and serves it up in a nice tidy API. Enjoy.
Chapter 4. Small Object Allocation.
Don't discount this one. STL actually quietly does a lot of this. It is amazingly effective.
Part II Components.
All the high-tech of Part one applied to roll out generic, efficient and flexible implementations of 7 standard patterns.
For anyone who's interested in programming C++, this list from a newsgroup thread on the subject is a decent starting point.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
If anyone else isn't familiar with his works yet, I strongly recommend they go to their local library or bookshop and ask for a copy of the aformentioned title, they will be glad they did.
Be careful! New moon tonight.
I'd recommend Crossing the Chasm by Geoffrey Moore and The Innovator's Dilemma by Clayton Christensen. Crossing the Chasm is especially depressing as you can follow along as your company loses focus and does all the things Geoffrey tells you not to do.
development.lombardi.com
The Practice of System and Network Administration is a very good book covering many good processes and procedures in systems admining and the what not. I would recommend this book to any one working in the field.
Check out the slashdot review here
Author: Thomas A. Limoncelli and Christine Hogan
Publisher: Addison-Wesley
now go buy it, it is good you will like it trust me on this one.
man
No manual entry for
When someone asks for a good programming book, why does someone always recommend K&R? Where did we get this crazy notion that the guys who invented the language obviously wrote the best book about it? I mean, the Stroustrop C++ book is actually pretty good, but K&R is terse, obtuse, and out-of-date. It's like trying to learn Perl from the man pages.
I still remember my introduction to C. I was in high school and a friend of the family arranged for me to volunteer at the CS department of the local university. Someone handed me a copy of K&R and told me to go write something. I was already an experienced Pascal/Basic programmer by that point, but K&R C was clear as mud. I think I managed to hack the thing together by trial and error. The next year I took a C course which was pretty much self-directed (the prof didn't actually know C), and I learned the language mostly from the TurboC help files... a better reference than K&R if you ask me.
-a
How to rationalize theft.
To answer your question, if the skills used in your OSS work or in your moonlighting are relevant to your career and are non-trivial, then by all means list them. But be ready to demonstrate that the skills are beyond the hobbyist level. And be ready to answer questions about your outside projects interfering with your ability to do the job you are seeking.
Remember, your resume is just a tool to get you an interview. The hiring manager is just interested in skills and experience relevant to the job they are hiring for. So list those skills, and only those skills, that are relevant to the type of position you are applying for. Don't pad your resume with skills that you cannot demonstrate proficiency in. And target your resume to the hiring manager, not HR.
My experience has been that HR has little to do with the hiring decision, it is the hiring manager that you are trying to impress.
I the jobs where I've had hiring responsibility I looked for:
- A skill set that matched my hiring criteria.
- Evidence of real word use of those skills.
- Previous work in a similar environment (i.e small vs. large shop) or on similar project or in the same or related industry.
On the other hand, skills padding usually resulted in a TNT letter (Thanks, No Thanks). For example, don't list every language, every computer, or every OS you've ever used. (Do list those you can demonstrate proficiency in.)
The one exception is when the job calls for a skill, for example C++ experience, and you've only used C++ on a couple of academic projects. Then go ahead and list C++ on your resume to get yourself in the door. But be sure to mention this to the interviewer before they dig it out. Thus someone with a strong programming background, proficient in C, who tells me that their C++ experience is limited has a much better chance of being hired then the person with the same skill set but which I uncover that his only C++ experience is a few college assignments. But this only works if you have all the other skills needed.
And good luck.
Steve M
One book about software metrics:
0 534956009/ ref=cm_mp_fil/002-5413933-8950461
Software Metrics: A Rigorous and Practical Approach
http://www.amazon.com/exec/obidos/ASIN/
A wonderful read!
Mats
I'd have to agree with this. I like the way Lutz's exercises have the reader type code straight into the interpreter, as an impatient type who'd had some programming experience and wanted to get up to speed fast, this hands-on approach worked wonders.
Once one has digested this book, the online python documentation is quite useful, or for a dead tree book, there's Beazley's "Python Essential Reference" (New Riders)
Bah. More Anti-MS propaganda on /. How typical. Let's see here, I have MS Press's Netwroking Essentials right here on my shelf....let's see what we can come up with:
The OSI model (including brief mentions of 802.3,.4, and .5, and a larger detail on TCP/IP of course). Decidedly not MS-centric. AAMOF, the only mention of Windows I can find in the entire chapter is about WinSock (with a nod to BSD for the basis of the design), and obligatory NetBIOS and NetBEUI info.
There's also good info on basic netwrok troubleshooting, RAID levels, networking hardware, etc. Is it in depth? No, but it's a good read for anyone starting with networks. It gives general background info, and I have never found it to be MS propaganda. True, it does go into some detail on how to do certain things on a Windows system. But, seeing as how it's targeted to MCSE wannabe's, that's to be expected.
Just so you know, MS Press's other MCSE books are similarly well written, but of course some are more MS centric. Kind of hard to write a book on Active Directory (for instance) without being. But, every book I've seen from them that deals with broader topics (Network security, for instance) spends a lot more time on whys than hows.
Try to learning some programming. I suggest starting with an interpreted language, like Python. It's easy to get started quickly. Good programming books to get started with: Learning Python by Mark Lutz for Python, and Accelerated C++ by Koenig and Moo for C++. The recommended books (Programming Python, The C++ Programming Language) aren't terribly good for starting out (to put it mildly. The latter is a reference, which basically assumes you know C++, it's not a tutorial)
Also, play around with Apache, try to write some server side scripts using Python or whatever other tool you fancy.
Beginning Linux Programming (Matthew/Steones, Wrox press) is a good intro to several topics on programming for Linux. Cheers,
Hmm. Is Anonymous another name for Noel? Oooeeeoooeeoo.
Be careful! New moon tonight.
While of course much of it is C++ specific, there is a great deal of information that applies to nearly any language. Most notable are his discussions of analyzing dependencies, and extensive discussion on resolving circular dependencies, and software "Design for Testability" (Unit Testing discussed much earlier than eXtreme Programming came along, as well as "White Box" testing.)
Lakos used to work for Mentor Graphics, an electronic CAD software vendor. Mentor was one of the first companies to adopt C++ for the development of large production systems back in the 80's, and their first attempts were collosal disasters. But surprisingly they didn't give up, instead they worked out a detailed methodology for doing successful and productive C++ development.
It has helped me immensely in my work, and I am on a quiet campaign to get all of my client's programmers to read it.
My page Avoiding Unnecessary Header File Inclusion is based on the ideas in Lakos book, if you want a detailed example of why this is worthwhile reading. (That part is C++ specific, though.)
About dependencies:
A well-designed program will have a "dependency graph" that has no cycles in it. This allows components of the programs to stand on their own, depending on at most a few other modules. This aids comprehension by developers, and also aids testing.
What this means is that many components of a program will depend either on nothing else at all, or at most on standard libraries. Then at the next level up, there will be some components that depend only on the components at the first level or the zeroth level (the standard libraries). You can continue up this way, with components depending only on levels below them.
This aids both reusability and unit testing. Reusability because a component can be taken elsewhere and only requires the few components it depends on to work, and unit testing because you can build test executables by linking in only a few dependencies. It also aids testing because you can be sure a component is tested if you have a test for the component directly, and tests for each of its dependencies.
Poorly designed (and all-too-common) programs have dependency cycles. That is, the graph of module dependencies is not acycling, and you cannot link a module in its own test harness without taking a lot of junk with it. Maybe it even requires the entire program. Really bad programs will have a great many cycles in their dependency graphs.
There are quite a few techniques for managing these dependencies, a few C++ specific but many of them language-independent. Lakos catalogs many of them.
About unit testing:
Probably most people here are at least passingly familiar with unit testing. But Lakos has a strategy for making the effort to write tests manageble while still getting good test coverage.
First, you "levelize" your program (that is, create an acyclic dependency graph for your program).
Then, for each module, you make the assumption that the dependencies are already tested, and write the test for the module itself so that it only intentionally tests the code which is actually part of the module under test. You don't try to test the dependencies "through" a module that is at a layer above them.
This makes the amount of test code scale linearly with the number of modules, and also moderates the requirements for the effort a test must make.
While complete test coverage requires a unit test for each module, it is not really necessary to write the tests for the lowest levels first (although that is probably the best strategy).
In an automated test run, though, one should generally run the lowest level tests first.
Finally, Lakos discusses how one could write automated tools for doing dependency analysis. One can do this for C++ by basing it on Open Source tools like mkdep.
-- Could you use my software consulting serv
The ACCU makes review copies of books available to its members for free, and then the members write reviews that are printed first in the members' magazines, and then archived on the web for all to see. Because these reviews are written by working engineers, they tend to be pretty direct, to the point, and best of all they make it really clear when they recommend against a bad book.
To save you some clicking, here are some links to some of its sections:
-
Reviews arranged by subject
-
Reviews arranged by Title
-
Reviews arranged by author
-
Reviews of Highly Recommended Books
-
Highly Recommended books on Advanced C
-
Highly Recommended books on Java
Here is a review of a book that is "Not Recommended" so you can see the value the ACCU reviews will have in helping you avoid bad books.The ACCU welcomes programmers in "any language the uses curly braces" (like C# and Java) and the reviews cover books on a wide variety of subjects, even awk and astronomy, so do check there even if your book is not on C or C++.
-- Could you use my software consulting serv
- The Art of Computer Programming (Knuth)
- Computer Networks: A Systems Approach (Peterson and Davie)
- Distributed Algorithms (Lynch)
- Designing Web Usability (Nielsen)
Danny.I have written over 900 book reviews
The best book on programming for the layman is "Alice in Wonderland"; but that's because it's the best book on anything for the layman.
deus does not exist but if he does
Why, it even inspired poetry: "waggling, wibble wobbling, spiraling ever upwards", from Blue Clear Silence, by Claiborne Schley Walsh. (Warning: link may be considered literary equivalent of goatse, by some...)
A couple of books I've read or am reading at the moment.
Weaving the Web - Tim Berners-Lee
The Cathedral & the Bazaar - Eric S. Raymond
A good insight into how applications are developed and why the web _should_ exist. Good things to keep in mind while designing an application.
The Cluetrain Manifesto - Christopher Locke, Rick Levine
Rules for the new economy. Maybe not really IT related but should encourage you to think about your end users.
/b
[Please type your sig here.]
If you are just starting out in C++, even if you are proficient in C, stay clear of Stroustrup's "C++ Programming Language." If you are like me, you learned a lot from K&Rs "C Programming Language" and that will make you think that the supposedly C++ equivalent will be just as helpful. Unfortunately, Stroustrup's book is mostly a refernce and goes into the concepts far too quickly for the beginner. I recommend Deitel&Deitel's book.
Hear hear, as soon as I get my book budget out of the claws of finance one gets bought. In fact, I'm almost tempted to...gasp...spend my own money on it!
The book has a web site - http://www.sysadminfocus.com/index.html - and you can read an excellent appendix on-line - giving quick summaries of "what to do when". Good stuff.
~~~~~ BigLig2? You mean there's another one of me?
The one book to have about databases is Christopher J Date’s An Introduction to Database Systems, 7th edition, Addison-Wesley 1.999. The edition is relevant, because it includes recent, fundamental work about type inheritance and other fundaments for relational databases supporting OO programming.
Leandro Guimarães Faria Corcete DUTRA
DA, DBA, SysAdmin, Data Modeller
GNU Project, Debian GNU/Lin
"Could the editors please either remove the referrer-id from the Amazon links..."
Have a look at the URLs - they have different sets of numbers in them. That's because these numbers are not referal IDs that the poster has added - they are numbers that Amazon uses to track users through their site. Try going to amazon and clicking through a few pages - you will see numbers just like those in the article.
No conspiracy here - just a poster that couldn't be bothered to trim their amazon links. (You can get rid of everything after the "ASIN/[number]" part)
Good idea about adding a referrer ID for a good cause though - since there is no referrer ID there right now it would be good for someone to get the 15%
Applied Cryptography (http://www.counterpane.com/applied.html)
Numerical Reciepes
http://books.cambridge.org/0521750342.h
Knuth's Art of Computer Computer Programming
http://www-cs-faculty.stanford.edu/~
I must add a canny way of earning refer credit with amazon
http://www.amazon.com/exec/obidos/ASIN/15561548
Available at:
http://psg.com/~dlamkins/sl/contents.html
This book has several possible paths through it for different audiences. I would suggest the "Professional Programmer" path for this audience, with special attention to the "How to Find Your Way Around" chapters.
Also check out the "New to Lisp" section on the Franz Inc home page:
http://www.franz.com
To a Lisp hacker, XML is S-expressions in drag.
If you aren't going to be working with MS machines, then this book is worthless. OTOH, if you are going to deal with Windows 2k Server (or Advanced Server), then this is a great book. Heck, its worth a read even if you are into linux, just so you aren't an uneducated zealot who mistakenly says "But windows can't do that" when it can.
Stanford, where Knuth is an professor emeritus does not require or even suggest that students read ANY of TAOCP to obtain a CS degree. Reading all of it would be difficult since it isn't completed.
Lasers Controlled Games!
I don't work for them, but I find the Construx Software Reading List to be an excellent guide. It has preferred and alternates for various topics. Here's a sampling:
Introduction to Algorithms, Thomas H. Cormen, et al
Code Complete, Steve McConnell
201 Principles of Software Development, Alan M. Davis
The Design of Everyday Things, Donald A. Norman
Fundamentals of Database Systems, Ramez Elmasri and Shamkant B. Navathe
Design Patterns, Erich Gamma, et al.
Software Runaways, Robert L. Glass
Wicked Problems, Righteous Solutions, Peter DeGrace and Leslie Hulet Stahl
The reading list also includes classic articles and recommended periodicals.
If you work with a Unix shell: one of the best references that I found: O'Reilly's Unix Power Tools. Some stuff may be outdated, but it's packed to the brim with useful, hands-on info and it's a very good bang for the buck.
Idempotent operation: Like MS software, wether you run it once or often, that doesn't make it any better.