还有不到一年就要毕业,还有两个月就要校招,越来越感觉时间紧迫。身份马上要从student转换到worker,感觉技能和心态上还有很多不足的地方。我现在的想法是做一名程序猿,今天我就来总结一下我了解到的程序猿的核心技能。
PROBLEM SOLVING SKILLS
- 能否拆解问题
- 能否能面对质疑
- 能否面对变化
COMMUNICATION SKILLS
- 能否讲清思路
- 能否get到要点
- 处理是否专业
BUG FREE
- 能否防御式编程(if 特殊情况 return/raise/exception)
- 能否规避习惯性错误
- 能否自我审视
CODING STYLE
- 能否合理命名
- 能否封装概念
- 能否注释要点
关于代码规范,我在实习期间读了三本书,下面列出书中要点
Refactoring: Improveing the Design of Existing Code
- 重构代码(Refactoring):修改代码时,重构代码介于重写和直接增加代码之间,是一种中庸之道
- 代码重构原则:改变结构,增加可读性、可扩展性
- 何时重构:修改错误时、添加功能时、复审代码时
- 代码的坏味道:
- 重复代码
- 过长的函数(类)
- 过多的参数
- 修改摸个条件时需要修改之处过多
- 命名不易看懂
- middle man(A调用B,B再调用C,然而B没有什么实际作用)
- 过多的注释
- 重构记录的日志列表:名称、概要、动机、做法、范例(没有实际用过,感觉像是版本更新时候的摘要)
- 重构技巧:寻找引用点,在不改变输入参数和返回值的情况下,修改重构函数内部结构
- 关于函数函数:以查询代替临时变量(封装成函数或者列表简化逻辑)、引入解释性变量增加程序可读性、移除对参数的赋值(用临时变量接收参数的值,然后再进行操作,使得逻辑更清晰,不然阅读和解析逻辑的时候可能会产生混乱)、用函数对象取代函数(写成一个类里的函数)。
TIPS:
- if xxx else xxx 前后内容平权时使用,不平权时改为 if xxx reurn ; xxx return
- if条件过长时,可改写为函数
- 把外加函数加入到类中
- 以堕胎取代case
- 引入断言
- 以函数取代参数(将参数的计算提炼到一个函数中)
- 构筑测试体系来保证代码的正确性
- 引入参数对象
- 提炼超类(将两个类公共部分提炼为一个超类,减少重复代码)
Clean Code
- 整洁代码的原则:逻辑清晰,依赖较少
- 命名:避免思维映射的命名(i,j–>循环),避免双关
- 函数:短小,只做一件事,每个函数是一个抽象层级
- 确定代码的边界(条件)
- FIRST原则:快速、独立、可重复利用、自行验证、及时性
- TIPS:
- 短小、功能单一、内聚性(参数少)
- 构筑测试
编程珠玑
- 仔细分析(文章中举了桶排序,hash作为查询的技巧,利用数据结构优化代码)
- 断言提示错误
- 进行计时
- 性能调优:算法和数据结构、代码优化、系统软件优化、硬件加速
- 性能估算:分析预期和实际的差距,然后调优。可以对每一个函数、每一步精细分析
- 做任何事都应该尽量简单、但不宜过于简单
- 32位浮点数替代64位浮点数
- c语言中取模很慢,用减法替代
- 空间和时间的tradeoff,当空间紧张时,用时间换空间
感觉三本书的阅读顺序应该是编程珠玑(设计代码)–> Clean Code(编写代码)–>Refactoring: Improveing the Design of Existing Code(修改代码)。可惜我恰好读反了- -。总结夹带我个人的理解,可能有不准确的地方,希望有缘人可以指正。