Joel谈软件
翻译1.坐在那里争论代码是否有问题,是毫无意义的,因为你可以运行代码,答案自然就有了。代码的世界是非常公正的,也是非常严格有序的。许许多多的人选择编程,首要的原因就是,他们宁愿将自己的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是对的就能赢得任何争论的地方。
2.程序员在完成手头任务时,不被允许使用最合适的编程语言,而是被命令只能使用另一种特定的语言,原因仅仅是因为老板喜欢这种语言——没有什么比这更让人气愤的了;晋升的原因不是成果,而是人际关系——没有什么比这更让人抓狂的了;程序员被迫去做技术上落后的东西,仅仅因为上级或者得到上级支持的人坚持这样——没有什么比这更让人发火的了。
3.在学校里只学习java是非常危险的。总的来看,java不是一种非常难的编程语言,无法用来区分优秀程序员和普通程序员。他可能很适合用来完成工作。大学计算机系的课程里有两个传统的知识点,但许多人从来没有真正的搞懂过,那就是指针和递归。学习java语言的孩子是幸运的,因为当他们用到以指针为基础的散列表时,他们永远也不会遇到古怪的“段错误”,他们永远不会因为无法将数据塞进有限的内存空间而急的发疯,他们也永远不用苦苦思索,为什么在一个纯函数的程序中,一个变量的值一会儿保持不变,一会儿又变个不停!多自相矛盾啊。对于某些最激动人心的编程任务来说,指针仍然是非常重要的。比如说:如果不用指针,你根本没办法开发LInux内核。如果你不是真正的理解指针,你连一行Linux代码也看不懂,说实话,任何操作系统的代码你都看不懂。
如果不是函数式编程,你就无法创造出MapReduce,正是这种算法使得google的可扩展性达到如此巨大的规模。
4.Joel给计算机系学生的建议:
如果你喜欢编程,那么你真是受到了上天的眷顾。你是非常幸运的少数人之一,能够以自己喜欢的事谋生。大多数人没有什么幸运。你认为理所当然的观念是“热爱你的工作”,其实是一个很现代的概念。通常的看法是,工作是一种让人很不开心的事,你为了拿工资才不得不去上班。你工作的目的是为了攒下钱去干自己真正喜欢做的事,但是前提是得等到65岁退休之后才行,而且还有不少的条件。一、你的积蓄足够多;二、你没有老到走不动;三、你喜欢的诗不需要用到脆弱的膝盖、昏花的视力等等。
建议:
1.毕业前练好写作
如果不是Linus 不断的散布福音,请问Linux操作系统会成功吗?
一个普通的程序员与一个优秀的程序员的区别,不在于他们懂得的编程语言谁多谁少,也不在于他们喜欢用Python语言还是喜欢使用Java语言,而在于他们能否与他人交流思想。如果你能说服他人,你的力量就可以得到放大。如果你能写出清晰的注释和技术规格说明书,其他的程序员就能够理解你的代码,以你他们就能在自己的代码中使用,而不必重写。如果你做不到这一点,你的代码对他人就没有价值。
你还可以动手写日记或网志,你写的越多,写作就会变得越容易。写起来越容易,你就会写的越多。
2.毕业前学好C语言
记住是C语言,而不是C++。
C语言让程序员互相沟通,更重要的是,它比你在大学中学到的“现代语言”都更接近与机器。你至少需要花上一个学期来了解机器原理,否则你永远不可能在高级语言的层次上写出高效的代码。你也永远无法开发编译器和操作系统,而他们恰恰属于目前程序员能够得到的最佳工作之列。别人也永远不会放心的将大型项目的架构设计交给你。
3.毕业前学好微观经济
经济学想这样一门学科:刚开始学的时候轰轰烈烈,有许多有用的、言之有理的理论和可以在真实世界中得到证明的事实,等等;但是再学下去就每况愈下,有用的东西就不多了。经济学一开始那个有用的部分正是微观经济学,它是商业领域所有重要理论的基础。
你一定要去学微观经济学,因为你必须搞懂供给和需求,你必须明白竞争优势,你必须理解什么是净现值,什么是贴现,什么是边际效用。只有这样,你才会懂得为什么生意是现在这种做法。
4.不要因为枯燥就不选修非计算机专业的课程
别忘了,在编程工作中也有很多枯燥的东西。每一项工作都会有枯燥难耐的时刻。公司不想雇佣那些只想干有趣事情的人。
5.选修大量有编程实践的课程
动态逻辑
计算机科学与软件开发不是一回事。
6.别担心所有工作都被印度人抢去
7.找一份好的暑期实习工作。
5.别给用户太多的选择。大量眼花缭乱的选择在我们的大脑中泛滥成灾,令人精疲力尽。太多的选择最终限制了我们的自由,而不是解放那个了我们。正常情况下,我们认为选择越多,我们就会越幸福。但事实正好相反,太多的选择实际上损害了我们内心的幸福感。
6.用软甲搭建社区
1.在大多数商业性的讨论区中,实际上做不到从头到尾完整地读完一个主题的发言,因为主题的每一个帖子中都有他自己的页面,上面布满了广告,一页一页读完整个发言会把你逼疯的。那些闪烁夺目的商业垃圾无所不在,使得你感觉自己好像站在纽约时代广场上,想同身边的陌生人结识,但是刺眼的霓虹灯却把你所有的注意力都分散了。
2.论坛中要不要实现自动邮箱回复的功能?
3.在论坛的主题排序中,应该将最新回复的主题排列在第一位还是应该按照话题的发起时间排序。
4.如何提供一些功能,让读者知道那些帖子我们已经读过了?
5.该死的回复命令在页面的最底下。
6.该死的发起新话题的命令也在整个也页面的最下面。
7.有没有必要在用户确认发布之前添加一个预览功能。
8.在写回复的时候,为什么不显示要回复的帖子。
9.,为什么有的帖子不见了。
10.有没有必要公开管理方针。
11.为什么不提供评分功能?
12.为什么不搞用户注册?
7.网络工程师的口水战——web标准
标准与实现
1.“一对一”:一个播放器,一个耳机
2.“一对多”,一个播放器,多个耳机。(很多厂商实现兼容耳机)
3.“版本对多”,同一家公司推出了多个版本
微软公司就是在“版本对多”环境中成长起来的。
4.“多对多”
出现了很多制作播放器的厂商。
在多对多的市场中。左边是很多互不协调的厂商,右边是无数互不兼容的配套产品。两边都在犯错。
这就是我们现在在浏览HTML页面时面对的局面。许多浏览器,对上大概数十亿的网页。
所以有人呼吁建立“标准”。
进行厂商的标准测试和配套产品的标准测试,总的测试数量就会急剧减少。而不用在很多浏览器上进行测试。但是这种想法太理想化了。
实际上,你没有办法测试一个网页是否符合标准。
标准文档极其难以读懂。
8.让错误代码显而易见
例子:跨站点脚本攻击
比如登陆注册等,输入框中写入一些内容,然后跳转到成功页面将用户名显示出来。如果在输入框中输入的是奇形怪状的html代码和javascript代码,这些代码会做一些龌龊的事,比如读出你存放的cookie信息,将他们发往一写带有邪恶目的的网站。而且这些事看上去是你干的。
所以当从客户端接收到数据后,如果要显示,先要经过”编码“处理,然后再输出。但是由一些问题:如果要存到数据库呢?
应该将接收到的内容先存到数据库,然后如果要显示,则编码后再显示。
9.编程一条通用的规则
尽量将函数写得简短
变量声明的位置离使用的位置越近越好
不要使用宏去创建你自己的编程语言
不要使用goto
不要让右括号与对应的左括号之间的距离超过一个显示屏。
10.软件发布
1.软件开发是基本规则:
确定发布日期
列出软件要实现的功能,然后按照优先顺序排列好
每当你落后于预定的进程时,就把排在最后的功能砍掉。
2.如何挑选发布日期
1.经常发布稍作修改的版本。这属于极限编程中的方法,对于客户数量较少的小团队开发项目最使用。
2.每到12到18个月发布一次。上架销售的商业软件和桌面应用程序等久是使用这种方法的例子。他们属于大型开发团队和有成千上万的用户的软件。
3.每3年到5年发布一次。常见于超级庞大的系统和平台,像:操作系统、.net框架、Oracle数据库等等。
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
小谈设计模式(23)—桥接模式
对Java设计模式中的桥接模式进行了详细解读
桥接模式 插入图片 设计模式 -
小谈设计模式(28)—解释器模式
对Java设计模式中解释器模式进行详细讲解分析
Express 解释器模式 语法规则 -
谈软件架构(转)
最近看了下《架构之美这本书》,摘录了部分书中的内容,在摘录书里面内容
开源 架构 架构师 架构设计 静态分析 -
[强烈推荐]Joel on Software中文翻译!
一个好的程序员的修炼要诀!请有时间多读读。
软件 工作 编程 学习 计算机科学 -
程序员部落酋长 Joel 之洞见
讲,每一讲都是一个独立的专题。
出版 microsoft interface api 创业