Okay. So, I didn't get the week 2 recap posted last Friday and I'm not getting it posted today either. Before you folks go judging me and deciding I turned into a lazy bum I thought I should make some note of progress.
As I've mentioned, SICP isn't going as fast as I hoped but I won't skip a thing. If my schedule goes out the window so be it but this book is getting finished. Of course, hopefully I can conform somewhat to the schedule as well. There will be an update this weekend even if I'm not through section 1.2.
In the meantime, I thought that I'd post up something I've been working on during my lunch hour. Namely, Project Euler code. Project Euler is a website that has about 180 Programming Problems of escalating difficult. I've only devoted one lunch hour to it so far but it's been fun and I'd love to get through a quarter to half the problems this year.
The challenge for me I think will come from the math side as well as the programming and some of these I just won't be able to solve for a while. Better to challenge myself from both ends, right? The code's hidden behind a cut for those who don't want their eyes scarred by this programming nonsense. Also, I'll be improving these as I discover better programming formalisms. I'm also solving each problem in both C and Scheme. I want to solve each problem from two paradigms (or more) if possible.
and I find the resources to read. This SICP studying is harder than I ever could have imagined. I have done approximately nothing in my math, putting me about two weeks behind tomorrow. My focus has been entirely on SICP. SICP, I'm only a few days behind on thankfully. It's really hard stuff. And as somebody noted, charmingly, at this stage it practically is math. And proof by induction, recursive functions, golden ratios and Fibonacci sequences math. Not your grandpa's arithmetic.
Anyway, I've dug up some resources hitting snags here and there. It's what I do. So far, I've found a really great SICP Wiki (but it's half Russian), and a pack of people that have studied it from the Open Courseware over the past year.
Of course, there is also the aforementioned SICP Wiki and Eli Bendersky's Blog. Long story short, I really owe it to Lispy for encouraging me. Half way through section 1.2 I was bogged down. Roughly on exercise 1.13 which apparently gave a few other people trouble too. And I felt all alone.
Anyway, I'm going to try to push my schedule back a week and see if by next Friday I can be up to lambdas and through 80 pages of Discrete Math and then continue as planned. At the very least, I've known from day one that the one thing I want most to accomplish this year is wringing as much as I can out of SICP. So if it takes the whole year just to do that, schedules be damned, so be it.
Today was not the easiest day. It wasn't terrible either. The news was decidedly mixed. And it's not about Dad though if you're wondering he's doing well. He's undergone chemo and lost most of his hair but he's generally upbeat and energetic.
Two things have been wearing on me today and the first is work-related. Since January 11th I've been working full time at TVS. The news was that I finally got the paperwork for my benefits package today. It's nice having benefits. Benefits are good. All the same, this meant I could start doing budgeting and working out my finances.
Finances are some scary shit. If I didn't know better I'd swear I'd die without a sizable chunk of money a year. For now I'm still staying with my parents until summer (at their behest more than mine) and I'll find a place to live then.
I really am making enough to be okay. It's just that there's not a lot on the margins. I don't want a whole bunch of stuff. I just don't want to worry about suddenly needing money for any reason.
Anyway, the other struggle has been that of the triangle. I'm getting behind on my schoolwork and hoping to catch up by/over the weekend. And I was pretty distressed because I spent like 4 hours obsessing over exercise 1.12 in SICP.
The problem is to write a procedure that computes the elements of Pascal's Triangle.
That shouldn't be a big deal, you know? But I obsessed over it. And now I've got a silly over-engineered solution that I'm more fond of than I should be. It's an interesting problem though. Hopefully I've learned something from it.
Mine still isn't quite working and I know there is a simpler way to do it. I cracked after a while and read about how one might solve it but I didn't peek at any code. Still, I'm stuck on doing it my way. I'm such a bastard. Anyway, it's coming together and I expect it'll be done by the end of the hour. It'll be in the week 2 recap for sure.
Long story short I realized what I've gotten myself into today. And it's still where I want to be. It's just that I think it's going to take more work and time than I might have been able to understand.
One of the games I'm most excited about coming out this year is called echochrome. It's coming out for Playstation 3 and the PSP. No US release date has been announced but it will land in Japan on March 19th. While I normally don't bother with writing about games, this one's special. It's one of the most novel concepts for a game I've seen in years. In short: you rotate a scene featuring an Impossible Object such that an automated walking man can navigate it. It's a perspective-based puzzle game. Here look:
Also, everybody is writing about CS Education lately which is awesome considering I've been thinking about it so much. Just look at all this mess:
It may sound like a cop-out but I think Abelson and Sussman had this right all along. We're so hopelessly early in the existence of Computer Science as a discipline that we don't have a clue what it really is yet. And when you don't know what something is, it's pretty hard to know how to present it. Or steer it's course. That's all for now.
The long weekend was really nice. It was good to get the time off and I’m excited about this week. I even talked to Teresa a little about potentially going back to school and maybe becoming a professor down the road. We’ll see. Unfortunately, my beloved MP3 player decided it was going to die on me. And the thing is, without being able to listen to my music everywhere I fall apart a little. The gym’s harder and less fun. Work isn’t quite as good. Ditto for driving places. Haven’t you noticed FM radio is mostly awful? Anyway, now I have to figure out what to do about that missing piece of technology. I don’t know when I’ll do it but I’ll probably try to replace it sooner rather than later due to my predilection with mobile music. Plus payday is on Thursday.
The player I had before broke because it’s a hard drive player. It has moving parts. And you have to recognize that’s sort of an undesirable design limitation on something you take to the gym or are really mobile with. Hard Drive based players are just much more likely to fail. Flash players (which don’t have moving parts) have existed for years but they’ve only recently gotten into a storage capacity range that makes them eligible for my dollars.
That said, this throws a kink into my technology roadmap a little. Before my player’s death I was pretty well set up for this year. Sure, at some point down the line I wouldn’t mind a mobile game system (the PSP) or a new phone that I can check e-mails on (the OpenMoko) but I really don’t consider those essentials. Now, I need a new MP3 player and playing MP3s is something the PSP and OpenMoko are well-equipped to do. Nothing like consolidation of devices, right? Thing of it is, whatever I’m going to use needs to interoperate with Linux well and have a 16gb capacity or more. The MP3s stored on my current player took up about 13gb but it helps to have growing room.
The nice thing about getting the PSP would’ve been that it’s competitively priced with an MP3 player and would play games AND stream music from my PS3…but I’d have to be near a wifi access point. I could store the music on a memory stick and then I wouldn’t need to stream it wirelessly from home but 16gb memory sticks for the PSP aren’t coming out til March and even then they’ll be more expensive than the PSP itself. So, that’s out. SDHC memory (which the OpenMoko uses) also haven’t reached sizes above 12gb and the phone is prohibitively more expensive then a replacement player or the PSP.So, at this point it looks like getting another Creative Zen Vision M 30gb (which I did like before it’s untimely demise) or a SanDisk Sansa View 16gb. The Sansa is a $50 bump over the Zen’s ~$125 but there might be one cheaper on craigslist and I’m thinking I’ll go with that due to mostly positive reviews and it’s durability and size-benefits from being flash-based. Anyway, it was fun to at least consider the OpenMoko and PSP Slim. I did a sizeasy comparison of the devices and my current phone (the Nokia 2610) to see how they all matched up for room in my pocket. Wanna see?
Well, I said I would do this and I meant it. These entries will be a bit lengthy. I feel a little pain for any feeds I'm aggregated on. So, in the interest of not driving you all mad, these weekly semester updates will be behind a cut.
So, I've finally gotten everything nailed down. I know what courses I'm taking, what resources I'm using, and what my schedule is.
I've decided to break my studies into 2 semesters each of which is comprised of two courses and lasts 20 weeks. The first semester started this Monday (1/14) and ends Friday (5/30). I then take the month of June off. The second semester will start Monday (7/7) and end (11/21). Having June and December off will both motivate me to push through and also allow room for slight changes in schedule.
I'll study SICP and Discrete Math with Applications by Rosen this semester. I've already started in on the SICP. Obviously I'm a little behind on the math. At the end of each week I'm planning to post a summary of exercises and notes at least for the programming courses. I don't know what I'll do on the Math course. I also haven't quite settled on whose problem sets to do. Ah, well.
Next semester it's HTDP and CTM. I'm a little freaked out looking at all this but if I try I'm bound to learn something. Wish me luck.
And here's the week by week breakdown of the first 4 weeks for each course:
discrete math: resources include lectures, problem sets, and course notes
dma - 787 pages / 20 weeks = 39.35(40) pgs/week
1 is lecture 11-01-00 and pgs.1-44 (through section 1.3)
2 is lecture 11-02-00 and pgs.44-80 (through definition 4)
3 is lecture 11-03-00 and pgs.80-119 (through chapter 1)
4 is lecture 11-06-00 and pgs.119-161 (through theorem 7)
sicp: resources include lectures, online book, course notes, problem sets, and eli bendersky's site
sicp - 610 pages / 20 weeks = 30.5(31) pgs/week
1 is lecture 1-a and pgs.1-31 (through section 1.1)
2 is lecture 1-b and pgs.31-62 (through section 1.3.1)
3 is lecture 2-a and pgs.63-97 (through section 2.1)
4 is lecture 2-b and pgs.97-126 (through section 2.2.3)
As far as my schedule goes, the plan is to work from 7am-3pm Monday through Friday, go to the gym after work on MWF, and veg on the weekends where possible. The workweek will be dedicated to my "education" of course, beyond work and exercise.
So, I've been meaning to post about the things I taught myself in Montana and my course of study and a course schedule through May/syllabus but I had to recover some partitions on my desktop. My laptop also was caught between Ubuntu Hardy Alpha 2 and Alpha 3. I'm not getting into it. It's a long story. Anyway, now that all my systems are running flawlessly I'll speak a little on the aforementioned subject matter.
I have a long term plan for a course of study but no hard schedule yet. I have to divide up readings and problem sets and link them with lectures and such. I plan to have such a syllabus done and up for viewing by the end of the week. As for the long term plan of study there are 6 Programming Texts and 3 Math Texts that I'd really like to get through. If I get through the first 3 Programming Texts (or even the first 2) and 1 or 2 of the Math Texts I'd consider it a successful year. They're all fairly rigorous and I'd like to cover them in depth. Of late, I've been debating the order in which to approach the programming texts. Either SICP, CTM, HTDP or HTDP, CTM, SICP. Some of the stuff in SICP is a bit difficult and some of the stuff in HTDP is a bit easy so far. This is another thing I'm hoping to have worked out by the end of the week so that I can get going.
Once I do have a syllabus I'll post it and then post notes on readings and lectures and solutions to exercises as I go along so feel free to follow along and ask questions. You can only help me learn more. So far, I read the first 40 pages of SICP in Montana. That's Chapter 1 (of 5), Section 1.1. I've got notes typed up on the lecture and reading and most of the examples solved. I'll get those posted up by Friday as the first entry whatever my course of study turns out to be. Also, Friday I will be going to that Yeasayer concert. So far Ben Grad and Minor are talking about going too. Any more takers? Have you guys liked Yeasayer as much as I have? Isn't that Red Cave song from yesterday awesome?
Finally, here are some good Lessig quotes my readings in Montana of The Future of Ideas (Pgs. 1 - 99):
"The very idea that nonexclusive rights might be more efficient than exclusive rights rarely enters the debate. The assumption is control, and public policy is dedicated to maximizing control." - Lawrence Lessig, The Future of Ideas, Pg. 86
"Where we have little understanding about how a resource will be used, we have more reason to keep that resource in the commons. And where we have a clear vision of how a resource will be used, we have more reason to shift that resource to a system of control." - Lawrence Lessig, The Future of Ideas, Pg. 88-89
"The point is more than theoretical. In essence, the changes in the environment of the Internet that we are observing now alter the balance between control and freedom on the Net. The tilt of these changes is pronounced: control is increasing. And while one cannot say in the abstract that increased control is a mistake, it is clear that we are expanding this control with no sense of what is lost. The shift is not occurring with the idea of a balance in mind. Instead, the shift proceeds as if control were the only value." - Lawrence Lessig, The Future of Ideas, Pg. 99
I'm a bit perturbed at the moment and I'm having a hard time figuring out why but it seems to happen to me after reading Spolsky articles and their associated reddit comments. That was the last time I remember having this same sense, at any rate. The sense that I might call "Computer Science scares the shit out of me". Either that or "the real world scares the shit out of me".
But on to the Spolsky article. I read Spolsky's article "The Perils of Java Schools" and the comments from when it was posted on reddit. The article is about what it sounds like it is. Joel thinks that schools have dumbed down their CS programs by teaching Java instead of a functional language like LISP or Scheme or a low level language like C. The commenters then get into arguments about Joel being stupid, what the ONE TRUE WAY to teach Computer Science and/or programming is, the reason one set of skills or another is valuable in industry, the difference in industry's goals and academia's, and anything else they see fit to mention.
The argument in comments on these articles is often in fact a mere miscommunication. One side advocates that a good (or great) programmer is found by a seeking out those that are technically adept with things like tail-call recursion and functional programming or low-level bit-hackery and such. The other side advocates finding those that have good design principles and an understanding of architecture/best practices.
The missed point seems to be that the first side (to my thinking) presumes that their conditions ipso facto create the candidate argued for by the second side. That is, the first side thinks if someone understands tail-call recursive functions and pointers than they must have some sense of design to go with their knowledge of abstractions and that this, consequently, makes them good engineers. The second side is missing this fact and arguing that design skill is more important than technical ability. Both are large components though. I do not think Spolsky would advocate hiring programmers who had technical ability but little design skill or design skill and best practices but little technical ability.
After reading these articles however I have to step back and remember that we're talking about Computer Science or Programming both of which ultimately have in mind the creation of software or in Sussman's words a description of a process. That description (software) is supposed to automate work, to create value. And THAT is the scary part.
Computer Science scares me a little because I wonder if I have the necessary chops (and desire) to become a good programmer. It's also scary because it will take me a while to even figure out the answer to that question, probably longer than I'd like. Real life on the other hand scares me a lot more for an entirely different reason that I'll explain by way of confession.
I confess that I have an intense urge to read reddit and I find it very hard to resist. It borders on compulsion. The reason is this: I think I'm lazy. In fact, it's even more than that. I think I'm not going to make it out there. You know, in the real world. There are a few reasons for this. One, it's painted as scary and brutal by a lot of people. Two, and this is the bit about me being lazy, I think the real world is bullshit. Or at least mostly bullshit. It's people trying to find ways to stay busy so they can make money so they can eat and do things they actually care about. This next bit is important so I want to state it carefully:
It's not that I don't think that there aren't people out there getting things done that actually need doing. It's that I think that 90% of human labor is about maintaining the status quo, that maintaining the status quo is a huge waste of time if not for the fact you'd starve otherwise, and that the little last bit that actually creates new value and advances the state of things seems like accident or luck as often as the product of hard work. Moreover, there's no guarantee no matter who you are that you won't just get bad luck and get screwed. THAT is what's scary.
It's scary because I don't want to hate my job and just try to do what's necessary to make it. It's scary because I'd like to be in that little 10% and there is no guaranteed way to get there. And it's scary because the very fact of it is implicitly anti-hope or anti-progress. "90% of the world is about maintaining the world. Good luck."
I read reddit not because I want to avoid my other duties but because I wildly want to believe that somewhere on there I will find the guidance I need to not be a 90% human being. I want to be good at something, produce value, not fear starvation or unemployment, and love my craft. So far, I believe programming to be my best bet. Hopefully, this year off from college will bear that out one way or another.
I have learned that Montana is a lonely state. Filled with that beauty which could only belong to abject desolation. They tell me it is the fastest growing county in the state. And here I can more clearly pick out: the howling on the wind, the tracks of my pursuers, and the flock that will follow. What is it, I wonder, that draws us together in our loneliness? Is it some incomprehensible wonder at an unceasing orderless motion? I no longer search the skies for a conductor. My search more often turns inward. And there, clockwork reigns. A silent oscillation between misanthropy and optimism. A confusion at the whispered words of justice. And no sense whatsoever of how through it all a warm hearth is found. And home.
By chance I left Neruda at home, whom Yevtushenko reminded me of. By chance I found that slumbering desire to be everyone, sense everything, and connect with the ineffable essence of the world. And though I may never make peace with this curse of oneness I am confident that there lies in wait for me some richness to call mine that shall not fade.
But I am also unsure any of us are deserving of such a future when I see: our capacity for insular obstinance, our apparent lack of stewardship, or our bottomless apathy, mindless consumerism, moral ambivalence, and petty categorical divisions into imagined communities.
What will it take to stimulate interest and invoke participation in the human cause? Or shall we continue on as an inert public, a chemical cesspool acting out the steps of a process written long ago?
I'm home and I had a great time. I'll give a more complete update later after my first day of full time work and a good night's sleep. I'm also sort of working on a top 40 most listened to songs of 2007 post. First here's something I wrote while I was in Montana. I'll post the second in my next post.
"Unsustainable Earth" I was never brilliant, only distracted. Ever present in an ill-defined elsewhere. But I was born into a decomposing country. And if this Eden is decaying into wasteland I must ask myself: What was the time of death? And is it too late for the surgeon's blade or the pastor's cross to return life to a forsaken land?
I have no certainties about our salvation, or our chances of salvation. Perhaps the end will come like a burst of fire from the furnace. Perhaps we will be swallowed as though in a swell of the ocean. Perhaps there will be opportunity for escape, to foreign lands or a more profitable future. But avoiding the dystopian concerns too few. And the earnest simplicity of obliviousness will lead untold numbers to oblivion.
There are good stories to be told here though this may not have been an era of the brave and the decent. I do not contend that we should not be reproached. Still, an ending befitting our gluttony is to be resisted.
I've been hooked on this song for the past 48 hours or so by a group called Yeasayer. It's finding stuff like this that convinces me to bother with end of year album lists and such.
I also just sort of got this poem in my head while brushing my teeth. This is a draft. What do you think? What would you call it?
As though expecting to hear a proclamation, any moment now, "Poetry is no longer recognized as one of the forms of art. You lot may go on about your business." No more need: to try to compress the world into words, as if we could capture what fleets from us in a phrase given the proper amount of pressure. It is true that one should write a poem only under incredible duress. That way should we ever be caught, stuffing the universe into a handbasket, we might appear less greedy. And less foolish.
Finally, I'm going to be out of town for a week. I'll be back next Wednesday. See you guys then!