与 Marcelo Ricardo de Oliveira 的程序员访谈






4.93/5 (21投票s)
欢迎来到我们持续进行的 CodeProject 访谈系列,在其中我们与开发人员探讨他们的背景、项目、兴趣和讨厌的东西。在本期中,我们采访了 Marcelo Ricardo de Oliveira,他是一位伟大的作家,在 CodeProject 上撰写了 35 篇文章并赢得了 19 场比赛。
欢迎来到我们持续进行的 CodeProject 访谈系列,在其中我们与开发人员探讨他们的背景、项目、兴趣和讨厌的东西。在本期中,我们采访了 Marcelo Ricardo de Oliveira,他是一位伟大的作家,在 CodeProject 上撰写了 35 篇文章并赢得了 19 场比赛。
你是谁?
我叫 Marcelo Ricardo de Oliveira,我出生在瓜鲁柳斯,也生活在那里。瓜鲁柳斯是一座主要(也几乎唯一)以圣保罗国际机场闻名的城市。我今年 38 岁,在单身多年后,近几个月来,我一直在与我亲爱的妻子 Luciana 和我的继子 Kauê 一起享受已婚生活的乐趣。
过去两年,我一直在巴西领先的学习管理系统(LMS)提供商之一 ILang Educação 担任软件开发人员——主要是 Web 开发人员。
您做什么?
目前,我作为一名 Web 开发人员,正在从事 iLang LMS(语言管理系统)项目。这个项目属于那种已经稳定但从未真正完成的项目。我们的客户是大型教育公司,其中包括全球最大的教育公司 Kroton,以及排名第五的 DeVry University。在这种情况下,业务需求一直在变化,因此我们的项目是一个不断发展的有机体,永远不会完成。
该项目最近的一项变更请求是实现实时通信中的社交互动,换句话说,让学生和老师能够像在 Facebook 上那样进行互动。为此,我们选择了 SignalR.Net 实时框架,但由于我们的许多页面都是使用 MooTools 库编写的,而 SignalR 构建在 jQuery 之上,因此我们首先需要将我们的 JavaScript 代码库从一个框架移植到另一个框架。我刚刚完成了将 MooTools 库迁移到 jQuery 库的 JavaScript 代码移植工作,尽管这是一项艰巨的任务,但最困难的部分并非移植本身,而是如何处理 MooTools 库特有的插件。我不得不找到功能相同的等效 jQuery 插件,并在某些情况下对其进行改编,使其能够以相同的方式工作。例如:图片裁剪插件(用于调整用户上传个人资料照片的图片)和自动完成插件(用于选择预定义的消息接收者)。
在 2010/2011 年,我在 JBS Friboi 从事一个 360 度反馈评估项目。JBS 是世界上最大的牛肉生产商,正如预期的那样,该公司拥有庞大的人员编制——全球有 140,000 名员工,当时该公司正处于收购狂潮之中。JBS 的快速增长给公司内部的决策者带来了问题,需要 IT 工具来帮助公司完成员工技能评估过程,并决定例如如何合并不同工厂冗余区域的团队、根据这些技能决定晋升谁或不晋升谁,以及在部门重组时确定解雇谁。
在 JBS,我学到了很多 Scrum 知识,并通过日常实践提高了我的技能。我曾是一名“瀑布模型流程”思维者,但我认为 Scrum 是一股清新的空气。Henrik Kniberg 的《Scrum From the Trenches》是我必然的选择,它被证明是一本简单明了的成功指南。从一开始,Scrum 就让我觉得一切都有道理。在每次迭代中,产品负责人(负责该项目的 HR 人员)会梳理优先级,然后告诉我们先做什么,根据我们的开发速度,我们决定在为期一周的短冲刺中交付什么。幸运的是,我们在公司全国评估之前按时交付了项目。从那时起,我推荐在我参与的每个项目中都使用 Scrum。
由于 JBS 在全国各地都有办公室和工厂,因此系统必须考虑到巴西缺乏宽带连接地区网速较低的问题。因此,开发被分为 Web 应用程序(主要面向有宽带的办公室人员)和 WPF 应用程序(主要面向工厂工人)。对于 Web 应用程序,我们使用了 Asp.Net、C# 和 ExtJS 库,WCF 作为服务层,NHibernate 作为 ORM 框架,Sql Server 用于 OLTP,Lucene.Net 作为静态、不可变列表(如员工姓名)的搜索引擎。最初,工厂工人评估应用程序是一个始终在线的 WPF 应用程序,但考虑到连接性问题,后来我们将其重构为离线应用程序,并带有本地 SQLite 数据库,以便每个工厂应用程序最终会不时地与中央 SQL Server 数据库同步。
在 2005 年至 2010 年期间,我在 Spring Wireless 担任软件开发人员。尽管名称如此,Spring 不仅仅是一个移动解决方案提供商,还是一个端到端解决方案提供商,我们的工作是开发移动应用程序以及服务器端和后台集成以及商业智能。虽然 Android 是今天的王者,但那时 Windows Mobile 在移动企业解决方案领域占据主导地位,所以我大量使用了 C# 和 .NET Compact Framework。我在 Spring Wireless 完成的第一个项目之一是 mQuest Studio(后来更名为 mSeries Forms Studio),这是一个用于生成我们客户要求的可自定义调查问卷表单的可视化编辑器。它是一个智能客户端 Windows Forms 应用程序,通过 Web 服务中间层连接到数据库。随着公司的发展,开发过程也发生了分化,一个团队负责“核心产品”组件,这些组件被定义为一组固定不变的业务和技术需求(例如,巴西税务计算、订单下达机制、地理位置、同步服务等),而另一个团队则负责在这些核心组件之上构建客户特定的代码。我参与过两个团队,并被分配了许多项目。我参与的最后一个项目之一是我自己创建的一个集成代码生成器:由于数据库集成 Web 服务几乎是每个客户项目的要求,而它们之间的唯一区别是表和列的集合,因此我创建了一个代码生成器,它接收自定义表结构,不仅生成 Web 服务代码,还生成单元测试夹具、SQL Server 表和存储过程脚本,从而大大缩短了开发和测试时间。
在 2005 年之前,我在 Ka Solution 和一些软件公司工作,主要使用 WISA 堆栈(Windows / IIS / Sql Server / ASP.NET)、VB6/VB.NET 和 C#,构建 LoB(业务线)应用程序:电话营销订单系统、发票处理、会计系统和销售佣金计算。
您的开发环境是什么?
我们将 Intel Core 7 iMacs 32GB 作为开发机。在开发团队中,我是唯一不使用双显示器的人。我选择单显示器而不是双显示器是为了减少疲劳和视觉刺激。我唯一的 IDE 是 Visual Studio 2012,安装了 VSCommands 包。不出所料,我还使用 SQL Server Management Studio,我选择的浏览器是 Chrome,因为它拥有简单快捷的调试工具,尽管我仍然需要在 Fire Fox 和 Internet Explorer 中测试软件。我所有的服务器端代码都用 C# 编写,我们的 ORM(对象关系映射)是 Entity Framework 4。所有的客户端代码都用 JavaScript 编写,其中 jQuery 提供了很大的帮助。目前,我非常喜欢使用 Knockout JS 作为 MVVM 模式下渲染视图的框架,以及 SignalR.Net 作为实时通信框架。
在 iLang,我们使用 Team Foundation Server,它控制两个分支:基线分支和一个子分支。每天都会进行夜间构建,编译 iLang 解决方案的完整代码库,然后将其移至集成测试环境,并通过 Selenium 和一系列单元测试自动评估网站功能。如果计划发布到生产环境,测试团队会进行几轮功能测试,以验证新旧功能并确保在将构建部署到生产环境之前一切正常。当发现错误时,我们使用“生产分支”来修复该错误。在签入代码后,我们使用一组自定义活动和 ms build 脚本,将错误修复自动安装到生产环境中:大量的 Web 服务器、一些应用程序服务器和数据库服务器。
您对哪些新工具、语言或框架感兴趣?
正如我之前提到的,Knockout Js 和 SignalR.Net,它们不算太新(但对我来说相对较新)。在家,我正在玩 Backbone JS,这是一个用于构建应用程序客户端部分的 JavaScript 框架。我还玩 Paper JS,一个基于 HTML5 的 2D 矢量库,它非常有趣。
去年,我开发了一些基于 Silverlight 和 XNA 的 Windows Phone 7.5 应用程序。今年,我计划开始开发 Windows Phone 8 和 Windows 8(Metro)应用程序,以及老牌的 WPF。
您最讨厌的编码习惯是什么?
我使用的命名约定取决于每种语言的推荐:在 JavaScript 中,类名使用 PascalCase,其他地方都使用 camelCase。在 C# 中,标识符使用 PascalCase,参数和变量使用 camelCase。我不喜欢以下划线开头的变量名。这对我来说太像 C++ 了。我也不喜欢匈牙利命名法。
您是如何开始编程的?
我十几岁的时候,在八十年代,在 Zilog Z80 MSX 电脑上开始编程。那时,又大又笨重的 8088 PC 又贵又无聊又丑陋。那时,巴西实行计算机市场保留政策,这只不过是阻碍了发展中国家的技术进步。计算机是昂贵的玩具,所以我很小心地对待我的 MSX。它带有一个内置的 DOS 版本(MSX-DOS),非常类似于 MS-DOS,还有一个 BASIC 语言解释器。我只有 32 KB 的内存,相信我,这看起来像是很多内存。所以,我的第一门语言是 BASIC,不久之后我就开始用 Z-80 汇编(我的第二门语言)编程了。我最喜欢的爱好是(用磁带录音机!)将游戏加载到内存中,游戏加载后,我就开始修改游戏代码,更改精灵、logo、字符串等。在“mod”这个词出现很久之前,我就在做游戏 mod 了 " src="https://codeproject.org.cn/script/Forums/Images/smiley_smile.gif" />
然后我家经历了财务困难,我远离电脑多年,直到我开始(以专业人士身份)使用 Clipper、Visual Basic 3、4、5 和 6 进行编程。
开发者社区是如何影响您的编码的?
嗯,开发者社区给了我这么多……以 CodeProject 为例:我在 2007 年只是为了好玩提交了我的第一篇文章,到目前为止已经发表了 35 篇文章。这只有得益于开发受众的巨大反馈才可能实现。不仅有像 Sacha Barber、Pete O’Hanlon、Colin Eberhardt、Daniel Vaughan(仅举几例)这样的大人物、MS MVP 和 CP MVP,还有偶尔下载你的代码、测试它并提供非常有益建议的读者。如果不是 CP 的读者,我可能就不会费心提交第二篇文章了。
您认为自己在 10 年后会是什么样子?
这是一个棘手的问题。也许我仍然会是一名程序员,但我的内心告诉我,我想教年轻人 IT 知识。一个快乐的编程老师,有一些业余时间在家玩代码,这就是我的梦想。
如果你给一个崭露头角的程序员一条建议?
嗯,也许我会是他/她的建议者,对吧?(笑)说实话,我会说:保持谦虚,从别人的错误中学习。不要懒惰,多阅读,充分利用互联网上的免费资源,并参与像 CodeProject 这样的开发者社区。这将让你始终保持投入和动力。