我是一名有志成为开发者,想要构建像PayPal这样的大型系统。我该选择哪条路线?

8
我是一名来自非洲埃塞俄比亚的计算机工程专业大二学生。我们学习了C和C++,我自学了HTML、CSS、PHP(包括cakePHP框架)、少量javascript、JQUERY和mySQL,用于开发像博客这样的小型系统。但我想要构建更加安全和强大的大型系统。在这里看到很多聪明有经验的开发者,我感到非常谦卑。我正在犹豫选择从哪个方向开始学习(ASP.NET还是PHP),以及应该学习哪些其他语言或系统才能实现我的目标。提前感谢您的帮助。
附注:我可以处理任何类型的数学问题。

1
尝试一下JavaServer Pages...但在它让你变得困难之前离开。 尝试一下Ruby on Rails...但在它让你变得软弱之前离开。 还要记得涂防晒霜! :-) - Rehno Lindeque
7个回答

7

我觉得自己像个老头子,但是随着时间的推移,你会意识到软件开发中最大的两个挑战是:

  • 代码复用 - 能够编写可重用的代码。即使在同一软件中,代码能否随着时间的推移而被重用也不是显而易见的。很可能,当你打开之前写过的代码并试图修改它时,你会花费几个小时让自己感到懊恼,并决定不将其重用于下一个软件版本中,而是进行重写。编写可以重用的代码是一门真正的艺术,同样地,重用代码也是一门真正的艺术。软件开发人员总是想要进行重写和重新发明轮子。 这很有趣,但是这样做不会使你走得太远。
  • 实际使用 - 编写有用的软件并不是显而易见的。因为软件开发人员对软件的期望与应用程序用户完全不同。我们倾向于过度工程化,过度优化和过度复杂化事物,加入太多功能,考虑太多“如果”情况。我们更喜欢专注于有趣的部分,而不是忙碌于好的用户界面或其他无聊、耗时且没有回报的问题。我们制作了很多没有人想要或能够使用的东西。

这怎么回答你的问题呢?

  • 代码重用:你必须掌握它。熟悉许多库和框架。设计一个应用程序,然后尝试使用现有的组件和架构将其拼接在一起。编写粘合代码是最困难和最重要的任务。此外,在你追求创建这样一个大系统时,将系统的单独任务分离出来,并尝试编写针对这些单独任务的自己的组件。努力使每个组件都健壮且可重用。不要试图一次性构建整个系统。你会失败的。你可能会学到一些东西,也许很多,但你会失败(或者你是个天才)。
  • 实际使用:嗯,想要创建像PayPal这样大的东西非常雄心勃勃,但尽量不要创造太大的东西。尽量创造好用的东西。好用指的是有用、可用和被使用的。随着时间的推移,你会发现这已经够难了。尝试创建一些其他人使用并感到满意的东西。
专注于提高这两个方面的能力。选择你喜欢和适合完成任务的库/框架/平台/语言。在我看来,由于许多原因,PHP不是一个好的语言,但最终,你应该使用你喜欢和感觉良好的语言。我个人在我的项目中使用Haxe。你可能想试一试。最后,我认为你应该尝试许多语言和框架,以掌握不同的概念。大多数你学到的东西,超越具体的语言和框架,但只有通过真正了解其中一些才能学会它们。
在结束之前,我想指向我的5条戒律 ;)

2

PayPal一开始并不是很大,它之所以变得庞大,是因为他们取得了成功。而他们获得成功并不是因为选择了某个特定的平台。他们成功的原因在于他们的商业模式,提供的服务以及吸引的客户。

所以学习ASP或PHP或两者都学都可以。对于程序员来说,它们的用处大概差不多。它们同样能够支持高可扩展性的系统。


我对PHP非常熟悉。它真的能像ASP.NET一样强大吗?因为它没有编译,我感觉它不能做ASP所能做的一些事情。 - coderMonkey
PHP和ASP提供略有不同的视角。ASP.NET通过代码和HTML的分离,让您构建大型且易于维护的系统;PHP代码往往会因为规模而失去控制。另一方面,PHP让您能够快速获得一些结果。 - Seva Alekseyev

