Tuesday, June 28, 2011

Hidden behind the abstraction barrier

In the complicated modern world, most people only have the capacity to be experts on one or two things. But there are some fields, like biology or English, that most people have at least an elementary grasp on., whether  because they are common to take in college, useful for everyday life, or the subject of great debate. Computer science is not one of these fields. Most people are content to have their computer remain a black box (or grey box, in Windows' case), using it for internet or applications and oblivious to what goes on beneath the surface. My major almost feels like a secret society sometimes; we talk about it freely among each other with great interest, but whenever I talk much about it with a non-initiate, their eyes kind of glaze over and they change the subject and/or run away. I've learned not to try. But not today. I'm going to try to explain the concept of an abstraction barrier to you all.

The abstraction barrier is the reason why programmers like myself are able to work in nice, symbolic programming languages rather than manually flipping ones and zeroes. It is essentially a gap in knowledge that hides the complexity of some subsystem from the rest of the program. At the most basic level, this might be, for instance, an algorithm I write to sort a list. Once I have it working, I don't have to worry what sorting algorithm I used or what exactly happens every time I use it (unless I'm optimizing), I can just sort the list. I could go back and switch to use a completely different algorithm, and as long as it didn't take drastically longer to work, no one using my sort method would even need to know I'd done anything. I was in a class last week at my Seagate job and was struck by how much bit acrobatics a hard drive goes through to "open a file"--a single command in Python. Unless I'm a Seagate engineer, I don't need to worry about this at all.

Once I internalized the idea of abstraction barriers in programming, I started to see them everywhere. For instance, the internet itself--a mind-boggling amount of infrastructure goes to make it easy for you to connect to a Wi-fi hotspot and check your Facebook. And don't forget how your web browser makes sense of all those bits flying at you--to the computer, a video, a list of E-mails, and this blog all look the same. Outside of technology, the organization of a company is set up to make it easy for others to acquire, say, paper, without worrying about how it's produced, transported, or any of the other challenges that go into orchestrating these things. People can even be abstraction barriers, of a sort. As I was writing a help page for my program today, I realized an obvious feature it was missing and added it. This turned out to be painfully slow, though, and I spent over an hour figuring out why and improving it so my program wouldn't hang for half a minute. I could write another entire post on some of the tricks I used. When I committed my work, though, I mentioned none of this--I just "allowed recursive searching from the default directory."

Abstraction barriers are convenient slipcovers we put over a world that is far too complex to grasp in its entirety. They allow programs to work cleanly, without getting in each others' business, all below the surface of what you're doing on a computer. And now you know something about computer science.

Sunday, June 26, 2011

Hello from Milwaukee! (2011 edition)

This weekend has been amazing. I'm back in Milwaukee visiting the Summer in the City project and my second family there! I don't know how to describe how joyful it's been to be back in this city with old and new friends. Last summer I got to have deeper fellowship than I ever have before and after being reunited we picked up again like we'd never left. I took Friday off from work, so instead of driving out to Seagate I got dropped off at the Amtrak station and boarded a train for Milwaukee. Let me tell you, I am never flying again because the train is a hundred times better. The train station was tiny, with no long waits or security checkpoints. I just showed up, got my ticket, and boarded. The car had tons of legroom and outlets so I got a lot of programming on the game done.

