Content tagged Books

Since Last Time

posted on 2009-10-19 23:04:56

Well, it seems a lot has happened since last time. An additional lisp library for concurrency called Calispel has been released and is up on Cliki. Unfortunately, it depends on cl-jpl-utils which in turn depends on cl-rsm-queue, neither of which are on Cliki. Such is life. There are good things though, a release candidate for CCL 1.4 has been put out. I've also started a branch porting Paktahn to Embedded Common Lisp. It didn't wind up being as tricky as I thought. Hopefully, I'll have something I can merge to master in a week or two. Of course, I wouldn't have gotten anywhere without Leslie. Geez, that guy is patient. Anyway, what about non-lisp news? The ACM Reflections conference is over and hopefully videos will be posted soon. Additionally, there's been some discussion about whether or not it's time for Factor 1.0. There's still really great work being done on the language implementation. I would like a proper book for it and binaries to be available in my linux distro but I can wait.

There's also been a good discussion on what math programmers need to know on reddit recently. The outstanding comments (IMO) are here, here, here and here. Similarly, there was a good thread a few weeks back titled "What do you wish you knew when you started programming?".  A few of my favorite comments are here, here, here and here. More importantly, there was a very enjoyable article and followup about Office Politics as interpreted by Hugh MacLeod and The Office. As some folks in the hackernews thread mention, the model isn't universally applicable. Yep, that's right. It's a model. Go figure.

Well, it's been a very hard week. Mostly because I just hate my Algorithms class. I don't hate algortihms just the way it's being presented and taught. I'm pretty sure I can overcome the obstacles involved, I'm just much less motivated to do so than I would like. The last two semesters I really had a fire under my butt about school for some reason. Maybe not but when I had to rise to the challenge, it was relatively easy to do so and I was kind of proud of that since it was a divergence from my past. This semester the fight just isn't in me and I have next to no pride in what I'm doing in school. I'm sort of coasting and I'm finding it hard to break out of that. Of course, I'm learning the material and I'm doing extracurricular things to improve my knowledge, joy and understanding because I care about programming. Whether that's stupid or not is another question but also kind of irrelevant, I didn't choose to be fascinated by this stuff. I just can't help it. So I'm not doing what I love, I'm doing what I can't help but do. It's gonna be a long road.

I've still been getting a few things done. I've written a few quick hackish, sbcl-dependent scripts. Maybe I'll post some of the code for them soon. I started working on Redlinux again. The last release I made was back in May and a lot has changed since then, more about my approach than about Redlinux. I'm hoping to make a new release by the end of November. So far the big change is my build process. As in, now there actually is one. It should be trivial to rebuild from scratch in the future. See what a non-distribution it is? The upcoming release should have a nice proper script for creating a new user and doing a little initial setup. Above and beyond that, I'm hoping to work on the documentation some. If anything, the real problem is it may not fit on a single CD with all the programming software I've bundled in.

A while back I wrote a post on getting an undergraduate CS education for under $1,000. It was mostly focused on which books and resources were ideal for self-study. I reworked said list and posted it on Amazon over the weekend. A lot of my decisions about what's worthwhile for self-study has changed (since I've actually read more). My motivation stems largely from the fact that I prefer self-study to school. Finally, there are two slightly older articles of mine that linked to a bunch of really interesting articles that are still among my favorite blog posts I've stumbled upon since trolling the internet for programming stuff. I'm hoping to do a real writeup on a number of these articles and add in a few of my own ideas in the near future. And since I'm calling it "the near future" you know advance I'll never get around to it. Well, hopefully not. :)

That's all for now. Back to homework guys.

A Computer Science Undergraduate Education for Under $1,000

posted on 2008-06-09 18:52:59

In the style of my former post on a Math Undergraduate Education, this post proposes a list of texts suitable for a rigorous and well-rounded foundation in Undergraduate Computer Science. A future post will cover the philosophical details and practical implementation of such an approach.

