ysbbs

Let's start BB !


  • 首页

  • 归档

  • 关于

  • 标签

新的开始

发表于 2021-07-31 | | 阅读次数

blog停更两年了,也是因为工作了两年了,最近有时间把hexo+github这套东西重新搭建了一份,还好当年离开实验室做足了相关数据的备份,blog的基础设置都在,没有费太多功夫就在个人笔记本上重新搭起来了。

工作,或者说职业的开始,确实将生活的重心渐渐转变,没有太多时间去写个人的blog,最多也就是沉淀沉淀相关的知识在公司的内网进行分享,作为程序员要保持高质量的输入输出才可能会进步,信息社会获取输入的方式太简单,被动的输入就会让人处理不过来,所以稳定有效的输出就像一层过滤网,把垃圾信息,无效的输入进行过滤,留下的才是真正有价值的知识内容,长期的输出和整理也能让自己输入的知识更成体系,这样获取成长才能以量变到质变的形式有真正的效果。

以前在学校学习时,收藏了一个技术博主,除了学习他的技术文章,也能看到他从多家大厂实习然后就职于一家心仪的startup工作,后来博客便也停更了,当时觉得可惜,到了自己身上经历时才感同身受,如果不去刻意把写文章作为生活中重要的事情,那么工作之后各种事情真的会挤占从而使写文章这种不起眼的事情变得优先级非常低。

最近也算是契机,公司组织架构调整,以前繁杂的工作交接出去,接手的新工作内容没有太多技术债务,可以有更多时间思考职业成长的问题,自己该如何成长,如何进步。

在我的眼里,工作可以分为几个阶段:

  • 初级阶段,所有的目的都是为了完成手头的工作,学习都是围绕着手头的需求,此时能力和需求总是你追我赶互相博弈的阶段,以完成需求目标为准,需要大量的新知识的快速学习和补充,没有精力考虑代码设计和单测等,技能和做的成就都是在被动中增加,代码的规范标准也是受被动的要求去逐步改进,学习的都是具体的组件工具的使用,输出的内容也基本是具体的需求技术方案等具体内容,个人在压力中迅速成长。
  • 中级阶段,能力已经能cover大多数日常需求,很多需求能快速完成,更多精力着重于怎么去设计代码,评估未来的变更,去做架构上的重构,而不是堆砌代码,有了代码即负债的思想,怎么将代码写的更好,更容易维护,思考如何写代码,尽可能用最精简的代码实现所要的完成的功能。学习的更多是思想模式方法,开始系统性的学习相关组件的知识,学习更注重体系化,用一学三,会去主动做横向对比,用时会更具场景对比,知道为什么用。有更多自己学习的时间,知识体系查缺补漏,慢慢走向一个独立靠谱的工程师。
  • 高级阶段,暂时还未摸到门槛,但是观察优秀的同事,可以窥见一二,思考问题的方法论已经内化,做事想问题总是能抓住关键点,对系统的关键点的数据等细节了如指掌,或者能快速获取,战略眼光极好,知道什么事情是要做的,什么事情是看起来不错,但做了之后带来的风险比收益更高的,着眼的已经不仅仅是一个个需求,而是为什么要做,孰轻孰重,有时候可能也会采取急功近利的方式,高级阶段的工程艺术已经不仅仅是具体的实现,而是系统架构层面的考虑,关键实现,代码设计更偏向于哲学思想,分层思想,是属于可以领导团队走向正确方向的技术领导者。

评估一下自己,是刚刚进入中级阶段,现在有自己的时间去成长学习,需要做得就是体系化自己的知识,和专业化自己的能力。粗犷的成长已经结束了,那种成长方式是不可持续的,并且不能系统化的掌握知识,受害的最终还是自己。

定期输出是一个很好的办法,他可以通过外力的方式迫使人主动将自以为掌握的知识重新组织梳理,更何况好记性不如烂笔头,很多感悟值得落笔,并且在未来反复阅读回顾自己的变化,及时纠正自己的道路。

2年,收获了很多,也失去了很多,自己莽撞前行,企图凭借运气闯出一番机遇的心态只会让自己反复栽跟头,最近开始对自己的好习惯坏习惯一一梳理,对自己的生活方式进行一番检视,新生活其实从工作的那一天就开始了,只是那天太过匆忙,连对旧生活的告别仪式都没有的情况下就开始了,如果说两年前那是工作,那么新的开始,应该是从工作转换到职业的这一天,今天是这一天,我也希望自己可以走在正确的道理上,能在专业靠谱智慧的路上一步一步前行,不忘初心。

