Mistakes Junior Coders Make

分享看视频做的一些记录

Top 3 Mistakes Junior Coders Make
https://www.youtube.com/watch?v=4Bgeumjhf4w

  1. They believe everything they have build has to be scalable like Facebook or Instagram, they always look at “what happens if I have s millions users, what am I going to do…”. This is not gonna happen for 99.99999% of projects that you have work on, you do not have to worry about scale for the most part, for the vast majority apps you ever work on.

  2. Write time speed is far more important than runtime speed in development.

  3. Don’t be chasing after the bleeding edge tech, let the jobs and opportunities and job requirements determine what tech you choose, not what’s buzzing now on interwebs.

  4. Don’t try to write overly complex code. Don’t do it.

  5. Strive to write really easy to understand code and you will rise quickly as a favorite developer in the team or in the business, because they are going to say: “This person here write really good simple code.”

  6. Newbies tried to reinvent the wheels, they are reluctant to use libraries or frameworks

These tips are based on my 250 years as a developer, trust me, these are universal, doesn’t matter what language, doesn’t matter what framework, nothing matters really…

GraphVisualization

Graph Visualization
https://graphviz.org/about/

Guide
https://graphviz.org/pdf/dotguide.pdf

Graphviz Visual Editor(Playground)
http://magjac.com/graphviz-visual-editor/

将代码转换为图片…

Inspired by https://github.com/aasm/aasm_graph

1
2
3
4
# Macos Installation

tldr dot
brew install graphviz

类似的工具

使用类似工具的理由

  • 文本占用空间小
  • 修改灵活, 成本低
  • 文本可以用git之类的版本管理工具做记录

linux-last-command

shell 里, !! 表示上一个命令

刚发现一个结合 watch 的好的用法

1
2
3
4
5
6
7
8
9
10
11
➜  ~ df -h
Filesystem Size Used Avail Use% Mounted on
udev 934M 0 934M 0% /dev
tmpfs 192M 4.8M 187M 3% /run
/dev/vda1 40G 9.2G 29G 25% /
tmpfs 956M 0 956M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 956M 0 956M 0% /sys/fs/cgroup
tmpfs 192M 0 192M 0% /run/user/1000
➜ ~ watch "!!" # 注意要用 双引号括起来
➜ ~ watch "df -h"

基本思路就是, 先输入单个命令, 再用 watch "!!" 去自动运行…

非 常 好 用 ;D

sublime-book-read

sublime-text-power-userpdf.pdf

command palette

cmd + p

cmd + p -> : (go to line xxx)

cmd + p -> @ (or cmd + r) (go to Code & Text Blocks)

cmd + p -> # (fuzzy search 在某个文件里做模糊搜索)

Chaining Commands

多个命令可以连起来使用

e.g.

cmd + p -> README.md:80
cmd + p -> README.md#keyword
cmd + p -> README.md@title_xx

Preferences —>Settings - User and defining the binary_file_patterns property:

ignore files

1
"binary_file_patterns": [".DS_Store", "H.gitignore", "*.psd"]

ignore folders

1
"binary_file_patterns": ["node_modules/", "vendor/", "tmp/"]

cmd + k, cmd + b

distraction free mode

view -> “enter distraction free mode”

ctrl + cmd + shift + f

status bar

view -> hide/show status bar

minimap

view -> hide/show minimap

multiple panel

view -> layout -> xxx

Moving Between Tab

cmd + option + arrows(-> or <-)

Multiple Carets/cursor 多光标

ctrl + shift + up/down arrows

cmd + click

Quick Find Next / Quick Skip Next

cmd + d, and cmd + k + d to skip

Creating Snippets

Tools —► New snippet

tool -> developer

new plugin
new snippet
new syntax

Search and replace

cmd + f
cmd + shift + f

cmd + g
cmd + shift + g

Search Options

regex search
case sensitive
whole word
show context

move line up/down

ctrl + cmd + up/down arrows

line duplicating

cmd + shift + d

delete line

cmd + backspace (backword delete)
ctrl + k (forward delete)

ctrl + shift + k (delete the whole line)

ctrl + backspace (backword delete word)
ctrl + fn + backspace (forward delete word)

insert line

cmd + shift + enter (insert before)
cmd + enter (insert after)

jump by word

option + left/right arrows

到105页了

Projects(page107)

Projects in Sublime Text are a nice way to manage different websites or applications that you may be working on. The main benefit to using projects in Sublime Text are the ability to have specific editor settings that apply only to that specific projects. This is especially helpful when working with teams who may not have their editor setup properly for contributing.

