Hacker School Month [2:]: Not a Boot-Camp, But…

I’ve been putting off writing a post on my third month at Hacker School for some time, because I really wanted to write about how I achieved my goal of working as a professional programmer as a result of my experience there.  Of course, I couldn’t do that until I actually found a job as a programmer, and honestly… for awhile there it was looking pretty bleak — at least to me.

Most of my time in the last month at Hacker was spent finishing the NAND to Tetris coursework, which ended up being a lot more time-consuming than originally anticipated, but still very worthwhile.  I gave a 5-minute presentation on the course on the last day, which I think went over pretty well.  Other than that, aside from a little bit of fine-tuning on our Risk AI, the rest of my time in the last two weeks was spent building up my online presence (i.e. profiles viewable my prospective employers, such as those on Hacker School and LinkedIn) and applying to the companies that work with Hacker School.  It was exciting at first; meeting all these representatives from all of these great tech companies at the job fair and wondering, “where am I going to end up?!”  But as Hacker School ended, I ended up with only one interview from a Hacker School company, and they didn’t take long in letting me know that they were looking for someone with more experience.

For the next two months, I continued to put off writing this post as I searched for work and applied to any position for which I thought I might possibly qualify, as long as it fit one criterion: I had to be able to develop as a programmer.  It was not always easy to set aside the advice of my mother and sister to take a non-programming position as long as it provided for my family; we’re newlyweds, and we do need income, and it’s not fair to my wife to have to scrape by on only her income while I sat at home.  And when it seemed like I’d exhausted my options for application, I continued to work on independent programming projects — either Project Euler problems or a silly but fun little project I’ve been working on with a friend of mine which has been inadvertently developing my skills with SQL and web-frameworks.

One might reason, at this point, that perhaps Hacker School had failed me in my goal.

To that I have a few things to say:

1) Hacker School is Not a Boot-Camp

There’s been some minor bristling lately about folks referring to Hacker School as a “boot camp.”  It’s an understandable mistake; there are a lot of programming boot-camps out there these days.  These are places where people pay some admission, take the prescribed crash-coursework they need to be able to get a job as a programmer, and sometimes are even guaranteed to get a position.   They operate on the same business model as a traditional private school.  Hacker School is a bit anomalous, and it’s also something of a misnomer.  It is not a “school” in the traditional sense.  There is no required coursework, there are no required classes, and there are no degrees or certifications.  There is also no tuition.  It is like a school, though, in that you learn a heck of a lot.  And perhaps more importantly, it’s like a school (or, rather, what a good school should be) in that it provides the sort of teachers and colleagues which will genuinely care about and shape your future.

2) Student Employability is Not the Goal of Hacker School

It is how they fund its operation, but in all honesty, if Hacker School only took students they thought could get a job through their associated companies by the end of the program… I would never have been accepted.  Of course, since the big common factor in all Hacker Schoolers is love of programming, being employable at some point is a fair assumption.

But when finally, after searching fruitlessly for over two months, I suddenly found myself with two offers for jobs as a software developer simultaneously, Hacker School was immediately eager to jump to my aid, with one facilitator giving me a reference, several students giving me valuable input, and one of the founders even calling me to give me advice on how to choose which company and how to best negotiate.  And neither of the companies work with Hacker School.  In other words, Hacker School had no motivation to help me other than the fact that I am a part of their community, and they (both the facilitators and my colleagues) have an investment in my future, no matter what the gain is to them.

And that’s really what it seems to me Hacker School is at the heart of it all: a community.  It is a select community, but the criteria for membership has little to do with experience and nothing to do with monetary value/potential.  Even after my batch has ended, I continue to meet with Hacker School alumns both at School events and independently, learning and getting support from them.  And even though it’s not a boot camp, I am able to credit that community with getting me to the place where I went from virtually no experience to gainfully employed doing what I love in a matter of months.

And as the company where I will be working grows, rest assured that I will be recommending Hacker School as a recruiting pool.

Posted in Uncategorized | Leave a comment

Hacker School Month[1]: My AI Is lambda x, y: x > y Than Your AI

My one criticism, if you would call it that, of Hacker School is that there are no good measuring sticks around here.  This seems intentional, and there’s wisdom in nurturing the idea that programmers are not across-the-board “better” than other programmers just because they have more or more thorough subsets of knowledge and practice.  If Amy has been coding in Lisp for thirty years, and Bob has be coding in Ruby for three months, Amy might still learn things from Bob which make her a significantly better programmer.

