继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

程序员怎么成为一个优秀的程序员和怎么保持优秀?

慕仔3251853
关注TA
已关注
手记 17
粉丝 0
获赞 2

众所周知的是,优异的程序员能够构建令人赞赏的功用、网站、应用程序等等。可是他们有什么一起点呢?


通过我的研讨,这不仅仅只是熟练掌握一门编程言语或有特定的教育布景。真实有才调的程序员现已掌握了基础要素。这些基础要素使他们能够建立巨大事物,并提出突破性的主见。


希望一下金字塔,金字塔有一个很大的底座,然后越往上越小越薄。学习编程的基础常识就像制造金字塔的底部,全部都从底部开端。


那么这些基础要素都有些什么呢?根据我的阅历以及我研讨过的一些优异的程序员,我以为编程基础要素首要有以下两部分。


首要,你有必要做到能够高效的处理问题。这是一个要害的起点由于编程就是为了处理问题的。


尽管觉得问题的办法能够有许多,但进程中有几个部分让我形象深入。具有超卓的处理问题的才调的程序员会先将问题的实质提炼出来,以便于招认整体政策并带着这个政策着手处理问题。然后他们将每个问题分解成简略处理的小问题,依次处理每个小问题,有时还能够通过制作导图使其完毕可视化。


这个进程做起来远比听起来难得多。当我开端学习编程的时分,我也会遇到瓶颈:和大多数人相同,我从未在学校学会怎样处理问题,这也不是一项简略教授的技能,早年,教师在数学课上安顿了一组习题,我便一头栽了进去,正如我刚刚开端编程的时分。毋庸置疑,我这是在做无用功并且在最简略的问题就遇到了阻碍。


当我开端学习怎样处理问题甚至是高效的处理问题,情况开端发生变化。我开端去重视一个问题的终究目的是什么,得益于乔治·波利亚的书《怎样处理这个问题》。


我把波利亚的一些主见运用到编程里,比如怎样去了解问题。“这个问题有必要被了解,”波利亚写道。这包括能够“指出问题的首要部分、不知道、数据和条件。”关于每一个问题,我都拿出一张纸,然后写下这些问题的答案:我在处理什么问题,或许我在企图寻觅什么?(不知道);我现在有什么已知?(数据);我需求留神哪些约束条件或细节?(条件)。


了解这个问题对咱们来说似乎是清楚清楚的,但清楚清楚的问题很简略被忽视。我不止一次在一个问题上投入了数小时可是毫无收成,过了一会才意识到这个问题,我错过了问题陈说中一个小而要害的细节(jfchosen)。写下问题的细节尽管会让我的思想变慢,可是一同这帮助我精确地考虑我需求做什么,这就现已成功的一半。


在此基础上,我也会拟定了计划,这也是乔治·波利亚的另一个建议。我会在写文章之前先写提纲,画家在正式作画之前会先画一幅草图,建筑商用图纸和蓝图来制造房子,编程也相同。与其急着去做,我还不如先想好我要做什么,然后拟定一个计划。


详细的施行办法有许多种。有时我用数字的顺序列出我需求采用的进程:榜首件事做这个,第二件事做那个。有时分我也能够把问题可视化,当我学习for loops的时分,我拿出一把杏仁,在这堆杏仁中进行物理循环。这个比如听起来很单纯,但它能很好地帮助我考虑了这个问题。


我也会画一些示目的。关于递归问题,我会制作图表来说明每次递归调用时发生的情况,直到递归完毕间断。我会想办法怎样去简化问题,使其更易于处理,并帮助我发现一个适合的处理办法。最重要的是,我是带着目的性去进入一个问题,并在处理问题的进程中一向保持着这种目的清楚的感觉。


有时尽管拟定了最好的计划,问题依然很难被处理,我仍是有或许没有思路。成为一个高效的问题处理者需求时间;我仍在努力地学习这个技能,这是必定值得的。


当我阅览由一个优异程序员编写的代码时,最直观的感觉就是它很洁净,很简略了解。变量被很好的命名,函数简略清楚,每一行代码都有特定的用途。代码的清楚性度反映了程序员的考虑进程:我能够从头到尾阅览程序,并切当地知道发生了什么。这是很棒的处理问题的办法,也是我所寻求的。还有以下几点?


1. 小规模的选择一些有用技能,透彻的学习它们,拥抱它们。然后不断的扩展这个规模。


  2. 了解各种数据结构的利益和缺点,包括它们在内存中和在硬盘上的各自体现。

  3. 了解各种算法的利益和缺点。

  4. 了解你的作业范畴。关上电脑,去做你的用户们在做的事。

  5. 有预备,有希望,有才调在任何时分投入到多种技能层面中。你有必要知道表象下的技能原理。在“各个技能层面的掌握程度”和“编程才调”上有着接近的联络。

  6. 发挥你的希望力。永久都要问,“有更好的办法吗?”跳出惯例思想绑缚。最好的处理计划或许还没有被发现。

  7. 优异程序员:我优化代码。更优异程序员:我规划数据。最优异程序员:他们的不同之处是什么?

  8. 正确的结构你的数据。任何的缺点都将构成你的代码里无尽的技能债款。

  9. 正确的命名事物。运用“动词-形容词-名词”格式来命名程序和函数。变量名要满意长,尽量短,有意义。假定其他程序员不能够了解你的代码,说明你写的不可清楚。在大多数情况下,针对下一个程序员而编码要比针对环境而编码重要的多。

  10. 把剖析和编程分脱离做。它们不是同类的事物,需求不同类型的劳力资源,需求在彻底不同的时间和地址分隔做。假定一同做它们,你相同都做欠好。(我喜爱在一天的结尾做不触及技能的剖析,而在第二天早上进行编程。)

  11. 永久不要图省劲走近道。永久不要把相同的代码布置两次。永久不要把一个变量命名成另一个变量名的一部分。或许你不了解这些规则,或许你要辩解。但假定你是 遵守着这样做的,这些规则就会绑缚你正确的结构你的程序。图省劲的做法是让那些低等级的程序员永久停留在低等级的原因(Linkatseo)。

  12. 学习怎样测评程序功用。你会惊讶的发现从中能学到许多之外的常识。

  13. 学会区别对待问题细节和问题效果。问题细节不会导致太大的不同,而问题效果能导致世界消亡。只重视效果。

  14. 接近重视你的用户/客户/管理人员。帮助他们认清楚他们的“what”,这比帮助他们了解他们的“how”要重要的多。

  15. 写一个框架,不论你是否计划用它。你将从中学到从其它途径中学不到的东西。

  16. 把你知道的东西教给他人——通过口口沟通或通过写作。终究这将成为教育自己的机遇。

  17. 永久要对你的客户/用户说“Yes”,即使在你不招认的情况下。90%的情况下,你会终究找到办法完毕它。10%的机遇,你将会去向他们抱愧。这是重要的个人成长中付出的一点小价值。

  18. 寻觅他人的做出一起的工作但却一滩糊涂的代码。重构它。然后丢掉它,并立誓自己永久不要犯他们犯下的相同过错。(这样的程序你会发现许多。)

  19. 数据永久 > 理论或观念。通过开发东西来学习数据。

  20. 有或许的话,开创自己的业务(服务或产品)。你将从中学到许多你做雇员永久学不到的关于编程的常识。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP