22 November 2011

Learn Python instead of Java as your first language

I'm struggling with figuring out which programming language to teach students would provide the most effective learning experience.

It's easy to find tons of statistics showing how Java is the most popular language with tons of community and books, etc.  That, however, doesn't say very much about the learning experience of the student at all, or what the students will come away with.

I found the following from a respected hacker in the community, for example:
"For example, if your company wants to write some software, it might seem a prudent choice to write it in Java. But when you choose a language, you're also choosing a community. The programmers you'll be able to hire to work on a Java project won't be as smart as the ones you could get to work on a project written in Python. And the quality of your hackers probably matters more than the language you choose. Though, frankly, the fact that good hackers prefer Python to Java should tell you something about the relative merits of those languages.

"Business types prefer the most popular languages because they view languages as standards. They don't want to bet the company on Betamax. The thing about languages, though, is that they're not just standards. If you have to move bits over a network, by all means use TCP/IP. But a programming language isn't just a format. A programming language is a medium of expression.

"I've read that Java has just overtaken Cobol as the most popular language. As a standard, you couldn't wish for more. But as a medium of expression, you could do a lot better. Of all the great programmers I can think of, I know of only one who would voluntarily program in Java. And of all the great programmers I can think of who don't work for Sun, on Java, I know of zero."  (Great Hackers, Paul Graham, 2004)
So essentially, the idea here is that if you choose a language based on whether it's the popular "standard", you've lost sight of the fact that programming is very much an art, and the language is a medium of expression — why would anyone wish upon students the torture of a lesser blub language?

Java is becoming the new Cobol since 2007.  So of course it's popular, but we probably wouldn't want students learning Cobol as their first language now either.

The better language is Python, according to the best hackers in the community known to Graham (and he knows plenty, given what he does as his "day job" now).

Consider this, also from a respected hacker in the community:
"If you don't know any computer languages, I recommend starting with Python. It is cleanly designed, well documented, and relatively kind to beginners. Despite being a good first language, it is not just a toy; it is very powerful and flexible and well suited for large projects.

"I used to recommend Java as a good language to learn early, but this critique has changed my mind (search for The Pitfalls of Java as a First Programming Language within it). A hacker cannot, as they devastatingly put it approach problem-solving like a plumber in a hardware store; you have to know what the components actually do." (How To Become A Hacker, Eric S. Raymond, 2008)
Here the essential idea, I think, is that Java can help you build stuff, but it doesn't help you very much in learning to think and express your thoughts programmatically.  Being good at putting together code in Java that uses what other people have written doesn't help you solve problems better in a hacking or engineering kind of way.

It gets worse for Java according to this critique, as ESR mentioned in the quote above, which details failings of teaching Java at the University undergrad level.

But I am interested in this question in terms of high school students.  The difference for high schools is that they may offer an AP or IB program, which may mandate the use of Java for their exams.  In that case, of course for the sake of writing an exam, Java must be taught.

Looking longer term, however, teaching Java as a first language in high school raises lots of questions (some already answered above).

20 November 2011

Hackers are Builders and Creators

A note to students on ethics in becoming a member of the Computing Science and Information Technology community.

Nowadays, news, media, and films like to say "hacking" to mean "gain access to a computer system illegally" --- but this meaning is used only by the main stream who don't understand what it means to program a computer.

To Computer Engineers and Scientists, "hack" is jargon to essentially mean "make something work".

Consider what these sentences mean:

"Hack something together"
- To shape or create something by crude or ruthless strokes (e.g. "hacking out new election districts" [3])

"He just couldn't hack it at the new job"
- He can't manage the new job successfully [3].

"Hack through it"
- Cut through with repeated irregular blows [3].

Those sentences use the older meanings of "hack" but are perfectly applicable to computer programming ... if you understand what it means to program.

If you don't, and if the only times you hear about programmers is when they do bad things, then it's understandable why you might think hacking is a bad thing.

This misunderstanding started in "Around 1980, when the news media took notice of hackers, they fixated on one narrow aspect of real hacking: the security breaking which some hackers occasionally did. They ignored all the rest of hacking, and took the term to mean breaking security, no more and no less. The media have since spread that definition, disregarding our attempts to correct them. As a result, most people have a mistaken idea of what we hackers actually do and what we think." (Richard M. Stallman) [6].

That's true especially when the main stream media starts making movies that portray hacking as negative and hackers as "computer-kid-as-elite-rebel" [4].

Films that propagate this include Hackers (1995), Swordfish (2001), and The Social Network (2010).

In response to the portrayal of himself in The Social Network, Zuckerberg says: "They [film makers] just can't wrap their head around the idea that someone might build something because they like building things" (Mark Zuckerberg) [2].

"When we say 'hacker', there's this whole definition that engineers have for themselves ... where to hack something means to build something very quickly.  In one night, you can sit down and you could churn out a lot of code and at the end you have a product" (Mark Zuckerberg) [1].

