Giter Site home page Giter Site logo

computerscienceresources's Introduction

Computer Science Resources

Acronyms

  • KISS - Keep it simple and straightforward
  • DRY - Don't repeat yourself
  • WET - Write Everything Twice
  • RTFM - Read the friendly manual
  • FUBAR - Fouled up beyond all repair
  • NMP - Not My Problem
  • LGTM - Looks Good To Me
  • DGAF - Doesn't Give A Farthing

Sayings

  • Everything should be made as simple as possible, but no simpler.
  • Cursing is the only language all programmers speak fluently.
  • If you make something idiot-proof, someone will just make a better idiot.
  • Slow is smooth, smooth is fast
  • 90% of success comes from being in the right place, at the right time, in the right uniform.
  • Weeks of programming can save you hours of planning.

Quotes

"Premature optimization is the root of all evil in Programming."

-- Donald Knuth

"If you need more than 3 levels of indentation, you're screwed anyway, and should fix your program."

-- Linus Torvalds, Linux kernel coding style guide, Section 1, Paragraph 3

"Don't put multiple statements on a single line unless you have something to hide"

-- Linus Torvalds, Linux kernal coding style guide, Section 1, Paragraph 6

“Experience is the name everyone gives to their mistakes.”

-– Oscar Wilde

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”

-– Martin Fowler

"Good designers never start by trying to solve the problem given to them: they start by trying to understand what the real issues are. As a result, rather than converge upon a solution, they diverge, studying people and what they are trying to accomplish, generating idea after idea after idea."

-- Don Norman, The Design of Everyday Things, 2013 edition, pg. 218

"There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors."

-- Leon Bambrick paraphrasing Phil Karlton

"Young man, in mathematics you don't understand things. You just get used to them."

-- John Von Neumann to Felix Smith

"[It]'s almost a law of the universe that solutions which are the first thing you think of, look sensible, and are easy to implement are often terrible, ineffective solutions that once implemented, will drag on civilization forever."

-- CGP Grey

"You become a better programmer by being a bad programmer."

-- Theo Browne

"Computers are good at following instructions, but not at reading your mind."

-- Donald Knuth

"What one programmer can do in one month, two programmers can do in two months."

-- Frederick Brooks

"It is the struggle itself that is most important. We must strive to be more than we are. It does not matter that we will never reach our ultimate goal. The effort yields its own rewards."

-- Lt. Cmdr. Data, Star Trek TNG, Written by René Echevarria.

"They did not realize that because of the quasi-reciprocal and circular nature of all improbability calculations, anything that was infinitely improbable was actually very likely to happen almost immediately."

-- Douglas Adams, "Life, The Universe, and Everything"

"Well, what happened? Did you not see it? Were you fucking with it? How did [some] snake get so mad, that it almost killed you?"

-- Bill Burr, "You people are all the same"


Laws, Principles, and Proofs

  • Parkinson's Law - Work expands to fill the time available.
  • Peter's Principle - In a hierarchy, every employee tends to rise to his level of incompetence.
  • Ruckert's Law - There is nothing so small that it can't be blown out of proportion.
  • Murphy's Law - Anything that can go wrong will go wrong.
  • Brook's Law - Adding manpower to a late software project makes it later.
  • Conway's Law - Any piece of software reflects the organizational structure that produced it.
  • Pareto Principle - For many phenomena, 80% of consequences stem from 20% of the causes.
  • Moore's Law - The number of transistors on an integrated circuit will double in about 18 months.
  • Knuth's Optimization Principle -> Premature optimization is the root of all evil.
  • Hanlon's Razor - Never attribute to malice that which is adequately explained by stupidity.
  • Barker's proof - Some flaws will not be discovered until after publication, regardless of proofreading.
  • Bike-Shedding - The time spent on any item of the agenda will be in inverse proportion to the sum (of money) involved.

The Ten Commandments of Egoless Programming

  1. Understand and accept that you will make mistakes.

    • The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry, so we can, and should, learn, laugh, and move on.
  2. You are not your code.

    • Remember that the entire point of a review is to find problems, and problems will be found. Don't take it personally when one is uncovered.
  3. No matter how much "karate" you know, someone else will always know more.

    • Such an individual can teach you some new moves if you ask. Seek and accept input from others, especially when you think it's not needed.
  4. Don't rewrite code without consultation.

    • There's a fine line between "fixing code" and "rewriting code." Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer.
  5. Treat people who know less than you with respect, deference, and patience.

    • Nontechnical people who deal with developers on a regular basis almost universally hold the opinion that we are prima donnas at best and crybabies at worst. Don't reinforce this stereotype with anger and impatience.
  6. The only constant in the world is change.

    • Be open to it and accept it with a smile. Look at each change to your requirements, platform, or tool as a new challenge, not as some serious inconvenience to be fought.
  7. The only true authority stems from knowledge, not from position.

    • Knowledge engenders authority, and authority engenders respect – so if you want respect in an egoless environment, cultivate knowledge.
  8. Fight for what you believe, but gracefully accept defeat.

    • Understand that sometimes your ideas will be overruled. Even if you do turn out to be right, don't take revenge or say, "I told you so" more than a few times at most, and don't make your dearly departed idea a martyr or rallying cry.
  9. Don't be "the guy in the room."

    • Don't be the guy coding in the dark office emerging only to buy cola. The guy in the room is out of touch, out of sight, and out of control and has no place in an open, collaborative environment.
  10. Critique code instead of people

    • In short, be kind to the coder, not to the code. As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc.

Manifesto for Agile Software Development

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.


The Twelve Principles of Agile Software

  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

  2. Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

  4. Business people and developers must work together daily throughout the project.

  5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

  7. Working software is the primary measure of progress.

  8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

  9. Continuous attention to technical excellence and good design enhances agility.

  10. Simplicity--the art of maximizing the amount of work not done--is essential.

  11. The best architectures, requirements, and designs emerge from self-organizing teams.

  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.


The Three Ways of DevOps

  1. Work always flows in one direction: downstream.

    • Work should only flow in one direction. No known defect should be passed downstream. Always seek to increase the flow.
  2. Create, shorten and amplify feedback loops.

    • Establish an upstream feedback loop. Shorten the feedback loop. Amplify the feedback loop.
  3. Continued experimentation, in order to learn from mistakes, and achieve mastery.

    • Promote experimentation. Learn from success and failure. Constant improvement. Seek to achieve mastery through practice.

Must Read Stories

  1. "We can't send mail more than 500 miles"
  2. "The Inner JSON Effect"
  3. "Now that's what I call a hacker", aka, "The best sys admin"
  4. "A mother fucking website"
  5. "A better mother fucking website"
  6. "The grug brained developer"
  7. "Excel rollercoaster"
  8. "On the Turing completeness of PowerPoint"

computerscienceresources's People

Contributors

jakegill70 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.