Skip to main content

Log: 202112

· 7 min read

Achievement

  • Programming TypeScript / Boris Cherny / O'Reilly
  • Responsive Web Design with HTML5 and CSS / Ban Frain / Packt
  • Effective TypeScript / Dan Vanderkam / O'Reilly

In Progress

  • Essentials of Programming Languages / Daniel P. Friedman, Mitchell Wand / The MIT Press
  • Pragmatic Programmer / David Thomas, Andrew Hunt / Pearson Addson-Wesley
  • The Unix Philosophy / Mike Gancarz
  • Database Internals / Alex Petrov / O'Reilly

Review of My 2021

Learned about

  • CS
    • Systems
      • Clean Architecture
    • Algorithms
      • AtCoder
        • Green
      • Cracking the Coding Interview (6th Edition)
        • C++
        • Python
    • Math
      • Number Theory
      • Logic
      • Computation Theory
      • Linear Algebra
      • Statistics
      • Graph Theory
    • Machine Learning / Deep Learning
      • TensorFlow
      • Keras
    • Database
      • Database Internals
  • Languages
    • C++
    • Python
      • Pytest
    • JavaScript/TypeScript
      • React
        • Next.js
        • React Testing Library
      • Node.js
        • Jest
    • Functional Programming
      • Haskell
      • Scala
      • Scheme
      • JavaScript
        • React
  • AWS
    • SAM
    • Lambda
      • Lambda Layers
    • API Gateway
    • S3
    • CloudFront
    • CloudWatch
      • log
      • watch
    • DynamoDB
    • Route53

Programming Languages

JS/TS

it was soooooooooooo big for me to have learn about JavaScript/TypeScript deeply.

  • JS/TS is the best language for me so far.
    • i can write code easily.
      • i can write both frontend and backend in just JS/TS only.
        • i knew that it's hard so much to keep learning and using some languages in practice.
      • rich syntaxies and language features
        • array function
          • this is a very big feature to those who like functional style.
        • spread syntax, object destruction, promise, await/async etc
      • transpile
        • always work in the newest JS/TS version
          • JS has many pitfalls that are awkward and surprise novices.
          • new syntaxies or language structures have been released to replace them although old ones will remain in the future for backward-compatibility.
          • but we can always write program safely and comfortably in the newest JS/TS version, then transpile it to a target older version so we don't worry about the old language features.
        • prototyping or tracer bullet
          • i can ignore compile errors from TS and emit the build product anyway.
          • this flexibility is useful for prototyping or tracer bullet
            • in early stage, implement roughly to think of specification details
            • then gradually get it strict for realistic system
      • static analysis
        • i can catch bugs not at runtime but at compile time
        • type safe
          • TS gives me useful infomation about a variable, funciton, or so when i'm writing code
          • TS notifies me even typos by using String Union
      • structural type
        • it's more flexible and useful for web development than nominal type
    • it's popular
      • someone said that googlability is preferable to language goodness. it's one of truths
      • supported by many services and platforms
        • AWS
      • a lot of frameworks and libraries provided by communities
  • demand to master JS
    • JS is popular but i feel that those mastering JS is less than i expect

Python

  • i still think that Python is a good language
    • simple syntax
    • useful language features and built-in functions
    • we can run an implementation anyway because of dynamically interpreted.
    • we can add type infomation using typehint.
    • popular
      • many books about Python
      • many services and platforms support Python
      • many libraries and platforms published by communities
  • but i feel that it might not satisfy strictness to develop a production.
    • type system is insufficient
      • VSCode often doesn't show up type information even when using typehint
      • these is no compile time error; just all occur runtime
    • less maintainancibility
      • there is no constant variable in Python
  • for my preference
    • the syntax is not for functional sytle
      • not type safe
      • lambda function can be written in only one line
      • it's difficult to chain functions

Haskell/Scheme

  • writing programs in Haskell and Scheme was very good excercise to implement logics in functional programming style.
    • i got familiar with the recursion.

Development

Test

  • i wrote tests right for the first time.
  • i spent a lot of time to learn how to write tests, and implement actually and run tests properly...
    • Pytest
    • Jest
    • React Testing Library
      • not easy to use...
      • GUI test is more difficult than tests for backend.
      • i don't know React design pattern to make tests easy.
        • i can't divide a form component into API fetching and renderer.
  • i knew that writing test take more time than implementing features.
    • it makes me to consider testability while implementing features.
      • i got to be to prefer functional programming style.

Algorithms

  • AtCoder and Cracking the Coding Interview was very good practice to implement algorithms.
    • when i'm in trouble to implement logics in ordinal development declined.
    • i can easily modify an existing data structure or implement a new custom data structure if needed
  • search algorithms such as DFS and BFS is most useful for me.
    • i can manage to implement so many logic using DFS if i can ignore the time complexity.
    • to constrast, i've had no chance to use algorithms regard to the number theory in app developement.

AWS

  • i was astonished by the number of services and configurability at first.
    • examples in official docs are too few so i had to had so many trials and errors to deploy properly.
    • i knew that each service has the depth to experiment and configure options to optimize the perfomance.
    • but i could know the convinience of cloud service and the power of infrustructure as a code.
      • i implemented a web app backend in a template file.
        • we can manage infrustructures in VCS
        • we can copy it and create the same another environment easily
        • we can deploy and delete it easily
  • i didn't take exam for Certified Solution Architect finally.
    • i want to use time for other things to learn and i feel that it's better to work actually rather than memorize details including possibly unnecessary knowledge

English

  • i've read about 20-30 books written in English this year.

  • i've bought Japanese books about math or programming no longer.

    • i noticed that when there are things difficult to understand in English, they are also difficult in Japanese.
    • why it's difficult to understand them is not because the English texts are difficult, just because they themselves are complicated.
    • if the difference is little, it's better to read and learn about them in English because i can learn and practice English at the same time.
  • my English skills are reading >> writing > listening > speaking.

    • reading was improved so much.
      • i'm no longer in trouble when i read refarences or manuals in English.
      • vocabulary is still poor.
        • there are so many words i can't read.
        • i can't understand jokes or parables.
        • i don't know about casual or daily English at all
          • i'm now just specific to programming or math.
    • writing
      • writing is still slow but i feel it get to be better.
      • i became to be able to write documents about sysmtes or tools.
      • i can't write casual English.
        • i can't chat by chat apps.
    • listening, speaking
      • it's stil not good but improved by
        • watching youtube videos, explaining programming launguages, frameworks, algorithms or so, with CC feature.
        • reading books aloud

What Next?

  • i want to implement a middle or large system
  • i want to make apps
    • my blog
      • i want this to be a platform to exhibit my implementations
        • not only interesting but also entertainable or artistic
    • study app
      • like izanami jinja i made before
  • i want to read
    • Essentials of Programming Languages
    • Computer Organization and Design MIPS Edition: The Hardware/Software Interface
    • The Linux Philosophy
    • about computer network
    • about functional programming in practice
    • about software architecture
    • about system architecture