Abhay Rana aka Capt. Nemo

Thoughts on Writing

I have always wanted to be a writer. I think secretly us all reader-folk have that ambition. The joy of getting across your thoughts to another person without ever having met them is enormous.

Most of my writing time these days is spent over email, chat or my not-so-frequent blog posts. I tend to do a lot of research while writing, and it takes up a lot of time. As such, my writing output tends to be diminutive compared to what I'd like.

However, if you'll go through my blog posts and emails, I write a lot about trivial things. Things that many people have already written about. Things that have probably been discussed to death, and where I have very little chance of actually coming up with something new.

Should I still go ahead and write about it?

This question has been bugging me for a while, especially as a blogger. I mostly write on technical topics these days. For instance, I have given talks on [Software Development], [UX Design], and even [Bitcoin]. I am nowhere close to being an authority on any of these things. Even in my specialized field of Web Development, there are so many things that I'm only barely aware about. So many things I am yet to even form my own opinions about. Topics I don't even know exist.

When I go and read an article about Software Development from Joel Spolsky, or an article on Security by Bruce Schneier, or something on Startups by Paul Graham, or tptacek on Hacker News; I instantly sit back and take notice: I know their credentials and the fact that they are speaking authoritatively on the topic. However, what can I, a meager undergrad with almost zero experience, write on such topics. Why should I even try, when there are people hundreds of time better who understand these things a thousand times better than me.

In retrospect, this sounds quite similar to the Imposter Syndrome; and I'm not sure if this is exactly the same thing. I don't get a feeling that I'm a fraud. I totally understand my own capabilities and successes, but the mere fact that there are people far better at what I'm doing is enough to dis-hearten me.

I've given this a lot of thought. A really good summary of my response is in the following answer by James Erwin, author of Rome Sweet Rome in a reddit AMA to a question asking for writer advice:

And if you're going to write, write what you want to write. The odds against any creator are insane. If you're going to devote months of your time, don't let it be for an idea you think will sell. Odds are it won't. Write something you want to write, or need to write. Write for yourself before anyone else. I'd rather read someone who is excited and passionate about what they want to say than someone who's obviously trying to say what they think I want to hear.

James Erwin

I write, despite all these doubts, for the following reasons:

  1. Self-learning. A blog is an excellent way to keep track of your self-learning. Its amazing to come back a few years later and see the things you were struggling with before. Its equally amazing to do a trivial google search for an issue you face and find your own blog post or stackoverflow answer on the same.
  2. Sharing Knowledge. Yes, there are people who might know it better, but that shouldn't mean I should keep my knowledge to myself. That would go against all the values that I stand for.
  3. Network Effect: Not in the strictest sense of the word, but my friend Shashank recently brought this up. I have a circle of people who know me and would vouch for my credentials. For the same reason, they are more likely to trust me as source, instead of a third person who they have no knowledge of.
  4. I love writing. The mere process of putting words down is enchanting for me.

The next question that rises is: "What should I write about?". Ruling out things I have no clue about, that still leaves a large number of topics I can cover. I am interested in UX Design, Hackers, Computer Security, Software Development, rationalism, skepticism, Free and Open Source movements, Political activism, Technocracy with a passing interest in several other fields such as cosmology and geek culture.

I am not going to pick one every day and write about something new. I don't want to write something rubbish just for the sake of writing it. I ultimately want to write because I have something to say. It doesn't have to be unique or ground-breaking. What matters is that I want to write about it.

A few days back someone contacted me on facebook asking me advice on getting started with web development. I get a lot of these queries, mostly over facebook, email, and quora. Our conversation went back and forth with me suggesting resources, and he getting exceedingly confused over whether he should use codecademy or udacity, or coursera or something else.

I have devoted a lot of time in my life to teaching people the nuances of these things. I have mentored many people, and acutely know the issues a beginner faces. In turn, I had an amazing mentor who taught me the importance of always learning things.

All of this lead me to realize one fact: I have been writing a lot about Software Development. Unfortunately, a lot of it is in private emails and chat. And I wanna write more about it, on a public medium.

So, I'm announcing the next thing I'm working on: a book called The Joy of Software Development. A few obligatory links:

