Ever since I blogged about good things happening to me last week, I've been slipping into depression. And the descent became rapid. The last three days were the worst of it. I had almost completely lost my ability to function. Just getting on the bus and making it to class, that was pretty good. That was an accomplishment. There were a variety of reasons for this but certainly one of the most prominent was how overwhelmed I felt by my Algorithms class. The first test had decimated most of the class (a handful of people got better than a 60) and the second one was today. Thankfully, it was a much gentler test than the first.
It's the teacher's first semester at my school and if my sources are accurate one of the reasons the second test was so much easier is that he has received enough complaints to be on some sort of probation. Whether or not that's warranted or not I can't say. What I can say is that I came into this semester drained. Partly due to prior semesters and a bit of academic exhaustion, partly due to Dad's recent death. I was hoping my courses would re-energize me this Fall. I found that all my courses drained me. It was terrible. Thankfully, I started working on some Open Source Software and that has been a real boon to me. Being able to share my enjoyment of programming and feel productive with somebody else helped give me a boost that I really needed. It kept me afloat. That said, if I had bombed the test today I don't know if I would've been able to handle it well.
I was concerned that if I bombed the test (which seemed probable) I would be so defeated that I'd have a hard time picking myself up and making a good effort on my other courses. Bombing the second test would have meant near certain failure in the class and I wasn't in a good position to take that blow. Thankfully, I'm still in college and I caught a break. A lot of people complained and the second test was a good bit easier. Whether that's fair or not is out of my hands. In the real world, I won't get many breaks or second chances. I'll just be required to meet the bar. Period. And sooner or later I'll miss it. I will fail. At which point, I'll just have to pick myself up. But not today. Today I'm going to keep trying to float and start working on finding my optimism.
Here's a pros and cons analysis and some oddly well timed material I stumbled on today.
Cons: He's easing up on us. We already weren't understanding the material well. Now he's easing up on us.
Pros: I am not going to fail the damn class. I can study CLRS and Kleinberg-Tardos and Levitin (all Algorithms books) at home to my heart's content, this semester and/or after. I've always vastly preferred self-study and learning by experimentation anyway. :)
Tasty links that might also cheer you up: High Anxiety - Raganwald's new github-thing Optimism - Also Raganwald's new github-thing
A lot has been happening lately and I guess I've been too wrapped up in it to write anything down here. I've been readmitted to SPSU for the Spring 09 semester, have filed the FAFSA and am currently looking into financial aid options. I'll have more on that soon but I am planning on going. Better to be there and learning than out of school doing Help Desk work and not learning enough about programming. That said, I'm totally out of funds about now and a part-time Help Desk position would be wonderful for the foreseeable future (i.e. post starting at SPSU). Or a contract position until school starts.
Will also got back in touch with me which I was quite happy about and I made some changes at his suggestion to my little hangman program. It's down to 115 lines of code and is pretty polished at this point. The only way to go forward would be to add new features but I'll put that aside until I've finished PCL. I also may have a quick weekend project to write a BASH script for RedLinux in the near future thanks to some of thegreat resources at the Linux Documentation Project. I've got some ideas for a future RedLinux release but I'll likely put that off until December or so.
That's all for now. I'm off to skateboard and shower while there's still some good sunshine out before hunkering down with more lisp. Did I mention a new version of SBCL came out? Don't forget to vote tomorrow. Keep an eye on things with the help of Peter Seibel and Randall Munroe! Fivethirtyeight.com won't hurt either. ;-)
I can't believe it's already October. It seems like only yesterday that I decided to take a break from school. For that matter, it seems like only yesterday that I became unemployed...but this was week 3 and a pleasant week it was. I'm continuing to try and buckle down and be more productive in various ways in spite of the fact that I don't really need money for another month and a half or so. So, what's been going on of late?
The Employment World: My interview with King and Spalding went pretty well. It was very straightforward and none of the technical questions were remotely difficult. By the sound of it, it will also pay more than my last job. That's a good and bad thing. It's good because a decent wage would be nice and my last job wasn't one in my opinion. It's bad because it may be more remedial than my last job. It's a little retroactively upsetting to realize that I'd be paid more here for what sounds like substantially less difficult technical work. We'll see. I also know it'll take a week or two before they let me know whether or not I'm on the list for an in-person interview. Thanks to everyone who asked about it and or wished me well. Devon and Don, I'm looking at ya'll.
The Education World: My friend Will keeps sending me awesome links to research, papers, sites and articles. I also had a fascinating conversation on schools and education with Oglethorpian Chris Latshaw and was reminded why I love Oglethorpe in the process. Conversations like those made the school worth it. I should get around to writing more about all that next week. Also, (to Will) I'm half-way through Practical Common Lisp and hung up on an element of the chat program. I'm being a sissy about e-mailing you questions. I'll write this one off soon, I promise but I'm just trying to wrap a sane Chat UI around the Spread library. I'll send more details soon. Finally, I've downloaded about 100GB of video lectures about coding and math this week. I spent an afternoon queuing them up and left it running a few days. Remember me complaining about everything being in Real Format? Well, I still won in the end. It wrapped up this afternoon. My apologies to the Internet Archive's Ars Digita mirror. They must feel violated.
The Linux World: The Linux Kernel version 2.6.27 was released Friday. Development will start on 2.6.28 now. I'm excited about 2.6.28 because I'm hoping btrfs gets pushed into mainline. That could take a little while but it's still fun. Also, this is the first time that release season has come around and I'm really not interested in Ubuntu or Fedora. Arch/RedLinux has me pretty satisfied.
The Code World: There are some really cool lectures at the S3 conference. I posted about it before because Dan Ingalls presented the Lively Kernel but at this point I'm also really interested in the STEPS project and Ian Piumarta's work. Partially because I'm really jealous of Luke Gorrie, again. And I hope that OLPC XO's really do become more reflective and Lisp Machine like. Beyond that, I stumbled on two web framework tutorials lately, neither of which I have the time to work through really. Sad. One is in Factor and the other is in PLT Scheme. Sexy!!!
That's most of it. I need to write up a cheatsheet for the emacs and slime commands I'm using and then 2 or 3 articles on the stuff about Common Lisp I've been learning. Maybe at the end of it all I'll go back and revise my positions from the Language Adoption and Lisp article. Other than that, I'm trying to get through Season 2 of 30 Rock before Season 3 kicks off at the end of this month and really enjoying the break from employment that I have. Now somebody hire me already! More soon, everyone.
I'm finally getting to that point where I'm really curious about math. To be sure, I'd really like to beef up on my high school math (Algebra, Geometry, Trigonometry, Calculus) as I haven't done any in years! That said, I'm really more curious about Set Theory and Abstract Algebra and at least a little interested in Linear Algebra. Topology and Number Theory can wait.
What I really think I'm curious about though are Algebraic Structures. There's a great FAQ on them here and the Wikipedia entry also looks pretty thorough. Once I read those maybe I can look into Type Theory and Formal Systems and the relations between them. That said, I'm sure I won't understand anything about Lie Algebra Cohomology or Category Theory any time soon.
At least there are good video lectures to be had. Math, Algorithms and Data Structures here I come?
I think it's generally agreed upon that free video lectures are cool. I'm not saying that everyone wants to watch them but the fact that it's possible to download M.I.T. and Berkeley lectures, course readings and assignments most people seem to view as positive perhaps because many of us will never attend those schools.
There is tons of content out there and it's often difficult to find it all. There are a few sources I've found that help in sorting through everything but my sources tend to lead towards what suits my studies (computer science) best. That would be Peteris Krumins blog and Lecturefox. There are plenty of Google Techtalks and Authors@Google videos that are good as well. Beyond that, I occasionally find one off blog posts that may link to content I wasn't aware of. If anyone knows of any ACM conferences similar to the Reflections conference at UIUC where videos are released please post in the comments.
Unfortunately, most to all of these sources have a curious notion of "sharing" or online distribution. There are one or two problems that all the content they've posted online [under the egalitarian notion of global learning] suffers from. The first problem being that it's streaming content which is difficult to download (generally .flv or .rm format). The second problem being that if there is a download option for the content it's through a non-cross platform or DRM-encumbered client (such as iTunes).
Thankfully, Mplayer exists. Mplayer is my video player/encoder of choice (though VLC is quite good, too). And wouldn't you know it? It provides support for watching, ripping and converting those frustrating rm streams in addition to everything else. Flash videos are easy enough to rip through existing Firefox Extensions.
To make things even more exciting, there's no reason anyone can't mirror all the educational content out there. Except for legality of course, I can't speak to those details and I expect most of this content is under separate licenses. I do wonder if the Creative Commons No Derivative Works clause includes transcoding though. I suspect it doesn't based on the definition of derivative work. But to return to my original point about mirroring, storage is cheap now. Even NAS setups though they still run a good deal more than regular storage. But c'mon, it's a fileserver in a box. You knew that though, right? When you can get a 320GB PS3 or Notebook drive for $100, a 500GB external for $100 and a 1TB internal drive for $140 you know life is good. Not that I'm not excited about the day when the same will be possible with SSDs but don't worry, that day is coming.
Also, to the folks who filmed the Lively Kernel Talk from last night as well as those filming technical talks generally: If most of what the presenter/speaker is discussing concerns what's happening on the computer screen, you should be filming the computer screen. It's a handy rule.
Now, if you're not a Computer nerd or Software Freedom Advocate you may wonder why any of this would bother anyone. After all, you can still stream the videos with RealPlayer or watch them via Youtube in any event, right? Not quite, though I'll admit my problem is mostly with the egalitarian notions of education that I perceived (or imagined) to underpin this whole OpenCourseware initiative. If your stated goal is to make a set of educational resources available to as much of the world as possible via the internet then you're effectively after every demographic. There's not a section of the market you can afford to alienate.
In many parts of the world, I expect it's a real pain to find the time to sit in front of a computer and stream a file. Particularly in places where internet connections are scarce and are not broadband where they are available. Particularly if the file is a one or two hour lecture that you might want to rewind or pause at various points. If a guy can't watch the file in (connected) India, how is it free learning throughout the connected world? Additionally, if someone wants to watch video lectures when it suits their schedule (say at the gym or on the train) why would you prevent them from doing so unless they had a specific brand of portable video player?
If you're trying to promote free educational content then the first step you can take to responsibly pursue your goal is to choose the most widely viewable formats and lend your content to the widest possible types of use (including offline use but perhaps excluding commercial profit). Poor choices have been made in both respects. Flash Player historically wasn't available for x86_64 based Linux platforms though that has been recently remedied and iTunes U isn't available on Linux at all. More seriously, RM and FLV videos are difficult to download and use portably. Conversion to another format tends to be necessary as well.
Somewhat relatedly, I'd like to suggest that the masses of Open Content out there could use a good marketing push. Open Courseware is as underused as music, images and video in the Creative Commons. Someone really needs to create a service which finds Open Content and recommends or reviews it based upon the more familiar proprietary content in Music, Film and TV that consumers are fans of. Just giving it away isn't enough.
So, I've been trying to do this self-study thing for 30 weeks. I probably should've stepped back to evaluate my progress before now but I've allowed myself to be distracted with other things. You know, moving out, working my first full-time job, learning how to cook, clean and take care myself. That's no excuse though. Rather than beat around the bush some more let's just get to the heart of it:
"You got an F. What the hell's the matter with you? Ya big failure. Final Grade: 20.786516853932586% To be fair, you would've had to do 14.0 problems a week to finish the book in 26 weeks. They are pretty hard problems. Just keep at it man. You may want to revise your strategy though."
We're 30 weeks into 2008 and I've only done 74 of the 356 problems in that legendary text, the Structure and Interpretation of Computer Programs, which was the central object of my study this semester. That's about two and a half problems a week. Not my brightest shining moment. This whole experience definitely gives me new appreciation for the people that tried to structure and/or educate me in the past. Clearly, I need one of two things:
1) A good kick in the ass to really get going. 2) A new gameplan.
Personally, I'm going to try a mix of the two. Where 1) is concerned I recently wrote a self-study program (the biggest program I've ever written, actually) to help me keep abreast of my own progress and help me chart my course a bit. Where 2) is concerned I'm going to have to start making concessions to maintain momentum and I'm not entirely comfortable with that.
What concessions do I mean? Well, some of the SICP problems are hard. Really hard. Unreasonably hard (see Exercise 4.79 at the bottom for which a good answer is "probably worth a Ph.D."). The book has it's reputation for a reason. It's a reputation of difficulty but also of enlightenment. A lot of very smart people say it's the best way to learn Computer Science and probably the best book on the subject yet written. I'm willing to take their word for it. Anyway, there are problems that I get hung up on and I haven't been letting myself move on to the next section of the book without solving all the problems in the current section. That just isn't scaling well. I'm already hung up on the last 4 problems in Section 2.1. God knows what would happen come 4.4. I'll surely never finish the thing if I don't let myself move forward.
With that in mind, a week or so ago I did let myself move forward a bit and work on Section 2.2. I've already got about a third of it done. Maybe even half. I'm worried about this because I want to stay honest. I don't want to shirk the hard stuff. I won't move past problems unless I'm really stumped and I will circle back at various points to try to work through them. Aside from SICP, I've worked on HTDP (How To Design Programs) and CA (Concrete Abstractions) as well this semester. I got an almost reasonable portion of HTDP done but next to nothing on CA. I'd really like to try plowing through as much of those three books and The C Programming Language (rocking the 1st ed.) as possible before Xmas.
Semester 3 (starting in January) I'm hoping to work on Algorithms (DPV, not CLRS), Essentials of Programming Languages (1st edition, baby!) and one of my Operating Systems texts. Of course, Discrete Math (5th ed) would be more prudent and judging by this semester this could all be revised by Xmas. Well, back to work. Happy Hacking!
It's time to post on something other than code for a change. The last time I posted something non-technical was a music-related post in mid-April. I've had a strong urge lately to say something about this blog's title, "Improved Means for Achieving Deteriorated Ends". I've never really explained what that means to me before. It relates somewhat to a a fairly recent post about my "emerging philosophy" and I definitely have more to say but am still searching for the words to get it out. While searching for those words I've stumbled on an idea that I think is worth discussing and that perhaps serves as a more concrete example of the sorts of issues I'm thinking about.
So, what's the grand exciting topic in store for today? Hiring practices. I'm sure your first thought is that hiring issues are inherently boring. I'd agree if we're talking about staffing a company of 75,000 people. For example, I talked to a Chik-fil-a manager today and asked him for a ball park estimate of how many people worked nationwide at Chik-fil-a. He said that he had a small store with about 25 employees but stores vary between 10 and 100 employees and average about 50. There are 1,300 stores nationwide and then you've still got whoever works at corporate facilities and not in retail.
The truth is, in this setting the product (and your company's success) are not a function of the quality of your individual employees. In fact, if you could sell people Chik-fil-a sandwiches without stores it'd be a huge cost savings provided you could figure out the distribution. You really just need people to fill a non-contributory role. If there were robots that could do the job and customers didn't mind the difference that would be just as good. The point being that the person working the register's chief contribution to the product is handing it over once you ask for it. I'm not generalizing to all retail here but you get the idea.
Now, the difference in the hiring problem occurs when you are looking for contributory employees. Employees whose contributions fundamentally shape the final product that the success of your company rides upon. Careers like architects, programmers, teachers, or journalists. Since these people make or break the success of your firm you can't hire based around basic arithmetic and serviceable grammar. Architects, for example, need to have a sense of design, an understanding of how buildings work, and working knowledge of the tools used to make designs become paper and then reality.
To be as successful as possible you don't just want to hire decent people. You want to hire talented people. To whatever extent possible, you want to hire the best people and this is precisely where we start running into problems. Spotting the best people is very hard and in some ways analogous to The Blub Paradox. That is, I wouldn't trust a person who'd never programmed to hire programmers. Moreover, if an incompetent or only decent programmer is hiring other programmers it's not evident that he'd be able to spot the programmers better than himself. He might not know how to recognize them.
Most companies have two chief hiring practices that I'm aware of, the resume and the interview. The resume process is a screening process. It really exists so that you can weed out candidates based on a standard set of assumptions about the things they need to be successful and whether their qualifications seem to match up with those assumptions. It's pattern matching. This is why it's more difficult to get jobs sans sheepskin. People who pass the initial screen are interviewed by a member of the department with some experience (generally a manager) and evaluated for competency based on the interviewer's (hopefully reasoned and up-to-date) understanding of the job requirements.
One problem with this strategy is that you wind up with false positives in both directions. Any hiring manager has a story about a sure thing hire that turned out to be a nightmare working with the team or the long shot employee that wound up turning around two lagging departments. The real problem, I'll argue, is that current hiring practice is not evolving. You don't learn from your false positives. How would you do that you might ask? I'll tell you how. Treat employee hiring like investing. Companies, especially companies that sell products derived from their employees' creativity, like to talk about how their product is their people or the people are the difference. I say put your money where your mouth is.
If you turn an employee down for a job, I want someone to be able to tell me in two years whether he's gone on to have a very successful career at another company or has wound up working in a different industry. If I hire somebody and they turn out to be a disaster I want to dig up anything I've got on their initial interviews, write the eventual problems on the transcripts in red and put it in a separate filing cabinet for future reference. Do you see anybody going that far to hire good people? No. I won't argue that there's no reason for this. One reason is: it would be a full time job.
Let's take this idea a little further though. Let's say we don't just track our false positives. Lets keep in mind that there are different classes of applicants to begin with and, just to stick with our investment theme, let's call them low-risk, medium-risk and high-risk. Why not? After all, that kid without the diploma is high-risk. At least, that's the reason you gave for not hiring him wasn't it? Oh, that's right. You didn't have to give a reason for not hiring him. Nobody checks up on hiring decisions. There's something else worth thinking about. If you miss a candidate that could've netted your firm an extra 10% last quarter should your ass be on the line or not?
Anyway, what was I saying? Oh, right. A standard reason that most hiring managers avoid candidates without diplomas is the amount of risk. It ties back to a famous IT saying, "Nobody ever got fired for buying IBM." If it seems like a sensible decision to hire a diploma holding guy, hire him. At least if he turns out to be a disaster a bunch of people can say he doesn't look like an obviously bad candidate and they might've done the same thing. If a high school dropout turns out to be a bad employee people will say you should've known from the get-go. So, let's just call the kid high-risk. But keep in mind that high-risk goes in both directions because even though he never got his GED he's been programming x86 Assembly since he was 7.
Now, obviously this isn't practical all the time. It wouldn't work for Chik-fil-a and I'm sure there's some point where it wouldn't work even for a company whose product depends on their creative, contributory employees. You could only scale a process like this so much and whether that's a function of the number of employees or something else I couldn't say. In fact, doing this internally in a firm might be suicide. It might have to start as an HR firm exclusively though what we're describing probably sounds more like a scouting agency. You'd also almost certainly have to stick to a certain industry since, as I mentioned above, you have to be a good programmer to recognize a good programmer. Additionally, you definitely would want to spread your portfolio of hires across risk segments but let's move on before we get bogged down.
About now you might be wondering how this all ties back to my "emerging philosophy". It ties back because of the chain of impact from the corporate world to the academic one and beyond. I think a lot of problems exist in the educational system because we think absolutely everyone has to go through it. Parents are convinced that without college diplomas their children will not find gainful employment or have successful lives. I don't claim that hiring practices alone account for this but they do play a part. More importantly, the overall impact of this is one of waste in society. It's waste of compulsory schooling on those that may not need or desire it and it's a waste of those who excel through nontraditional means. It's time to find as many of these little bits of waste and inefficiency as we can and fix them. I think if we'll do that we'll find that the problem isn't that we need to produce more to satisfy demand but that we need to figure out a more equitable and beneficial distribution of the copious resources we already have.
I realized in the shower this morning that while I’ve made a few statements about my decision to leave college I haven’t really given much explanation. Moreover, I haven’t explained a tremendous amount about my views on education or the modern system of education. Those views I’ll hold for a later post. This one will be short and sweet.
I spent 3 and a half wonderful years at Oglethorpe University and half a year at Southern Polytechnic State University before deciding to leave formal education for a while. Before I state why I left, I think it’s important to note what I feel I benefited from while I was there. 1. An incredible community of mentors and peers to learn from (Oglethorpe), particularly social skills my Emo (ahem, Freshman) year. 2. A library filled with interesting books with ideas waiting to be digested (Oglethorpe, I only started using it Sophomore year). 3. A forced exposure to subjects I otherwise wouldn’t have studied (essentially the CORE program, again, Oglethorpe). 4. Time to figure some things out for myself (Oglethorpe and SPSU). And yes, I realize this one is pretty vague.
So, why did I leave? Well, there are a number of reasons but three stand out as prominent.
1. Burnout. I was miserable with school post-Sophomore year. I liked college but I couldn’t stand school. I felt like it was keeping me from learning all the things I really wanted to learn. There are plenty of books I knew I wanted to read, think about, and work my way through but I couldn’t due to prior academic obligations. I was unmotivated when it comes to those obligations so I shirked them in favor of personal study. The implication is that I knew I was getting an arbitrary education. Pursuing the paper for the paper, so to speak. And that didn’t sit well with me, both because it was preventing my personal education and not supporting my future in a direct fashion. I essentially avoided working both on schoolwork and my work to try to force myself towards a degree while hating the degree because I didn’t plan to use it. I felt like a failure most days. That alone was reason enough to leave. Or, in the words of Mark Twain, “I never let school get in the way of my education.”
2. Once I came to realize I wanted to study computer science and programming (they are arguably different) I realized there were very few schools that had the sort of program of study I was looking for. Of those that had something adequate, fewer would let me learn it the way I wanted to (at a moderate pace for fun as opposed to Ivy League sink or swim). Finally, I could get in to probably none of those schools ruling out the option of rigorous formal education. Now it would seem that I have a contradiction on my hands. I don’t want the hardship of Ivy League or heavy workload schools but I want the rigorous education. I believe that by slowing the pace you can keep the fun and rigor without the sink or swim aspect of the experience. The important thing is good material, a good approach to the material, and good supplementary material (including peers) to learn and reinforce from. The community of learning is significant but I don’t believe formal education is necessary for that.
3. I had enough of an idea for a course of study to actually do it. That is, I knew well enough what texts were good texts to study, there were lots of online lectures and materials, and programming is very much a learn by doing thing. Some of the best in the field have no formal training and it’s a field that’s historically unusually receptive to alternative training and heretical types. Paul Graham, I must admit, had something to do with this as well. His essays led me to remember that I really would love to try being an entrepreneur at some point. Additionally, they reminded me that if I ever do end up a decent programmer I’ll probably want to work somewhere obscure that would give me maximum freedom in how and what I coded (languages, frameworks, etc etc) as opposed to at a Megacorp. Agile coding with five buddies? *shrug* Sounds good. “What are we going to make?” Working with a ton of people on some accounting or CRM program in Java? Shoot me now, please. To do what I wanted to do, I really just needed to draft a syllabus and get going. So I did.
But I think the truth is really that I left college to leverage my compulsion to learn. I was compelled to learn these things, to read books on Programming, IP Law, Peer Production, Poetry, and plenty of other things and I’m terrible at stopping myself the way I needed to in formal education. So why not leave formal education for a bit? It seemed like the best thing to do and three months in I have to say it seems like a pretty prudent decision. I can think of two concrete reasons to go back, either because I couldn’t find work and was starving or I couldn’t learn something I wanted to. Let me be explicit, I haven’t decided not to go back but if I don’t encounter a concrete need to I probably won’t. Just wanted to be clear.
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.
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've been stumbling across these this morning and find them all quite provocative. What do you think?
"As Navrozov explains, the word "power" in Russian means "possession" and is a cognate to the English word "wield." Since in a democracy public opinion is power and universities are the source of all legitimate opinion, they can be said in a sense to possess and wield our minds. So no one at a university should be surprised to smell the marmoset, not even in an innocent little department called "computer science," but I knew the stench from childhood and to say I was shocked would be an understatement." - Unqualified Reservations
"Of course, in a sense, anything you do with in a computer can be described as "mathematics." The point is not whether or not programming is math. The point is what notation is most effective for expressing programs. Choosing the best notation is the entire problem of programming language design, and this problem is neither mathematical nor scientific. A programming language is a user interface for programmers, and if you can reduce UI design to math, science, or any formal process, call Apple, not me." - Unqualified Reservations
I would love to hear arguments as to what necessitates the current system of education beyond simple job training and skills certification.
More Importantly: I would like to hear a reasoned argument as to what subjects cannot be learned faster outside of the educational system (note: this does not mean without structure or guidance) than in it and why this might be.