Skip to content

phillbaker/reading

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 

Repository files navigation

Mature Engineer Reading list

In the mode of the distributed systems reading list and the list of awesome, this is a reading list to help folks improve their practice of software engineering. The title is inspired by John Allspaw's (Chief Technology Officer at Etsy) essay on "senior engineers".

How to use this list

In order to account for different learning styles, it's suggested that after reading these articles, you discuss them with someone or a group. While summarizing the article is good (what did it say), what we're really interested in is analyzing the article.

A good way to take notes is to fork this repository, and add bullet points notes after each article. Here are some good discussion starters or notes to bring to a discussion:

  • Of the points made in the article, what were the three most important and why? How are they connected or how are they dissimilar?
  • What wasn't clear? What questions do you have?
  • Where is the author wrong and why?
  • What predictions can we make using the author's arguments?
  • Apply the author's arguments to the current project we're working on, the team/department or the company?

To prepare for the discussion, if you're a:

  • visual learner, try making tables or venn-diagrams or other charts of these categories or pros/cons,
  • auditory learner, try talking these questions through with someone,
  • reading/writing learner, try making an outline of your thoughts,
  • kinesthetic learner, base your notes off of your recent experienes and examples.

Devilish Advocacy

At the very beginning of your journey it’s difficult to identify what is good and what is bad, what is gold and what is fluff. (Lindsay Holmwood)

Some of the viewpoints expressed will be controversial, outdated or crazy - that's intentional. One goal is to challenge existing beliefs to force examination and challenge any biases. If there’s an viewpoint you disagree with, jot down a brief critique, note how the article made you feel and reflect what about the article made you feel that way. This should lead to one of two outcomes: you'll either improve your arguments about why that idea is flawed, or your perspective will become more nuanced. 1

Books

  • Beautiful Code
  • Mythical Man Month
  • Pragmatic Programmer
  • Release It

Essays

Aka "blog posts"

Practical Basics

Introductory topics for a software engineering beginning their journey

  • Debugging and Profiling Although formal education provides solid theoretical foundations for a career in software engineering, it neglects a lot of the practical side. This topic from a course at MIT designed to cover the tools of the trade is a short list of the common tools used to debug a running Linux system. This list of tools and the exercises are a good to put in your toolbox for when things stop working.

Videos

  • What We Actually Know About Software Development, and Why We Believe It’s True
    • Greg Wilson both summarizes peer-reviewed research on software development and advocates for doing science about our profession.
  • Simple Made Easy, slides
    • Rich Hickey discusses simplicity's virtues over easiness'. He showes that while many choose easiness they may end up with complexity, and the better way is to choose easiness along the simplicity path.
  • You and Your Research
    • Richard Hamming shares his observations on "why do so few scientists make significant contributions and so many are forgotten in the long run?" Some of the key ideas include: courage, luck, drive, a focus on important problems, open doors, and selling the work.
  • How To Design A Good API and Why it Matters
    • Josh Bloch examines what makes a good (programmtic) API and practices to design them.

Slides

Why

Here are three reasons to spend time out of your busy schedule doing some reading/watching:

  • stay up to date: in the 21st century, sofware will continue to change. Yesterday it was Java, today its Go, etc.
  • self-improvement: everyone makes mistakes or has gaps in their skillset. Even the best are still learning and improving.
  • career growth: tomorrow's bigger and harder challenges will require new skills. Think about this preparation for handling something an order of magnitude harder.

Related

Contributing

Please contribute good articles back to this list!

  1. Fork it ( https://github.internal.digitalocean.com/phillip/reading/fork )
  2. Create your feature branch off of origin/master (git checkout -b my-new-feature origin/master)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Level up your software engineering

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published