# Things IDK as of 2018

I was impressed by the blog post written by Dan Abramov and decide to write a similar post too.

My intent is NOT to reduce the gap between experienced developers and newbies. I think of that if you want to fix or enhance something, you should know what is the missing part.

Recently, I’ve strongly felt about the lack of CS materials like Algorithm, Design Pattern, and also. I want to learn about them and apply that knowledge to our projects. I believe that it’s the fastest way to enhance development skill for now.

So, below’s are the list of things I don’t know much yet.

• SQL. I know SELECT * FROM * freaks people out. I always prefer to use ORM like Active Record. When I need a complex query or optimizing query for performance, I’ve asked a Backend developer for help. I know SQL’s basic syntax and the concept is simple. However, I’ve got no chance to learn about it.
• Unix commands and Bash. I can use a basic pipe syntax to find and kill Node process. Also, I can use VI to change the file in Terminal when I have to use SSH. I’ve always been troubled with Bash Script that related with the deploy logic. I prefer to use Node or Go Lang for checking the file size.
• Low level typed language. I tried to use Go Lang for my first low-level language. However, Go Lang has no reason to use malloc or control threads by myself. I know what malloc, pointer, Dynamic Memory Allocation but never use it in my main language.
• Design Pattern. Recently I feel a strong demand for this. Because our project becomes huge, and I always think of refactoring for effective code structure. It will make us faster and increase our productivity. After I read Refactoring: Improving the Design of Existing Code , I much more feel that it’s important and essential for every programmer.
• Operating System. I always have curious about how the operating system works. Also when I try to learn about the core of language, (example: Node’s thread pool) I’ve been blocked by OS related things.(syscall, stdin, stdout, …). I read some chapters of Operating System Concepts but there was no time to read all of them yet.
• Algorithm. I know what is the heap sort is. Also I know what O(N) means too. But I don’t know what knapsack is, DFS, Graph theories. What I know is more than O(N^2) is EVIL.
• Data Structure. I know Queue, Stack, and other basic data structures. However, I don’t know how to properly do Tree Rotation, Graph methods.
• Virtual-DOM, Shadow-DOM. What I know is they are different at all. Virtual-DOM is living in memory and generally be used by modern frontend libraries(ex: React). Shadow-DOM is a part of the Web Component.
• Functional Language. I watched a few video clips why Functional Language is great. I’ve learned about the reason why side effect sucks, Pure Function and Memoization. But I never tried ClosureScript or Haskell yet.
• Layout Engine. I know Chrome and Safari uses Webkit, Firefox uses Gecko. Edge will use Webkit…(as a big fan of Mozilla, I agree it’s super bad choice.) I read how QuantumCSS works in Firefox. But I never read source code or know the main design pattern.
• ML. I heard about Deep Learning, AlphaGO. lol. What I know is the model is a result of training. And the model already made is not a big burden to implementation. Some of my colleague always say ‘Study and Do real statistics much more right than ML’. However I’ve never sincerely try them.

These are all I can come up with now. I don’t think I have to learn them all this year.

I just wish that I can learn and apply more fundamental CS concepts to our projects.

Just bought some books (GoF Design pattern, Algorithm, … ) and trying to allocate my time to study.

Thanks for reading, and Happy new year!