lsstarboy 发表于 2013-08-15 20:29

哈哈!一楼的例子很经典!

我上班有五六条路可走,用了近大半年的时间来测试哪一条最好走,老婆成天叨唠这是程序员思维!

mcyeah 发表于 2013-08-15 20:58

本帖最后由 mcyeah 于 2013-09-01 20:17 编辑

程序员最重要的思维模式是抽象!!   抽空展开写
今天得空,展开说下,都是一些自己的感悟和理解,欢迎讨论!

1、您平时是如何训练您的程序员技能和思维的?
    在谈这个问题之前,我想要先阐明几个事情:    (1)程序员≠打字员,打字员可以是一个机器,但是程序员是一个有思维能力的人。作为程序员,我们的作用是用计算机来解决问题的(如果夸大一点,那我们是来拯救世界的,而计算机就是我们的武器)!所以永远不要把程序员想成是一群整天对着电脑,一直干着重复工作,不用很多思考的打字员!也就是说如果你是一个每天只是按照详细设计文档的要求,把代码正确的输入到计算机里面的人,请你不要说你是程序员!
    (2)程序员的思维,程序员的思维就是抽象,这个上面已经说了。因为我们是要来解决问题的,但是现实世界中的问题是多到无法想象的,所以程序员其实用一个早已存在的职业表达,那就是翻译。而这个翻译所做的工作需要分为两步来走,一是把所面临的问题统统抽象出来,抽象成能够通过计算机来实现的东西:数据结构+算法;二是能够把数据结构+算法抽象成一种计算机可以认识的东西,这两部也就是通常所谓的设计与实现了。
   现在来谈谈程序员的技能和思维训练,前段时间看《软件随想录》这本书,里面的作者就非常喜欢天才的程序员,所以他认为如果要成为一名优秀的程序员,一定要有天赋。这个观点我是比较赞同的,但是同时我认为其实世界上并不仅仅需要优秀的程序员,世界上还需要一些普通的程序员来完成一些些不是那么伟大的细微的工作。对于这些普通的程序员而言,我们可以通过思维训练来慢慢培养自己的抽象能力,向着合格程序员的方向迈进。(这里,我认为优秀程序员应该具备的特征是:发明了一个或一些新的算法,能够解决很多普遍的问题;发明了一个或一些数据结构,能够为很多问题提供抽象;发明了一种解决问题的框架,运用这种框架就能够解决很多问题;当然其中最深邃的思想可以借鉴一些他人的,但是一定有原创的成分在里面,然后解决一些很突出的难点问题)。
   根据上面的描述,我们普通程序员能够进行的思维训练分两个部分:
    (1)把现实问题抽象到计算机域。
      首先,平时把很多遇到的事情都想一下,如果我用计算机去做,我会怎么设计。这种例子很多,比如我在玩儿扫雷游戏的时候,我想想,这个可不可以用计算机来解,怎么设计。
      其次,由于自己不是天才,所以会看很多牛人写的书,把书中的一些精髓的思想记下来,不懂的就慢慢领悟。
      再次,多提问题,对于一些生活中的所遇到的事情多问几个为什么,什么情况,尤其是别人在解决问题的时候,会得到一些启发的。
    (2)把计算机域的内容灌输给计算机。
      首先,多理解计算机的工作原理,懂得在程序里面写一行之后,计算机会做什么,这有时候需要钻到汇编里去分析自己写出来的程序。
      其次,多做练习,多去实现自己遇到过的数据结构和算法。
      再次,理解多种编程泛型是怎么在计算机上面工作的,怎么优化自己的代码,怎么提高效率,空间的,时间的,多去思考。

2、举个例子,说明您在程序设计中遇到的问题并如何运用程序员思维来解决的。
   一下也想不起来一个很好的例子,就以前几天自己碰到的一个问题来说明一下吧。
   前几天,我想从一个图片网站上下载一些图片,然后把他们转换成一本PDF格式的书来看,我要怎么做。首先我要想到的肯定是用什么数据结构来把这些图片的URL存下来,然后又用什么方式把这些图片也存起来,当然,这个问题很简单了,直接用数组就解决了。其次要解决的是怎么下载,我要求速度,所以要有多线程,所以要先把URL的数组拆分,然后新建线程来执行下载。至于如何把图片转换成书这个问题,用现有的软件解决就可以,不重复造轮子了。通过这样的思考,我基本就把这个问题抽像到计算机域了,也就是说数组+拆分+遍历下载。下一步把这个抽象转换到计算机能认识的程度——用程序设计语言来写程序。这里我选择了一门非常易用的语言——C#,实现过程就不讲了,就是Web请求与应答的处理,然后字符串处理,然后... 大家爱应该简单看看就都会了。
