views:

1282

answers:

14

Hello everyone,

I'm a software engineer who has followed a non-traditional path into the industry. I got my Ph.D. in a non-compsci field, however it involved a lot of computation and programming. I understand the basics - OOP, inheritance, recursion, pointers, etc. just fine. However, not being from a comp-sci field, I don't know what I'm really missing. Does anyone have any suggestions for areas I should look into? Book titles would be appreciated. I am comfortable enough in C++ and C# that my everyday work is easy, however I'm looking to broaden my horizons from a theoretical perspective. Thanks for any help.

+2  A: 

I cannot think of any specific books at the moment, but my opinion is that you should get books on these subjects to get deeper into computer science.

  • Operating System concepts (some linux/unix book)
  • Algorithms

Also check the list of graduate courses at MIT Course Materials which has reading lists associated to specific course details.

nik
+2  A: 

Well, there are a couple of things here - are you more interested in pure computer science (tree navigation, algorithms, internal data representation etc etc) or in software engineering? Most CS departments have focuses on both areas. If you are asking about software engineering - I would strongly suggest Rapid Development by Steve McConnel.

Shane C. Mason
I'm interested in both. Engineering is my job, but I'm highly interested in learning more about pure computer science also
Steve
+1  A: 
  1. You could work your way through MIT OpenCourseWare's Computer Science curriculum:
    http://web.mit.edu/catalogue/degre.engin.ch6.shtml

This gives you the opportunity to experience the MIT curriculum remotely (insofar as that is possible -- no flames please). Includes some video lectures, homework assignments, text books, etc.

  1. Joel Spolsky has published his recommended list of "must-read" books:
    http://www.joelonsoftware.com/navLinks/fog0000000262.html

Both are highly recommended.

William Leara
+1  A: 

Some video lectures here, also browse here

bobobobo
+3  A: 

Just a quick run-through (from memory) of courses and areas of study I remember from my degree in CS. This should at least get you started to give you search terms for Google. If you've got a PhD (and have been active in software engineering), it should not be too difficult at all for you to pick any of these up.

Data Structures - Good overview of how to thing about solving problems
Compiler Theory - Good if you're going to write a compiler (I guess)
Finite Automata - Ditto for Compiler Theory
Discrete Mathematics - Another good way to think about problem-solving
Database Theory (the low-level, theoretical side of things; depends upon on your current level of involvement, though)
Operating System - Great for low-level awareness (threading, etc.)
Computer Security - Come on; everyone should take this
Computer Networks - Good, broad overview; only if needed
Project Management - Excellent overview if you'll be working on large teams

Michael Todd
Pretty complete. I'd throw in Programming Language Theory, too--especially if you've only used C++/C#, there might be a lot of foreign ideas in other languages.
Zachary Vance
+1  A: 

This may not be exactly what you are looking for, but I would recommend a book on writing good code such as [Beautiful Code][1]. Also, the very abstract book Society Of Mind may be very interesting and provide an alternate way of thinking.

Igman
+1  A: 

ArsDigita university organized a one year intensive course of computer science post-baccalaureate program based on the MIT undergraduate computer science curriculum. All of the lecture course work, videos and exams can be acquired by buying a set of dvds for $60. The courses are really high quality and most of them are taught by MIT faculty. They also have videos of a series of colloquia featuring a good balance of people from academia, the open source world and industry. example: Phil Greenspun(whose brain child the whole program was), Richard Stallman(founder of GNU) and Michael Sipser (computer scientist, author and MIT faculty member). I think the video lectures are of excellent quality and the whole program is very well balanced - the closest some one can come to getting an undergraduate degree in CS from MIT without actually being a student there. I highly recommend it.

The website is here

neesh
thanks, that looks great
Steve
+1  A: 

If you are looking for the theoretical point of view, I can recommend two titles: "A discipline of programming" by Edsger W. Dijkstra and a more elaborate version of it called "The Science of Programming" bij David Gries. These books will not solve your day-to-day programming problems, but they provide a theoretical understanding of the idea of "computation". I am aware that the SO is not too fond of pure theoretical books, but they deserve there place.

Bruno Ranschaert
Thanks Bruno, I'm very interested in the pure theory also
Steve
+1  A: 

The book I'd recommend, but haven't seen mentioned here is Algorithms by Cormen, Leiserson, and Rivest. It is a brilliant book containing more than you can digest in a very long time. It contains mainly theory, quite well presented. Enjoy!

AnnaR
+2  A: 

Here are my suggestions:

Good luck!

Anders Lindahl
+2  A: 

To appreciate computer science do read

Structure and Interpretation of Computer Programs (SICP). This book is available for free.

You dont need to know much of Scheme to read this book. It is a treatise, a classic. For non compsci folks like us, it takes a while to grasp but nevertheless the journey is lot fascinating.

For Algorithms, I suggest "Algorithms in Java/C++" by Robert Sedgewick. I especially liked the second edition where the entire book is in one volume. The 3rd edition, IMO, is too detailed, verbose.

If you want to get into algorithm design, then I recommend Kleinberg and Tardos. They provide detailed explanations.

To know what breadth of problems can be solved by programming, I suggest Programming Collective Intelligence by Toby Segaran. It is a refreshing book for those who have been more into routine enterprise development.

Sathya
Just ordered the Sedgewick book. Thanks!
Steve
+2  A: 

Dexter Kozen wrote some splendid undergraduate courses:

Since you are interested in the theory of programming, I especially recommend Automata and Computability, and Theory of Computation. I was able to get them reasonably inexpensive directly from Springer.

Dexter is a bright mathematician and an experienced author. And it seems he is a kind father too because he manages to tell advanced stuff in simple tales, as one would do to a child :)

volodyako
+1  A: 

One of the best books to read for software management is The Mythical Man Month. The main point: you can't "fix" a failing project by throwing people at it mid way.

Babak Naffas