As a relative beginner, I am fortunate in that there is an exceptional amount I can learn from others, but unfortunate in that there are few ways to determine how much progress I have made as a programmer.  Perhaps I don’t truly need one, and it’s only my own narcissistic drive to imagine that I’m smarter than other people that wants it.  On the other hand, I’m also partially driven by anxiety over finding post-Hacker School employment, and wondering how potential employers will measure me against other job candidates.  This may, subconsciously, be the reason I have spent a good deal of the past month working on group projects.

A friend that I made here decided it might be fun to make an artificial intelligence with a non-deterministic game.  Although I had already done some work with artificial intelligence in my first month, this not only sounded like it would have an entirely different approach, but also allowed me the opportunity to work in a group on creating the server and API (Application Programming Interface, for you laymen) through which people would set their AIs against each other.  It also sounded like tremendous fun.

The others working on the server were all more experienced than I, but we fortunately wrote it in Python, so I was able to pair with others and still be of some value (even if it was often only syntactic).  I finally got some network coding experience under my belt, and perhaps more importantly was able to work productively on a self-managed team.  And because one of the friends with whom I paired on the project was experienced mostly in JavaScript, I got some experience working with another language as we created a dummy-AI to use for testing.

Once it had been successfully launched, another small group of people wanted to work on our own AI to battle on the server I had just helped launch, and so I joined another team.  This time, however, I found myself in a very different position.  I was the only one on the team who had worked on an AI for the server (albeit a “dummy” one that only made random choices), and I was no less experienced than most of the other team-members in terms of how long I’ve been programming, and so I was able to take on more of a leadership role, in both managing how to approach the project (separating out the different functions so we could all work on a different pieces of the program simultaneously) and also in writing/troubleshooting the code itself.

And when we launched our first version of our Risk AI on the server and won against the AI of the friend who had the idea for the Risk server in the first place… suddenly the project took on an entirely new level of excitement and engagement.  The spirit of friendly competition has given all of us some vigor, and we continue to improve our code and encourage others to build AIs to throw into the ring.

If anyone is interested, the API lives here.  We will continue to work on the site’s implementation and the documentation on how to build and launch your own Risk AI, but it’s currently doable as it stands.  You can even watch the games which have already been played!  Our AI is named “Battleaxe-Pig-Whale” (a partial anagram of the first names of our team).

The past month has not been solely dedicated to Risk, however.  I continue to work on the NAND to Tetris course, which has become increasingly tough and increasingly worthwhile.  We’ve finally gotten to high-level languages, and are in the middle of building a compiler.  I also spent some time playing with “ChucK,” a musical programming language someone recommended which I used to procedurally generate microtonal melodies.  Ultimately, I found ChucK fairly clunky, and decided to abandon it for my more productive projects before I could get it to do anything really fun.

My intention for my final month is to focus prominently on web-based application.  I’ve created a simple website with a simple MySQL database and I may try to replace some of the web-framework with my own code, although some are advising that this may not be the best use of my time.  In any case, in preparation for the job-hunt, I’m hoping to get very comfortable with web programming with my remaining weeks here.  I think this may even mean expanding upon my brief experience with JavaScript and starting to learn a second language.

But at this point, I’m pretty happy knowing that I can confidently succeed as part of a group, and that my code is able to hold up in competition (albeit a competition that I was part of creating in the first place).  It’s nice having something by which to measure.

Posted in Uncategorized | Leave a comment

Hacker School Month[0]: Lessons For Beginners

Changing careers is a daunting idea.  It is a special sort of blessing to know one’s vocation on the outset of his or her adult life, regardless of whether that vocation is a heartfelt yearning or whether it has been thrust upon them by heredity and/or social stratum.  Not knowing where to put one’s efforts, in a world were so many others do seem to know for themselves, is a very uncomfortable and disconcerting reality.  It is also a blessing to realize one’s vocation at some point further down the line… albeit a much more difficult one.

I wish I had realized that I wanted to be a programmer 15 years ago.  On the other hand, at least I didn’t have this realization 15 years from now.

I was accepted to Hacker School, and today marks the last day of the first month (out of three) for my batch of students.  A fitting time, I think, to reflect on the myriad of concerns burdening the fledgling programmer.  I have heard that it can be difficult to teach or relate to programmers with less experience, and so my window of opportunity to relay insight to the beginner or advanced-beginner may (hopefully) not last much longer.  Now seems a perfect time to document my journey thus far.

Choosing One’s Tools:

After I submitted my application to Hacker School, I decided it would be wise to start learning a programming language other than the VBA used with Microsoft Excel.  Choosing a language, at the time, seemed almost entirely arbitrary.  I understood that languages which have been around for longer, such as C++, have much more community support, but likewise have had so much development in so many different directions that setting out on making one of them a primary language can lead to a big mess, which is not ideal for a beginner.  But personal programming hero Tarn Adams uses C++, and not knowing much about other languages but still feeling the need to start learning a language in depth as soon as possible, I began to delve into C++.

