我知道如何编程,但我不知道该写什么程序

我看到新手开发者有一个反复出现的主题。他们已经投入时间学习了一两种编程语言的基础知识,他们觉得做编程练习很舒服,但他们不知道如何应用他们所学的东西。通常会出现类似于 "我知道怎么编程,但我不知道该写什么程序" 这样的说法。回答通常是 "做编程挑战","为开源项目做贡献",或者 "做一个游戏"。

做编程挑战是很好的心理练习,但对一个人学习如何创建一个新的程序没有什么帮助。

贡献给一个开源项目是一个进步。你可能会了解一个真正的项目是如何结构化的,并提高你对编程语言的技能,但不会学到很多关于一个项目的完整生命周期。有些项目也是非常复杂的,这对新手来说可能会感到恐惧。

制作游戏是另一个进步。游戏是很有趣的! 不过同样的难题也出现了。"我想做一个游戏,但我不知道做什么"。

在我调查中,在创作这块,很多不同专业的学生也会有这样的问题,例如音乐系学生的相同模式。"我知道所有的和弦,手感也很舒服,但我不知道怎么写歌。" 对于音乐,我们其实有一个很好的答案。学习创作是有路径的。音乐家一般不会从一开始就开始自己创作音乐。有的音乐人永远不会进步到作曲,一辈子只玩别人的音乐。不过在编程界,态度就有些不同了。

在软件界,一般的态度是 "不要重新发明轮子"。如果你在有成熟稳定的选择时重写一个库,几乎是不被看好的。虽然在一般情况下这是一个很好的规则,但新手不应该害怕重新发明轮子。当是为了学习或实践的时候,完全可以做一个轮子! 这是学习的一个重要环节。例如,写出自己版本的ls、mv、wget或cowsay。如果你想走游戏路线,那就做Pong、俄罗斯方块或太空入侵者的克隆。它们不需要所有相同的功能,也不需要完全复制,但你可以从你的目标和空白的板块开始,然后你就可以实现它。

也不要有这样的观念,你需要在写程序之前有最好的想法。我见过音乐人也是这样的心态。第一次尝试就想创造出一个杰作,把所有的精力都放在一首歌上,而没有看到更大的画面。更大的愿景是,你会随着时间的推移写出大量的歌曲,而不仅仅是一首歌。你写的第一首歌可能会很糟糕,你可能会把它扔掉。这没关系! 不要试图想要在你的第一次尝试中写出最史诗的10分钟吹你的脸的传奇音乐作品。你需要学习歌曲创作的过程,从自己的经验中学习,每周都要投入时间练习。在你写出好的节目之前,你会写出不好的节目。克服它,度过它,获得经验,这样你就可以开始在任何调上按需即兴创作。

我们告诉人们从 "Hello,world" 开始是有原因的。因为在他们的旅程中,完成这一点意味着已经征服了一定数量的基础知识。你明白了如何编译,如何运行,如何调用一个函数并给它传递参数。编写一个现有程序的克隆是另一个重要的步骤,几乎和hello world步骤一样重要,只是在你旅程的不同阶段。当你完成它的时候,你已经克服了某些挑战。你必须弄清楚从哪里开始,如何规划,如何组织,如何处理bug,赋予它个人的风格,并在最后把它包装起来,使它成为一个可用的东西。即使是模仿写一个简单的程序,你也在学习所有的过程。

不过你可能会好奇,模仿现有的程序如何帮助你提出新的想法。嗯,就像音乐一样,它需要创造力。对于音乐,播放别人的歌曲如何帮助你学会写自己的音乐?嗯,你必须先了解别人是怎么做的。你必须了解他们是如何组织事物和使用什么模式的。当你做了足够多的时间,你开始看到更大的图片,然后你有一个丰富的知识借鉴。你把从不同地方学来的小碎片拼凑在一起,重新使用一些你看到的模式。你可能会对这些模式进行调整、组合,或者完全打破它们。正如他们所说,你需要学习规则才能打破它们。在编程中,我们有常见的模式,比如MVC。那是一种稳定的、公认的编写软件的模式。在音乐中,我们有常见的进行曲。比如I-V-vi-IV。当然这并不是唯一的一种,但也是一个很好的认识!在音乐中,我们有常见的模式,比如MVC。

总之,就是经验和创意的结合。创意是人们在编程中经常忽略的一个方面,但它是至关重要的。你有没有注意到有很多程序员同时也是音乐家?音乐涉及大量的技术分析、结构和模式,尽管很多人认为这是一种纯粹的创造性的努力。编程经常被看作是一种严格的技术行为,虽然它大部分是一种创造性的努力。你可以通过克隆程序来培养创造力。当你制作它们的时候,你会发现自己会想到新的方法来调整程序,甚至可能会添加一个个人功能。这也会激发出全新项目的想法。创造力在前进的路上就会出现,但你需要先学会演奏一些翻唱歌曲。

随着时间的推移,你会看到你如何将编程应用到几乎所有的事情上。你可以自动完成任务,解决实际问题。你会毫不费力地想出一大长串你想做但没时间做的东西。你还可以在飞行中解决问题。"哦,有一个Excel电子表格,有100张表,需要重新格式化,分割成不同的文件,再转换成csv?马上就来!" 不要纠结于想出下一个最好的东西。编写你会使用的程序。其他项目的想法会在路上出现。

你们有多少人曾遇到过这样的情况:"我不知道该写什么程序?" 你是怎么处理的?在这种情况下,你会给其他人什么建议?

推荐阅读:

微软《给初学者看的 Web 开发教程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这就是编程

让我看到你的头像

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值