一位匠人的中州韻——專訪Rime輸入法做者佛振

摘自 http://www.ituring.com.cn/article/118072前端

對一個匠人來講,創做一件有情調的做品,必定是出於對精湛技藝的追求。若是僅僅是爲了現實目的,當然能夠寫出高質量的軟件,代碼自己卻容易缺少靈 氣。代碼的藝術和美,與文學略有共通之處,在於強大的表現力。缺少靈氣的代碼只顧平鋪直敘,是沒有生命力的機械;好的代碼越是簡單明瞭,越是作獲得更多事 情。面試

編程的樂趣在於享受這份創造的快感:他不僅是在敲代碼,而是在開動腦筋調教程序,增益其所不能。甚至會有一刻在心中大呼:終於再也不像菜鳥同樣寫程序了!誰願作只會搬磚的碼農?定要像設計師那樣思考,才稱得上有手藝的編碼匠。算法

二〇〇八年我辭去搬磚的工做,立志練好技術,未來上Google、Facebook謀職,作個有技巧的碼農。修煉的方式,就是完成一個有挑戰、來源於真實需求的軟件做品。編程

 

對前端工程師很好的評價和將來展望:

http://www.ituring.com.cn/article/133104後端

 

節選:瀏覽器

於Web應用和原生應用爭論,你有什麼見解?前端工程師

如今整個前端圈子裏面有一小撮人,有點像原教旨主義者,他就以爲Web是一個神聖不可侵犯的既有體系,「客戶端已死,Web永生」,他們以爲在移動 設備上面,Web終有一天會趕超原生應用。但我以爲這不是目的,Web只是一個技術手段,爲何必定要在移動設備上趕超原生技術呢?數據結構

全部的工程師仍是首先應該把用戶放在第一位,你要解決的是用戶的問題,而不是用一個特定的技術手段去解決用戶的問題。我見過不少人,他們處處去跟人 爭辯,說Web如今發展得很快,必定會在移動設備上大有所爲的。可是沒有辦法迴避的是,Web確實性能沒有原生應用好。也有人反過來講,過幾年隨着硬件的 發展,手機CPU變得更快,內存更大,那Web技術可能就會變得更快了,可是他們忽略了一點,Web變得更快的同時,原生技術也更快了。性能

問:爲何Web前端工程師會感受轉行很困難呢?學習

我遇到過不少人之前多是作Windows客戶端開發或者是作Server端開發的,作Windows的可能轉Server了,作Server的可 能轉去作Andriod,或者轉去作iOS,並不會有特別大的困難,由於他們的基礎知識是沒有問題的,就像我剛剛說的數據結構、操做系統原理這些知識體系 的基礎。但爲何Web前端工程師如今會以爲轉行很困難呢?緣由在這:他們的基礎知識有缺口。

咱們如今的實踐經驗就是:若是一個頗有經驗的Web前端工程師去作Andriod或者iOS,可能在用戶體驗這塊的感受會比較強,但技術上並無任 何優點,由於Web平臺的複雜度比iOS和Andriod低得多。不少公司招Windows客戶端工程師的用人標準是非五年經驗的我不招,爲何?由於 Windows平臺複雜度很高。若是你C++代碼寫得再好,可是沒有作過Windows平臺開發,沒有那三五年的時間去摸索Windows平臺的API和 特性,你是不可能作好Windows客戶端開發的。Web前端也是客戶端開發的一種,只不過是限制在瀏覽器這個技術平臺裏面,而瀏覽器這個平臺的複雜度是 遠低於Andriod和iOS的。這就是爲何不少前端工程師會以爲本身轉崗很困難的緣由,本質上仍是由於基礎知識的缺口。而反過來Andriod和 iOS的工程師轉Web,並不會以爲很困難,他可能不知道瀏覽器有什麼API,可是不可能連Javascript這個語言都學不會。

