1. 程式人生 > >好程式設計師的標準

好程式設計師的標準

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

無數的人問過類似的問題, 怎麼樣才能做一個好的程式設計師? 在回答這個問題之前, 首先得明白什麼是好的程式設計師, 這樣才有方向和目標, 可是這事情太主觀, 可能各人的標準千差萬別, 不談那些傳奇性的獨自一人做出偉大事情的特例, 也不談什麼上天入地, 上帝大牛的詭論, 以下是我比較認可的, 在通常的專案開發中, 一個好程式設計師的標準.

目錄:

解決問題的能力

在專案開發中, 一個程式設計師的能力等於其解決問題的能力. 假如想有個尺度來衡量這個能力的話, 一個程式設計師的能力可以用能完成任務的規模和難度來衡量.

因為難度上不好那麼簡單的劃分, 並且在一般的專案開發中(非研究性專案), 任務的難度主要來自於任務的規模帶來的複雜度, 這裡把任務從規模上大致的劃分為1個函式=>1個類=>1個功能=>1個模組=>1個專案

更細緻的劃分時,函式, 類, 功能, 模組, 專案本身也有簡單和規模大小之分.

  • 一個初學程式設計的人總是從最小的函式和類開始學習的.
  • 一個程式設計師能基本無誤的完成專案中的一個功能算是合格, 在此之前, 對專案的生產力為負, 即為他佈置任務, 溝通, 和為他修補bug的時間其實要多於自己直接完成該功能的時間. 也就是說, 專案中存在這個水平的程式設計師純粹是為了培養人才.
  • 能較好完成一個完整模組的程式設計師算是較好的程式設計師, 也是一般專案中的主要開發者.
  • 能完成整個專案的程式設計師才能算是好的程式設計師. 在多人專案中可做主程.

不同規模的任務主要的問題也體現在不同的方面:

  • 對於初學者來說, 寫好一個函式和類的難點在於語言本身的語法上.
  • 對於完成一個功能來說, 難點在於理解這個功能, 以及很好的在現有的程式碼中加入此功能, 完成的功能不是獨立於專案之外的, 而是要融入專案本身, 除了功能本身和其他功能銜接正常無誤外, 特別重要的就是注意功能實現後不能對其他功能產生預期外的影響, 作為遊戲開發來說, 典型的例子就是你完成的UI不能讓其他該顯示的UI顯示有問題, 不該顯示的UI又沒有消失.
  • 對於完成一個模組來講, 暴露給外部的介面設計比內部實現的設計同樣重要(甚至更加重要), 合理易使用的介面設計決定了一個模組的好壞. 模組內部實現不好尚可更改, 介面實現不好, 更改起來可能是災難性的.
  • 對於一個專案來講, 在正確的地方使用正確的解決方案是最重要的事情, 最開始的技術選型直接決定專案的成敗, 模組的劃分能決定專案的開發速度, 架構的設計能決定專案的維護難度和增加需求時的痛苦程度. 對於多人專案來說, 主程讓正確的人去做正確的事情也是無比的重要.

什麼決定了一個程式設計師解決問題的能力呢? 我認為有如下幾個因素:

知識積累

在同等水平的程式設計師之間, 一個對某領域問題有所瞭解, 一個對該領域完全不瞭解, 完成該領域同樣任務的效率差了不止一個數量級. 這就是我們通常所說的"經驗"的作用, 這種經驗可以看作是知識積累,

一個程式設計師的知識積累很大程度上決定了其解決問題的能力.

有意思的是, 因為經驗這個事情不太好有準確的衡量標準, 我們為了簡單, 常常就拿工作幾年說事, 但是這種粗暴的標準有很大的問題, 工作年限同樣長的人水平差異可以是巨大的.

按老話說, 用一年的經驗工作二十年並不等同於二十年工作經驗.

自學能力

