Developer skills and tips
1. Must skill
Know your tools
your ide shortcuts . if using vscode .cmd+p , cmd+shift+f ,cmd+shift+p could be used every day . knowing them could speed up your productivity .
setup ssh script .folder mirroring and item2 script could also helps to automate server connection.
Mastering Git . beside pull push rebase .. also should know other commands like cherry-pick , rerere +x when push etc .
Algorithm and data structures
We write code everyday . knowing the options of data structures we have is important to simplify the code and helps to optimize the execution time
Code level .Knowing how to design and simplify each interface , between functions ,classes , Apis for client-server .
System level. Design message queue for sub-pub .
Cluster .How each node talk with each other in cluster .how to use zookeeper do service discovery or working with other systems like solr or ELK ,setup a cache (like redis) cluster, database cluster setup master to master , master and follower, separate read(query) and write (command).
Linux Command and Shell
Using everyday . to quickly trouble shooting or debug important to know tail cat head top curl ..also knowing editors like vi could enable your code be debug on every machine .
shell is everywhere on linux .
Though No-SQL is there . but SQL query still in most of systems some of them are legacy .master SQL is a still must .
At least know the common .It’s not just useful for pattern matching or searching .when configuring web server like nginx or grep something there is no choice. even though regex readability is not solid ,many often we have to trade it off for performance and simplicity . mastering regex is a big bonus skill for developer .
2. Working in software project
It’s not about big O notation , not any design pattern or principle . first important thing is readable code .we write code for human and ourselves to read and maintain .It’s compiler and interpreter’s job will translate to lower abstraction language for machine to execute .
Second important should be consistency .still not about design patterns . As software team we must have coding conventions , project folders for api ,UI ,data , constants , system script , service or worker job , migration scripts etc . for each file or function naming must be consistent . if we call it ‘_handler’ then could be confused when see ‘_manager’ or ‘_processor’ . when use LOG it’s also to avoid using ‘logger’ or ‘log’ in other files .
More often . system prefer flexibility over performance .we configure system parameters , validation rules ,UI elements to handle changing requirements. should avoid pushing everything in ‘look up’ table ,we could use ini, json or yml files .
We build things from bottom to top . every feature built by small functions , By piecing features together we get system work. to get system abstraction level correct , need features stay same abstraction level ,then need every function stay at same abstraction level . e.g. function insert_db should not do database connection or string processing .
Corner case handling
All case should be handled or throw exception . even though should avoid special handling , when corner case has bug we have to patch the logic in and get it works and generalize the processing later.
this should never be after thought . which log goes debug , and what log for info or warning .answer have to be clear in mind when write every line of code. to avoid flooded log file or not enough log to trouble shooting .
System global components
All system level components . error handling and error code ,Authentication , request validation or filtering , response payload . These not one-time design .need to be always rely on abstraction (not implementation) so can swap out with better or faster options .
Design all the exceptions in each abstraction layer (e.g. application error and data error) and be consistent. avoid use general exception everywhere .
Integration test and Interface Test is must have , UI automation save your time, unit test when you have time.
3. non-stop learning
Keep trying new languages , databases , message queue , cache ,web frameworks etc . setup in cluster or container environment like docker or kubenates or cloud .