This list skews towards theory rather than practicality (or Computer Science as opposed to Programming, if you prefer) but tries to maintain a suitable balance. Consequently, outside study of particular languages (e.g. ruby, php, html, css, javascript, erlang or haskell, python or lua) is assumed. It is advised to work on practical projects (setting up source code repositories and servers, open source software contribution, web development, etc) as applicable since these subjects are covered at best loosely during the course of study.

This list of 24 texts costs about 900 dollars when bought used off of Amazon.com. Click on the book's title to get forwarded to it's Amazon.com page. The ordering of the list loosely conforms to increasing difficulty but it is not a recommendation as to structure. I will probably delve into those details in the aforementioned future post.

How To Design Programs by Matthias Felleisen, Matthew Flatt, Robert Findler and Shriram Krishnamurthi
Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Sussman
Paradigms of Artificial Intelligence Programming by Peter Norvig
Algorithms by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani
Introduction to Algorithms by Thomas Cormen, Charles Leiserson, Ronald Rivest and Clifford Stein
Computer Networks by Andrew Tanenbaum
Programming Language Pragmatics by Michael Scott
Computer Organization and Design by David Patterson and John Hennessy
Introduction to Computing Systems by Yale Patt and Sanjay Patel
Operating System Concepts by Abraham Silberschatz, Greg Gagne and Peter Galvin
Operating Systems: Design and Implementation by Andrew Tanenbaum and Albert Woodhull
The Humane Interface by Jef Raskin
Code Complete by Steve McConnell
Real-Time Rendering by Tomas M'Oller
Artificial Intelligence by Stuart Russell and Peter Norvig
Introduction to the Theory of Computation by Michael Sipser
Modern Cryptography: Theory and Practice by Wenbo Mao
Hacker's Delight by Henry Warren
Purely Functional Data Structures by Chris Okasaki
Compilers: Principles, Techniques, and Tools by Alfred Aho, Monica Lam, Ravi Sethi and Jeffrey Ullman
Lisp In Small Pieces by Christian Queinnec
Programming Languages: Application and Interpretation by Sriram Krishnamurthi
Types and Programming Languages by Benjamin Pierce
Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi

There are a few caveats to this list that should be noted.

1) As mentioned it does not presume to teach language-specific or platform-specific knowledge. It is slanted towards theory and books on how to write C or HTML, do Linux Kernel Development or learn the Win32 API, or work with OpenGL or TCP/IP should be purchased separately.

2) Since it does not deal heavily with specific languages, it does not make any prescriptions about what languages one should know. Generally, I believe it's good to know a language which epitomizes each of the major programming paradigms whether these paradigms are valid or not (as Krishnamurthi posits in PLAI). This means at least one OO language, one stack-based language, one functional language, and one logic/constraint language. I'd recommend Smalltalk for Object Orientation, Forth for a stack language, Erlang or Haskell for a functional language, and Prolog for a constraint language. Beyond that it would probably be reasonable to learn C as a good representation of the von Neumann architecture and "for culture" and hypothetically python, perl, or ruby to learn a web/glue/scripting language.

3) The list could certainly be shorter. It leans towards functional programming, lisp, and programming languages due to my own personal interests and some material could be omitted from those areas correspondingly. Notably, Distributed Systems and Databases are conspicuous absences from my list. This is because I have yet to find any sort of consensus about quality books on either subject. I'm not interested in Databases but I'm certainly interested in Distributed Systems. Computer Networks is about as close as this list gets.

The beauty of this list, if there is one, is that the basis is strong enough that one could jump off in any direction after it's completion. If you were interested in video games get more books on rendering and physics, if you're interested in cryptography and security get more books on that, etc, but the foundation should be strong enough for any direction you'd like to go in. This list may get updated in the future. It's far from perfect but it does seem to me like a pretty reasonable place to start.

A Math Undergraduate Education for Under $1,000

posted on 2008-06-09 15:21:48

In the next few days, I'm hoping to write an article about education that serves as a follow up to Towards a new HR and Secondhand Standards. It will explain a bit more about the feasibility and philosophy behind this post.