如何从新手成长为高手

发表于 2019-11-06 | | 阅读次数

模式——成为高手的关键

  • 模式
    • 以某个问题为核心将与之相关的知识、经验及技巧有机组合在一起的块状或树状结构。

高手在头脑中存有大量的模式。

而新手头脑中没有模式,大量松散的知识经验和技能不能有机的结合起来。

高手头脑中存储大量处理模式,选择,与当前问题有机结合,或多个模式整合,或吸纳学习新知识增加新模式。

  • 学习高手的最佳实践

    • 研读高手的著作
      • 大师们的书籍
    • 主动寻找行业内的高手,观察并模仿
    • 跟着师傅学习
  • 通过模拟来积累模式

    • 角色扮演
      • 了解别人都遇到什么样的问题,什么样的人
        • 他们都是怎么处理的?记录下来,自我模拟
    • 案例研究
      • 案例分析方法
        • 判断案例问题
        • 运用知识分析案例问题原因及解决方法
        • 带着分析和别人讨论分享
    • 电脑模拟
  • 在经验中反思

    • 不经过反思的经验是没有价值的,有时候这些经验只是在巩固坏的习惯而已

    • 并非一开始反思就能找到问题和解决办法

    • 总结性反思
      • 我做了什么
      • 结果怎么样
    • 自我评价性反思
      • 我做的怎么样,好还是坏,哪些地方做的不足?
    • 对比性反思
      • 我哪里做的好,哪里不好,该如何改善?
    • 批判性反思
      • 我为什么这么做?
      • 为什么做的好或者不好?
      • 哪些因素影响了我的行为?
  • 反思三种方法

    • 自我对话
    • 写反思日记
      • 把想法写在纸上可以隔离心中主观的看法
    • 与同事合作讨论

新手成为高手的三个关键方法:

  • 学习最佳实践
  • 模拟
  • 在经验中反思

协程杂记

发表于 2019-06-10 | | 阅读次数

协程杂记

  • 与线程不同,协程是自己主动让出CPU,并交付他期望的下一个协程运行,而不是在任何时候都有可能被系统调度打断。因此协程的使用更加清晰易懂,并且多数情况下不需要锁机制。
  • 与线程相比,协程的切换由程序控制,发生在用户空间而非内核空间,因此切换的代价非常小。

https://blog.csdn.net/plutus_sutulp/article/details/8464167

阅读全文 »

GO语言学习笔记7——反射

发表于 2019-06-10 | | 阅读次数

反射

  • 反射:可以在运行时动态获取变量的相关信息
    • Import (“reflect”)
      • reflect.TypeOf(),获取变量的类型,返回reflect.Type类型
      • reflect.ValueOf(),获取变量的值,返回reflect.Value类型
      • reflect.Value.Kind(),获取变量的类别,返回一个常量
      • reflect.Value.Interface(),转换成interface{}类型
阅读全文 »

GO语言学习笔记6——接口

发表于 2019-06-10 | | 阅读次数

接口

  • 定义

    • Interface类型可以定义一组方法,但是这些不需要实现。并且interface不能

      包含任何变量

    • interface 类型默认是一个指针

    1
    2
    3
    4
    5
    6
    type example interface{
    Method1(参数列表) 返回值列表
    Method2(参数列表) 返回值列表
    …
    }
  • 接口有点像纯虚函数的父类,用来实现多态

    • 只要一个类型实现了这个接口,这个接口就可以指向这个类型
    • 这个接口类型可以指向所有实现它的方法的自定义类型
      • 可以指向typeA,也可以指向typeB
      • 多态
        • 一种事物有多种形态,都可以按照统一的接口进行操作
阅读全文 »

GO语言学习笔记5——结构体

发表于 2019-06-10 | | 阅读次数

