Thursday, December 6, 2012

Hacker Culture

Although one of the most prominent critics of online education is the lack of in-person bonding, programming culture thrives in the virtual world. Hacker culture is legend, probably best proven by how hackers are treated in movies. For students, this community is where they find solutions to their programming problems, guidance and good sources, and teammates. For established programmers, they find... well, the same.

The existence of such an online culture doesn't necessarily prove that purely online interaction can successfully result in learning opportunities and inter-personal interaction for everyone though, as this culture's audience is self-selectively comfortable with online communication. This self-selectivity is one of the reasons that CS attracts a very biased group of people; if you can't learn online well, learning to program without a real-life teacher is going to be difficult.

One of the pinnacles of CS culture is the hackathon--a group of programmers and engineers sit down in groups for 24 hours (or some long length of time) and hack together some project. Usually this is organized and paid for by a company (Facebook, Google, Microsoft) looking for innovations built on their product or just hoping to attract possible brilliant future employees. Hackathons become a hub of recruitment, networking, and learning.

The virtual hackathon, an inevitable invention, takes on a slightly different from the physical version. They often transform into week- or month-long competitions, like Google's Science Fair or other online competition. Online loses the close-knit and fervent atmosphere hacking seems to require, in favor of mysterious and intimidating super-talented coding championships. While hackathons and hacker culture can be very inviting in real life, the virtual equivalent frightens away most outsiders. At least, this had been my experience.

This shift between styles of hackathon points to a difference between the virtual and physical cultures of CS. I imagine this slight difference affects not only this field, but many others that attempt to branch out into the virtual space. This brings up an unanswerable question about the effect of online education on the future face of human knowledge.

I leave you on that positive note.

Friday, November 23, 2012

The Future Face of Code (is Now)

In my eyes, one of the greatest obstacles in learning to code is the problem of the 'delayed response.' That is, a programmer has to envision what their code will do while writing it, and only after writing a good portion of the program can they see the result. Projecting the effects of the code you write becomes an essential skill in programming, but only gained after sufficient experience.

This makes learning to code tough and learning syntax like learning a foreign language (fun fact: Columbia School of Engineering accepts a CS class as the foreign language requirement). Instantly seeing the result of using a function instead of memorizing its purpose would be a much better way to go.

Very recently, a couple websites have started attempting this, most practically, the famous Khan Academy. Their introductory video for learning CS outlines a very different approach to online CS education, one that has finally started to customize a learning environment for the subject. In this case, instead of supplying lectures and expecting the student to work through the examples on software meant for seasoned programmers, the website built the entire programming interface into the website. Not only does the example code come with a voice explanation of everything, but changes in variables and lines are instantly reflected on the canvas to the left.
http://www.khanacademy.org/cs/1-welcome-to-codecanvas/882454257
To me, this looks like the beginning of a great approach to teaching programming.

However, the man (Bret Victor) who is cited as inspiration for this approach disagrees with it strongly with it:
http://worrydream.com/#!/LearnableProgramming
His argument outlines an entire mindset towards programming. He rejects Khan Academy's explicit encouragement of the 'play with this, see what it does, and that's learning' approach to teaching to code. Instead, "programming is a way of thinking, not a rote skill" conveyed through teaching simplified versions of Javascript. He proposes that instead of helping a student learn what a function does, the purpose of the function should be clearly labeled. Not only labeled, but easily stepped-through, the hidden data should be easily visualized, and programming flow should be explicit. For concrete examples, see the link above.

This shifts the focus of learning to code from learning a foreign language's words to understanding underlying ideas. There is no concrete proof that simply teaching syntax like Khan Academy doesn't force students to think in the abstract way Bret Victor wants them to, so this subtle difference remains a split in ideology.

One point Victor makes that I completely agree with is the constant desire to simplify programming languages ('Englishify programming') for the students, with the assumption that programming is hard because it looks so alien. Changing syntax to look more like natural English is not a solution for teaching CS; it's just an attempt to skip the teaching process and also built on the assumption that the 'words' in code are foreign and learning them constitutes learning CS. One thing the human mind is good at is remembering a small number of names--the difficulty here is teaching how and why to use them.

