在这个浮躁的年纪,浮躁的日子里,想多读几本书已然成为一种奢侈。工作几年来,已经很少再涉猎文学文艺相关的书籍了,大多是一些枯燥无味的技术书籍,因为身处一个竞争激烈的社会和处处充斥着金钱味道的世界,唯有提升自身能力多挣钱才是这个社会的立足之本。诚然,这种思想有些媚俗了点,不过我本人也是一个热爱文学并自认为还有那么一些文学功底的文艺青年,奈何生逢就业压力空前巨大,物价飞涨,人口暴增,竞争残酷的现代社会,从此走上一条不归路,成为一名屌丝程序员,一入IT深似海,花落人亡两不知,保持一个文艺青年的赤子之心和满腔热血是我毕生追求的信仰。况且,自从走上程序员的道路,我就越来越觉得写程序和文学有着某种必然的联系。
因为写程序需要大脑有很好的逻辑思维能力,空间想象能力,由整体架构到内部细节是清晰明朗的,有条不紊,循序渐进,一旦文思泉涌,则顺流而下,水到渠成。嗯,没错,就是这么美妙!而文学类作品或者创造文学也同样具备这样的思维能力和整体把控能力,有构思,有框架,有具象,有抽象,清晰的条理,严谨的思维,一旦有了好的构思,下笔就会行云流水,一气呵成。
很久以前,读过王小波的《一只特立独行的猪》,对,没错,是一只特立独行的猪,不是猫,《Mac Talk》中也有讲到王小波的身份,王小波除了是一名作家,还是一名很牛的程序员,90年代算是早期的一批程序员了,会写各种汇编语言,C语言,数据结构,算法,还会编译原理,作为一个程序员,他能把文学家的脑洞和眼光运用到编程中,同样,他也能把编程中的一些思维和创意结合到文学创作中,王小波小说里的男主角基本都是理工男,比如《未来世界》里的王二是个工程师,整天想着和单位一起研制的永动机,还有《红拂夜奔》里的李靖发明过一个巨大的开跟号机器,在战场上,这台机器运转起来挥舞着杠杆边开跟攻击敌人,有的人死在根号 3 下,有的人倒在了根号 5 下。王小波干过很多事情,下过乡,考过大学,出过国,学过经济,打过代码,成了小说家,去世的那一年完成了心愿做了编剧。总之不管他干了什么,他身上让我们尊重的还是独立之精神,自由之思想。《Mac Talk·人生元编程》迟志强也讲到了人文与编程,编程不仅是工作,不仅是兴趣,同样也会改变我们的生活方式。
所以,作为一名优秀的程序员,不仅要在技术上有所成就,在文学修养上也要有所修炼,不仅要做一个只会打代码的攻城狮,还要懂得生活的情趣,欣赏生活的浪漫,情商与智商齐飞,才华共情怀并进。
说了这么多废话,下面开始进入正题,好的小说一般都是这样的,前面会有很长很长的序,难道不是吗(^o^)/。
好友几番推荐,我决定就着午休的时光和周五下午的空闲读一读,《谁动了我的奶酪》,一听起名字,貌似很熟悉的的样子,早些年好像听说过,也貌似曾经流行一时,大概是在初中那会儿,那时候同学间流行着《羊皮卷》《人性的弱点》《钢铁是怎样炼成的》,估计就是这一批的,不过我确定我没有看过。
我依然保持着一个程序员的基本素质,我用eBook打开了txt文本,然后开始慢慢的欣赏起来,内容不多,故事也不复杂,大体内容如下:我依然保持一个程序员应有的素质,采用树状列表的方式显示出来目录结构。
树状菜单采用HTML+CSS+JS的技术实现,目录结构下不包括内容,可以添加新的父节点,也可以在指定的父节点下添加子节点。如要添加内容,需要使用Ajax+JSON+Oracle数据库。源码如下:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
4 <head>
5 <title>谁动了我的奶酪</title>
6 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
7 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
8 <style>
9 *{margin:0px;padding:0px;}
10 A:link{color: #000000; TEXT-DECORATION: none;}
11 A:visited {COLOR: #000000; TEXT-DECORATION: none}
12 A:active {COLOR: #3333ff; TEXT-DECORATION: none}
13 A:hover {COLOR: #ff0000; TEXT-DECORATION: none}
14 .panel{ BACKGROUND: #DDE4EA; COLOR:#654125;}
15 ul {
16 list-style: none;
17 margin: 0;
18 padding: 0;
19 }
20 img{
21 border:0px;
22 width:16px;
23 height:16px;
24 }
25 #menu{
26 margin-top: 0px;
27 }
28 .U1 {
29 background: #FFFFFF;
30 border-bottom:1px #9D9D9D solid;
31 }
32 .L1 a:link, .L1 a:visited{
33 color: #476074;
34 background: url("");
35 font-size:9pt;
36 display: block;
37 text-decoration: none;
38 height: 24px;
39 }
40 .L1 a:link span, .L1 a:visited span{
41 background: url("") no-repeat left;
42 padding-left: 15px;
43 height:24px;
44 vertical-align:middle;
45 padding:7px 0px 0px 16px;
46 cursor:pointer;
47 width:100%;
48 }
49 .L1 a:hover{
50 color: #000000;
51 font-weight:bold;
52 background: url("");
53 background-position: 0 -24px;
54 }
55 /* 一级菜单 active 效果 */
56 .L1 a:link.active, .L1 a:hover.active, .L1 a:active.active, .L1 a:visited.active{
57 background: url("");
58 background-position: 0 -24px;
59 }
60 .L1 a:link.active span, .L1 a:hover.active span, .L1 a:active.active span, .L1 a:visited.active span{
61 color: #000000;
62 font-weight:bold;
63 background: url("") no-repeat left;
64 }
65 .L21 a:link, .L21 a:visited, .L22 a:link, .L22 a:visited, .L3 a:link, .L3 a:visited{
66 color: #444659;
67 background: none;
68 height: 24px;
69 font-size:9pt;
70 display: block;
71 text-decoration: none;
72 padding-left: 13px;
73 background: none;
74 }
75 .L21 a:link span, .L21 a:visited span, .L22 a:link span, .L22 a:visited span, .L3 a:link span, .L3 a:visited
76
77 span{
78 vertical-align:middle;
79 padding:7px 0px 0px 16px;
80 background: url("") no-repeat left center;
81 cursor:pointer;
82 width:100%;
83 }
84 .L22 a:link span, .L22 a:visited span, .L3 a:link span, .L3 a:visited span{
85 background:none;
86 }
87 .L21 a:hover, .L22 a:hover, .L3 a:hover{
88 background: url("") no-repeat top left;
89 font-weight:bold;
90 }
91 .L3 a:link span, .L3 a:visited span{
92 padding:7px 0px 0px 26px;
93 }
94 .L4 a:link span, .L4 a:visited span{
95 padding:7px 0px 0px 36px;
96 }
97 /* 二级菜单 active 效果 */
98 .L21 a:link.active, .L21 a:hover.active, .L21 a:active.active, .L21 a:visited.active{
99 background: none;
100 }
101 .L21 a:link.active span, .L21 a:hover.active span, .L21 a:active.active span, .L21 a:visited.active span{
102 color: #000000;
103 font-weight:bold;
104 background: url("") no-repeat left center;
105 }
106 /* 二、三级菜单 active */
107 .L22 a:link.active, .L22 a:hover.active, .L22 a:active.active, .L22 a:visited.active,
108 .L3 a:link.active, .L3 a:hover.active, .L3 a:active.active, .L3 a:visited.active{
109 background: url("") no-repeat left;
110 background-position: 0 -24px;
111 }
112 .L22 a:link.active span, .L22 a:hover.active span, .L22 a:active.active span, .L22 a:visited.active span,
113 .L3 a:link.active span, .L3 a:hover.active span, .L3 a:active.active span, .L3 a:visited.active span{
114 color: #FFFFFF;
115 font-weight:bold;
116 background: none;
117 }
118 .Ls{
119 text-align:right;
120 padding-top:4px;
121 height:20px;
122 font-size:9pt;
123 }
124 .setting:link, .setting:visited{
125 text-decoration: underline;
126 display:block;
127 }
128 </style>
129 </head>
130 <body class="panel" onLoad="init();">
131 <div id="sub_tabs" class="sub_tabs"></div>
132 <div id="body">
133
134 <ul id="menu">
135
136 <ul id="m01d" style="display:none;" class="U1">
137 <li class="L21"><a href="javascript:c('f40');" id="f40"><span><img src="" align="absMiddle"/></span></a></li>
138 <ul id="f40d" style="display:none;">
139 <li class="L3"><a href="javascript:c('f42');"><span><img src= align="absMiddle"/></span></a></li>
140 <ul id="f42d" style="display:none;"><li class="L4" ><a href="#"><span><img src=
141
142 align="absMiddle"/></span></a></li></ul>
143 <li class="L3"><a href="#"><span><img src="" align="absMiddle"/></span></a></li>
144 </ul>
145 <li class="L21"><a href="javascript:c('f41');" id="f41"><span><img src="" align="absMiddle"/></span></a></li>
146 <ul id="f41d" style="display:none;">
147 <li class="L3"><a href="#"><span><img src="" align="absMiddle"/></span></a></li>
148 <li class="L3"><a href="#"><span><img src="" align="absMiddle"/></span></a></li>
149 </ul>
150 <li class="L22"><a href="#"><span><img src="" /></span></a></li>
151 <li class="L22"><a href="#"><span><img src="" /></span></a></li>
152 <li class="L22"><a href="#"><span><img src="" /></span></a></li>
153 </ul>
154 <li class="L1"><a href="javascript:c('m03');" id="m03"><span><img src="aa/1.jpg" align="absMiddle"/>谁动了我的奶
155
156 酪</span></a></li>
157 <ul id="m03d" style="display:none;" class="U1">
158
159 <ul id="f43d" style="display:none;">
160 <li class="L3"><a href="#"><span><img src= align="absMiddle"/></span></a></li>
161 <li class="L3"><a href="#"><span><img src= align="absMiddle"/></span></a></li>
162 </ul>
163 <li class="L22"><a href="#"><span><img src="aa/1.jpg" />代序:变化与困惑</span></a></li>
164 <li class="L22"><a href="#"><span><img src="aa/1.jpg" />我们多面的人性 </span></a></li>
165 <li class="L22"><a href="#"><span><img src="aa/1.jpg" />故事背后的故事</span></a></li>
166 <li class="L22"><a href="#"><span><img src="aa/1.jpg" />芝加哥的同学聚会</span></a></li>
167 <li class="L22"><a href="#"><span><img src="aa/1.jpg" />“谁动了我的奶酪”的故事</span></a></li>
168 <li class="L22"><a href="#"><span><img src="aa/1.jpg" />讨论</span></a></li>
169 </ul>
170
171 </ul>
172 </ul>
173 </div>
174 <script language="JavaScript">
175 window.onresize=function()
176 {
177 if(!parent.$('frame1')) return;
178 var rows = parent.$('frame1').rows.split(",");
179 if(rows.length < 2 || rows[1]!="*") return;
180 $("bottom_center").style.width = "0px";
181 if(document.body.clientHeight > $("sub_tabs").clientHeight+$("bottom").clientHeight)
182 $("body").style.height=(document.body.clientHeight-$("sub_tabs").clientHeight-
183
184 $("bottom").clientHeight)+"px";
185 var widthTotal = parseInt($("bottom").clientWidth);
186 var widthLeft = parseInt($("bottom_left").clientWidth);
187 var widthRight = parseInt($("bottom_right").clientWidth);
188 if(!isNaN(widthTotal) && !isNaN(widthLeft) && !isNaN(widthRight))
189 {
190 $("bottom_center").style.width = widthTotal - widthLeft - widthRight + "px";
191 }
192 };
193 function init()
194 {
195 window.onresize();
196 }
197 var sub_menu="1";
198 function view_menu(id)
199 {
200 set_current("");
201 if($("menu").innerHTML.toLowerCase().indexOf("<li") >= 0)
202 $("menu_code_"+sub_menu).innerText=$("menu").innerHTML;
203 if($("menu_code_"+id).innerText=="" || isUndefined($("menu_code_"+id).innerText))
204 {
205 $("menu").innerHTML="<img src='/images/loading.gif' align='absMiddle'> 加载中,请稍候……";
206 if(id==2) args="MENU_TYPE=SHORTCUT&OA_SUB_WINDOW=0&MENU_DISPLAY=";
207 else if(id==3) args="MENU_TYPE=OA&OA_SUB_WINDOW=0";
208 else if(id==4) args="MENU_TYPE=FAV&OA_SUB_WINDOW=0";
209 else if(id==5) args="MENU_TYPE=FIS&OA_SUB_WINDOW=0";
210 else args="OA_SUB_WINDOW=0";
211 _get("menu_code.php", args, update_menu, true);
212 }
213 else
214 {
215 $("menu").innerHTML=$("menu_code_"+id).innerText;
216 }
217 if($('link_'+sub_menu))
218 $('link_'+sub_menu).className="";
219 $('link_'+id).className="active";
220 sub_menu=id;
221 setCookie("MENU_UI_1", id);
222 if(id == 5)
223 {
224 openURL("http://www.jb51.net/");
225 }
226 }
227 function update_menu(req)
228 {
229 if(req.status == 200)
230 {
231 if(req.responseText=="")
232 $("menu").innerHTML="<div style='padding:10px;'>无可访问菜单</div>";
233 else
234 {
235 $("menu").innerHTML=req.responseText;
236 if(sub_menu == 2) c('mMENU_SHORTCUT');
237 }
238 }
239 else
240 {
241 $("menu").innerHTML="<div style='padding:10px;'>错误:"+req.status+"</div>";
242 }
243 }
244 var cur_id="",cur_expand="";
245 var flag=0,sflag=0;
246 //-------- 菜单点击事件 -------
247 function c(id)
248 {
249 var targetid,targetelement;
250 var strbuf;
251 var el=$(id);
252 if(!el)
253 return;
254 //-------- 如果点击了展开或收缩按钮---------
255 targetid=el.id+"d";
256 targetelement=$(targetid);
257 var expandUL=$(cur_expand+"d");
258 var expandLink=$(cur_expand);
259 if (targetelement.style.display=="none")
260 {
261 if(expandUL && expandLink && el.id.substr(0,1)=="m")
262 {
263 expandLink.className="";
264 expandUL.style.display='none';
265 }
266 if(el.id.substr(0,1)=="m")
267 cur_expand=el.id;
268 el.className="active";
269 targetelement.style.display='';
270 menu_flag=0;
271 //$("expand_link").src="images/green_minus.gif";
272 }
273 else
274 {
275 el.className="";
276 targetelement.style.display="none";
277 menu_flag=1;
278 //$("expand_link").src="images/green_plus.gif";
279 var links=document.getElementsByTagName("A");
280 for (i=0; i<links.length; i++)
281 {
282 el=links[i];
283 if(el.parentNode.className.toUpperCase()=="L1" && el.className=="active" && el.id.substr(0,1)=="m")
284 {
285 menu_flag=0;
286 // $("expand_link").src="images/green_minus.gif";
287 break;
288 }
289 }
290 }
291 }
292
293 var $ = function(id) {return document.getElementById(id);};
294 var userAgent = navigator.userAgent.toLowerCase();
295 var is_opera = userAgent.indexOf('opera') != -1 && opera.version();
296 var is_ie = (userAgent.indexOf('msie') != -1 && !is_opera) && userAgent.substr(userAgent.indexOf('msie') + 5,
297
298 3);
299 function MouseOverBtn(){event.srcElement.className+="Hover";}
300 function MouseOutBtn() {event.srcElement.className=event.srcElement.className.substr
301
302 (0,event.srcElement.className.indexOf("Hover"));}
303 function CorrectButton()
304 {
305 var inputs=document.getElementsByTagName("INPUT");
306 for(var i=0; i<inputs.length; i++)
307 {
308 var el = inputs[i];
309 var elType = el.type.toLowerCase();
310 var elClass = el.className.toLowerCase();
311 var elLength = Math.ceil(el.value.replace(/[^x00-xff]/g,"**").length/2);
312 if(elType!="button" && elType!="submit" && elType!="reset" || elClass!="bigbutton"&&elClass!="smallbutton")
313 continue;
314 if(elLength<=3)
315 el.className+="A";
316 else if(elLength==4)
317 el.className+="B";
318 else if(elLength>=5 && elLength<=7)
319 el.className+="C";
320 else if(elLength>=8 && elLength<=11)
321 el.className+="D";
322 else
323 el.className+="E";
324 if(is_ie)
325 {
326 el.attachEvent("onmouseover", MouseOverBtn);
327 el.attachEvent("onmouseout", MouseOutBtn);
328 }
329 }
330 }
331 if(is_ie)
332 window.attachEvent("onload", CorrectButton);
333 else
334 window.addEventListener("load", CorrectButton,false);
335 </script>
336 </body>
337 </html>
让我们再把思维拉回到书上来,这本书主要讲了一个寓言故事,通过这个寓言故事让我们对人生对生活有了启发和思考,由同学聚会作为引子,同学之间的交谈和对生活现状的一些剖析和自我认知来引出两只老鼠“嗅嗅”,“匆匆”和两个小矮人“哼哼”,“唧唧”在寻找奶酪的过程中的行为状态和心理变化,然后故事结束,同学们开始讨论,各抒己见,同时也让我们读者从中获得一些思想上的启发和对人生的思考。一则很简单的寓言故事,但思考点却有很多,特别是如今互联网盛行的时代,我们会从中总结出很多东西来。
(一)奶酪就在那里,不来也不去,你去不去找是你自己的事情,怎么找也是你的事情。
我们从学生时代开始就一路追寻自己的梦想,这个过程中,我们吃了很多的苦,受过很多的罪,我们走过很多的弯路,也曾经迷路,但我们依然披襟斩棘,无怨无悔,为什么?因为那就是我们的奶酪,是我们追求的幸福,因为它,我们才生活的更有意义。所以,有梦想就要去努力,有喜欢的女孩子就要去追,虽然会历尽千辛,也可能会失败,但在这个过程中,你会发现自己越来越强大,你会收获很多,你会迅速的成长,而这个将会是你一生难得的财富。行动起来,空谈误国,实干兴邦,着手去做,踏踏实实的去做,比你定下一千个一万个理想目标都要实际的多,不是吗?
(二)事情已经发生,难过于事无补。
故事中,两个小矮人在发现C区的奶酪消失了没有了的时候暗自神伤起来,不断的质问对方,为什么没有了呢?为什么呢?为什么呢?发生了什么呢?到底是因为什么呢?而两只小老鼠却很早就已经发觉了C区的奶酪发生了异常情况,所以,他们早就明白,这里的奶酪迟早会消失,他们很早就做好了心理准备,在奶酪消失的时候他们没有选择难过伤心,怨天尤人,而是穿上鞋,迅速的行动起来,继续去寻找新的奶酪。所以,我们要保持对周围环境的一个感知,遇到突发情况,要镇定,要冷静,迅速反应,快速投入到新的环境中。而现实情况却是别人已经适应了新的环境,我们却还在四处张望,茫然犹豫,下手比别人慢,入行比别人晚,最终吃亏的还是自己。
(三)“时势造英雄”,要学会随机而动。
古人有云:识时务者为俊杰,面对新的机遇和新的挑战,如果不能清晰的判断和迅速的抉择,就会落后于别人,特别是在如今的互联网大潮中,机会多,渠道广,互联网给我们营造了很多的机遇,如果我们还是一直的沉浸在自我的世界中,被传统的思维所桎梏,不愿意接受新的事务和新的思维,终将会被淘汰,清朝的闭关锁国最终带来得是一张张不平等的条约,历史的经验和教训还在这里,如今,可以说是互联网世界一个新的开始,我们要勇敢迈出这一步,迅速的适应互联网的新环境,并利用互联网给我们的生活创造更多的便利。
以上观点仅代表个人,如有雷同,纯属巧合。能从某本书中得到很多对人生有益的启发和思考,这是我从来都觉得读书的最大好处,高尔基说书是人类进步的阶梯,但现实中,我们总是因为各种原因以各种借口不读书,当然,就像第一点,书就在那里,你读或者不读,都看自己。作为程序员,我们总是以提高技术能力为核心任务,所以群猎各种技术书籍,可时间一久,又觉得确实乏味枯燥,所以不妨品读一些文学作品,作为我们枯燥生活的调剂,从混沌的代码世界里走出来,感悟生活的真诚,让眼睛里不再只有枯燥的代码,而是拥有发现美的能力,让心灵和身心也能在文学的美妙中自由的倘佯(同时也会提升内涵,人品,素养,妈妈再也不用担心我找不到女盆友了哦(^o^)/)。