1. 0(n log n)
  2. How to hash a data structure
  3. When to use a hashmap
  4. When to use an array
  5. When not to use an array
  1. [1..100].map(addOne)
  2. [1..100].reduce(sum)
  3. Why you can’t string append in a loop
  4. That the next time after 1:59 is not 2:00
  5. Why “float accountBalance = 100.32” is a bug
  6. How to write a recursive algorithm
  7. When to write a recursive algoritm
  8. What tail call optimization is
  9. How a compiler works
  10. O(1)
  11. Why was OO invented?
  12. Why do some engineers hate LISP?
  13. Why do some engineers swear by LISP?
  14. Why do some engineers hate OO?
  15. Why do some engineers swear by OO?
  16. How to switch between normal and insert mode in Vi
  17. How to save in Vi
  18. Why is there are a long-running flame war between vi and emacs
  19. What is the visitor pattern
  20. How does a buffer overflow exploit work
  21. What does a buffer overflow exploit look like in code
  22. How does garbage collection work
  23. How does double buffering work
  24. How does DNS work
  25. What it feels like when it is harder than it should be
  26. What does cyclomatic complexity measure?
  27. Why does high cyclomatic complexity imply buggy code?
  28. How to spot buggy code using only whitespace
  29. Why do some engineers swear by spaces?
  30. Why do some engineers swear by tabs?
  31. How to debug with a rubber ducky
  32. What is TCP and why would you use it?
  33. What is UDP and why would you use it?
  34. What is a password salt and why do you use it?
  35. How do random number generators work?
  36. When to build a graph?
  37. What happens when you git rebase?
  38. When happens when you git merge?
  39. What is fast-forward in git?
  40. What really happens when you revert a merge commit in git?
  41. Why are the estimates always wrong?
  42. What is the million-man-hour myth?
  43. Which side of the modal dialog the cancel button goes on
  44. When not to show a modal dialog
  45. What is a screen reader
  46. How do you implement and train a neural network
  47. An algorithm that sorts in less than O(n2)
  48. How to sort a binary tree
  49. What features allow NoSQL databases to scale horizontally better than SQL databases
  50. What features do NoSQL databases sacrifice from SQL databases
  51. ACID vs BASE
  52. How deadlocks happen
  53. What Turing Completeness proves
  54. What it doesn’t prove
  55. Dependency injection
  56. The two generals problem
  57. How much latency feels instantaneous
  58. how much latency feels fast
  59. slow
  60. how much latency before the user gives up
  61. why you never run a cron job every five minutes in a distributed system
  62. that the user doesn’t know what he wants
  63. how to tell what the user actually wants
  64. what your boss really wants
  65. the cost of your program crashing
  66. what a new user sees when he starts your program
  67. what your grandmother sees
  68. how to explain why a feature is difficult or impossible in words an MBA can understand
  69. in words your grandmother can understand
  70. in words an arrogant junior engineer can understand
  71. what each of these people really wants when they ask for the impossible feature
  72. that easy-to-learn tools usually increase project complexity
  73. that hard-to-learn tools usually decrease project omplexity
  74. why hardware manufacturers invest billions in open source
  75. how Bill Gates made his billions
  76. the business model of a successful open source product
  77. what marginal cost says about software as a business
  78. what marginal cost says about open source software
  79. why most of the highest quality software in the world costs $50-$200 per license.
  80. why the lowest quality software in the world costs $1,000-$100,000 per license.
  81. when to ask for help
  82. when to add a third party dependency
  83. when to roll your own
  84. when to ignore the contractor
  85. and when to defer to her
  86. grep
  87. grep -v
  88. what Chesterton’s fence says about legacy code
  89. Be fluent in a dynamically typed language
  90. …a statically typed language
  91. …an object oriented language
  92. …a functional language
  93. …a scripting language
  94. C
  95. LISP macros
  96. how to implement a hobby language of each of these types in C
  97. what it feels like to return to bad code after 6 months away
  98. what the web is like at 56k
  99. what the web is like on a screen reader
  100. why regex cannot model XML
  101. Each type of SQL join
  102. its performance
  103. its treatment of missing data
  104. that Object-Relational mapping is impossible
  105. That sometimes impossible things are worth almost doing
  106. Nothing is easy
  107. You need sleep to live
  108. Your skills are probably worth more than you think
  109. That engineers are taken out and shot at 40
  110. How and when to optimize for CPU cycles
  111. How and when to optimize for memory
  112. How and when to optimize for latency
  113. That usually it’s best not to optimize at all
  114. How to optimize for free time
  115. How to optimize for family
  116. How to optimize for low bug counts
  117. How to ask for a raise
  118. How and why to avoid a bad software team
  119. You need exercise to live
  120. That you will desperately want a non-computer hobby by your mid-30s.
  121. All that stuff about good computer posture applies to you.
  122. The Gang of Four Design Patterns
  123. The Unix Philosophy
  124. Why engineers still use tools written the Unix way decades later
  125. Why everything for end-users written the Unix way is dead and bankrupt.
  126. What you sound like as a bright young engineer to the old timers
  127. What the old timers sound like to a bright young engineer.
  128. Why it seems like marketing never does any work
  129. Why your blue-collar cousin thinks you don’t do any work
  130. Why so many engineers hate Java
  131. Why so many businesses use Java
  132. What an architecture astronaut is
  133. What a network effect is
  134. Commodification
  135. Promises
  136. How to search a 100kb file for a string?
  137. A 2 terabyte file
  138. In ISO-8859-1
  139. How to ensure only one copy of your program is running
  140. Why email isn’t secure
  141. The implications of the major open source licenses for commercial software development
  142. What a Heisenbug is
  143. How to debug it
  144. How to avoid it
  145. What a race condition is and what it looks like in code.
  • A bonus one: That much intelligent behavior can be emulated with a heuristic that simply maximizes the number of available actions next tick.

( This was inspired by “Two Hundred and Fifty Things an Architect Should Know” by Michael Sorkin )

blog comments powered by Disqus


10 May 2020