All this post is meant to do is propose a list of texts that are rigorous and provide a well-rounded foundation in Undergraduate Mathematics. Be forewarned that it leans more towards Algebraists than Topologists. Lest anyone think I'm a total quack I plan to eventually work through all of these myself and have been researching which math texts are good on and off for a few months now. Autodidacticism (to my thinking) doesn't work without good books. I also have a list for an Undergraduate Computer Science education but I'm not quite done with it.

There are 20 texts and their total cost is about 700 dollars when they're bought used off Amazon. This also covers most all of what you would learn in High School Mathematics. Click on the book's title to get forwarded to it's Amazon.com page. The ordering of the list loosely conforms to increasing difficulty but it is not a recommendation as to structure. I'll probably go into such details at a later date.

What is Mathematics? by Richard Courant and Herbert Robbins
How to Solve It by G. Polya
How to Prove It by Daniel Velleman
Algebra by I.M. Gelfand and Alexander Shen
Functions and Graphs by I.M. Gelfand, E.G. Glagoleva and E.E. Shnol
The Method of Coordinates by I.M. Gelfand, E.G. Glagoleva and A.A. Kirilov
Trigonometry by I.M. Gelfand and Mark Saul
Calculus by Michael Spivak
Discrete Mathematics and it's Applications by Kenneth Rosen
Introduction to Probability by Dimitri Bertsekas and John Tsitsiklis
Introduction to Linear Algebra by Serge Lang
Linear Algebra by Serge Lang
A Mathematical Introduction to Logic by Herbert Enderton
A Classical Introduction to Modern Number Theory by Kenneth Ireland and Michael Rosen
Topology by James Munkres
Topics In Algebra by I.N. Herstein
Algebra by Michael Artin
Ordinary Differential Equations by Morris Tenenbaum and Henry Pollard
Principles of Mathematical Analysis by Walter Rudin
Concrete Mathematics by Ronald Graham, Donald Knuth and Oren Patashnik

Upside Down

posted on 2008-03-17 18:09:16

I'll try to actually write something useful in here (be it technology ruminations, code, or an essay) soon. For now, I'm too busy working, having fun, and sharing content with you all.

Today, I'm posting an excerpt from Eduardo Galeano's Upside Down. It's the first thing of Galeano's that I read (on recommendation from a friend) and I still think it's probably my favorite thing of his I've read. This excerpt is called Language and it's the first in a set of 3, taken from page 37.

"Companies are called multinationals because they operate in many countries at once, but they belong to the few countries that monopolize wealth; political, military, and cultural power; scientific knowledge; and advanced technology. The ten biggest multinationals today earn more than a hundred countries put together do.
"Developing countries" is the name that experts use to designate countries trampled by someone else's development. According to the United Nations, developing countries send developed countries ten times as much money through unequal trade and financial relations as they receive through foreign aid.
In international relations, "foreign aid" is what they call the little tax that vice pays to virtue. Foreign aid is generally distributed in ways that confirm injustice, rarely in ways that counter it. In 1995, black Africa suffered 75 percent of the world's AIDS cases but received 3 percent of the funds spent by international organization on AIDS prevention."

Well, what do you think?

XMas List

posted on 2007-11-21 19:03:20

Just for the heck of it, you know?

Hardware
It'd be pretty swell if I could get a BenQ FP222WH Flatscreen Monitor. It takes HDMI input so I wouldn't need a TV in my first apartment!
Zareason is producing some Ubuntu keyboards and I need a USB keyboard to hack on my PS3 so that would come in handy.

Content
Considering that I'm leaving school for a bit this list will mostly be books to study next semester but really anything off my Amazon wishlist will do bookwise.
The following 12 books would be my 12 books of Xmas. They're of particular importance to me. And I say buy used.

