当然,对于不太爱琢磨的人,这个不是事儿....
我就来说说我们学东西时一些令人纠结的东西(写这一片纯粹是为了让博主不要在继续纠结这些问题,先按这个办,对于有 “选择困难症+完美主义强迫症” 的博主来讲,太痛苦,写下来了我就可以不纠结了)
选择一:学/用什么语言
其实这个还算好办,选什么语言要看你做什么行业,这个行业哪门语言应用最广泛,那么入门时最好选择那一个。原因如下:
- 支持广泛:既然是应用最广泛,那么必然有很多相关工作人员在做支持和应用,你可以有更多方便的途径去实现你的设想,同时有更多的示例指引你入门。
- 入门迅速:更多的示例和更多的资源(官网、论坛、博客、贴吧....),不要仅仅停留在入门阶段,因为职场上可不是只需要入门选手的。
- 层次明确:你不用纠结太底层的东西,而只用关注你需要关注的层次,可以让你在设计之初思路更明确,不会在各种底层的操作中迷失了方向。
- 好找工作:应用广泛的语言不缺乏应用商家(我们还是要面对现实的)。
选择二:先学具体的实现,还是先学习怎样去设计
要说这个,我要先吐槽吐槽大学看到的各种各样 “程序设计” 的教程的书籍。
什么叫做 “程序设计” ??? 博主愚钝,认为这是停留在应用层上、理论层下东西,它应该是把程序的具体工作原理描述清楚的工作,不论你用什么 模块化的思想、 设计模式的思想, 借助什么 流程图、数据流图、状态图, 仅仅是方法/方式的区别, 你最终的目的就是 :
把你怎么去做这件事描述清楚。 我认为这个叫做设计,它是一个很高层的东西。
然而,翻开很多 《C语言程序设计》的书,明明是介绍这门语言怎么去用,是讲
“实现” 的, 跟设计完全不搭边好么,真是不知道出版社的编辑审核在干什么,误人子弟!(想当年我也是被误导的,看了这么多年程序设计的书,我才慢慢意识到,
很多时候我需要知道的是如何设计这个程序才能更好地解决这个问题,而不是这个应该怎么用某语言写出来)
回到主题:
先学习实现还是先学习设计(或者说,更好的去设计)。
如果用一个比较具体的事情表述这个主题的话,我选择的是:先学习《C语言程序基础》还是先学习《程序员修炼之道:从小工到大家》。
我想可以用剑术之中的 “剑宗” 和 “气宗” 来大概类比一下(不是特别准确,只是能为你指明方向)。
学习实现(代码的编写),好比 “剑宗”, 更偏向学习具体的招式。而学习设计,好比 “气宗”, 先让你底子够硬,能够打出更稳、更狠的招式。
那么我更偏向于先学习实现,原如下:
- 迅速发布:对于现在,这么强调敏捷开发,我相信迅速把东西做出来并且发布出去才是王道;何况公司都是追求利益的,占坑很重要,这方面微软在智能手机是个好例子......(记得毕业那年敏捷开发在CSDN上特别火,同期还有云计算)
- 实现是设计的基础:我相信这不是一个鸡生蛋的问题,好比:在没有斧头之前,你需要考虑怎么做一把更好的斧头么?你连斧头都做不出来,怎么证明第二把斧头比第一把斧头更好?一个没写过程序的人说:我设计出的程序就是比你的好!我不信,好在哪里?效率?开销?你了解程序么?你设计的优势在哪儿?这些都是问题。
然而并不是说先学习实现就完全把设计丢到一边,毕竟,设计是实现的指导,我更倾向于把设计作为一种手册类的东西,在有足够的基础能够实现一些东西的情况下,去了解一些设计的基础,然后根据实现的需求,去针对性的查找设计的相关知识,这样才是最快速和应用性强的学习方式。当然这种方式适用于自学和企业,因为 “时间”+“精力”, 而且对于我这种没兴趣就一点都不想看的人来说,针对性的查找会提高效率,同时不会让我三分钟热度。
如果你有时间有精力还是个学生的话,我的建议是:先完整的打好一门语言的基础,然后把这个作为检验设计的手段,去好好的学习设计。个人认为,设计才是最重要的东西,因为它是灵魂,而实现只是肉身。当你的设计达到一定的高度时,我相信你把文档作为工作。当然还是要建议你有空多学几门语言,毕竟每门语言有他设计出来的环境和针对的应用场合,在你有需求的时候是有优势的。
设计是个很难的东西:灵感?底层?环境?需求?效率?......好多好多给你限制的东西,所以说,我特别敬佩能够被大家公认为优秀设计师的人,因为他们才是引导我们发展方向的人