Joel on Software – Advice for Computer Science College Students

Through slashdot, I saw this nice article by Joel on what you should do if you want to become a programmer and are studying Computer Science:

Joel on Software – Advice for Computer Science College Students here are Joel’s Seven Pieces of Free Advice for Computer Science College Students (worth what you paid for them):

  • Learn how to write before graduating.
  • Learn C before graduating.
  • Learn microeconomics before graduating.
  • Don’t blow off non-CS classes just because they’re boring.
  • Take programming-intensive courses.
  • Stop worrying about all the jobs going to India.
  • No matter what you do, get a good summer internship.

Meritocracy in America

Through Downes’, I found out about this nice article about the USA not being such a meritocracy:

America’s great universities are increasingly reinforcing rather than reducing these educational inequalities. Poorer students are at a huge disadvantage, both when they try to get in and, if they are successful, in their ability to make the most of what is on offer. This disadvantage is most marked in the elite colleges that hold the keys to the best jobs. Three-quarters of the students at the country’s top 146 colleges come from the richest socio-economic fourth, compared with just 3% who come from the poorest fourth (the median family income at Harvard, for example, is $150,000). This means that, at an elite university, you are 25 times as likely to run into a rich student as a poor one.

State of blogging

Through Downes’ I found this to a report on the state of blogging. The numbers are amazing:

  • 8 million American adults say they have created blogs;
  • blog readership jumped 58% in 2004 and now stands at 27% of internet users;
  • 5% of internet users say they use RSS aggregators or XML readers to get the news and other information delivered from blogs and content-rich Web sites as it is posted online;
  • 12% of internet users have posted comments or other material on blogs.
  • 62% of internet users do not know what a blog is.

Current state of affairs in the XML world (according to me)

I’ve been working hard at an XML course for the last few months. While I’ve been done a lot of e-business related work in recent years, I didn’t consider myself an XML expert.

Still, I’ve been one of the early adopters regarding XML, starting out in 1997-1998 when it was still a cowboyland. I kept hacking away at XML until about 2001 and then I went away and did other things. I actually did a commercial project (as an technology architect) in 2001, but it was one of my last project before going back to academia (Acadia University).

What happened between now and 2001? Well, Mozilla for one thing or, rather, true standard-compliant XML support in widely available browsers. Also, a lot, but really a lot of new “standards” have come along, things like XHTML and so on.

In truth, I don’t think much changed since 2001. Not as much as I thought.

After studying carefully what’s out there, I come away with the following conclusions:

  • Internet Explorer doesn’t support basic things like XHTML and its general support for XML is quite lacking. It is simply not a good XML tool. Mozilla (including Firefox) is pretty good but there are a few gotchas: Mozilla just ignores DTDs (not validating) which brings about many problems (like missing entities) and you can’t save or source-view the output of a XSLT transformation. Still, Mozilla is good enough. I don’t know about Opera, but I heard good things.
  • DTDs are just fine and they are more often than not an overkill. XML Schema and other formal ways to specify XML applications get little support in actual software and are just not so useful.
  • Namespaces are a mess: they complicate things, they are incompatible with DTDs, and URIs as identifiers is a confusing idea. Yet, they work well enough and are usable.
  • XSLT 1.0 is truly powerful and very convenient. Couple XSLT with EXSLT extensions and you really can do pretty much anything you want. Exporting XML to HTML or to LaTeX is really easy. However, some things are tricky, like grouping. The best and fastest free XSLT engine I could find is 4suite. XSLT 2.0 is still pretty much unsupported. Either way, whether you use EXSLT extensions or XSLT 2.0, you need things like regular expressions.
  • Programming for XML through something like DOM is a major pain. Maybe XOM is better, but the basic idea is that if you have powerful high level language like Python, Ruby, Javascript or Perl, DOM-like programming on top of XML is boring. It seems like it DOM was designed with Java or C++ in mind, languages that are already a pain to use in the first place. Still, DOM works well enough but I think you need to have XPath support in your language otherwise, things could get really verbose. (In Python, use the libxml2 wrapper.)
  • Current RDF/XML is a pain, period. RDF itself is sane.

So, I think that a good XML project probably uses XSLT, maybe DTDs, a lot of XPath, but as little of the rest as possible.

Increase in older students forecast

Here’s an article giving interesting figures:

College Board figures show the number of students older than 25 has increased from 29.9 percent in fall 1999 to 31.1 percent in fall 2003. However, roughly 40 percent of regional and U.S. students are older than age 24, according to the board.

In short, a large fraction (about a third) of university students in the USA are adult students (older than 25 years old). Of course, this includes some graduate students, but I bet it includes a large number of students working to get a degree.

ASCIIMathML: a brilliant JavaScript/XML hack

Once in a while, you find something on the Web that makes you go “Wow!”. Ever since MathML came along, I’ve been fairly disappointed because it looked like it was designed to work only inside expensive commercial tools. ASCIIMathML proves I was wrong. You can write standard HTML files with some convenient mathematical notation in it, and a piece of JavaScript will dynamically convert it to MathML which displays fairly nicely in Firefox. However, I always seem to be missing some key fonts.

XML and JavaScript are a potent mix.

Consulting: my experience on when to drop a client

