今天逛博客园的时候看到一篇推荐文章《浅谈程序员的英语学习》,就点进去看了下。同意文章中的观点,英文很重要是的,但是文章站的高度还是太高了。具体的学习方法我不太认同,觉得不太实用。正好有一篇文章之前没有在首页发表过,想重新发表一下。今天,我想借此机会和大家认真谈谈程序员的自我修养。先介绍一下我的兴趣,还有我的背景:初中开始参加信息学和数学竞赛,大学主修软件工程。毕业后在银行做大数据分析和项目管理。之后自己创业,做过媒体公司和软件外包公司。现在中国(南京)软件谷有工作室,做自己喜欢的事情。15年编码经验,6年创业经验。主要技术方向.NET、HTML5、云服务、应用级开发等。自评总体水平为,高级程序员,初级架构师。首先要说的是,今天的话题中有哪些程序员?说之前,不得不提一个知名的程序员赵杰。他曾有一个观点:“坚决反对北大青鸟等机构”。以前我是认同这个观点的,但是现在,在“认同”的基础上,坚决反对甚至反感赵杰“表达这个观点”。因为这个观点,能够帮助和帮助的人受影响的是赵杰最不可能遇到的草根开发者,而这些最不可能遇到的恰恰是中国最普通的程序员,也是赵杰等人最不可能甚至不愿意的人求助。如果一个高阶程序员自认为理科基础好,逻辑性强,有完整的语言学习经验,他认为至少这是一个程序员,甚至认为其他不学数据的人结构不应该做编程,太自嘲了,在中国,写程序不仅仅是一种爱好,更多的时候是一种普通的职业,一种谋生的工具。小公司的er也有很多普通的程序员。.在这些年的工作经历中,我越来越深刻地感受到普通程序员的影响力和力量。对于高级程序员来说,所谓八仙过海,各有神通,各有成就,各有修为,但在达到更高层次之前,程序员有一些“自我修养”。修”,这是最基本、最普遍的。的。所以今天的话题针对的是程序员,也就是所有正在写代码或者已经写过代码的程序员,也包括广义的程序员,比如项目经理、架构师等等。做任何事情都有一个明确的目的,那我们再来说说,程序员为什么要提高修养呢?程序写的这么好,有人佩服,也有人喜欢?还是去博客、论坛、社区发文分享,获得成就?我想这是少数人的追求,也是更高的追求。之前我以为在国内,程序员提升修养的目的是1.更好的融入工作,减少困难,增加成就2.稳步提升能力,增加收入,实现财务自由2.看你的从更高的层次学习和工作,树立更适合自己的人生观和价值观,家庭幸福,生活幸福。说得通俗一些,就是用更合理的方式和方法,赚取更多的收入。废话讲了这么多,程序员的修养是什么?正面的说法很难,反面的描述可能更通俗易懂。修养的反义词是“没修养”。》程序员形式:1、程序员小张遇到开发问题,很着急,想到了几个群,就把自己的问题发到群里等答案,发现没人回答,就直接找群。群主的QQ,群主没有回,于是小张搜索了一下,突然发现博客园里有一篇解释相关话题的帖子,看完后给博主留言,我的邮箱是:XXXXX@qq.com,请博主发源码给我,谢谢。2.程序员小张来公司3个月,老板布置了很多任务,感觉老板很不人道,工资也不高high,而且加班没有工资,写代码的时候能省多少就省多少,客户反馈的问题他不主动解决,主要是敷衍。又过了一个月,他换工作了。3.程序员小张正在写一个功能模块th在需要某种加密。我在百度上搜索了一个编码模块。看不懂里面写的是什么,但是刚好符合程序,就原样放了进去。向上。4.程序员小张要开发某个功能,项目经理告诉他这个功能应该是可以搜索的,你可以搜啊搜,小张在百度上搜索,一天后什么也没有找到。项目经理来找小张坐下,改了个关键词,1分钟就找到了解决方案。5、程序员小张雪.NET工作3年了,工资还是10000。他不同意在公司加薪。他想换工作,但又犹豫了。这时,一位前辈对他说,你还是多看看书吧。书,比如?,《CLR via C#》《Javascript权威指南》等,于是小张买回来,翻了翻,发现有些东西他已经知道了,有些东西他不懂就好像没用了,而且这本书太厚了,花了很多时间。不要浪费时间去看它?小张为此纠结了半年,依旧每天上下班,哈哈,偶尔抱怨工资低。6.程序员小张来到了一家新公司。他在做项目实现某个功能的时候,想起自己以前做过这样的功能,但是想不起来是怎么实现的了。于是他就去他的电脑找文档,发现我找了半天也没找到,只好作罢。终于,经过2天的折腾,终于实现了这个功能。7.程序员小张有一天很不开心,因为他的项目经理和项目组的产品人员又改了需求,新的需求需要对整个架构进行大的调整。小张很郁闷,跑到一个QQ发泄一下,说说这件事,于是QQ群立刻炸了,程序员小李说,是的,产品很烂!程序员小王说,是啊,他妈的项目经理就知道压榨开发人员,成天提心吊胆!程序员小孙说,对对对,我上家公司也是这样,压榨程序员,幸好我走了。就这样,骂声中,几个程序员的心情好了一些,小张也开开心心去玩王者荣耀了。我想有些人可能已经明白我想说什么了,有些人可能还不明白,具体的话我也说不出来。我只能用一句话来概括:在写代码的过程中,善于学习,掌握方法,努力思考,努力工作,持之以恒。长此以往,你会在编程中找到不一样的自己。上面说的还是比较抽象,那么提升修养的具体方法有哪些呢?如何实现程序员的“高修”?每个人都有自己的方法。我不能详述。就跟如何提升一个人的修为一样。一两句话解释不清楚,但也有一些是通俗的。通俗易懂,比如孩子父母受过良好教育,父母彬彬有礼,孩子从小接受正规教育,小学、初中、高中、大学,然后文化课、社会实践都不错,那么孩子最后的修养肯定比一个没经历过的孩子要好。编写程序也是如此。下面我就说说一些最基本也最通俗易懂的学习方法和原理。我称之为:程序员的基础。一个好的开发人员应该能够全面、高效、严谨。处理任何软件程序和业务问题并成为一名优秀的开发人员是一个非常有趣的话题。但是,不管这个话题怎么展开,基础词是必不可少的。虽然代码量是衡量开发能力的一个重要指标,但是能够熟练地编写代码是不够的,还要对技术原理和业务逻辑有深刻的理解。扎实的个人基础和技术基础,往往会促进代码编写,更容易解决问题。下面提到的一些地基可能不会被大多数开发者关心甚至忽略,但这些却是开发建设的基石。1.科学依据成为开发者的过程是不一样的。有的来自专业,有的是业余爱好,还有的是专业机构培训出来的。有点,如果你想成为更高层次的开发者,写出更高质量的代码,学习计算机基础知识,是非常非常非常重要的(重要的事情说三遍)。具体来说,在基础学科的实际应用中,肯定需要以下课程,按照学习顺序排列如下:1)数据结构数据结构课程通俗地说就是告诉你如何使用最基本的语言类型、变量、关键字和句子等,来处理各种逻辑问题,也就是我们所说的算法,以及日常编程中的各种问题,比如排序、文件夹遍历操作、数据库查询等,都可以在数据结构课程中找到相应的数学原型。数据结构课程的理解能力也是一个人数学能力的体现。数据结构学习的好坏是程序员水平差异的重要分水岭。对于这部分内容的学习,有以下建议:使用VB,C,C++,Pascal等语言,买一本语言数据结构和算法方面的书,或者网上下载相关的PDF电子书,学完,并亲自编写、运行和调试书中的所有案例。当日常编程中常用的技巧都是从一定的数据结构和算法中推导出来的时候,就基本达到了学习的效果。2)操作系统所有编程语言的开发和应用程序的运行都是基于操作系统的。桌面编程中的大部分场景,包括内存、进程、文件系统、网络通信、用户界面等,都源于操作系统的定义和概念,完整理解操作系统的起源、组成和运行逻辑操作系统对于多线程开发中遇到的场景、复杂的接口、文件管理以及一些难以理解的编程思想都有很大的帮助。掌握更有效的编程方法。具体的,可以买一本操作系统的书或者下载相关的PDF电子书,完整的浏览一遍,能够结合实际的编程场景看看操作系统的原理,基本就达到了学习的效果。3)数据库传统关系型数据库入门容易,深入难。往往开发人员可以快速掌握增删改查、查询、查看、索引、存储过程等基本数据库操作,但在编写复杂查询、设计主外键、优化字段、去除冗余等时,有将是只能依葫芦画瓢而不能独立思考扩张的局面。原因还是没能理解关系数据库的基本原理,而数据库课程系统地阐述了关系数据库的来龙去脉,理解其中的数学原理或逻辑基础,对提高水平会有质的影响数据库编程。还建议买一本数据库相关的书籍或者下载一本PDF电子书,可以将第一范式、第二范式等数据库课程的基础知识点与数据库编程场景巧妙地联系起来,基本达到学习效果。4)编译原理编译原理是编程语言和各种语言的编译器的科学基础。可以说,编译原理造就了世界上几乎所有的IT应用。学习编译原理的基础是数据结构和算法。花费的时间和精力更多,因为现代高级编程语言的编译器在代码优化和资源优化方面足够聪明,所以编译原理的学习对实战的影响越来越小,但是正所谓盛莫容说,如果他认为自己对数据结构和算法的研究已经达到了更高的境界和境界,那么在编译原理的研究上就可以更进一步,最终拉开自己与普通程序员的差距。2、英语能力英语的自然特性,字母的长短,学科发展的历史因素决定了编程语言必须以英语为基础。在编程的过程中,从语言关键字到文档内容或搜索引擎搜索结果,都不可避免地会遇到英文。大多数程序员的英语基础都在CET-4左右,但由于非专业和工作环境的原因,逐渐疏远甚至完全忘记了英语。在实际操作中,大部分编程语言资料都是英文的,在线编程问答的内容也是英文的。因此,需要将英语能力恢复到一个不太高但有效的水平,达到以下效果:1)了解每个关键词在你使用的语言中的具体英文翻译、逻辑意义和发音。2)对于你使用的语言涉及的相关方法、类库、框架、工具等,你可以知道每个方法、过程、参数关键字的英文翻译、逻辑含义、发音。3)对于常见的编程逻辑和核心关键词,能够用英文组织问题描述,回答最简单即可,只要能被搜索引擎看懂即可。比如C#中如何将整数类型转换为字符串类型,最简单的英文描述就是C#IntegerCovertToString。4)任何英文技术手册、文档、文章或问题描述,在其技术知识范围内,能理解80%的内容含义,并能理解完整的技术含义。3.搜索方式任何开发者都应该有搜索的能力,甚至必须有搜索的能力。搜索引擎的宝藏是无穷无尽的。同样具有搜索意识的不同程序员,却因为搜索技巧的差异,最终在程序开发质量、项目实施效率乃至工程产品质量上存在数倍的差异。因此,掌握高效、先进、灵活的搜索方法和技巧是非常非常非常(重要的事情说三遍)有用的。主要方法如下:1)搜索来源选择虽然英文编程资料更准确高效,但中文编程资料在数量上更胜一筹,所以遇到问题时,首选的搜索选择是百度和谷歌对专业中文词汇的处理能力有时候甚至比百度还强,Google可以搜索到大量的英文资源,所以Google也是首选之一,但是因为Google被屏蔽了,所以需要进行VPN、SSH等FQ操作,或者搜索“谷歌镜像”在百度关键词上,通过谷歌的镜像网站访问。除了搜索引擎,专业的技术网站、论坛、社区也是非常直接有效的搜索来源。比如国外的StackOverFlow网站,国内的Cnblogs博客园,OSChina开源中国等等,都有搜索功能。答案也即将揭晓。对于QQ群,建议不要使用,除非QQ群主或者群主很闲或者很热心,否则在QQ群里问技术问题是一种很低效的搜索方式。2)关键词构建搜索关键词的构建直接影响搜索效率和正确结果的过滤。没有什么特别的技巧,关键在于搜索的积累,但总的原则是准确、简洁。例如,当出现一个描述,howtoserializeanddeserializeXMLwithC#时,非常愚蠢的关键字构造是“howtoserializeanddeserializeXMLwithC#”,而正确高效的关键字是“C#XMLserializationanddeserialization”,或在Google中搜索“C#XML序列化”。在平时的编程中,一定要注意相关方法和经验的积累3)联想搜索联想搜索不属于搜索引擎的范畴,但是在搜索中是一个很有用的高级技能。举个通俗的例子,比如你想用C#,用某个.NET的类来处理一种HTTP通信,但是搜索一直没能找到一个完美的结果,而是换个思路,考虑那VB.NET也是一个.NET系统,跟C#是完全对接的,那你也可以试试用VB.NET关键词搜索,搜索到完美的代码然后复制到C#代码中。这种联想搜索不仅可以帮助搜索到正确的结果,还可以训练大脑思维,值得多多尝试。4)资源搜索开源框架、产品、工具、控件等开发辅助工具越来越多,其健壮性和迭代性越来越强。寻找一款成熟的工具或插件也成为了大量开发者的首选。必要的方法和技巧,以及如何高效地搜索到想要的资源,也成为一门学问。核心方法是知道资源网站的地址。常见的例子有OpenSourceChina、Github、CSDNDownload、pudn等,资源网站平时需要多积累,用到的时候会很关键。4.思维模式开发者必须养成商业思维模式。所谓业务思维,就是在做任何项目时,在编写任何代码之前,都需要了解项目本身的业务概念、业务逻辑甚至业务流程。有了全面的学习和了解。虽然这不是一个项目的强制要求,但却是一个很好的开发习惯。无论你认为自己是开发人员、测试人员还是技术总监,都必须掌握业务原则才能取得更大的进步。好好设计或阅读项目的数据结构和流程结构。程序员的想法往往与用户或客户的想法不一致。摆脱技术思维模式,习惯用业务思维解决问题的程序员不一定是最好的,但一定是容易沟通的程序员。5、工作和编程习惯有人说干净就是浪费时间,所以蓬头垢面,但归根结底是习惯问题。当你养成爱干净的习惯,让它成为生活的习惯,你不会花更多的时间,反而会显得干净干练。编写程序也是如此。有一些编程习惯,看似琐碎,看似浪费时间,但如果坚持下去,终会收到意想不到的奇效。这里有一些特别重要的习惯。1)快捷键的使用无论是使用Windows、Linux操作系统,还是在IDE中,快捷键都是系统本身的标准配置。其实大多数人都能体验到Ctrl+C、V等操作节省时间的甜蜜,就是进一步传播这个理念。如果在IDE中写代码,除了代码本身,其他鼠标操作和键盘定位操作如果全部换成快捷键,时间上会有一个数量级。储蓄,可是看起来这么好的事情,真正坚持执行并养成习惯的人屈指可数。所以,前期改变习惯,记住快捷键,会是一个长期的过程,需要不断的坚持。2)代码注释随着开发人员年龄和经验的增长,他参与的项目已经不是一个人或几个人可以完成的了。系统重构、代码重构、工作交接、新人培训等等,遇到的会越来越多,这些事情无一例外的都会重新写或者重复写过的代码。阅读,如果你在第一次写代码的时候做出完整、清晰的代码注释,对后续的工作会有很大的帮助。既提高了工作效率,又增强了合作的好感。其实即使只是看自己的代码,如果有注释,也能加深印象,缩短代码查找时间。因此,任何开发者都应该养成良好的代码注释习惯。优秀的代码注释应该能够:每一个函数,每一个属性,甚至变量的划分都能找到对应的解释。使用越来越多的IDE越来越支持的XML注释。不仅有注释文字,还有详细的参数说明。程序结构、模块、组件划分等注意事项3)命名规则具有一定规模的软件公司在代码编写上都有自己的命名规则,涵盖项目、模块、函数、变量等,规范命名的好处是自给自足显而易见,但被动地、被迫遵守命名规则与主动习惯使用命名规则是完全不同的。一个优秀的开发者应该从心底里希望各种代号是有规律的,易读的,而不是纠结于会增加码字长度的命名规则。4)所谓不妥协的编程逻辑,是non-concerning编程逻辑的对立面,这不仅是一种不良的编程习惯,更体现了一种低质量的生活。很多开发人员由于个人习惯、期限、客户要求不高等种种原因,人员在编程时特别随意。比如为了实现某个功能,百度出一段代码,直接套用。10行代码只理解8行。如果这两行看不懂,可以在程序中使用。很多这样的小细节就像是在项目中埋下了无数的定时炸弹,不仅极有可能造成返工,也为项目埋下了风险。程序员要有责任感和态度,养成不自满的编程逻辑,不勉强自己,不轻视程序。5)数据备份误删除、误操作、电脑断电、文件丢失等问题是每个开发者都可能遇到的问题。良好的备份是必不可少的。在大公司,会有完备的源代码管理和信息安全保护,无论你是在大公司工作,还是在小公司工作,在实现个人代码价值时,一定要做好代码和文档的数据备份。备份方式灵活多样,可以使用在线CVS、SVN、TFS、Git源码管理,也可以手动拷贝文件到云端或本地硬盘,甚至个人电脑上。在网上组建RAID磁盘阵列等,养成定期定期备份的习惯。6)电子邮件工作方式沟通是进步的源泉。如果说开发团队的热烈讨论是品格和激情的体现,那么邮件工作方式则是另一种审慎和高效。无论是公司层面的工作沟通,还是开发团队中的问题沟通,电子邮件的作用包括问题的正式描述、工作文件和痕迹、工作流流程、职责分工明确等,用于主要沟通问题和重要事项通过电子邮件以独特的方式与同事、主管等沟通,对团队合作非常有帮助。以上这些方法是我这些年来的心得体会,也给了我很大的帮助。我希望他们也能帮助你。不能说就一定能“修身养性”,但也是“提升修养”的有效途径。最后说说坚持的力量,分享一个真实的故事。公司有两个开发人员。一个做了很多年.NET,但是他很滑。让他学习一些新知识、新方法,总是自以为是,觉得自己懂;还有一个没有.NET基础,一直在做底层语言开发。每天抽空自学,搞清楚自己不懂的地方,遇到不懂的场景就上网或者找人帮忙,想想项目做好后可以改进的地方超过。从15年到现在,短短一年的时间,这两个人的发展已经天差地别,工资差距也越来越大。后者已经能够独自承担中小型软件外包项目,而前者则还在得过且过,他们各自的未来发展是完全可以预见的。我想说的是,本文分享的一些原理和方法是通俗易懂的,就像经常听到的365次方的101%和99%、10000小时原理等故事一样,但真正认真思考并认真实践的人屈指可数。或许,坚持是程序员最大的修养,鼓励大家!
