74

我多年来一直在使用 PHP,并且很好地掌握了该语言,创建了许多运行良好的高级和不那么高级的系统。

我遇到的问题是,我只有在发现需要以前没有学过的东西时才学习。这促使我查找解决问题的解决方案和其他代码,因此我将了解我以前从未见过的新功能或结构。正是通过这种方式,我学到了许多更好的技术(例如学习亚马逊、谷歌或其他大公司推出的课程)。

这样做的主要问题是如果您不知道它存在就无法学习的概念。例如,我花了几个月的编程时间来了解这个empty()函数,我只是检查字符串长度strlen()来检查空值。

我现在开始着手构建越来越大的系统,我已经开始阅读 highscalability.com 之类的博客,并一直在研究 MySQL 复制和用于扩展的服务器数据。我知道您的代码结构对于使整个系统正常工作非常重要。

在阅读了最近一篇关于 reddit 结构的博客之后,这让我怀疑是否有一些标准或“公认的系统”。

我研究过框架(我曾使用过 Kohana,我对此感到遗憾,但认为 PHP 框架不适合我),我更喜欢我自己的函数库而不是拥有一个框架。

我目前的结构是 WordPress、Kohana 和我自己的知识的混合体。

我认为可能有益的方式是:

  • 阅读博客
  • 阅读教程
  • 与他人合作
  • 读一本书

什么是“进入下一个级别”成为一个非常优秀的系统开发人员的最佳方式?

4

15 回答 15

115

每个想成为 PHP 程序员的人,总是只接受第一个词而完全忽略第二个词。

虽然“编程”比“PHP”更重要,但要成为一名 PHP 专业人士,首先应该是一名程序员。

所以,我会投票给最后一个——读书。不是在 PHP 上,而是在一般的编程上。Grady Booch的,Martin Fowler的,甚至是老Donald Knuth的。
看看其他一些语言也不错,比如 Java 或 Python。不是要转向他们,而是要向他们学习。

于 2010-06-01T08:54:25.737 回答
28

我更喜欢我自己的函数库而不是拥有一个框架

您将“函数库”和“框架”称为不同的概念(好!),那么为什么不尝试提高赌注并将该函数库转变为框架呢?请注意,这是一种很好的学习方式,但不是拥有适销对路技能的最佳方式;)

这也是学习错误的好方法,因此在开始之前,您必须进行一些研究。

“必备”功能

几乎所有框架都具有某些功能,这是有原因的。研究它们;找出它们出现的原因以及它们的变化;选择您希望将哪些实现包含在您的框架中。

您想了解和模仿的非 PHP 平台的功能

我不知道你对什么感兴趣,所以我会停在那里。

发布它!

这部分很重要,因为内森是对的:你的工作必须被其他人看到、挑战、批评和纠正。不要把那盏灯放在蒲式耳下面——它需要被看到;把它放在谷歌代码或sourceforge之类的东西上,如果人们要认真看待它,你需要认真对待它;你需要维护单元测试和回归测试;你需要使用版本控制;你需要很好地评论它,/* header comment */每个文件的顶部都有一个大的,每个类及其成员都有有用的文档生成评论。

概括

如果你做这一切,你可以(在高层次上)了解其他平台。作为 PHP 开发人员,您绝对可以“叮 40”。您可以了解单元测试;关于回归测试。您可以学习如何有效地记录。

保证你的框架会出现“特殊且可能很糟糕”,但你可以从编写它中学到很多东西。请记住,框架不是产品。这是一个旅程......各种各样的。