There are two files that make up a Sublime Text project: the .sublime-project file and the .sublime-workspace file.

The first being a file to hold your projects settings and the second being a place where the editor can dump user specific data.

If you were to open the .sublime-workspace file, you would see all kinds of things from previously opened files to editor settings. You will never need to edit this file, so it’s best just to ignore it.

When working with version control, the .sublime-project file should be checked in and shared while the .sublime-workspace file should not. I find it helpful to get myself into the habit of adding .sublime-workspace to all my .gitignore files.

recording a macro

tools -> record macro

tools -> save macro -> “untitled.sublime-macro”

sublime building system

仔细研究一下

Build tasks are housed in a .sublime-build file which is aJSON file that holds a number of options for running

Your own build files can live anywhere in your user folder. I recommend creating a build folder inside of the your user folder that will hold all of your build tasks.

bookmarks

Mastering Emmet

Emmet is a package for Sublime Text that helps with writing of CSS and HTML. To say that it speeds you up is an understatement, you would be silly to code HTML or CSS without this package installed.

workflow and code quality

page 162

vim mode

https://github.com/guillermooo/Vintageous

must have add-on packages

  • Emmet

  • AutoFilename

  • Html-Css-Json Prettifyer

  • Sidebar Enhancements

  • Open With…

  • Alignment

  • Bracket Highlighter

  • MarkdownTOC

  • BufferScroll (Maintaining State on a file)

  • TODO

2021-09-24 14:16:09 读完了.

TM-code-review

分享一篇内部CodeReview时的记录, 主讲是技术总监, 听讲的是公司新手村一众小菜鸡

没有仔细整理过, 看起来可能有点杂乱, 见谅了.

  • 20210819 13:30 -> 15:30

  • “对代码要有敬畏之心”

  • “代码整洁”

  • 书: 代码大全

  • 书: 重构

  • 书: 代码整洁之道

  • 书: 敏捷软件开发: 原则、模式与实践

  • 重构

    • “代码写好以后, 需要反复重构” 直到 不需要重构为止
    • 重构是基本的能力, 需要具备这个意识和能力
  • 设计模式 很重要

  • 从入口开始看代码(action)

    • 从 需求方/调用方 入手
  • SOLID

    • 单一职责 SRP
    • 开闭原则 OCP
    • 里氏替换 LSP
    • 接口隔离 ISP
    • 依赖倒置 DIP
  • 一行内尽可能只表达一个意思, 逻辑越少越好 -> 单一职责

  • 尽可能别写注释; 如果有无效代码, 删掉

  • 因为 实现的复杂度, 把业务逻辑复杂化了

    • 应该: 把业务逻辑暴露出来, 把实现封装起来
  • 函数的目的是 封装复杂度

  • “好的代码, 初级程序员能快速读懂;”

  • “代码好坏与否, 一个重要原则是 初级程序员能否快速读懂”

  • “代码就是设计文档, 顺便让计算机执行”

    • 代码是写出来让人读的, (顺便让计算机执行)
  • 迪米特法则(Law of Demeter)

    • 只关心和你直接相关的东西
  • 一个类里的函数越少越好

  • 客户端不应使用他不依赖的方法

  • 提前返回 / 及早返回

    • 可以减少if-else的嵌套
  • 顺序: 先封装为全局函数, 尽量不要引入成员变量(状态)

    • 成员变量 表示 状态
    • 除非 通过传参解决不了
    • 成员变量的维护成本很高
    • 封装一个业务时, 优先使用全局函数
    • 全局变量最好不要有, 有的话 要尽量少
  • 什么时候引入module?

    • 当有一组函数, 想给他们分组时
  • 类的目的, 是把一组相关方法放在一起

  • 什么时候提取成员变量?

    • 不需要一开始就用高层设计
    • 当需要成员变量时, 才开始考虑类
  • 什么时候需要成员变量?

    • “当一个类的两个public函数, 都需要使用同一个变量的时候, 可以引入成员变量”
  • 三个词

    • overview
    • summary / list (index)
    • detail 详情 (show)
  • 思考 基于实现/基于设计原则

    • 业务
    • 封装
    • 接口
    • 顺序很重要, 什么样的顺序?
    • 设计驱动?
    • 实现驱动? *
    • “从调用方看问题, 问题会得到简化”(实现驱动)
    • 重要性: 获取信息 > 封装的思路
    • 一个类的 职责/价值, 是 获取信息 还是 封装?
  • 一个有经验的工程师, 要能接受各种各样的方案, 能说清楚每个方案的优缺点

  • 依赖管理

  • “model层是对数据库的封装, 他不是对网络请求的封装”

  • 当我们可以选择低耦合的实现时, (是不是)应该选择低耦合的实现?

  • “为什么要引入耦合? 是否有充足的理由?”

  • “不要过早设计”, (做应用开发)当需求真实发生时, 再根据需求做重构

  • public 函数变少, 耦合就会变低

  • 思考: 某个设计, 对此时此刻的需求来说是不是过度了

  • 设计思路: 自顶向下/自底向上

