D*******a 发帖数: 3688 | 1 I am refactoring a large 10-yr old C program with C++ OOP stuff. I guess I
am the latter kind. |
|
g*****g 发帖数: 34805 | 2 There's a difference, when you get smelly java code, you can
try to refactor. When you get smelly perl code, you are better
off rewrite.
differ |
|
p******g 发帖数: 347 | 3 most of the time it works. however, it doesn't some time. and when it doesn'
t work, it will screw up things like refactoring (java), hot swap code when
attaching to remote debugger, and it is not able to detect simple errors
such as missing class method.
anyone has the similar experience? any hint? |
|
b********e 发帖数: 58 | 4 Well said and I am almost in agreement with everything here but it's hard
for me to imagining managing java code is
easier than managing python, as you might have implied below.
To me, Code flexibility and manageability is often reversely correlated with
performance. So c > c++ > java > python
on performance, and the reverse holds regarding refactoring.
Just my two cents. |
|
a*f 发帖数: 5682 | 5 If you like programing, go for it. Nothing is too late.
The following books may lay a solid foundation for you to become an
excellent programmer.
The Ruby Programming Language
Refactoring Ruby Edition
Effective Java
The Programatic Programmer
Test Driven Development explained.
Metaprogramming Ruby |
|
g*****g 发帖数: 34805 | 6 我一直觉得Eclipse强的是refactoring,以及无数插件。
assist |
|
y**b 发帖数: 10166 | 7 组里头目很迷恋python,我曾学了一阵,方便是方便,但总觉得动态类型、动态变量很
不习惯。比如一个类的实例,可以随便添加实例属性,各个实例可以拥有完全不同类型
的实例属性,好怪怪。
现在用来帮人refactor一些科学计算的程序(用python写的,用到numpy),忽然发现pyt
hon不支持多态,这对代码的设计岂不是一个非常大的限制?比如设计了10来个具有继承
关系的类来表示不同的计算模型,C++在主程序里面就只需一个基类指针就行了,
python
还得根据不同的类类型来决定创建不同的对象? |
|
r*****t 发帖数: 712 | 8 我想找一个源代码注释工具,有很多的选择,有没有比较容易用的,主要针对perl的?
最好还有一个功能就是能把不同perl script里面相关的函数关联起来,如果一个
script修改了,它会提示我去修改其他受影响的文件,类似VS/Eclipse里面的refactor
的效果。
多谢! |
|
|
r********3 发帖数: 2998 | 10 emacs/vim其实不错。其致命缺点主要在对面向对象开发的支持上。
首先是重构refactoring。只有emacs有插件支持,VIM下无法重构。重构是相当重要的
功能,而且不是靠几个快捷键就可以代替的。
其次是调试功能。emacs和vim都只能依靠GDB外部调试工具。现在很多语言,比如Java,
Python,Ruby等调试工具内部命令繁多,没有好的IDE支持,开发人员很难手工调试。
最后就是框架的支持。这点上,eclipse对于emcas/vim的打击几乎是致命的。emacs/vim
几乎没有框架支持的功能。实际很多企业开发,eclipse的用户可以点几下鼠标,就生
成一个适合自己的project,甚至连database的O/R映射类都帮你做好。而emacs/vim全
部需要自己写,起跑线上就比别人落后了一大截。
emacs/ |
|
g**********y 发帖数: 14569 | 11 Test-Driven Development (Kent Beck)
Refactoring (Martin Fowler), there is a chapter about test-driven dev. It's short but to the point. I learned a lot from that chapter, like:
- don't spend ages trying to write tests cover all areas
- the key to write test is think about features, guarantee those features are implemented as you thought
- a few good tests are better than thousands of marginal ones
- write tests where you have concern, where you cannot sleep well over it
...
When I worked for old... 阅读全帖 |
|
mw 发帖数: 525 | 12 【 以下文字转载自 Linux 讨论区 】
发信人: mw (mw), 信区: Linux
标 题: computer scientists 用vi/vim
发信站: BBS 未名空间站 (Sun Feb 19 12:53:46 2012, 美东)
computer scientists 用vi/vim,每天在各个不同的服务器上倒腾,写的都是核心的代
码,统共就那么几千行,压根不需要project management
所有其他的scientists用emacs,因为emacs是IDE for all. 写代码,调python,ess,
matlab,latex,从proof of concept到最后写paper全都可以在一个editor下面完成
software engineer用eclipse/netbean,要组织大型项目,要refactoring,一个
function可能在无数的地方被overload过,这些vi/emacs都支持不得不好
application developer, 各大咨询公司的Consultants们用visual studio。这样的工
作‘怎么编... 阅读全帖 |
|
|
p***o 发帖数: 1252 | 14
Try to put it as parameters first. If you find many member functions
are using this parameter later, then you know it should be changed
to a member. On the other hand, if one group of member functions
utilize this data while the other group don't, consider refactoring
your class into two.
来读
A popular way is to have a singleton to hold all configuration data, e.g. as
key/value pairs, and everyone else query it for parameters by name. Those
data,
as you mentioned before, could be read from a fil... 阅读全帖 |
|
g*****g 发帖数: 34805 | 15 你那点编辑效率,一个refactoring操作就全回去了。
真喜欢emacs和vi,很多IDE可以让你选key binding。
我有同事就在eclipse用vi的key binding。 |
|
m*********t 发帖数: 527 | 16 赞 refactoring 啊,神器啊。
另外那些 fan emacs 的人最好买个 hhkb 要不然等着小拇指抽筋吧。。。 |
|
r***e 发帖数: 1840 | 17 Just google emacs and refactoring, it seems emacs can do it with extension,
cedet or xrefactoring. |
|
d**********x 发帖数: 4083 | 18 我感觉linux下貌似没有什么好用的C++ refactor工具
要么就用某些java ide,半吊子,要么就用regexp,偶尔会出错,需要智商。 |
|
R1 发帖数: 127 | 19 有人说这个是C++的原故不是
refactor ,是C++的模板 |
|
t****t 发帖数: 6806 | 20 C++本来就很难refactor. VS的IDE算是不错的, 都没这功能. |
|
d**********x 发帖数: 4083 | 21 va是可以refactor的,虽然功能没有那么强。 |
|
b***i 发帖数: 3043 | 22 既然要调试,所以抄没问题。抄出问题的,都是出在不会调试上。另外java的设计很好
,package, 类,可以refactor,source control,基本不会有问题。
调试的学问大了。我当年用几个小时用dos的debug把仙剑奇侠转改了,改成遇到敌人敌
人自动死去,换场面淡入淡出也去掉。就是用debug的单步执行之类的调试功能。 |
|
p*u 发帖数: 2454 | 23
i'd say its a great time 2 do some refactoring 2 impress ur boss... |
|
d**********x 发帖数: 4083 | 24 语言encoding,地址簿,针对bbs做的一些feature,比如鼠标点击,下载文章,中英文
字体分别设置。。。
后来互相促进了好一阵子,结果现在好像俩东西还是差不多,只是我们中间做过一次大
的refactor,已经merge不回去了。。 |
|
d**********x 发帖数: 4083 | 25 语言encoding,地址簿,针对bbs做的一些feature,比如鼠标点击,下载文章,中英文
字体分别设置。。。
后来互相促进了好一阵子,结果现在好像俩东西还是差不多,只是我们中间做过一次大
的refactor,已经merge不回去了。。 |
|
d**********x 发帖数: 4083 | 26 Even for pure storage classes which never change it is still important to
use setter/getters for a more practical reason: debug.
if you simple use direct access, no logs can be printed and no break point
can be inserted for all of the acesses to the value -- in small projects you
can simple refactor to setter/getters, but in large project there will be
no practical way to do so.
Now
affected. |
|
g*****g 发帖数: 34805 | 27 另外一个变量可以是个private变量。比如有个变量a,为了方便或者效率,你有个另一
变量永远是2*a.
没有setter怎么弄?
设计模式不是讲究概率,目的就是为了decoupling。内部API随便写写还没事反正可以
refactor。一旦第三方要调用,你这么弄,一旦需要改,第三方都得跟着改代码。很多
时候这是不能接受的。
SetThisVariable( |
|
m***i 发帖数: 2480 | 28 It is not that important now, because all modern IDEs can extract an
accessor out of an attribute. You can always start with a public attribute
for simplicity and refactor the code as needed. |
|
N********n 发帖数: 8363 | 29 再看看JAVASCRIPT的笑话。总有人跟风以为JS好,其实就是一坨。
function A() {}
if (some_cond)
A.prototype.B = 1;
else
A.prototype.C = 1;
// Intellisense bomb: What does A have exactly, B or C?
JS是个耍小聪明的语言。一个OBJECT可以动态加成员,看上去很灵活。其
实捡芝麻丢西瓜, 因为这样一来IDE搞不清一个OBJECT到底是什么成员,
没法帮你Intellisense,无法实现各种TOOLING SUPPORT 如 REFACTORING
等。语言设计成无法TOOLING是一大败笔。这样是没法干大项目的,要不
怎么勾勾开始转攻DART了。 |
|
r****y 发帖数: 26819 | 30 。。。本文用了全篇互文的修辞手法,total refactoring。。。 |
|
r*******n 发帖数: 3020 | 31 emacs不清楚,vim自动补全功能不能语法分析找出method和相应的文档,没有refactor
的功能,其他方面都强于任何IDE里editor,而且支持各种编程语言,你不需要因为用
到另外一种语言,
去学新的IDE。 |
|
g*****g 发帖数: 34805 | 32 这个,eclipse之类的ide加上一些plugin,可以让你开发的时候不需要任何另一个软件
,从浏览器,到sql query,到dependency管理,版本管理。特别是版本管理我觉得是
很提高效率的。另外的一些plugin可以对某些架构的metadata做verification,比如
spring, hibernate,也许这个对非Java语言不重要。
回到editor,最重要的功能vi做不到的大约就是refactoring。 |
|
g*****g 发帖数: 34805 | 33 如果只是个key binding的话,eclipse之类的IDE都支持vi和emacs的key binding.
refactor |
|
G***l 发帖数: 355 | 34 Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP
为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而
同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python,
Ruby之类也很流行。
FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不
多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是
OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。
FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一
些我的个人体验。水平有限,思维比较杂乱,大家见谅。
写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
想到一个input,然后这个input怎么转化,操作,最后变成output。OO能让你灵活的拆
分开数据和算法并且模块化。但你只要用OO建模过,你就会发现一开始你想的就是有... 阅读全帖 |
|
G***l 发帖数: 355 | 35 Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP
为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而
同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python,
Ruby之类也很流行。
FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不
多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是
OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。
FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一
些我的个人体验。水平有限,思维比较杂乱,大家见谅。
写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
想到一个input,然后这个input怎么转化,操作,最后变成output。OO能让你灵活的拆
分开数据和算法并且模块化。但你只要用OO建模过,你就会发现一开始你想的就是有... 阅读全帖 |
|
W*******e 发帖数: 1268 | 36 下面两本书大概可以给你点idea编程内功是些什么内容(就像我前面说的编程思维应该
是超越具体语言的,学很多泛泛的语言不如攻一两个精的),当然最好先读过GoF的书
,Clean Code和Beautiful Code
Refactoring: Improving the Design of Existing Code by Martin Fowler
Working Effectively with Legacy Code by Michael Feathers |
|
g*****g 发帖数: 34805 | 37 这个你是错的,这个匿名类本身是不能复用。但你别忘了用匿名内部类的前提就是这俩
类的逻辑都绑一块了,如果说A是outer class, B是inner class。这就相当于说B是A的
一部分,你不需要拿B去给C用。AB绑在一块是可以复用的。或者说B就像A一个扩展的
private method。你不能说private method不能复用所以不该用。
匿名内部类注重的是scope,因为B不能单独使用。做成内部类可以简化public API。如
果你发现需要B给C用,再独立出来也是可以的。软件工程提倡的是refactoring。不可
能所有的设计都一次合理。情况变化了改动是正常的。追求的是改只改一个地方。 |
|
l*********o 发帖数: 3091 | 38 有些人总看别人的code不顺眼,评价是funny, shitty, even that code works fine.
自己的code也很喜欢refactoring, 甚至不惜miss deadline,端详自己的code,感觉很
美,其实他的code在别人眼里也是shitty.
open source真是个好东西,最近down了一个driver的source code,稍微调整就work的
很好,这个source code在网上已经3年多了,这期间fix了几个bug,这样的群策群力的
结晶,被他们说成,“I would not write it that way. ” |
|
g*****g 发帖数: 34805 | 39 It's good to have a consistent style among the team, and refactoring is a
good habit, which force you to have good test coverage too. At the end of
the day, however, missing deadline is not acceptable.
. |
|
|
v*****r 发帖数: 2325 | 41 i used to rely on GUI IDE heavily, and could not understand my friend doing
embedded system c programming with vi(thinking what a backward dev tool!,,
without knowing there is a guy called vim).
now majority of my programming is done with Vim under linux, and i become
very comfortable with vim and like its fast speed, and vast set of useful
command line utilities by linux, such as locate, wget, curl. I Still use
Eclipse though, when deployment environment is not linux, or when i need
function s... 阅读全帖 |
|
c****e 发帖数: 1453 | 42 团队一大,烂人就多。框架臃肿一点容忍度就高,也容易follow,从工程的角度不是什
么坏事情。如果team小,还是越简练越好。不行就马上refactor,甚至重写。来个新人
,pickup也快。 |
|
k**********g 发帖数: 989 | 43 Programmers are by their nature circumspect; because they cannot assume that
everything will work out fine. They must be prepared for the impossible,
because the impossible happens regularly in enterprise system logs.
It is the lack of automatic refactoring and profiling tool that causes
programmers to perpetuate the habit of bypassing compilers. |
|
N********n 发帖数: 8363 | 44
这一点基本上就判JS死刑了。没有严谨TYPE系统的语言是不可能拿来做大
工程应用的。这就是为什么STRONG TYPE LANGUAGE无悬念要比JS之类强。
STL的出发点在于默认程序员是会犯错的,所以在语言系统里引入严格的
TYPE机制来帮助程序员纠错。磨刀不误砍柴工,你花一点时间把一个对象
先定义清楚,这样IDE可以帮你检测各种低级错误。将来你想REFACTOR这
个程序也很容易,因为IDE知道你的对象定义即使用范畴,所以可以自动
帮你更新各种变化,即方便,又快速,还准确。
反观JS等DYNAMIC LANGUAGE,基本上就是耍小聪明结果做大应用时捡芝麻
丢西瓜。看上去开发很快,但是因为缺少TYPE检测很多低级BUG带到运行时
刻爆发。开发上省的时间都花到调试和维护上了,这实际上是ZERO-SUM,
一个朝三暮四、朝四暮三的SHELL GAME. 几千行的小程序没多少调试和维
护需求。程序量一旦上去了问题马上就爆发。
这一点在JS上体现的更明显。JS从一开始就是一个SINGLE PAGE LANGUAGE,
连个NAME SPACE的概念都没有,因为都是SINGLE PAGE... 阅读全帖 |
|
d********g 发帖数: 10550 | 45 code refactoring不需要动界面的,这个太常见了
写。 |
|
g*****g 发帖数: 34805 | 46 换个架构refactoring常见,换个语言重写很少见,那是好些年的代码都得扔了。
就冲job security,阻力也不是一般的大。 |
|
g*****g 发帖数: 34805 | 47 你觉得而已,Eclipse的refactoring强过VS无数倍,可以在所有的主流平台上跑,VS可
以吗?
Eclipse 55M 行代码,无数的开发和使用者,原来只是个不成器的IDE,你跑火车还可
以更
离谱一些吗?
退一万步,VS再牛逼,难道是Delphi写的?你简直语无伦次了。 |
|
p********o 发帖数: 640 | 48 现在的是有很多 API
API 里面会 call 其它server的 API 也会读写本地database
有没有这样的 tool
给API一个weight
scan一遍code 就可以得到 这个 API call的 access database 或者 其它server API
的子function的 weight |
|
z*******3 发帖数: 13709 | 49 如果真有完美的解决方案,那项目就不会失败了
tech lead什么你也不用想得太牛
都是普通人,好的架构师跟恐龙一样稀少
慢慢换的意思是,你可以先把现有代码做一个wrapper
暴露接口给其它语言,比如java的jni就可以调用
然后再在这个基础之上,把所有后续的开发转到java上去
再慢慢对现有的代码做refactor
这是一个漫长而且痛苦的过程
现在delphi程序员是很难找,这是现状
没有办法 |
|
t*****n 发帖数: 4908 | 50 这事情我干过。根本不用学什么新东西。就用dephi好了。pascal的语法没什么难度,
看一天就行了。已有的代码没问题就不要改。fix bug还是用pascal。大规模的新开发
再考虑新语言。混合编程也是挺麻烦的。
refactor到java工作量巨大。如果有牛人,不如写个新的。 |
|