時(shí)間一晃而過,大學(xué)畢業(yè)轉(zhuǎn)眼間已經(jīng)工作9年了,總結(jié)一下自己這些年來感受。
與程序打交道的人生,是簡(jiǎn)單的人生
一次做規(guī)劃局的項(xiàng)目,規(guī)劃局的職員很是欽佩地說:“你們真了不起,在電腦上敲敲鍵盤就能做出軟件來。”,
規(guī)劃局領(lǐng)導(dǎo)說:“跟電腦打交道是最簡(jiǎn)單的,難的是跟人打交道。”。
領(lǐng)導(dǎo)的話很有深意,一語道破了本質(zhì),做程序的人,是比較簡(jiǎn)單的。
不懂什么叫編程
大學(xué)本科,讀“計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)”(相信看這篇博客的人多半也是學(xué)這個(gè)專業(yè)的 ^_*),課程重理論而輕實(shí)踐。
最初學(xué)習(xí)C語言,對(duì)于編程沒有任何概念,我清楚的記得,一次在課堂上問老師:“計(jì)算機(jī)輸入法,可視化操作界面已經(jīng)很完善了,為什么要用C語言中 Print() 函數(shù)輸出一段字符呢?而且我們學(xué)習(xí)使用Console控制臺(tái)的黑白屏輸入輸出,也不像是平時(shí)使用的軟件啊?”。
老師聽后也是一臉的懵逼,說:“你好好學(xué),慢慢就明白了”。
你不懂的,老師也沒法回答你,只有靠自己慢慢地摸索,慢慢去領(lǐng)悟。
Java還是C#,平臺(tái)選擇的愛恨情仇
初學(xué)Java,這是我接觸的第一個(gè)最具有實(shí)用意義的編程語言(可以做網(wǎng)站,做軟件,雖然C語言,C++也可以開發(fā)應(yīng)用軟件,但畢竟使用的人較少,對(duì)于初學(xué)者,找到一個(gè)合適的教程都困難)。當(dāng)時(shí)的學(xué)習(xí),基本是自學(xué),上網(wǎng)下載視頻教程,一集一集地看,不懂的概念上網(wǎng)查,去圖書館借閱相關(guān)書籍資料,什么JSP標(biāo)簽,Servlet,JDBC,到Struts MVC,Hibernate,Spring,設(shè)計(jì)模式,半年時(shí)間,算是初步入門,盡管對(duì)知識(shí)還是一知半解,但還是成功用Java做了畢業(yè)設(shè)計(jì),做過幾個(gè)小程序。
工作之后,開始使用C#,算是與.NET平臺(tái)結(jié)緣,一行一行地敲代碼,一個(gè)接一個(gè)的做項(xiàng)目,一版又一版的升級(jí)軟件,一晃9年了。從最初的ASP.NET WebForm,ADO.NET,到ASP.NET MVC,WebAPI,EntityFramework,面向服務(wù)架構(gòu)的WCF,以及最新的跨平臺(tái).NET Core,微軟為軟件開發(fā)人員,提供了編程最大的便利性。
僅從開發(fā)語言本身角度講,C#并不比Java差,并且很多細(xì)微的地方,C#比Java做的要好,比如,C#中的get,set屬性訪問,要比Java的字段訪問方便很多,相同邏輯代碼運(yùn)行效率方面,C#的MSIL比Java的字節(jié)碼允許效率還要稍微高一些,但是無奈,.NET平臺(tái)發(fā)展始終不及Java平臺(tái)。誠然,平臺(tái)的發(fā)展不能僅從開發(fā)語言本身考慮,平臺(tái)運(yùn)行環(huán)境,平臺(tái)參與人員整體水平,使用成本等,更是起著決定性作用,.NET平臺(tái)在互聯(lián)網(wǎng)大潮中,逐漸被邊緣化,免費(fèi)的Java平臺(tái),被開源社區(qū)擁抱,成為互聯(lián)網(wǎng)項(xiàng)目開發(fā)平臺(tái)的中流砥柱。微軟似乎意識(shí)到問題所在,逐步加入開源隊(duì)伍,并提供了跨平臺(tái)方案.Net Core,但并沒有明顯起色,.NET平臺(tái)開發(fā)人員心中不免有一絲悲觀情緒,.Net平臺(tái)開發(fā)人員似乎比Java開發(fā)人員始終矮一頭的感覺。
前端編程,JavaScript從無知到覺醒
做Web開發(fā),離不開HTML,CSS,JavaScript,盡管日常工作以后臺(tái)開發(fā)為主,但接觸的多了,慢慢地理解深入,從只會(huì)使用JS寫函數(shù),發(fā)展到使用JS面向?qū)ο蟮墓δ埽斫饬薐S中閉包的概念(好燒腦,用離散數(shù)學(xué)中的概念來表示函數(shù)集合,讓沒學(xué)過集合概念的同學(xué)情何以堪)。明白了JS的面向?qū)ο缶幊蹋ㄟ^JS自定義前端控件,數(shù)據(jù)與邏輯代碼分離,達(dá)到優(yōu)雅地實(shí)現(xiàn)前端邏輯。學(xué)習(xí)的過程是曲折的,有時(shí)候一個(gè)概念始終理解不了,但一旦明白過來,會(huì)有一種眼前一亮,豁然開朗的感覺。起初一直不明白,為什么JQuery中的“$”這么牛,一個(gè)“$”符號(hào)能操作一切,讀過JQuery源碼之后才明白,這個(gè)“$”原來是jQuery在Window中定義的的一個(gè)變量,同時(shí)也是jQuery這個(gè)函數(shù)的別名,每次調(diào)用$(…)時(shí),其實(shí)間接地創(chuàng)建了一個(gè)JQuery的示例。當(dāng)然,這種操作得益于JS是一直動(dòng)態(tài)語言,可以給對(duì)象任意添加屬性和方法(相比較Java和C#是不能這樣操作的)。
技術(shù)之路要不斷學(xué)習(xí),路漫漫其修遠(yuǎn)
技術(shù)更新迭代的速度,遠(yuǎn)超想象,往往是剛學(xué)會(huì)一個(gè)新技術(shù),另一個(gè)更新的技術(shù)又變的火熱,似乎新技術(shù)的產(chǎn)生,也在遵循一個(gè)摩爾定律。追趕技術(shù)的腳步,就如同夸父追日一般,你一直在追趕,但它一直在你前面。好在,每一個(gè)新技術(shù),新架構(gòu)的產(chǎn)生,都是在為更簡(jiǎn)單、更高效的解決現(xiàn)有的問題,所以,新的技術(shù),雖然增加了學(xué)習(xí)的負(fù)擔(dān),但是新技術(shù)的應(yīng)用,能夠解決現(xiàn)實(shí)的問題,是效率的提升。從這個(gè)角度講,學(xué)習(xí)是值得的。通常來說,沒有誰天生就會(huì)做什么,只要肯學(xué)習(xí),別人能做到的,你也能做到。
React火熱的時(shí)候,學(xué)習(xí)React,了解了這種基于模板的開發(fā)方式,見識(shí)了這種類似于MVC,實(shí)現(xiàn)數(shù)據(jù)與業(yè)務(wù)邏輯分離的編程方式在JS中的實(shí)際應(yīng)用,對(duì)于這種僅需要一個(gè)render()函數(shù)的超簡(jiǎn)潔的框架贊嘆不已。
Facebook搞出了React,國人也不示弱,于是誕生了Vue,相對(duì)來說更簡(jiǎn)潔,使用更方便。
React發(fā)展出了React Native,圈子里更是為止振奮,為火熱的移動(dòng)端開發(fā)又添了一把柴,讓移動(dòng)端開發(fā),在Android和IOS原生開發(fā)之外,又多了一種全新的選擇。
我用3天時(shí)間,學(xué)會(huì)了開發(fā)微信小程序,完成了原有Web功能向小程序的移植。
Node.JS火熱的時(shí)候,我用了一周的業(yè)余時(shí)間,學(xué)習(xí)NodeJS編程,配合MongoDB,搭建了簡(jiǎn)單的日志系統(tǒng)。
說起來有點(diǎn)吹牛的意思,但卻是事實(shí)。
一方面,不管是React,微信小程序,Node.JS,本質(zhì)上都是JavaScript,Html,CSS的組合使用,相似度很高,只是各自有各自特點(diǎn)的規(guī)范特色而已,學(xué)習(xí)難度是逐漸降低的。
另一方面,我相信大多數(shù)人也有感受,當(dāng)工作經(jīng)驗(yàn),認(rèn)知水平達(dá)到一定積累之后,學(xué)習(xí)其實(shí)是一件水到渠成的事情。
總結(jié)
有一次跟朋友聊天,朋友說,“感覺自己越學(xué)習(xí),越感覺到不懂的方面更多了”。
我笑笑,表示同意他的觀點(diǎn),這是一個(gè)叫做“知識(shí)邊界”的問題,每個(gè)人的知識(shí),就如同是一個(gè)圓,圓內(nèi)是你已經(jīng)了解的知識(shí),圓之外就是還不懂的知識(shí),一個(gè)人掌握的知識(shí)越多,這個(gè)圓也就越大,而圓越大,圓周所接觸的那些未知領(lǐng)域也就越多。如果一個(gè)人說自己沒有什么不懂的,那只能說明他知識(shí)面太小。如此,當(dāng)我們意識(shí)到自己有很多不懂的東西的時(shí)候,也不用焦慮,因?yàn)槲覀兊闹R(shí)在擴(kuò)展,保持一顆開放,學(xué)習(xí)的心,這是人生路上所必須的。
-
工程師
+關(guān)注
關(guān)注
59文章
1570瀏覽量
68516 -
編程
+關(guān)注
關(guān)注
88文章
3615瀏覽量
93719
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論