3.7 为什么学习Drupal这么难?(下)

第二阶段:学习的悬崖

drupal 学习阶段 2

跟着教程学习使得你的信心快速增加,但在某一个时刻,你将开始独自解决自己的问题,不在使用教程,你也找不到一个教程能解决你自己的真正问题,并且你没有一个可以手牵手持续指导你的人,通常,在这个时期,你非常痛苦的认识到你实际上不知道自己在做什么。

跟随教程一步一步的建立一个视图是一码事儿,你可以按照屏幕上说的做;将这些概念应用到你自己的独特情况中并能解决问题,则完全是另外一码事儿。我不是说你做不到,但如果没有人手把手教你,而你必须自己解决问题的时候,你会发现还有很多东西是你还没有学会的。

我经常说这像一个Drupal学习的悬崖,你的信心在不断增加,但是你突然发现:噢,我事实上并不知道我在做什么,有人把你猛推下悬崖,你的信心跌落在悬崖的底部,你最终得到这样的东西——(一个白屏),有人想猜一下这是什么原因引起的么?

drupal白屏

在你学习如何在Drupal8中的主题中输出内容时,发生了白屏。你只不过是想要更改节点中的内容显示方式,你不知道怎样做所以你到google去找答案,在Stack Exchange上有人说你需要做的是把twig debug模式打开,然后你需要使用dump方法打印内容变量,然后你只要刷新页面,你就会得到一个有很长的列表,那里面有你可以打印出来的所有东西。但是,结果是你并没有得到什么列表,而是得到了一个白屏。

因为你不知道,你还需要增加PHP内存限制200MB,这样PHP才可以处理Drupal的递归;你也不知道在php中需要开启显示错误。所以当php因为内存不够而运行出错却没有显示任何错误提示,因为你要求php不要显示错误提示。

这种事情会让人非常有挫败感。对于一个新手来说,你只是想改变一下你的主题,结果你突然发现你需要学习一些基本的系统管理和使用技巧,仅仅只是为了让你的主题不会白屏。(晴空注:晴空的Drupal8主题系列早于这篇文章的翻译,如果你学习过,就不会遇到这里说的问题,因为这个系列从一开始就是立足于教会大家如何用一个专业的方式去开发主题,而这些问题在系列的开篇都有所涉及。)

我之所以指出这个例子,是因为这很有趣,也超级真实,它真的令人沮丧;我认为它也说明了另一个问题:白屏的发生甚至根本不是Drupal的责任。除了你是碰巧创建一个Drupal主题的时候发生了白屏之外,跟Drupal一点关系也没有。白屏的原因是PHP的内存耗尽了,是因为twig主题引擎不能处理好用递归的方式去打印一个巨大的可渲染数组。但对于正在学习Drupal的新手来说,他们根本不关心这些问题真正的原因。你正在尝试学习Drupal,当你遇到类似这样的问题,你就立刻会说:Drupal好难啊,我学习不了Drupal。

这是一个有趣的现象。在掌握Drupal之前我们需要学习其他很多东西,把他们作为我们知识栈的一部分,但我们经常会把责任归咎于最终的学习目标——Drupal,Drupal很难学,因为PHP难学,因为mysql难学,因为系统管理难学,还有Drupal的用户界面也很难掌握。等等等等。理由可以有很多。

我认为,人们会掉下学习Drupal的悬崖的很大一部分原因是,随着你的进步,随着你学习Drupal的旅程的继续,你会走到这个第二阶段,在这个阶段中,你需要了解和学习很多你不知道的事情才能有一点点小的进步。在这个阶段,你需要学习的东西很多,但是你手头的学习资料却很少,(晴空注:其实并不少,只是看你有没有能力找到)这之间有一个反比的关系,这就会为学习过程带来很多问题。人们也会因此而掉下悬崖。

第三阶段:学习的沙漠

drupal 学习阶段 3

在你掉下悬崖之后,第二天或是几天后醒来,你又回来了,并对自己说:我仍旧想学Drupal我准备好继续花费六到八个月在绝望的沙漠中漫步,这里的景象荒芜,你知道可能有很多种方式可以用来解决你的问题,达到你的目标,但没有一条路径是已经标记好的,而且你也没有地图,你可能看到了很多岔路口或,但你不知道它们会把你带到哪里。这里的问题在于,这些岔路口大部分都是死胡同,或者最后达不到你想要的结果,但是如果你不硬着头皮走下去,你还是无法知道哪一条是死胡同,哪一条是你需要的路径。

