A. 如何成为编程高手,程序员要看什么样的书籍,有经验的人说一声,做好是大师级别的人物
作者:金蝶中间件公司CTO袁红岗
不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差的太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。
1. 扎实的基础。数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。
2. 丰富的想象力。不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。另外,多看科幻电影也是一个很好的途径。
3. 最简单的是最好的。这也许是所有科学都遵循的一条准则,如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。
4. 不钻牛角尖。当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,而且是那种极暴力的打斗类游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。
5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中你也会学到很多东西。
6. 多与别人交流。三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一问题的看法,会给你很大的启发。
7. 良好的编程风格。注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。
8. 韧性和毅力。这也许是"高手"和一般程序员最大的区别。A good programming is 99 weat and 1ffee。高手们并不是天才,他们是在无数个日日夜夜中磨练出来的。成功能给我们带来无比的喜悦,但过程却是无比的枯燥乏味。你不妨做个测试,找个10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。
B. 用记事本写代码的程序员都是高手么
用记事本写代码的程序员不都是高手。
问题本质要不要用集成开发工具写代码而言,是不是用记事本写代码和编程本身厉害与否没有多大的关系,倒是有很多人建议在初学编程的时候,先以记事本学习为主,这种是有一定道理的,毕竟记事本写代码空白一张对于初学者来讲需要考虑的东西对于掌握基本的东西多点,毕竟很多接口在写的时候没有了联想功能只能靠大脑去想,倒是真能锻炼自己的独立能力。
说到记事本写代码,要说这方面表现得比较厉害的在linux下面直接完全的键盘操作不用鼠标,工作效率高得惊人,当然需要记住大量的快捷键,要比直接图形界面的操作效率高很多,linux下面直接搞好VIM能够体会到纯键盘操作的快感。
决定编程水平的高低主要分成三个部分:
1.编码水平,这是程序员的基本功,能把想做的功能给完成了,而且性能质量很高属于高手。
2.编程思想,这是决定程序员水平高低的关键,任何东西都需要指导思想,正常的编程模式也不会超过100个体系,常见的多进程模式,网络编程模式等等学会了套路无论什么编程语言用起来照样比较畅通,编程思想绝对水平高低。
3.框架思想,这种属于在编程思想和编码水平之上的东西了,迈向顶级的关键,绝大部分属于普通的程序员,真正在食物链顶层的才有几个,有些有这种能力但是没有展示的机会,也是挺可惜。
所以看编程水平的高低,更多是内在东西,快捷键使用再流利,没有主心骨,一样也是花架子,看一个人水平高低还是要看做出过什么东西,很多老工程师在面试的时候,问的不是做过什么项目,一般是问现在市场上还有当初做过的产品没,产品才是最好的简历。
C. 程序员等级划分:看顶级高手如何编程
有脑子,很听话,很认真,但基础不好,代码有局限性 这类型的程序员大多是工作一到两年的程序员,但和上面的不同,他们很有脑子思路很好,而且很听经理的话,做东西很认真,做不完了自己会加班写,学新的东西也很快,但是有一点不好的是,他们有很多理由说自己没时间学习基础,这些人一般是在学校没有学好,出来之后后悔了,学起来很认真,由于学了些新的知识,起点高,看不起基础的东西,从不想着没事去看看编程基础,看看算法,看看数据结构,总是以为我都能做出这样的项目了,还看那些小东西会很丢人的,于是在公司从不看回家更不想看,时间长了,技术会有很大的局限性,对某一块技术很不错,但是对其它技术不怎么好,于是在接到一个项目时,总喜欢使用自己现有的,会的技术去实现,转了一圈又一圈总算是把东西写出来了,而且还是加班完成了,但是代码的性能,稳定性,和效率上差的很远,扩展性也谈不上,时间一长,项目一多起来,就会出现多次反工,因为需求是会不断变化的,于是自己的代码也要变化,感觉很是理所当然,一个项目没事,接手的多了就麻烦了,新项目刚到手,老项目就出问题了,不是这里有点小毛病就是那个功能要升级,于是新项目放下,着手改老项目,手上能有三四个项目时,就会忙个不停,改的多了,没办法再改了就得重新设计,或是直接说这个功能实现不了。 其实在这个阶段的朋友很有潜力的,只要花点心思补习一下自己的技术缺陷,多看看高手的代码,写之前想一下,设计一下,自然事半功倍,千万不要有眼高手低的心态。 真正的高手Nb人物是怎么工作的------------程序员 1.不随便改变需求 他们不会主观的改变一些东西,不管是对还是错,如果要改的话他们会在开会时,或是私下跟你提出来,通过后再改,否则会按需求办事 2.不写没有思想的代码 在写功能时会加上一些人性化的功能,比果加个小图标,加一些验证,处理一些操作习惯,加加快捷键,处理好Tab顺序,等这些,不用你说,他们自己会处理好。 3.不写没有远见的代码 他们在写代码时会想,不会是单纯的实现功能,他要想,如果别人也要用这个方法怎么办,以后要改的时候怎么办,代码这样写是不是合理,是不是会影响性能,然后才会”吝啬“的出手。 4.不写不负责任的代码 我们写代码一是为客户用,二是方便其他人看,不单单是自己维护,要对自己的代码负责,从自己手上出去的代码代表的就是自己的脸,代码不好,人家会“打脸”的。他们不愿意挨打所以他们负责。 高手在编程效率方面可能并不比普通程序员快多少,因为他们会吝啬自己敲下的每一行代码。这种“吝啬”有两方面的含义,一是项目的架构性和整体性考量,二是从性能和优化的角度进行Coding。其实,这里所映射的是一个开发者的技术视野。 有多位技术专家强调项目执行时的全局观。面对一个项目,即使是团队中的普通一员,也要力求从项目整体架构的角度审视开发需求,对各个模块、接口和通信做最优化的预想和配置。这样可以从全局审视整个项目的技术布局,预判可能出现的问题。 在确定了整体之后,落实到具体的模块实现,每一行代码不但有上下文的考量与规划,还要具备模块间的整体布局。这是模块内的技术视野,比如接口的定义、注释的可读性、代码的执行效率等。当你写下一行代码前,要考虑它是否会对整个系统造成影响,是否方便其他接口进行调用,这些都是一个开发高手的“技术潜意识”。 据一些经常带领入门级开发者的技术经理介绍,多数人只考虑自己所负责的模块进行开发,缺乏一个全局性的技术视野和对代码性能苛刻的态度,这样虽然能按交付日期完成项目,却对项目质量和开发者的自我提高有很大阻碍。 开发高手是代码阅读者。大多数技术专家的代码阅读量是普通程序员的百倍,代码阅读的时间比写代码的时间要长得多。 多数程序员只把程序开发当成一份工作,他们在乎平台的前景、语言的优劣、报酬的高低;他们不愿为一个技术点反复钻研,不愿为一个bug精心测试,不愿为自身技术水平的提高多花时间。而开发高手往往具有单纯的技术梦想,愿意为技术付出自己全部的时间。
D. 如何看出一个程序员的技术能力和水平
其实,评论一个程序员技术的高低,不是看他会多少技术,又懂多少技术。参加过什么大型的项目,也不是看他有没有自己的博客,github有多少star。
而是看他解决问题,定位问题的能力。这个很重要,真的很重要。
技术可以很快上手使用,但是解决问题定位问题的能力不是轻易就行的。特别是在高压下解决问题的能力。
下面是师姐为大家整理的一些建议:
解决问题
1.代码的命名要规范。
代码是写给人看的好嘛!代码是写给人看的好嘛!代码是写给人看的好嘛!
headImg是什么鬼?我能以为是banner么,头部的图片,请原谅我蹩脚的中式英语!avatar这个呢、portrait这个呢?会不会更好些?英语不好就不能用好有道、google翻译么?还有用中文拼音命名的,亲,我们用的是英文做为脚本好么?你要用这样的,用易语言可好?!
疯了!
为什么要用框架?一个很重要的原因是命名规范,目录规范,结构规范,分层规范,有利于团队协作,不要本末倒置!
2.架构和规划能力很重要,模块分层,解耦设计什么的,文件目录嵌几层?
这其中又跟命名的能力能搭上点关系。命名都命不好,目录结构怎么建?
url不要做的漂亮些吗?不考虑seo了?
你喜欢addGoods还是喜欢goodsAdd?
请你尊重点我的那些初高中英语语法好么?
3.协助能力、可持续能力。
最好的程序代码是脱离其产生者的。
为自己程序处处救火的程序汪并不是一条好汪。
我记得一句话就是:别想着你的代码以后还有机会重构!
每次说,额,这里我后面会改的,会改的,但是可惜,现实情况是根本不会给你这个时间的。
代码写出来,一是要爽了自己,二是也要爽了别人。
4.debug的能力、总结能力、学习能力真的很重要,代码写出来真的花的时间不长,但擦屁股的时间比写代码的时间多多了!
出了问题不记录,写个博文都好啊,我可没那么强大的记忆力,所以最讨厌考记忆力。
5.不要一贯的使用各种算法,秀算法的你们够了,要写去写底层,应用的场景比较多。
应用层面的程序,算法的应用不是特别多,大部分都是业务代码。以这个作为评价标准的,真心然并卵。
E. 如何认识计算机高手
大概在另外一拨人的眼里,成为计算机学科的高手应该是把数学学好。你们这群人都只是低端的码农,只有把高等数学学好,精通概率、统计、随机过程、抽象代数,熟练掌握各种建模方法,才是计算机科学的王道。再结合各种领域知识,年薪百万轻轻松松。弄点高级算法几十亿被收购瞬间财富自由。
技术只是技术本身,计算机发展了这么多年,无数新技术层出不穷。每个人都靠着自己的专长在这个领域发家致富。有的人是因为懂客户需求,有的是擅长做设计,有的人擅长把成熟的技术应用到传统的学科之中。汇编只是这茫茫技术中的一种而已。
本质上来讲,高手的本身并不是掌握了什么技术,而是能够帮助别人解决问题。一种技术只是解决问题的一种方法,而不是唯一的方法。如果解决这些问题需要精通汇编,那么你一定需要掌握。如果想解决的问题并不需要了解汇编知识,你大可以不掌握。汇编知识与很多其他知识在知识本身这个层次上并无优异之分,只不过在计算机领域更底层一些。
最后,计算机的基础知识,比如操作系统、数据库、计算机网络、编译原理,该了解的肯定要了解,该入门的要入门。
至于是否要精通,如果你发现在你成长的过程中遇到的瓶颈,是对于底层的了解,那你就应该精通。
F. 来聊聊怎样辨别一个程序员水平的高低
看头发。热爱技术的人,会不自觉的熬夜,不解决某个问题誓不罢休。
G. 从哪些点上可以体现一个程序员的实力
对于一个程序员来说,刚上任的新手,如果能够将工作任务高效地处理,证明其工作能力还是具备一定的基础的,企业大可继续留任试用。如果这个程序员不仅能够在短时间内高效处理工作内容,且对于工作的细节也十分地考究,充分全面地考虑,必然也代表其工作思维和普通员工不同。一个程序员如果对于工作只是在应付差事,那么必然其能力也不会好到哪里去,因此,一定要观察期对待工作态度是否认真,然后进行其能力的初步判断。
H. 有哪些老程序员都知道对新手很有用的经验
一说到程序员,想必大家的第一印象就是头发少,很大程度上就是因为压力大导致的,有生活压力,也有工作压力。
今天说说工作方面的压力,想必看到这个问题的小伙伴都有一个认知,就是一个项目往往比预期的要长,说不定从哪天开始就加班了,一出现BUG真的要人命。此时,考研新老选手心态的时候和经验的时候了,老程序员或许能从容应对,新手可能完全不知错所。
这些信息包括户口档案、社保、公积金等信息,程序员新手可能跳槽比较频繁,有人甚至还换个城市工作。除了户口可能其他的信息都乱了,可能当时觉得不那么重要,但是十年、二十年后,可能会非常重要。
·工作日志可以提升脑容量;
·不要先写框架再写实现,要反过来;
·重构/优化/修复Bug,不要同时做;
·简化开发流程,加快迭代速度;
·纸笔是最好的工具,其次是markdown;
·画出结果,一目了然。
·要学会进行清晰的命名;
·问问题前先调查,要问到点上。
·不要小看程序员
I. 如何辨别一个程序员水平的高低呢
有的时候单纯靠一个面试很难辨别一个程序员的水平是什么样的。原因很简单,因为很多面试题在网上都有,如果刻意准备那么一般都能回答的不错。所以想辨别一个程序员的水平需要一定的方法。
上述几方面我们称为应能力,还有一些软能力也是非常重要的,比如责任心,对技术的态度,学习能力等等。当然,这些就更难考量了,本文暂不介绍。
如果上述几方面都比较不错,那么这个程序员的水平应该是不错的。即使对目前的工作的知识储备可能还有欠缺,但经过一段时间后必然可以