cat-after-surgery

小猫肚子上长了小瘤子

可能是乳腺瘤, 也可能是淋巴瘤

前者的话, 这次切除应该就好了

后者的话就比较惨了…

切下来后已经送检了, 下周应该就有结果了, GoodLuck.

小机器人

我看剧, 你看我…

手术后突然粘人

压到我的手啦

boredom-is-a-good-thing

分享一篇从 2021-01-31 开始的 关于 [无聊] 的感悟

如果心里有件想做的事, 那么这件事, 会屏蔽很多的可能性

具体来说: 当我很想玩游戏的时候, 阅读和学习带来成就感的那种感觉就被屏蔽了, 导致我不去想着做这些事

反过来也是一样的: 当我很想做成一件事的时候, 玩 这件事就不太会出现在脑袋里, 或者只是想一下, 但是没有要去 忍 的感觉

利用好这个, 应该会对我有挺大帮助的

如果我能让脑袋里总是有 比玩游戏 更能让我舒服的事, 那我就不会被玩游戏的快感把其他想做的事屏蔽掉

想玩游戏的时候, 想想今天的感悟, 唤起那些想做, 但玩游戏就会被耽误的事, 想想做了有意义的事后, 那种爽的感觉, 加油小李.

20210507 更新: 有的事, 只有在百无聊赖的情况下, 才会开始做; 总是有各种诱惑的时候, 是不会想着去做他们的.

又感觉到了 不玩游戏的话, 我的时间其实是很多的… 游戏会吞噬我很多时间, 我还不一定开心

如果我真能没心没肺玩游戏, 啥也不想也好 可惜玩完总会有负罪感…

  • 具体来说:
    • 当我想玩游戏的时候, 我会忘了, 有很多想看的 bilibili和youtube视频还没看
    • 有很多有趣是书还没读
    • 有很多有趣的事, 我还没去发现

就像LukeSmith说的, learn tobe bored, Boredom is a good thing Article

这个”多”, 会在一件事占满我的头脑的时候, 通通被冲走, 就像脑袋的内存被用光了一样.

20210919 更新: 百无聊赖 是很好的状态, 这种状态下, 更有可能去做一些平时想做,但是拖延着没做的事. 这种状态比 被各种 驱动的娱乐麻痹这好太多了.

editor-and-terminal-autorun

本篇分享怎么用编辑器和命令行打造一个”自动运行并显示结果”的调试环境

现象

学语言的时候, 总是需要敲一段示例, 然后运行一次(IDE的按钮, 或者用命令行)

这个过程很重复, 很机械, 刚好符合自动化的条件…

准备

  • sublime/或者其他编辑器(无所谓)
  • unix-like命令行(windows下应该有类似的命令)
  • watch 命令

watch 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
lijunwei@bxzy:lua(master)$ tldr watch

watch

Execute a program periodically, showing output fullscreen.

- Repeatedly run a command and show the result:
watch command

- Re-run a command every 60 seconds:
watch -n 60 command

- Monitor the contents of a directory, highlighting differences as they appear:
watch -d ls -l

watch 命令的含义很直观, 就是观察命令执行的结果

我最常用的就是 -d-n 参数了

  • -d 表示 如果命令的输出不同了, 展示出来
  • -n 表示 每几秒执行一次 某条命令(这个命令和在终端里输入命令是一样的, 只是需要注意有的时候需要上下文, 环境变量等)

开始

  • 以调试lua脚本为例
  • shell脚本也可以
  • java程序也行…
  • …发挥想象力就行, 重点是思路
1
2
3
4
5
6
7
8
9
10
11
12
cd $HOME/Desktop/temp
mkdir lua
cd lua
touch learn.lua
watch -d -n 1 "lua learn.lua"

# 屏幕分两半, 左边放浏览器, 右上放编辑器, 右下放命令行...

# 用编辑器打开当前工作目录
subl .

# 之后只需要在编辑器里输入练习的示例就行

OK 大功告成