【问题标题】:What is the difference between Server side skills and desktop development skills?服务器端技能和桌面开发技能有什么区别?
【发布时间】:2009-04-13 17:32:37
【问题描述】:

今天早上,我读到了一个很好的问题,关于这个人应该对 Sharepoint 职位有什么期望。我有一个关于服务器端工程的类似问题。我对服务器端工程职位有什么期望,它与桌面开发有何相似之处和不同之处?

我有 WinForms、WPF 方面的经验,一些轻量级的多线程经验,一些使用 Web 服务的经验,一些编写一些精简、简单的 Web 服务的经验,编写数据访问层 (DAL),以及一些设置和使用基于 SQL Server 的经验具有 CRUD 样式界面并使用存储过程的数据库。

我的团队没有服务器端工程师头衔的人,所以我真的不确定这些技能是什么样的。

【问题讨论】:

    标签: c# .net asp.net database multithreading


    【解决方案1】:

    他们是截然不同的世界。我在营地的两边都工作过,但主要是服务器端。不过,我使用的是经典的客户端-服务器而不是 Web(是的,我们仍然存在)。

    • 客户端是关于用户交互的,服务器端(大多数情况下)没有用户。这实际上是相当解放的。
    • 服务器端意味着考虑管理者,而不是用户。您需要为故障查找、报告、诊断日志记录提供访问权限 - 通常是您自己的 Windows 事件日志。
    • 客户端是短暂的(用户来来去去),服务器端是持久的。因此,资源管理至关重要:泄漏意味着死亡。内存泄漏、句柄泄漏、堆碎片。你最终会梦见这些东西。我在 24 小时通知中被拖到西班牙,因为一个系统可能会在异常情况下将 Windows DDE 内存分配器的顶部炸毁,这告诉你这些东西有多重要。
    • 在客户端对用户的响应(为 GUI 提供服务)就是一切,而在服务器端则更为复杂。线程变得更加重要,但线程是为了可扩展性而不是为了保持 GUI 响应。我还没有像以前在固件时代那样开始计算处理器周期或检查中断延迟数据,但它已经接近了。
    • 安全性变得很重要,但比您想象的要少。并非每个服务器应用程序都是面向 Internet 的。考虑访问级别、通过视图限制访问等。
    • 曾几何时,服务器端总是意味着本地,但这种情况正在改变。

    编辑:

    通过线程来实现可伸缩性,我的意思是很容易以不伸缩的方式应用线程。为每个查询生成一个线程很好,直到您的建模告诉您可能有 500 个并发查询。所以你需要考虑线程池和队列。

    就“管理者”而言,这里的需求实际上有两种,一种是为 SysAdms 报告,一种是为适合的管理类型报告。 SysAdms 需要故障查找方面的帮助,我认为这是发生在您的应用程序上的系统故障(网络中断、网络风暴、硬盘满/崩溃、服务器故障转移、调用 DR 等)和诊断,我认为这是报告您自己的应用程序的异常行为。

    SysAdms 有非常短期的需求 - 这个小时,今天,给我发电子邮件,给我发短信,把它备份等等。他们需要随时可用的详细技术信息,因为你不知道什么时候会真的需要它。但是,无论您向他们提供多少信息,只有最优秀的系统管理员不会拿起电话并在命令击中空气流动装置时给您响铃。

    经理需要中长期绩效报告,每天/每周/每月有多少查询,我上周做得如何,本周我需要做些什么来改进,我如何让目标绩效对我的员工可见员工/同行/上级等。这主要是根据要求(报告),尽管经常要求诸如带有运行统计数据的墙板之类的东西……但即使这些也不一定是实时的。您可以在民意调查中从数据库中吸出这种东西。作为服务器端人员,您可能必须设计一些视图来促进此报告,但您的大部分工作都针对 SysAdms 感兴趣的异常情况。至少,在我的经验中是这样的。但请记住,如果 SysAdm 不满意,您无论如何都要与经理打交道...

    顺便说一句:奇怪的是,尽管 SysAdms 似乎过着压力很大的生活,但与我共事过的最好的人都是非常悠闲的人。奇怪,那个。我想这是一种应对机制。

    【讨论】:

    • 是的,您的回答与我脑海中的问题非常相关。您能否详细说明“线程可扩展性”和“考虑管理器”?在我看到的职位发布中,线程是一个常见的话题。
    【解决方案2】:

    服务器端技能更多地涉及可扩展性和长期资源消耗。还共享资源争用。

    在桌面应用程序上,如果您泄漏或占用内存太久,这可能没什么大不了的。在服务器应用程序中执行此操作,您只是锁定了许多用户。

    在服务器端应用程序中,您确实需要了解连接和线程池、死锁以及一系列其他问题。

    【讨论】:

    • 还有哪些需要注意的其他问题?
    • @medicineman:我会说这取决于工作。有些人可能认为 DBA 是服务器端职位,但在我见过的许多公司中,这并不是真正的软件开发人员职位。
    • 公平地说,对于桌面应用程序,用户体验通常远比原始服务器端开发重要。良好的用户界面是一个不平凡的问题。 (这个答案似乎有点片面。)
    • 你说得对,GUI 是客户端的一个重要因素。但我没有提到这一点,因为它似乎不言自明
    【解决方案3】:

    我不确定您的问题是否可以重新表述为 Web 与客户端开发,因为这将是描述这两种环境的另一种方式,尽管不完全正确。可能有一些服务器-客户端应用程序的服务器端与基于 Web 的应用程序不同,我曾经使用其中一个,考虑每一端的代码应该有多难是一种巧妙的方式。

    Web 开发存在会尝试读取数据的不同版本的软件和解决方案的问题。包括 Internet Explorer、Firefox 和 Chrome 在内的浏览器都有不同的处理方式,如果您将一些 Javascript 与服务器端代码混合在一起,在某些情况下运行一对代码可能会很痛苦。浏览器限制可能是一个因素,也可能是人们期望客户端拥有的插件,例如Flash、Java 或 Silverlight。处理网络的无状态有时会很痛苦。

    【讨论】:

    • 服务器端工程师必须担心浏览器版本和分辨率等?如何“处理网络的无状态特性”?
    • 是的,因为在服务器上做的一些事情可以改变发送给客户端的 HTML。至于 web 的无状态,因为我主要从事 web 开发,所以这对我来说没什么大不了的。基本上,归结为在所有时间验证输入和超时问题时都要小心。
    【解决方案4】:

    添加到 Gaijin 的建议,不要太害怕,有一些规则,但大部分都很容易遵循,因为 Smell 代码就是 Smell 代码,如果您了解您的工具并拥有良好的技能,那么您就会发现它。

    有一些很好的方法可以改进您的 Web 应用程序,其中值得一提的是: - 小心使用视图状态并在不需要的控件上禁用它。 - 有效地使用缓存,ASP.net 对此提供了很好的控制。 -Dispose 资源,例如在处理文件 I.O 的时候。 - 使用 Firebug 分析您的请求并查看错误。 - 使用 ANTS 分析器和 Jetbrain 的 Profiler 等分析应用程序。

    现在服务器比以前强大得多,可以处理大量操作,但这并不意味着你不应该关心你的代码

    最后我想说.Net 框架是一个如此神奇的世界,如果您知道如何使用正确的工具来完成正确的工作,那么您可以制作任何您想要的东西,更美妙的是,如果您使用 Winforms 、WPF、Silver light、ASP.net 或 MVC,总是有很多东西你不必学习,因为它们在框架之间共享。

    希望这会有所帮助。

    【讨论】:

    • 我不太害怕表现,但我更害怕说服招聘经理相信桌面人员可以将自己转变为网络/服务器人员。你会强调哪些技能,你会提高哪些技术?
    • 哦,明白了,如果你正在使用 .Net,那么就坚持下去吧,它提供了所有的风格,对于 Web 技能,Web 开发人员必须至少对 Javascript、CSS、和服务器端语言(那将是 ASP)。现在,如果您的应用程序还需要 Flash 和 silverlight 技能
    • 需要交互性。很难找到一个在所有这些方面都出类拔萃的人,所以我的建议是找 2 个或更多,1 个负责编码,1 个负责设计、图形和 flash,他们可以轻松互动并为您节省大量时间.不要忘记让他们查看这样的在线资源
    • 地点和 ASP.net 站点。这需要一些时间,但如果你得到合适的人才,这是非常可行的。此外,如果您要选择 Web 表单,那么过渡将很顺利,因为它遵循与 win 表单相同的概念。如果这还不够,请询问更多。
    • 因为无状态特性,在 Web 表单中,您可以使用 Viewstate、会话和 Cashe 来处理它。
    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多