程序員成長的10個階段

我的程序員成長之路
程序員的成長經歷往往很相似,大部分的人走過了最前面相同的一段路,而有的人則走得更遠。總結自己這些年來的歷程,這也許能讓年輕的程序員少走一些彎路,成長得更快;或許更好一些,能讓大家從中得到一些啟發,早日進入優秀程序員的階段,實現夢想,釋放激情。

第一階段,最初是在學校里學習計算機基礎知識,學習經典的程序設計語言,編寫測試用的小程序。這個過程可以說是對計算機和程序設計的入門階段。這個階段主要是培養了自己對計算機軟件的興趣,打下了良好的計算機基礎知識。

第二階段,而后參加工作,從事計算機軟件開發工作。按照工作要求,一邊學習,一邊編程,終于可以讓自己的程序投入運行了。在這個階段我突然感覺到了自己的價值,感覺到了軟件的神奇,并且自己編寫的軟件成為了實用產品。這個階段實現了學習到生產的過渡。

第三階段,隨著工作的增加,開始編寫各種程序,開發各種系統,這時候忙于編程知識的積累和應用。應該說在這個階段自我感覺很充實,好像有做不完的事,程序設計水平還處在語言級階段。

第四階段,隨著積累了一定編程技巧之后,我開始想這樣的問題:我是不是最好的程序員?我能否編寫出最好的程序?這個過程是一個反思的階段。我對自己的要求是:不但要會編程序,而且要編好程序,從關注程序數量開始轉向關注程序質量。

第五階段,開始在提高自己的軟件開發水平上做文章。經過各種系統開發,尤其是大型系統的開發,發現了軟件中有許多功能是重復的。因此,有一段時間把精力花在編制各種庫函數上,通過不同系統調用相同的函數,以便減少重復開發,實現功能共享。當時比較得意的是庫函數不是我一個人在調用,而是整個項目小組都在調用,甚至不同的系統也能調用,從而體會到編寫庫函數特別有價值。這個階段的標志是庫函數,程序員水平上升到庫函數那一級。

第六階段,到了庫函數那一級后,很快就發現,單單實現程序函數級的調用是遠遠不夠的。當你做了很多項目,包括大項目和小項目,尤其是做過跨行業的項目之后,你就會把庫函數的共享思想用于項目開發。你就會想這樣一個問題:為什么不同項目不能有相同的架構?如果有相同的架構,那么開發就有了相對的標準,我們就有可能通過配置的方法實現相同架構的系統。于是我提出了IASG(交互式軟件自動生成器)思想,并在C語言和其他一些語言中實現了IASG實例。記得最快的一次是編寫一個系統(公安部門的自行車信息管理系統,主要用于丟失自行車信息登記)只用了3個小時(從需求到安裝盤)。這個事情對我影響很大。我在這個階段上升了一個很大的臺階,從程序上升到軟件。核心思想就從庫函數共享上升到軟件共享。具體過程是建立一個通用的系統架構,架構中有許多共同的功能,例如,參數設置、用戶權限管理、庫表管理等。另外還提供信息建立查詢開發模板,通過配置和特殊功能的編制就能很快完成了一個系統的開發。現在想起來IASG距離我已經有20年了。

第七階段,到了IASG階段后,我發現無論技術如何提高,都無法改變開發落后于需求的現實。通俗地說就是:程序員水平再高,僅僅是拉車水平高,但是,應該在什么路上拉車程序員并不知道。如果這條路是一條光明的路,則程序員越拉越有勁,有前途;如果這是一條死胡同,則程序員白費工夫;如果這是一條漫長的路,前途不明,則程序員可能要累倒在路上。現實中程序員水平低、收入低;系統需求不明確,系統開發周期一拖再拖;系統重復開發多,信息甚至不能在一個企業內實現共享,更不用說在企業之間、行業之間實現共享了;各種企業級的軟件ERP、CRM、BI層出不窮,也沒有哪個能滿足中國的市場;各種新技術、新概念不斷出現,卻沒有哪種技術或概念能真正發揮其內在價值,最終還是處于被學習、被運用的階段。
這個過程是程序員脫離技術本身,開始思索、開始求源的階段。在這個階段的程序員的思想有了質的飛躍。以前光拉車不看路,現在要抬頭看路了。