When I received my acceptance letter, I was advised to stop learning C++ and start learning “Python or another modern scripting language like Ruby.”  I yielded to the wisdom of my future teachers/facilitators, and started taking the free, online course, “Learn Python The Hard Way.”

I do think it was wise to divert from C++, but I am very glad I started learning it first.  C++ is statically typed, which means that when you tell a program that you’re going to store a value in a variable, you have to tell it what kind of value it is.  This makes sense, since the computer has to reserve a certain amount of memory to store that value.  Python and other modern languages are dynamically typed, meaning they make the determination about what kind of value you want to store on your behalf.  That’s convenient, but if you’re like me, you don’t want something doing something for you unless you understand how it’s doing it, or even that it’s doing anything at all.  Had I started with Python, how long would it have taken me to understand variable- or object-typing?  Likewise, how long would it have taken me to understand how arrays/lists work and how they are normally stored and indexed in memory?  I don’t just want a language to understand what I want to do and do it magically; that’s only making me a slightly better programmer in that particular language, but not a better programmer as a whole.

After a couple of months of learning Python, I honestly don’t think I like it very much.  However, I think it was a great choice for me, personally, to learn, for one important reason: it forces me to make my code pretty (Python uses white-space indentation to designate code blocks, as opposed to something like braces).  My mindset had been that the only significant factor in a program was functionality — that it worked well and efficiently.  I have quickly learned that readability and user-friendliness are just as important, especially as the programming world continues to become more and more collaborative and open-sourced.  Learning and using Python has helped me correct my tendency to spew out a maze of nested statements, unreadable by anyone but myself without focused, time-consuming study.

I’m going to stick with Python until I can safely say that I know the language “well.”  It’s an arbitrary word, as there is always going to be much more to learn about any language, and it may take me a long time to reach the point where I can feel comfortable saying I know it “well.”  Once I’m at that point, however, I think I will start learning something more “static.”

I also seem to be one of the only people in my Hacker School batch who doesn’t have an Apple laptop (although I see a couple of Chromebooks floating around).  After submitting my application, I ordered a System 76 laptop which uses Ubuntu (a popular Debian-derived Linux distribution) as its primary operating system.  I only had a desktop PC running Windows 7 before, and I’d read that some tech companies require knowledge of Linux, so it sounded like a worthwhile adventure.  So far, I’m a big fan of Linux; this was a good decision, especially for someone nostalgic for the days of running everything from a terminal.

Choosing One’s Own Adventure:

Hacker School is an amazing place.  You can pursue any projects you want with whomever you want, and everyone seems very happy to offer their knowledge and time and energy to you in a friendly, collaborative, helpful way.  But as a programmer on the greener end of the spectrum, I crave discipline, because I will need to be employable as a programmer and I have a persistent fear that I’m not learning what I need to learn, that I’m not as good at this as other people, and that I’m wasting this valuable time at this amazing place.

There are a lot of people here (especially the more experienced folks) working on very cool pet projects.  People like me seem to pick projects specifically with the aim of learning new things or generally becoming “better” at programming, or specifically programming in a particular language.  And while spending time coding anything will make one a better programmer, I want to determine what projects will improve my skill the most in whatever areas I’m lacking.  The trouble with that is that I can’t really know in which areas I’m lacking!  Pair programming and code reviews are great, and they are a big part of Hacker School’s modus operandi, but while those activities definitely make me a better programmer in general (by pointing out where and how I should be refactoring my code), they do not quell my anxiety about my trajectory.

So far, while at Hacker School, I’ve built a Connect Four program (with ANSI graphics and a working AI algorithm), a couple of Markov chain language generators (which use different methods of obtaining a similar result), and a simple tic-tac-toe program (with AI) built for the purpose of connecting to a tic-tac-toe server some of us built in a group project.  I’ve also gone to several informal classes, with subjects ranging from networks to databases to Git to theoretical mathematics, and although I’ve learned a lot from them, I have yet to apply much of that knowledge (although I’m using Git all the time now).  I’m not certain if the classes are a good use of my time, and I’m making a stronger effort not to overextend myself, so I can focus more on coding.  But in a month of being here, I feel like I should have a larger, more dynamic, more impressive portfolio.  I’ve spent time playing around with other programming concepts, but haven’t started any real projects with them.

