Public speaking course notes Read "Dynamo, Amazon’s Highly Available Key-value Store" Read "Bigtable, A Distributed Storage System for Structured Data" Read "Streaming Systems" 3, Watermarks Read "Streaming Systems" 1&2, Streaming 101 Read "F1, a distributed SQL database that scales" Read "Zanzibar, Google’s Consistent, Global Authorization System" Read "Spanner, Google's Globally-Distributed Database" Read "Designing Data-intensive applications" 12, The Future of Data Systems IOS development with Swift Read "Designing Data-intensive applications" 10&11, Batch and Stream Processing Read "Designing Data-intensive applications" 9, Consistency and Consensus Read "Designing Data-intensive applications" 8, Distributed System Troubles Read "Designing Data-intensive applications" 7, Transactions Read "Designing Data-intensive applications" 6, Partitioning Read "Designing Data-intensive applications" 5, Replication Read "Designing Data-intensive applications" 3&4, Storage, Retrieval, Encoding Read "Designing Data-intensive applications" 1&2, Foundation of Data Systems Three cases of binary search TAMU Operating System 2 Memory Management TAMU Operating System 1 Introduction Overview in cloud computing 2 TAMU Operating System 7 Virtualization TAMU Operating System 6 File System TAMU Operating System 5 I/O and Disk Management TAMU Operating System 4 Synchronization TAMU Operating System 3 Concurrency and Threading TAMU Computer Networks 5 Data Link Layer TAMU Computer Networks 4 Network Layer TAMU Computer Networks 3 Transport Layer TAMU Computer Networks 2 Application Layer TAMU Computer Networks 1 Introduction Overview in distributed systems and cloud computing 1 A well-optimized Union-Find implementation, in Java A heap implementation supporting deletion TAMU Advanced Algorithms 3, Maximum Bandwidth Path (Dijkstra, MST, Linear) TAMU Advanced Algorithms 2, B+ tree and Segment Intersection TAMU Advanced Algorithms 1, BST, 2-3 Tree and Heap TAMU AI, Searching problems Factorization Machine and Field-aware Factorization Machine for CTR prediction TAMU Neural Network 10 Information-Theoretic Models TAMU Neural Network 9 Principal Component Analysis TAMU Neural Network 8 Neurodynamics TAMU Neural Network 7 Self-Organizing Maps TAMU Neural Network 6 Deep Learning Overview TAMU Neural Network 5 Radial-Basis Function Networks TAMU Neural Network 4 Multi-Layer Perceptrons TAMU Neural Network 3 Single-Layer Perceptrons Princeton Algorithms P1W6 Hash Tables & Symbol Table Applications Stanford ML 11 Application Example Photo OCR Stanford ML 10 Large Scale Machine Learning Stanford ML 9 Anomaly Detection and Recommender Systems Stanford ML 8 Clustering & Principal Component Analysis Princeton Algorithms P1W5 Balanced Search Trees TAMU Neural Network 2 Learning Processes TAMU Neural Network 1 Introduction Stanford ML 7 Support Vector Machine Stanford ML 6 Evaluate Algorithms Princeton Algorithms P1W4 Priority Queues and Symbol Tables Stanford ML 5 Neural Networks Learning Princeton Algorithms P1W3 Mergesort and Quicksort Stanford ML 4 Neural Networks Basics Princeton Algorithms P1W2 Stack and Queue, Basic Sorts Stanford ML 3 Classification Problems Stanford ML 2 Multivariate Regression and Normal Equation Princeton Algorithms P1W1 Union and Find Stanford ML 1 Introduction and Parameter Learning

Reading "Clean code"

2022-05-28

  • Clean codes are elegant and efficient.
    • Straightforward, minimal dependencies, articulated error handling, optimal performance, does one thing well.
  • Boy Scout Rule: Leave the campground cleaner than you found it.

Meaningful names

  • Use intention-revealing names
    • Answers all big questions; no comment required
  • Avoid disinformation
    • Like single-letter names
  • Make meaningful distinctions
    • Not sufficient to add numbers, noise words or prefix conventions (“a”, “the”, etc) to distinguish two similar variables
      • e.g., list_1, list_2; product_info, product_data
  • Use pronounceable names
    • Avoid names like genymdhms
  • Use searchable names
    • MAX_CLASSES_PER_STUDENT instead of 7.
    • Single-letter names may be fine as a local variable inside short methods.
  • Avoid encodings
    • Avoid encode type or scope information into names
  • No member prefixes like m_address
  • Interfaces and implementations
    • Prefer to leave interfaces unadorned, ShapeFactory instead of IShapeFactory. Users don’t need to know we are handling them an interface. Implementations can be encoded like ShapeFactoryImpl.
    • Avoid mental mapping
      • Readers shouldn’t have to mentally translated a name into other name they already know, like t for time.
  • Class names
    • Should be noun or noun phrases like Customer, Account, AddressParser.
    • Choose a more descriptive names, avoid Manager, Processor Data or Info.
  • Method names
    • Should be verb or verb phrases.
    • Try use get, set prefixes.
    • When the constructors are overloaded, prefer static factory methods with names that describe the arguments.
      • e.g., Complex.FromRealNumber(23.0) is better than new Complex(23.0).
      • Consider making corrsponding constructors private.
  • Don’t be cute
    • Say what you mean. Avoid using slangs. Just DeleteItems instead of HolyHandGrenade.
  • Pick one word per concept
    • and stick with it. get, fetch, retrieve; controller, manager, driver etc.
  • Use solution domain names
    • CS terms, algorithm names etc. Visitor, Queue
  • Using problem domain names
  • Add meaningful context
    • Use addrState to note the state is for address. Using an Address class is even better.
  • Don’t add gratuitous context
    • Don’t use the same prefix for many methods and classes. Shorter names are generally better. Add no more context to a name than is necessary.

Functions

  • Small
    • Functions should hardly ever be 20 lines long.
    • The indent level of a function should not be greater than one or two.
  • Do one thing
    • Do it well and do it only.
    • Sections within functions, a clear indication that a function is doing more than one thing.
  • One level of abstraction per function
  • The stepdown rule, reading code from top to bottom
    • We want the code to read like a top-down narrative.
    • Every function to be followed by those at the next level of abstractions.

Creative Commons License
Melon blog is created by melonskin. This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
© 2016-2024. All rights reserved by melonskin. Powered by Jekyll.