如何进一步提高我对PHP的“高级”知识? (很快)

时间:2010-06-01 08:43:54

标签: php structure system-design

我已经使用PHP多年了,并且对语言有了很好的掌握,创建了许多先进且不那么先进的系统,这些系统运行良好。

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

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

我现在正在构建越来越大的系统,我开始阅读像highscalability.com这样的博客,并一直在研究MySQL复制和服务器数据以进行扩展。我知道你的代码结构对于使整个系统工作非常重要。

在阅读了最近关于reddit结构的博客后,它让我怀疑是否有一些标准或“已接受的系统”。

我已经研究过框架(我使用了Kohana,我后悔了,但我认为PHP框架不适合我)而且我更喜欢自己的函数库而不是框架。

我目前的结构是WordPress,Kohana和我自己的知识之间的混合。

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

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

成为一名优秀系统开发人员的“达到更高水平”的最佳方式是什么?

15 个答案:

答案 0 :(得分:116)

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

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

所以,我会投票给最后一本 - 读书。不是PHP,而是一般的编程。 Grady BoochMartin Fowler,甚至旧Donald Knuth的。{。} 看一下其他语言,比如Java或Python,也会很高兴。不要切换到它们,而是向它们学习。

答案 1 :(得分:28)

  

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

你将'函数库'和'a'框架'称为不同的概念(好!),那么为什么不尝试稍微提高一点并将该函数库转换为框架?请注意,这是学习的好方法,但不是拥有适销技能的最佳方式;)

这也是学习错误的好方法,所以在你开始之前你必须做一些研究。

“必须具备”功能

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

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

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

发布它!

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

摘要

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

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

答案 2 :(得分:18)

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

答案 3 :(得分:11)

以下是一些想法:

  • 尝试不同的事情。学习一门新的语言。有时候在学习其他语言的过程中,实际上会让你在两者上都更好。

  • 参与开源项目。

  • 高可扩展性和PHP / MySQL不是朋友。今天有些技术专门为此而建。 node.js和Redis命名一对。

  • 在SO中回答问题。其他人的问题可以让你在盒子外思考,改善尝试帮助的过程,你也可以为某人做点好事。

  • [如果我想到其他任何我刚刚醒来喝咖啡的话会尝试添加:D]

答案 4 :(得分:3)

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

  • 用不同的语言
  • 在不同的平台上
  • 并行/分发
  • 通过一个框架(是的,你决定他们“不适合你” - 也许尝试不同的一个,他们有时彼此非常不同)

答案 5 :(得分:3)

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

至于框架,请从中学习。我也自己动手,因为那里的大多数框架都可能相当慢。虽然对于大多数网站来说足够快。

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

答案 6 :(得分:3)

也许你应该再次研究一下框架,我建议看看Zend Framework,因为它更像是一个你可以根据需要使用的组件库,并没有真正强加一个刚性结构你必须跟随(像其他一些框架一样),虽然它确实提出了一个(相当理智的imho)项目布局。一个很好的起点是Surviving the deep end

您尚未提及的事情,这可能对您有用(特别是在较大的项目中):

答案 7 :(得分:3)

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

答案 8 :(得分:2)

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

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

问候。

答案 9 :(得分:2)

与其他开发人员合作不够。我特别认识3位开发人员,2位我每天都在工作的人,他们用他们的知识吹嘘我。我问他们对我所做的一切的看法,不是因为我猜测自己的想法,而是因为我想听到其他想法,尤其是那些我作为开发人员尊重的人。我从这些人那里学到的东西比其他任何方式都多。如果您无法访问其他高级开发人员,那么请务必在SO或其他开发论坛上发帖并询问人们的意见,询问人们如何处理特定项目/问题。除非你看到它们被使用,否则你不会普遍学习新的技术/方法/功能(如果你不知道它存在,你怎么知道要寻找什么?)

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

希望有所帮助。

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

我绝对推荐像Zend Framework,symfony,CakePHP或Agavi这样的Frameworks,因为许多贡献者会查看代码并不断地将它们发展为“理想”解决方案(当然永远不会达到......);)你仍然可以决定开发自己的类而不是框架提供的类......

有了这么长的PHP背景,您可以考虑为开源框架做出贡献。与其他开发人员的讨论可以更快地为您带来前进。

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

答案 12 :(得分:0)

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

尽管如此,在PHP中创建迄今为止学到的东西是件好事。要练习更多,你应该创建一些类似于预订系统等的东西。迟早你可以通过学习更多东西来学习更多东西,这将使你的开发变得更好。

答案 13 :(得分:0)

您可以询问贵公司是否可以向您支付Zend PHP认证考试。通过阅读大量文档,Zend学习指南以及模拟考试培训,学习本次考试将使您更好地了解PHP并进行培训。这是一种非常有效的改进方式,在简历中看起来非常好。

答案 14 :(得分:-11)

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

我建议学习Symfony因为开发人员似乎一直努力按照“最佳”实践做所有事情......但你可以从任何流行的框架中学到很多东西。

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