2

从你已知的开始。对于刚开始的人来说,你看到的那些大问题只是一个干扰。

  1. 找到人们需要解决的问题
  2. 利用你已经掌握的知识编写最简单的功能
  3. 不断改进
  4. 担心扩展性问题留到以后再考虑

2
大型系统涉及到组件之间的耦合和测试。
像“软件架构”和“软件工程”这样的课程通常能够很好地教授如何设计系统(正确处理组件之间的耦合和通信)。我对我的大学在这方面的教学有些失望,但至少可以帮助你思考正确的问题。
然后,在测试方面,可以开始研究test driven development 方法。在关注鲁棒性和安全性时,测试覆盖率非常重要。
最后,我甚至建议看看Haskell,即使没有其他原因,也是为了让你进入更“形式化”的操作模式。 Haskell 通过其类型系统或多或少地强制你更加正式地表达问题。(此外,如果您真的喜欢高级数学,您可能会喜欢 Haskell :) )

2
这里有两个目标。分别处理它们: 构建大型复杂系统: 大型复杂系统的产生源于以下两点:
- 对某种产品或服务的展望,该产品或服务有用且吸引了广泛的市场 - 从零开始实现你的愿景的商业计划
要完成这一目标可能需要与其他人合作。显然,您对技术方面感兴趣 - 这是您的强项。您可能需要找到其他与您分享愿景的人来帮助管理非技术方面的事物。这可能包括筹集资金、推广和营销。您的团队中的每个成员应该具备不同的核心优势。
作为技术领导者,您需要牢固掌握应用程序架构。这不是一个螺丝钉式编程技能问题,而是理解如何利用各种设计模式和技术来实现您的目标。尽可能学习多个框架和设计模式,不需要在任何一个方面成为专家,直到您感觉到相对于您要构建的应用程序的每个方面的优缺点。 构建通用CS技能 理论永远不会过时。获得坚实的计算机工程学科背景。参加语言理论、离散数学、算法设计/分析、计算机体系结构、应用程序架构等课程。这些将在您的职业生涯中为您服务。
然后是问题的实际面:现在应该学习哪些语言、技术和框架,以利用您的职业生涯(希望做一些真正的大事情)。在这方面,你已经走在正确的轨道上。保持好奇心,暴露自己尽可能多的工具。你知道的东西越多,就越容易学习新的东西。花时间了解每个工具基于的模型,以及它与其他你使用过的工具类似但不同的地方。
请记住,编程语言只是“手艺人的工具”,而不是手艺本身。随着时间的推移,您将发现新的工具并且放弃其他工具。 将这一切整合起来 让你的想象力来构思那个“杀手级应用程序”。与拥有与你自己相补的技能集的人交朋友。一起谈论和梦想大事情。
努力发展你的核心CS技能。
尽可能接触到许多不同的工具和语言,你会感到自在。对你目前正在做的事情最有用的几个工具获得良好的工作知识。掌握任何一个工具可能需要数年时间,但让你当前的需求指导你。准备让你的技术工具集随着时间的推移而演变。

1

我认为这不是语言或系统的问题。如果你是一个优秀的程序员,你会很容易地适应和适用于任何类型的编程语言或框架。

对于你想要编写的系统,有许多框架需要考虑,每个框架都有其优缺点。我建议你尝试向那些已经做过的人学习,看看大公司使用什么,并深入学习。


0
  • 如果您打算独自开发项目,PHP就可以了。
  • 如果您需要组建开发团队,我建议使用Java。

除了语言之外,不要忘记SSL/加密/安全部分。

像所有支付系统一样,Paypal需要实施强大的安全计划,以确保(尽可能):

  • 服务器是他所声称的那个(由已知机构签署的证书)
  • 数据在浏览器<->服务器传输过程中不能被(实际上)窃听

请参见HTTPsSSL


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接