
加拿大,温哥华
自从 1978 年毕业于不列颠哥伦比亚大学以来,我几乎没有离开过电脑。从 2005 年起,我成为了一名全职 Linux 用户;从 1986 年到 2005 年,我是一名全职 Solaris 和 SunOS 用户;在那之前,我是 UNIX System V 用户。
在技术方面,我的大部分职业生涯都在做顾问,进行数据分析和可视化,特别是空间数据分析。我拥有大量的相关编程经验,使用 C、awk、Java、Python、PostgreSQL、PostGIS,最近还使用 Groovy。我对 Julia 非常感兴趣。我还构建了一些桌面和 Web 应用程序,主要使用 Java,最近使用 Grails,前端使用了大量的 JavaScript,数据库则选择 PostgreSQL。
除此之外,我花费大量时间编写提案、技术报告,当然还有在 https://www.opensource.com 上写东西。
已创作评论
感谢您的评论,Golman。总的来说,我同意您的看法——在开发人员的世界里,人们对闪亮的新事物有很多(可能太多)的赞赏。
话虽如此,我认为简洁和精炼是有价值的,尤其是在“不要重复自己”(DRY)原则中体现出来的时候。对我来说,Java 8 及以后的函数式接口对代码维护者和开发人员来说都是巨大的好处,仅仅是通过减少因“此处”对象而产生的样板代码,这些对象的唯一目的是为单个函数提供实现。显而易见的是,这减少了打字,但这只是顺便一提;真正的好处是代码更紧凑、更易读,并且当不被大量“如何”包围时,“什么”会更加清晰可见。
从我的角度来看,整个增强集合是另一个很好的例子,内部迭代器和 lambda 表达式是非常好的东西。
我的 Java(和 Groovy)函数式技巧仍然非常初级。例如,如果我有一个输入文件,其中每行包含几个不同的键值对,要加载到几个不同的 map 中,我不知道有什么方法可以只处理一次并将所有 map 作为函数式结果交付。也许有,只是我还没见过;但在 Groovy 中,我倾向于做这类事情,我发现自己声明了所有的 map,然后使用“each”来迭代文件,一边迭代一边赋值 map1[key1] = value1, map2[key2] = value2 等等。
100% 同意花时间在设计概念上。我发现现在白板的替代方案是用 Groovy 制作原型。我不是一个非常有视觉感的人,所以缺少图表并不会困扰我。在我确定一个看起来朝着良好方向发展的原型之前,我可能会制作几个原型;而且我经常使用原型作为测试相对性能的借口。当涉及到 SQL 时也是如此。但我怀疑这一切可能更多地表明什么样的方法适用于我发现自己正在解决的问题类型,而不是一般的规则。
无论如何,再次感谢您周到的评论。
感谢您的评论,Riccardo。就我的经验而言,Java 中的强静态类型是一个很大的优势。我同意我们在喜欢简洁还是冗长语法方面存在差异,我只想说各有所好。
对我来说,另一个产生巨大差异的东西是 Java 附带的所有好东西。例如,回到“美好的 Pascal 时代”,当时我可用的内存非常有限,我会通过一个中间查找数组来构建基于代码值的累加器,该数组将代码值(例如在 1-500 范围内)转换为“出现索引”(例如在 1-25 范围内)。该出现索引将用于索引到堆结构指针数组中以进行累积。当然,这种类型的结构很容易不小心使用代码值而不是代码值的索引来查找指针数组,这会带来各种难以追踪的错误。
Awk 的关联数组,以及后来的 Java 的全套 HashMaps,完全避免了这类问题。当然,到那时,我的内存限制也没有那么成问题了。HashMap 与泛型提供的类型检查相结合,进一步有助于在编译时检测错误。
所以,由于不太熟悉 Ada 带来了什么样的“电池”,我不确定我们是否完全站在同一立场!但无论如何,再次感谢您的来信,我邀请您考虑为 opensource.com 撰写一篇“我为什么使用 Ada”的文章!