3、作为老鸟,你对程序员新人有何好的建议?(别说转行啥的啊:)
   (1)多了解计算机底层的工作原理,越深入越好
   (2)多编程、多思考,脑细胞不会白白浪费的
   (3)多看书,尤其看一些有思想的牛人写的书
   (4)遇到问题多问问人,会使自己少走不少弯路,也许突然间你就顿悟了
   (5)虽然不让说转行,但是,如果你不能爱上那种用计算机处理的方式来解决实际问题带来的满足感和那种像一个把握全局的大神一样来操纵计算机去做自己想要做的事情所带来的痛快,那还是干别的吧,因为你不感兴趣,而兴趣是最好的导师。


mcyeah 发表于 2013-08-15 20:59

回复 15# craaazy123


    呃。。。这难道不是everybody的人生吗?!

wonghoifung 发表于 2013-08-15 23:24

1、您平时是如何训练您的程序员技能和思维的?
努力工作,端正工作态度,持之以恒,慢慢你就程序员得不得了了。。。。
再多的说法教条只会增加心理负担,顾此失彼。。。
思维这回事传授不来,工多艺熟。。。。

2、举个例子,说明您在程序设计中遇到的问题并如何运用程序员思维来解决的。
我都不知道这算不算程序员思维了,设计中遇到问题如果是指设计到一定程度的时候发现有矛盾或者绕了弯路,只能从头开始拆解问题,排除之前导致矛盾出现的点,一遍一遍的知道事情办好。

2、作为老鸟,你对程序员新人有何好的建议?(别说转行啥的啊:)
不想说你要多有热情什么的了,我见过太多很有热情但是没有毅力的人了,或者很有野心但过于浮躁的人。。。程序员刚开始确实需要热情来引导你,但是让你一直做很久直到成为一方面的专家,靠的永远是态度和长久的毅力,你勤奋淡定,写代码也就那么回事,除了那些天才,他们激进甚至性情古怪也能成就事业,但那是天才。。。普通人还是端正好你的态度,不要妄图急功近利,如果你是想成为技术专家而不是企业家,慢慢把代码写规范,慢慢调试吧。。。转行未必保证你更成功,最多只会让你不用承受那么多加班,要成功,良好的个人素质是最重要的

forgaoqiang 发表于 2013-08-16 01:49

我旁边一个小哥整天唠叨我的山寨程序写法 一个劲的给我说要抽象抽象 当时我就想抽他。。。
抽象是思维 真正出东西还得实打实的来~

回复 22# mcyeah


   

流氓无产者 发表于 2013-08-16 09:17

卖油翁,惟手熟尔,其他都是扯淡:-L

liren_sky 发表于 2013-08-16 11:12

:em48: :D 回复 15# craaazy123


   

liren_sky 发表于 2013-08-16 11:13

实在话!深表同意!回复 25# forgaoqiang


   

forgaoqiang 发表于 2013-08-16 11:22

哈哈 估计这是程序员的职业病吧 总是喜欢推销自己喜欢的东西~~:emn14:

回复 28# liren_sky


   

tomac_cu 发表于 2013-08-17 19:26

1、您平时是如何训练您的程序员技能和思维的?
    程序员就是上帝!在CPU为核心的世界创造奇迹。
    但凡你要做上帝,你就了了解你所做的是什么。
    所以你必须要知道汇编,知道累加器,知道史密斯触发器,那么你才算是一个相对合格的上帝。
    因为只有这样你才知道,上帝可以做什么,在怎么做。
    想要训练程序员的思维就是 more and more ,让自己了解的更多一点。

2、举个例子,说明您在程序设计中遇到的问题并如何运用程序员思维来解决的。
    比如我在遇到一个项目中,需要在unix环境下,使用httpd的功能,要在版本,性能,价格上做出一个权衡。
    因为我深入了解一切,所以我选择了自己写一个http服务器,实现了高性能的http服务器
    对外可以象任何一个web server那样工作,而逻辑的处理是用C++实现的。
    所以一个合适的程序员就是一个初练的上帝。
    不要担心一切,程序员的未来就是先知。
    只有了解了更多的数据,你就可以掌握自己的命运。

3、作为老鸟,你对程序员新人有何好的建议?(别说转行啥的啊:)
   了解更多的硬件细节有助于你优化代码。
   程序员就是上帝在计算机世界的牧师。
   记得简单就是最好,哲学是好的程序员一生的归宿。
页: 1 2 [3] 4 5
查看完整版本: 没有天赋一样可以成为顶级程序员!像程序员一样思考!(获奖名单已公布-9-11)