I have been consulting for several years. I think my first consultant job was around 1999 or even 1998. I think I told the story on this blog before: I had planned to finish my Ph.D. and then move into industry. At that point, I faced a wall: very few companies in Montreal were looking for fresh Ph.D.s. I cannot blame them, but back then, it was a big disappointment for me. So, I went into R&D consulting with companies outside Montreal (Paris, Ottawa, Marseille…). It seems there is a fairly good supply of companies lacking a solid R&D department, but needing the R&D. At least, that’s true during some economic cycles. So, I provide ideas, software, documentation, against fair compensation over a couple of months or slightly more. I usually get to keep ownership of some of my work though some of it remain secret.

I stopped consulting for a few years while I was at the National Research Council of Canada (NRC). But now that I’m back as a university professor, I’m back into consulting.

Why do consulting? Firstly, it is fun: you get to work on mostly exciting (read:new) projects that have some importance. Secondly, it pays well enough. If you contribute significantly to a project, you might even be able to negotiate some profit sharing: I was once offered 5% of a company or some cash (I took the cash). Consulting is also a special kind of business: it is focused on your expertise and not on business expertise. You are may have to write bills and do some accounting, but you don’t have to deal with bankers and venture capital, with hiring 30 people and finding offices. Consulting also keep you on your toes: you have to keep learning about the new trends. It also gives you valuable insights into what is really important in the industry and what isn’t.

Why not do consulting? Uncertain times: you might make $30k in a few short weeks, and then make absolutely nothing for a month or more. If you can live with it, it is not so bad because you can use the free time to do other work like research or learning a new computer language. If times get tough, you might have to do some jobs you don’t particularly care for. Also, consulting is not like building a company or a product: your clients do this, not you. Hence, your growth is limited: you can only sell the time you have and this has some pretty dire consequences on how you manage your “business”.

As a consultant, you sell mostly one thing: your time. And you have a finite supply of it. This means you must be extremely picky about the projects you do and clients you work with. You must make absolutely sure that it leads you somewhere because agreeing to one project means you can’t do some other project someone else will offer you down the line.

This is somewhat counterintuitive at first. You’d think that you’d want to agree to do as many projects as you possibly can, and be nice to all clients. That might be true if you sell T-shirts, but not if you are a consultant.

So, how do you recognize a good project and a good client? Bad projects are not so bad as bad client since most consulting jobs are over short periods.However, sticking with a bad client can have terrible consequences. Fortunately, a good client is somewhat easy to recognize. A good client is someone who wants to work with you specifically and has good reasons to do so.

How to recognize a bad client:

  • He will try to bully you in accepting terms that are not acceptable to you. For example, I’ve had a client try on several occasions to intimidate me into lowering my hourly fee to about a third of my usual hourly fee.
  • He will have a selective memory. As a consultant, you don’t carry along a lawyer, so you need to trust the client to remember the terms you’ve agreed to. This is usually not a problem with real business people as they can’t stay in business with selective memories unless they are called Bill Gates. I suggest that the minute you find out the client as a defective memory, you run away.
  • You don’t see how the client has any need for your skills or the client doesn’t/can’t understand what you can offer. This has happened to me quite often due to the highly specialized nature of my work.

Through Jarche, I found out this nice article in Startup Journal which points out the very same thing. Knowing when to drop a client or a project is one of the most important skill you can learn as a consultant:

(…) I’d just been advised to seek a portfolio of engagements that will spawn new experiences and opportunities, listen to my heart and assess the tradeoffs of each opportunity. So I thought to myself, I don’t love what I do for this CEO and working for him isn’t expanding my network, making me rich or helping me to achieve my long-term goals. Should I allow him to chip away at me every time I see him?

No questions there. I resigned, confident that I can replace the revenue with more fulfilling and remunerative work. More importantly, I began to feel for perhaps the first time that I’m on the right road.

Science Commons

Here’s an interesting initiative: Science Commons.

Science Commons is a new project of Creative Commons and will launch on January 1, 2005.

The mission of Science Commons is to encourage scientific innovation by making it easier for scientists, universities, and industries to use literature, data, and other scientific intellectual property and to share their knowledge with others. Science Commons works within current copyright and patent law to promote legal and technical mechanisms that remove barriers to sharing.

Blogs for Computer Science Tutors, starting point

Nicolas and Richard write about the start of our project about Blogs for Computer Science Tutors. We are still at the very beginning. In the first phase, Nicolas will be investigating which blog engine is best for this particular use. In the second phase, we’ll need to setup tools for information analysis and aggregation to support the community.

While this is a small, local initiative, we are doing something to push eLearning forward! If we can help tutors with blogging, then this will be a good step toward giving UQAM students blogs… (warning: this is blue sky thinking)

On a related topic, Nicolas (in French) talks about how he intends to learn about RSS even though he is not a computer scientist.

This tells me something: RSS is to Semantic Web (for lack of a better term) what HTML is to the Web. HTML was a technical format never meant for non-technical people, yet, designers all over the world have learned HTML and learned it well. HTML was simple and limited, but it was enough. RSS is the same: it was meant for a few Netscape engineers and now, everyone from the average lawyer to the sociologist is studying the RSS formats. RSS is simple and limited, but it is powerful enough for separating content from presentation on the Web.