# Programming

TODO

## Articles

* [Coding guidelines for an easier life](https://www.mcdermottroe.com/coding-guidlines-for-an-easier-life/)
* [How to Report Bugs Effectively](https://www.chiark.greenend.org.uk/~sgtatham/bugs.html)
* [Habits I've Developed for Fast + Efficient Programming](https://cprimozic.net/blog/programming-speed-strategies/)
* [Why I Hate Frameworks, Benji Smith.](https://www.fredrikholmqvist.com/pages/why-i-hate-frameworks.html)
* [How I learned to program](https://danluu.com/learning-to-program/)
* [Are You Using The Right Cache?](https://www.lpalmieri.com/posts/caching-types-in-a-microservice-architecture/)
* [20 Things I’ve Learned in my 20 Years as a Software Engineer](https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/)
* [Don't write bugs](https://www.teamten.com/lawrence/programming/dont-write-bugs.html)
* [Deconcentration of Attention](http://deconcentration-of-attention.com/deconcentration-software.html)
* [What is a Staff (or Staff-Plus or Principal) Engineer?](https://mikemcquaid.com/2021/10/01/what-is-a-staff-plus-principal-engineer/)
* [Things unlearned](https://scattered-thoughts.net/writing/things-unlearned/)
* [Data, objects, and how we're railroaded into poor design](https://www.tedinski.com/2018/01/23/data-objects-and-being-railroaded-into-misdesign.html)
* [ConE: A Concurrent Edit Detection Tool for Large Scale Software Development](https://arxiv.org/abs/2101.06542)
* [Code Review from the Command Line](https://blog.jez.io/cli-code-review/)
* [The Speed of Time](https://www.brendangregg.com/blog/2021-09-26/the-speed-of-time.html)
* [Improve Your Life with Long Error Messages](https://blog.appsignal.com/2021/09/22/improve-your-life-with-long-error-messages.html)
* [The Case for 'Developer Experience'](https://future.a16z.com/the-case-for-developer-experience/)
* [Caches, Modes, and Unstable Systems](https://brooker.co.za/blog/2021/08/27/caches.html)
* [Ask HN: Do You Use a Debugger?](https://news.ycombinator.com/item?id=28251896)
* [Ask HN: Is it better to generalise or specialise as a developer?](https://news.ycombinator.com/item?id=27285144)
* [Ask HN: What diagrams do you use in software development?](https://news.ycombinator.com/item?id=26940593)
* [The big-load anti-pattern](https://lemire.me/blog/2021/08/21/the-big-load-anti-pattern/)
* [So you want to write a GUI framework](https://www.cmyr.net/blog/gui-framework-ingredients.html)
* [Ask HN: What has improved You as a Developer?](https://news.ycombinator.com/item?id=28085189)
* [Reflections on 10,000 Hours of Programming](https://matt-rickard.com/reflections-on-10-000-hours-of-programming/)
* [Software Transactional Memory: a stairway to lock-free programming heaven?](https://www.talhoffman.com/2021/03/22/software-transactional-memory/)
* [An incomplete list of skills senior engineers need, beyond coding](https://skamille.medium.com/an-incomplete-list-of-skills-senior-engineers-need-beyond-coding-8ed4a521b29f)
* [How to Design Perfect (Software) Products](http://hintjens.com/blog:19)
* [Instruction level just-in-time programming](https://blog.asrpo.com/jit_programming)
* [Programming is hard](https://dorinlazar.ro/2021-02-programming-is-hard/)
* [My programming setup](https://lemire.me/blog/2021/04/04/my-programming-setup/)
* [Staying out of TTL hell](https://calpaterson.com/ttl-hell.html)
* [How to execute an object file: Part 1](https://blog.cloudflare.com/how-to-execute-an-object-file-part-1/)
* [How to write readable code](http://jeremymikkola.com/posts/2021_02_02_how_to_write_readable_code.html)
* [Why is it so hard to see code from 5 minutes ago?](https://web.eecs.utk.edu/~azh/blog/yestercode.html)
* [Is this a branch?](https://bartwronski.com/2021/01/18/is-this-a-branch/)
* [On navigating a large codebase](https://blog.royalsloth.eu/posts/on-navigating-a-large-codebase/)
* [Why don't schools teach debugging?](http://danluu.com/teach-debugging/)
* [Developers spend most of their time figuring the system out](https://blog.feenk.com/developers-spend-most-of-their-time-figuri-7aj1ocjhe765vvlln8qqbuhto/)
* [Patterns and Software: Essential Concepts and Terminology](https://www.bradapp.com/docs/patterns-intro.html)
* [new codebase, who dis? (How to Join a Team and Learn a Codebase)](https://www.samueltaylor.org/articles/how-to-learn-a-codebase.html)
* [On Developer Metrics - Time to Debug](https://samsaccone.com/posts/time-to-debug.html)
* [How to Make Your Code Reviewer Fall in Love with You](https://mtlynch.io/code-review-love/)
* [Production Oriented Development](https://paulosman.me/2019/12/30/production-oriented-development/)
* [Computers Are Hard: building software with David Heinemeier Hansson](https://medium.com/computers-are-hard/computers-are-hard-building-software-with-david-heinemeier-hansson-c9025cdf225e)
* [why GNU grep is fast](https://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html)
* [Write Libraries, Not Frameworks](https://www.brandons.me/blog/libraries-not-frameworks)
* [Sad state of cross platform GUI frameworks](https://blog.royalsloth.eu/posts/sad-state-of-cross-platform-gui-frameworks/)
* [Goodbye, Clean Code](https://overreacted.io/goodbye-clean-code/)
* [Minimalism in Programming](https://pointersgonewild.com/2018/02/18/minimalism-in-programming/)
* [GOTO or not GOTO вот в чём вопрос](https://habr.com/ru/post/271131/)
* [What is wrong with using goto?](https://stackoverflow.com/questions/3517726/what-is-wrong-with-using-goto)
* [Why programming is difficult](https://joearms.github.io/published/2014-02-07-why-programming-is-difficult.html)
* [Software Engineering at Google](https://arxiv.org/abs/1702.01715)
* [Off-by-one error](https://en.wikipedia.org/wiki/Off-by-one_error)

## Books

* [A PRACTICAL THEORY OF PROGRAMMING (Eric C.R. Hehner)](http://www.cs.toronto.edu/~hehner/aPToP/)
* Оформление программного кода. Методическое пособие (Столяров А.)
* Программирование: введение в профессию (Столяров А.)
* Код: тайный язык информатики (Чарльз Петцольд)
* Совершенный код (Стив МакКоннелл)
* Чистый код (Роберт Мартин)
* Refactoring: Improving the Design of Existing Code, Second Edition (Kent Beck, Martin Fowler)
* [The Debugging Book (Andreas Zeller)](https://www.debuggingbook.org/)
* The Missing README: A Guide for the New Software Engineer (Chris Riccomini, Dmitriy Ryaboy)

## Courses / Videos

* [Programming as Architecture, Design, and Urban Planning](https://youtu.be/B2JF2eAbQWo)
* ["Programming a 144-computer chip to minimize power" - Chuck Moore (2013)](https://youtu.be/0PclgBd6_Zs)
* [Software Engineering's Greatest Hits](https://youtu.be/HrVtA-ue-x0)
* [Google I/O 2009 - The Myth of the Genius Programmer](https://youtu.be/0SARbwvhupQ)
* [Applied Compositional Thinking for Engineers](https://applied-compositional-thinking.engineering/lectures/)
* [State machines are wonderful tools](https://nullprogram.com/blog/2020/12/31/)
* [Compiling Refactors - Benjamin Kovach](https://youtu.be/bs3zY9ZIZv0)
* [MIT 6.001 Structure and Interpretation, 1986](https://youtube.com/playlist?list=PLE18841CABEA24090)
* [Bret Victor The Future of Programming](https://youtu.be/8pTEmbeENF4)
* [Programming Across Paradigms • Anjana Vakil • GOTO 2017](https://youtu.be/Pg3UeB-5FdA)
* [In search of software perfection - 2016 Milner Award lecture by Dr Xavier Leroy](https://youtu.be/lAU5hx_3xRc)

## Interactive learn

* [FreeCodeCamp](https://www.freecodecamp.org/learn/)
* [Programiz](https://www.programiz.com/) - Learn to Code for Free
* [DataMonkey](http://datamonkey.pro/)
* [SoloLearn](https://www.sololearn.com/)
* [W3School](https://www.w3schools.com/)

## Links

* [How does this software work?](https://adrian.geek.nz/docs.html)
* [OMG: Our Machinery Guidebook](https://ourmachinery.com/files/guidebook.md.html)
* [Fundamentals of Optimal Code Style](https://optimal-codestyle.github.io/)
* [Is Parallel Programming Hard, And, If So, What Can You Do About It?](https://mirrors.edge.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html)
* [Code Review Checklist](https://github.com/mgreiler/code-review-checklist)
* [Programming Guidelines](https://github.com/guettli/programming-guidelines)
* [You don't (may not) need loops](https://github.com/you-dont-need/You-Dont-Need-Loops)
* [Awesome Code Review](https://github.com/joho/awesome-code-review)
* [Awesome livecoding](https://github.com/toplap/awesome-livecoding)
* [Awesome Falsehood](https://github.com/kdeldycke/awesome-falsehood)
* [Naming cheatsheet](https://github.com/kettanaito/naming-cheatsheet)
* [Best Practices Checklist](https://github.com/palash25/best-practices-checklist)
* [Programming talks](https://github.com/hellerve/programming-talks)
* [Every Programmer Should Know](https://github.com/mtdvio/every-programmer-should-know)
* [Programming Principles](https://github.com/webpro/programming-principles)
* [Словарь-индекс понятий со ссылками](https://github.com/HowProgrammingWorks/Dictionary)
* [Professional programming](https://github.com/charlax/professional-programming)