Hackers create and build things.

"There is a community, a shared culture, of expert programmers and networking wizards that traces its history back through decades... The members of this culture originated the term 'hacker'. Hackers built the Internet. Hackers made the Unix operating system what it is today. Hackers run Usenet. Hackers make the World Wide Web work...

"There is another group of people who loudly call themselves hackers, but aren't. These are people (mainly adolescent males) who get a kick out of breaking into computers ... Real hackers call these people 'crackers' and want nothing to do with them. Real hackers mostly think crackers are lazy, irresponsible, and not very bright, and object that being able to break security doesn't make you a hacker any more than being able to hotwire cars makes you an automotive engineer. Unfortunately, many journalists and writers have been fooled into using the word 'hacker' to describe crackers...

"The basic difference is this: hackers build things, crackers break them." (Eric S Raymond) [5].

ESR is a rather famous author and advocate of open source software, which have been created by various hackers, including luminaries like Richard Stallman and Linus Torvalds.

"Great hackers also generally insist on using open source software. Not just because it's better, but because it gives them more control. Good hackers insist on control. This is part of what makes them good hackers: when something's broken, they need to fix it." (Paul Graham) [7]

Hackers create, build, and fix things.

"A 'computer hacker,' then, is someone who lives and breathes computers, who knows all about computers, who can get a computer to do anything." (Harvey) [8].

But it's pointless to argue about the "true" meaning of a word --- meanings are not things that can be true or false.  But understanding the main stream meaning versus the jargon meaning amongst computer professionals should help you understand that the wider hacker community is interested in fixing, creating, and building things.

Sometimes, some of them build things that sell under brands like Apple, Microsoft, Google, or Facebook.

Hackers are generally bored by breaking or stealing other people's things because it takes time away from building or creating cool stuff.

The only "special case" is with computer security researchers who likes to break computer systems, but they do that to learn how to fix, create, or build stronger and better systems.  By the way, they break computer systems they create or control themselves, not other people's systems.

It's like automotive engineers performing crash tests on cars to learn how to build safer cars --- but they crash their own cars, not other people's!

Hackers who break into other people's computer systems are like automotive engineers who crash or break into other people's cars --- they're called criminals.


[1] Mark Zuckerberg --- Facebook, Part 1 - watch from 1:09 to 3:30 (video at YouTube)

[2] Zuckerberg strikes back at The Social Network

[3] Merriam-Webster Dictionary

[4] Gleiberman, Owen (October 6, 1995). "Hackers". Entertainment Weekly.

[5] How to Become a Hacker

[6] On Hacking

[7] Great Hackers

[8] What is a Hacker?

07 November 2011

Skype auto-renewed my subscription without my explicit instruction

I'm not too happy with Skype right now auto-renewing my subscription in a very rude, almost "scam"-like, kind of way.

A year ago, I bought into a one-year subscription with them.  Their only way of buying in is, apparently, to have it auto-renew.  So technically, I gave them legal permission to renew my subscription.

But any legitimate business should have the common human decency to remind the customer that the subscription will be renewed, say, a month ahead of the actual renewal date, especially for year-long subscriptions.  This gives the customer a chance to change the renewed subscription (maybe the customer wants a more expensive subscription, for example!).

Instead, Skype sneakily renews the subscription silently, then only afterwards tells the customer of it.  No way to back out of it or change the subscription before renewal.

By the way, if you try to cancel the auto-renewal, the only way appears to be to cancel the subscription, and they use very scary language to suggest that doing so would cancel the service plan already in place.

Fortunately, they let you set the renewal to be charged to a Paypal account.  Once you do that, you can delete the stored credit card information without them complaining.  (This is under the "Settings and extras" > "Payment settings".) 

06 November 2011

Inflated expectations: Are students living in a dream?

There's a big gap between what young adults expect versus what they really will get in their lives.

In terms of educational attainment, I think the vast majority of high school students in Canada expect to get a high school diploma, at the least.  A vast majority of them probably want to go to college too (78% according to ACT in Spring 2004, but that's in USA, though it's probably roughly similar in Canada).

But looking at just the Canadian population, between the ages of 20 to 24 years, by highest certificate, diploma or degree attained in 2006, we see that based on the 2006 Census, only:

  • 43.3% (896 570 out of 2 071 895) achieved some kind of post-secondary qualification (trades certificate, diploma below bachelor level, PhD, etc.)
  • 35.9% (744 375 out of 2 071 895) achieved some kind of college, CEGEP or other non-university certificate or diploma, or university certificate, diploma or degree
  • 16.6% (344 795 out of 2 071 895) achieved some kind of university certificate, diploma or degree
  • 42.9% (889 275 out of 2 071 895) achieved only a high school certificate or equivalent
  • 13.8% (286 050 out of 2 071 895) achieved no certificate, diploma or degree at all
So roughly 78% or so expect to get a college or higher degree, but only 35.9% actually get anything of the sort.