于 2010-06-08T18:28:47.360 回答
18
  1. 查看PHP 的隐藏特性PHP 的预定义接口
  2. 学习不同的语言。学习学习曲线比 PHP 更陡峭的语言。每当我指出其他语言相对于 PHP 的优势时,我都会受到抨击 PHP 的指责,大多数人显然从未真正掌握过另一种高级语言。但我要冒这个险。我建议使用 Ruby、Python、Pearl 和haXe(作为严格类型的对应物)。完成后,尝试将您的新知识应用到 PHP。或者干脆离开 PHP,以防你不想回去(我认为这不太可能发生)。
  3. 学会处理批评。你对 Nathan 帖子的反应很清楚地表明你还不能处理它。他是完全正确的。
    • 现在看看我的第一个 PHP 框架,我不得不说它非常糟糕。当时我认为它很棒(它仍然比我已经看到部署的许多生产代码更好)。尽管如此,它还是有很多缺陷。除非你完全是个天才,否则如果你几年后回顾它们(假设你进化了),你的第一个框架看起来会很糟糕。
    • 实际上,随着时间的推移,您将创建的任何框架都会看起来更糟(假设您不会停止发展)。出于这个原因,您不妨使用可用的框架并更多地关注应用程序开发。如果您使用的框架有限制,请考虑贡献而不是编写另一个 PHP 框架。
    • 选择编写自己的框架(不仅仅是为了娱乐/学习,而是为了生产部署)的时间点是当你的需求超过了其他框架所提供的,而不是当你只是不喜欢使用一个框架的想法时。这是一个常见的错误,我自己也犯过。但现在我可以说,我从中吸取了教训。但是如果你征求意见(很遗憾我当时没有这样做),你会得到这样的答案。
    • 您可以从使用不是您自己编写的代码中学到很多东西。您不仅会从其他人深思熟虑的框架中汲取概念,而且您还学会了高效、灵活、能够在团队中工作并完成工作(同时获得相当好的结果)。
    • 我想你不能真的认为你比 PHP 开源项目的每个团队都好,否则你会问。克服顽固的本能需要重新发明任何年轻开发人员所拥有的轮子,并成长为解决尚未解决的问题。
  4. 了解组件库和框架之间的区别。既然你认为你可以用“你自己的函数库”来替换一个框架,你可能还没有明白,框架的意义是什么。看看依赖反转控制反转依赖注入
  5. 了解软件设计。看看像SOLIDGRASP这样的 OO 原则。
  6. 尝试不同的范式。AOP,函数式编程。使用具有更强面向对象的语言(例如 Ruby、Objective-C 或 Smalltalk)来提高您的 OO 技能。
  7. 查看 PHP 框架,例如 Flow3、Symfony、PHP 点火器和 CakePHP。我已经指出了为什么我认为你应该这样做。
  8. 正如我在另一条评论中指出的那样,您应该考虑 RDBM 以外的其他存储。SQL 和 OOP 真的不能很好地结合在一起。看看 OODBMS、不同的数据库抽象层、键值存储、文档存储(如 CouchDB 和 MongoDB)、将缓存服务器分发为 memcache 等。
于 2010-06-08T15:34:28.327 回答
11

这里有一些想法:

  • 尝试不同的东西。学习一门新的语言。有时在学习另一种语言的过程中,实际上会让你在这两个方面都做得更好。

  • 为开源项目做出贡献。

  • 高扩展性和 PHP/MySQL 不是朋友。今天有一些技术就是为此而构建的。node.js 和 Redis 仅举几例。

  • 在 SO 中回答问题。其他人的问题可以让你跳出框框思考,你在尝试帮助的过程中有所改进,你也会对别人做一些好事。

  • [如果我想到我刚醒来喝咖啡的其他任何事情,我会尝试在这里添加:D]

于 2010-06-01T09:04:32.640 回答
3

学会做你已经知道的事情......以不同的方式。例子:

  • 用不同的语言
  • 在不同的平台上
  • 并行/分布式
  • 通过一个框架(是的,您认为它们“不适合您”-也许尝试不同的框架,它们有时彼此非常不同)
于 2010-06-01T08:50:44.467 回答
3

我会加入讨论板并尝试解决其他人的问题。有时会有相当具有挑战性的问题迫使你做一些研究。如果你不能回答,你可以等一个能回答的人,然后学习一些东西。

至于框架,向他们学习。我也推出了自己的,因为那里的大多数框架都可能相当慢。尽管对于那里的大多数网站来说足够快。

我还建议查看 Facebook 的 PHP 库。他们在那里做一些有趣的事情。

于 2010-06-05T12:31:11.507 回答
3

也许您应该再次研究框架,我建议您看一下 Zend 框架,因为它更像是一个组件库,您可以根据需要使用它,并且不会真正强加您必须遵循的刚性结构(例如其他一些框架可以),尽管它确实建议了一个(非常理智的恕我直言)项目布局。一个好的起点是在深渊中幸存下来