這是一個知識大爆炸, 知識重新整理頻率讓人無法追趕的時代. 一方面, 面對一個稍有難度的任務, 難免會有超出自己現有的知識範圍的時候, 此時自學能力決定了你能多快的完成此任務(或能否完成此任務). 另一方面, 你的自學能力決定了在平時的工作過程中, 你積累知識的多少.

自學能力強的人, 即使沒有人指點也總能在專案的程式碼中學到東西. 而反過來, 學習意願弱的人寫的程式碼被別人重構後, 也不會想想, 這段程式碼是否改的更好了以及為什麼. 同時, 一個自學能力強的人也更有希望主動的在業餘去學習更多的知識, 而不是直到工作中碰到才去被動學習.

從較長的尺度上(比如一個人的工作生涯)來看, 一個程式設計師知識積累的多少隻決定於其自學能力和他對程式設計本身的興趣.

品味

本來我是想把一個程式設計師的品味單獨列出來的, 後來仔細想想, 一個程式設計師的品味其實不是一種天生的能力, 而是基於現有知識的積累, 形成的對事物的看法. 所以把品味放在自學能力下面的. 同樣的, 其實通常說的正確的思維模式和方法, 其實也是來自於知識的積累. 這裡我就根本不提這一條了.

品味往往用於形容一個人對時尚衣著, 食物等的看法, 其實對程式設計師來說, 品味也很重要.

不同的品味不僅決定了不同的語言設計者怎麼設計程式語言, 也決定了一個程式設計師在做專案時會使用什麼語言, 什麼框架.
不同的品味決定了你會選擇什麼樣的作業系統, 什麼樣的工具, 用什麼樣的程式碼規範.

不同的品味甚至還決定了你會選擇什麼樣的職業發展方向, 什麼樣的平臺, 開發什麼東西.

對程式碼的品味決定了你看到一段不好的程式碼就能"聞到壞味道", 對解決方案的品味決定了你在 開源/閉源, 激進/保守, 簡單/功能強大但複雜 等解決方案之間的選擇.

對於程式碼的品味, 我覺得沒有什麼比The Zen of Python更有意思的了:

