高效代码之我见 => 李奇峰

13 篇文章 0 订阅
5 篇文章 0 订阅

还有一个月结束大二生活,以下仅为本人自大一从一个小白开始学习,至今不到两年的学习与工作当中总结的一些经验与见解。不足之处请在评论区留言,望多多指教

项目构思与详细设计

遇到需求后先梳理清楚大体的逻辑,接下来构思项目结构与流程。最好可以将构思结果落到概要设计与详细设计中,这样在写代码的时候才会更加流畅。
以前在写代码的时候往往脑子里有一个雏形就开始动手,到后来随之项目的不断推进和完善,就发现之前有很多没有考虑到的一些东西,结果往往要重构之前的代码
详细设计中所包含的内容:
1、程序设计说明
2、程序描述
3、功能与性能
4、输入项与输出项
5、算法与流程逻辑
6、 接口
7、存储分配
8、注释设计
9、尚未解决的问题
10、UML类图

善用封装

在团队中,一个项目分为好几个模块,每个人都只负责完成和维护自己的模块。所以在写代码的时候往往就需要考虑到别人在调用自己代码的场景。如何高效率,层次分明的完成一个项目。就是每个人负责的模块相对独立但又可以相互连接。这时候就需要用到封装。每完成一个功能,就将之封装为一个函数。函数与函数之间相互独立且互相调用。
我现在感觉写代码就像搭积木。一个独立的模块由很多具体的积木拼凑而成,而多个模块又可以搭建为一个具体的物体。往往一盒积木可以拼成很多物体,只不过拼装的结构不同。
写代码也是,一个函数由一行行的代码组成,且能完成一个具体的功能。多个函数拼接在一起就可以进行实际的生产应用
善用封装,善于组装

项目能力、代码能力 、学习能力

对我来说,我觉得一个合格的软件从业者需要具备以下三个能力

  1. 项目能力:理解项目的能力,在产品中,也可以认为是理解需求的能力。具体体现在拿到项目的时候,能够理解并分析一个项目的组成与需求,然后构思项目的架构与流程,选定所需要的技术与语言,并且能够拿出一套初步的解决方案。我认为这部分能力占到我的40%。我现在顶多能做到20%。就是给我一个项目,我能理解一个项目的组成与需求,然后能根据需求写出相对应的功能
  2. 代码能力:
    一是指写代码的水平。高效,美观,简洁,规范,层级分明,可读性强。
    二是指需求落地的能力,就是如何通过代码将一个具体的需求或功能实现。我认为上述两点能力占到我的35%。
    对于第一点,我目前能做到的就是注释写齐全,类注释,变量注释,函数注释。多使用继承与封装代码,尽量保证层级分明。至于高效,我觉得做的还不够,虽然每次写完代码我都要回头检查两遍,看看有没有什么需要优化的地方,但是就是感觉缺了一些什么。归根结底是对语言本身以及底层的一些机制理解的不足,这方面也是我未来重点的强化目标。
    对于第二点,在学校的时候都是按部就班的写代码,按照老师或者书本上给定的代码照着模仿就行。在工作当中,完全就是靠自己。目前对于我来书,我只能自己实现一些简单的需求。对于那种需要依赖分布式、异步、协程的功能,我目前还无能为力。
  3. 学习能力:在实际的工作中,总会接触到新的技术,新的工具,如何能够快速的上手对于一个软件从业者来说,也是一项不可或缺的能力。我认为这部分能力占到我的25%。我自己对我的评价来说,上手新技术的速度还不算慢,随着日后知识面的扩展,经验的积累,我相信对于新技术的学习一定会越来得心应手
    以上三点总结是我在公司接触到实际项目当中总结的经验,在学校说实话,还是太安逸,按部就班的学习会让一个人盲目且膨胀,认为自己的水平已经够了,应对老师或者书本上的需求已经游刃有余。结果到企业中往往是当头一棒。自我认为:学校学习就像搭平房,只需要能将砖头堆起来不倒就行了。企业的工作就像盖楼,难度和复杂度随着项目的体量呈指数级上升

语法的灵活使用

如何写出高效简洁的代码:多用代码中自带的语法糖
举例:Java中lambda的使用

//传统方式遍历列表
List features = Arrays.asList("Lambdas", "Default Method", 
"Stream API", "Date and Time API");
for (String feature : features) {
   System.out.println(feature);
}

//使用lambda遍历列表
List features = Arrays.asList("Lambdas", "Default Method", "Stream API",
 "Date and Time API");
features.forEach(n -> System.out.println(n));

可以看出,lambda的使用对于代码的简洁和可读性有一定的帮助

注:我也没怎么具体接触过lambda,上述例子只是lambda最简单的使用
关于java中lambda中更深入的解释可以参考一下这篇博客 : 深入理解Java 8 Lambda
用法可以参考这篇文章 : Java 8十个lambda表达式案例

举例2:python中列表生成式的使用

# 使用传统的遍历将列表中的单词全都变为小写
word_list = ['Word', 'List', 'Python', 'Liqifen']
low_list = []
for word in word_list:
    low_list.append(word.lower())

# 使用列表生成式将列表中的单词全都变为小写
word_list = ['Word', 'List', 'Python', 'Liqifen']
low_list = [word.lower() for word in word_list]

列表生成式不仅更加简洁,且因为是python自带的语法,所以效率更高

每个语言都有每个语言自带的特性与独特的语法,善于使用这些语法将会提高代码的运行效率,简化代码结构。

设计模式的选取与使用

这点是扩展内容,等到以后工作中用熟练了会再来补充。目前为止接触到的最多的还是单例模式。
但是明显可以感觉到随着代码的增加,选取一个合适的设计模式非常重要,具体重要在哪我目前也说不清。说到底还是道行太浅…

小小的总结

从大一到现在,零零碎碎的学习了安卓、jsp、JavaScript、Redis、MongoDB、MySQL、Hadoop、Spark、ELKB框架…还有一些都记不清了
但是一直有在学习和使用的只有三个,Java,Python和Linux,现在由于要开发Spark项目又着手学起了Scala。
怎么说呢,感觉做项目或者做产品,语言、工具、数据库的选取非常重要,但是不管什么工具或者数据库,开源的也好,人家集成好了的也好或者是自己用代码写的功能也好,最后还是要用代码将他们连接成一个整体,并且还要编写一整套的流程逻辑,使得各个组件之间按照流程能够完成具体的生产工作。
所以我认为工作中工具,或者说语言都不是最重要的,重要的是还是项目能力、代码能力以及学习能力。

以上就是我目前总结的五点经验,之后遇到更实际的一些问题会再次补充

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值