我知道怎样编程,但我却不知道要编什么程

原文:http://www.devdungeon.com/content/i-know-how-program-i-dont-know-what-program?

作者:NanoDano

我知道怎样编程,但我却不知道要编什么程_第1张图片
图片发自App


 在新手开发者身上我又看到了一个再现的话题,他们投入了大量时间在学习一门或者两门编程语言上,而且在做编程练习的时候他们一点也不觉得困难。但是,他们却不知道怎么应用他们所学到的知识。有句俗话大概说的是“我知道怎样编程,但我却不知道要编什么程”。而一般人么对此的反应就是“做编程挑战练习”,“为开源项目做贡献”,或者是“写一个游戏”。


 做编程挑战是一项很好的思想上的实践,但对于创造新程序的帮助却是寥寥无几。为开源从中项目做贡献也是其中的一步,从中你能学到一个真正的项目是怎样结构化的,能帮助你掌握你的编程语言,但关于一项工程的完整周期学到的不是很多。有些工程非常的复杂以至于让很多新手望而却步。而动手写游戏则是另一种方式。游戏很有趣,像我最早就是在QBASIC上开始编写游戏的。然而这还是有着同样的窘境——“我想写一个游戏但我不知道要写什么”。

 作为一个既教学生音乐又教学生编程的老师,我从音乐学生身上观察出了一样的模板——“我熟悉所有的和弦而且手感很好,但我不知道怎样写一首歌”。对于音乐,我们有个很好的答案,这路径就是学会创造。音乐家们也不是一开始就自己给自己写歌。甚至有些音乐家从未在创作音乐上有所突破,尽其一生都在唱别人的歌。在编程的世界里,关于这点我想应该是如出一辙的。

 软件社区对此一致的看法是“不要造轮子”。假如你重写一个图书馆项目但这个项目已经存在而且是个成熟稳定的项目时,他们大都会看不惯。但大体上讲造轮子是个值得肯定的规则章程,所以新手们应该勇于尝试造轮子。当你通过造轮子来学习练习这就是件好事。这是学习中很重要的一环。比如你可以写个你自己版本的Is、mv、wget、或者cowsay。如果你想走游戏路线你可以克隆Pong、俄罗斯方块或者太空侵略者。它们不需要完全相同的特征也不要求成为精确的复制品,但你需要以你的目标和模板开始着手去完成它。

 不要老是想着在你写程序之前你就得有最好的idea,我见过了很多的音乐家都有这种思想。他们现在第一次尝试时创作出自己的杰作,为了一首歌倾注心血却看不见蓝图。其实当心中的蓝图形成了,久而久之你就会写出很多的歌,而不仅仅是一首。也许你写的第一首歌不是很好而且有时你甚至想抛弃它。这就对了!别老想着在你练习时第一次尝试就想花10分钟就要创作出史诗般的巨著。你需要学习写歌的过程,从你的自身经历中学分钟就要写出每周投入一定的时间练习。在你写出一个好项目之前你都会经历写出糟糕程序的过程。克服它,解决它,享受这个经历然后你就能开始在任何线索下即兴创作。


 我们让人最开始写“Hello World”很重要的一个原因是,在他们经历的那个阶段,完成了这点说明他们征服了一定数量的基础知识。然后你就能够理解如何编译,如何执行,如何调用函数和传递参数。写出一个现有程序的赋值品是另一与hello world同样重要的一步,他们知识在你旅程中的不同舞台。当你完成了这步,你就已经克服了不少困难。你得弄明白从哪里开始(编程),怎样去计划、组织,如何处理bug,给它个人性化的体验,最后将它打包因此它是个有用的东西。甚至在克隆一个简单的程序时,你也能学到整个过程。

 你也许会好奇克隆一道已存在的程序会如何帮你想出新的点子。很好,这就像音乐,它需要创造性。对音乐来说,怎样从演唱别人的歌中学习去写自己的歌呢?首先,你得了解别人是怎样着手(写歌)的。你还有理解别人怎样将事情结构化,理解他们使用了什么模板。等你这一步熟悉了之后你的大脑中就会开始出现属于你自己的蓝图,然后你就会拥有知识的财富可以利用。你讲碎片化的知识凝聚在一起,你从不同的地方学到了知识,重用了你所见过的模板。你也许会调整这些框架,将他们整合起来,或者重新将他们完全打乱。正如他们所说的,你需要找到打乱他们的规律在编程的时候我们通常都有框架可用,比如MVC。MVC是一种用来写程序的稳定的人们已经接受的框架。在音乐中,一般也有系列(的音乐)。比如I-V-vi-IV。当然这并不是唯一的一个,但它值得你去了解。

 总而言之,则是个经历与创造性相结合的过程。创造性是人们在编程时经常容易忽略的一个概念,但它却是至关重要的。你们注意到了有不少程序员自身还是音乐家的吗?音乐包含了许多科学分析,结构化和模板,尽管很多人认为它只是个单纯的创造的过程。编程通常被认为是个严肃的技术行为,尽管它也是个创造的过程。通过克隆程序你可以培养你的创造性。当你搞定了这一步,你会发现你对于调整程序有了新的思考方式,甚至你会加入一些带有你个人特点的东西,。你也会对新的工程激发出新的idea。创造性就是通过这种方式出现的,但你首先必须知道如何唱一些翻唱歌曲。

 久而久之,你将会发现你能够把编程应用到几乎每件事情上。你能将任务自动化并解决实际问题。你讲轻松解决一大串你想要做的但却没时间做的事情。你还可以再匆忙中解决问题。“噢,有一份Excel表格,其中有100张表需要重定格式,分成不同的文件里,还要转换成csv。信手捏来!” 写你需要的程序。其他项目的idea就会自然而然的出现。

 你们有多少人有过这种情况——“我不知道要编什么程序”。你怎样解决它?如果其他人有类似的情况你会给他什么建议?


文中链接需要翻墙,如果需要欢迎加群545858232交流,也可以关注攻粽号:划水桨

你可能感兴趣的:(我知道怎样编程,但我却不知道要编什么程)