As a final note, I attach Victor's talk that inspired Khan Academy. It's an hour long about the interactive coding interface he made.
http://vimeo.com/36579366
The first segment is similar to Khan's demonstration of interactive code, but the program he shows between 11 and 16 minutes into the lecture blew my mind. He makes Mario. Go, watch it. I can't explain it in words nearly as well as actually seeing it. The latter parts delve into abstract programming (minute 16-23), applications to engineering diagrams (23-28), how computing as we know it is vestiges of its monitor-less ancestors (28-30), intuitive animation (30-34), and more abstract implications (the rest). I recommend listening to the parts related to your interests--it might be its future.

Monday, November 12, 2012

Case Study: Codecademy

So let's be more concrete about this whole 'teaching CS online' thing. Knowing the differences between sites is interesting, but going in depth is funner. Let's do this.

First off, found a site that randomly pulls up a story of how or why someone learned to program. http://ilearnedtoprogram.com/
I like how none of these stories mention learning to code through one of these sites. Another thing I noticed is that most female stories say she learned by falling into a CS class in college, later in life than most. The reasons one learns code ranges from having a machine and boredom, parental or teacher push, or want for a better job, either self-motivated or encouraged by a teacher. Only the first motive really applies to online websites. I wonder whether online education will expand programming's demographics, what age one would feel compelled to try (and what learning differences there are), and what motive would push one to really learn.

The site I heard about first as a kid is Codecademy.
To start off, the homepage is headed by a virtual programming environment, inviting visitors to type their name in quotes (to make a string). They step through the basics of writing and error messages; after a couple lines, it invites you to 'try the next section'. This is very inviting, not putting any bars in the way of deciding how to continue, and very satisfying (they keep saying Good Job!). Anyone even marginally interested is easily pulled into learning, without being asked for email until later, to "save your progress".

After the short intro, you're redirected to the designated learning area, which has a text explanation on the left -hand side and a space to code (with examples) on the other. Integrating coding into the same webpage as the textbook text creates a much more fluid learning environment, at least to me. Expecting the student to treat the website as a textbook and code in its own, separate space, strangely parallels the usual isolation and disjointedness most CS education has for newbies. An inhuman pile of texts and a boatload of self-motivation isn't what we should expect out of all interested students; this only perpetuates the existent diversity issues.

So the layout is nice and very inviting, but the content is more questionable. Every lesson is a simple explanation of the concept, example, and 'now you try!' It becomes a game of learning syntax, a literal how-to-program, but doesn't focus on underlying ideas or style. It teaches shallowly. Whether Codecademy can be considered a good learning site, whether one even needs to teach deeply, is one that brings up core philosophical/education questions, ones that might actually be answered by studying the effect this learning has versus other models. The prospect of being able to answer the traditionally unanswerable questions through analyzing online education is something I'm really excited about.

Table of Contents of CodeCademy:
Strings
Math
Error
Calling methods
If statements
Module
Substrings
Variables
and so on

Monday, November 5, 2012

Evolution of Code

A common conception--if that's the proper word--is that code is alien, a foreign language difficult and tedious to learn. A certain assumption of weird magic is sometimes implicit. As mentioned, I dislike this opinion. While programming languages are based on the counter-intuitive zeroes and ones running around the circuit board, the evolution of programming languages have tended on the more intuitive, creating languages made by humans for humans. At least, that's my hypothesis. In this post, I want to trace the trends and types of programming languages to see whether that's true. In the mean time, here's a cool graph. Also, an easy history.

Binary is the basics, the language of the processor. While some well-trained programmers understood how to navigate this world, machines soon each had assembly languages that named particular series of 0s and 1s for convenience. Names are fundamental to language and how humans think about the world, so it's no surprise code immediately took this direction. Finding the connection between binary series and these real-world concepts is the first step towards meaningful programming, but the only real transformation in this step is how the programmer perceives the code. Already expediting this process were forward-thinking project leaders concerned with making code accessible to those without an expert background.

