I have a friend who asked me for a reading list of books. This friend is in a computer related field, but does not have extensive programming background. This could potentially be an issue when applying for jobs, or actually in the job world. In order to help this friend out, I spent some time coming up with a list of books I think should be read by a person in this position. For the purposes of this post I will call my friend Peter.
Peter is a senior in college pursuing a degree in Systems Engineering and Finance. Both of these factors came in to play when I started looking at the books I would recommend. Peter is very smart, but is not overly interested in programming. Not a passion, but maybe a necessity of the work world in which Peter is about to enter. The list below is designed to give Peter the necessary skills to be more effective on the job without forcing all the craziness of computer programming. This is NOT a list of the books I would recommend for a computer engineer or programmer. Peter knows some Java, but that is about it for actual programming.
To get it out of the way this is the list, in order, of topics I think Peter should cover, I will explain my reasoning below:
- HTML and CSS
- Object Oriented Design (Design Patters)
HTML and CSS
I like HTML and CSS as a first choice for several reasons:
- Its simple and easy to use– Its a markup language not a full out programming language. That being said, there are still aspects of programming that can be applied to HTML and CSS.
- The Web is Everywhere– As the web matures it reach expands. More and more people are using the web every year. Even if you are not writing a product that directly uses the web, there is a good chance that your company will have a web presence. Also, most help documentation is written in HTML, yet another place that HTML and CSS can be useful
- Tools for development exist on almost every computer– All you need to learn HTML and CSS is a web browser and a text editor (and some disk space). You can find these tools on any computer for free. If you want to get serious about web design, you can end up buying better tools, but the basic tools are free.
- You See Results Fast– I feel a big problem with computer science education is the concern with getting everything “right”. This often prevents people from writing a lot of code. I know I have gone through this problem. HTML allows you to write code and get it out there quickly. Also, most browsers are VERY forgiving and will even display the right thing if you put in the wrong code. This is both a positive in a negative in terms of learning, but at least you will see results.
Given these reasons I chose HTML and CSS as the first topic. I could recommend a ton of books for this topic, but in order to keep Peter from giving up on this topic, I would recommend starting with one, getting through the rest of the topics listed above and then going back and looking at some other HTML books if that is a topic that really catches his interest. So here is my list:
- Head First HTML with CSS– I have actually never read this book, but I have looked at several other books in the series. I think that the publisher does a good job of putting together a book that will teach topics easily and rapidly. Also the reviews are very positive.
- Designing With Web Standards– This is a good second read. This book covers the basics of HTML and CSS and mostly explains why you would want to use them to build a website. I read the first revision of this book, and it was GREAT.
- Bulletproof Web Design– this book is a collection tricks for designing websites. It is a quick read, and a reliable resource. This is not a complete reference, but it get you thinking correctly about designing sites.
Python is a really great language. One of the language’s design goals was to create a easily readable, and therefore maintainable programming language, that was easy to learn. Despite the easy of use of Python it is still a very powerful and flexible language to learn. To elaborate here are the reasons I recommend Python for Peter:
- Clean Syntax– while there are some oddities in Python for the most part the syntax is incredibly clean. When looking at the code, you can most normally see what it is doing. This makes it great for a beginner language.
- Dynamic Data Typing– In some languages you have to be very careful to fully declare your variables with the correct types. Python uses on the fly declarations, and uses coercion to try and change variables to the correct type when being used in an expression. What does this mean? Less confusion of the programmer or reader of code.
- High Availability– Python is approaching version 3.0. It is available for many operating systems. It is also freely distributed source so you can probably compile it for many environments even if it is not natively supported.
- Good Documentation– There are online resources for learning the language. One of the books that I recommend below is available for free online. There is also a strong developer community.
- Its Extensible– You can use Python to do almost anything. It has libraries and extension for databases, web programming, robotics and more. Once you learn the language, you can apply it in many different areas. This could make it great for quick prototyping, which might be closest to what Peter would be doing with his programming.
- MIT is using it– Okay, so this is a lame excuse, but MIT has switched their intro CS course from Scheme(Lisp language) to python. While it is not good practice to take the lemming effect and just jump off the cliff because everyone else is, the professors at MIT know what their doing, so following them isn’t as bad as jumping blindly off a cliff.
I’m sure I’ve left out some really good reasons, but I believe I’ve covered the basics. Here is my list of reading for Python. Again, I would pick either of the first two to start with and then move on the next section. If you really want to get a firmer grip you can come back and read more later.
- Dive Into Python– This is a great book that shows you how to program Python by example. It is quick to get you up and running and if you already know one programming language, its a GREAT place to start. Also, big kicker, its available for free at the Dive Into Python Website.
- Core Python Programming– This is another great python book that was recommended to me by a friend. It is actually a very thick reference, but I made it pretty deep into the book starting from the first page.
Object Oriented Design Patterns
Regardless of whether it is the right path to take (which I believe it is), object oriented programming is dominating the world. Inheritance can reduce the amount of code written, which in turn can boost maintainability of larger projects. Not all languages allow you to use objects directly. C, for example, does not directly support objects, but the design principles learned from Object Oriented Design(OOD) can still be applied to C programs. If you need more convincing on OOD or information about it, I suggest reading the Wikipedia Article on OOD.
As for learning OOD, I can really not put my finger on a singular book that i have read that has taught me a significant amount about OOD, most of what I have learned I have picked up from reading and writing code. Still there is one canonical book and one book that I’m looking forward to reading as soon as I get a chance, and I’ve listed them below.
- Head First Design Patterns– I have not read this book, but it looks promising and am hoping to pick it when I find the time to read it. It looks like it will give a good introduction to design patterns, and if it is like their other books in the series, it should be very readable.
- Design Patterns– this is the canonical book on design patterns. I would recommend it as a reference. Many programmers will use the terms defined in this book, and if you have it as reference to look up their concerns it is worth. That being said, I don’t think that it is a good straight read, and would recommend the Head First book as a better starting place if you haven’t heard of design patterns before.
- AJAX in Action– I have yet to read this book, though it is sitting on my bookcase. I have a close friend though who highly recommends it, so I’ll include it here.
This list is far from complete. Computer technology is constantly changing. Anyone serious about the field needs to apply constant effort to read and keep up to date on important technologies. This list is a good starting place. Please post any additional suggestions to the comments.