作业(一)——码农的自我修养之必备技能

必备技能之——正确的处事态度
这是一个非常抽象和宽泛的话题,不关乎具体的编码和开发。但是我认为,做任何事,先摆正态度,再去开始做事,就好比先选选定方向再去上路,只有这样才能到达预定的终点。
以下是我非常看重并努力践行的原则:
1.对事不对人,以事情为中心。尽自己所能,把事情办成,把事情办好。以纯粹地态度做事,把事情作为主体。
2.一次性地把事情做好,要有开头,也要有结尾。由于软件开发是一个非常注重前期设计、规划的一项工作;前期做好设计,确定你要做什么,不做什么,怎么做,能有效减少后期返工的可能,也能提高开发时的效率,所以要有开头,切忌一上来就没头没脑地干,编码不是搬砖。要一口气把事情做好,把自己能做的事情当场做了,一件事情形成一个单元,尽量避免后期的修补。
3.做事要有激情。


必备技能之——良好的编码习惯
什么是良好的编码习惯?
1) 合理的注释。写代码务必加注释!写代码务必加注释!写代码务必加注释!重要的事情说三遍。尽管目前我只是一名学生,并没有实际地参与编码工作。但是,要从现在开始就养成良好的习惯。不要问为什么,因为这就是程序员涵养的体现!注释要能大致勾勒出你的程序在干什么,怎么干。注释要简介,不罗嗦。
2)在保证功能性和可读性的基础上,想一想,你的代码还能不能短点,更短点。这不仅涉及到删除无用的语句,还涉及到用更优的方式去重新实现。
3)代码清晰,模块化。多以函数调用的方式组织代码,而不是糅合在一起。
4)坚持“第二次”阅读代码的习惯。
以下以我今天写的代码为例:
这是力扣上的一个题目,用于找出两个链表中,相同部分的第一个结点。
比如:链表A是 1->2->3->4->5,链表B是7->8->3->4->5.则返回结点3.

//用于实现链表的反转,比如反转前是1->2->3,反转后是3->2->1 private ListNode reverseList(ListNode head) {if(head == null || head.next == null)return head; ListNode q = head.next,p = head; head.next = null; while(q !=null){ ListNode holder = q.next; q.next = p; p = q; q = holder; } return p; }public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//将两个链表分别进行反转 ListNode tailA = reverseList(headA); ListNode tailB = reverseList(headB); //反转之后,从尾部开始遍历。pos记录两个链表之间最后一个值不同的结点 ListNode p = tailA,q = tailB,pos = null; while(p != null&&q != null&&p.val == q.val){ pos = p; p = p.next; q = q.next; }//对照题目要求,把反转的链表重新归正 headA = reverseList(tailA); headB = reverseList(tailB); return pos; }


必备技能之——培养技术栈
要结合个人的兴趣专长和技术的应用前景,有意识地培养自己的技术栈。选定某个领域,深挖下去,努力让自己成为这个领域的专家。切忌一山望着一山高,或者偏听偏信市场上某些培训机构的不良宣传,盲目追求那些高大上的技术或者岗位,比如人工智能、算法等。要有自己的想法,并坚持自己的想法,踏踏实实地在某一个领域深耕。
以下是我个人准备修炼的技术栈:
1)掌握当前常用大数据框架的基本使用、它背后的运行机制,并逐步深入到原码级别,使自己能够很好地胜任企业的大数据平台、数据仓库的开发建设工作。
见我的spark系列博客:https://i-beta.cnblogs.com/posts?cateId=164987
【作业(一)——码农的自我修养之必备技能】2)有待更新
3)有待更新

必备技能之——持续地积累和总结
我以前犯的一个很大的错误就是只学习而不总结,学习某个技术,疯狂地赶进度,只求快速学完,然后快速忘记,没有自己做出积累,做出总结,或者方式不对,没有坚持太长的时间,导致学的不深,学得不牢,最后真跟没学差不多。
现在我认识到,坚持写博客是一种非常好的学习方式。一篇博客就是一个技术点,在写博客的过程中,把学的知识,好好的梳理清楚,这样学得会更透彻,也更容易与前面学到的东西串联起来,形成一个整体,还能发现问题,激发自己去探索。以后用到的时候也更方便,避免重新去百度,去费时费力地阅读别人的博文。一举多得!

必备技能之——熟练使用开发工具
开发工具使用的熟练与否,会在很大程度上影响开发效率。学会像程序员一样思考的一个表现就是:宁可花费一个小时把这个问题解决掉,也不将就着每次花一分钟重复这个问题。举一个惨痛的例子:之前写的练手的代码一直都没有上传到github上保存,而是放在本地的文件系统。本地系统上的文件又容易丢失。下次需要用到这些代码的时候,已经找不到了,只能另起炉灶,重写一遍,做了大量重复性的工作。而如果早点引入github,就可以节省下这些时间。
以下是我比较常用又认为非常重要的开发工具:
IDEA:非常强大易用的Java,Scala集成开发工具,见我的idea系列博客https://i-beta.cnblogs.com/posts?cateId=1659185
maven:Java和Scala开发中,用于管理jar包依赖,避免了我东奔西跑凑jar包的烦恼。
github:代码托管,版本控制,避免了代码丢失的风险。
vmaware:可在本地搭建多台虚拟机,模拟大数据集群。
xshell:连接虚拟机,向虚拟机传文件。

必备技能之——对底层技术的钻研
学习上层技术,学习别人已经封装进jar包的各种框架,时间短,见效快,给人一种很爽的感觉。但是要时刻记住:绝不能因为畏难、没时间等种种接口,就忽视了对底层技术的学习。
到中科大读硕士,不是为了学习Hadoop、spark框架,这些东西在任何一家培训机构都可以学到。更重要的是要打好自己的基础,有一个坚实的基础知识体系。这样,以后在接触到任何新技术的时候,才能学得快一些,学得深一些,学得牢一些,用起来也就更灵活一些。
上学期就是由于这种错误的思想,很多课程没有好好学,就没有学好,比如概率论,比如程序设计与计算机系统,只求考试能过,而忽视了对知识本身的掌握,学了就丢,现在觉得非常可惜。所以这学期,务必要痛改前非,好好学习学校开设的的课程。
另外一个目标就是:本学期结束之前,坚决啃掉Java 虚拟机。

必备技能之一——爱学习,爱工作,也更爱生活
不论你爱不爱程序,不论你还不爱程序员这个工作,代码永远都不是生活的全部。生命就是个过程,没必要在苦恼和忧虑下度过,不能把所有的时间都耗费在电脑屏幕上。我觉得尤其是我们程序员,应该更少把娱乐时间耗费在手机电脑屏幕上,多出去走走,看看外面这个真实的世界,多健身,多陪陪生命中重要的那一撮人。对代码要认真,对生活品质也认真。

最后附上两篇大神的博文,讨论的话题是相似的。尽管我目前不是大神,但要向大神看齐:
http://xinsheng.huawei.com/cn/index.php?app=forum&mod=Detail&act=index&id=4240343
https://www.jianshu.com/p/1dca13cf7c1c

    推荐阅读