第八階段,有了抬頭看路的想法,于是我踏上尋路征程。我首先弄明白了我們腳下的路是什么樣的,為什么這條路那么不平坦、不寬廣。從軟件生命周期來看,軟件主要由用戶需求發起,用戶需求是軟件生存的根本理由。由于企業、用戶的不同而導致不同的需求——大量的無序的需求,這種需求驅動方式必然造成了我前面介紹的各種現象。這個階段是尋找根源的階段。只要我們找到了根源,就可以有機會解決問題。這個過程相對來說比較困難,這不僅需要編程技術,還需要很多方面的知識。若要了解這個根源,就迫使你學習和積累更多程序以外的知識。

第九階段,當我找到軟件是需求驅動方式之后,就開始考慮什么是用戶需求?用戶為什么要提出這些需求?我們可以更深入地分析用戶需求產生的根源,我們能否讓無序需求變成有序需求呢?當然針對這些問題我們都進行了深入分析,其過程也很難在這里展開說明。我只能說,最后結論是用戶的需求來源于企業的經營。很多人思考問題還是就需求而論,并沒有站在企業經營角度去考慮問題。千萬不要小看這個變化,這個變化最終會產生一個理論。于是我們盡可能地站在企業經營角度看待企業經營方式、企業管理、企業信息化等。但是,我們最終要解決企業經營這個概念問題,如果我們都不能明確企業經營這個概念,或者我們不能科學地定義企業經營這個概念,那一切基于企業經營的各種具體現象就如同無本之源一樣無序泛濫。就像ERP、CRM等所謂企業信息化產品一樣,由于沒有一個企業經營定義的支撐,只能就企業經營的某個方面提出解決方案。這些產品不缺乏需求的支持,缺乏的是最基本的企業經營定義的支持。而這個概念就是EOM。


EOM是從定義企業經營角度入手,把我們今后要開展的各種研究和開發活動都放在一個理論可支持的基礎上。只有定義了企業經營之后,我們才有可能分析我們需要什么軟件,我們的軟件采用什么技術才能實現企業經營的目標。而程序員則通過EOM了解到企業經營需要什么樣的軟件,這個軟件有多大的價值,這個軟件采用什么技術才能實現,自己要提高哪方面的技術水平才能獲得更大的價值。
這個過程就是EOM階段,通過EOM了解軟件的根源和有價值的軟件所在,進而選擇自己未來的方向。

第十階段,當我建立了EOM之后,便開始了EOM實現階段。這個實現階段分為兩部分,通過這兩部分的結合,我們就可以逐步看到EOM軟件產品的實例,看到EOM的真正價值。

第一部分是EOM的業務實現。當我們明確了EOM之后,就可以根據EOM來重新規劃企業信息化的整體架構,可以細分這個架構中的各種平臺產品、通用產品、專業產品,可以細分出這個架構實現的各種技術架構和實現手段,可以細分出這個架構中的各種標準功能和標準信息。通過這樣的分析,我們的程序員就可以根據自己的特長和愛好以及價值的判斷來選擇其中的軟件產品和技術。在明確目標和方向的情形下,通過自己的努力,不斷提高自己的各種技能水平,讓自己的價值和企業經營價值有機地結合在一起,從而實現自己的理想。