Web技術最主要的編程範式是聲明式,所謂聲明式,就是我寫個HTML的標記,聲明我要什麼,可是這個東西在瀏覽器裏怎麼渲染,我控制不了。另一 個比較典型的聲明式範式的語言是SQL,我只描述我要什麼,可是後面會有個很複雜的體系來按照個人描述去實現。它的好處是你很容易抽象你的需求,學習成本 會比較低,可是代價就是犧牲了運行時的效率。若是你開發又簡單,運行時又快,那原生技術就沒有存在的必要了。原生技術不是聲明式的,好比界面是怎麼渲染 的,你要用代碼去控制渲染的過程,你不能簡單地說我要一個表格,它就給你個表格。而Web是這樣的,Web說我要一個表格,瀏覽器就給它個表格,你再告訴 瀏覽器說我要一個5像素的陰影,那瀏覽器就給你一個5像素的陰影,前端工程師根本控制不了這5像素的陰影怎麼畫上去,或者說只能在很小的範圍內控制。這其 實和時間換空間,空間換時間這個簡單的哲學原理很類似,不可能二者兼得。

問:對你來講一個優秀的前端工程師須要具有什麼樣的技能?或者什麼樣的知識結構?

前端工程師應該首先是個工程師。如今不少前端工程師,包括我面試的,可能會在基礎知識上有所欠缺,基礎的數據結構、基礎的算法、操做系統原理,這些 對一個軟件工程師來說很是基礎的內容仍是要知道的。若是不知道的話,你可能會成長得很快,可是很容易進入到一個瓶頸,而且這個瓶頸是沒法突破的,由於你的 知識結構是有殘缺的。

其次是我的素質,好比說對細節的注意力。前端工程師作的東西,不管是本身實現的,仍是按照設計師的設計稿實現的,差1像素就是差。那這1像素你能不 能看得出來,而且把它糾正過來,這其實不少狀況下取決於我的的素質和對細節的注意力和追求。由於我也接觸過不少前端工程師,他以爲差1像素就差吧,可是 UI質量可能差異就在這一像素上,你差了這1像素,就不是100分了。

第三部分是你要對用戶體驗有一些基本的瞭解和判斷,什麼樣的東西體驗是好的,什麼樣的東西是體驗流暢的,怎樣可以讓用戶更有效地去接受你想傳達的信息。一些交互設計上的最佳實踐是必定要知道的,這不徹底是設計師的事,前端工程師也要參與進來。

問:你在面試的時候,除了這些技能以外,你還看重別的什麼嗎?

其實我我的會比較看重一我的的視野。不少部門說我也看重視野,可是前端工程師應該尤爲看重,由於前端技術更新迭代太快了,Web技術自己就很是不穩 定,你今天會的東西,明天睡一覺可能就已經發生變化了。前端工程師若是視野不夠開闊,你所瞭解的東西廣度不夠的話,就很難跟得上這種進步速度。

另外,前端是最接近用戶的這一端,你不只要能從工程的角度,從站在你背後的產品設計師、後端工程師的角度去跟用戶交流,同時你要能站在用戶的角度, 反向地跟你後面的這些設計師和後端工程師交流。好比後端工程師給我一個API,我做爲使用者來講必須能判斷什麼是好用的,我才能把後端想要傳達的信息有效 地傳達給用戶,再把用戶的交互反饋給系統。前端工程師要站在兩個角度去溝通,要可以從很是不同的角度去看待同一件事情。

 

(一千個讀者一千個哈姆雷特 也許吧 總要有些堅持的)

不少時候若是你真的潛心在工做裏面,什麼也無論,可能過了一段時間後你會發現你比本身想象的走得更遠。在互聯網這個外部環境變化比較快的行業裏面,超過三 年的規劃我以爲意義都不大,由於一年之後可能整個外部環境就徹底不同了。我本身如今可能會作一些團隊管理,包括產品的研發管理上面的事情,這也是我兩三 年前徹底想不到的。之前我以爲本身會一直作工程師,前端作不了,我會去作別的,但如今看來,「作事」對我來說可能更重要,技術只是一個手段,是支撐之一, 還有其餘的東西須要保障。

相關文章
相關標籤/搜索