On the other hand, there is one other way in which I’ve been spending my time here.  A couple of other Hacker Schoolers and I have been going through the NAND to Tetris, or “Elements of Computing Systems,” course, which was recommended to me in my first interview with Hacker School and which has proven extremely worthwhile.  The small handful of us taking the course have been keeping each other in check to make sure we get through each chapter and its related projects in time, and also reviewing each other’s finished projects.  So far in the course, we have each built (in a hardware simulator) every type of logic gate starting from a simple NAND gate.  We’ve built multi-bit multiplexors, demultiplexors, and an ALU from those gates, as well as memory registers, program counters, and CPUs.  From there we’ve built programs using machine language, and built assemblers to translate that machine language into binary our simulated computers (which we’ve constructed from the ground up) can understand.  So I do have those items in my portfolio.  I was a little worried about the fact that the course seemed a diversion from my becoming better as a Python programmer, but now that we’ve gotten to the point where we are programming assemblers and will continue to move upwards into higher-language functionality, I am able to use Python to complete the chapter projects.  It is a wonderful thing to fully understand the whole body of computing at every level, and I highly recommend the course to any advanced beginner (you at least have to know enough programming to build these components in a simulator) in any of the computer sciences.  It is also very nice to have a disciplined, linear series of projects to keep my focus and help me not feel like I’m flailing for project ideas.

Persistence, Frustration, and Satisfaction:

The Connect Four program I mentioned above took me one day to write; my first day at Hacker School.  I felt like I’d accomplished something, I felt intelligent, and I felt like I was following a good rhythm of tackling something new, completing it, and moving on to the next new thing.  The next day, I decided to add the artificial intelligence to the program.

Three and a half weeks later, it works.

The code in the program for the artificial intelligence is only 22 lines long.  It’s a simple “minimax” algorithm which took me about ten minutes to read about and understand, ten minutes to initially write, and hours upon hours upon hours to stare at, tweak, test, stare at, tweak, stare at, test, refactor, stare at, and tweak some more, in a seemingly endless cycle of utter futility.  I had other students look at it, I had facilitators look at it, and it just would not do exactly what it was supposed to do.

When I made the AI for the tic-tac-toe program, I thought to myself, “Now I’ll get that algorithm working, since it’s a much simpler program!”  I wrote the minimax code, and it seemed to exhibit the exact same malfunctioning behavior.

This time, however, one of my fellow students offered to help and actually stuck with me for literally hours and hours trying to get it working.  Both of us agreed that it should be working, and since I had already spent what I felt was a ridiculous amount of time staring at very similar AI code, I was not very optimistic about our chances for success.  As we kept testing and tweaking, in the back of my mind I kept thinking that he was wasting his time, and I felt bad for wasting his time.  But some time after most of the other students had left for the day… it finally worked.

This was a huge lesson in persistence which is invaluable to any programmer.

So, of course, I now felt confident that I could just mimic what we did with that code in my Connect Four AI, and get it working without too much effort.  Feel free to chuckle maliciously to yourself at this point.

An experienced Hacker School colleague, having heard how long I’d spent trying to get it to work and how many people had attempted to help me fix it, saw it as a challenge and spent a good deal of time on it.  She got it working; apparently the issue had absolutely nothing to do with the AI portion of the code, which she’d said was “actually really elegant.”

There are days when I come home with my brain totally fried, so frustrated with how the day went and how little it seemed like I’d accomplished that I can no longer think straight.  But even these days are a testimony to the fact that I should be programming.  In every other job I’ve had, when the day was over and perhaps I felt overwhelmed with frustration, I would just shut my brain off to that aspect of my life.  I cannot do that here.  I am thinking about what could possibly be preventing my code from working even as I lie in bed.

There are several lessons here.  The first I learned is that if you spend enough time on something and do not give in to frustration and the feeling of futility… it will succeed.  But I also learned that if I felt the same way about coding as I have about my previous jobs, there is no way I’d be able to do this.  If you are unable to became totally frustrated with a program and persist despite this fact, you should not be a programmer.

Fortunately, I’ve also experienced what it’s like to get something to work.  Sometimes on the first try!

Posted in Programming | Tagged , | Leave a comment

How I Discovered I Want to Be a Computer Programmer at 31 Years Old

Note: This essay was written for an application to NYC’s Hacker School.  They don’t require an essay, but I write essays.

When I was in middle-school, we were made to buy TI-82 calculators for Algebra.  Our Math teacher quickly taught us how we could write a short program to plug in the variables for the Pythagorean theorem and the quadratic formula and quickly come out with the length of the hypotenuse or the value of x.  A couple of months later, I was distributing a crude and immaturely violent role-playing game I had made, called “Criminal.”  You started by mugging people, hoping no one would fight back until you had enough money to purchase a knife.  If you felt daring enough, you could attempt the next difficulty of crime for cash, and increase your chances of success by procuring various firearms and accessories.  The TI-82 even held up to 6 pixellated images, which I used to illustrate the different ways your character could die.  Such is the focus of a 13-year-old trying to suffer through middle school.

