主题:【原创】也来说说Linux和Windows下的开发感受 -- 昔杨今雨
不单是编程。
哈,这个名称俺还是第一次听到,不过用来形容C语言不是很适合吧?
这个词不是我发明的,专门用来形容那种一个函数动不动就几百,上千行的风格。
我看过一个python程序员也是这么写东西的, 比较头疼, 外人根本看不懂。
老兄如果有时间的话,可否单独开个帖子,介绍下关于编程风格的东东,比如介绍下老的编程员是如何安排上万行代码,如今良好的编程风格应该是什么样的等等,我想这应该是一部侧面的历史了,一定很有趣。
因为我们这些外行,最多写个几百行实现几个功能就可以了。但有时不得不遇到别人的专业代码要读读,对于这点及其头大,比如他们所有函数放一起,所有class放一起,或是单独开好多文件,然后在统一编译,还有什么makefile什么啦,还有些默认的写法啦,哦,云里雾里,这些都是我们这些外行想了解的,老兄如果能写写,不胜感激。
这个已经不是一篇文章可以讲清楚的,甚至直到现在,我对这个问题的基本态度都是,可能的话,重写,呵呵。
另外,国内环境所迫,很多程序员有故意写这种风格的代码习惯,这样可以有效保护自己的个人利益,虽然很无聊。
兄台虽寥寥数字,但却已使俺顿开茅塞,多谢多谢。
所以专业人士也有烦心之处,别人用这个语言写的,虽然不是你擅长,但你必须接着写,别人是这个算法思路,你必须接着这个思路走,哈,谁让你是吃这碗饭的呢?
读懂别人的代码,除了底层的基础知识, 算法,很多时候还和思考问题的习惯有关系。
某些语言,类似ruby这样的,语法就是冗余的,同样水平的程序员,都会可能有n种实现方式,张三的习惯,李四可能一辈子都不会用, 碰到这种代码头最大,不过也蛮有趣的。综合来说,还是java的代码最好维护。
实在绕不过去的代码,我可能更喜欢小步重构,一小口一小口的吃,这要依赖于工具了。
你做c的么?我都10年没碰过着玩意了。
或者你先搞点名声出来, 那还差不多。
现在回头想想,中国的高等教育比较搞笑,根本不是计算机教育,而是计算机培训。
现在估计除了top5的学校, 一般连培训都不搞, 我接过一批毕业生,居然告诉我大学4年连课程设计都没做过,
全靠自觉。我面试过一些top10 出来的,4年啥都没学,就打字和qq很熟练,呵呵。
不过软件开发么, 只要不是基础理论研究,还基本都是靠自己吧, 大学主要是提供一个交流平台。
最近正在琢磨是不是去正规上个学,接受一点科班教育,又觉得人过三十不学艺,矛盾。
折杀小弟啦!!! 小弟可是是外行中的外行啊。小弟编程兴趣的起因着实让所有人匪夷所思。倒是主要用C/C++来实现、验算一下产品物流中的算法,因为都是外行,所以最近在学Win-Api,希望达到些图形效果,让兄台或专业人士看了,无异于过家家罢了。不过我接触的人好像都在用VB,俺算异类,哈。
java因为当年课程需要必须学,哦,耶!!!老兄那句话真牛:
"我认识一些有10年左右c经验的程序员, 转换到java这块来说非常辛苦,因为思维模式无法转换。"
那些程序员都辛苦,而况我乎!"java凡事class",当年实在痛苦自责之极,这句话解开了我当年的另一困惑,再次谢过啦!
不过要是思维模式换了,另当别论了。我现在认识一哥们(他只用Linux和Python),他说的和兄台一样,java的语法逻辑严密,非常清晰。
什么是小步重构?老兄也有绕不过去的代码?是算法思路吗?
专业技术人员熟练掌握1,2本程序语言也是工作需要,很自然的。
c程序员转换困难是因为很多人已经习惯了过程化的考虑问题方式,再加上早些年对软件工程,代码维护这些研究的不多,做东西很少考虑维护和架构方面的东西,思维模式基本都是线性结构的,分不了层次,形不成立体感, 那么要转到oo的方式考虑问题自然非常的痛苦,一部分c++程序员也是。
老实说,你要是干的是你说的那样,我觉得c/c++确实不是好选择, 主要是考虑维护性(专业程序员和业余程序员的一个重大区别也在此),语法太复杂太灵活的东西都不适合维护,用的人少,维护就更困难,代码毕竟是需要交流的。你倒是可以考虑转c#看看, 语法比java灵活,结构要比c++严谨。 最重要的是懂得人多,容易交流和维护。这样你可以把主要精力花在解决专业问题上。用vb写程序其实也没啥不好, 我大概用了2,3年吧,不过这种不是真正OO的语言用起来约束比较多, 后来再回win平台就换c#了。
我10多年前花了很多精力学习c,曾经把dos下的所有外部命令用C重写了一边,当时清华厚厚的一本程序集也全部吃透, 但是到现在,我啥都不记得了, c++也是,10年中陆续学了3,4次, 每次都是半年不用就彻底忘记。这类语言确实不适合懒惰,缺乏耐心,又不喜欢追求细节的人。我一直都是那种很不勤奋的人, 所以学东西不扎实,复杂点的东西我很容易忘,呵呵。
不管你用什么语言做开发, 我都建议你找重构(Refactoring)这本书看一下,对你怎么组织程序结构,怎么修改别人的代码会有很好的帮助。 另外代码大全, 编程珠玑这种描述程序代码规范和风格的书也很值得一看。
C#看过大体介绍的书,还是OO的思路,并且和 .NET的联系最紧密。但毕竟还是外行,譬如java学过半年,随便一个什么几十行小程序,都很费劲。这种OO编程真是痛苦,更多情况下,别人把这个事件定成个Object,而我的思路是认为把那个事件定为Object更逻辑些,然后再跟着他的思路往下想,哦,除了痛苦就还是痛苦。不像C++,实在不行就重写,我想用指针就指针,想用class就class,算法一有,然后基本上就如同打游戏一般。因为我们这种几百行的小程序,即使重写也很轻松。
用在工作中的编程知识已经远远够用了,我更多的爱好就是业余,学学高手解题的算法,每有感悟,就自叹不如:这道题还能这么解?像我以前请教河里的高手解24点问题就从中得到很大的乐趣,就当打游戏啦,哈,毕竟是票友。
有语》听君一席话,胜读十年书。多谢多谢,这就找来看看。
其实当年我也不懂Lambdal Calcul,然后在google上搜来搜去只有上海交大一本超级简单的英文讲义,让人极度失望。后来听说清华也在教,不知道其它学校有没有教。
软件开发么,自觉和兴趣是很重要,但是普通编程可以自学并且可以胜任,但有些知识不是自学能完成,比如算法、比如编译原理、比如硬件编程、比如lambdal Calcul、比如数据库底层数据结构设计、博弈论、CAD软件设计、VLSI、DSP、操作系统内核设计、POSIX,etc。。。不过中国软件比较浮躁,底层东西又难开发又有盗版,就连应用软件也是just so so,所以不需要学的深的编程人员,付不起那份工资也没有那个习惯。
至于你么,如果是真心喜欢编程又有余力和时间的话,不妨去学点东西。如果一心只是想要更高薪的跳板的话,那还是算了。
我和你相反,算法丢了好多年了,现在有需要头就比较大,最近又开始翻数据结构。
其实OO相对于过程化语言来说,他更简单,更加接近现实世界的结构,当然从另外一方面来说,他比较适合表示各种复杂的交互关系。
而你只需要研究算法,一般写的代码都不太长,就不需要体会这一个层面的东西了。
考虑你的背景,我觉得其实你应该比早期的那些c程序员更容易转换, 你把oo的概念和现实世界处理问题的模式挂钩就可以了。现实世界里,我们分析问题的模式一定是分解, 把问题域粒度化,层次化和立体化。 那么这个粒度就差不多是对象, 层次和立体化就是对象间的组织关系和关注点。我想你看完重构以后会对粒度化这个问题有更好的了解。至于你说的那个对象问题,其实是个人视角的差异,这个早期并不需要太多关注,写的多了,自然就明白什么是最合适的了。
另外c#因为ide的关系,你完全可以像vc或vb一样使用,不需要琢磨对象这个概念, 不过相对你的工作需求,好像也没什么优势,呵呵。
你是在物流公司工作还是在商学院之类的地方做研究?我怎么记得搞研究的是有专用系统模拟方面的语言的。