Ten Commandmends

The Ten Commandments of IT Slackerism

1. Stupidity is not the same as the lack of intelligence… It’s an independent dimension, quality of its own. It’s unwitting self-destruction, the ability to act against one’s best interests, social blindness…  It’s a a typical quality of gifted programmers/system administrators and you need to cultivate skepticism and your sense of humor in order to fight this disease before it destroys you…

 2·There is a very fine line between software development as job, as hobby, and as mental disease. Thou shalt cultivate other interests to ensure that evil software development spirits do not fully possess thy soul.  There’s much more to life than developing software day and night including open source software. Remember about warning signs of a software developer addiction: “My personal appearance went downhill. I didn’t care. My girlfriend left. I lost my job. I didn’t care. I had become, yes, a open source programmer!”.  Remember that sacrificing your life for developing some semi-useless and duplicative open source program might be not the best way to realize yourself as a person. Developers pay for OSS, and they often pay a heavy price. Just ask Larry Wall.

  3. Value your time and use the highest level of language possible. Program in scripting language unless it is absolutely necessary to use compiled language or Java.  If your program does not work or is useless it is not important how efficient it is. If it is useful,  people will use it even it is slightly slower then compiled language version. Also, typically 20% of code consumes 80% of time, therefore concentrating on those you can speed the program much more that writing everything in lower level language.

Ignore the proliferation of OO programming languages (all of which seem to have stolen countless features from one another). It makes it difficult to understand why all those features are needed, and, especially, why the hell you should study them.  That’s not a warning sign that you cannot cope with the University program. That actually may means two things:

  • You are still normal despite studying software engineering for some time.
  • In software fashion rulez no matter what.

4. Thou shalt know by your heart that all software sucks, but Unix sucks less the other OSes. Beware of those who say that their software does not suck, for they are either zealots or liars or charlatans. There is no silver bullet in software engineering.  That includes Microsoft products, GCC, Linux, Solaris, Java, etc.  Most of the books/articles that worship some fashionable trends that promise some kind of breakthrough are either intentionally (written by software engineering charlatans)  or unintentionally ( written by religious zealots) misleading and will be forgotten in a decade or so.

The only true revelation of the art of programming is contained in  O’Reilly’s IT manuals. In operating systems domain Unix is more elegant and sucks less that other OSes, but it still sucks. Especially as a desktop. The necessity to tinker with OS to make some device work is a good training exercise during college days, but it became annoying and distracting masochism  later. Both Microsoft Windows and Linux are to operating systems what McDonalds is to gourmet cooking: too much fat.  Thou shalt try other OSes including minimized Linux distributions, OpenBSD/FreeBSD, etc, it is has features that make it more suitable to the task in hand. Never assume that any particular OS is good for all tasks.

5. When people are free to do as they please, they usually imitate each other. It’s better to destroy your health while you are being handsomely paid, that do it for free.Paradoxically a lot of great software was written by trying to meet tough deadlines in the commercial project.

6. Beware of “this needs to be rewritten” trap. More often that not this is just a manifestation of  “Not invented here” syndrome, which is a powerful motivator for doing stupid things. I’ve never seen an good programmer who examined the code and did not say or think “Well, this crap needs to be rewritten!” If code works, it usually doesn’t need to be rewritten despite the fact that it doesn’t fit your prejudices. Value your time and don’t rewrite things that does not make sense in any language… unless absolutely necessary

 7. When you encounter ideas pushed by higher management that politely could only be described as “ridiculous” think twice before trying to enlighten those poor smacks. The chances are reasonably high that the “the one, the only” whom you try to enlighten is a sociopath and you will inflict severe punishment on yourself for your own stupidity.  Instead of boiling about stupidity of the idea, think about (possibly covert) ways to convert completely stupid suggestion into something at least workable without irritating stupid jerks. Or at least benefiting personally from this stupidity.  Moreover in ten years differences much be negligible as everything will be swiped in the sea of obsolesce  by a new wave of technologies.