The first real higher level language is Fortran, first dubbed Speedcoder and developed primarily by John Backus. The underlying difference between Fortran and assembly was a compiler, created and advocated for by the great Grace Hopper. Compilers translates code in a higher-level language into the appropriate list of assembly commands, allowing code to expand beyond line-by-line memory manipulation. Relative to current languages, few conveniences were made available in Fortran, but the ability to code and manipulate variables (a move towards a formal but familar language) was revolutionary and intuitive for scientists.

The technical motive to shift away from machine level was prompted by the machine-specific nature of code; compilers let one code according to intentions instead of a machine's technicalities. For the trade-off of efficiency, higher level languages like Fortran are (almost by definition) more similar to natural language, disposing or hiding technicalities like registers, call stacks, or memory addresses. In fact, in looking for a definition of a high-level language, the general consensus trended on progress towards natural language, which is delectably accurate. But the move to higher-level was not due to a potential gain of programming efficiency; it was to make code more people-friendly. Example: Grace Hopper saithe computer should “learn how to respond to people because I figured we weren’t going to teach the whole population of the United States how to write computer code. There had to be an interface built that would accept things that were people-oriented and then use the computer to translate to machine code.”
The practical nature of Fortran was quickly proven when it cut down lines of code by a factor of 20, transforming the role of a programmer from an elite and sacred oracle to a an accessible job.

Concurrently (or at least a couple years after), an alternate approach to programming was being formed. LISP, created by John McCarthy, sought to characterize problems with functions and lists, shifting the focus away from manipulating memory  and towards creating a practical notation for math. Similar motive than Fortran's, but conceptualized very differently. Built on top of lambda calculus, this language was unorthodox and far ahead of its time, inventing recursion, garbage collection (automatically dealing with memory), and dynamic memory allocation while challenging the canonical approach to problem-solving. The purest version of LISP is theoretically one where all items are functions, but the practical version includes all the numbers, strings, and basic types programming languages are expected to have (a detailed look at the differences here). LISP was (and sometimes but to a lesser degree, still is) considered one of the best AI languages and was used fairly often to teach with, which in itself is interesting. The relation of lambda calculus and LISP to the arguable intuitiveness is interesting but too deep to delve into.

Object-oriented code features another direction for code. Conceptualizing large projects such as games and software as an interlocked system of objects makes large projects easier to manage and control. Programming languages like Java are so popular because it's used in large corporations and it lends well to programming little games for students.While function- and object-oriented code are currently considered opposites, the idea for objects came from LISP's atoms like string. Smalltalk, Eiffel, C--they all were forerunners in this ideology.

I hold these three programming trends to be the most important, but it inevitably leaves a huge amount out. Sometimes explicitly and sometimes less so, most significant changes in programming language have been explicitly stated as an attempt to open up the field through more intuitiveness. Based on the small sample size, I will sit happy that my thesis is mostly accurate.

In many learning languages (i.e., languages made for/good for teaching programming), teachers aim to find a program that sounds as similar to English that they can. This makes me wonder whether higher-level programming languages are going in that direction or the conception of natural language as the ultimate form of expression is exaggerated.

In fact, Columbia school of engineering counts programming as a foreign language. Not sure how to take that.







Monday, October 29, 2012

CS Online Classes

Comparing and contrasting the various online classes that exist.

Basics:
MOOC is the biggest buzz word right now, coined in 2008 and suddenly popular this year. It stands for Massive Open Online Curriculum, a program that aims to teach huge amounts of people (often in the hundreds of thousands) for free. Each student simply follows a class online, taught with anything from video to text. Some assign homework, because doing things yourself is pretty important for learning, but most is automatically graded (due to the scale), which brings into question whether MOOCs could teach creative or writing courses as well.
Most online education sites (MOOCs in particular) don't include the very important 'study group' environment, where a small number of students work through material together. This is the main rift between the two kinds of MOOCs: broadcast, where the individual is an island and absorbs the information alone, and connectivist, where there is a focus on peer-to-peer learning in small (virtual) settings.