你还没有提到的事情,这可能会被证明是有用的(尤其是在大型项目中):

于 2010-06-08T08:00:17.510 回答
3

很简单:。需求会让你学习。找到一种方法来参与越来越先进的项目,无论是商业项目还是开源项目。没有其他方法可以真正学到东西。

于 2010-11-01T18:20:49.910 回答
2

你能做的最好的事情就是买一本关于高效算法的书。在每个计算机科学专业的学生的生活中,都有一段时间他/她必须学习这些。讨论/解决的问题几乎是您可能面临的任何现实世界问题的抽象。

除了阅读有关其他人如何做的博客之外,它非常好,因为它可以帮助您了解如何实际使用(甚至可能实现)高效算法的原理。

问候。

于 2010-06-01T09:24:02.580 回答
2

关于与其他开发人员合作,可以说是不够的。我特别认识 3 位开发人员,其中 2 位是我每天一起工作的,他们的知识让我大吃一惊。我对我所做的每一件事都征求他们的意见,不是因为我第二次猜测我自己的想法,而是更多我想听到其他想法,尤其是来自我作为开发人员所尊重的人的想法。我从这些人身上学到的东西比其他任何方式都多。如果您无法接触到其他高级开发人员,那么一定要在 SO 或其他开发论坛上发帖,询问人们的意见,询问人们他们将如何处理特定的项目/问题。除非您看到它们被使用,否则您通常不会学习新技术/方法/功能(如果您不知道它存在,您怎么知道要寻找什么?)

此外,如前所述,参与操作系统应用程序。转到 sourceforge 并找到需要开发人员的项目。或者下载一个应用程序并尝试为它编写一个插件(我正在为 Invision 3.0 atm 编写一个插件并学习一些东西。)

希望有帮助。

于 2010-06-08T07:14:36.250 回答
1

阅读其他人的代码。你现在有了自己的库,但在阅读其他应用程序的源代码时可能会有所启发。然后问自己“为什么”。成为博客作者,而不是读者。此外,更多地强调程序员而不是语言。而是查看已经解决问题的解决方案,并尝试用自己的知识复制它们。祝你好运,玩得开心!

于 2010-06-08T12:06:24.717 回答
1

查看其他程序员代码的方法绝对是学习“好”或“坏”实践的好方法。在阅读了其他代码之后,您会产生一种对好的代码的“感觉”。

我绝对推荐 Zend Framework、symfony、CakePHP 或 Agavi 之类的框架,因为许多贡献者会查看该代码并不断开发它们以实现“理想”解决方案(当然永远无法实现……);)您仍然可以决定开发自己的类而不是框架提供的类......

拥有如此长的 PHP 背景,您可以考虑为开源框架做出贡献。与其他开发人员的讨论让您以更快的方式前进。

向他人展示您的代码并寻求建设性的反馈具有相同的效果。在与他人对自己的技能进行基准测试之前,您永远不会知道自己有多好。总是以建设性的方式。当为开源框架做出贡献时,这将是一个自然的过程。;)

于 2010-08-15T13:50:29.887 回答
0

您应该使用示例,在扩展它们时使用它们,这样您将学习如何通过使示例更具功能性并提供更多功能来扩展示例。

虽然,创建您目前在 PHP 中学到的东西是件好事。要进行更多练习,您应该创建诸如预订系统之类的东西。当您在 PHP 中学习更多时,迟早您将能够通过学习更多来扩展更多内容,这将使您的开发变得更好。

于 2010-06-01T08:58:55.293 回答
0

您可以询问您的公司是否可以为您支付 Zend PHP 认证考试费用。为这个考试学习将迫使你很好地了解 PHP,并通过阅读大量文档、Zend 学习指南以及通过模拟考试进行培训来进行培训。这是一种非常有效的改进方式,而且在简历上看起来相当不错。

于 2010-06-05T12:09:48.547 回答
-11

“我自己的函数库”==“一个 [特殊且可能很糟糕的] 框架”。

我推荐学习Symfony,因为开发人员似乎一直在努力按照“最佳”实践来做所有事情……但是您可能可以从任何流行的框架中学到很多东西。

不要编写自己的框架。请。

于 2010-06-05T00:31:00.197 回答