Once I got to Milwaukee, Bryan and Meg (a St. Thomas student I've seen at a lot of conferences) and and picked me up. I've been really reliant on the people on the project for transportation and a place to stay, and I wanted to emphasize that for any of them you are reading this. Thank you so much, all of you; God has given me a blessed weekend through you. Anyway, soon we arrived back at City on a Hill. It was pretty unreal being back there; we'd stopped outside on the way to drop my sister off at college, but I hadn't been inside it since our tearful farewell last August. I was ecstatic to finally be back! Bryan's ministry team had gotten done at Liberty and Truth fairly early, which was how they'd been able to come pick me up so promptly. They were crazy organized and were planning their VBS for the next few weeks, and I got to sit in on their meeting. I love vocational ministry and it was so great to see them getting really into it.

Pretty soon other people were coming back, and soon I saw Erin and Dave! We had dinner at Taco Bell, where I got to see Ariel, Anna Z (a fellow junior at the U of M in Campus Crusade with me), and most of the rest of the students on summer project this year. There are 17 this year; six men (the same as last summer) and eleven women. It turned out they were switching up the schedule this weekend, so a park outreach was happening that night. I went along and helped make gospel bracelets with kids in Tiefenthaler Park. I was expecting to have to round kids up and ask if they wanted bracelets and be kind of creepy, but that only happened the first time. After that we pretty much got mobbed by kids; some wanted bracelets (or five of them), others wanted necklaces. Even after a year I remembered what all the beads meant and got pretty good at explaining it to them; the girls I was working with seemed to know when to throw in some helpful questions or slow me down if I was going through the message too fast. It reminded me of the sermons I'd heard on the different parts of the body of Christ working together. The fact that I was able to jump right back into outreach after so long just went to show that I did it not on my own ability, but by God's enabling.

After we got back to COAH, Kiera, Kriesten, and Emily Sear showed up and we had a big reunion in the student lounge! We were all deliriously happy to see each other again. While many of the current SP students went to hang out at another park, we went to good old Leon's for some custard. We stopped at COAH briefly before I went to Tim and Andrea Urban's house, where I would be staying the next three nights. I was exhausted from all the excitement (especially my face, from smiling so much) and pretty much went straight to bed.

Saturday was epic. Everyone from the 2010 project went to a great place called Ruby G's for breakfast. Heidi drove to Milwaukee to meet us for the day! We had a good long time of catching up on each other's lives. It sounds really repetitive, but I was so happy to see them all again. My Milwaukee friends really are my second family and having their picture next to my work computer only made me miss them more. Saturday was the day of the weekly social event. The men were apparently shooting guns, but it was mostly for people on the project so I just ung out with the returners all day. I'd never really had a day in high school when we all just drove around and adventured, but I was missing out. We went to the Reservoir (the hill where we prayed over the city during our last week), a park near Bradford Beach, and the pier, just talking about all that had happened since last summer. We stopped at Open Pantry for snacks, where we ran into Sherman, one of the men the other ministry team worked with at Liberty and Truth last summer! I'm probably forgetting at least one place we went to; it was just a blur of excitement.

For dinner Kiera, Heidi and I went to good old Buffalo Wild Wings; I felt kind of bad as I knew there was probably a better place, but no one could think of anything so we just went there. I ordered a cider there and didn't get carded, which was pretty shocking as I'm still only 21. We waited for the men's and women's groups to finish up at COAH and went back to the Riverwalk, where the men had done our impromptu women's appreciation event last year. The whole day was just a tour of all our favorite places from Milwaukee and it was probably the high point of summer so far.

Back at the Urbans' house it hit me that I only had one full day left with everyone. I thought about the promise of the Resurrection and the eternal life we'll have in God, when there will be no more farewells or pain or loneliness. Every single day we'll experience more fellowship and love than I did that day or anytime on summer project. This really helped for reasons I understood better this morning. I got up early and had more time to read my Bible and think before church. I realized how much of the things I struggled with and mistakes I made were a result of my God-given need for love and community that will never be satisfied in this lifetime. On summer project last year I had better and closer relationships than I had before or since and I was afraid of leaving all that behind. But if it really is a need, I have to trust that God will provide for me. Part of how He wants to do this is through each other; I realized how many times I'd prayed for God to love on people through me and forgotten that it could work the other way, too.

Church this morning was at Liberty and Truth, where we'd been a few times last year. I forgot how differet (and yet amazing) African-American churches were. A few women came up to give the call to worship, and I felt like they could have just kept proclaiming God's greatness and love all day. Heaven will probably be a perfect fit for them. The sermon was on overcoming unforgiveness, and after it was over pastor Darryl Seay called people up to let go of anyone they hadn't forgiven. About 20 people came up and he made sure they all had time and support to work through what was eating at them. God often seems to work on me in church in a completely different way than He seems to be working in general, and today was like that. Besides praying for the people standing up front working through old hurts and grudges, I prayed to entrust my needs to God's care and proclaiming that He had all the love I'll ever need.

The service lasted until 12:45 or so and it was lunchtime. After that came the usual Sunday afternoon lull I'm still in, so I've had time to write this. I never imagined I'd be writing another Summer Project post, but here it is! Once again, pray for the students here, the ministry God has put them in, and the city He loves so much.

Monday, June 20, 2011


Listening to sermons at work at around 15 times the rate I normally hear them has given me a good sense of some of the recurring themes at Hope. (Also just how repetitive Pastor Steve's jokes are, and how amazing it is that they're still funny) One of the biggest things I've noticed is just how much they dislike "religion", or as he sometimes refers to it, "churchianity". (Which I've already blogged about) One of Steve's sayings is "If you hate organized religion, you'll love Hope Community Church!" During a bike ride today I thought about how both dangerous extremes for Christians, legalism (or "religion", as some call it now) and license, have important deviations in their view of morality (that is, a system of "oughts" and "ought-nots" that govern your actions). Legalism effectively equates morality with God, and turns Christianity into a pattern of good behavior--confusing an effect of faith with the whole thing. License takes the forgiveness of Christ and runs away with it, leaving behind morality altogether and basically saying "Jesus took away my sins, now I can do whatever I want."