Udacity
While some MOOCs existed before this one, this Stanford-founded site surprised the world with 160,000 virtual students for an AI course taught by Sebastian Thrun (the founder) in 2011. The main driving force behind this sudden popularity is probably Stanford's and the cofounder's (made the Google self-driving car) reputation. Whether these big names actually brings better teaching is debatable, but there is definitely some form of cool motivation when a google co-founder talks about search engines right before you learn to program a search engine (this is the first step in the beginning programming class).
The class doesn't require you to sign up to view material, which is mainly video explanations with periodic quizzes, but having an account allows you to save progress, grades, and participate in the class' forum.

Coursera
Riding on the popularity and media attention of Udacity, Stanford released a second platform in April 2012 with classes in computer science. This site has attempted to create one of the best structured learning environments online, and is commercial. It  takes real classes, some of the best from the best universities, and creates the virtual equivalent. Unlike Udacity, there's a specific set of weeks during which the class goes on, students have to turn in assignments according to deadlines, and some universities give certificates or credit for completing the class. 
A way they envision to gain money is not from ads or user fees, but to allow companies to, for a price and with the permission of the student, know how the subject in question did in his or her classes. Additionally, Coursera provides tutors or counselling for a fee.

MIT addressed worries of the commercialization of education by starting this program in March 2012. The  pilot class (a beginner electrical engineering class) launched in March and the first set of real classes was launched this month (October). One article talks about the feedback they received from the pilot course, which is interesting.
1) a huge amount of people joined, but a small fraction completed the class
2) the top four countries involved were the US, India, the UK, and Columbia
3) students really liked activities where they could draw on a virtual chalkboard, saying it helped them understand better.
They assigned weekly assignments, including video lectures, readings, and homework. The only peer-to-peer interaction was through forums. Harvard, Berkeley, and the Texas University system has also elected to join, creating a larger program called edX this year. It is sometimes mentioned that edX is less interested in creating a good class than experimenting with this new medium.


Khan
Khan Academy is a virtual library of a wide variety of class lectures, customized for the internet with its voiced-over chalkboard videos. There is no class, no community of viewers, but an individual can find well-explained talks about almost any subject. This is a very different approach to learning--totally unstructured. It's fairly impossible to measure the success of this website, but it is reminiscent of the internet model of learning (also seen in youtube and TED talks, among many).
CodeAcademy is a completely CS-oriented site similar to the unstructured learning sites. It has a variety of tutorials, just text and occasional video, that teach a small variety of programming topics. No tests, surveillance, or encouragement to think critically or creatively. However, it's one of the few good places to learn to code online and it's fairly known and commonly used by young curious students.

Stanford Engineering Everywhere
Set up to simply transmit lecture and assignments of popular Stanford engineering courses through the internet, a concept that has been around since before the internet (outlined earlier in passing). Seems like a lot of universities have this sort of website, but I have rarely heard of them used outside the university. Since this is completely self-motivational (i.e., not outside pressure to help you through) and there is no feedback on homework, most people doubt that this kind of site is the future of online education. But hey, who knows.

Monday, October 22, 2012

History Part 2: Bricks and Mortar

In the last post, I talked about three different foundations to online education: the political changes that shifted the role of the university, early attempts at using technology for education, and CS's slight shift to more intuitive programming. These are important foundations to understand the current state of CS education and the ideas surrounding its shift online.

To continue on the topic of the history of the American university:
After World War 2, the US turned its attention to Russia. While the government was already funding some university research, Sputnik's surprise launch into space shocked the country into rethinking its approach to science and technology research. According to this article, as early as the 1950s Bush decided that private/commercial R&D wouldn't lead to the necessary developments that would keep the US ahead. Funneling huge amounts of money to select institutions, 13 universities getting 85% of the money, the government encouraged all sorts of science and technology research and education.

This trend worked well until the so-called Permanent Tax Revolt, triggered by rising property prices, where tax cuts emerged as consistent political fodder. Since the 1980s, politicians on both sides have felt obliged to gain favor by cutting taxes by cutting programs such as education funding, forcing universities to restructure (link shows how amount paid to education is now less than maintaining prison). We see this a lot in the current election. This restructuring placed universities under an economic spotlight. I.e., to best economically justify higher education's existence, universities were judged by how well paid they can get their alumni to be.  The effects of this second change, more politically charged and strenuous, is at terms with the original vision of higher education.