I kept that calculator throughout high school.  In freshman Biology, our teacher used a computer game as a botanical learning tool: the player controlled a flower, and had to decide whether to use its sugar to extend its roots (lest the water levels drop to where you cannot reach and you wither), to produce more leaves (to generate even more sugar assuming the sun is out), or produce more blossoms (the ultimate goal).  My attention faltering, I spent Biology programming that game into my TI-82.  The teacher caught me, and asked what I was doing (instead of listening to the lesson).  “Nothing,” I said.

But the student next to me ratted me out.  “He made that game in his calculator.”

The teacher came over and asked to see my calculator–I assumed to confiscate it.  Instead, after fiddling with it for a minute, he walked over to his grade book and gave me extra credit.

But when people talked to me about programming, it sounded like the last thing I wanted to do.  I didn’t really understand what it was, but whenever it was presented to me, it came across as a field of study I would never understand, for super-intelligent dorks with no personal lives (not that I had much of my own, but I was working on improving that).  I was good at Math, but I wanted to do something artistic; something fun.

I went to a small, ultra-liberal college in the Northeast, where I proceeded to pursue every artistic interest offered to me.  I came out of there with a B.A. in Theater and the ability to sing in German.  The following years, back home in Nashville, Tennessee, were a bit frustrating, career-wise.  So I moved to New York City.

Of course, setting foot in the competitive culture of The City, I realized that I didn’t care enough about theater to do it as a profession, and those that did would eat me alive.  So I started working in office administration.  I had a knack for MS Excel.

Years passed of agonizing over what I wanted to be when I grow up.  Maybe start a business?  Maybe get into political activism on a professional level?  Perhaps attend rabbinical school?  All the while, I worked jobs for which I had no ambition… but once in a while getting enormously excited about something like learning about the existence of the SUMPRODUCT() function in Excel and how much more dynamic my spreadsheets were going to be.

Fairly recently, a series of discoveries has opened up my eyes to who I am and what I should be doing.

1. I found out about Dwarf Fortress.  It actually started out with being dissatisfied about Blizzard’s long-awaited Diablo III, and following their development logs in hopes that they would still be able to make the game what many had hoped it would be.  I lost that hope eventually, but I did pick up the habit of reading dev logs, which I had never done before.  Soon after, I started playing a small resource-management game, called “Towns,” still in beta, and actively followed and contributed to the forum surrounding its dev log.  I found myself absorbed in finding out what fixes and additions the sole coder was able to put into the game every day–even more than I was in the game itself.  It was on this forum that someone told me about an ever-developing game already over ten years in the making which I had somehow missed, called “Slaves to Armok: God of Blood Chapter II: Dwarf Fortress.”  It is programmed entirely by one man: Tarn Adams.  It is presented entirely in Code Page 437 (“extended-ASCII”) characters, of which I had been fond ever since the days of playing MUDs on dial-up bulletin boards.  Its code had been given to the Museum of Modern Art’s permanent collection.  It is impossible to win, has a deeply invested fan-base, and is detailed to the point where the generated history of any game-world is often just as engrossing as the game itself.  And it changed the way I thought about programming.

Coding suddenly did not seem like such a distant and otherworldly practice.  I read the dev logs, I listened to the podcasts where Tarn talks about his progress and how he’s going about coding it all… and I realized that I loved hearing about it, and it all seemed totally within my grasp.  Each step of coding did not sound so different from what I used to do on my old TI-82… but I had never really thought of that as programming.  I began exploring this idea.

2. I learned some basic VBA.  I figured that I had already exhausted my knowledge of basic Excel, and I could learn VBA under the premise that it could help me better manage data in my current job.  It was a somewhat flimsy excuse, as my job mainly involved contract processing and not a whole lot of data analysis… but the data part was the only part I enjoyed doing.  Some very accessible and free websites on learning VBA are already out there, so I picked up the fundamentals very quickly.  It was not so different from whatever language the TI-82 used.

In learning VBA, I also realized how friendly and cooperative the world of coding seems to be.  Help forums would be filled with multiple solutions presented by experienced programmers with absolutely no other agenda that wanting to assist those still learning (and, perhaps, to show off their knowledge).  This was a marked difference from just about every other profession I had explored.

