培养程序员的思维方式 当你想学习Java的时候,一定会想:“我要学好Java,成为一名优秀的程序员。”。对于这一点,我很欣慰。总不断的有求知若渴的年轻人加入到程序员的圈子中,同时也经常感受到所谓的“菜鸟”在刚接触编程时的疑惑与困扰。对于刚刚立志成为程序员的新人来说,总是需要选择一个起点,即选择什么样的编程语言:Java?.Net?PHP?Android?C ?…… 太多的选择往往比没有选择更让人困惑,作为过来人,能够安慰你的观点是:能够快速的掌握程序员的思维方式,比挑选一门入门语言更加重要。如果拿写作做比喻,就好像你可以选择中文、英文、法文来进行文学创作,无论什么语言,作品的成败还是取决与作者的思想境界与文学功底,而语言没有太大的关系。只是如果你选择英文写作,受众更广,更容易评上诺贝尔文学奖。而在众多的编程语言的比较中,没有太大的优劣之分,只是Java语言目前在软件开发行业的流行程度就类似于英语在世界范围的流行程度。学习Java编程开发的人最多,使用Java开发程序的人最多,甚至在书店里,关于Java编程的书都是最多的。 但是选择Java语言还不足以成为你拥有自豪感的理由,程序员之间如果要分个高下,比拼的不是谁掌握的语言先进或数量多,而是解决、处理问题的思路和方法,也是常常在开玩笑中说的“思想境界” 而这些并不是某一门编程语言能带给你的,而是需要通过一边观察生活,一边体会编程的思维方式,最后将两者结合而产生的。思维方式虽说虚无缥缈,但是也可以遵循一些方法来进行练习: 第一式:拆分法将复杂的任务拆分成多个简单的任务是一项基础的思维能力训练。根据任务的不同特征也有不同的拆分方式,最简单的拆分就是按照任务的时间顺序或逻辑顺序进行拆分,比如经典的笑话:把大象放入冰箱的过程可以做入如下拆分:
有些任务可以按照数量级进行拆分,比如我国的人口普查是一项非常庞大的工作,计算全国的人口貌似是一件不可能完成的任务,但是中央将任务下发给省市,省市下发给街道,街道下发给小区,通过逐步缩小范围,最后统计汇总,就可以短时间内完成任务。 还有些问题则需要通过设计进行拆分,比如著名的韩信暗点兵问题:韩信被刘邦拜为元帅,但刘邦并不信任同是市井出身的韩信,在练兵场上刁难韩信,要求在不报数的前提下能够说出场上几千名士兵的具体人数。韩信略一思索,命令士兵为3列纵队,结果多出两人;再下令变为5列纵队,多出3人;最后下令变为7列纵队,最后多出2人,韩信计算出士兵总数为2333人,破解了刘邦的难题。用现代的话说,韩信通过设计了一个四元一次方程在特定范围求解决这一难题。 第二式:寻找漏洞法。拆分法能锻炼对于问题的整体认识,但是编程中还需要经常处理非常细节的问题,否则将来软件会有很多漏洞。防范的方法就是换位思考,将自己想象为寻找漏洞的黑客,使用各种方式找出现有规则的缺陷(注意不要真的成为违反法律的黑客。)比如将大象放入冰箱的拆分中,第一步没有考虑如果冰箱门已经打开了,则无需重复打开,第三部没有开了冰箱门如果关不上,应该如何处理。在现实问题中,可能问题会转变为某些业务如果每个人限制只能办理一次,如何进行处理?如果使用身份证进行登记,如何防止冒用别人的证件?如果随着系统升级换代,身份证号码进行了变迁,如何处理?寻找漏洞的方法就是多设想一些“如何”,通过黑客的角度提出问题后,在切换为开发者的角色,提出问题的解决方案。大多数软件开发人员,都会在设计系统时不断的扮演建设者和破坏者两种角色。 除了进行思维锻炼外,如果你更愿意系统的、理论的研究思维方法,可以看一些逻辑学的书,基本上大学课程中的逻辑学教科书就能满足这方面的需求,另外也有一些诸如《生活中的逻辑学》之类用比较通俗的方法介绍逻辑的书籍可以入门。 了解程序的控制流程在一头扎入Java编程世界之前,换一句话重复刚才的观点:“程序是开发人员的思想表达。”如果没有想法,或者想法无法转换为符合计算机工作方式的思路。是不可能写出真正的可用程序的。 初学者快速的掌握程序的三种执行结构:顺序结构、分支结构和循环结构,甚至还可以进行事件的处理和简单的问题解决。 顺序结构是最容易理解的指令执行结构,处理器一次执行一条指令,这条指令完成后执行下一条指令的处理,使用顺序结构。 循环流程则是不断的重复一系列指令。指令因为没有终止条件会一直执行,在程序中被称位死循环。可以通过添加条件判断控制指令的执行与否,称之为分支流程,要求用户输入一个人数字,然后判断是正数还是负数(未考虑输入0的情况)。 使用变量记录数字等内容,以供后续运算。选择“变量”类型,新建一个变量,每个变量都必须有一个不同的名称,之后通过这个名称对变量赋值,运算。下面的指令创建了变量a,赋值为64,接下来运算a的平方根,并将运算结果存储在变量a中。 来挑战一个有难度的题目:猜数字。猜数字游戏,由电脑随机产生一个1~100之间的数字,让玩家来猜; 作为一款有挑战的游戏,必须增加难度,我们希望如果玩家连续猜错8次,则提示“Game Over”。这时需要增加一个变量记录玩家猜测的次数,每当玩家进行做出猜测后,次数加1,如果玩家猜错并且次数大于8次,则进行提示,并终止程序。 多玩几次这个游戏,相信你能够找到用最少次数猜到结果的方法:第一次先猜50,根据提示大或小猜25和75,每次讲猜测范围缩小一半,这就是所谓的二分法,下表列出了使用二分法猜测的规律:
由此推出,如果允许猜n次,肯定能够猜出1~2n-1之间的数字。换一种说法就是,如果数字的范围是1~m之间,利用二分法则需要才log2m 1次就可以猜出答案,可见二分法是一种效率很高的算法。 另外一种方法:电脑猜数字时,自然需要电脑使用二分法来进行猜测,可以定义两个变量分别记录数字范围的最小值与最大值(初始为1和100),每次猜测“(最小值 最大值)/2”的数字,如果大或者小,则修改最大值或者最小值范围,知道猜对或者最小范围大于最大范围,后者意味这玩家给出了错误提示,无法猜测出结果。 以上例子抛砖引玉,在初学阶段可以多利用辅助编程工具整理思路,形成“程序员的思维方式”。如, Scratch、亿图、画图等工具。 本文转载于微信公众号: 凯哥学堂(kaigexuetang_com),更多微信文章请扫描关注公众号: | |||||||||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|