首页 文章 精选 留言 我的

精选列表

搜索[AI技能],共10000篇文章
优秀的个人博客,低调大师

开发者技能修炼的5个等级,你冲关到哪儿了?

第一阶梯:Typer,打字员 每一位开发者在正式踏上开发道路之前,都需要经过毫无编程经验的“第一阶段”。 这时他们对于程序的理解仅限于照着书本或记忆进行有规律的字符录入,甚至不清楚自己所输入的字符代表什么指令,因此每当错误出现时常常显得手足无措,怀疑软件、怀疑系统,甚至开始怀疑人生,到头来却发现只是少输入了个分号。 该阶段虽然看起来简单,但确实也是最容易将门外汉拦在开发者殿堂之外的门槛。 对于位于该层的小白而言,切记不要迷恋《30天从入门到精通》等武林秘籍,对没有入门的人来说很容易变成《两周从入门到放弃》。其实也并非没有入门捷径,找个真人师傅带进门就好了。 第二阶梯:Developer,开发工程师 作为拥有0-3年编程经验的第二层,可以正式的称呼自己为“编码菜鸟”了。 这时的他们对编程概念已经有了初步的理解,知道了变量、逻辑与函数的意义。同时也可以熟练的使用CV大法(Control+C、Control+V)来模仿前辈的案例或网络实例进行功能实现了,但也仅仅只能实现需求逻辑而已。同时因为并不理解这段代码的真实含义,所以实现的这坨代码通常让人头痛不已,是BUG的高发地。 对于位于该层的菜鸟而言,切记不要迷恋《Thinking In XX》系列的书刊,最好的修炼方式还是多阅读开源工程代码,多参与项目实践,完成一个由量到质的蜕变,从而进入下一个等级。 (图片来自:http://lateralresearch.com/) 第三阶梯:Research&Developer(R&D) ,研发工程师 作为拥有3-5年编程经验的中间层,进入该层的“攻城狮”们已经开始被委以重任,负责攻城拔寨,调研新型武器,属于团队里面的攻坚小能手、小白与菜鸟所仰望的大牛了。 与此同时,这一层级也是所有层级里面最危险、最容易迷失的一层,其危险在于因为沉迷于舒适区与盲目自信而停滞不前,最终因精力的衰退而被小鲜肉所替代;其迷失在于仅善于解决项目中曾负责或以前接触过的某一块的问题,对于系统架构欠缺整体的意识,不具备建立一个全新系统的能力。 对位于该层的“攻城狮”们而言,切记不要沉迷于代码的表面,也不要局限于API或源码库的收集,最好的修炼方式是不断地思考与锤炼自身对最佳实践方式的理解感悟,从而为进入下一阶段打下坚实的基础。 第四阶梯:Architect,架构师 作为拥有5-8年编程经验的开发者顶层,进入该层的大师们对于某一领域的系统研究已经“摸得门清”,通常他们是使系统“拔地而起”、“耸入云霄”的设计师。 (图片来自:http://t.cn/R6rj4rO) 他们更喜欢形容自己为“艺术家”而不是架构师,他们即使喝上一斤“关公坊+酸梅汤”都能准确的给你画出其设计过的系统架构图、功能结构图、数据库模型,并能基于系统实际使用情况进行基于架构的系统结构优化、性能优化等。 进入此阶段的工程师已经脱离了对招式的执念,步入了对于设计与编程之道的艺术修行道路。 第五阶梯:Consultant,咨询师 咨询师是一个特殊的存在,如果说架构师是追求于设计之道与艺术之道的苦行僧,那咨询师就是这条道路上的布道家。 他们一般有着广阔的见识与丰富的实战经验,也许他并未开发过多么经典的架构,但经过短暂的观察即可指出对于当前架构的优化意见;也许他并不能写出多么高深复杂的源码,但通常可以用最简单的办法解决技术上的难题;也许它并不了解你所遇问题的业务背景与专业技术,但可以通过跨领域知识启迪你解决问题。 上文的阶梯划分出自我过往八年的工作经验,对于第四、第五阶梯,我本无意划出高下之分,怎奈文笔功力有限,只好粗断为两个部分。回顾前文,我对于开发者的阶段划分又有了新的想法,开发者在历经以上五个层级之后又该如何发展,是科学家还是哲学家?我想听听你的见解。 作者:宋琦 来源:51CTO

优秀的个人博客,低调大师

程序员技能get:对代码命名的一点思考和理解

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 一个软件***都会落实到代码。而代码,其背后的架构设计或设计思想或模式固然重要,但我觉得更重要的东西则是良好的命名。混乱或错误的命名不仅让我 们对代码难以理解,更糟糕的是,会误导我们的思维,导致对代码的理解完全错误。相反,良好的命名,则可以让我们的代码非常容易读懂,也能向读者正确表达事 物以及逻辑的本质,从而使得代码的可维护性就大大增强,读命名好的文章是非常流畅的,会有一种享受的感觉。 另外一点也许大家还没感受到,那就是良好的命名,以及良好的命名习惯,由于我们总是对每个概念的名称要求非常苛刻,我们会思考这个名称所表达的概念 是否正确,该名称是否正确表达了事物的本质或正确反映了某个行为的逻辑。所以,这种对命名的良好思考习惯,可以反过来帮助我们纠正之前的一些错误设计和代 码实现;比如,你之前有一个地方可能命名不太准确,然后你发现后面有另一个地方需要用这个名字,且更合理。所以你会发现这个名字对前面的地方就不适合了, 从而你会去思考前面的地方可能需要用其他的名字,或者你会发现前面的地方的设计根本就是有问题的。这种就是名字可以促使你思考你的设计是否正确的例子。 代码命名混乱或错误的主要原因: 没理解事物的本质; 理解了事物的本质,但不知道命名的重要性或者根本不屑于做好命名; 理解了事物的本质,也知道命名的重要性,但没能力命名好事物; 养成良好的命名习惯的一些想法: 对自己的严格自律,自己写代码时要有一种希望把每个名称都命名好的强烈意识和严格的自律意识; 要努力分析和思考当前被你命名的事物或逻辑的本质;这点非常关键,思考不深入,就会导致***对这个事物的命名错误,因为你还没想清楚被你命名的事物是个什么东西; 在有自律意识和一定的分析能力基础之上,注意命名的方法技巧;要知道何时用动词,何时用名词;以及形容词放哪里,动词放哪里,名词放哪里;也就是小学时的主谓宾要会用; 你的任何一个属性的名字都要和其实际所代表的含义一致;你的任何一个方法所做的事情都要和该方法的名字的含义一致; 从代码的命名可以看出写代码的人编程时思路是否清晰,如果你对一个名字的命名不准确,很可能体现出你还没有理解这个名字背后的东西; 要让你的程序的每个相似的地方的命名风格总是一致的。不要一会儿大写,一会儿小写;一会儿全称一会儿简写;一会儿Pascal命名法,一会儿camel命名法或匈牙利命名法; 不要出现重复的命名;因为通常名称都有嵌套关系,比如类在命名空间里,方法在类里,所有如果一个概念在命名空间里表达了,那就不必再类上再表达一次; 对于属性或类名,应该总是名词在***面,名词决定了这个属性代表什么,前面的部分都是用于修饰这个名词;比如,假如现在你有一个服务,然后又是一 个关于订单的服务,那就可以命名为OrderService,这样命名就是告诉我们这是一个服务,然后是一个订单服务;再比如 CancelOrderCommand,看到这个我们就知道这是一个Command,即命令,然后是什么命令呢?就是一个取消订单的命 令,CancelOrder表示取消订单; 对于方法,应该总是动词开头,名词结尾;比如Order.AddItem(orderItem);这个,表示订单类有一个添加订单项的方法,Add是动词,表示添加,Item是名词表示订单项; 在C#中,我们一般用camel以及Pascal命名法,而不是匈牙利命名法。我觉得主要是两个原因:1)VS强大的智能感知提示的存在,我们没 有必要突出变量的类型了,但这个我觉得只是一个次要原因;2)真正的原因,我上面有提到,一个变量,名词是放在***的,这个名词决定了这个变量代表什么。 比如有个变量叫totalCount,我们一看就知道这是一个count,然后count一定是一个int或者long,所以就不需要在强调它的类型了。 再比如,remotingRequest, httpRequest,这种,我们也一看就知道他们是请求,一个是remoting的请求,一个是http的请求。remoting,http是用来修 饰request的。request决定了这个变量是什么(同时就意味着我们知道了他的类型了),然后remoting,http这种是进一步说明该 request的业务含义或当前上下文。就像disabledButton,我们一看就知道这是一个button,然后是一个什么Button呢,就是一 个已禁用的button。所以,好的名称,本身就会让我们很容易知道该名称是什么东西,它的类型是什么,具有什么业务含义,所以没有必要再加类型缩写作为 前缀; 多学习英文,多看国外优秀开源项目中的命名技巧,会对我们命名有很大帮助; 通过一些不太好的代码命名来分析一些简单的命名问题 以上代码中,有很多问题,我们来一一分析: 方法的参数,***个字母,一会儿大写的P,一会儿小写的p,不一致; 第二个参数后面出现多余的空格,不应该; _paramsTable这个参数为什么要出现下划线,而其他参数没有下划线,不一致; publishRequest属于camel命名法,而iSignCounter, sStageIsOK这种属于另一种命名法,这种命名c++中用的多,不一致; foreach循环中,参数名叫instParam,但是后面的集合叫arrParams4SignActions,更对称一点的,应该叫arrInstParam; 方法的***两行,出现多余的空格,导致代码格式排版混乱; 从上面的代码我们可以知道,仅仅是通过这些细节,就能发现很多问题。我们写代码时,只要多细心点,多注意点排版是否美观一致、命名是否统一,那代码写出来就会漂亮很多了。下面我们再看看其他的代码: 上面的代码中,两个参数的命名也不一致,projectid中,i是小写,但是publishId参数,i却是大写,应该都统一为大写; ViewData中的key,一会儿是全部大写的UPDATE,一会儿是另一种命名,不一致; 上面的两个红框标出来的if,虽然都是只有一行代码,但是一个有括号,一个没有括号,不一致;且第二个if里出现了多余的空行,格式混乱; 上面的代码中,函数中,一会儿用IList,是一个接口,一会儿用Dictionary,非接口,不一致;应该都用接口,或者都不用接口; listOriginal和receiverList命名不一致,要么全部list开头,要么全部List结尾; foreach循环中,变量的类型叫TDMSOriginalRequirement,但是变量名却叫originalItem,而集合名称又叫 listOriginal,应该三者统一;比如foreach (Assembly assembly in assemblies) +“…”这个地方没有用空格,加号两边应该要空格,这属于格式混乱,不严谨; createUser这个变量取的很不理想,create是动词,createUser合起来就是创建用户的意思,而他这里要表达的意思是创建人的意思,所以应该叫createdUser或者creator; 为何originalItemFormat和originalItem的意思可以等价,不合理,如果等价,一开始就要命名为originalItemFormat;而且format是一个东西,动词放在***,算个啥? 上面这个类的几个私有字段中,有些带命名空间,有些不带,要么都不带,要么都带;一般命名空间都是在上面声明,后续不需要出现; ILog logger;这一句有两个问题:1)logger为何没有下划线,不统一;2)为何类名叫ILog,而变量名叫logger,要统一,要么类名叫ILogger,要么变量名叫_log; 上面这两个私有方法,一个是大写开头,一个是小写开头,不一致,混乱;应该要一致; 总结 通过上面的一些例子,我们知道,在我们不经意间,多写了一个空格或者一个空行,或者一个字母的大小写不一致了,都会导致命名的不一致;如果自己没有 养成这种平时注重代码命名各种一致性的习惯,那写出来的代码很可能就是像上面那样。我觉得是非常糟糕的。上面我举的例子都只是简单的命名方面的,更深层次 的命名问题,比如如何做到名称和其背后的实现内容一致,这个是需要我们平时不断修炼的。不是短时间内就可以做到那个程度。 我觉得,要做好命名,归根结底: 1)先要意识到命名的重要性;2)要端正态度,要认真的写代码;3)要努力推敲每个名称和其实际做的事情是否一致,也就是命名的准确性;4)要时刻注意命名的各种一致性; 养成良好的命名习惯不是为了别人,不是为了公司,而是为了提高自己的编程修养,提高自己认识事物的能力。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册