程序员进阶之道

程序员提升自己,让技术水平上更上一个台阶,是一个漫长的过程、积累的过程、沉淀的过程、也是一个可规划有法可循的过程!http://www.csdn.net/article/2014-10-20/2822190引用李运华博主的一段话,自勉、自励!

一个优秀的程序员应该具备哪些技能和修养?

首先是快速学习能力这里不是说一定要去快速去学习各种各样的新技术,而是说当有需要时,能够快速的学习。很多人开始学新的技术和技能时,一开始就一头扎进去写样例、写Demo、看源码,这不是好的方法,而且比较耗费时间,收效也不明显。

给大家分享4W2H快速学习方法。在学习新的技术的时候,按照这样的步骤去了解的:

1)这个技术能解决什么问题(why)

2)比较适合在哪些场景应用(where + when)

3)这个技术跟我已经掌握的哪个知识或技能类似,有什么差别、有什么特点、 有什么优点和缺点(what)

4)了解前面的问题后,我才会开始去尝试写写Demo,或者更进一步去应用(How to use)

5)觉得有兴趣或者其实现很牛逼的情况下,我就去研究一下原理机制,看看源码等 (How it implements)

其次是良好的理解能力程序员需要将产品人员或者用户用自然语言表述的需求翻译成程序语言。自然语言有一个特点就是通俗但不严谨,而程序语言必须是非常严谨的。如果对产品人员或者用户提出的需求没有很好的理解,即使程序语言写的再漂亮,技巧再高,最后做出来也是一个不符合要求的产品。

有一个关于“美女”的笑话:人听到“美女”后的反应是想到“天使面孔魔鬼身材童颜巨乳”,而猪听到“美女”后的反应是“乌克兰大白猪”,猫听到“美女”后的反应是“有着金色光滑皮毛的波斯猫”。如果程序员给了猫一个“天使面孔魔鬼身材童颜巨乳”的美女,猫一定会觉得很难看。

第三是持续不断的学习软件开发领域设计的知识和技能太多了。从广度上来说,有操作系统、数据库、编程语言、网络、设计等,编程语言又有几十种;从深度上来说,操作系统、数据库、编程语言等都是可以不断深入去学习的。无论你是从事对技能广度要求更高的业务开发,还是从事对技能深度要求更高开发专项系统,都需要不断的学习,这样才能不断的提升自己的能力。

第四是乐于分享如果单纯从个人完成工作的能力来看,可能确实也有很多程序员不爱分享但确实很厉害。但真正优秀的程序员一定是除了自己优秀外,还能让其他人也变得优秀,或者能够贡献

有法可循的进阶秘方!

一、写博客,不是看博客,也不是转载博客而是亲自写博客哪样东西你觉得你比较懂了,那么你就写成博客。当你真正去写的时候,你会发现,其实还有很多不懂或者不清楚的地方,这样就会促使你又去学习研究;当你的博客发表后,其他人除了能够从你的博客中学到东西外,也能够帮你发现一些问题或者错误,这样你就更进一步的掌握了;

二、“链式学习形象点说,就是你抓住了一个链条的一个链,然后慢慢慢慢把所有的链都拉出来。举一个很简单的例子:socket sever编程。很多人在编程的时候,都是去搜索引擎搜索一下“socket server样例”,然后对照样例很快就写完功能了。然后呢。。。。。。很多人没有然后了,完成任务就不管了。其实这样做就错过了一次提升自己的好机会。

“链式学习”则不一样,它是这样做的:通过搜索引擎搜索到样例完成工作后,会问自己很多问题:样例中的api每个参数都是什么含义,有哪些注意事项,还有其它API么?为了解决这些问题,这个时候可能去找本书看,某个编程语言的socket编程;看完以后我知道socket编程的全貌和一些注意事项,而这些是通过搜索引擎搜索的样例中没有的;知道socket编程的全貌后,又会问自己:操作系统是怎么做的呢? 那又会去看《UNIX网络编程》,看完后自己就对操作系统层面的又掌握更多了;看完《UNIX网络编程》后,又知道socket是和tcp/ip相关的,那又会去看《TCP/IP协议详解》。。。。。。

这样去做就是一条学习链: socket server编程 -> socket 编程 -> UNIX网络编程 -> TCP/IP协议,后面还可以继续不断拓展下去。如此不断的拓展和深入,一个很小的契机就能初始你学到很多东西,而这些东西在以后的工作中某些时刻就派上用场了。

三、“闭环学习“链式学习”适合于一组相关联的知识或者技能的学习,而“闭环学习”更适合业务、相互配合的知识和技能的学习。由于软件开发是需要多个团队分工合作的,所以绝大部分人都只负责整个系统或者全流程中的一环,这样导致很多人以为只需要将自己负责部分精通就可以了。其实这样不利于个人的发展,一个原因是自己负责的一般都比较窄,可学习和提升的空间可能不多,另外一个原因是很难设计整体上优秀的方案。

而“闭环学习”则不一样,它是这样做的:了解整个功能或者业务的全流程实现,涉及了哪些模块和系统,每个模块和系统主要负责什么功能,涉及到什么技术,性能怎样,有什么注意点。举一个做个HTTP的业务样例:从用户点击一个url开始,经过了 浏览器 -> 网络 -> CDN -> Nginx -> PHP -> MySQL -> PHP -> Nginx -> 网络 -> 浏览器,最后呈现在用户面前。我开发的时候只是用PHP开发,但并不只局限于PHP本身,闭环学习就要求全流程中的每个环节都要去了解和熟悉,这样你就可以学到了“浏览器、Nginx、CDN、MySQL”等很多知识。