IT management jerks control much less that they think and circumventing them helps to polish your architectural skills ;-).  Think strategically and try to understand simple fact that in 3-5-10 years nobody will care about the fact that those jerks moved electrons in wrong direction. It’s all like creating a beautiful painting on a sand beach — the next big wave will wipe everything anyway. Chances are that during the project you might have an opportunity to change the direction in some kind of covert action; also think about what you can learn while doing the project independently of the results and what training you can get  as a bonus for not questioning stupid higher up judgment.

8. Initiative in any large corporation IT department is a punishable offence. You will be much better off writing open source software as a hobby under pseudonym, or taking a couple of courses at company expense, then trying to break the bureaucracy walls in your current company. Actually self-education including but not limited to writing open source software might get you faster to better position, salary, etc in a different company that might value your skills higher then current.

9. Remember that in any project the most suitable programming language is the language that project leader knows the best.  Don’t fight such idiosyncrasies even if you hate the language. You can always generate one language from another and create a prototype in the language you like (without advertizing this transgression 😉 and manually translate it into a target language. Think strategically: the language is just one tool in the tool chain and if it has a good debugger  it’s an OK language. Otherwise try to find other people who share your resentment and present facts about debugger quality in an objective non-threatening to the ego of the project leader way.

10. Thou shall never believe that by clapping hands and chanting “La! La! La! Free/Open Software is the best!” long and loudly enough, it’ll come true. That’s Raymondism. Choose free over non-free only when it is better suits your needs or you have no money to buy commercial software and thou art willing to fix what is broken. Choose a license of thine liking for software thou writest and do not blame those who choose differently for software they write. Remember that Unix is more than 30 years old, GNU is more then 25 years old, and Linux is more then 15 years old. Never refer to anything that is more then ten years old as revolutionary. You should just laugh at those poor jerks who call  Linux a “the revolutionary operating system”.  Linux is  “the last century operating system” and no better or worse then other flavors of Unix; it just more bloated :-).  Ask yourself if it really make sense killing yourself trying make it better or promoting it in your crazy corporate IT environment. Whatever flavor of Unix is present in your environment might suit you just fine :-). Open Standards are not equivalent to open source and are more important than open source. Like people benefit from knowing more than one language, programmers can benefit from knowing and using at least two OSes: one for the desktop and the other for the server. Monoculture of software is bad, diversity within reasonable limits is good.  Never put all eggs into one basket, be it Windows or Linux, Java or Python.

and do not blame those who choose differently for software they write. Remember that Unix is more than 30 years old, GNU is more then 25 years old, and Linux is more then 15 years old. Never refer to anything that is more then ten years old as revolutionary. You should just laugh at those poor jerks who call  Linux a “the revolutionary operating system”.  Linux is  “the last century operating system” and no better or worse then other flavors of Unix; it just more bloated :-).  Ask yourself if it really make sense killing yourself trying make it better or promoting it in your crazy corporate IT environment. Whatever flavor of Unix is present in your environment might suit you just fine :-). Open Standards are not equivalent to open source and are more important than open source. Like people benefit from knowing more than one language, programmers can benefit from knowing and using at least two OSes: one for the desktop and the other for the server. Monoculture of software is bad, diversity within reasonable limits is good.  Never put all eggs into one basket, be it Windows or Linux, Java or Python.

The Ten Commandments, Short Version

Here is a short version for the time-pressed or lazy as they prefer to be known.

  1. God rules
  2. Images are copyrighted
  3. Swear in moderation
  4. Sunday double time
  5. Honor stuff
  6. Only kill what you eat or dislike
  7. Cheat not unless pushed
  8. Steal considerately
  9. Don’t lie much
  10. Ass. Don’t go there.

A Modern Version of The 10 Commandments

Compared with modern legislation, or even the small print in any contract, the 10 commandments are crystal clear.  Nevertheless, they benefit from modern treatment especially for those who, while less than fully committed to modern religious teachings, feel the 10 commandments have innate worth.

  1. You should not worry, for worry is the most unproductive of all human activities.
  2. You should not be fearful, for most of the things we fear never come to pass.
  3. You should not cross bridges before you come to them, for no one yet has succeeded in accomplishing this.
  4. You should face each problem as it comes. You can only handle one at a time anyway.
  5. You should not take problems to bed with you, for they make very poor bedfellows.
  6. You should not borrow other people’s problems. They can better care for them than you can.
  7. You should not try to relive yesterday for good or ill, it is forever gone. Concentrate on what is happening in your life and be happy now!
  8. You should be a good listener, for only when you listen do you hear ideas different from your own. It is hard to learn something new when you are talking, and
  9. some people do know more than you do.
  10. You should not become “bogged down” by frustration, for 90% of it is rooted in self-pity and will only interfere with positive action. You should count thy blessings, never overlooking the small ones, for a lot of small blessings add up to a big one.

