从这个论坛开始办这个板块就几乎没正面回复过什么,但平心而论,看的最多的板块也是这个。但从没有发表过自己的看法,因为任何一个人在今时今日都可以成为一个程序员。而在看了很多国内的程序大小论坛后,养成了一个习惯,不敢在论坛里做正面的回复,甚至不回复,乃至连文章也不写。为什么今天破例了?因为被很多新人的那种态度所打动,因为他们真的很诚恳的在学。
罗哩叭嗦的前言到此为止。我说一下我个人经历在先,我做过PPC的项目经理(可能现在改名叫WM),也在塞班智能系统刚开发之初做过一些商业项目等等等等都和嵌入式有关。但我一直认为那个时候的我的开发都是不成熟的开发。为什么?因为和很多新手一样,陷入一些误区。就是到底什么是开发程序?这个错误大家常犯,为什么开发程序,是一大堆数据处理,从第一个程序诞生到今天,程序就是一大堆的数据处理。而其实很少的国内开发人员考虑过这一点,因为他们大多考虑的是自己的饭碗和升职。所以他们忽略了最基本的东西。而多数国内论坛也把这些东西认为是无需讨论的。而那个时候的我也是。
为什么我在文章的一开始就提到了一大堆数据处理,那是因为数学。可能看到这里大多数学生朋友都会笑了,数学我很强。如果这样想,这样你和我以前的我一样又进入了一个误区。这里我还是以我自己说一个例子,我在美国上calculus,在上之前,我本来不想上的,因为高数什么的我都很轻松拿到了高分了,这calculus算什么,对于中国人来说,简直就是智商的侮辱,而且第一次Quiz和Midterm也证明了我的想法,多数的外国人的均分就60多,而中国人几乎都是85以上。而在这成绩背后我却发现了一个问题,就是题目我们都会解,但老师为什么一定要反复的证明趋向于一个数字,他写了满满一个黑板的2.0 ,1.999,1.998,1997 趋向于0 ,然后他又写了从-.2.0,-1.999趋向于0.其实那时的我认为老师很傻,有必要吗?你做这些些不会改变定律,也不会改变任何结论。而且定律大家都已经知道了。后来我在上完后,找到了老师,问他为什么你要这样写?她开始笑了,然后对我说,其实过程比结果更重要,而她个人也认为在这些过程中,说不定哪天她会看到一个,那个就是一个很tiny的一个数字,他的趋向可能会不同。其实她说完这些我还是没理解,而且我还是认为她很stupid更多的是古板。但当我完成所有的理科科目后,我终于有了很微妙的转变,那就是哪怕是一个简单的结论都需要去自己证明出来,因为说不定哪一天我也可以去推 ×翻这个定律,因为我发现了一个很tiny的错误。 我想了半天,我决定用这个例子,因为这代表了美国和中国文化的差异,没有那一方是对的,或者错的。只是个人如何去看待这个问题。
而这也是为什么要学习离散数学和线性代数和高等数学甚至物理,如果你实实在在的从根本上了解了他们,你的开发程序技能已经是有一定水准了,哪怕你就是不会C。而这个例子的证明,在国内很多,比如很多清华的数学系和物理系的学生,在phd或者master转入了CS(计算机技术)专业,他们会有很大的发展空间,而往往都是这类人比从一开始读CS的人取的成就要高。
可能看完上面你已经灰心了,因为你的数学不好。数学是一个捷径,如果我们没有这个捷径,我们还有创意。这说起来好简单。看看国内软件行业就明白,没一个有创意的软件,在说远一点,你用百度去搜索一个技术参考,可能有1000到2000个结果,但可以很负责的说这1000到2000个结果都是重复的。如果你把这个keyword打入google美国服务器。我也可以很明显的告诉你,他的重复率低的让你难以想象。为什么搜索结果和创意联系起来。因为抄袭首先扼杀了创意,而什么是创意,那个不是高深的理念,更不是什么多符合数学或者物理逻辑的东西,那个是一个纯粹的想法。
而多数的程序员在有了好的想法之后,就开始束缚起来,要加密,要如何创业快速赚钱。呵呵,很符合中国特色。其实一旦当你在最初阶段就把你的创意捆绑上这些附加的东西之后,他就开始陨落了,除非你有很强大的公司做支持,比如Google或者MS,或者Apple.所以有了好的想法后,不惜代价,勇往直前才是一个程序员的信念,哪怕市场就是不好,先把他完成,在一段时间后,说不定就会被注意,in other words.哪怕就是不成功,没人注意,对程序员本身而言,这也是一种经验的累计,因为只要你去写代码,你就会发现你需要的知识很多。 那怕就是一个小的semicolon(;) 摆的位置发生变化,在程序上,也有可能发生质的变化。therefore, Just do it if you got good idea.
说了2个大前提,让我们开始进入一些开发细节。我看了多数人喜欢问这个一个问题,我要具备哪些语言才能开发apple的程序或者java的程序。
in fact, my answer is nothing. 做java开发也好,做objectC开发,乃至php什么都好,C不是必须的基础.in other words, 你会C和不会都一样。而为什么有很多人强调无论学什么你都要会C,这个论调在国内很多,他们说没错,因为可能他们老师是这么说的,或者他的学长或者学姐也是这么说的。但其实,国内多数人都没给出一个为什么要学C的理由,其实看多英文书后,你就知道了,C是一种Thinking, 我并没有去翻译这字,因为Thinking代表很多,不单单是解释他是一个想法。thinking包括你的文化,包括你的个人经历,甚至你对其他专业的理解。而我个人的理解对C就是,他是一个做大型程序的基石,而对于你只是完成一个普通程序,可要可不要。因为现在的计算机英文开发教材都是属于解释性的,什么叫解释性,就是作者把那些枯燥的东西用他们自己的经验和实力通过最简单的语言给你解释了一下。所以你不需要任何其他基础, 只需要和twitter一样,去follow以一个你喜欢的作家,但找到这个你喜欢的作家要花很多时间。
而开发语言,真的无太多话可以说,你只要去记住那些就可以了,OOP就那么点东西,说来说去就是继承,多态,封装这些。最难的也就是C++,因为他只是一个不全面的OOP,或者不完善的OOP,所以他难,因为没完全遵循OOP的规则或者原理。 而相对java就容易很多,因为就是一个存OOP。而了解 OOP的人,或者你真的掌握了他的精髓后,你会发现她是一个合理的东西,而不存在难与不难,就等于Thiniking in Java里作者反复说的一些句子,万物皆对象。而这个对象就是我们在现实生活中天天遇到的,再打个比方,你对你的另一半有些基础的要求,比如是男性是必须,然后要20岁以上,太小不行,则就是你的field.而有了field就是需要一些function,比如这个男的需要有钱,所以他能赚钱这个function是必须的,当然能实行人道这个function也是必须的。就这么简单,OOP基础就这些,在深入一些,也有很多,花个2到3天时间就掌握了,所以不要一开始就问难不难。请记住,在中国这么艰难的环境里,你都能生存下来,还有什么可以算得上是难的。
(续待未完)
而如果你有C的基础,其实还是要看一下ObjectC,因为很多定义还是有一定差别,就等于你会C++,可能也用了C++多年,但你刚接触java的时候,你也要难免有点不适应,比如继承里,你不能继承多个base class,而且要使用interface,而更具体的,逻辑方面的东西更现实化,比如instanceof(),例子有很多,但说白了就是更方便你快速开发。既然这里说到了快速开发,我在这里就展开这个话题,作为一个新手,不要考虑太多,用现有的你的资源去把你的想法去实现,那怕就是VB也好,不要太在意我今天学的这个java是不是过时了,或者ObjectC是不是太不可移植了。请在你脑海中一定要放弃这个概念,任何东西都会过时,但Thinking是不会变化太大的。而我们要master或者要handle的是Thinking.
多讨论,这个是我在美国学到的另一个东西。其实任何人都可以讨论,我的另一半是学生物的,对计算机编程是完全不懂,但我很喜欢问他,你认为这个如何?他经常的回答很让我生气,比如他自己的项目有时候,其他人是用java的写得,他的浏览器没装可以打开java程序的东西,他就会很愤怒,为什么你们这些做程序的不把问题简单化。我当时也很气愤,人家用java写有什么不对,但我静下心来想想,他就是一个最总端的用户,虽然他的要求不符合计算机原理,但最起码他对这个程序是感到厌烦了,而那个用Java写的人,完全可以用ajax加php 做改进,这样就把这个问题让非程序员更容易理解。最起码容易打开。所以和任何人去讨论,去聊天,你会得到很多东西。而那些东西是你一辈子在书上学不到的,但肯定会让你的程序更贴近用户。如果你和可以和你奶奶(前提你奶奶会电脑)多聊一会,他们也会给你他们需要什么样的程序,而不一定要到处找灵感,因为灵感就在你身边。
最后一点就是讨论后的认同,国人很不喜欢认同别人,总是会认为自己比别人有本事。但在来美后,我也开始逐步的去承认别人这在以后的team work中很重要,国内的team work不多,所以很难体会到,一个组员,一个手下,他们都会有他们的想法,而一个好的leader甚至manager,是需要过人的包容力,而这个包容力的基础就是去认同别人,因为他们会在任何的一个时间点上说出一些你不知道,或者你没想的提示,而这个提示可能就是你的软件项目的转折点。
本篇完结,我的结语就是:虽然社会很让你无奈,但作为一个“人”,做任何事情,都要先尊重和了解身边的一切,这样你才能成为一个人,最少也是一个对别人有帮助的人,而程序员就是用程序去帮助人。而不是停留在在我满足的层面。
分享到:
相关推荐
作者从事了多年的软件开发和培训教学,非常清楚那些容易使新手困惑的问题,在学习过程中会碰到的拦路虎,作者结合了多年实际开发与教学经验,收集了众多学员在学习中常提到的问题,对平时讲课的内容进行了精心整理。...
描述中的“pcb设计经验 高手多年的积累 新手垂手可得”进一步强调这是为新手提供的一份宝贵资源,包含了一位资深设计师的实战技巧和心得。 PCB(Printed Circuit Board)设计是电子工程领域中的核心环节,它涉及到...
### LibSvm 使用过程心得 #### 一、LibSVM简介与重要性 LibSVM是一款广泛应用于机器学习领域的支持向量机(Support Vector Machine, SVM)软件库。它由台湾大学林智仁教授领导的研究团队开发维护。由于其高效且...
此外,作者还分享了在专业游戏开发领域多年来积累的一些小技巧和心得,并期望将来能够体验读者使用Pygame创作的游戏作品。为了更深入地学习Python和网络编程基础,书中还提到了配套的电子书,以及更多进阶的编程资源...
在“心得”部分,作者分享了自己在多年编程实践中积累的宝贵经验。这些心得不仅仅是对编程技能的总结,更是一种思维方式的培养。例如,在实际开发项目中遇到的各类问题,如代码的耦合性、可读性、复用性等,作者通过...
然而,在这个过程中,国内开发者面临着诸多挑战: 1. **中文资料匮乏**:高质量的技术文档大多为英文原版,这对于英语水平一般的开发者来说是个不小的障碍。 2. **语言障碍**:不少开发者对于英文文档阅读感到困难...
作者从事了多年的软件开发和培训教学,非常清楚那些容易使新手困惑的问题,在学习过程中会碰到的拦路虎,作者结合了多年实际开发与教学经验,收集了众多学员在学习中常提到的问题,对平时讲课的内容进行了精心整理。...
首先,我想说的是关于编程入门的一些心得体会。记得十年前的我对于编程充满敬畏,但事实上,要成为一位程序员,并没有想象中那么困难。我的第一个建议是,不要害怕开始,不要因为担心自己不够聪明或者不够有天赋就...
David Golding是一位资深的软件工程师,在Web开发领域拥有多年的经验。他不仅擅长使用CakePHP进行开发工作,还经常参与社区活动和技术交流会议,分享自己的心得体验。 #### 五、总结 《Beginning CakePHP: From ...
由于具体内容部分无法直接解读出明确的技术知识点,因此,我们将围绕“技术图书”这一主题展开,尽可能地提供一些与技术图书相关的知识点。 ### 技术图书的重要性和选择 在IT行业中,技术图书是技术人员学习新技能...
这篇名为“编程经验总结”的文章,无疑是这位程序员将自己多年的心得体会提炼成的一份珍贵指南。下面,我们就来详细探讨一下这个主题中的关键知识点。 1. **代码规范**:良好的编程习惯始于代码规范。遵循一定的...
作者强调了内核学习的科学方法,认为有效的学习策略应该包括全面了解、掌握基本功、兴趣导向下的深度钻研、融入社区做贡献以及坚持不懈的精神。书中详细解释了如何分析内核源码,包括利用`KCONFIG`和`MAKEFILE`寻找...
1. **经验分享**:作者将多年的技术积累和实战经验融入书中,使得读者能够在理解理论的同时,掌握解决实际问题的方法。 2. **深度解析**:通过对每个主题的深度剖析,揭示了C++ Builder与Windows操作系统交互的底层...
- **Dan Orlando**:具有多年 Flex 和 Flash 开发经验的技术专家。 - **John C. Bland II** 和 **Joel Hooks**:两位资深开发者,他们在 Flex 领域拥有深厚的专业知识。 #### 五、Flex4inAction 内容概览 - **涵盖...
资深业内人士周浦看花在其著作《软件集成By周浦看花.pdf》中详细阐述了软件集成在汽车行业中的重要性,并分享了他多年来在汽车电子控制器开发中担任软件集成角色的心得和总结。本文将对这份文档的内容进行总结,并...