Forgot your password?
typodupeerror
User Journal

Journal: What to learn next?

Journal by minotaurcomputing

In the life of a disenchanted programmer, the question innevitably arises: but what should I learn next? The question can be answered simply enough by asking (and then answering) a second question:

What does company X do?

By company X I of course mean that company, that in a perfect world, you would work for. Company X is your dream company. Thinking in these terms provides a measuring stick for what you should learn next. Imagine your dream company and what they are looking for in an employee and learn those topics. If you happen to know those things already, then you could probably stand to strengthen them. But what if you already work for your dream company? Well, then think of what that great FOSS or comercial project requires and study for that.

-m

Originally posted at http://www.modus-ponens.com/

User Journal

Journal: How to be a computer scientist - pt. 1

Journal by minotaurcomputing
How to be a Computer Scientist: Part 1 - Starting a Library (roots)

Basics
Code Petzold gets a bad rap from the hardcore programmers because of his affinity for writing Windows-centered books. However, with Code, he has created a beautiful piece of work for the computer scientist N3wb33 (and for the guru too). It starts from the ground up and gives a nice overview of Computer Science-ness. This may be a great book to read if you are wavering on starting C.S. studies; it may push you one way or another, but in any case it is extremely informative. Be warned, that there is a lot to be covered, and the topics in the books tend to be spread extremely thin, therefore be prepared to use the last entry in this category extensively as a supplement to Code.

C There are many that believe that C is the wrong language to learn when starting as a computer scientist because it tends to be far too low-level. There is something to be said for that (see the next book below for an alternative to this approach). I started with BASIC myself, and because of it I developed many bad habits that I was only able to shake after many years of intensive programming. In addition, because of the nature of BASIC, I was abstracted from the workings of the computer itself. Therefore, I am of the school of thought that says one should start with a language that abstracts the machine a bit, but also allows you to dig as deeply as you wish to explore it completely. C is this language. Experimentation is important. Causing memory protection faults is important. Bit-manipulation is important. Pointers are important. It's all part of a solid foundation. Kernighan and Dennis Ritchie invented the C language, and their views on the matter should be the starting point. There book is quite terse, but it provides everything necessary to start with C -- besides, the best way to learn a language is to write programs in it.

Structure and Interpretation of Computer Programs Of course, starting with C causes beginners (and gurus at times) to get caught up in the minutiae of programming. That is, basic C does very little for you. By that, I am referring to the fact that if one were to implement any system in C, he/she would have to develop every aspect of the said system. Every required data structure, every required algorithm, and basic memory juggling tasks must be handled by the programmer. Very little, if anything is given to you with C. Therefore, it may be a good idea to start your C.S. training with a language, namely Scheme, that provides a much higher level of abstraction, handles all memory manipulation tasks, provides powerful data structures 'right out of the box', and is extremely powerful for any programming task. The Structure and Interpretation of Computer Programs book provides a great grounding in essential development knowledge, which will help you to avoid many bad habits from the start.

Algorithms It is absolutely critical that one gain an understanding about how algorithms are constructed, and what makes them great (or horrible as the case may be). Any study of algorithms should be language independent, as the underlying ideas are truly the important matters. In addition, any study of algorithms should be rooted heavily in mathematics, including: Combinatrics, Big O, probability, NP-completeness, and indirect/direct proofs.

Programming Pearls The quintessential problems book. Expert chess masters spend countless hours every day solving chess problems. That is, they study countless volumes of chess positions and devise the most creative and/or theoretically sound solutions for each. In order to be a computer scientist, one must think like a computer scientist; one must solve computer science problems. Programming Pearls is a great book packed with problems, insights, and solutions for many basic (and many not-so-basic) C.S. topics.

Wikipedia While reading any of the books mentioned in my series, there will often be a need to explore topics further. The fantastic web resource Wikipedia will provide the answers, if not pointers to, almost any topic that may need more attention. Use it.... Often.

Motivational
The Soul of a New Machine Details the project to design and create an early 32-bit mini-computer. It's an interesting thing to read about the geniuses that forged the very field that you may be interested in pursuing.

Fire in the Valley A collection of anecdotes and case studies about the advent of the PC and the rise of Silicon Valley as a force in the industry. If the names Bill Gates, Paul Allen, Steve Balmer, Steve Jobs, Steve Wozniak, John Draper, Lee Felsenstein, Adam Osborne, The Homebrew Computer Club, Altair, Apple, and Microsoft sound familiar, then this may be the book for you.

Hackers Hackers are not the devious criminals depicted in the movies; they are instead the pioneers of the computer industry. Without hackers, we would be reading our emails on an abacus. Much like Fire in the Valley, Hackers details the emergence and influence of a rejected subculture that turned out to change the world.

Cuckoo's Egg As a child I ran a BBS (Wikipedia to the rescue). After reading The Cuckoo's Egg I seriously wanted a cracker to attempt to break into my system so that I could track him and thwart his attempts like the protagonist in the book. Of course, not having a 2nd phone line restricted my BBS to uptime hours between 11pm and 4am, thus seriously limiting cracker-busting potential. It's was still a great book.

Masters of Doom I discovered this book recently and I feel strongly enough to include it in this list. It details the rise if Id Software, the makers of Doom. The greatest tales are easily those concerning the single-mindedness of the driven programmer (in this case, John Romero and John Carmack), although the stories of interoffice backstabbing are quite good as well. Very few books have motivated me to code intensively like this one.

Insanely Great The story of the Apple Macintosh. Anyone living in the western hemisphere knows of the zealotry that Apple Computers invokes. This book nicely details just why that is. Steve and Steve are gods. Nuff said.

Religion
The Art of Unix Programming An icon in the C.S. field talks about an icon in computer operating systems. By my count that makes two icons in one book, thus making a great book.

Code Complete A thorough examination on what makes good or bad code. For a computer scientist, the notions of code formatting and documentation are the ingredients for long and hard-fought battles. This book is perhaps the most comprehensive source on such topics.

The Mythical Man-Month The general consensus is that in order to catch up on a project that has fallen behind schedule is to throw more money and bodies at the problem. As it turns out, this approach not only does nothing to tackle a slipping schedule, but it actually serves to make matters worse. This and similarly themed topics are contained within.

Design Patterns Perhaps the most influential work on development in the past 10-20 years. Design Patterns details some of the most common patterns that arise over and again in development projects both large and small. Write a bunch of programs first, then read this book. You will find yourself saying to yourself, "wow, I remember that."

Advanced Topics
AI This is the essential reference on modern AI topics. Its encyclopedic nature will astound you. Everything to be found, can be found in this tome.

Graphics If you can happen to find a copy of this massive text under $150USD, then by all means grab it, read it, sleep with it, and worship it. There is no more comprehensive book on the art of graphics programming and optimization. Good luck finding it however.

Compilers Every programmer who has ever written a compiler has read this book before hand. This is the one and only text worth mentioning in the esoteric field of compiler/interpreter development. Written over 20 years ago, it still stand as the prime resource.

Operating Systems Tanenbaum is know unfortunately as the guy who wrote Minix and got waxed by Linux Torvalds in some historical debates on operating system development. These facts should not be held against the man. For any student wishing to learn how the internals of modern operating systems operate, this book is the place to start. While low on code, the book is quite heavy on the theories standing at the heart of every operating system in use today.

To be continued...

-m

Overdrawn? But I still have checks left!

Working...