Goodbye 2022
· 5 min read
Review
-
implemented over and over
- got speed up to implement
- built patterns of how to implement in my mind
- implemented technically difficult parts
- made use of writing scheme to implement algorithms that recursion is needed
- improve implementation considering the time complexity and the number of rendering
- reviewed PRs at the same time
- led the team in terms of implementation
- got speed up to implement
-
thought team development
- reviewed PRs
- thinking not only how to correct implementation but also how to keep motivation of team members
- just pointing out the causes and solutions of the problem is not enough to solve the problem
- writing docs for team members
- implementation guides
- patterns/recipes
- pitfalls/points to care
- tips
- about
- python
- ts/js
- react
- implementation guides
- reviewed PRs
-
wrote raw sqls
- data migration
- optimized sqls written by other teammate
- query too complex to write in ORM query
- made implementation more efficient, solved lazy reponse problem
- data migration
-
considered compatibility
- fixed bugs that occur on only some browsers or devices
- browsers
- Chrome, Edge or Safari?
- devices
- iPad or Surfface?
-
wrote a lot of tests
- struggled writing tests
- took much more time than implementing the feature
- writing tests was hard work but it gave me deeper understanding of the using language, framework, library and developing the system
- keep tests as simple and less as possible
- maintaining tests is one of costs of development
- struggled writing tests
-
thought about the gap between ideal and real
- compromise as much as you can
- obey the KISS principle
- don't make features more rich than requirements
- maybe implmenting them would be fun and get clients happy, but otherwise you have to write more tests and maintain the features and implementations work correctly considering compatibility to other features
- compromise as much as you can
-
encountered N + 1 problem
- i had just hear the name, not understood what it is but finally i realized the problem along with experience of my failure
- swear never cause it again!
Libraries/Frameworks
Frontend
Chakra UI
- simpler and easier to use than MUI
SWR
- make data fetching and state managiment easy
- graduated from fetching in
useEffect()
React Hook Form
- make implementation of forms in React easy
- good performance
- suppress re-rendering as less as possible
React Testing Library
- tools to test react components basically at point of view of UX, not implementation details
- learned how to use correctly
Tanstack Table (React Table)
- headless UI
- does not touch the appearance/design of table component
- just attaches useful features such as sort and filter
- learned how to implement tables with search form
Next.js
- honestly not understanding deeper yet
serverless-next.js
- make deploying next.js using AWS resources easy
- automatically build a stack including S3, Lambda@Edge, and CloudFront
Zod
- TypeScript-first data validation library
- i wanna use Zod as form validation too but Zod doesn't provide kind of label or alias feature
yup
- Schema-base form validation library
- type inference is weaker than Zod
- providing labeling feature to replace property name with the label in error message
- more useful for form validation than Zod
Backend
Django
- monolithic web app framework
- i don't like monolithic
- especially ORM query
- why do i have to write raw sqls then struggle to rewrite them in ORM query?
- i wanna combine simple and useful tools in my favor
- especially ORM query
FastAPI
- light and fast web app framework
- i prefer this to Django
- simpler and i can use SQLAlchemy for query
- but i don't like to use python to implement web app in the first place
- using FastAPI instead of Django doesn't give me big improvement for development experience
- i feel like implementing web app is verbose somehow
SQLAlchemy
- database toolkit for python
- query API is similar to raw sql
pydantic
- data validation and serializer using type annotations
- using type annotations is kinda hucky
- actually python 3.10 and 3.11 didn't standardize
__future__.annotation
mainly due to FastAPI and pydantic - personally i think it's difficult to use type strictly in python
- actually python 3.10 and 3.11 didn't standardize
pandas
- library to manipulate table data
- used to process excel files possibly having numerous data
- i could manage to implement although it was long time since i had used last
Others
Playwright
- E2E test library
- writing and maintaining E2E tests are too hard
- after all i neglected them and they obsoleted
Docker
- understood detail more
Languages
Rust
- learned what language it is at last
- read The Rust Programming Language twice
- difficult to learn and use
- ownership rule and borrow checker
- invisible so hard to track them
- preventing declarative implementaion
- ownership rule and borrow checker
Books
Done Reading
- The Pragmatic Programmer (20th Anniversary Ed.)
- The Unix Philosophy (1st Ed.)
-
Tenet1. Small is beautiful
Tenet2. Make each program do one thing well
Tenet9. Make every program a filter -
"Software is never finished. It is only released."
-
- Hacking: The Art of Exploitation (2nd Ed.)
- Fluent Python (2nd Ed.)
- The Rust Programming Language
- Debugging Teams
- HRT
- Humility
- Respect
- Trust
- Fail fast and iterate
- HRT
Still Reading
- Essentials of Programming Languages (3rd Ed.)
- A Book of Abstract Algebra
- Joel on Software
- Computer Systems: A Programmer's Perspective (3rd Ed.)