3. I found out about Project Euler.  Project Euler is a website with a few hundred math problems for programmers to solve, and subsequently share how they solved it.  Most of the folks on it use “real” programming languages, but I wanted to see if I could do the same thing with the basic stuff I knew about Excel’s VBA functionality.

Every time I successfully solved a problem, I would literally experience the joyful thrill of accomplishment for hours afterward.  It did not take long for me to realize, finally: this is what I should be doing.  I should be a programmer.

There are obstacles, of course.  It seems that most people in programming have this realization much earlier in life, and focus their college education toward that end.  I’m in my thirties and know some VBA, which I gather is barely considered a legitimate programming language.  Entry-level programming jobs also seem to merit a salary a bit less than I am accustomed to making, so I would need to advance myself relatively quickly in order to support myself and soon-to-be wife.

But the more I program, the less anything else seems to be an option.  I’ve been working on a VBA chess program for the last couple of weeks, on the little free time I have on some nights and weekends… and I find myself needing to be careful not to stay up all night coding.  When I’m done with my day-job, I immediately forget about the work I’ve done and the work I have to do for that job.  When I stop a coding session, I can’t stop thinking about what to attack next and how to attack it.

My next step needs to be learning new languages, and I feel confident in tackling that, and in a decent amount of time.  SQL and C++, I think, are going to be my first foray into broadening my abilities.

Hacker School is only for those who already know how to program, to become a better programmer–not to learn how to code.  I know I’m walking that line.  But based on what I know about Hacker, I am convinced not only that I meet the qualifications for acceptance, but also that I would thrive in such an environment, and that it would be the best way to become the programmer I wish to become.

Posted in Uncategorized | Leave a comment

No Longer A Fatalist Marksboy

It’s been a while since my last post, but I have been busy.

Mostly it’s because of this.

What is this?  Well, it’s an audio recording of my Bar Mitzvah speech, complete with the TFM-style images I used as projections for the occasion.

That’s right.  I’m a 31-year-old man, and I just “officially” became a Bar Mitzvah.  If you’re curious as to why, I highly recommend listening to this, the audio recording of my illustrated speech.

The speech is under 15 minutes, and I hope you find it enjoyable.

In fact, forget all of those links.  I’ll just embed the thing for you:

 

Back to more regular postings soon.

-Matt

Posted in Uncategorized | Leave a comment

Counterparting the Proverbial Sea

The first thing one should understand about Binaryism is just how prevalent binary concepts are in the universe.  Most of the things we think of as having “opposites” have binary counterparts, and the “opposite” is often not an opposite at all, but rather the binary counterpart.  Hot and cold is a prime example.  We have a tendency to think of them as opposites, but heat is just thermal energy, and cold is merely the absence of that thermal energy.  It’s such a good example that even the theoretical complete absence of any heat whatsoever is called Absolute Zero.  We can only ever approach Absolute Zero, but never actually reach it, as particles must always, to some extent, be moving.  Zero is the limit of the function.

Such is the case with most of our Zeroes, as we shall see.

So hot is quantifiable, and cold is the absence of that quantity.  What other common, quantifiable concepts share this binary relationship?

Quantitative Binary Relationships

1
Hot
Fast
Big
Hard
Opaque
White

0
Cold
Slow
Small
Soft
Transparent
Black


Et cetera.  Pretty simple.  It can get trickier, however, when two concepts cannot be quantified, but may still be qualified as the 1 or 0 in a binary relationship.

Qualitative Binary Relationships

1
Male
Linearity
Falsity
Ugliness
Creation
Wholeness

0
Female
Circuity
Truth
Beauty
Destruction
Emptiness


Et cetera.

You may have noticed that, up until just now, Binaryism seems to share much in common with the premises of Boolean Algebra.  It will continue to show strong similarities.  However, whereas Boolean Algebra designates 1 as “true” and 0 as “false” (as anyone who has made the most basic attempt at programming should know), Binaryism flips it around.

Why?

In Binaryism, 0 is always the ideal, the natural state, before corruption.  With theoretical states such as Truth and Beauty, it is the goal we strive toward but can never reach with 100% completion.  With real states such as male and female, in addition to the general shape of our primary sexual characteristics, it is also true that a fertilized creature-in-development’s default state is female, and it is not unless androgens are introduced that it will develop into a male.  Likewise, this will not occur unless the Y chromosome is paired to the X.  As with Boolean Algebraic disjunctions, 0∨0 (or XX) = 0 (female), and 0∨1 (or XY) = 1 (male).  1 is the corruptor…

…but it is also the creator, as we shall see.

Posted in Uncategorized | 4 Comments

Remedial Math

