相比普通程序员,小帆认为高级程序员就是那类能够更快更好解决问题的程序员。比如遇见复杂系统问题,初中级工程师无能为力,但一个资深架构师就可以轻松搞定。
有关高级程序员和普通程序员的区别,我们分为两个方面,分别为专业技能和软实力。
至少学好一门编程语言,掌握这门编程语言的设计模式、使用原理、演变过程、特性更新 、优秀实践、局限缺陷等,其中C/C++和JAVA重点推荐。
有人会觉得编程语言的学习多多益善,但先掌握好一门编程语言的来龙去脉,才能应对好目前工作中的问题。至于其他编程语言,等有余力的时候再学也不迟。
也有人觉得代码越长越好。但代码不是小学生作文,有些程序员被称为“复制粘贴工程师”,他们经常copy网上的代码,错误多,还很冗长。“复制粘贴”是程序员的大忌,不仅自身能力毫无提升,还容易拖垮系统。
不少知名软件公司会严格规定代码编写规范,明确规定代码的变量命名,注释格式,嵌套中行缩进的长度和函数间的空行数字等,保证写出的代码都是清晰的、易于理解的。高级程序员能写出规范、整洁、简约的代码,绝不多写一行无用的代码!
此外,很多人以为编程就是写代码。其实,编程的时候还要完成大量注释文档的写作。一般普通程序员要花费30%的工作时间写技术文档,高级程序员要花费更多时间。所以高级程序员应当有具有很强的注释与文档书写能力。
软件和业务的生命周期很大程度取决于技术架构,高级程序员一般对产品的架构非常了解。比如:系统由哪几部分组成?系统各模块之间怎么通信?选择怎样的基础技术?系统的边界是什么?备选方案怎么做?未来应用拓展可以怎么做?
操作系统和数据库等知识原理,也是高级程序员知识库中不可或缺的一部分。例如当前主流的操作系统Windows和Linux/Unix,及其内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
此外,绝大部分应用程序都以数据库的数据为中心,那么数据库怎么工作,怎么在数据库中检索数据,怎么在数据库中插入、修改、删除数据,怎么连接数据集等也是高级程序员必须了解的。其中SQL是最通用的数据库操作方法,SQL的基本语法一定要熟练掌握。
每个程序员都知道软件工程,软件工程的一整套完整周期包括需求分析,设计,写代码,测试,发布和维护。编程是软件生命周期中的一环,代码编写的走向,代码优劣的评判都和软件工程思维有关,高级程序员都具备软件工程技能,比如市场分析、可行性分析、结构设计等。
有人开玩笑说,程序员一半的时间在写bug,另外一半的时间在debug。没有人能够保证程序写出来不用调试就可以运行正常,也没有人可以保证程序永远不会出bug,所以故障处理、代码调试、问题排查是程序员的基本职责。
调试排查虽然可以简单概括为发现问题——解决问题,但在实际操作中,情况往往复杂得多。如果遇到问题,第一时间要用正确的方式debug,比如断点、断点如何设置,设置在哪?或者查看日志?再或者如何分解问题,进行排查?
调试排查极大影响开发效率,高级程序员会用最快的速度发现问题并解决问题。问题解决能力一方面需要经验积累,另一方面也要求程序员有极高的技术能力、分析能力和理解能力。
项目管理有很多学问在,当新的项目出现了,要明确项目目标和需求,预估风险和成本,项目计划和控制,项目具体分配,项目成员管理,如何保证项目准时交付……项目管理是高级程序员的必备技能。
每个项目组都有很多人,在项目实行过程中,如何和团队成员沟通协作,如何表达自己的想法,程序员也得学着点。好的程序员往往逻辑清晰、条理分明、表达顺畅。如果只会写代码,不会沟通表达,发生了需求理解错误的情况,将大大降低工作效率。
程序员可能最恨不得一天有48小时,开需求讨论会,写代码,业务时间阅读学习,程序员一天天非常忙碌,必须学会用各种方法,高效进行时间管理。
计算机行业日新月异,发展速度实在是太快了。不坚持学习,就会发现自己落后了很多。代码都是基于英文的,很多新技术新资料都用英语发布,学好英语,学会科学上网。多看资料,多学技巧,建一个自己的知识库,定期更新积累,是每一位高级程序员必须要做的。
谁都不喜欢死记硬背,这个时候知识迁移能力就十分重要。学会知识迁移能力可以把握事物本质规律,构建知识网络,实现融会贯通。对程序员来说,学习新知识新技术时,知识迁移能力非常关键。例如一个程序员只擅长Java语言,现在他想学习C++,他可以通过了解程序算法、结构、方案属性等迅速学习新语言。
在工作中遇到问题,可以尝试逆向思考,或者换位思考。比如这个产品的使用者会如何操作,这个节点要导向什么结果?逆向思维能力能帮助程序员及时抓住系统漏洞和缺陷,拓展系统功能,并加以改进。
说了那么多,那么如何成为一位高级程序员呢?这里有几点办法以供参考:
程序员有两条职业路线:
一是:程序员-高级程序员-资深程序员-架构师-首席架构师
二是:程序员-高级程序员-经理-技术&产品总监-技术VP&CTO
第一条线是偏技术的,第二条线是偏管理的,想清楚自己的专长、爱好和目标,选择其中一条路走到底。
在“走到底”的同时,要不停更新“装备”。比如你想转管理,要多读管理类的书籍。在学校多参加项目和比赛,争取成为项目组长或负责人,培养管理能力和沟通能力。如果想专攻技术,就学好英语,从现在开始坚持终身学习。
定期的整理和归纳,对个人水平的提升,有非常大的好处。
对程序员来说,一周的工作内容,周末是个复盘的好机会。周末对工作日写的代码还有记忆,但不深刻。这时候回看,既能用较快的速度回顾完,也能用新的视角来检查自己的工作情况。
一周内来不及看的技术文章,也能汇总下在周末统一看掉,并做好笔记,及时消化。
多看优秀的代码,才能明白自己的缺陷在哪里,才能提高!
优秀的代码来源,一是你工作中经验丰富的同事和已完成的项目,二是编程学习网站和技术社区。
注意查阅这些网站的时候要多使用Google搜索,阅读英文文档,因为IT行业原本就起源于英文世界,国外代码的质量普遍较高。
常见的学习编程网站和技术社区:
中国大学MOOC(慕课)
中国大学MOOC(慕课)_国家精品课程在线学习平台
可以学到国内名校名师的精品课程,并获得认证。
Coursera
Coursera | Build Skills with Online Courses from Top Institutions
Coursera与世界顶尖大学合作,在线提供网络公开课程。在Coursera上能找到很多世界名校著名教授讲授的计算机科学课程。
edX
edX | Free Online Courses by Harvard, MIT, & more | edX
大规模开放在线课堂平台,免费给大众提供大学教育水平的海外在线课程。
哔哩哔哩
哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
B站UP主上传过非常多计算机课程,可参考课程简介和评论区选择最适合自己的内容。
以上几个网站都能提供优质丰富的课程资源,现在知识付费时代,网络上有大把大把的课程资源,只有你不想学,没有学不到的。
看视频听课的过程可能比较枯燥,建议看的同时手写记录课程要点,课程听完后最好也能定期梳理温习。
LeetCode
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
为用户提供编程训练的oj(online judge)平台网站,上面有各种数据结构,算法类型标签的编程习题,常用来面试刷题。
极客时间
极客时间-轻松学习,高效学习-极客邦 (geekbang.org)
计算机学习网站,有丰富的课程和专业人士资源。
Github
https://github.com/explore
全球最大的源代码管理平台,很多知名开源项目都在上面,如Linux内核,OpenStack等。
Stackoverflow
https://stackoverflow.com/
外国IT技术问答网站,可以说是编程界最有名气的网站。有成千上万的问题和解答,以及大量代码示例。
掘金
掘金 - 代码不止,掘金不停 (juejin.cn)
高质量的开发者技术社区。
CSDN
CSDN - 专业开发者社区
国内老牌技术社区。
Segmentfault
https://segmentfault.com/
中文的技术问答社区
博客园
https://www.cnblogs.com/
国内老牌问答社区之一。
看这些博客和社区的时候,学会关注大牛和连载系列的博客,这些一般质量比较好,完整地看完、消化吸收,掌握他们的思维和推理模式,收获会很多。
学过的内容,只是记下来,不将其写出来并运用,无法转化为真正的技能,所以要多分享和输出。
在上述提到的技术社区中,可以不定期分享自己的代码。一方面加深记忆和理解,检验自己是否真正掌握了这些代码。好记性不如烂笔头,及时记录也能自己的经验沉淀下来。
另一方面,技术社区向程序员们提供了交流平台,你踩过的坑,告诉别人别去踩了。你自己觉得不错的代码,可能会被质疑。在向他人解释、说明的过程中,你也许会意识到自己并非完全正确,或者有新的处理思路和方法。
其次,记录并输出代码能锻炼写作和表达能力。如果未来想升职或者转岗,良好的表述能力是不可缺的。
权威的书籍常看常新,受益匪浅。以下几本权威书籍就可以参考:
Effective Java中文版(第3版)
作者:[美] Joshua Bloch
出版社:机械工业出版社
豆瓣评分:9.3
书中一共包含90个条目,每个条目讨论Java程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。
这本书能帮助读者更加有效地使用Java编程语言及其基本类库:java.lang、java.util和java.io,以及子包,如java.util.concurrent和java.util.function。也时不时会讨论其他的类库。
Java编程思想 (第4版)
作者:[美] Bruce Eckel
出版社:机械工业出版社
豆瓣评分:9.1
本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),都能逐步指导你轻松掌握。
代码整洁之道——程序员的职业素养
作者:[美] Robert C. Martin
出版社:人民邮电出版社
豆瓣评分:8.8
高素养的程序员,应当要求自己写出规范、整洁、简约的代码。本书是编程大师“Bob大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。写得很通俗,在很多地方能产生共鸣,也能鼓励激励自己。
重构(第2版)——改善既有代码的设计
作者:[美] Martin Fowler
出版社:人民邮电出版社
豆瓣评分:9.1
想提升代码质量也可以看这本书。这本书是经典著作《重构》出版20年后的更新版。书中清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。其中提出的重构准则将帮助开发人员一次一小步地修改代码,从而减少了开发过程中的风险。这本书非常适合软件开发人员、项目管理人员等阅读。
读完一本书要花很长时间,完全吃透一本书,需要的时间更多。过多的专业术语反反复复才能理解,还要跟着实践,花了很多时间,很麻烦也非常痛苦。但没有办法,学习不是“爽”文,你不是天才少年,提高不可能一蹴而就。
想要有提高,需要持续性的学习和积累。日积月累比临时抱佛脚更能取得效果。也与学习非常考验人的意志力,坚持高质量学习要抵御很多诱惑,比如打游戏、逛街、运动、吃饭等等。因此要做好足够的心理准备和建设。
更多优秀内容请关注@得帆云,欢迎点赞、关注、分享支持!