The Ten Commandments of Computer Ethics

  1. Thou shalt not use a computer to harm other people.
    Simply put: Do not use the computer in ways that may harm other people. Explanation: This commandment says that it is unethical to use a computer to harm another user. It is not limited to physical injury. It includes harming or corrupting other users’ data or files. The commandment states that it is wrong to use a computer to steal someone’s personal information. Manipulating or destroying files of other users is ethically wrong. It is unethical to write programs, which on execution lead to stealing, copying or gaining unauthorized access to other users’ data. Being involved in practices like hacking, spamming, phishing or cyber bullying does not conform to computer ethics.
  2. Thou shalt not interfere with other people’s computer work.
    Simply put: Do not use computer technology to cause interference in other users’ work. Explanation: Computer software can be used in ways that disturb other users or disrupt their work. Viruses, for example, are programs meant to harm useful computer programs or interfere with the normal functioning of a computer. Malicious software can disrupt the functioning of computers in more ways than one. It may overload computer memory through excessive consumption of computer resources, thus slowing its functioning. It may cause a computer to function wrongly or even stop working. Using malicious software to attack a computer is unethical.
  3. Thou shalt not snoop around in other people’s computer files.
    Simply put: Do not spy on another person’s computer data. Explanation: We know it is wrong to read someone’s personal letters. On the same lines, it is wrong to read someone else’s email messages or files. Obtaining data from another person’s private files is nothing less than breaking into someone’s room. Snooping around in another person’s files or reading someone else’s personal messages is the invasion of his privacy. There are exceptions to this. For example, spying is necessary and cannot be called unethical when it is done against illegitimate use of computers. For example, intelligence agencies working on cybercrime cases need to spy on the internet activity of suspects.
  4. Thou shalt not use a computer to steal.
    Simply put: Do not use computer technology to steal information. Explanation: Stealing sensitive information or leaking confidential information is as good as robbery. It is wrong to acquire personal information of employees from an employee database or patient history from a hospital database or other such information that is meant to be confidential. Similarly, breaking into a bank account to collect information about the account or account holder is wrong. Illegal electronic transfer of funds is a type of fraud. With the use of technology, stealing of information is much easier. Computers can be used to store stolen information.
  5. Thou shalt not use a computer to bear false witness.
    Simply put: Do not contribute to the spread of misinformation using computer technology. Explanation: Spread of information has become viral today, because of the Internet. This also means that false news or rumors can spread speedily through social networking sites or emails. Being involved in the circulation of incorrect information is unethical. Mails and pop-ups are commonly used to spread the wrong information or give false alerts with the only intent of selling products. Mails from untrusted sources advertising certain products or spreading some hard-to-believe information, are not uncommon. Direct or indirect involvement in the circulation of false information is ethically wrong. Giving wrong information can hurt other parties or organizations that are affected by that particular theme.
  6. Thou shalt not copy or use proprietary software for which you have not paid (without permission).
    Simply put: Refrain from copying software or buying pirated copies. Pay for software unless it is free. Explanation: Like any other artistic or literary work, software is copyrighted. A piece of code is the original work of the individual who created it. It is copyrighted in his/her name. In case of a developer writing software for the organization she works for, the organization holds the copyright for it. Copyright holds true unless its creators announce it is not. Obtaining illegal copies of copyrighted software is unethical and also encourages others to make copies illegally.
  7. Thou shalt not use other people’s computer resources without authorization or proper compensation.
    Simply put: Do not use someone else’s computer resources unless authorized to. Explanation: Multi-user systems have user specific passwords. Breaking into some other user’s password, thus intruding his/her private space is unethical. It is not ethical to hack passwords for gaining unauthorized access to a password-protected computer system. Accessing data that you are not authorized to access or gaining access to another user’s computer without her permission is not ethical.
  8. Thou shalt not appropriate other people’s intellectual output.
    Simply put: It is wrong to claim ownership on a work which is the output of someone else’s intellect. Explanation: Programs developed by a software developer are her property. If he is working with an organization, they are the organization’s property. Copying them and propagating them in one’s own name is unethical. This applies to any creative work, program or design. Establishing ownership on a work which is not yours is ethically wrong.
  9. Thou shalt think about the social consequences of the program you are writing or the system you are designing.
    Simply put: Before developing a software, think about the social impact it can have. Explanation: Looking at the social consequences that a program can have, describes a broader perspective of looking at technology. A computer software on release, reaches millions. Software like video games and animations or educational software can have a social impact on their users. When working on animation films or designing video games, for example, it is the programmer’s responsibility to understand his target audience/users and the effect it may have on them. For example, a computer game for kids should not have content that can influence them negatively. Similarly, writing malicious software is ethically wrong. A software developer/development firm should consider the influence their code can have on the society at large.
  10. Thou shalt always use a computer in ways that ensure consideration and respect for other humans.
    Simply put: In using computers for communication, be respectful and courteous with the fellow members. Explanation: The communication etiquette we follow in the real world applies to communication over computers as well. While communicating over the Internet, one should treat others with respect. One should not intrude others’ private space, use abusive language, make false statements or pass irresponsible remarks about others. One should be courteous while communicating over the web and should respect others’ time and resources. Also, one should be considerate with a novice computer user.

