程序员的核心技能

还有不到一年就要毕业,还有两个月就要校招,越来越感觉时间紧迫。身份马上要从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(修改代码)。可惜我恰好读反了- -。总结夹带我个人的理解,可能有不准确的地方,希望有缘人可以指正。

猜你喜欢

转载自blog.csdn.net/SrdLaplace/article/details/80700016