标签 Java 下的文章

给新手程序员的建议

本文翻译自Dr. Dobb’s杂志主编Andrew Binstock的"Advice to a new programmer"一文

总是有太多的建议摆在新手程序员面前,以致他们难于选择从何处开始。然而,所有这些建议都是建构在下面这五条实践的基础之上的。

每隔几个月,我就会收到一些勤奋有加的新手程序员的求助,他们希望知道如何才能成为一名真正优秀的程序员。在一些程序员论坛上,我也能看到为数不 少的类似问题,这是一个令人鼓舞的趋势。一些最周全的答案往往与我对这个问题的看法相似,这表明在基础的最佳实践上确实存在着某种一致。因此我下 面的建议并非原创,不过也许我的这些补充会提供给你更进一步的理解。

我印象中的新手程序员基本了解编程的原理,写过程序,但大多规模较小且复杂度不一,致力于某个领域的工作或自己或他人个人项目。

编程工作只有一种真正的基础活动,那就是写代码。要想擅于编程,你就必须编写大量的代码。 大量的工作可能成为一种促进你成长的工具,也可能是一些有限技能的重复练习。为了避免成为后者,你应该做到:

阅读大量代码。尤其是阅读大量由卓越程序员编写的代码。记住:不仅读那些坐在大厅里的优秀程序员的代码,更要读那些卓越程序员的。 在开源软件大行其道的今天,做到这些十分容易。当我学习Java时,我读了Tomcat的代码,读了Cruise Control CI服务器的代码。自从那时起,我已经读了大量优秀的代码。

阅读代码时很容易从main函数开始,但这样一来,你很可能会在初始化以及命令行解析代码上花费大量时间。我更喜欢根据源文件名寻找一些令我感兴 趣的功能实现,然后深入阅读这些源文件。理解整个项目或整体设计的来龙去脉并不是关键,做这些会让你感觉筋疲力尽的。阅读代码。查看注释,弄清楚 作者在做什么以及是如何着手做的。

彻底了解你的工具。我认为损耗编程时间最多的不是调试或重写代码,而是因开发人员对其所使用工具的不熟悉而导致的无数碎片时间的损 耗。我所指的工具包括:集成开发环境(IDE)、编程语言、构建系统以及版本控制系统。其中,集成开发环境和编程语言是到目前为止最为重要的。经 过几个星期的练习,你应该知道集成开发环境中的几乎每个按键组合,这样你只有在为了节省按键时间时才使用鼠标。如果你知道按键组合,你就知道了这 些命令。但如果你只使用鼠标,你只会知道菜单,菜单上面有你倾向于点击的相同的一个或两个条目。因此了解集成开发环境是一种不折不扣的纪律。

了解大型编程语言,诸如Java或C++,需要的不仅仅是纪律。它们自身规模庞大,它们的库亦规模庞大。阅读代码是我认为的了解编程语言最好的方式,阅读 那些使用了你所未知特性的代码并寻找机会使用它们。书籍(而不是博客)是另外一个极好的资料来源。了解你目前正在使用的特性的外围,很快你就会发现外围扩 大了。了解版本控制系统和构建系统将让你成为一个理想的团队成员 — 不会因为对重要操作的无知而浪费时间。

动手编码前先规划好你的代码。我认为这是建议列表中最难做的一项,但同时它也可能给你换来最多的益处。我所指的并不是正式的设计 – 在这个阶段正式设计一般不是必要的。不过你确实应该用一种其他方式精心策划一下代码,而不仅仅是将思路放在脑子里。最简单的方法就是编写一个小文档(我经 常使用的是思维导图):代码的需求是什么?你打算如何实现它?还有哪些目前未知的事情需要去了解?我需要或需要创建什么对象?将这些都写出来。只有在这样 之后开始编码,你才会发现代码变得更加容易编写了,更容易形成文档了,也更容易修改了。将你的笔记保存下来 – 它们将是很好的参考资料。

大量编写代码并进行代码评审。如果你那里不做代码评审,那你就自己来做。找出那些最好的程序员,并且你可以通过某种方式听 到和理解他们给你的有用的建议。别做令人讨厌的人,但也不能因为你害羞,忙碌或自负而回避这个过程。代码评审应该成为你编程人生的一部分。要有创造性。试 试在某个下午与比你更牛的程序员一起做结对编程。重要的是你需要反馈,而这些反馈是你自己无法给予自己的。