第二部分是EOM的技術實現。有了EOM并根據EOM理論構建企業信息化的架構后,我們就必須從技術上實現這個架構,否則這個架構將永遠停留在理論階段,不具有可行性。我們可以采用現有的各種技術來實現這個架構,但是,現有的技術都是基于原有的業務需求而建立和發展的,它適用于原來的應用對象。目前的EOM是一個全新的企業經營理念,因此,我們必須建立一種新的軟件架構來適應和最好地實現這個理念。幸運的是,我們找到了稱作NSS(New Software Structure)軟件新架構的技術,該技術體現了適應企業經營發展方向,將軟件合理分層,用最新的軟件技術按照架構的方式規范軟件開發的模式,可以實現最大范圍的功能共享,實現軟件的可擴展性。
這個階段可以讓程序員在軟件產品業務設計或軟件產品技術實現上等多個方面進行深入鉆研,并且成為領域專家。這和我們平時涉及的簡單的需求分析和簡單的技術實現有著本質區別。
從我的程序員經歷可以看出,程序員的成長是無止境的,只要有的放矢地努力,就會一步步登高向上。我認為程序員成長經歷主要有三大階段,即通用技術階段、市場階段、專業技術階段。
1)通用技術階段是程序員專注編程水平提高的階段,也就是說“只拉車不看路”階段。這個程序員能做的事情那個程序員也能做,程序員的替代性很強,程序員市場價值相對較低,程序員只關注編程技術本身。
2)市場階段是程序員跳離技術層面開始考慮為什么要開發這個軟件,這個軟件有什么價值的階段,通過求軟件之源來重新認知自己的方向。
3)專用技術階段是程序員認知了這個軟件和技術有很大的市場價值,全身心投入到這個領域中去,并在這個領域成為專家的階段。程序員不但要懂技術,更要懂得客戶業務,不同的程序員的技術和業務變得沒有可比性,這種稀缺性造就了程序員極大的價值。
這三個階段其實就是三個過程,每一個過程都是一次飛躍。程序員知道自己可以飛多高,依靠的是程序員的學習和眼界;而程序員能飛到哪里,那就要靠程序員自身的努力。一個程序員可以沒有能力,但是不可以沒有眼界。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mapper注解的主要作用_Mybatis中mapper的xml解析詳解

上一篇文章分析了mapper注解關鍵類MapperAnnotationBuilder,今天來看mapper的項目了解析關鍵類XMLMapperBuilder。基礎介紹回顧下之前是在分析configuration的初始化過程,已經進行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

機器學習之梯度下降法(GD)和坐標軸下降法(CD)

梯度下降法 梯度下降法(Gradient Descent, GD)常用于求解無約束情況下凸函數(Convex Function)的極小值,是一種迭代類型的算法,因為凸函數只有一個極值點,故求解出來的極小值點就是函數的最小值…

阿里云Https部署網站

0、開始之前 文章圖片很多,注意流量 首先你得準備好一個已經備案成功的域名,并且有一個在阿里云的服務器部署了的網站。 然后就是你迫切的希望升級網站為HTTPS部署。 那么我們開始吧! 1、申請CA證書 1.1登錄阿里云控制臺,選擇菜單…

mysql數據庫多實例部署

本文系統:rhel5.8 ip : 192.168.100.150 數據庫版本:mysql-5.6.15 1、創建部署mysql服務賬號: 1234[rootdaf ~]# useradd -d /opt/mysql mysql [rootdaf ~]# echo "mysql" |passwd --stdin mysql Changing password for user mysq…

Python 第三方模塊之 numpy.linalg - 線性代數

目錄 numpy.linalg.det() 行列式 numpy.linalg.solve() 方程的解 numpy.linalg.inv() 逆矩陣 np.linalg.eig 特征值和特征向量 np.linalg.svd 奇異值分解 np.linalg.pinv 廣義逆矩陣(QR分解) numpy.linalg模塊包含線性代數的函數。使用這個模塊&am…

rabbitmq direct 多個消費者_一文解析 RabbitMQ 最常用的三大模式

Direct 模式所有發送到 Direct Exchange 的消息被轉發到 RouteKey 中指定的 Queue。Direct 模式可以使用 RabbitMQ 自帶的 Exchange: default Exchange,所以不需要將 Exchange 進行任何綁定(binding)操作。消息傳遞時,RouteKey 必須完全匹配才會被隊列接…

程序員成長最快的環境

除開五大或者ThoughtWorks這種要什么有什么,進去做打字也能光耀門楣的不談。如果是嫁到一個普通軟件公司,怎樣的環境才能最快的成長呢?首先基本的 公司項目管理水平是必要的;其次是穩健而不保守的公司技術選型和一班能溝通的同事。…

【BZOJ4254】Aerial Tramway 樹形DP

【BZOJ4254】Aerial Tramway 題意&#xff1a;給你一座山上n點的坐標&#xff0c;讓你在山里建m條纜車&#xff0c;要求纜車兩端的高度必須相等&#xff0c;且中間經過的點的高度都小于纜車的高度。并且不能存在一個點位于至少k條纜車的下方。求纜車的最大總長度。 n,m<200,…

C# 讀取保存App.config配置文件的完整源碼參考