你可能已经知道如何实现一个钩子但你不知道在你的模块中你需要实现哪个钩子,或者你知道怎样向内容类型添加字段,但你不明白为列表添加文本字段或列表的整数字段有什么区别以及用什么方式将你数据库中的数据展示出来,并且可能导致在接下来的开发中出现性能问题。在你没有经历过这些之前你通常是不知道这些事情的,这真的很有挑战性,这个阶段大多只是尝试新的东西,然后重来一遍并且让人想去撞墙。这样重复的尝试,就好像你在学习新的编程语言的时候,每个人都喜欢写一个to do应用,然后把它连续重写五次,每一次都会更好一点。这个阶段可以用一个英文成语来概括“you don't know what you don't know”,翻译过来就是,你不知道哪些事情你不知道。这意味着你很难找到正确的答案,因为你甚至不知道应该用谷歌搜索什么东西。

我认为Drupal难的一部分原因是Drupal是超级含糊的。Drupal是一个超级复杂的系统,它能做大量的事情并且它是由很多不同的人合作开发的,这些人使用Drupal的原因也各有不同——这些都在一定程度上导致了Drupal含糊的属性。

就好像大家都熟悉的views视图模块,你几乎可以用它建立任何查询,但这使也它变得更复杂,学习理解起来更具挑战性。或许你只是想点击一两个复选框,告诉系统:我想要10篇文章的列表,但是views并不是这样一个工具,这也是为什么学习Drupal具有挑战性的一部分原因。

Driss在星期二的主题演讲中谈到这一点,并尝试使大家更好的理解Drupal是为了谁服务的,或者说Drupal是为了解决哪些问题而开发的。并且我认为对于我们这个社区来说,为Drupal贴上一个更清晰的标签,比如,让人们清楚的知道Drupal是专门用于建立这种类型的网站或者Drupal是专门用于那种类型的项目,这样,我们至少可以让人们更清楚的认识Drupal,并把drupal的学习难度再降低一点点。

我今天下午和某人进行了谈话,他建议的一种方式是为安装文件添加额外的发行版安装包,通过这种方式可以降低Drupal的学习难度,因为这个发行版已经安装了一些常用的模块,你可以以此为起点去开始学习,而不是强迫你去官网或者通过搜索30000个模块,找到一堆能做差不多事情的模块,然后一个一个安装他们,再从中选择哪一个是你的特定项目所需的。

我认为还有一件事情,使得Drupal在这个阶段特别难学,那就是缺乏技术决策方面的文档。在Drupal8中,你可以通过一个模块来通知其他模块触发事件或者你可以调用一个钩子再或者你可以两者都做。你可以找到很好的文档告诉你怎么触发一个事件,或者调用一个钩子,但你却很难找到一个文档告诉你在哪种情况下应该使用哪个方法。你只有在获得了充分多的经验,并充分了解两种方法之后,才能得到自己的结论。

在Drupal8中有太多类似这样的东西。比如,Drupal8中的配置管理,你可以把数据存储在这儿或是那儿或者你可以把他们移动到另一个位置,你能导出一部分数据,你也可以导出所有数据。这个时候你就会问,我应当怎么做?因此,我们在写文档的时候,应该在这方面加以改进。

第四阶段:胜任工作

drupal 学习阶段 4

在你花了足够长的时间在沙漠中徘徊找到路,你创造了足够多的路径你开始增加信心,你开始学会一些关键词,你可以用他们到谷歌上面去搜索问题并且你最终找到了一条路,你将从黑暗中摆脱出来并且你的能力自信会开始增加。最终,在某一个时刻,你会觉得你已经胜任一份Drupal开发者的工作了:我认为我有足够的实际Drupal技能来完成一个雇主让我做的事情,也要求我有对于自己的信心,说:是的,我可以完成这些事情。