Speed

That infinite space “between” what we humans feel as time is where computers spend all their time. It’s an entirely different timescale. A great table that illustrates just how enormous these time differentials are. Just translate computer time into arbitrary seconds:

A great table that illustrates just how enormous these time differentials are. Just translate computer time into arbitrary seconds:

1 CPU cycle0.3 ns1 s
Level 1 cache access0.9 ns3 s
Level 2 cache access2.8 ns9 s
Level 3 cache access12.9 ns43 s
Main memory access120 ns6 min
Solid-state disk I/O50-150 μs2-6 days
Rotational disk I/O1-10 ms1-12 months
Internet: SF to NYC40 ms4 years
Internet: SF to UK81 ms8 years
Internet: SF to Australia183 ms19 years
OS virtualization reboot4 s423 years
SCSI command time-out30 s3000 years
Hardware virtualization reboot40 s4000 years
Physical system reboot5 m32 millenia

Approximate timing for various operations on a typical PC:

execute typical instruction 1/1,000,000,000 sec = 1 nanosec
fetch from L1 cache memory 0.5 nanosec
branch misprediction 5 nanosec
fetch from L2 cache memory 7 nanosec
Mutex lock/unlock 25 nanosec
fetch from main memory 100 nanosec
send 2K bytes over 1Gbps network 20,000 nanosec
read 1MB sequentially from memory 250,000 nanosec
fetch from new disk location (seek) 8,000,000 nanosec
read 1MB sequentially from disk 20,000,000 nanosec
send packet US to Europe and back 150 milliseconds = 150,000,000 nanosec

Latency is one thing, but it’s also worth considering the cost of that bandwidth.

An interesting way of explaining this. If the CPU registers are how long it takes you to fetch data from your brain, then going to disk is the equivalent of fetching data from Pluto.

https://blog.codinghorror.com/content/images/2014/May/storage-latency-how-far-away-is-the-data.png
  • Distance to Pluto: 4.67 billion miles.
  • Latest fastest spinning HDD performance (49.7) versus latest fastest PCI Express SSD (506.8). That’s an improvement of 10x.
  • New distance: 467 million miles.
  • Distance to Jupiter: 500 million miles.

That’s disk performance over the last decade. How much faster did CPUs, memory, and networks get in the same time frame? Would a 10x or 100x improvement really make a dent in these vast infinite spaces in time that computers deal with?

To computers, we humans work on a completely different time scale, practically geologic time. Which is completely mind-bending. The faster computers get, the bigger this time disparity grows.