Lars Pind

internet software, coaching, and entrepreneurship

Lars Pind - internet software, coaching, and entrepreneurship
Check out Coach TV, my video blog on happiness and personal development for geeks.

Knowledge Sharing

February 15, 2000 · 0 comments

These are some thoughts that <a href=”http://www.branimir.com”>Branimir Dolicki and <a href=”/lars”>I, generated while developing Knowledge Management for Siemens. I hope to one day put reality behind all this and see how it works in real life.

The huge picture

What is “knowledge sharing” or “knowledge management” (km) anyway? It’s basically people teaching each others. So a km system must ultimately be built on ideas of how people learn best. Since some people are better teachers than others, we will want ways to help users improve their teaching skills.

Why do we want to share knowledge? We assume reasonably that having people teach and inspire each other, each individual will grow personally by both the learning and the teaching. The company will benefit directly from more knowledgable and inspired workers, and indirectly by avoiding duplication of efforts.

What is knowledge anyway? Without getting too philosophical, it’s basically information that can be put to use. So we want to help and encourage people to express themselves in ways that are of use to other people. In other words, to put themselves in their reader’s place. This is something software can never do by itself.

The management task

Sharing knowledge is not something that will be achieved by software alone. Software can facilitate things but it cannot overcome organizational and personal obstacles. If employees are rewarded for being the only person possessing certain knowledge, there will never be be much knowledge sharing going on. So we must make sure we reward good teachers.

The big idea

We want to encourage users to contribute by making it easy and imposing very few restrictions on the content. If the user feels like sharing something, it’s probably important to her, and she probably knows best how to structure her idea. It might not always be the case, but we need editors and other people, not software, to help users become better teachers and writers.

To avoid stupid postings taking up thousands of people’s times, we make tools available for estimating the quality of an entry, and to rank and sort by this estimated quality on every list of entries ever shown.

We obviously want to let people browse the knowledge base by categories and do full-text search.

How it could work

The basis is text. Users can write a piece of text that they want to share with other users, be it everyone, registered users, a predefined group of users, a specific list of users or none at all (private). It’s just a simple HTML fragment, anything from one line to a chapter of a book, full text indexed, and can possibly have attached files. We keep all versions of entries and files.

To help users link the knowledge base, we offer a very simple way to link to another entry, e.g. by just saying [other-entry-key], which is then translated into a real link when the entry is inserted into the database.

To help users find information, the entries can be categorized in multiple categories. The author can suggest categories to put it in, as well as new categories altogether. The administrator can (if he so desires) approve both categorization of an entry and new categories.

To help users prioritize, entries are rated, both explicitly and implicitly (“votes”). Users can explicitly rate an entry on a scale from 0-3, 0-5 or a similarly small set of rates; we don’t really trust explicit rates, since people tend to be lazy at rating, and only gives either top or bottom rates. Thus explicit votes have a low weight. Users can choose to send an entry to another user (“send this to a friend”); we give this form of vote a high weight. We also track how many users have read a particular entry more than once, and count that as a vote for that entry. We count a link to another entry as a vote for that entry.

We also rate the users. A vote for an entry is also a vote for the author. The more highly appreciated the author is, the more his votes count. We help users evaluate authors and voters by letting them see contents contributed by each other’s, possibly including their overall rating.

To help users explore the knowledge base, we offer links to related items by categories, and by “users who liked to this entry also liked to …”, preferably giving priority to entries the user hasn’t seen before.

To support collaboration, users can comment on entries, and authors can let other users in as co-authors. Comments on an old version are marked as such with a link to the version they’re commenting on. We might need a way to hide a comment from the default page in case the author takes the comment seriously and changes his entry.

To support the evolution of the knowledge base, an entry can be marked as deprecated by the author or the administrator. A deprecated entry can be taken over by another entry, which is then the current (“this entry has been succeeded by this entry”).

0 comments

How to become a hacker

February 13, 2000 · 4 comments

There are two seperate and equally important parts to being a great programmer. You need absolute technical mastering of the technologies you use. But that’s the easy and boring part. The hard part is designing software so that it’s useful to the people using it.

I’ll present a lot of stuff here. Don’t be overwhelmed! You don’t have to learn everything at once. You don’t even have to learn everything I say here at all. But it does help to have some sense of direction in your adventures. That’s what I am trying to pass on.

Note: A hacker is a programmer. A cracker is a criminal.

The important part

Start right away by reading Alan Cooper’s

The Inmates are Running the Asylum

and

Philip and Alex’ Guide to Web Publishing. important books about how to design software today (they are, at least, to me). Cooper’s book is about software design in general. Philip’s book is focused on web programming and includes technical stuff. They’re both great eye-openers.

These are perhaps the two most

The bottom line is that you should focus on what the users of your software want to accomplish. Think as hard as possible about real users and their real needs, how you can anticipate and support them. Work hard to make the software and the computer work hard to help the users do what they want to do with as little effort and cognitive friction as possible. Help users in ways they never thought possible.