The time has come to start talking about something I developed years ago, with the original aim of weaving it into a sci-fi/fantasy series of novels.  I’m talking about a branded philosophy, and whether or not I ever finish those novels, I’ve decided to begin to discuss this this philosophy independently.  Ayn Rand did this with her “objectivism,” and L. Ron Hubbard did this with Dianetics, and I see no reason why I cannot expound upon my philosophy and, perhaps, use it in fiction at a later point.

Unlike Rand’s and Hubbard’s, however, my philosophy is not practical, but merely perceptual.  Rather then propose a manner in which one should behave, I aim to fabricate a lens, which may be used to achieve better focus on certain aspects of life.  And if something is already in focus, you shouldn’t need to use a lens.

Although I created this philosophy for the purpose of spicing up a story, it is based in many truths.  I began coming up with it many years ago, when I was an atheist, and it lost no validity or applicability when I later became a believer in G-d.  In fact, the very meat of the philosophy helped me shed my doubts about the existence of G-d.  It involves mathematics, physics, the nature of life, and how they all interact.  The truths on which it is based are very simple–even oversimplified–but that’s sort of the point.

Like many things mankind creates in this modern era, it is comprised of two fundamental elements: Ones and Zeroes.  For many years now, I have taken to calling it “Binaryism.”*  I am open to other suggestions.

I am not going to illustrate the entirety of Binaryism in this blog post.  My plan is to get into details over time.  For now, however, I will explain the gist:

Most people are familiar with the concept that ideas may be represented in binary.  For example, a simple computer program will use “1” to state that a command is true (and to be run) and “0” to state that a command is false (and to be ignored).  In fact, you have most likely noticed that most on/off switches on electronic machines are either switches with a circle, or “0,” to represent the “off” side and a line, or “1,” to represent the “on” side, or buttons labeled with this symbol:

or, alternatively, this symbol, which toggles between “on” and “standby” rather than “on” and “off”:

According to an NPR article from a couple of years ago (thanks, Wikipedia!), New York City even used the standby symbol on condom wrappers.  I don’t know how stifled your imagination might be, but the average mind is dirty enough that they see this symbol and are immediately reminded of sexual intercourse.  This leads us to another obvious 1/0 dichotomy in addition to on/off: male/female.

The basic premise behind the Kubrick film “Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb” is that everything man does and creates is sexual at its core.  To emphasize this, Kubrick shows the opening credits over a scene of a tanker refueling a B52 bomber in mid-flight… which happens to look exactly like they are having sex.

The things we create often carry a binary designation.  Electrical cables either have male ends or female ends.  Some things are made to create, building toward a structure with its own whole integrity (like an integer, represented by “1”), and some things are made to destroy, leveling back to nothingness, or “0.”  Almost everything can, in some way, be designated by 1, 0, or a composition of 1s and 0s.  This applies to both physical structure and theoretical concept.

My aim, in the related posts to follow (interspersed with “normal” posts), is to examine, in detail, what structures and concepts have these binary designations, how this can be applied in a philosophical perspective, why humankind has a tendency toward this dichotomy, and what the implications might be.

And don’t worry… there will still be silly cartoons.

-Matt

*The word “Binarism” is already a word.
Posted in Uncategorized | Leave a comment

Buying the Bridge Between Reason and Compassion

People trust what they know.  We get used to something, and we trust it to continue being and behaving the same as it has been.  We tend not to think about the fact that nothing on this Earth will be and behave the same forever.

We drive over a bridge, and trust that it will continue to support us.

We fill our cars with petrol, and trust that we will continue to be able to buy as much of it as we can afford.

We hear someone who appears intelligent make a statement, and trust that it is fact.

But we know that every bridge will eventually crumble, we will run out of gasoline, and even the smartest person can make a mistake or lose their faculties to senility.  We are a trusting, gullible people.

Except, we’re not really.  I mean, I know I’m not.  And I’m not sure if I should be ashamed or proud for being so skeptical.  When someone solicits me with anything, my immediate reaction is to think that they are trying to scam me.  When someone says they have a special deal for me, I think they’re trying to rip me off.  When someone asks me for money, I don’t even trust that they actually need it.

But I can’t know.  In the fashion of a true fatalist marksman, all I can do is take aim at what is true as best I can, and know in the back of my mind that my deduction might be totally wrong and my actions irrelevant.  So why does that so often make me a distrusting tightwad?  Shouldn’t the manifestation of this philosophy cause compassion to triumph over caution, when compassion is always good (even if unmerited) and the negative consequences of throwing caution to the wind (with the exception of caution in morality) are existentially irrelevant?