Algebra by I.M. Gelfand (Author), Alexander Shen (Author)
Functions and Graphs (Dover Books on Mathematics) by I. M. Gelfand (Author), et al.
The Method of Coordinates by I.M. Gelfand (Author), et al.
Introduction to Linear Algebra, Third Edition by Gilbert Strang (Author)
Discrete Mathematics and Its Applications by Kenneth H. Rosen (Author)
Concrete Mathematics: A Foundation for Computer Science (2nd Edition) by Ronald L. Graham (Author), et al.
Calculus by Michael Spivak (Author)
Structure and Interpretation of Computer Programs - 2nd Edition by Harold Abelson (Author), Gerald Jay Sussman (Author)
How to Design Programs: An Introduction to Programming and Computing by Matthias Felleisen (Author), et al.
Programming Erlang: Software for a Concurrent World by Joe Armstrong (Author)
Introduction to Algorithms by Thomas H. Cormen (Author), et al.
Watchmen (Absolute Edition) by Alan Moore (Author), Dave Gibbons (Illustrator)

Finally, you gotta have some useless stuff:
Like video games. Uncharted on the PS3 and Okami or Shadow of the Colussus or Rogue Galaxy on the PS2.
And wall art. I guess I should have something on at least one wall in the apartment next semester right?
Cool wall art includes disassembly maps of famous old games like Super Mario Bros and Pac-Man. Or some of the cool internet maps from the XKCD store.

Yeah. That's about all I can think of. Be careful though. Give me all that stuff and some rice and you might not hear from me for another few months. Now then, what do you guys want for Christmas (or insert holiday here)?

Meandering Towards Monday

posted on 2007-09-23 21:32:12

It's been a nice, leisurely weekend thus far. I've been meaning to post more and to post some things that are a bit less technical but I've been bad about making the time of late. This is a smattering of things that have been backed up in my head.

I realized recently that there's a Milosz poem I never threw up here that I really wished I had. It's titled Diary of a Naturalist and taken out of his work From The Rising of The Sun.

My generation was lost. Cities too. And nations.
But all this a little later. Meanwhile, in the window, a swallow
Performs its rite of the second. That boy, does he already suspect
That beauty is always elsewhere and always delusive?
Now he sees his homeland. At the time of the second mowing.
Roads winding uphill and down. Pine groves. Lakes.
An overcast sky with one slanting ray.
And everywhere men with scythes, in shirts of unbleached linen
And the dark-blue trousers that were common in the province.
He sees what I see even now. Oh but he was clever,
Attentive, as if things were instantly changed by memory.
Riding in a cart, he looked back to retain as much as possible.
Which means he knew what was needed for some ultimate moment
When he would compose from fragments a world perfect at last.

Isn't that nice? Here's one I wrote that just sort of flew out this afternoon:
The world is not chaos or justice,
Mere good and bad happening all round.
Swept under the rug in our wake,
Dust returning to dust, in clumps at that.
We do not like to go quietly, or alone.
But what of the unquantifiable interim?
Ah, qualified not quantified: Rich, peerless,
Are there stories greater than our own?
Certainly not with more twists, turns, surprises.
Still, here I am, trying to understand how:
I have become trapped like a fly in amber.
Like those who have come before me, now
Teachers, who sought after explications for the
Milieu of an era, the abstract of an age.

I'm not sure what I think but I may be warming up to it. Now that that's out of the way.

Top 5 Books I couldn't live without:
Unattainable Earth by Czeslaw Milosz
Hackers & Painters by Paul Graham
Orthodoxy by G.K. Chesterton
The Success of Open Source by Steven Weber
The Future of Ideas by Lawrence Lessig

Honorable Mentions:
Selected Essays by Jerzy Kosinski
The Blue Octavo Notebooks by Franz Kafka
The Trial by Frans Kafka
Tender is the Night OR The Great Gatsby by F. Scott Fitzgerald
The Unbearable Lightness of Being by Milan Kundera

Of late, I've also really been enjoying reading Founders at Work by Jessica Livingston. If you're considering ever starting your own company or if you'd just be edified by reading about people succeeding outside the system/convention and innovating I'd highly recommend picking it up. There's also a book called Coders at Work in progress at the same publisher by a different author. That book is composed of interviews with some of the world's premiere programmers and it may find it's way onto the can't live without list. At least, I expect it will.