可能有人会问:这样做有什么用呢?其实用处非常大,一个是当出现问题的时候,有了闭环学习掌握的知识和技能,你就知道哪些地方可能有问题,应该如何处理;另外一个用处是,当你考虑设计方案的时候,就不局限于PHP本身了,也许某个功能Nginx或者CDN或者前端能做的更好,用PHP实现反而很蹩脚。

时间: 2024-09-29 05:45:36

程序员进阶之道的相关文章

程序员进阶之道(一)

最近一个月都在在大厂华为出差跟进项目,工作一直是996或者997,所以最近一个月没怎么更新文章.周末抽点时间,争取把耽误的,想写的文章尽快补上. 我本身做开发很多年,也算是一个资深的程序员.同时工作中也接触了很多的程序员,有优秀的,也有平庸的,接触下来,发现但凡优秀的程序员,都有很多优秀的通用特质.所以想写一个系列的文章,讲讲程序员的进阶之路. 本篇是第一篇,本篇文章主要从程序员的思维模式和心态来讲述初级程序员的进阶之道.如果你想成为一个优秀的程序员,可以参考其中对你有价值的东西.为啥把思维模式

【原创】PHP程序员进阶学习书籍参考指南

PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18 [初阶](基础知识及入门) 01. <PHP与MySQL程序设计(第4版)>  http://item.jd.com/10701892.html 02. <深入浅出MySQL 数据库开发 优化与管理维护 第2版> http://item.jd.com/11381295.html 03. <实战Nginx:取代Apache的高性能Web服务器> http://dwz.cn

程序员进阶书籍

C/C++推荐书籍:C++程序设计语言                 Bjarne Stroustrup(入门书籍熟读一本即可)C++ Primer(第四版)            Stanley B.Lippman, Josee Lajoie    (用于查阅)C++编程规范:101 条规则.准则与最佳实践         HerbSutter, Andrei Alexandrescu  2006 (More) Exceptional C++      HerbSutter     2006

读书笔记-程序员修炼之道-序

前言 我们应该成为什么样的程序员 注重实效的程序员具备的特征 注重实效的个体大型的团队 它是一个持续的过程 前言 程序员修炼之道这本书已经通读了一遍,获益良多,但还是不甚理解,所以在重读一遍,顺便做一下笔记.由于自己水平有限,只能摘抄一下重要的词句了. 我们应该成为什么样的程序员 我们的知识背景源自于对计算机科学基本原理的理解,而我们的经验来自广泛的实践项目.理论与实践相结合使我们强大起来. 我们不应该局限于任何特定的方案,而是应该拥有足够广博知识背景和经验基础,这能够让我们在特定的情况下选择更

《程序员修炼之道》笔记(一)

这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人家也是经过了时间和口碑的双重考验的,真心值得好好阅读. 作者在再版的序中写道: 写完<程序员修炼之道>至今已有十年.在这十年中,软件产业发生了翻天覆地的变化.--从表面上看,软件世界似乎陷入了疯狂的状态.但如果你深入繁杂表象的背后,会发现变化其实并不大.1999年的那些通用开发原则,在2009年同

《程序员修炼之道--从小工到专家》阅读笔记02

<程序员修炼之道--从小工到专家>在第三章中为我们提到纯文本的好好处,书中给我们提醒到,通过纯文本(XML.SGML以及HTML都是纯文本的好例子)我们可以让事情变得更容易.文本对于我们来说有三大好处:保证不过是.杠杆作用.更易于测试.对于程序员,不仅要善于使用纯文本,还必须掌握shell命令行,即使在Windows下我们也要精准掌握.Shell对于我们来说就是我们的工作台,在shell命令下我们可以操作调用我们想要的东西.可以说shell功能是非常强大的,所以对于我们程序员来说掌握它是对我们

读书笔记2014第4本:程序员修炼之道-从小工到专家(第七、八章)

第七章 在项目开始之前 36 需求之坑不为收集需求,挖掘它们.有一种能深入了解用户需求,却未得到足够利用的技术:成为用户.与用户一同工作,以像用户一样思考.描述需求文档时,要使用项目术语表.用WEB来收集和管理需求. 37 解开不可能解开的谜题遇到不可能解决的问题时,退一步问问自己如下问题:1)有更容易的方法吗?2)你是在设法解决真正的问题,还是被外围的技术问题转移了注意力?3)这件事情为什么是一个问题?4)是什么使它如此难以解决?5)它必须以这种方式完成吗?6)它真的必须完成吗? 38 等你准

Java程序员修炼之道之预告片

从去年(2013)大概9月份开始,到上个月结束,我在深圳招聘一个Java程序员,要求会写Java的,英文能沟通的.我的要求很简单: 一个只实现了功能的函数,重构一下,让其可支持后期扩展,用多态的方式和注册表法(<代码大全2>里面提到了)重构就可以了 对该函数写单元测试,知道怎么写,知道使用Mock工具(Mockito. Jmock. EasyMock随便哪种都行),能正确的对测试方法进行组织 就是这么简单的要求,公司的HR MM陆陆续续给我找了几十个候选人,在北京的.在上海的.在印度的.在珠三

程序员修炼之道_从小工到专家_读书分享

最近央视给我们连续分享了<大国工匠>,很是羡慕,嫉妒,恨.要知道我们程序员也是一名工匠,哈哈.最近用两天多的时间读了一本和工匠有关的书籍<程序员修炼之道-从小工到专家>这本书,现在分享给大家,因本人能力有限,拙劣之处请包涵. 从这本书的名字说起,这本书现在的名字体现不出来书中的主题内容,书的原名为<The Pragmatic Programmer>翻译为<注重实效的程序员>,看到这个题目想必大家对书的主题有个大概印象.这本书在编码问题,软件架构和设计,项目管