It’s true that bridges don’t fall often, and people can be generally rotten, so perhaps this is just reason prevailing.  But don’t rotten people also deserve compassion?  And how did I suddenly mix up compassion with trust?  It’s as if I would drive over a bridge that I thought had a 50% chance of collapsing just because I thought it deserved a chance, and maybe the bridge wouldn’t be in such disrepair if people just drove over it more often.

Perhaps I simply need to learn how to differentiate between the different consequences of allowing the benefit of the doubt.  At what magnitude of damage does that threshold lie?  And how does one learn such a thing?

And if you tell me, will I believe you?

-Matt

Posted in Uncategorized | Leave a comment

Disciplinary Action

This post is merely to state that I have several real posts in the works, which should be ready soon.  With pictures.

Now that I am unemployed, and should theoretically have all the time I could ever want to write new posts and work on this blog, the reality is that it has become much, much more difficult.

Some people are able to discipline themselves into waking up every morning at the same time, creating their own routine, diligently laying out their own schedules, and setting goals with specific time-frames.  I am not one of those people.  I have always succeeding in disciplining myself by forcing myself into situations where I am forced into a routine.  For example, if I set an appointment with someone where I will have to meet them at a certain time, this will force me to be up, ready, and out the door in advance of that time.

I guess all that amounts to is the idea that promises made to others are easier to keep than promises made to oneself.

I can do this self-discipline thing, I think.  It will just take some time, and some adaptation.

Pretty sure I also need to make this blog a lot funnier.

-Matt

Posted in Uncategorized | Leave a comment

The Good, The Bad, and The Gross

I read a recent article in Time Business which summarizes several experiments on cheating and stealing, giving clues regarding the psychological distance between “no, I won’t” and “ahh, why not?”  It’s a short article, and pretty interesting, but one thing in particular caught my attention.

The author, Dan Ariely, relays a story he heard from a student, who heard a perspective on morality from a locksmith.  I will give you a very trustworthy fourth-hand account: doors have locks for protection against 98% of the population.  1% of the population would not steal from someone even if presented with the opportunity, and 1% would actively attempt to steal from you, but the remaining 98% would refrain from stealing only if they were not presented with a certain amount of temptation.

This is interesting to me, because I think most people tend to dichotomize.  Folks are either judged as being “good” or “evil.”  If you’re one of the “good people,” you don’t steal, you don’t make other people feel badly, you’re polite, you treat others with respect, etc.  If you’re one of the “bad people,” you cut other people off in traffic, spit on the homeless, cheat on your spouse, and murder people on your spare time.

People like to think of themselves as being one of the “good people.”  This is why people tend to forget about the third group: “most people.”  All things being equal, you are most likely one of the “most people.”

“Most people” are good to their families, show respect to their friends, and would only take morally questionable actions if they felt forced into that situation through understandable necessity.

My rabbi often points to what I think of as the “Godfather” analogy.  A mafia boss may ignore governmental law, encourage the demand and sale of contraband, and order those opposing his goals to be murdered.  But he treats his own family well, goes to confession, says his penance, and gives to charity.  He sees himself as “good” in his own eyes, and his own family sees him this way as well.

In other words, there is danger inherent in subjective morality.

But “most people” are guided by subjective morality, and always think of themselves as “the good guys.”  Even when entire nations turn into imperialistic, genocidal war-machines, it has often been justified as being part of G-d’s plan for that nation which the populous must make manifest (or, you know… risk going against G-d’s will).  Nazi Germany did it in relatively recent history (and in a horrific manner), but there are innumerable historical examples.  England did it with Ireland in the 1500s.  The United States did it with Mexico in the 1840s.

Determining objective morality is a tricky thing.  It’s easy to say that one can follow a morality dictated by G-d or some religious scripture, rather than our own sense of right and wrong, but it’s also easy to see how flawed that can become.  G-d’s will may be an objective source of morality, but people hear it with their own subjective interpretations.

To argue about how to determine the objective difference between “good people,” “evil people,” and “most people” is an extremely worthwhile endeavor, but it is not mine (at least, not right now).  My point is more practical: whether or not one is morally righteous, one should never make that assumption.  Even if you are a “good person,” it’s safer to think of yourself as “most people,” and that humility is essential to ever becoming a “good person” in the first place.

The concession of “I could be wrong about this” seems to be one of the hardest things for human beings to say, especially when it comes to our own decision-making.  For a candidate for governmental office, such a statement would be political suicide.  But by that same token, the argument “I’m right and you’re wrong” is not a convincing one–if anything, it most often serves to fortify the ridiculous partisan divide.

So what can we do, but strive for our own personal humility, and hope it becomes contagious?

There’s no way I’m wrong about this.

-Matt

Posted in Uncategorized | 1 Comment