In a matter of speaking, this is where we stand with the university system. So why is this history, only tangentially related to CS education, so important? For me, it serves to show that the institutions we have now, our model of learning, is largely a result of politics, money, and tradition--a system that's now being forced to handle many more people with higher standards, less money, and more scrutiny. On top of this governmental/societal change, the technological revolution has also found itself at odds with the no-cheating, individualist learning environment of the university.

The history also helps us understand the general approach towards this new age of education.
The proponents of the digital revolution believe that the internet will bring universal, egalitarian, high-quality learning. Whether it be a videotaped traditional course or a MOOC, the possibility to allow anyone, anywhere, access to top professionals' classes seems to promise a system driven by learning for learning's sake, away from the dirty world of money and politics. Even while companies will be able to commercialize learning more intensely, this money will only serve to force various classes to be better than another, raising the quality of learning with the free market.

This university system is not easily changed. While teaching age-old subjects has been brought down a long line of teachers working off a long history of classes and teachers, CS has no real prior population of teachers or curriculums to lean on. Many students self-teach, not particularly improving this trend. In fact, this has lead to a decrease in CS education outside the university--so few teachers know how to teach CS that they stay in university or get quickly hired for a great deal more money than a school could afford.


On Cold War finances and policy: http://cshe.berkeley.edu/publications/docs/PP.JD.Sputnik_Tech.2.99.pdf


Wednesday, October 17, 2012

The Early History of (Digital) Learning

tl;dr: Running through the history of technology's effect on knowledge, we learn a little about formal institutions. I will also pretend you care enough about each link to click on all of them.

To characterize the current changes in education, some draw parallels between the invention of the internet and that of the Gutenberg bible/movable printing press, the enabler of mass-printed books. (Actually, an entire MIT class is based on the theory, but not without its critics.) The explosion of the sharing of knowledge after the Gutenberg bible is cited as the first step towards the democratization of knowledge--it allowed people outside academia to learn. Whether or not this parallel is fair, this medieval revolution planted the seed of the idea that education is a basic right, or at least can be.

Jump forward to the 20th century.

Predating the internet, a handful of attempts were made for spreading knowledge digitally. The first TV-broadcast classes, on first public broadcasting channel, were made by University of Houston in 1953 and followed by some other universities. An interesting program called PLATO from the University of Illinois helped council students through their academic career, helping establish e-mail, chat rooms, paint programs, emoticons, multi-player games, and the first online community. [More examples of early birds.].

Strangely enough, these spotty inventions were symptoms of changes in the greater role of the university. The G.I. Bill, passed for WWII, subsidized war veterans' expenses in education (among other things). A huge influx of students flooded into universities, changing higher learning from a minority activity to general(ish) public's choice. From there, some scientists starting inviting prior outsiders into their classrooms, through TV-broadcast lessons, and some helped the flow of new, uninitiated students by automating their counselling process with PLATO (which spread to many campuses, and even to Africa). To show the ridiculous degree to which enrollment changed, have this excitingly colored graph:


Meanwhile, CS's foundling field full of intellectuals and mathematicians started formulating approaches to think about and teach CS. Perhaps the most important shift was towards Object-Oriented code--instead of sequentially giving the computer commands, programmers would organize and manipulate information in objects, similar to how humans conceptualize the world (other reasons). It also allowed graphics like windows and the mouse cursor to become common.

While a couple universities' and corperations' online courses got developed, things only started moving when the internet hit the general public with the release of Mosaic in 1993--an accessible browser which let laymen surf. I skip all the 'firsts' spread out between the '60s and '80s, such as the first online curriculum, college, or commercial interactive videodisc are the random first stones in the avalanche I'll delve into later.

TO BE CONTINUED



A last thought before I close:
The trend that universities start these new technologies is clear. It's interesting in the context of online education--would  the same innovations happen in a digital sphere?