结构体 struct

  • 用来自定义复杂数据结构

  • struct 里面可以包含多个字段(属性)

  • struct类型可以定义方法,注意和函数的区别

  • struct类型是值类型

  • struct类型可以嵌套

  • GO语言没有class类型,只有struct 类型

  • 声明:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    type 标识符 struct{
    field1 type
    field2 type
    }
    //例
    type Student struct{
    Name string
    Age int
    Score int
    }
    var stu Student
    stu.Name = "tony"
    stu.Age = 18
  • 定义的三种方式

    1
    2
    3
    var stu Student
    var stu *Student = new(Student) //指针
    var stu *Student = &Student{} //指针
    • 指针访问元素时,用(*stu).Age 或者 直接 stu.Age 也可以,GO做了优化
  • struct的内存布局,所有字段在内存是连续的

  • golang中struct没有构造函数,一般可以使用工厂模式来解决

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Package model
    type student struct{
    Name string
    Age int
    }
    func NewStudent(name string, age int) *student{
    return &student{
    Name:name,
    Age:age,
    }
    }
    Package main
    S := new(student)
    S := model.NewStudent("dante",18)
  • 再次强调

    • make用来创建map,slice,channel
    • new 用来创建值类型
      • struct是值类型
  • 匿名字段

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    type Cart struct {
    name string
    age int
    }
    type Train struct {
    Cart
    int
    }
    func main() {
    var t Train
    t.name = "train"
    t.age = 100
    t.int = 666
    fmt.Println(t)
    }
    • 如果匿名字段是结构体,可以简化结构体多层调用
      • 如果有冲突就不能用简化的了,还得指定具体子结构体
        • t.Cart1.name = “xxx”
        • t.Cart2.name = “222”
    • 如果匿名字段是普通值类型,那么就直接把值类型作为成员调用
      • 但是这都是在没有冲突下使用,如果有冲突,就不能这么用了
  • GO中继承通过匿名字段来完成

阅读全文 »

vscode插件安装问题

发表于 2019-06-10 | | 阅读次数

问题情景

vscode安装go插件失败,试图手动安装,即clone并install,但在clone插件仓库时出现以下错误:

1
2
3
4
5
6
7
git clone git@github.com:mdempsky/gocode.git gocode
Cloning into 'gocode'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

问题原因

查询之后是因为,github的权限问题,

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,要上传ssh key到git账号

阅读全文 »

我的常用软件list

发表于 2019-06-10 | | 阅读次数
  • Markdown编辑器
    • Typora
    • 记笔记的正确方式
      • Markdown编辑器Typora
      • Typora导出成word,解决markdown的本地图片作为笔记不能保存的问题。
      • 在导出时按提示文档安装pandoc
      • 将pandoc添加进系统环境变量,重启
  • 截图软件
    • PicPick
    • 配合快捷键shift+printscreem 截图随时随地很舒服
  • 视频播放软件
    • potplayer
  • Windows下搜索文本内容神器
    • Beyond Compare
  • C++代码编辑器
    • source insight
    • clion
    • 一个用来看代码,一个用来写代码
  • pythonIDE
    • pychram
      • 但是打开太慢了
    • sublime
      • 小代码用这个跑
      • 但是最近sublime天天提示购买,插件也error报错,不好用了点
  • 浏览器
    • chrome已经统一地球了
    • 备用firefox
  • 邮件
    • foxmail
  • PDF
    • Adobe Acrobat Pro
  • 画图
    • visio
  • word,excel
  • Powerpoint
  • 终端
    • Xshell6开始收费了
    • SecureCRT

我最常用的linux命令

发表于 2019-06-10 | | 阅读次数

杂记

1
find -name "xxx.xxx"
1
grep "xxxcontext" -rn ./
1
2
3
$export PATH=$PATH:/home/xxx/xxx/xxx可执行文件目录
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/xxx/lib依赖库的路径
1
tar -czvf 123.tar.gz ./*
1
tar -xzvf xxx.tar.gz

bz2为-j

1
sz xxx.so
1
rz -bye
1
netstat
  • tail -f
  • sudo tcpdump -n -iany port 10098
  • diff file1 file2
  • md5sum 文件名
阅读全文 »

Ubuntu装机小记

发表于 2019-06-10 | | 阅读次数

Ubuntu虚拟机装机小记,一般重要的就是更换软件源,和配置samba。

阅读全文 »
12…11
Yang Shuai

Yang Shuai

105 日志
89 标签
© 2021 Yang Shuai
由 Hexo 强力驱动
主题 - NexT.Mist