最近出差在北京做一個小項目&#xff0c;項目里需要讀取配置文件的小功能&#xff0c;覺得挺有參考意義的就把代碼發上來給大家參考一下。我們選擇了直接用微軟的讀取配置文件的方法。 這個是程序的運行設計效果&#xff0c;就是把這些參數可以進行靈活設置&#xff0c;靈活保存…

TensorFlow 簡介

TensorFlow介紹 Tagline&#xff1a;An open-source software library for Machine Intelligence.Definition&#xff1a;TensorFlow TM is an open source software library fornumerical computation using data flow graphs.GitHub&#xff1a;https://github.com/tensorfl…

webbrowser設置為相應的IE版本

注冊表路徑&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或者HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 究竟選擇哪一個…

jmeter壓力測試_用Jmeter實現對接口的壓力測試

一、多個真實用戶對接口的壓力測試1. 獲取多個真實用戶的token的兩種方法&#xff1a;1)第一種&#xff1a;讓開發幫忙生成多個token(多個用戶賬戶生成的token)&#xff0c;導出為csv格式的文件(以下步驟均以該方法為基礎)2)第二種&#xff1a;自己設置多個用戶賬戶和密碼&…

程序員成長之路(轉)

什么時候才能成為一個專業程序員呢&#xff1f;三年還是五年工作經驗&#xff1f;其實不用的&#xff0c;你馬上就可以了&#xff0c;我沒有騙你&#xff0c;因為專業程序員與業余程序員的區別主要在于一種態度&#xff0c;如果缺乏這種態度&#xff0c;擁有十年工作經驗也還是…

嵌入式開發——PWM高級定時器

學習目標 加強掌握PWM開發流程理解定時器與通道的關系掌握多通道配置策略掌握互補PWM配置策略掌握定時器查詢方式掌握代碼抽取優化策略掌握PWM調試方式學習內容 需求 點亮8個燈,采用pwm的方式。 定時器 通道 <

解決虛擬機時間引起的奇怪問題

一直使用得好好的虛擬機最近出了一個奇怪問題在虛擬機裝好的lamp在客戶端訪問phpmyadmin的時候,使用firefox登錄沒問題,但是使用IE不行總是停留在登錄的界面,而且沒有提供任何的出錯信息,就連在apache的日志里面也看不到.注意到同樣訪問的時候,在IE上顯示的轉向的url是[url]htt…

TensorFlow 基本操作

Tensorflow基本概念 圖(Graph):圖描述了計算的過程&#xff0c;TensorFlow使用圖來表示計算任務。張量(Tensor):TensorFlow使用tensor表示數據。每個Tensor是一個類型化的多維數組。操作(op):圖中的節點被稱為op(opearation的縮寫)&#xff0c;一個op獲得/輸入0個或多個Tensor…

03_zookeeper偽集群安裝

一句話說明白&#xff1a;在1臺機器上模擬多臺機器&#xff0c;對外提供服務 在理解zookeeper集群安裝方法的基礎上&#xff0c;本文描述如何將1個機器模擬為3個節點的zookeeper集群&#xff0c;建議先參考閱讀本文的前一期 zookeeper偽集群安裝總結 在本機上通過復制的方式&am…

python合成語音_MicroPython動手做(25)——語音合成與語音識別

6、AB按鍵切換語言合成項目[mw_shl_codepython,true]#MicroPython動手做(25)——語音合成與語音識別#AB按鍵切換語言合成項目from mpython import *import networkimport timeimport ntptimefrom xunfei import *import audiomy_wifi wifi()my_wifi.connectWiFi("zh"…

專訪谷歌CEO:像對待家人一樣對待員工

導語&#xff1a;《財富》近日公布了“2012年度美國100家最適宜工作的公司”榜單&#xff0c;谷歌當選冠軍。即將于2月6日出版的美國《財富》雜志印刷版將刊登對谷歌CEO拉里佩奇(Larry Page)的專訪&#xff0c;對谷歌的工作環境進行了介紹。 以下為采訪概要&#xff1a; 問&a…

TensorFlow 分布式

一、簡介 使用單臺機器或者單個GPU/CPU來進行模型訓練&#xff0c;訓練速度會受資源的影響&#xff0c;因為畢竟單個的設備的計算能力和存儲能力具有一定的上限的&#xff0c;針對這個問題&#xff0c;TensorFlow支持分布式模型運算&#xff0c;支持多機器、多GPU、多CPU各種模…