|
36 | 36 | - [Incident response (alerting, outages, firefighting)](#incident-response-alerting-outages-firefighting)
|
37 | 37 | - [Internet](#internet)
|
38 | 38 | - [Interviewing](#interviewing)
|
39 |
| - - [Learning & memorising](#learning--memorising) |
| 39 | + - [Learning & memorizing](#learning--memorizing) |
| 40 | + - [Low-level](#low-level) |
| 41 | + - [Network](#network) |
40 | 42 | - [Problem solving](#problem-solving)
|
41 | 43 | - [Project management](#project-management)
|
42 | 44 | - [Programming languages](#programming-languages)
|
@@ -103,8 +105,40 @@ There are some free books available, including:
|
103 | 105 | * [On Being A Senior Engineer](http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/)
|
104 | 106 | * [Lessons Learned in Software Development](http://henrikwarne.com/2015/04/16/lessons-learned-in-software-development/): one of those articles that give you years of hard-earned lessons, all in one short article. Must read.
|
105 | 107 | * [Things I Learnt The Hard Way](https://blog.juliobiason.net/thoughts/things-i-learnt-the-hard-way/)
|
| 108 | + * Spec first, then code |
| 109 | + * Tests make better APIs |
| 110 | + * Future thinking is future trashing |
| 111 | + * Documentation is a love letter to your future self |
| 112 | + * Sometimes, it's better to let the application crash than do nothing |
| 113 | + * Understand and stay away of cargo cult |
| 114 | + * "Right tool for the job" is just to push an agenda |
| 115 | + * Learn the basics functional programming |
| 116 | + * ALWAYS use timezones with your dates |
| 117 | + * ALWAYS use UTF-8 |
| 118 | + * Create libraries |
| 119 | + * Learn to monitor |
| 120 | + * Explicit is better than implicit |
| 121 | + * Companies look for specialists but keep generalists longer |
| 122 | + * The best secure way to deal with user data is not to capture it |
| 123 | + * When it's time to stop, it's time to stop |
| 124 | + * You're responsible for the use of your code |
| 125 | + * Don't tell "It's done" when it's not |
| 126 | + * Pay attention on how people react to you |
| 127 | + * Beware of micro-aggressions |
| 128 | + * Keep a list of "Things I Don't Know" |
106 | 129 | * [Signs that you're a good programmer](http://www.yacoset.com/Home/signs-that-you-re-a-good-programmer)
|
107 | 130 | * [Signs that you're a bad programmer](http://www.yacoset.com/Home/signs-that-you-re-a-bad-programmer)
|
| 131 | +* [7 absolute truths I unlearned as junior developer](https://monicalent.com/blog/2019/06/03/absolute-truths-unlearned-as-junior-developer/) |
| 132 | + * Early in your career, you can learn 10x more in a supportive team in 1 year, than coding on your own |
| 133 | + * Every company has problems, every company has technical debt. |
| 134 | + * Being overly opinionated on topics you lack real-world experience with is pretty arrogant. |
| 135 | + * Many conference talks cover proof of concepts rather than real-world scenarios. |
| 136 | + * Dealing with legacy is completely normal. |
| 137 | + * Architecture is more important than nitpicking. |
| 138 | + * Focus on automation over documentation where appropriate. |
| 139 | + * Having some technical debt is healthy. |
| 140 | + * Senior engineers must develop many skills besides programming. |
| 141 | + * We’re all still junior in some areas. |
108 | 142 |
|
109 | 143 | ## Other general material and list of resources
|
110 | 144 |
|
@@ -190,6 +224,11 @@ Biases don't only apply to hiring. For instance, the fundamental attribution bia
|
190 | 224 | * [Write code that is easy to delete, not easy to extend](http://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-delete-not-easy-to)
|
191 | 225 | * [The Ten Commandments of Egoless Programming](http://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/)
|
192 | 226 | * [Clean Code: A Handbook of Agile Software Craftsmanship](https://www.goodreads.com/book/show/3735293-clean-code) 📖, Robert C. Martin. Describes numerous useful best practices. A bit long. There's also a [clean code cheatsheet](cheatsheets/Clean-Code-V2.4.pdf).
|
| 227 | +* [What Software Craftsmanship is about](https://blog.cleancoder.com/uncle-bob/2011/01/17/software-craftsmanship-is-about.html) |
| 228 | + * We’re tired of writing crap. |
| 229 | + * We will not accept the stupid old lie about cleaning things up later. |
| 230 | + * We will not believe the claim that quick means dirty. |
| 231 | + * We will not allow anyone to force us to behave unprofessionally. |
193 | 232 |
|
194 | 233 | ### Computer science
|
195 | 234 |
|
@@ -351,7 +390,7 @@ Note: this is about you as an interviewee, **not** as an interviewer. To check o
|
351 | 390 | * [Interactive Python coding interview challenges](https://github.com/donnemartin/interactive-coding-challenges)
|
352 | 391 | * [tech-interview-handbook/cheatsheet.md](https://github.com/yangshun/tech-interview-handbook/blob/master/preparing/cheatsheet.md)[](https://github.com/mbeaudru/modern-js-cheatsheet):)
|
353 | 392 |
|
354 |
| -### Learning & memorising |
| 393 | +### Learning & memorizing |
355 | 394 |
|
356 | 395 | Learn how to learn!
|
357 | 396 |
|
@@ -387,13 +426,29 @@ Learn how to learn!
|
387 | 426 | * Personalize and provide examples - personalization might be the most effective way of building upon other memories. Your personal life is a gold mine of facts and events to refer to. As long as you build a collection for yourself, use personalization richly to build upon well established memories
|
388 | 427 | * Provide sources - sources help you manage the learning process, updating your knowledge, judging its reliability, or importance
|
389 | 428 | * Prioritize - effective learning is all about prioritizing.
|
| 429 | +* [How to Remember Anything You Really Want to Remember, Backed by Science](https://www.inc.com/jeff-haden/how-to-remember-anything-you-really-want-to-remember-backed-by-science.html) |
| 430 | + * Quiz yourself |
| 431 | + * Summarize and share with someone else. |
| 432 | + * Connect what you just learned to experiences you previously had. |
390 | 433 |
|
391 | 434 | Richard Feynman's Learning Strategy:
|
392 | 435 |
|
393 | 436 | 1. Step 1: Continually ask "Why?”
|
394 | 437 | 2. Step 2: When you learn something, learn it to where you can explain it to a child.
|
395 | 438 | 3. Step 3: Instead of arbitrarily memorizing things, look for the explanation that makes it obvious.
|
396 | 439 |
|
| 440 | +### Low-level |
| 441 | + |
| 442 | +* [Back to Basics](https://www.joelonsoftware.com/2001/12/11/back-to-basics/), Joel Spolsky. Explains why learning low level programming is important. |
| 443 | + * I think that some of the biggest mistakes people make even at the highest architectural levels come from having a weak or broken understanding of a few simple things at the very lowest levels. |
| 444 | + |
| 445 | +### Network |
| 446 | + |
| 447 | +* [The Great Confusion About URIs](https://benbernardblog.com/the-great-confusion-about-uris/) |
| 448 | + * A URI is a string of characters that identifies a resource. Its syntax is `<scheme>:<authority><path>?<query>#<fragment>`, where only `<scheme>` and `<path>` are mandatory. URL and URN are URIs. |
| 449 | + * A URL is a string of characters that identifies a resource located on a computer network. Its syntax depends on its scheme. E.g. `mailto:[email protected]`. |
| 450 | + * A URN is a string of characters that uniquely identifies a resource. Its syntax is `urn:<namespace identifier>:<namespace specific string>`. E.g. `urn:isbn:9780062301239` |
| 451 | + |
397 | 452 | ### Problem solving
|
398 | 453 |
|
399 | 454 | * [Dealing with Hard Problems](https://artofproblemsolving.com/articles/hard-problems)
|
@@ -436,6 +491,12 @@ JavaScript is such a pervasive language that it's almost required learning.
|
436 | 491 | * [Goodbye, Object Oriented Programming](https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53#.39ax09e4k)
|
437 | 492 | * [Functional Programming & Haskell](https://www.youtube.com/watch?v=LnX3B9oaKzw): some good reasons to learn FP!
|
438 | 493 | * [Functional Programming Fundamentals](https://www.matthewgerstman.com/functional-programming-fundamentals/): short introduction to FP and its advantages.
|
| 494 | +* [OO vs FP](https://blog.cleancoder.com/uncle-bob/2014/11/24/FPvsOO.html), Robert C. Martin, The Clean Code Blog. A pretty interesting take on the differences between OOP and FP from an expert in OOP. |
| 495 | + * OO is not about state. Objects are bags of functions, not bags of data. |
| 496 | + * Functional Programs, like OO Programs, are composed of functions that operate on data. |
| 497 | + * FP imposes discipline upon assignment. |
| 498 | + * OO imposes discipline on function pointers. |
| 499 | + * The principles of software design still apply, regardless of your programming style. The fact that you’ve decided to use a language that doesn’t have an assignment operator does not mean that you can ignore the Single Responsibility Principle. |
439 | 500 |
|
440 | 501 | ### Over-engineering
|
441 | 502 |
|
@@ -558,6 +619,18 @@ Rob Pike, [Go at Google: Language Design in the Service of Software Engineering]
|
558 | 619 |
|
559 | 620 | * [Your non-linear problem of 90% utilization](https://blog.asmartbear.com/utilization.html), Jason Cohen: why constantly running at 90% utilization is actually counter-productive.
|
560 | 621 | * [Evidence-based advice on how to be successful in any jobs](https://80000hours.org/career-guide/how-to-be-successful/): most self-help advices are not research-based. The ones listed in this article are.
|
| 622 | +* [The Complete Guide to Deep Work](https://doist.com/blog/complete-guide-to-deep-work/) |
| 623 | + * The ability to perform deep work is becoming increasingly rare at exactly the same time it is becoming increasingly valuable in our economy. |
| 624 | + * Choose Your Deep Work Strategy |
| 625 | + * Build a Deep Work Routine |
| 626 | + * Discipline #1: Focus on the Wildly Important |
| 627 | + * Discipline #2: Act on the Lead Measures |
| 628 | + * Discipline #4: Create a Cadence of Accountability |
| 629 | + * Our Ability for Deep Work is Finite |
| 630 | + * The Craftsman Approach to Tool Selection |
| 631 | + * Stop Using Social Media |
| 632 | + * Get Your Boss on Board With Deep Work |
| 633 | + |
561 | 634 |
|
562 | 635 | ### Web development
|
563 | 636 |
|
|
0 commit comments