当你不熟悉编程的时候,你可能会觉得无从下手,并且不知道如何运用学到的知识。只要你通过了这一困难的学习阶段,你就会发现一个全新的世界
编程是非常酷的一件事情,但是在酷炫的背后它对很多人来说还是挺难的。很多人在学习编程之初就被困难击败了。
当你不熟悉编程的时候,你可能会觉得无从下手,并且不知道如何运用学到的知识。只要你通过了这一困难的学习阶段,你就会发现一个全新的世界。
以下是一些能够帮助你快速提高编程技巧的建议。
编程入门篇:
1. 多写代码
学习某件事情最好的办法就是练习。你应该花大量时间去构建和编写代码除非你认为练习对你的帮助不大。你可以从写一些基础知识相关的简单程序开始。
2. 参与不同类型的项目
当你对某种开发语言非常熟悉之后,你应该开始做一些正事了。这样做能帮你对那种开发语言的性能有个全面的理解,同时也能推动你去学习与这门语言相关的一些东西。过了段时间你会发现你经常用类似的方法去解决类似的问题,将很难从固有思维中跳出来去学习新的技能。
3. 精通一到两门你使用的语言
读一两本关于这门语言的好书。重点掌握这门语言的先进开发理论知识,并且对它的核心和语言库足够了解。确保你所使用的语言中至少有一种脚本语言。
4. 开始阅读
尽可能的多读书。书能够帮你系统的学习一门语言,并且能够带你了解这门语言的各个方面。对于初学者来说更应该多读书。
5. 加入讨论
当和别人讨论的时候,你会产生一些以前从未出现过的主意或者想法。在这个过程中,你能够从别人那里学到很多,同时这也是一次机会,通过分享你关于编程的看法检查你到底对于这门语言掌握了多少。
6. 通读公司内部的技术和培训资料
比如说,谷歌有很多的代码实验室,有着几十年经验的大牛们用各种语言写出来的最好的实践在实验室里用来做核心培训和高质量的指导。如果你公司没有类似的资源,谷歌的开源了一些他们的指南:https://code.google.com/p/google-styleguide/
7. 写博客
当你学习编程时,你会遇到各种问题,并且想尽办法去解决它们。你可以在博客中记录下你解决问题的过程和你从中学到了什么。其它人看到你的文章后,也能从中获益。同时,你还能和志同道合的人交上朋友。
至于花在学习编程上的时间,刚开始你应该挤出20%的个人时间致力于提高个人开发能力。如果可能的话,最好是每天一两个小时而不是一个礼拜一天,因为这样你能通过日常习惯去提高你的能力。最初的时候效果可能不明显(当然如果你因为上网或者其他事情分心的话是没效果的),但是这样做的目的是让你在长期的编程学习中有更高的效率。
编程提高篇:
1.首先仔细分析问题
2.接着好好想想如何解决这个问题
3.收集整理所有需求。
花点时间将最终产品要实现的目标写下来,并且明确哪些是我们的目标用户群。如果这一步能做好的话,将会给后面节约大量的时间,正所谓磨刀不误砍柴工。
4.写一个全面的实施计划(或模型)。
如果是个小项目,这一步出来的可能只是一个基本的流程或者一个简单的等式。
如果是个比较大的项目,这一步有助于我们将它切割成几个模块,然后再按下面的问题思考:
各个模块需要执行什么任务
模块之间如何传递数据
如何调用模块中的数据
虽然比起直接入手去写代码,收集和规划需求又枯燥又无趣,但是如果这一点没有做好,后面的调试工作就会特别繁琐。如果我们能花点时间,设计出一个正确的程序流程和结构,那么我们其实在写第一行代码之前就相当于已经成功了一半。
5.注释我们的代码。
如果你认为你的代码可能需要做个解释,那就去注释它。每个函数都应该提前一两行就先描述一下它的参数和返回结果。比起告诉你what,注释应该说明的是why。还有记得在更新代码的时候也要更新注释。
6.使用统一的命名规则定义变量。
这将有助于我们追踪各个类型的变量,并且对每个变量的用途一目了然。这一条的好处可不仅仅是方便我们打X = A+ B * C这么简单,它会让我们的代码更便于调试和维护。目前普遍受欢迎的一种命名方法是匈牙利命名法,它采用的是类型前缀于变量的做法。例如,对于整体变量,我们可以使用intRowCounter,字符串就是strUserName。无论你的命名规则是什么都没关系,只要保持一贯,并能简单描述变量就行。
7.格式化编辑代码,代码结构可视化。
例如,碰到条件语句(if、else等)和循环语句(for、while等)缩进代码。还有,可以在变量名和运算符号之间加个空格,运算符号指的是“+”、 “-”、“*”、“/”,以及“=”(举例,myVariable = 2 + 2)。这不但让你的代码更直观更优雅,还能使得我们的程序流程更加一目了然。
8.全面测试。
首先通过输入我们期望的值来测试每个模块能否独立运作。然后试着输入一些可能但是很少见的值,继续测试。这基本上能暴露所有隐藏的bug。测试也有所谓的技巧,通过练习和实践,我们谁都可以逐步建立起适合自己的技能。测试应包含下列情况:
极端值:正值用0和大于预期的最大值;文本用空字符串,参数用null。
无意义的值。虽然用户不大可能会输入乱码,但是我们自己无论如何先测试一下为好。
不正确的值。在除法中输入0,或者在预期是正数以及开平方根的情况下输个负数。当输入类型是一个字符串的时候,输入非数字,然后看看是否会被解析为数字值。
9.练习、练习、还是练习。
编程也会随着时代的前行而不断进步。所以总有新的东西需要我们学习,——甚至更加有用、更加重要——当然,也总有一些内容值得我们温故而知新。
10.减少需求改变的风险。
在现实的工作环境中,需求总是在不断变化的。然而,如果前期我们对需求收集得非常全面,一开始的实施计划就很有针对性,那么后期因需求改变导致的计划不周和双方产生误会的可能性就会小得多。
我们可以在开始写代码之前,通过展示需求文档和实施计划,以提高进程的清晰度。这将有助于确保我们的计划是真正按照客户的要求去完成的。
如果将项目比作是一系列的里程碑,那么一次只要完成一个就可以了。记住,在任何特定的时刻需要考虑的东西越少,那么我们想得就越详尽越完美。
11.由易到难,从简入繁。
如果你的软件复杂,那么我建议你最好先从简单的模块入手。例如,有这样一个项目:请设计一个程序,要求能出现一个跟着鼠标方向走的渐变图形,并且还能根据鼠标滑动速度改变形状。
首先,设计一个正方形,写一段能做到让它跟随鼠标的代码,这样就把运动追踪问题先单独拎出来解决掉了。当然这才是第一步。
接下来,将这个正方形的大小与鼠标的速度相关联,即解决了形状随速度而变的问题。
最后,创建你想要的实际形状,并把这三个组件连接在一起即可。
运用这种方法自然而然地就编写出来了模块化的代码。并且每个组件都有它自己独立的功能。这对代码重用是非常有用的(例如,你完全可以在其他项目中应用第一步骤(用于实现鼠标跟踪)的代码),并让我们的程序更容易调试和维护。 |