“No matter how cool you user interface, it was better if there were less of it” (Alan Cooper, About Face). Users don’t want to learn your user interface. They want to get a job done. You must know what job that is, what it takes, what the use situation is like, what the user is like. There is no substitute for knowing what goes through the user’s mind. This isn’t something that can be formalized. It takes empathy. You’ve got to be out there with her. See it with your users eyes.

When programmers face a design decision, the gut reaction is to refrain from making the choice and putting the burden on the user instead. Take use of screen real estate as an example. When programmers don’t know how to make best use of the user’s screen real estate, the gut reaction is to say “Oh well, we’ll just provide him a completely general mechanism to place all tool bars and menus arbitrarily and to redesign all menus and toolbars”. How many users do you know that does that with their MS Word? How many users you know have placed their Windows task bar anywhere else than along the bottom of the screen? None. Is that because everyone’s satisfied? No. The user still find the overuse of screen real estate annoying and wasteful, but spending time moving and rearranging toolbars is even more painful. It solves the wrong problem.

If your software needs a printed manual or a context-sensitive help system to use, you should go back to the drawing board and rethink it. I’m not saying you shouldn’t help your user. But contrary to mechanical items, computer software have the ability to explain themselves without breaking the flow. Help the user when necessary. Record relevant user behavior, learn as much as possible about the user, and let the software adapt itself to the user and the user’s situation. Don’t present options that aren’t relevant to the user.

The part that users couldn’t care less about

Now to the techinical part. It may sound like a lot, and of course it will take some time. But you’ll discover along the way, that it really is quite simple, if you take it one step at a time. You’ve probably been brought up to simultaneously think computers are easy (the Windows desktop) and at the same time immensely hard (troubleshooting the Windows desktop). But with the right tools and the right approach, you’ll hear yourself going “Whow! Is that all there is to it?!” over and over again.

For an example of that, try running
telnet www.amazon.com 80
in a Linux shell. Telnet will reply by saying
Trying 208.202.218.15...
Connected to www.amazon.com.
Escape character is '^]'.
Then write
GET / HTTP/1.0
followed by two returns, and watch what happens:
HTTP/1.1 302 Found
Date: Fri, 21 Jan 2000 09:41:59 GMT
Server: Stronghold/2.4.2 Apache/1.3.6 C2NetEU/2412 (Unix)
Location: http://www.amazon.com:80/exec/obidos/subst/home/home.html
Connection: close
Content-Type: text/html
followed by some HTML. Congratulations! You’ve just learned the basics of the HTTP protocol.

First step is to ditch everything with Microsoft’s name on it. Not because Microsoft is evil. But because Microsoft’s key vision is to shield users (including programmers) from the underlying technology. End users should be shielded from irrelevant technological aspects by designing software based on actual knowledge of the users and the use situation. Progammers should never be shielded from technology, because inevitably the programmer will run into some bug that can’t be solved on the upper, abstracted layer.

Install Linux on your Intel box. Not because Linux is the perfect operating system, but it’s one of the better, and it has a lot going for it. Take the time to learn to master all the command line utils and the inner workings, like configuration files and interaction between processes. Learn to master Emacs, the number one application you’ll be using. If you have a non-english keyboard, set it up, so the keys work like on a US keyboard. In the US keyboard setup, often used keys like <, >, [, ], {, }, /, |, \, ;, :, @, $, #, ”, ’, =, _, ?, etc., are placed so they’re much more easy to use.

Virtually every interesting computer program today is centered around networking, so you should also know about basic internet plumbing and learn key internet protocols, like TCP/IP, DNS, SMTP, HTTP. You don’t have to know everything about them, but you should have a solid idea of how they work and interact, so you can troubleshoot and learn more along the way. Key network command line utils like ssh, scp, wget, telnet, traceroute, whois and nslookup are also a necessity.

Along the same lines, you should seriously consider investing in a real internet connection. It’s still relatively expensive but just as a networked computer is a hundred times more useful than a standalone computer, an always-on internet connection is a hundred times more useful than a dial-up. No more annoying on-line/off-line dichotomy. The physical location of hardware, software and data becomes irrelevant.

Printing is outdated, so who needs word processors. Learn how to write casually in HTML by hand using Emacs, and use that for all your documents. If you really need printing, you can print from a browser. If you really need control over layout, you can learn LaTeX, which translates into Postscript, which in turn translates into a PDF.

If you’re going to build applications to support business, you’ll inevitably be using a RDBMS. Download free (for development) Oracle for Linux and learn how to do SQL and PL/SQL. Learn enough about administering to be able to troubleshoot and learn more as the need shows.