As expected, all the development, writing, and discussion on the book will be in the public, mostly on GitHub. I am writing this book, because I feel it needs to be written. I don't expect it to be published, but that won't stop me from writing it.

Artur Siekielski recently came across it, and wrote the following:

The book you're writing looks very good! It's filling a niche as I don't think there are any modern books that focus on "bird's eye view", and I see it would be helpful for many programmers to refresh knowledge.

That gave me a bit of validation, as the only person who'd read it so far were my close friends.

If you wanna support its development, you can do one of the following:

Asking for Donations might sound weird to some. I don't really need the money, but I think I'd get an additional sense of responsibility towards finishing it if people start giving me money. I will be donating the entire proceedings to EFF.

Medium abuses nofollow

I call medium a "mostly good" platform for lazy writers. A lot of people have written about its excellent typography, or it being the next "big publishing platform". I've used medium in the past, and while it does have its benefits, I have stopped using it.

My primary reason was that I already have a blog, where I can control the entire experience. This is the same reason why New York Times does not start publishing articles on Medium.

The other reason is nofollow abuse.

Medium hosts more than 1M indexed pages. It has around 650k users currently by a conservative estimate. Rounding it to 700k to account for other users, collections, and other internal pages, it leaves us with around 300,000 articles on medium.

A basic tenet of the web is linkability. That is what Tim Berners Lee meant when he talked about HyperText:

HyperText is a way to link and access information of various kinds as a web of nodes in which the user can browse at will.

Over time, the web has evolved, and is now not just limited to human users, but to computers as well. This is an important consideration on which the web rests today. The biggest example of this is Google Search, which uses these links to "follow, spider, and index" the web. Google uses this linking information to build a citation index, which gives us the quality of a web page depending on the quality and number of sites that link to it.

If you know a bit or two about SEO, you might have heard of shady backlink techniques, which essentially amount to you getting links from an established site. This often takes the form of user-generated content such as comments and answers.

While fighting spam is important, it is far more important to make sure that web remains linked, that people are credited for the content they create. Medium hosts 300,000 articles published by half a million users, and yet none of these links back to external website, because of something called "rel=nofollow".

When a link has a rel=nofollow attribute, search engines do not count it as a citation in their index. While this may be the right strategy for comments on a wordpress blog to prevent spam, this is not the right way to move forward if you want to "revolutionize the publishing industry".

While medium is not as bad as some other sites in this regard (like quora, which even blocks the internet archive), it is very important because it portrays itself as a "publishing platform". This means, medium is made up of articles, blog posts, with lots of outbound links compared to, for instance, StackOverflow answers (which solved this problem back in 2011).

If you publish content on medium, and provide relevant links for your readers, remember that these links are not considered as relevant by search engines.

Medium has said that this is not a top priority at the moment for them.

I understand completely. Handling spam would be a far more harder problem to solve than just blacklisting all outbound links. But we cannot go this way, if we want an open web. We need publishing platforms that cite content, and not blacklist it. This is why I write content on my own blog, and not on medium.

And just so you know, the top link to medium has a rel=nofollow.

Blog post on recent talk

So I recently did a talk on Joy of Software Development. You can read more about the talk here. This post is devoted to the references I'd promised to link to in the talk. Since it was an introductory talk, and I didn't want to bore people to death, I decided to cover lots of topics at a shallow depth, instead of covering a few topics deeply.

This means that I need to post more material for people to follow up on. So, this is that reference blog post. Make sure you have a copy of the slides open as you go through these links.

Software Development in general

Software Security

Starting Advice

Agnostic Software Development

Free and open source development

Version Control

Tests

During the talk, I decidedly used the term TDD incorrectly. TDD technically means going test first, but I used it as an introduction to testing in general. This was intentional. The links here will use TDD in the correct sense.

REST and APIs

Unix Philosophy

Books

These are books i absolutely recommend every software developer to read, in order.

  1. Don't Make Me Think
  2. Pragmatic Programmer

Other than these, I recommend reading Code Complete, Mythical Man Month, and everything by Jeff Atwood and Zach Homan, but only after you have read the above 2 books.


Phew. That was a lot of links. If you are ever interested in learning more about software development, feel free to contact me. If you ever feel like chatting with me, I'm usually online at chat.sdslabs.co.