關於品味, 想順面提及的是對設計的品味, 比如一個網站的設計, 一個部落格的設計. 我最開始寫部落格是在CSDN(http://blog.csdn.net/vagrxie), 最大的好處就是免費, 並且不用我維護, 但是後來慢慢的就感覺模版風格沒有符合我品味的, 而修改模版又麻煩, 彈出框也挺煩人的, 寫文章的方法也嘗試了很多, 總沒有找到一個合適的. 建了獨立部落格後(http://www.jtianling.com), 剛開始就是照搬了酷殼的模版, 然後線上寫, 後來感覺模版看著不舒服, 自己從wordpress的預設模版上改了一套自己的, 主要的改進就是文章內容頁面改為了合適寬度的單獨一列, 程式碼段用pygments的default風格做高亮, 因為我覺得這樣才適合閱讀並且美觀, 而寫部落格的方法在在嘗試了很多方法後, 現在使用Vim + markdown來寫, 用git管理, 感覺很順手. 在最新的伺服器中, 我甚至把apache改成了lighttpd, 一起下來花費的時間可真不少, 花了那麼多功夫, 其實僅僅是對自己品味的追求而已.

這裡順面推薦兩篇關於品味的文章, 雖然和本文沒有太大關係:

瞭解正確的做事方法

這裡提及的正確的做事方法不是指寫程式碼這個層面上的, 而是指一個專案進行過程中碰到問題的解決方法, 比如在需求不明確的時候知道需要先明確需求, 知道自己需要先理解問題了然後再開始真正的進入程式碼層面的工作, 知道碰到什麼問題能自己獨立的解決, 知道碰到什麼問題自己需要先和其他人溝通了再決定. 知道自己需要先測試才能保證自己程式碼的質量等.

這些問題說起來簡單, 但是不這麼做的話, 常常帶來讓人無語的後果. 一個好的程式設計師, 起碼要先了解這些.

溝通的能力

知識的積累很大程度上決定了一個程式設計師解決問題的能力, 但那好歹是隻要努力就能學到的東西, 而以下這些, 我甚至都不明白差異的形成是在我們很小的時候就定下來了, 還是在工作中還能繼續學習.

在一個分工明確的專案中, 程式設計師需要和產品(策劃)溝通以理解產品, 和上級溝通以理解自己的任務, 和同事們溝通以正確的理解要接入的模組. 無論哪一個方面溝通出了問題都不是小事情, 同時, 程式還需要正確的給產品(策劃)傳達設計的實現難度, 以及在自己完成模組時讓別人正確的理解模組的介面. 在不寫文件時, 正確的口頭溝通非常重要, 需要寫文件時, 文件的寫作能力也算做是溝通能力的一部分.

如上所述, 溝通的能力非常重要, 但是好的程式設計師似乎天生就不太會溝通, 你會發現很多技術頂尖的人, 其實本身就是有社交障礙或者自閉症, 因為自閉, 才能心無旁騖的潛心鑽研技術, 達到更高的技術水平, 很難想象一個"社會活動家", 他哪有那麼多功夫去學習, 沒有時間學習, 又怎麼能成為一個技術頂尖的人. 這是一個兩難的問題. 就理想的情況來看, 一個程式設計師最好是溝通能力足夠好(能正確完成上述溝通工作), 但是又能足夠的靜下心來學習和鑽研. 當然, 這是最理想的情況, 在實際中, 兩者之間的較大波動範圍都算是可以接受的好程式設計師標準.

對工作負責, 對程式碼有追求

對工作態度消極, 程式碼總等到別人來測試, 寫程式碼以完成功能為唯一標準, 也不管bug是否成堆, 程式碼是否醜陋不堪, 這種程式設計師就算是工作一萬年也成不了好程式設計師.

一個好程式設計師就該對自己的工作負責, 對自己的程式碼有追求, 不僅要完成功能, 還要程式碼優美, 不說要把程式碼寫成藝術品, 起碼也要當作自己的臉面來維護. 一個程式設計師不能容忍自己的臉上亂七八糟, 那麼也同樣不應該能容忍自己的程式碼亂七八糟.

事實上, 別的程式設計師在瞭解你之前, 先看到的是你的程式碼, 通過程式碼, 就能知道你是怎麼樣一個人. 專案緊, 隨手寫, 以後改都不能成為寫爛程式碼的理由.

一個好程式設計師, 起碼是想要把任務完成好的, 起碼是想要把程式碼寫好的, 不然如何能稱其為"好".

怎麼提高自己解決問題的能力?

其實轉了這麼大個彎, 怎麼樣做一個好的程式設計師的問題可以轉為問怎麼提高自己解決問題的能力.

溝通能力, 對工作負責任的態度, 對程式碼的追求, 很大程度上由性格決定, 我不知道實際中怎麼簡單的去提高, 這裡只稍微的談談我對知識積累的一些看法吧.

  1. 培養興趣(我也不知道興趣究竟能不能培養), 技術工作總是辛苦的, 程式設計尤其如此, 假如你對此沒有濃烈的興趣, 不能從程式設計本身找到很多樂趣, 那最好就不要奢求能成為一個好的程式設計師了. 對程式設計的興趣也是我一般招聘初級程式設計師時最大的要求.
  2. 什麼樣的環境決定你有什麼樣的知識積累過程, 決定了你的品味, 決定了你會以什麼方式來做事. 這個除非有強大的意志力(極少見), 不然概莫能外. 所以, 慎選你的工作環境, 特別是剛畢業的時候.
  3. 不要停留在自己學習的舒適區, 假如你的工作僅僅是以前工作的簡單重複, 你會工作的很輕鬆, 同時, 也很難有提高.

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述