Programming languages are irrelevant. Which is why you should be familiar with at least ten and be able to do real programming in at least five. When you’ve reached that limit, you’ll realize that they’re all basically alike (they’re all turing machine capable), and you’ll be able to quickly determine which language is right for the job. Good candidates for languages to learn are C (but pray you’ll never have to use it), Java, Lisp, Tcl and bash scripts.

Integrated Development Environments

“But isn’t this business of hacking plain text files using an editor old-fashioned, now that we have visual development environments?” I hear you ask. No. Visual or integrated development environments like Visual Basic or Delphi solve the wrong problem. They assume that moving widgets around the screen with a mouse is easier than writing text in a text editor. And to a first approximation it is. But the visual environment shield you from what happens under the hood. If you’re a programmer you want to know what goes on under the hood. Eventually you’ll run into a bug where the upper layer doesn’t work as you expected. When that happens, there’s no alternative to debugging the actual code being executed, which is inevitably plain text source code. If you’re already familiar with that, you’ll find the bug much quicker.

What’s more important is that plain text files are easy to manipulate. Once you’ve learned the language in question, it’s much faster to use your favorite text editor (Emacs) to write the code by hand than drag widgets around the screen. Besides, there are a gazillion of tools that can do interesting things to plain text files. And writing up your own text-manipulating program is ridiculously simple. It’s easy to use grep to find every use of a specific function. It’s easy to use cvs for version control. It’s easy to edit remotely through a secure shell. If the source code is pure text, it’s easy to write a program that will output source code.

HTML is just plain text. That’s why it’s so easy to write a program that will output HTML. Bingo! You have a dynamic web site. SQL is just plain text, so it’s easy to write a program that will output SQL statements. There you go! You have a program that can do flexible queries in the database. If you really think you need a desktop user interface, there are programs that given a textual description in XML will produce the code that implement your GUI. Thus you can write a program that given a high-level description will produce the XML files, then translate those XML files into the actual code. That’s powerful.

Plain text files will never go out of fashion. They’re easy for humans to read and understand (as opposed to binary files), and they’re easy for computer to parse. Admittedly, a program operating on a carefully engineered binary format may perform slightly quicker. But programs are not primarily written for computers to execute. Programs should be written primarily for programmers to read and understand. Thanks to Microsoft’s CPU-consuming bloatware, Intel-processors are now so powerful and cheap that the performance loss is negligable. Programmer time is much more expensive than processor time.

I’ve experienced so-called programmers, living in a shielded world, that could spend a whole day figuring out how to manipulate the pathetic API of their bloatware of choice to do something as simple as select user_id from users where user_name=’larspind’. And to top that, he’d even, seriously, claim that the reason it was so hard, was because “in (product name) it’s so easy,” you can only use the functions they’ve decided to provide to you!

4 comments

Bookshelf

February 13, 2000 · 0 comments

Random pieces I enjoyed reading.

Software design

These are on the top of my list. Cooper’s book is great for learning about the process of developing software in general. Philip’s book is about web sites, and since all interesting program in the next few years will be web sites, it’s equally relevant. Scott McCloud’s book is about the combined visual and written language used in cartoons. As it turns out, these are the same elements available to most software. Finally, there’s Tufte, with his excellent, intelligent approach to information design in general, also highly relevant to software.

  • The inmates are running the asylum by Alan Cooper explains the right process for developing software that’s useful to users. Too bad it isn’t free (even though you’d expect Cooper to make enough money from his job to refrain from the few bucks earned from a book).

  • Philip and Alex’s Guide to Web Publishing by Philip Greenspun

    What Philip thinks web publishing is all about, and also technical help on how to do it in real life. There’s a whole lot of interesting reads scattered around his whole website, so dig around.

  • <a href=”http://www.scottmccloud.com/objects/uc/uc.html”>Understanding Comics by Scott McCloud. Boy, I wish someone would write an introductory computer science textbook with Scott.

  • Visual Explanations by <a href=”http://www.cs.yale.edu/people/faculty/tufte.html”>Edward Tufte. Also read his other books, they’re all worth it.

Free Software

  • Why Software Should Not Have Owners by Richard Stallman
    Stallman, from MIT, is the guy that started the whole thing. Most of the articles in the philosophy section are worth reading.

  • The Right to Read by Richard Stallman

    A piece of prose depicting where we may be headed.

Other Interesting Articles

0 comments

Find Me

February 01, 2000 · 0 comments

Here’s how you can get in touch with me:

Snail mail:     Kong Georgsvej 6A, 1. tv.
2000 Frederiksberg
Denmark
Phone: 38 10 73 33
(show map)
Office:     Collaboraid
Havnegade 39
1058 København K
Denmark
(show map)
Cell phone:     (+45) 26 37 47 07 (in Denmark)
Email:     lars@pinds.com
AIM:     Lars Pind
MSN Messenger:     lars@pinds.com
Yahoo! Messenger:     larspind
Skype.com     larspind

Or just ask a question on the bboard.

0 comments