As my last point today, I'd like to congratulate Electronic Arts. They have successfully made the first good skateboarding video game in years. This is a huge thing for me because I love skateboarding games because I'm a big skate nerd and it's taken way too long for someone to best Tony Hawk's Pro Skater 2. Honestly, what happened to you Neversoft? Anyway, I highly endorse EA Blackbox's new game skate. It's amazz-z-zing. I might need to end up getting one more game console after all. Alright, more later folks.

Summer Reading Update

posted on 2007-07-27 16:57:13

Summer Reading List:

Worldchanging by Alex Steffen
The Wealth of Networks by Yochai Benkler
Infotopia by Cass Sunstein
Code by Lawrence Lessig
The C Programming Language by Kernighan and Pike (Amazon lies. I have the first edition!!!)
Introduction to Computing Systems by Patt and Patel
Sync by Steven Strogatz
Collected Fictions by Jorge Luis Borges
Godel, Escher, and Bach by Douglas Hofstader (Amazon lies again. First edition! [even though it's not as cool as 1st ed. k&p])
Programming the Universe by Seth Lloyd
The Future of Ideas by Lawrence Lessig
The Singularity is Near by Ray Kurzweil
Rebel Code by Glen Moody

Read:
Just for Fun by Linus Torvalds and David Diamond
Cradle to Cradle by Braungart and McDonough
Hackers and Painters by Paul Graham
The Mutt by Rodney Mullen
Identity by Milan Kundera
Emergence by Steven Johnson

Stuff Partially Read This Summer:
The Future Of Ideas
Infotopia
Programming the Universe
Rebel Code
Collected Fictions
Introduction to Computing Systems

Stuff Partially Read Prior To Summer:
Sync
Code
Godel, Escher, and Bach
The C Programming Language
The Singularity Is Near
The Wealth of Networks

I’m Back.

posted on 2007-07-22 00:01:00

I'm back. The beach trip had it's ups and downs but I'm glad to be back and there's plenty that I missed in the computing world that I'm catching up on. I did get a few books read while I was there though and met a skateboarder and a guitarist that were fun to hang out with. I hadn't skated like that in a while. The books read: Emergence by Steven Johnson, The Mutt by Rodney Mullen, Identity by Milan Kundera, and snippets of Jerzy Kosinski's Passing By, Cass Sunstein's Infotopia and Seth Lloyd's Programming the Universe. Yep yep. More soon to come.

Edit at 5:10 PM: I also just acquired the upcoming Aesop Rock album "None Shall Pass". How long have I been home? Two hours. When did this leak? Two days ago. When is it coming out? August. Nice.

Languages

posted on 2007-06-08 21:06:00

On Tuesday I was quite relieved to be off work. It had been a stressful day at the office but I had exciting dinner plans with friends (trivia night at Benchwarmers with Justin and Bria, for the curious). I had finished Cradle to Cradle by McDonough and Braungart the day before and needed to start on my next summer reading book. Nothing on my list really suited though. Most of the books are rather academic and while I find social production fascinating academic writing wasn't really something I was ready for. With that in mind I stopped in two bookstores while I was running afternoon errands and walked away with a copy of Paul Graham's Hackers and Painters. I'm about 50 pages in at the moment and have really enjoyed reading it for the past few days. I'm sure some bits will make it into my next quotables. However, it has raised a number of questions\issues\thoughts in my mind for which I consulted the collective intelligence of "teh interwebs\tubes" this morning and stumbled upon someone who had made both a parody of Paul Graham and what is (in my mind) a more serious\grounded critique. Perhaps the most nerd-controversial thing Graham talks about is programming languages. There are few things more hotly contested in the programming world. In the critique of Graham though, what I found most interesting were the analogies drawn to other internet authors like Eric Raymond. I finally stumbled on this quote on a different site: "Every 5 minutes you spend writing code in a new language is more useful than 5 hours reading blog posts about how great the language is."

And it was at about that moment that I realized that (formal and\or programming) languages are completely incidental. Graham notes early in the book that Computer Science has a real mix of participants. The computer science building at a university might contain honest-to-goodness mathematicians who get their work filed as computer science for funding purposes, a middle ground of those studying computers without making things with them, and programmers trying to make software. For the programmer, language is incidental. The language is only a tool towards creating software...and arguing about programming languages is in some way similar to the creation-evolution debate in suburban America. If you're a scientist it's possible that such a debate matters. It can affect how you approach your work and\or your starting assumptions. Similarly, if you're a computer scientist at a university it affects your research. If you're a programmer though, or a suburban American, than any group can be right. It's effectively incidental to your daily life. If you live in suburban America and are neither a pastor nor a scientist than it matters not whether God created the universe or whether it began out of nothingness one day and it matters not whether it took ages or attoseconds. You will still get out of bed, dress, tend to whatever dependents you have (dogs, children, spouses, etc) and go to work. That is what you will do three hundred and fifty days a year, regardless. Similarly, the programmer can be using the world's best language or it's worst but they will still roll out of bed and try to produce software with it. The only point at which language can conceivably matter to the programmer is if it can ease software development and this is a very personal, very individual thing. The same might be said of SCMs (souce control management systems).

The extent to which people fanatically advocate languages, architectures, etc. beautifully exhibits how intrinsically subject to network effects technology and specifically information technology (that is, computers) are. It's not an issue of simple memetics. Why do mac users advocate mac? Why do linux users advocate linux? Why do python users advocate python or perl users perl? Why do nvidia owners advocate nvidia or amd users amd? Why do PS3 owners advocate PS3 or Wii owners Wii? Simply because the ability to manipulate all that information that you use computers to manipulate in your life (and there is lots of it) whenever you want and wherever you want is good. The information becomes more useful as its accessibility increases. You would never bother typing journal entries into a computer if they couldn't be posted to the internet. There would just be no damn point. You'd keep a journal. At some point Graham tries to draw a distinction between the popularity contest of high school which he argues as being pretty arbitrary and the popularity contest of the real world which supposedly is less so. Here's a thought: Neither of them are arbitrary and both of them are examples of human beings making decisions based on incentives, not that economics has any concrete idea how to explain any of this human behavior beyond such a simple premise. Clearly though the implications are profound. If there is a less mainstream technology which has become an integral part of life for an individual they will fervently advocate the technology so that others adopt it in an effort to keep the engineers hired to maintain and\or improve the technology around as long as necessary. The support industry itself advocates the technology in an effort to maintain their jobs.

Everybody hopes to know or be involved in the next big thing because it's tied to their employability. If you're looking for work, you'll try to learn Java before Algol. This may be dumb because Algol would certainly distinguish you more from the mobbish competition. Moreover, whatever companies do need Algol coders would have little in the way of alternatives and probably have to pay decently. You'd have a bit more bargaining power potentially. Of course, so would they. Take the job or be unemployed. Really though, the whole thing is just ridiculous. The fact that all we want computers for is to do useful and interesting things complicates the issue as does the fact that the differences in languages cause differences in the ease of solving certain programming problems and also perform differently where speed is concerned. And I'm convinced that just ordaining a standard language, platform, architecture, etc would result in a net productivity\innovation loss. Besides, the majority of programmers get employed in spite of all this and many innovations make it to prominence. I still don't buy the quote from Almost Famous about pop music being good because so many people like it but there's something much more complex at work here that I just feel like is slipping off the tip of my tongue and hiding in the back of my head. I guess it sort of reminds me of what McDonough said about nature having good waste (which in some sense means no waste). The extra blossoms produced by a cherry tree litter the ground but in a good sense. It's all so that one new cherry tree will emerge but it manages to fertilize the "littered" area anyway. Almost like it's all about making goods with positive network effects. And certainly languages like ripping off each others features. As do markets. So maybe this good waste is what we're really after. Markets definitely don't make good waste when they produce things. It's clear that our way of making stuff is pretty borked. But there's definitely something to be said for letting all our ideas fly around and crash into each other. But...what does it mean if there are no experts left? Were we wrong about the concept of the expert to begin with?

Unless otherwise credited all material Creative Commons License by Brit Butler