@程序员,请掌握这些核心生存技能
大咖你好,作为一个编程初学者,有什么需要注意的?
以上是一个读者流年似水的提问。我把他的问题置顶了,但一直没想好怎么回答,因为问题太过笼统了。后来,他也可能意识到了这一点,就又给我发了一条微信:
在吗?老师。我们作为新人应该在编写代码的过程中注意哪些问题呢?
这个问题其实也不太好回答,因为要注意的问题蛮多的,多得就像雾霾中的颗粒。不过,有趣的是,流年似水这两次的提问中,对我的称呼大有不同。
“大咖”中略带一些调皮,而“老师”就显得过于庄重了。凭良心说,我喜欢“老师”这个称谓。但我知道这顶皇冠戴我头上,会把我 185 的身高压扁到 173。再说,我也不是什么“大咖”,无非比较接地气一点,喜欢和读者交流的感觉而已。
那么接下来,我就针对流年似水的提问,做一些回答。希望对有类似问题的同学起到一个参考的作用。
01、把编程吃透
父亲总是喜欢教育我说,你要懂得人情世故,要学会与人打交道。诚然,父亲说得没有错,人情世故、与人沟通非常的重要,重要到缺少这些会碰很多壁。
但我更希望父亲教育我说:你作为一名程序员,要把编程吃透!人总要先把本职工作干好,才能去完善其他的软技能嘛。当然了,我的希望是注定要落空的,因为父亲压根就不知道“程序员”是一个什么样的名词。
我是知道的,程序员(英文 Programmer)是从事程序开发、程序维护的专业人员。 那么作为一名拥有 10 年开发经验的老鸟,我认为程序员最核心的生存技能当然是熟练地掌握一门编程语言。这也是编程初学者最应该注意的,但往往会被忽视。
别的编程语言我不太懂,Java 我是懂的。假如你想把 Java 这门编程语言吃透,我建议你这么做。
轻松驾驭 IDE,比如 Eclipse 和 IDEA。
快速查阅 Javadoc。
掌握流程控制语句。
理解类和对象。
掌握三大特性:封装、继承和多态。
会用接口。
懂得泛型。
掌握异常处理。
熟悉 java.util 和 java.lang 包下的类。
略懂 lambda 表达式和 Stream API。
掌握 IO 流。
会用 Socket 编程。
掌握并发编程。
懂得性能优化。
会用 Junit 等单元测试工具。
会用 Log4J 等日志工具。
熟悉 Mybatis、MySql 和 Spring。
入门 SpringBoot。
熟悉设计模式。
熟练地掌握一门编程语言,就是程序员的立命之本。知道了自己是靠什么吃饭的,就应该在这方面狠下功夫。
02、巧用数据结构和算法
说起数据结构和算法,我就觉得不好意思,脸上泛起难为情的红晕。但为什么我还要说呢?
因为我深受其苦。
我是一个农村走出来的娃,体会过其中的酸甜苦辣,所以我会奉劝各位,以后碰上什么知识分子上山下乡的活动,千万不要去。那不叫体验生活,那叫体验“艰苦”生活。
那在敲代码的过程中,我就经常遇到一些实际的问题,由于无法充分利用数据结构,将数据之间的关系通过合适的算法策略进行有效地存储转换,就导致程序的性能很低。
所以我劝各位新人,趁有大把的时间和精力,多投入一点到数据结构和算法上面去。基础知识就像是一座大楼的地基,它决定了我们的技术高度。数据结构和算法就是最重要的基础知识,学习它们的过程就像是在打地基。
上面这张思维导图提到的数据结构在工作当中太经常使用了,频率高得就像隔三差五会看到隔壁老王这个词一样。
对于算法,如果觉得《算法导论》这本鸿篇巨制太过枯燥的话,可以选择《趣学算法》、《啊哈算法》等一些非译作的,相对趣味化的入门书。
可能很多人会存在这样一个误区:算法在工作当中很少会用到,需要的时候面向搜索引擎解决一下就行了。
但我想说的是,跳槽的时候很有用,因为一些大厂就喜欢考算法。除此之外,算法对阅读源码也很有帮助;况且,谁不想做一名编程的艺术家呢?长期来看,大脑思考能力是一个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。
03、学会测试
为什么开发还需要了解测试?
天真了吧!自古以来(其实也没多久了),程序员就身兼两职,既是开发工程师,又是测试工程师。
说到这,不由得想起一段伤心的往事。在我刚做 Team Leader 的时候,手下有一名新人叫小董,他竟然使用“=”号操作符而不是“==”操作符作为 if 语句的条件判断。
可能很多读者不相信:“怎么可能啊???IDE 会检测出来的!”交代一下背景,当时用的语言叫 ActionScript,和 Flex 配套开发富客户端页面——八年前了,估计没几个读者知道这门技术了。
领导在日本出差,代码 Review 的时候被日方负责人查了出来,领导当场被骂得狗血喷头,没脸见人。我的遭遇可想而知,被领导骂得在厕所里面委屈地默默落泪,毕竟我是代码负责人。
差点乌纱帽就丢了。这让我对那些写完代码不做测试的程序员恨得牙痒痒。
从那以后,我就养成了一个好习惯(甚至说是强迫症),所有我负责的代码(包括我自己写的),在提交之前,代码 review、集成测试一个都不能少,提交代码的时候仍然要再次比对,确认无误后再提交。
建议大家了解一下测试驱动开发,英文缩写为 TDD,之前蛮流行的一种开发方式。测试与开发应该是相辅相成的关系。
04、编码规范
规范化的代码看起来赏心悦目,让人仿佛置身于中世纪的哥特建筑中。
这里必须提一提 Bob 大叔的《代码整洁之道》,这是一本每个程序员都要读的好书。里面提到的 KISS(Keep It Simple Stupid)原则,非常值得推崇。比如说:
整洁代码力求专注,每个函数、每个类和每个模块都应该全神贯注于一件事。
整洁代码简单直接,从不隐藏设计者的意图。
整洁代码使用有意义的命名,代码通过其字面表达含义。
整洁代码力求消除重复代码,提高代码表达力。
来看这样一段非常糟糕的代码。
private boolean isEligible(int age){boolean result;if(age > 18){result = true;}else{result = false;}return result;
}
你能从中挑出几个问题呢?
1))
和 {
之间没有空格。
2)return
语句太多了。
3)代码过于臃肿。
优化后的代码是这样子的。
private boolean isEligible(int age) {return age > 18;
}
那怎么写出规范化的代码呢?
1)找一份规范的代码模板,导入到 IDE 中,保存代码之前进行格式化。
2)使用 CheckStyle 或者 FindBugs 对代码进行检查,规避一些新手爱犯的低级错误。
3)多看看阿里巴巴的开发手册,里面的一些建议还是非常值得参照的。
记住这句话:任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。编码规范可以改善代码的可读性,让协作的同行拥有一个美丽的心情。
05、源码管理
在我最初参加工作的时候,源码管理工具用的还是 CVS,后来迁移到 SVN。近些年来,选择 Git 的程序员渐渐多了起来。
记得我刚开始用 CVS 的时候,经常弄丢版本,被领导批评过很多次,因为用的不熟(忍不住伤感)。幸好当时负责的代码都不怎么重要,丢了还可以重写。
那为什么要使用源码管理工具呢?答案如下。
- 多人并行开发
- 多人协作同一份代码
- 历史版本管理
除此之外,还有一个重要的作用,防止甩锅!大家都懂吧。
06、鸣谢
好了各位读者朋友们,以上就是本文的全部内容了。能看到这里的都是人才,二哥必须要为你点个赞
@程序员,请掌握这些核心生存技能相关推荐
- @程序员,沟通这项核心技能你掌握了多少?
当硬实力遇上软技能,你是否在取舍中放弃了本该是程序员核心技能的沟通能力. 2019,向程序员式社交恐惧症 Say Goodbye! 作者 | Matthew Quiros 译者 | 虎说 责编 | 仲 ...
- 世界读书日:作为一个优秀的程序员请收藏这份书单
4月23日世界读书日全称"世界图书与版权日",又称"世界图书日".最初的创意来自于国际出版商协会.由西班牙转交方案给了联合国教科文组织. 1995年11月15 ...
- 大学生须知:毕业当程序员想要提升“核心竞争力”,主要看这六点!
核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异,说白了就是你的优势,而且最好是独一无二的优势,这就是核心竞争力. ...
- 菜鸟程序员内功心法--C++(核心编程)
C++学习-2.0_核心编程 主要针对面向对象编程技术,学习C++中的核心和精髓 一.内存分区模型 C++程序执行时,将内存大方向划分讷维4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的 ...
- 程序员请收好:10个非常有用的Visual Studio Code插件
作者 | Daan 译者 | Elle 出品 | CSDN(ID:CSDNnews) [导读]一个插件列表,可以让你的程序员生活变得轻松许多.无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发 ...
- 程序员请收好:10个非常有用的 Visual Studio Code 插件!
一个插件列表,可以让你的程序员生活变得轻松许多. 作者 | Daan 译者 | Elle 出品 | CSDN(ID:CSDNnews) 以下为译文: 无论你是经验丰富的开发人员还是刚刚开始第一份工作的 ...
- 程序员必会的核心基础知识:1张导图+10本书
▲点击可查看大图 一年一度的秋招即将拉开序幕,程序员"金九银十"跳槽季也接踵而至.大部分互联网公司都会进行基础知识的考察,基础知识的重要性不言而喻. 计算机基础知识对程序员来说为什 ...
- 前谷歌技术主管亲述:程序员请避开这几大雷区
软件工程师的技能发展都会经历一个自然的过程--经验从无到有,最后变成老手.而一旦到了经验丰富的阶段,他们对代码就不那么感兴趣了.恰恰相反,他们会把更多的精力放在文件设计和代码重构上. 奇怪的是,不管任 ...
- visual studio 代码提示插件_程序员请收好:10个非常有用的Visual Studio Code插件
作者 | Daan 译者 | Elle 出品 | CSDN(ID:CSDNnews) [导读]一个插件列表,可以让你的程序员生活变得轻松许多.无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发 ...
最新文章
- 用Python解“龟兔赛跑”题
- LeetCode_每日一题今日份_329.矩阵中的最长递增路径(没懂)
- mysql 社区版 innodb_MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
- vue 父向子组件传递数据,子组件向父组件传递数据方式
- mysql中使用case when语句
- c语言rotl函数需要什么头文件,_rotl, _crotl, _lrotl
- Sonarlint代码规范改造实践及一些想法
- 【安装记录】Centos7.6下载安装配置教程(十分详细)
- 小数形式与科学计数法转换c语言,BUAA小数形式与科学计数法转换(简)
- 淘宝以图搜图接口,图片搜索商品接入指南
- dnf时装补丁教程_DNF补丁教程:就 是 这 么 简 单
- 中文分词 正向最大匹配法 逆向最大匹配法 双向最大匹配法
- np.delete详解
- gabor特征 gabor滤波器
- k8s多节点master部署
- 0和1的艺术,与、或、非基本逻辑门电路
- Handlebars 小技巧
- 【人人学-5G技术进阶】华为5G技术进阶测试答案(三)
- [乐意黎转载]一个治愈 JavaScript 疲劳的学习计划
- 图像超分算法SRLUT: Practical Single-Image Super-Resolution Using Look-Up Table图像超分辨率重建
热门文章
- 用计算机亩换算成平方,公倾,平方米,英亩,市亩,平方公里等常见面积单位转换在线计算器_三贝计算网_23bei.com...
- 计算器和计算机有什么不同,计算机和计算器有区别吗?
- windows系统的定时任务
- RHCE认证考试教材
- 想用FPGA加速神经网络,这两个开源项目你必须要了解
- Bitvise——服务器与本地交互软件(适合大文件传输)
- css动画与渐变案例,使用动画和渐变做一个背景动态网页
- 【数据说第二期】联盟第一人詹姆斯四个时期大PK
- 陈文俊 计算机科学,2019年丘成桐中学科学奖总决赛获奖结果揭晓!
- 2021.11.16【读书笔记】丨宏基因组分析流程