Skip to main content

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
  • 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
  • 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
  • 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
  • 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
  • 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

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

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
  • difficult to learn and use
    • ownership rule and borrow checker
      • invisible so hard to track them
      • preventing declarative implementaion

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

Still Reading

  • Essentials of Programming Languages (3rd Ed.)
  • A Book of Abstract Algebra
  • Joel on Software
  • Computer Systems: A Programmer's Perspective (3rd Ed.)