Hello Fortana engineers! Make your own branch (with your name) in this repo and check things off as you read/do them. If you want to add, or remove, or replace, or add observations to something, submit a PR against master
.
This list should change as the company changes. We should talk about things on this list!
- React
- Redux and managing state
- Caching API responses
- TypeScript
- Promises
- GraphQL
- Polling and real-time web, websockets
- https://www.figma.com/blog/how-figmas-multiplayer-technology-works/, everything in this blog is worth reading
- https://www.figma.com/blog/realtime-editing-of-ordered-sequences/
- https://www.figma.com/blog/rust-in-production-at-figma/, limitations of a single-threaded event loop for async servers
- https://github.com/elementary-robotics/cloud-frontend,
Video.tsx
andStreamListener.tsx
- CRDTs
- File uploads
- HTML, CSS, SASS, Flexbox, CSS modules
- Application folder structure
- KISS:
src
directory in root of repo, with source code - https://github.com/elementary-robotics/cloud-frontend
- KISS:
- Pre-rendering for SPAs
- API design
- https://stackoverflow.com/questions/4024271/rest-api-best-practices-where-to-put-parameters
- https://stackoverflow.com/questions/16086513/using-query-string-in-rest-web-services
- https://stackoverflow.com/questions/3868705/implementing-url-slug-functionality-in-a-website?rq=1
- https://docs.djangoproject.com/en/2.2/topics/cache/
- pagination, cursors: https://www.django-rest-framework.org/api-guide/pagination/#cursorpagination
- DRF
- FastAPI, Asyncio
- GraphQL
- Mypy
- Redis (pub/sub, streams)
- Docker
- SQL, specifically for Postgres
- Database design
- Indexes, UUIDs, full-text search
- Data migrations
- Data structures (lists, queues, stacks and dicts)
- Performance (database, back end, front end)
- Algorithms
- https://security.stackexchange.com/questions/97825/is-cors-helping-in-anyway-against-cross-site-forgery
- https://softwareengineering.stackexchange.com/questions/216605/how-do-web-servers-enforce-the-same-origin-policy
- https://stackoverflow.com/questions/13897472/how-do-third-party-tracking-cookies-work
- https://kylebebak.github.io/post/browser-security-worse-is-better
- http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/
- https://blogs.msdn.microsoft.com/ieinternals/2009/08/28/same-origin-policy-part-1-no-peeking/
- https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Access-Control-Allow-Origin
- https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
- https://blog.codinghorror.com/protecting-your-cookies-httponly/
- API testing
- Integration tests
- https://github.com/kylebebak/Requester/tree/master/tests
- https://rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf
- https://kylebebak.github.io/post/cargo-cult-testing
- if you want good coverage you need integration tests
- Tests that never fail don't tell you anything
- Test behavior, not implementation
- Test coverage percentage is meaningless on its own, and there's no such thing as 100% test coverage
- Prioritize unit tests for functions that are subtle, difficult, or crucial to the system
- Text editor
- master your text editor, because you use it more than anything else
- https://web.archive.org/web/20170401165039/https://fluff.info/terrible/
- Git
- after your text editor, Git is probably the most important tool to master
- compare files, travel through time, rewrite history and undo mistakes:
log
,reflog
,branch
,diff
,checkout
,reset
,reset --hard
,reset --soft
,cherry-pick
,revert
,stash
,stash pop
, and just mayberebase
- forking projects:
remote
,remote add
,remote remove
- Debugging
- more than anything, this depends on experience, and setting up a really short feedback loop for doing experiments with your code
- it's worth the up-front cost to set up a good dev environment
- Choosing libraries
- number of meaningful contributors, number of issues, ratio of open issues to closed issues, handling of important issues, recent commits, documentation, live examples, TypeScript compatibility
- clone the repo, open it in your text editor, and
yarn start
oryarn dev
or whatever
- Documentation and comments
- https://blog.codinghorror.com/when-good-comments-go-bad/
- https://blog.codinghorror.com/coding-without-comments/
- comments explain why, not how (the code explains how)
- What makes software good (or bad)?
- https://web.archive.org/web/20170401165039/https://fluff.info/terrible/
- https://www.python.org/dev/peps/pep-0020/
- https://blog.bradfieldcs.com/you-are-not-google-84912cf44afb
- https://www.dreamsongs.com/RiseOfWorseIsBetter.html
- https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/
- https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
- https://rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf
- http://calteches.library.caltech.edu/51/2/CargoCult.htm
- Other
- Algorithms, Part I and Part 2: https://www.coursera.org/learn/algorithms-part1
- Introduction to Databases: https://lagunita.stanford.edu/courses/Engineering/db/2014_1/about
- The Mythical Man Month (Fred Brooks)
- a classic on the human elements of software development
- Symbols, Signals and Noise (J.R. Pierce)
- an overview of information theory and its founder Claude Shannon; storage, compression, and transmission of information
- Sets, Functions, and Logic (Keith Devlin)
- sets, logic, number theory, problem-solving
- How to Prove It (Daniel J. Velleman)
- deeper dive into sets, logic, number theory and problem-solving
- Don't Make Me Think (Steve Krug)
- a classic on product design and UX