Which programming language should you learn first?

This question lies at the heart of all computer science curriculum design efforts, and it resurfaces year after year after year. One reason that it can never be answered conclusively is that the range of options, and the kinds of programming needs that are out there, change over time. Another reason is that it’s a holy war. For some folks, you might as well be asking what their favorite text editor is. For those folks, don’t.

But it’s a question of more general interest, beyond the computer science classroom. Douglas Rushkoff argues that everyone should be programming-literate, for their own survival, and even less extreme views highlight the benefits of computational thinking.

I’m not going to tell you what language to learn first, because I don’t have (and I don’t think there is) a fully general best-possible recommendation.

Lifehacker took a stab at characterizing a few common languages to help newcomers make this decision. Their programming language menu goes like this:

  • C: Trains You to Write Efficient Code
  • Java: One of the Most Practical Languages to Learn
  • Python: Fun and Easy to Learn
  • JavaScript: For Jumping Right in and Building Websites

  • … which isn’t quite how I would have done it. And I’m not sure these characterizations are even useful.

    I’m much more persuaded by this approach which points out that “learn a language” is not a single specific concept. It’s important to ask how *well* you want (or need) to learn the language.

    I was immediately struck by the parallel with learning natural (human) languages. When I’m going to a foreign country for a week-long conference, I learn a smattering of useful/polite phrases to help me get around and not be That American while I’m there. If I were to move to that country, I’d be willing to invest orders of magnitude more effort to be functional in the language. I don’t agonize over which language to learn; I learn the one I’m going to need.

    Likewise, the programming language you want to learn is the one you’ll need to have at your disposal. Work, school, implementation, or other constraints might dictate that to you. And if not — if you’re a hobbyist or just want to learn “programming” with no particular end goal — then does it matter? Pick a mainstream language (so that there are sufficient resources out there to aid your learning) and dive in!

    What to do with a computer

    What was the first thing you did with a computer?

    If you first encountered computers in a programming class, you probably learned to write a simple mathematical program, like calculating digits of pi or computing the sum of a list of numbers.

    Seymour Papert and Cynthia Solomon suggested that we think bigger. While computers can certainly perform mathematical calculations, they can do a lot more than that.

    “In the real world computers are used in many different ways. Some are programmed to fly airplanes; not to tell a human pilot what to do, but to pull levers with their own electro-mechanical effectors and to read the altitudes, airspeeds and what-not with their own electronic sensing devices. Computers are programmed to generate music or condition dogs by ringing bells and delivering meat powder while the modern day Pavlov is happily asleep.”)

    And they wrote this in 1972 (!).

    In their paper, Twenty Things to Do with a Computer, they suggested an alternative approach to using computers for education.

    “Why then should computers in schools be confined to computing the sum of the squares of the first twenty odd numbers and similar so-called “problem-solving” uses? Why not use them to produce some action?”

    The twenty things they suggest include making the computer draw pictures (they invented the Logo language, something I remember fondly from sixth grade), play video games, generate music, operate an Erector set, write poetry, control puppets, and more. This philosophy is very much in line with the motivation behind maker spaces and programs that encourage learning by doing, motivated by concrete goals and activities.

    While not every school has realized Papert and Solomon’s vision, there are great programs out there today, such as the FIRST Robotics Competition, that do encourage kids to learn to program and operate robots using computers. Introductory programming courses are being revamped to move away from math exercise type problems to those that put programming in a real context, like working with multimedia or addressing social issues.

    Going beyond what projects or applications computers can help us tackle, we can even use computers to learn new ways to think. I’m a big fan of the movement to teach people computational thinking skills. This doesn’t mean “think like a computer” in some derogatory, robotic way. It means learning how to come up with solutions that are efficient, repeatable, and generalizable. Jeannette Wing’s paper on Computational Thinking provides a great introduction to the idea, and it makes the case for why these skills are useful to everyone, not just computer programmers.

    In today’s world of cell phones and tablets and smart watches and embedded devices, the power and ubiquity of computers in everyday life is obvious. In fact, these items are so ubiquitous that we don’t even think of them as computers any more. We use them all the time as, well, users. These ideas from pedagogy invite us to use them as creators, inventors, and problem solvers.

    Co-creating in the classroom

    I’ve been reading a lot lately about participatory experiences in museums and other public institutions. One fascinating idea is that of “co-creation,” in which the organization partners with visitors/patrons to create content.

    This is a radical departure from the traditional museum experience in which displays are hand-crafted by subject experts and debut in their final, polished form for passive consumption. After reading about museums in which patrons can propose exhibit ideas, then work alongside staff to make them happen, I wondered if the same ideas could be applied in the (college) classroom.

    College students are generally cast in a powerless, passive role. They have paid the entrance fee (tuition), but the design, content, operation, evaluation, and educational goals of the class are entirely out of their hands. A couple of deviations from this pattern that I’ve observed are:

    • Choose Your Own Adventure (as a group): Students vote on a subset of advanced topics to be covered later in the course
    • Student as Presenter: Students each stand up in front of the class and educate their peers on a topic

    The latter is, unfortunately, usually seen as an obligation imposed on the student rather than a chance to express a personal interest or satisfy a personal need. Making the topic a wide-open choice makes matters worse, not better. The atmosphere of judgment and evaluation is too strong.

    How might we experiment with co-creation? How could students offer input on how to tailor the course for their maximal benefit, in combination with the instructor’s experience and knowledge?

    Here are some (untested) ideas for co-creation that I’d like to put out there:

    1. Motivation and content: Instead of assigning tasks that your best guess says will be valuable, take time to find out what students want to get out of the course. Pre-class polls on this subject often fill up with “this class is required for my degree” or “it’s a prereq for something else,” so it may take some prodding to get them to dig deeper to find personal reasons for being there, or things they could get out of it. Examples could help inspire useful answers, especially from previous years’ students. Are there skills they want to gain? Facts they want to know? Methods they want to learn? And why?
    2. Operation: Start the course with a collaborative brainstorm (and whittling down) of what the course rules will be, on the mundane but necessary topics of attendance, turn taking, late assignments, and grading.
    3. Evaluation: Get student input on what they think the weights of the different topics and assignments should be.

    These (and similar) ideas could give students agency, investment, and personalization in ways that just aren’t there in most classrooms today. These traits can foster increased learning and retention.

    For co-creation to be successful, Nina Simon notes, we must truly value participants’ input. We can’t simplify students into blank slates or empty vessels ready to be filled with our wisdom. That sounds preachy (and it’s not a new idea either), but I think it never hurts to take a moment to share genuine respect for and interest in your students’ individual personalities. Do they have hobbies that relate to the course topic? Do they have prejudices about the subject due to your course’s reputation, a sibling’s experience, or simply the fact that it’s a required class that they would not have chosen on their own?

    Stefan Stern warns against expecting the next big thing to spontaneously pop out of co-creative activities. “The real art is in synthesizing all the ideas afterwards and understanding the big, unlooked-for themes that underpin them.” Sounds like good fodder for organizing a syllabus to me!

    While relinquishing control can be a little scary and even more chaotic, I think it can also make the teaching process more fun, inspiring, and educational for the educator. Each offering of the class would be different. We assiduously poll students at the end of the term for the highly prized course evaluations. Why don’t we also assess the course’s value by polling the teachers to find out what they learned, or how they benefited?

    Human library

    What if books were people? Or people were books?

    The Human Library is an organization that organizes and inspires events in which participants can “check out” a human Book for a conversation. The Books are people who volunteer to express roles that are often the subject of negative prejudice, like The Police Officer, The Male Nanny, or The Atheist. Readers page through a catalog of Books and choose one to check out.

    The University of Arkansas has its Human Library catalog online where you can see more examples. Some that caught my eye are “Come, Learn Braille” and “10 Reasons to See Ukraine.”

    I love this idea. I remember the first time that I realized that a written book could have the power to give me experiences that I would never have in my own life. This happened in middle school, while reading Orson Scott Card’s “Xenocide,” which features a main character who has an obsessive-compulsive disorder. This was something I knew vaguely about, but reading Xenocide put me so far into Han Qing-jao’s head that I felt her emotional ups and downs and the pangs of her compulsions. (The fact that these are interpreted as religious imperatives, in the book, made it all the more poignant.)

    And if a book could come to life and have an interactive conversation with you, what then? It’s known that real-life contact with someone from a marginalized demographic can change world views and overturn prejudices. Contact with the stranger makes them less strange. Contact with the unknown can also reveal your own previously unknown prejudices.

    I expect that reading a human Book is a powerful experience, and the context in which it is framed is brilliant. If you are not already a member of a particular group, you might hesitate to strike up conversation with a Muslim or Jew or Christian or street sweeper or circusmaster or gay parent or grocery bagger — how would that begin? But we are already comfortable with brushing up against Books with very divergent ideas in a Library, where anyone is free to check out anything. And these Books are there because they want to engage in conversation; you need not fear that you are being invasive. Your questions are welcomed.

    The Santa Monica public library hosted Human Library events in 2008 and 2009, and Loyola Marymount University had an event in 2012. I’ll have to keep my eyes out for other Human Library events so I can try one out in person!

    All of human knowledge in ten categories

    How can you organize all of human knowledge? Or at least the parts that people put into books, movies, CDs, ebooks, and other media?

    I find the subject classification systems used by library catalogers fascinating from this perspective. What a daunting challenge, to come up with an ontology that is both sufficiently comprehensive yet not overwhelming, and simultaneously something that everyone else will agree with. The Dewey Decimal Classification (DDC) system was invented by Melvil Dewey in 1873 and it is *still* in use by libraries (albeit with updates and modifications). It is still used despite general recognition that it is exceedingly Eurocentric and exhibits other biases — but it now has the weight of history behind it, and changing your subject classification scheme is a huge endeavor, and no one else has come up with something better.

    Or have they? In 1897, Herbert Putnam came up with a different ontology (LCC, Library of Congress Classification). Both systems are now maintained by the Library of Congress. Public and school libraries mainly use DDC, while academic and government libraries use LCC. Why?

    From What’s so great about the Dewey Decimal System?:

    The organization of the LC was primarily focused on the needs of Congress, and secondarily towards other government departments, agencies, scholars, etc. So more space is allowed for history (classes C to L) than for science/technology (Q to V). More important, the focus on the needs of Congress means the LCC pays less attention to non-Western literature, and has no classifications for fiction or poetry.
    [...]
    DDC uses fewer categories and sub-classifications and is consistent across disciplines, while LCC is more highly subdivided with no consistency between disciplines. It’s understandable, therefore, that DDC has proven more useful to libraries catering to a wide range of needs such as public libraries and schools, while LCC is more widely used in libraries focused more on technical areas like colleges, universities, and government.

    Turns out that they’re both Eurocentric (or even America-centric) and infused with biases about the relative importance of different topics. For example, let’s look at the top-level division of the DDC. As a decimal system, it has ten categories available at each level. If you were to divide all of human knowledge into ten categories, what would you choose?

    Here’s what Dewey did:

    000 Computer science, information & general works
    100 Philosophy & psychology
    200 Religion
    300 Social sciences
    400 Language
    500 Science
    600 Technology
    700 Arts & recreation
    800 Literature
    900 History & geography

    Or actually, that’s what his system has evolved to now. Obviously Dewey had no concept of “computer science.” In fact, 000 feels more like a “Misc” category. What is CS? The Library of Congress must have thought it didn’t quite fit under 500 (Science) or 600 (Technology). You can browse more here: Dewey Decimal classes.

    I’m wondering what a content-based analysis (e.g., clustering) of a large collection of books would create. How would such a hierarchy differ from Dewey’s or Putnam’s? Google, tell us!

    Older entries »