level 10
程序员可谓是我曾见识过的最为乐观的一群人了。而且,很荣幸地告诉你,我也是其中一员,嘿嘿!
但是我绝对没有贬低其他人的意思,我的意思是我们程序员只是凡事都习惯性地会往好的方面想。项目、技能、技术、规格、以及各种的未知因素……
特别是一些未知的因素——因为无法预测,所以可能随时会出现问题。变量实在是太多了。
有时候我们觉得自己完全能在一小时以内完成任务,但是却因为突发情况导致不得不忙上一整天。
但是作为程序员,我们总是设想为最简单的情况,甚至是在需要考虑PI的条件下也是如此。
还有一种职业,也常常需要给出各种不确定的猜测——医生。但是,当医生预估错误的时候,很多人常常会觉得很开心,有木有?
2016年03月22日 04点03分
1
level 10
至于程序员的预估
我需要做一个网页分割算法,目的是决定一个网站中哪部分是标题,哪部分是侧边栏等等。这是一个很有意思的问题,因为任何人都希望主要内容能做到生动有趣。
该算法在本周早些时候开工,要做的就是合并结果返回给原始的HTML,以便于利用这些信息。
“星期五早上就能搞定!”我信誓旦旦。
但是其实这真的很难的好不好!因为需要用的是我最讨厌的编程语言(Java),相关的经验一点也没有,这种范式也是我不喜欢并且以前都是尽量避免的,再则这个库也是我在两周前刚开始接触的。
但是我相信自己哪怕并不完全理解这个任务,周五上午肯定能交工!当我预估项目完成时间的时候,这个想法就这么自然而然地映射在我的脑中。我的第一反应就是这应该没错,因为我是一个资深的程序员嘛!
但是,我并没有按时完成!
一开始,我不明白什么是boilerpipe的对象层次——我花了很多时间就为了扩展特定对象的相关功能。
接着我发现我使用的HTML解析器是线性的,所以没有明确的方法可以确定哪些子节点属于什么父节点。
最后我几乎将所有的时间都用在了将计算结果添加到HTML中——在DOM中的每个节点前添加数字。
我的个神哪!
2016年03月22日 04点03分
4
level 10
乐观的程序员
当你和一个程序员交流的时候,最好谨记,这个群体都是乐观主义者!是的,即使是最最心灰意冷、总是四处碰壁的老程序员也经常出奇的乐观。因为我们是这样一类人:
总是研究技术方案会改变的项目
使用一堆未知的工具,然后应用于未知的领域……直到win
每一个新项目的环境各不相同
每隔几年就需要更迭所有的工具
如果你不够乐观,那就无法作为一名程序员存活下来。
话说,其他行业的人,能像我们这么乐观吗?
2016年03月22日 04点03分
5
level 10
有一次看到来自Instagram用户findheart的话:
程序员是一个懂得享受生活的群体。每几个月或者几周,他们就会庆祝一个叫“Deadline Eve”的节日。在这一天晚上准备大量的食品饮料,通宵达旦地工作,并互相致以“下个milestone绝逼不再拖延”的美好祝愿。
我从这个笑中含泪的小段子看到了程序员的一个特点:乐观。
是的,你没看错,乐观,就是乐观。
程序员是我见过的最乐观的一群人,这也是我作为一个程序员回顾自己的开发生涯时发现的一个秘密。
要知道,程序员的生活充满未知:未知的项目,未知的语言,未知的框架,未知的工具,未知的进度,未知的天坑,未知的Bug,未知的交付日期,未知的绩效评估,未知的KPI……
So,在这种茫然四顾一切皆不可知的环境中生活,你要是不乐观,你绝对扛不住,你根本不可能见到明天的太阳。因为,未知会产生恐惧,这是人之天性,恐惧堆积多了人就会崩溃。而伟大的程序员,坚韧的程序员,不可思议的程序员,拥有超强耐受力的程序员,倍受蹂躏仍踯躅前行的程序员,不但奇迹般地在这个非人的环境里存活了下来,还每天乐乐呵呵屁颠屁颠的,这不是乐观是什么?还能有哪个群体如此乐观吗?
2016年03月22日 04点03分
6
level 10
当程序员在白色的电脑屏幕上写下“printf (“Hello World!”)”时,他确信,只要按下 CTRL+R 或者点击运行按钮,黑黑的命令行窗口就会对他们说“Hello World!”。
是的,就是这个样子。当你写下“Hello World”这句骇人听闻的咒语,电脑绝不会用“Goodbye World……”这句更震撼人心的话来回应你。
我们程序员面对的世界是0、1 世界,简单而直接。我们在软件开发的世界里徜徉得越久,就越容易受到这种逻辑思维潜移默化的影响。我们崇尚简单,讨厌复杂,无论是在数字世界,还是现实生活。
程序员喜欢看到确定的、可预知的结果,而我们的世界里却有这么多的不确定性,我们的办法就是只往好处看,只青睐那些我们把握得住的东西。
当我们被迫评估项目进度时,我们会先采取大事化小小事化了的策略,然后把那些人见人爱的小家伙一一拎出来,乐不滋滋地给他们分时间,这个 4 小时,那个 3.5……OK,很快我们就觉得胸有成竹,一切尽在掌握,吧啦吧啦我的魔仙棒,傲娇地转上一圈再伸臂一点,整个项目大概需要 4 个人月,预留一些时间比如 1 个人月应对随时可能出现的天外来客,我们有 8 个人,啊哈,半个月哦不,2 周半搞定!
大家伙分头行动,哼哧吭哧咣叽咣叽开搞了。
第一周的时候,我们报告说:“工作正在有序进行,一切都在掌握之中。”
第二周的时候,我们报告说:“出了点儿小意外,但加两个晚上班儿就可以追回进度,我们可以搞定。”
第三周的时候,我们报告说:“又出了点儿小意外,你知道,软件开发就是这样,惊喜不断。不过我们周六和周日已经摆平了意外,我们很快就可以搞定了。”
第四周的时候,我们报告说:“嗯,情况比我们想象的复杂,在集成时遇到了不明状况,整个团队搞了一个通宵才搞定,结果第二天没办法干活,所以,进度比预期的要晚一些,不过,请相信我们,很快就可以搞定了。
第五周的时候,我们报告说:“这周肯定可以搞定了,相信我们的能力。”
第六周的时候,整个团队都一脸黑线在加班……
第七周的时候,我们报告说:“系统集成完成啦,第一个 Beta 版本可以内测了。这虽然比我们预期的时间晚了一点点,不过,我们的内测版本堪称完美,几乎不可能出现 Bug。”
……
第十周的时候,整个团队都在加班加点改 Bug,人人一脸黑线外加两个青肿的眼袋,每当焦虑万分的老板询问上线时间时,项目经理都会说“快了快了,就这两天就搞定了。”
等到第十四周要结束的时候,版本终于发布了。
皆大欢喜啊。
老板已经被这群猴子逼疯了,心里恨得要冒火,还得咬着牙说:“兄弟们辛苦了,你们的努力大家有目共睹。”
我们报告说:我们发布的版本质量很高,容易上手,用着也方便,用户一定会满意。相比之下,少许的延期是值得的。
2016年03月22日 04点03分
9
level 10
这很简单,两天搞定
程序员群体的乐观是由一个一个个体的乐观汇聚而成的。
有多少次我们被问到这个问题需要多久解决时,我们都说出类似“两天搞定”的话……
有多少次我们看着同事深陷泥沼无法自拔完工无望时,我们说出“要是我早就搞定啦”之类的话……
有多少次我们要学习未知的技术并把未知的技术应用到未知的业务上最终交付给客户一个可用的系统时,我们都会天真的从我们既往的经验池里抓几枚硬币来撒撒,然后说出“大概需要半个月”这样的结果……只有程序员,彪悍的程序员,无所畏惧的程序员,敢于乐观地面对未知的一切拍拍脑袋给出一个确定的工期。
……
这都是因为我们程序员倾向于把事情想得简单,在我们这些崇尚简单的程序员眼里,即便你秉持着不惮以最低的效率来评估的原则,也会给出一个最终看来还是乐观的估计。
这让人绝望吗?
No!恰恰相反,这正是我们程序员之所以为程序员的一个关键特征,惟其如此不能活也!
2016年03月22日 04点03分
11
level 10
三、企业里都需要什么方面的才能?
这个要视用人单位的要求而定了。你现在还没有毕业,也不知道未来要面对什么样的岗位。因此建议大家在上学期间不要偏科,所以的课程都要好好学,学好专业课,培养自己的“内功心法”,然后进入一个大公司,那么大公司自然会为你安排一个人才培养计划,在工作的环境中学习就更有目的性。
学什么最容易
由于现在的快速开发工具的不断推出,使得软件开发越来越容易,进入软件开发的门槛也越来越低。很多人在IDE工具的诱骗之下,快的十天,慢的半个月就可以进入所谓“程序员”的领域,成了一个所谓的“程序员”。这对于IDE提供商来说是乐得合不拢嘴的事情,但是对于软件来说却是一个无形的打击。由于快速工具的盛行,很多人把开发看作小菜一碟,特别是很多在校的大学生,都认为现在教的内容一旦出了学校都已经是落伍,无形中产生了讨学的心理。
今后的软件开发逐渐趋于两极化,一方面有越来越多的人将从事简单的重复性开发,而且这部分的开发难度会逐渐降低;另外一方面核心部分的开发会越来越复杂,这部分的入门所涉及的知识内容会逐步增加。所以对于今后希望从事软件开发的同学们,需要好好的努力学习,学校的东西会有他们的用处,只要现在把基础打扎实了,即后你们在软件的领域会有很好的机会,不要盲目的放弃学习的机会。
2016年03月22日 04点03分
15
level 10
有什么速成的办法没有?
有一种蛾子名叫“帝王蛾”。帝王蛾的幼虫时期是在一个洞口极其窄小的茧中度过的。当它的生命要发生质的飞跃时,这天定的窄小通道对它来说无疑成了鬼门关。那娇嫩的身躯必须拼尽全力才可以破茧而出。太多太多的幼虫在往外冲杀的时候力竭身亡,不幸成了“飞翔”这个词的悲壮祭品。
有人怀着悲悯恻隐之心,企图将那幼虫的生命通道修得宽阔些。他们拿来剪刀,把茧中的洞口剪大。这样一来,茧中的幼虫不必费多大力气,轻易地就从那个牢笼里钻了出来。但是,所有因得到救助而见到天日的蛾子都不是真正的“帝王蛾”,它们无论如何也飞不起来,只能拖着丧失了飞翔功能的累赘的双翅在地上笨拙地爬行。
原来,那“鬼门关”般的窄小茧洞恰恰是帮助帝王蛾幼虫两翼成长的关键所在。穿越的时刻,通过用力的挤压,血液才能顺利送到蛾翼的组织中去,惟有两翼充血,帝王蛾才能振翅飞翔。人为地将茧洞剪大,翼翅就失去了充血的机会,生出来的帝王蛾便永远与飞翔无缘。
没有谁能够施舍给帝王蛾一双奋飞的翅膀。不惧怕独自穿越狭长墨黑的隧道,不指望一双怜恤的手送来廉价的资助,将血肉之躯铸成一支英勇无畏的箭镞,带着呼啸的风,携着永不坠落的梦想,拼力穿透命运设置的重重险阻,义无反顾射向那寥廓美丽的长天……
让一个“帝王蛾”速成的方式就是帮它把茧剪开;一个人学一门技术的速成方法就是不学那些“没用”的东西,直接告诉他最终结论和操作方式,但是很多东西是在探索中、学习中才能领悟的,很多人在钻研一个技术难题的过程中查资料、看书、求证,在这过程中不仅锻炼了自己思考问题的能力,而且夯实了基础知识,最重要的是在探索过程中收获了很多意想不到的新东西,有很多朋友在钻研一个问题的时候经常能无意中的学会很多新东西。
上山的“速成”方法是直接坐缆车上去,可是你会比那些登山者少看到很多路边的风景。那么你是愿意做一个掌握“速成”方法的人,还是愿意有机会看看路边的风景呢?
2016年03月22日 04点03分
16
level 10
同学们千万不要犯大部分人都犯的错误:
下载了一硬盘的视频教程、电子,几乎没看过,即使看过也是看看就算了,根本没用心看过,更别说跟着老师进行代码练习。
光down不看是浪费硬盘和带宽
光看不练是浪费时间和青春!
不要光下载不看,不要光看不练!
错误认识1. C/C++太老了,过时了,平时用得很少,现在流行都Java、C#等等。
解惑:不要动不动觉得什么东西过时了,COBOL还有OO版本面世,还有FORTRAN,LISP,好古老的语言吧,现在还用得很广呢。杨中科老师经常提醒我们“一切语言都是纸老虎,一通百通”,学校已经开了C/C++的课,并且想继续深入学习编程,那么就继续使用学过的语言来学习,不要再去学一门新的语言。等把C/C++弄熟了以后,回头一看,相信你也能像杨中科老师那样“半天学会一门新语言”了吧。
错误认识2.入门要从OO开始,培养用OO方式思考的习惯。
解惑:初学者一入门便摆弄Java、C++等很容易形成误解,似乎OO=Java,C++…。一切编程语言的根本都是面向过程的,Java、C++等语言也是支持面向对象特性的面向过程的语言。面向过程就是if……else……、while、for这些东西,Java、C++等语言中难道就没有这些语句了吗?
过程式语言(或者说结构化方法)的精髓不会消亡,OO里面也不可能摆脱掉一条条的语句、函数调用,结构化方法还是需要提倡的。OO方法不是那么容易学会的(OO语言的语法弄得很熟练不代表你懂OO),而结构化那套方法,自个写个千把行的程序就很能体会了,我是说写个实用点的东西,比如试着自个实现一些数据结构和算法,写几个小游戏等。写个一千行Helloworld等于没写。
我觉得方法是实践中体会出来的,不是看看书就能学会的。过程式语言的代码一般比较简练,我们编程序最终的目的是要解决问题,是要计算,是要获取信息,不要被OO,设计模式等迷糊了。
错误认识3.过程式语言弄久了,很难转入OO的思维模式
解惑:我以前也没有深想过这个理由,不过时间久了,发觉自己不过是把数据和方法集中在一起而已,看着方便,其实有很多不合理的东西,这里头就需要OO的理论指导了,还是需要时间来体会。我相信有很多用OO语言的人也不过是在框架里头添添代码,调用来调用去而已,把人类当作数据和操作的打包器。
个人觉得只有在用过程式方法做了十来年,编码上十万行后才有思维定势,难以习惯用OO的眼光看待系统,然而这个转变,我仍觉得比改变一个人的恶习容易许多。OO方法不是学了个Java,C++等就能掌握的,需要实践,需要时间。过程式语言也容易培养一个人严谨的做事态度,比如用汇编,C等写代码,没有命名空间、没有一大堆类库,没有模板、没有异常,你要花很多心思处理一些细节,比如警惕数组索引越界、悬挂指针、野指针等等,请不要觉得麻烦,这个就是计算机啊,底层就是这样的啊。
错误认识4.别用C了,看我用Java、 VC等轻轻松松就写了个漂亮的图形界面
这篇文章是给初学者看的,也可以给一些浮躁的人看看,初学编程的人精力应该放在数据结构、算法上面,尽量多看一些底层的东西,数字逻辑,操作系统,编译原理,计算机组成、体系结构,计算机网络等等基础知识。编写GUI拖几个控件有什么好吹的,既然你会拖几个控件那么一个初中都没毕业的也会拖控件,你和他的差异性体现在哪里?你知道窗口消息怎么回事么,你编的界面是把易用放在第一位呢还是把漂亮放在第一位呢,你的GUI程序容易修改吗?比如我一会要加个button,一会去个listbox,你会不会改的疯掉呢?你是不是在OnClick里头写了大段大段的代码,做类似“从edit1.text中去掉不是数字的字符,搜索xxx再转成16进制,再复制到edit2.text”的事?
学习还是找纸版的书老实的看比较好,想想你积攒了多少电子书而又看了多少。
底层不了解,仅多也就飘在别人上头,别人一闪身,你就得摔下来。
初学编程的人一来就IDE, GUI,Network啥的猛搞,能不浮躁么?还是沉下心来研究一下基础知识吧,我以脑袋担保你有生之年会觉得他们有用的(呵呵,你转行我就没辙了),别看着别人弄JFC,Socket了你还在头大这个quicksort怎么就不对呢就心里惶惶的,你要知道在一批API不被支持后不少人心里空空的没个着落:天啊,我除了那个就啥都不会了,郁闷啊,花了我那么久时间钻研那套API,呜呜。。。。
错误认识5. C好难啊,我入门还是从Java,C#开始吧
解惑:语言只是表达思想的工具,不要只局限于一种语言,不要狂热于某一门语言。记住***的杨中科老师说那句话“价值规律就是——越是容易得到的越不值钱”。
2016年03月22日 04点03分
18