Then I started wondering about how peoples' natural consciences could agree on the morality of some things (that murder is wrong) but not others (like homosexuality).

Note: 12-day writing break here...

Hm, okay, let's try and salvage this train wreck. Now that I've thought about it more, I'm starting to wonder if the idea of a "conscience" is really just culturally trained and imprinted values, which vary widely across time and space. Of course the values acquired by a southern Conservative Christian and a Seattle hipster will be different. And I think it was in a C.S. Lewis book that I read that a newly converted Anglo-Saxon, hailing from a culture that valued duty and honor, would have easily accepted the Biblical teachings on sin and justice and struggled with the concept of grace, while in today's culture it's just the opposite. Behind cultural values is our innate drive for self-preservation, which when universalized leads to most of the values that nearly everyone shares today. I'm not trying to "explain away" or undermine our morals, just offer a theory on where many of them some from.

Christian morality, of course, comes not from culture or within us, but from the Word of God and the example of Christ. But I don't think it's as clear-cut and rigid as fundamentalists like to paint it. Yes, the Bible has plenty of teaching on what a renewed life in Christ should look like (not how we gain this life--effects, not causes)--the commandments of Jesus and fruits of the Spirit are good places to start. But they hardly provide a comprehensive picture of how Christians should act at all times; this would make us little more than automata, and why would God give us free will if we had as much freedom as a single-threaded computer program? (I notice pastors never use computer analogies in sermons) Paul commands us to "work out your salvation with fear and trembling"--clearly he doesn't mean that we have some part in earning our actual salvation; he makes that clear in Ephesians 2. Rather I think he means that it's our responsibility to, by the power of the Holy Spirit, to manifest in ourselves the new life God purchased for us. How this new life shines through will look different for everyone in the particulars--it's up to us and our relationship with God, not clear-cut rules. I've been listening through Hope Community Church's series on 1 Corinthians, which contained a whole section on our freedom and how we should seek to use or even sacrifice it for the glory of God. Ultimately, it's up to us.

And, of course, trying to get non-Christians to uphold Christian morals, even universal ones in the Bible, is not only futile, but counterproductive. It's basically forcing them to be legalists. We are transformed from the inside out, not the outside in, and trying to go it backwards can interfere with God's process of sanctification. If you have a non-Christian friend who does something, you know is wrong, they don't need you to tell them they're sinning, or to cut it out, or read such and such book. They need Jesus. You can't transform anyone. He can.

This train of thought has also helped me in thinking about some political issues. I used to stick with the popular saying, "You can't legislate morality." But this is false, as every law upholds some kind of morality, imposes some kind of "ought-ness" on the people living under it. My stance on turning Biblical commands into legislation should be clear enough from the previous paragraph. I wish more Christian politicians would realize this and help associate the name of Christ instead with integrity, compassion, and leadership.

Wednesday, June 15, 2011


Apologies for the silence lately. Partly this has been because I'm working full-time at Seagate this summer (I'd tell you more, but it's all confidential) and partly because I'm developing a game this summer!

Yeah, this is my game: Astronomicon. (I still can't believe that name wasn't taken) It's a retro-style space shooter; for those of you who have fond memories of playing Phoenix on your TI graphing calculator, you'll love this. It's getting to be pretty playable, with most of the basic engine and a sweet HUD implemented as the screenshots show.

I'm hoping to have the programming part all done by the end of summer, at which point the game can be designed with config files. It's already pretty fun blowing enemies up with guided missiles and such and I can't wait to see what will become of the functionality I'm putting into it.

Updates on the game, including the latest source code and a wiki, can be found on the Google Code page. Stay posted!