As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
So, we have coding books, coding RSS feeds, and music to code by. Are there any coding magazines that anyone would recommend?
The venerable Dr. Dobbs Journal is still pretty good. It covers multiple platforms, and mixes some fairly hard-core technical articles with lighter fare (interviews with notables, a "Developer Diaries" column that profiles regular-Joe (and Jane) developers from a range of fields). If you are employed and have authority to spend some non-trivial amount of money on tools (or are willing to claim that you do), you can probably get them to send it to you for free.
For the Microsoft world, MSDN Magazine is very useful. Some of their columns are excellent, particularly Jeff Richter's Concurrent Affairs.
The Pragmatic Programmers' Pragmatic Bookshelf publishes a free magazine available online and for download in various formats:
Each month, our editor Michael Swaine
brings you a free magazine packed full
of interesting articles, features, and
departments. Download it in PDF, mobi
(good for the Kindle), and epub (great
for Stanza on the iPhone).
I also enjoy Dr. Dobb's Journal. But hey, there's a way to leech it for free (at the time of writing, anyway):
http://pages.nxtbook.com/nxtbooks/cmp/ddj<mm><yy>/offline/cmp_ddj<mm><yy>_pdf.zip
Replace <mm> and <yy> with month and year. They're available 8/2006 thru 2/2009.
Afterwards, it's known as Dr. Dobb's Digest and is instead available at URL pattern:
http://i.cmpnet.com/ddj/digest/<yyyy>/DDD_<mm><yy>.pdf
Dr. Dobbs Journal is a pretty good broad-based programmer's journal. Covers all manner of material.
Game Developer Magazine has lots of very good articles, though as you might expect they tend to skew towards C++.
Visual Studio Magazine has some gems every once in awhile
I like Dr. Dobb's Journal also but the magazine refers the reader to their web site for most of the interesting articles. I have found the Java Developer's Journal very interesting because it contains articles about Java in the context of both web and enterprise applications.
For the Perl crowd, there is of course The Perl Review. And for the German-speaking subset of it, there's the Foo Magazin as well.
VSJ, I find it a great mag :) http://www.vsj.co.uk/
Edit
This is NOT off-topic! It directly relates to programming!
I subscribe to MSDN magazine, it's a bit thinner now than in years past, but for .NET it covers a variety of topics, it's a good way to keep abreast of new Microsoft offerings.
All the content is available online on MSDN, and of course online resources/blogs are a lot more up to date, but sometimes it's nice to have a magazine in your bag for a flight or layover.
I really enjoy IEEE Software because it covers broader issues regarding software engineering.
Definitely Your Sinclair. Hands down.
I really enjoy Code and asp.netPRO ... Visual Studio is so-so.
The ACCU mags, Overload and C-Vu.
I like Game Developers Magazine, but since the ECTS no longer runs I no longer get free ones anymore:-(
Python Magazine of course ! BTW they are looking for contributors...
I like Embedded Systems. Even if you don't program for embedded systems, the software articles are excellent. http://www.embedded.com/
Both the IEEE and ACM put out a number of good computing magazines, which might be of interest depending on your exact interests. I'm a subscriber to both.
The ACM Queue has some hardcore content, dense, but good. I haven't read it in a while though.
For Delphi delvelopers "Blaise" international magazine - www.blaisepascal.eu
Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I've always enjoyed programming and I always enjoy learning new langauges (anything e.g. Java/C#/Erlang/F#/Clojure/Ruby etc), but something's never seemed to enjoy it as much as I want.
One thing I'm curious about which I'm wondering if I might enjoy completely is CAD/CAM/CNC programming and design and I was wondering if anyone has any tips on where/how to start learning, what software there is out there that would be helpful for learning with (preferably free/open source and preferably for Linux, though I appreciate options may be limited).
Any tips would be appreciated.
You can start trying EMC (free) at http://www.linuxcnc.org/
Just a few comments:
CNC is a generical name for computer controlled machines (the "N" comes from Numerical)
There are several standards (as always) for the language, perhaps the most used is ISO 6983. However you'll find out quickly that each machine implementation is different.
There are also relatively cheap machines (under $1000) that you can buy or DIY to effectively run your programs and make "real" things. See for example http://buildyourcnc.com/default.aspx or http://wiki.makerbot.com/cupcake. You'll not catch up the quirks of the trade until you can run your programs in a real lathe or mill.
CAD and CAM programs from the programmer's POV can be thought as visual CASE tools.
Check out the available books like 7 Easy Steps to CNC Progamming . . . A Beginner's Guide Also, checkout MyIGetIT.com they have great turorials on the major CADCAM systems. Here is a code ( RES-10-HAYPB) for 10% off any/all of their cad/cam training courses.
The key to learning anything is having a specific project in mind. For example when learning to play a musical instrument, it is much easier to pick a song or style of music than to just "try to learn to play guitar." When you have a song or piece in mind, they you can focus your learning.
The same is true of learning CAD/CAM NC programming. What do you want to make? will it require a lathe, milling, drilling, routing, laser cutting, waterjet or . . .? If you want to make tractor spondles or disc rotors for a motorcycle that is different than where you would focus your efforts if you wanted to learn to program a router to make cabinets, or door panels.
Like programming computers what is your project? working with date, making games or simulators, perhaps calculation programs or business utilities. Having a reason to learn C#, Java, SQL or what ever is the key to effective learning.
As someone who has worked in the industry for a number of years I'd have to say that I don't think there is anything available for free and certainly not open source that would get you very far. Most packages cost thousands of dollars. However you could learn some basics by just coding in straight g-code; you really need a machine available to try with as every machine is somewhat different in specifications. Generally the programming manuals that come with CNC machines are the best place to start.
Why not try opencascade,it's opensource.
This is a little late but MasterCAM does offer a student version that comes with instructional books from emastercam.com
There are also many community colleges in areas with large machine trades that offer classes in MasterCAM, CATIA, and NX. It depends very much on who the largest vendor in that area is. MasterCAM is probably the most popular mid-range CAM product and is almost a prerequisite for a CAM programming career, but is a mid-range software and the usability of the software reflects that.
Most machine programming is done using software and it is more correct to refer to it as CAM programming. NC programming lost prevalence almost as soon as CAM software came out in the 1980's. However, it is very important to be proficient in NC code. I still write NC programs every day.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
In preparation for a blog post about programming, I'm gathering ideas around areas of programming and software development that are actual, new, fresh, cool, interesting and are potentially profitable in the near future.
I've gathered these ideas:
apps for Facebook and Twitter
apps for other API based websites (social apps)
cell phones, Pocket PC applications
robots and automation
web tool applications for other programmers
multilingual websites and web tools
Do you know other issues/trends that can be added to this list?
Here is my top 10 list of what is funky, cool, happening and grooooovy:
In at 1, Concurrency, scalability and distributed data implementations
In at 2, Programming Languages and Meta-Object structures
In at 3, Image analysis and automated environment interpretation
In at 4, AI and NLP combinations in Search technologies
In at 5, Self-replicating automata and swarm intelligence
In at 6, Human/Machine hardware interfaces (wetware)
In at 7, Nano-robotics in medicine
In at 8, Medical/Life Simulation (think simulating a virus that attacks cancer)
In at 9, Real-time Raytraced graphics
In at 10, Automated Social Interaction/experimentation using online communities
I feel it might be balanced to add a few Empty hype items that have potential, but so far are pretty lame/boring from a technical perspective ... but with some thought could get interesting:
Location Based Services
Google Wave ... isn't this just very rich, relational email? I take this back, I watched the developer video thingy. Now i'm hyped :P
Wikis ... Blank canvas, not much going on. How dry is wikipedia ;P
Payment/virtual currency. Too much freeconomy going on online.
Secondlife/MM-style games - Interesting tech, no juice
Flash, Silverlight, JavaFX - A single open solution might be nice.
Google Chrome OS - Doing away with X11! Sounds like Microsoft's embrace-extend-extinguish game plan to me
Note: Facebook, Google and Twitter do not appear in the list. They are API
Cloud computing and apps that utilize it effectively.
Using the tremendous power of GPU for non-graphics-relateted calculations. See nVidia CUDA to get an idea. This is pretty new right now so it's only gathering momentum, but I expect that it will see more widespread use in the coming decade.
Visual programming through tools like Processing, "an open source programming language and environment for people who want to program images, animation, and interactions."
Telecommunications area in general.
And particularly environments/programming languages supporting it (Erlang for example).
Technologies supporting cloud computing reliability, security and scalability
Physical computing / ubicomp, especially Arduino and similar ways that these concepts can be popularised. (See this piece comparing its significance to that of the Altair 8800).
As always, Fortran.
All areas of programming are, or could be interesting. But this doesn't really answer your question :)
Well, mashups are cool.
My programming interest in technology are Mashups, Web 2.0, .Net 3.5, parallel programming. However, learning algorithms are also interesting, I'm interested on evolutionary learning such as genetic algorithm and ant colony. I think, modern technologies and learning algorithms would be a good combination.
Metaprogramming is also pretty cool. Code analysis (FxCop, StyleCop, NDepend, ...) and modifying existing assemblies (ILMerge, Mono Linker, ...).
Mobile device development such as iPhone, Palm Pre, Android programming seem be reasonably hot at the moment.
What are the most cool and modern
programming areas nowadays?
Robotics.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
For my area, I get the updates from
ww.asp.net
code.google.com
www.webmasterworld.com
What others do you highly recommend?
For anything .NET you cant go past Scott Gu's blog.
DZone is pretty good if you want to know what's happening in programmer blogosphere, especially for Java programmers, but not limited to Java. The thing I like the most about them is monthly e-mail newsletter with top links for the month, which makes me return, especially if I didn't have much time to procrastrinate that month.
If you're into anything with Linux:
http://www.linux.com/feature
A List Apart has some excellent web articles
If you want keep up with browsers, Web Browsers News and Reviews might help.
Finally, PPK, a javascript expert, often has some interesting links and blog posts.
Here is a list of the recommended blogs if you're into .NET development:
http://haacked.com
http://weblogs.asp.net/scottgu/
http://weblogs.asp.net/fredriknormen/
http://www.nikhilk.net
For PHP-related stuff PHP Planet and for PostgreSQL Planet PostgreSQL. If you're intrested in PostgreSQL depesz has a very nice blog with a lot of information about upcoming versions, performance tweaks, etc.
Ayende's (creator of Rhino Mocks) blog is a great read.
Forgot to mention www.codeproject.com is good one to get latest news too.
Check also: http://www.infoq.com/
I find a lot of helpfull info at https://web.archive.org/web/20211020202742/https://www.4guysfromrolla.com/
http://www.dotnetkicks.com (dnk)
dnk is a .net focussed community site, a kick being a .net digg is you wish, and in some part may well have inspired some ideas on the admirable stackoverflow.
Some of the blogs above are excellent and I subscribe to many of them, but for what is latest updates, it is hard to beat dnk for it aggregation and collective ranking. You will find all of the above there but also some very interesting one blog wonders as well.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Does anyone know of a decent UML standards guide?
My company currently relies on UML 2.0 (rightly or wrongly) to do the majority (read all) of their design work. I have been asked to come up with a draft 'best practice' guide to help other developers develop better models. The main problem I face is that Im slightly biased against UML... I feel that: if a diagram takes more than 5 mins to draw then its too complicated! Im looking for advice predominantly on what sort of standards I should be looking at. Also Im looking for an external source of information that can be used to balence out my irrational loathing of UML-heavy design and act as a 'sanitizer' for my suggestions.
Most of all Im looking to write a useful document rather than one that will sit moulding away in some obscure network directory.
Any ideas?
UML Distilled by Martin Fowler
Like Paul C, I recommend UML Distilled. It is primarily about UML, but it contains a lot of insight about design in general (although it insists a bit too much on index cards IMO), it is short, pleasant to read, and to the point.
I strongly recommend against UML in a Nutshell. It is the worst O'Reilly book I have: insanely dense, hard to read and meandering. Not worth the paper it is printed on.
We are not talking about a book that says how to use UML, but rather a style or standards guide of some sort. Enter, UML profiles... This can get you both the standardization and reduced complexity you are looking for. You can limit the relationships and elements which can be used. You can also require certain things. A large company may choose to focus on the assets and data movement and limit it's standardized diagrams to this view. However, a company making real-time software for tanks might focus on action or flow.
The whole point of UML is that it is not specific and useful for every kind of situation. Martin Fowler and Elements of style books will not reduce diagramming time and increase comprehension. You need standardized profiles or patterns for than. I have seen it work, to the point that the business can read them. Many tools allow you to create a profile which eases learning curve for the designers and reduces drawing time.
MDA Distilled (OMG Press) is a good book if you want to understand the concepts, but it is not needed.
Really, UML Profiles. You don't want a standard because your company or your need is different. A standard for Web Services does not work for real-time or financial services.
Buy everyone a copy of The Elements of UML 2.0 Style. Job done.
For a quick reference on how to compose individual UML diagrams, I heartily recommend The Elements of UML Style 2.0 and I put my money where my recommendation lies by purchasing the 2nd edition to replace my 1st ed.
Apart from this recommendation, I think the most important thing in a company when introducing any style guide is to have a local feedback mechanism where people can post comments on which aspects of the style guide work for them, especially when you're using an official printed guide. A wiki or similar casual repository should suffice for this.
I also suggest highlighting diagrams which were particularly good examples (or bad ones, if the team humor could take it). Consider a framed Diagram of the Week like the Employee of the Week you see in so many stores. That gives a gentle reminder that diagram readability is taken seriously but hopefully with enough fun to get more buy-in to the concept.
I know you probably want an easy to read book for this but from what you are describing I would suggest going with the specs found on OMG itself. They are a bit much to read but would be as complete as you could hope for. They also have lonks to articles and tutorials that may be helpful.
As far as books go I have found that Using UML is quite good since it tackles the software development process as well as the UML tools and methods.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
If you could go back in time and tell yourself to read a specific book at the beginning of your career as a developer, which book would it be?
I expect this list to be varied and to cover a wide range of things.
To search: Use the search box in the upper-right corner. To search the answers of the current question, use inquestion:this. For example:
inquestion:this "Code Complete"
Code Complete (2nd edition) by Steve McConnell
The Pragmatic Programmer
Structure and Interpretation of Computer Programs
The C Programming Language by Kernighan and Ritchie
Introduction to Algorithms by Cormen, Leiserson, Rivest & Stein
Design Patterns by the Gang of Four
Refactoring: Improving the Design of Existing Code
The Mythical Man Month
The Art of Computer Programming by Donald Knuth
Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman
Gödel, Escher, Bach by Douglas Hofstadter
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
Effective C++
More Effective C++
CODE by Charles Petzold
Programming Pearls by Jon Bentley
Working Effectively with Legacy Code by Michael C. Feathers
Peopleware by Demarco and Lister
Coders at Work by Peter Seibel
Surely You're Joking, Mr. Feynman!
Effective Java 2nd edition
Patterns of Enterprise Application Architecture by Martin Fowler
The Little Schemer
The Seasoned Schemer
Why's (Poignant) Guide to Ruby
The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
The Art of Unix Programming
Test-Driven Development: By Example by Kent Beck
Practices of an Agile Developer
Don't Make Me Think
Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin
Domain Driven Designs by Eric Evans
The Design of Everyday Things by Donald Norman
Modern C++ Design by Andrei Alexandrescu
Best Software Writing I by Joel Spolsky
The Practice of Programming by Kernighan and Pike
Pragmatic Thinking and Learning: Refactor Your Wetware by Andy Hunt
Software Estimation: Demystifying the Black Art by Steve McConnel
The Passionate Programmer (My Job Went To India) by Chad Fowler
Hackers: Heroes of the Computer Revolution
Algorithms + Data Structures = Programs
Writing Solid Code
JavaScript - The Good Parts
Getting Real by 37 Signals
Foundations of Programming by Karl Seguin
Computer Graphics: Principles and Practice in C (2nd Edition)
Thinking in Java by Bruce Eckel
The Elements of Computing Systems
Refactoring to Patterns by Joshua Kerievsky
Modern Operating Systems by Andrew S. Tanenbaum
The Annotated Turing
Things That Make Us Smart by Donald Norman
The Timeless Way of Building by Christopher Alexander
The Deadline: A Novel About Project Management by Tom DeMarco
The C++ Programming Language (3rd edition) by Stroustrup
Patterns of Enterprise Application Architecture
Computer Systems - A Programmer's Perspective
Agile Principles, Patterns, and Practices in C# by Robert C. Martin
Growing Object-Oriented Software, Guided by Tests
Framework Design Guidelines by Brad Abrams
Object Thinking by Dr. David West
Advanced Programming in the UNIX Environment by W. Richard Stevens
Hackers and Painters: Big Ideas from the Computer Age
The Soul of a New Machine by Tracy Kidder
CLR via C# by Jeffrey Richter
The Timeless Way of Building by Christopher Alexander
Design Patterns in C# by Steve Metsker
Alice in Wonderland by Lewis Carol
Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig
About Face - The Essentials of Interaction Design
Here Comes Everybody: The Power of Organizing Without Organizations by Clay Shirky
The Tao of Programming
Computational Beauty of Nature
Writing Solid Code by Steve Maguire
Philip and Alex's Guide to Web Publishing
Object-Oriented Analysis and Design with Applications by Grady Booch
Effective Java by Joshua Bloch
Computability by N. J. Cutland
Masterminds of Programming
The Tao Te Ching
The Productive Programmer
The Art of Deception by Kevin Mitnick
The Career Programmer: Guerilla Tactics for an Imperfect World by Christopher Duncan
Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp
Masters of Doom
Pragmatic Unit Testing in C# with NUnit by Andy Hunt and Dave Thomas with Matt Hargett
How To Solve It by George Polya
The Alchemist by Paulo Coelho
Smalltalk-80: The Language and its Implementation
Writing Secure Code (2nd Edition) by Michael Howard
Introduction to Functional Programming by Philip Wadler and Richard Bird
No Bugs! by David Thielen
Rework by Jason Freid and DHH
JUnit in Action
K&R
#Juan: I know Juan, I know - but there are some things that can only be learned by actually getting down to the task at hand. Speaking in abstract ideals all day simply makes you into an academic. It's in the application of the abstract that we truly grok the reason for their existence. :P
#Keith: Great mention of "The Inmates are Running the Asylum" by Alan Cooper - an eye opener for certain, any developer that has worked with me since I read that book has heard me mention the ideas it espouses. +1
Discrete Mathematics For Computer Scientists http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg
Discrete Mathematics For Computer Scientists by J.K. Truss.
While this doesn't teach you programming, it teaches you fundamental mathematics that every programmer should know. You may remember this stuff from university, but really, doing predicate logic will improve you programming skills, you need to learn Set Theory if you want to program using collections.
There really is a lot of interesting information in here that can get you thinking about problems in different ways. It's handy to have, just to pick up once in a while to learn something new.
Systemantics: How Systems Work and Especially How They Fail. Get it used cheap. But you might not get the humor until you've worked on a few failed projects.
The beauty of the book is the copyright year.
Probably the most profound takeaway "law" presented in the book:
The Fundamental Failure-Mode Theorem (F.F.T.): Complex systems usually operate in failure mode.
The idea being that there are failing parts in any given piece of software that are masked by failures in other parts or by validations in other parts. See a real-world example at the Therac-25 radiation machine, whose software flaws were masked by hardware failsafes. When the hardware failsafes were removed, the software race condition that had gone undetected all those years resulted in the machine killing 3 people.
One of my personal favorites is Hacker's Delight, because it was as much fun to read as it was educational.
I hope the second edition will be released soon!
Concepts, Techniques, and Models of Computer Programming.
alt text http://ecx.images-amazon.com/images/I/51YZ50ZR13L._SL500_AA240_.jpg
Extreme Programming Explained: Embrace Change by Kent Beck. While I don't advocate a hardcore XP-or-the-highway take on software development, I wish I had been introduced to the principles in this book much earlier in my career. Unit testing, refactoring, simplicity, continuous integration, cost/time/quality/scope - these changed the way I looked at development. Before Agile, it was all about the debugger and fear of change requests. After Agile, those demons did not loom as large.
Types and Programming Languages by Benjamin C Pierce for a thorough understanding of the underpinnings of programming languages.
alt text http://ecx.images-amazon.com/images/I/51E0Ojkz8iL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg
Database System Concepts is one of the best books you can read on understanding good database design principles.
The practice of programming. By Brian W. Kernighan, Rob Pike.
The style shown here is excellent - the code just speaks for itself, and the whole book follows the KISS principle. Personally not my languages of choice, but still influential to me.
Programming from the ground up. It's free on the internet. This book taught me AT&T asm. It is very easy to read.
Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Peter Norvig
I started reading it because I wanted to learn Common Lisp. When I was halfway, I realized this was the greatest book about programming I had read so far.
Definitively Software Craftsmanship
alt text http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg
This book explains a lot of things about software engineering, system development. It's also extremly useful to understand the difference between different kind of product developement: web VS shrinkwrap VS IBM framework. What people had in mind when they conceived waterfall model? Read this and all we'll become clear (hopefully)
#Peter Coulton -- you don't read Knuth, you study it.
For me, and my work... Purely Functional Data Structures is great for thinking and developing with functional languages in mind.
"The World is Flat" by Thomas Friedman.
Excellence in programming demands an investment of mental energy and a dedication to continued learning comparable to the professions of medicine or law. It pays a fraction of what those professions pay, much less the wages paid to the mathematically savvy who head into the finance sector. And wages for constructing code are eroding because it's a profession that is relatively easy for the intelligent and self-disciplined in most economies to enter.
Programming has already eroded to the point of paying less than, say, plumbing. Plumbing can't be "offshored." You don't need to pay $2395 to attend the Professional Plumber's Conference every other year for the privilege of receiving an entirely new set of plumbing technologies that will take you a year to learn.
If you live in North America or Europe, are young, and are smart, programming is not a rational career choice. Businesses that involve programming, absolutely. Study business, know enough about programming to refine your BS detector: brilliant. But dedicating the lion's share of your mental energy to the mastery of libraries, data structures, and algorithms? That only makes sense if programming is something more to you than an economic choice.
If you love programming and for that reason intend to make it your career, then it behooves you to develop a cold-eyed understanding of the forces that are, and will continue, to make it a harder and harder profession in which to make a living. "The World is Flat" won't teach you what to name your variables, but it will immerse you for 6 or 8 hours in economic realities that have already arrived. If you can read it, and not get scared, then go out and buy "Code Complete."
This last year I took a number of classes. I read
The Innovator's Dilemma (disruptive tech)
The Mythical Man Month (managing software)
Crossing the Chasm (startup)
Database Management Systems, The COW Book
Programming C#, The OSTRICH Book
Beginning iPhone Developmen, The GRAPEFRUIT Book
Each book was amazing but the Innovator's Dilemma by Clayton Christensen (1997!!!) is really a fantastic book, and it got me really thinking about the modern software world. The challenge addressed is disruptive technology, and how disk drive companies and non-technical companies are always disrupted by new, game changing technology. It gives one a new perspective when thinking about Google, probably the biggest 'web' company. Why do they have their hands in EVERYTHING? It's because they don't want to have their position disrupted by something new. The preview on google is plenty to get the idea. Read it!
hackers, by Steven Levy.
The personality and way of life must come first. Everything else can be learned.
The Practice of Programming
and
How to solve it by computer
alt text http://img.infibeam.com/img/7101e0ee/496b1/05/629/P-M-B-9788131705629.jpg?hei=200&wid=160&op_sharpen=1
The Python language was very influential to me, I wish I would have read these book years ago. The beauty and simplicity of the Python language really affected how I wrote code in other languages.
The New Turing Omnibus http://ecx.images-amazon.com/images/I/51HlYd-%2BRwL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg
Really good book. Has a high-level taste of the most important areas of computer science. Yes, CS != programming, but this is still useful to every programmer.
Object Oriented Analysis and Design with Applications by Brady Booch
The Mythical Man-Month by Fred Brooks
http://en.wikipedia.org/wiki/The_Mythical_Man-Month
I think that "The Art of Unix Programming" is an excellent book, by an excellent hacker/brilliant mind as Eric S. Raymond, who tries to make us understand a few principles of software design (simplicity mainly). This book is a must for every programming who is about to start a project under Unix platform.
While I agree that many of the books above are must-reads (Pragmatic Programmer, Mythical Man-Month, Art of Computer Programming, and SICP come to mind immediately), I'd like to go in a slightly different direction and recommend A Discipline of Programming by Edsger Dijkstra. Even though it's 32 years old, the emphasis on "design for verifiability" is highly relevant (even if "verifiability" means "proof" instead "unit tests").
Code Craft by Pete Goodliffe is a good read!
Code Craft http://ecx.images-amazon.com/images/I/51WZ9AEC3GL._SL500_BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg
Martin Fowler's Refactoring: Improving the Design of Existing Code has already been listed. But I will detail why it has impacted me.
The essence of the whole book is about structuring code so that it is simpler to read and understand by humans. It teaches me strongly that the code that I write is meant for my colleagues and successors to consume and possibly learn something good out of it. It inspires me to consciously program in a manner that leaves people praising my name, and not cursing me to damnation for all eternity.
alt text http://ecx.images-amazon.com/images/I/61dECNkdnTL._SL500_AA240_.jpg
C++ How to Program It is good for beginner.This is excellent book that full complete with 1500 pages.
Here's an excellent book that is not as widely applauded, but is full of deep insight: Agile Software Development: The Cooperative Game, by Alistair Cockburn.
What's so special about it? Well, clearly everyone has heard the term "Agile", and it seems most are believers these days. Whether you believe or not, though, there are some deep principles behind why the Agile movement exists. This book uncovers and articulates these principles in a precise, scientific way. Some of the principles are (btw, these are my words, not Alistair's):
The hardest thing about team software development is getting everyone's brains to have the same understanding. We are building huge, elaborate, complex systems which are invisible in the tangible world. The better you are at getting more peoples' brains to share deeper understanding, the more effective your team will be at software development. This is the underlying reason that pair programming makes sense. Most people dismiss it (and I did too initially), but with this principle in mind I highly recommend that you give it another shot. You wind up with TWO people who deeply understand the subsystem you just built ... there aren't many other ways to get such a deep information transfer so quickly. It is like a Vulcan mind meld.
You don't always need words to communicate deep understanding quickly. And a corollary: too many words, and you exceed the listener/reader's capacity, meaning the understanding transfer you're attempting does not happen. Consider that children learn how to speak language by being "immersed" and "absorbing". Not just language either ... he gives the example of some kids playing with trains on the floor. Along comes another kid who has never even SEEN a train before ... but by watching the other kids, he picks up the gist of the game and plays right along. This happens all the time between humans. This along with the corollary about too many words helps you see how misguided it was in the old "waterfall" days to try to write 700 page detailed requirements specifications.
There is so much more in there too. I'll shut up now, but I HIGHLY recommend this book!
Masters of doom. As far as motivation and love for your profession go: it won't get any better than what's been described in this book, truthfully inspiring story!