这主要是关于学习Drupal的最佳实践。理解各种模块之间的区别,知道哪个项目更适合使用哪个方案,不断练习这些技能,随着时间的推移,你会变的越来越好。

这就是人们在学习Drupa时所经历的四个阶段。

我在图片下方总结了一下在不同的学习阶段人们所需要的不同的学习资料,并且你可以看到,在第一阶段,有大量的资料可用,他们都是很好的教程,跟着这些教程一步一步的学习,也是在这一阶段人们的知识可以快速成长的一部分原因。

drupal 学习阶段

在第二阶段,你可以到Stack Exchange或者IRC上提问,但这也可能导致你的自信心受到挫折,这个阶段会暴露你知识体系中的弱点。

然后你会长时间地陷入比如stack exchange或者IRC中,却还不一定能找到你想要的答案,因为你根本还不知道要如何正确的提问。

最后,当你积累了足够多的经验之后,你会发现这些工具又开始变得有用了。比如官网的那些文档,你会爱上它们。

而最最有效的,帮你度过第三阶段的方式,则是找到一个比你厉害很多的师傅。师傅的指导可以节省很多时间。

然而,尽管如此,我们依然无法为沙漠画一个更好的地图,或者为学习者们标记好一条不用走弯路的捷径。我们每个人,在走弯路、反复试错的时候,其实都收获了非常珍贵的经验。这个过程是非常重要的,是我们学习的一部分。只有这样反复的试错,我们才会形成长期的记忆,进而成为经验。并且在今后的工作中,当我们遇到类似问题的时候,才能更加容易的找到解决方案。

我们能做什么

那么,作为个体的我们,能做什么呢?

我认为,其中一条是,我们应该记住,一旦你了解了Drupal,它就变得容易了。很多时候,对于已经了解和掌握Drupal的人来说,他们在写文档或者回答别人问题的时候,都总是会用很轻松的口气给出一个很简单的答案。比如,有人会说,噢,关于这个问题,你只要开启X debug就可以了。对于我来说,是的,这很容易。因为我知道要怎么做。但是对于大部分的人来说,开启Xdebug并不是那么简单的。他们必须要经历一个学习的过程,首先要知道这是什么东西,然后要学习它的用法。

因此,当我们和其他人谈论我们已经知道的事情时,我们应该非常小心。我们应该谨慎的挑选我们使用的词汇。这样,我们才能为听众设置一个合适的期望值,这对于他们的学习进程十分重要。

另一件是我们大家都能做的事情是,主动的去做一个师傅,向其他人传授你的经验,或者主动的去找一个师傅,向他学习。做别人的师傅,可以让你深入练习那些你已经学会了的东西,让你更好的掌握这些知识。也可以让其他人能更快的走出学习的沙漠。

当你是一个专家的时候,你可以非常容易的检索你的知识库并解决问题。作为一个开发者来说,这是非常酷的一件事情,因为你不需要在每次遇到类似问题的时候都去重新研究它。但是,这也常常成为我们的一个弱点,因为当我们向其他人去解释这个问题的时候,我们往往忘记了当初我们自己是如何学会这些经验的。

而当我们在教别人的时候,我们可以看着他们是如何学习的,这相当于在重温我们当初自己学习的步骤。

当我们发现了学习过程中的明显的问题时,我们甚至可以反馈给Drupal的核心开发者,让他们改变Drupal的现状,来降低我们的学习难度。(比如,整个Drupal8的主题层的改进)

这里,乔举了一个例子,在Drupal7中的template.php文件在Drupal8中被改名成了.theme文件。因为在英文中模板文件和tempalte.php文件是同一个名称。因此,在学习的时候非常令人困惑。但是在中文环境中,我们用模板文件来指代tpl文件,用template文件指代template.php文件,因此,我们从来都没有遇到过类似问题,这里就不具体翻译了。

评论 (2)

    • 2017-10-25

    阅读完毕,原来遇到的白屏在这里也有答案,哈哈,学习的过程曲线图非常贴切。
    还有,那个邀请函好炫酷,能教教咋整不?

  • 谢谢你的回复,乔的这篇文章非常值得一读。邀请函的实现对于技术的要求是多方位的,包括策划、美工、代码等,工作量很大,很琐碎,不适合拿来当教程案例。