A collection of programming resources that help me manage my imposter syndrome being paid to program (I have a chemical engineering background).
These are my personal notes - you will often find my notes and summaries alongside links to articles.
Hidden inside these notes are teaching materials:
- fundamentals/computers.md,
- fundamentals/programming.md,
- bash-and-unix/intro.md,
- test-driven-development.
- Leanrning Hub - Programming Basics.
I also maintain similar collections on reinforcement learning and machine learning.
Project Audio for GitHub - tracks events happening across GitHub and converts them to music.
Listen to Wikipedia - real-time visualization and sonification of Wikipedia activity.
What every computer science major should know
Overlooked No More: Alan Turing, Condemned Code Breaker and Computer Visionary
The Friendship That Made Google Huge - Jeff Dean and Sanjay Ghemawat
How Data (and Some Breathtaking Soccer) Brought Liverpool to the Cusp of Glory
A Unicorn Lost in the Valley, Evernote Blows Up the ‘Fail Fast’ Gospel
Cities: Skylines is Turing Complete
How Notion pulled itself back from the brink of failure
- Everything I googled in a week as a senior software engineer
- Everything I googled in a week as a professional software engineer
- Start at the beginning: the importance of learning the basics
- Burnout, a cautionary tale (and a plea to take a break)
- Give yourself a break: lessons from burnout
- A terrible schema from a clueless programmer HN Discussion
- Tasks, lists, and promises
- One way a builder culture can fail
- An incomplete list of complaints about real code
- Unfortunate things about performance reviews
- (A few) Ops Lessons We All Learn The Hard Way
- Consistent Tools
- Writing Shell Scripts
- Industry vs Academia
- Clever vs Insightful Code
- What engineering can teach (and learn from) us
- Are we really engineers?
- The Hard Part of Learning a Language
- Don't ask if a monorepo is good for you – ask if you're good enough for a monorepo
- Evil tip: avoid "easy" things
- Love thy coworker; thy work, not necessarily
- Things from Python I'd miss in Go
- Engineers vs managers: economics vs business
- The cardinal programming jokes
The Clean Code Blog - Robert C. Martin (Uncle Bob)
koaning.io - Vincent D. Warmerdam
RosettaGit - solutions to the same task in as many different programming languages.
Screenshots from developers & Unix people (2002)
Screenshots from developers: 2002 vs. 2015
At what time of day do famous programmers work?
The challenges of teaching software engineering
The Honeypot documentaries on Ember.js, Vue.js & GraphQL.
List of software development philosophies - Wikipedia, including Rubber duck debugging.
dwmkerr/hacker-laws - Laws, Theories, Principles and Patterns that developers will find useful.
Richard Hamming - You and Your Research Lecture
The Architecture of Open Source Applications - Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's successes.
Do call yourself a programmer, and other career advice
Don't Call Yourself A Programmer, And Other Career Advice
Software Development Waste - Hacker News discussion
Building the wrong product
- product that does not address user business needs
- not doing research on users or businesses
- ignoring feedback, low user value features
Mismanaging backlog
- duplicating work, low value features, delaying bug fixes
- working on too many features simultaneously, imbalance of feature work and bug fixing, delaying testing or critical bug fixing
Rework
- altering delivered work that should have been done correctly
- no clear definition of done
Unnecessarily complex solutions
- a more complicated solution than necessary
- a missed opportunity to simplify features, user interface, or code
- unnecessary feature complexity from the user’s perspective
- unnecessary technical complexity
- duplicating code, lack of interaction design reuse, overly complex technical design created up-front
Extraneous cognitive load
- the costs of unneeded expenditure of mental energy
- suffering from technical debt,
- inefficient tools and problematic APIs, libraries, and frameworks
- unnecessary context switching
- inefficient development flow
- poorly organized code
Psychological distress
- burdening the team with unhelpful stress
- low team morale
- rush mode
- interpersonal or team conflict
Waiting/multitasking
- cost of idle time, often hidden by multi-tasking
- slow tests or unreliable tests
- unreliable acceptance environment
- missing information, people, or equipment
- context switching from delayed feedback
Knowledge loss
- cost of re-acquiring information that the team once knew
- team churn
- knowledge silos
Ineffective communication
- incomplete, incorrect, misleading, inefficient, or absent communication
- team size too large
- asynchronous communication - distributed teams/stakeholders, opaque processes outside team
- imbalance - dominating the conversation; not listening
- Inefficient meetings (lack of focus; skipping retros; not discussing blockers each day; meetings running over (e.g. long stand-ups))
The A-Z of Programming Languages
History of Infra as Code - talk about history of cloud services, Docker etc
History of Programming Language Conference
An opinionated history of programming languages
Is It Time to Rewrite the Operating System in Rust? - Bryan Cantrill - 2018
Why Isn't Functional Programming the Norm? – Richard Feldman - 2019
Why does "=" mean assignment? - Hillel Wayne
Open Source Society University - Computer Science
The Good Research Code Handbook
Developer Roadmaps - Python, React, backend, frontend.
6.005 Software Construction - course homepage - notes - introduces fundamental principles and techniques of software development - how to write software that is safe from bugs, easy to understand, and ready for change.
Systematic Program Design - video lectures.
calmcode.io - video tutorials for modern ideas and open source tools (mostly Python)
ines/course-starter-python - course framework for spaCy
./missing-semester - gain proficiency with computing systems (shell, editor, version control) - notes - lecture videos
- Lecture 4: Data Wrangling (2020) - sed
- Lecture 5: Command-line Environment (2020) - tmux, ssh
- Lecture 8: Metaprogramming (2020) - make, testing
- Lecture 9: Security and Cryptography (2020) - hashing
Introduction to Computer Science and Programming in Python - lecture videos - course home page
Teach Yourself Computer Science
Computer Science from the Bottom Up
CS360 -- Systems Programming, and the module on Memory.
A Mind at Play: How Claude Shannon Invented the Information Age
Algorithms to Live By: The Computer Science of Human Decisions - Christian & Griffiths
Clean Architecture: A Craftsman's Guide to Software Structure and Design - Robert C. Martin
Introduction to High-Performance Scientific Computing - Victor Eijkhout
- Bjarne Stroustrup: C++
- David Patterson: Computer Architecture and Data Storage
- Jim Keller: Moore's Law, Microprocessors, Abstractions, and First Principles
- Jim Keller: The Future of Computing, AI, Life, and Consciousness
- James Gosling: Java, JVM, Emacs, and the Early Days of Computing
- Chris Lattner: The Future of Computing and Programming Languages
- Brian Kernighan: UNIX, C, AWK, AMPL, and Go Programming
- Guido van Rossum: Python
- Richard Karp: Algorithms and Computational Complexity
- Brendan Eich: JavaScript, Firefox, Mozilla, and Brave
- Charles Hoskinson: Cardano
- Jeffrey Shainline: Neuromorphic Computing
Presentable - how we design and build the products that are shaping our digital future