编码与写测试并驾齐驱。这也许是这里唯一有争议的一条。它并非是对TDD的认可(译注:测试驱动开发)。但这里要认可的是你的代码 在大多数要面对的场合里都是可以工作的。开始单元测试,并用边缘值测试新代码。例如,当传入一个负数或者是整型数最大值时,你的函数是否还能正常工作?如 果不能,你的函数是否抛出了一个信息详实的异常或只是崩溃退出?如果不是异常,你是否使用了断言(assert)来缩小输入的范围?如果这么做了,那就测 试这个断言。利用之前做的规划编写一些模拟(mock)测试,接下来用这些模拟对象去开始测试你的新代码。这将有助于阐明你当前代码中的设计问题以及即将 实现的对象。保存你的测试代码,在每次签入代码前都运行它们,这些测试将成为后续那些破坏你当前代码的新代码的早期预警系统。

还有许多建议和至理名言可以添加到这个列表中。但这本身就是问题的一部分:过多的建议将导致新手难于知道到底从何处开始。因此,我故意将我的建议缩减到仅 剩五点。如果你能勤奋地运用这五点建议实践,你会很快发现两件事情:你将可以逐步应付更大更重要的任务了,并且当你回首翻看你几个月之前编写的代码时,你 会觉得尴尬。

毫无疑问这两种感受都是你进步的标志。祝你好运!

将Unity换成Gnome3

Ubuntu 12.04已经体验一天多了,Unity还是用的不大习惯,左侧的程序启动栏感觉还是别扭,以前用windows的时候就不喜欢将任务栏放在左侧或右侧; 应用窗口的菜单栏融合到桌面顶端也没给我太多惊喜;总而言之,给自己找几个换回Gome的理由还是很容易的^_^。况且Gnome也发生了巨变, 由传统的Gnome2更新到了全新的Gnome3,正好我也想体验一下Gnome3,于是继续折腾。

 
Ubuntu 12.04.1官方源里就有Gnome3,因此只需执行sudo apt-get install gnome-shell即可安装Gnome3。Gnome3还有一个高级配置工具,可以执行sudo apt-get install gnome-tweak-tool安装。安装后注销,在登录窗口选择Gnome桌面即可。
 
Gnome3默认桌面十分简洁,除了左上角的“活动”之外,别无它物。据说Unity也是基于Gnome开发的,只是比Gnome3多了一个左侧 程序启动栏(虽然也可以隐藏,但试过,感觉十分不灵敏)。我并未删除Unity,主要是担心删除后可能会给系统带来不稳定性。
 
点击“活动”后展现的界面我还是蛮喜欢的:中间是所有打开的窗口缩略图,左边是应用收藏夹,与Unity左侧的程序启动栏类似。右侧是半隐藏的 “工作区”栏。最下方是隐藏了主界面的程序的图标栏,该栏是自动隐藏的,将鼠标指针放到屏幕右下角时,该栏会出现。另外通过Win快捷键可以直接 打开“活动”主界面,十分方便。“活动”界面中的搜索框还可以作为程序启动器来用。
 
Gnome3默认取消了窗口中的最大、最小化按钮,不过利用gnome-tweak-tool这个高级配置工具可以恢复最大、最小化按钮:打开 tweak工具,找到shell -> arrangement of buttons on the titlebar,选择all即可。
 
Gnome3的切换窗口快捷键Alt + Tab将相同程序的不同窗口叠加在一起,这个我不甚喜欢,还得动用方向键选择,我更喜欢所有窗口不分类别的平铺。对于处理这种折叠窗口的情况,我更喜欢用 Win键打开“活动”界面,然后在上面选择我需要的窗口。
 
Gnome3窗口最大化的快捷键为“ctrl + win + 上箭头”,但我还没发现最小化的快捷键。
 
Gnome3的文件管理器左侧的快捷方式边栏似乎不能像Gnome2那样自定义快捷方式,这样无法快速访问常用的一些文件夹。
 
Gnome3的体验暂且就是这些,后续还待慢慢挖掘。
 
另外这两天还针对Ubuntu 12.04做了一些改造:
 
* 用Clipit替换Parcellite
 
我的Parcellite启动后,无法在提示栏显示出小图标,无法对其进行配置,也就无法做剪切板的同步。后安装了Clipit,它是 Parcellite的一个分支,功能与Parcellite一致。用apt-get install即可。
 
* 安装OpenJDK
 
本想安装Oracle提供的JDK的,但无奈从Oracle提供的链接下载太慢,只能以OpenJDK替代。据说Oracle后续JDK也是基于 OpenJDK的,只是额外加上了一些私有代码。
 
sudo apt-get install openjdk-7-jre openjdk-7-jdk
 
$ java -version
java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.3) (7u9-2.3.3-0ubuntu1~12.04.1)
OpenJDK Client VM (build 23.2-b09, mixed mode, sharing)
 
* SunPinyin配置
 
SunPinYin默认不支持逗号和句号键翻页,执行/usr/lib/ibus-sunpinyin/ibus-setup- sunpinyin可以重新配置翻页键;同理用/usr/lib/ibus-pinyin/ibus-setup-pinyin也可以对默认携带 的拼音输入法进行设置。 
如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats