① 做一個程序員要具備什麼
1:團隊精神和協作能力 ,和基本的操作常識,缺乏這種素質的人就完全不合格了。
2.要有做文檔的習慣,缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇 到極大的麻煩。
3:規范化,標准化的代碼編寫習慣 。
4.代碼具有良好的可讀性,是程序員基本的素質需求。
5.程序員需要理解一個模塊的需求,把性能指標全部歸結到硬體,操作系統和開發環境上。
6.復用性,模塊化思維能力 ,避免大部分重復性工作無謂的浪費了時間和精力。
7. 測試習慣 ,作為一些商業化正規化的開發而言,專職的測試工程師是不可少的
8..程序員是人才很容易被淘汰,很容易落伍的職業,必須不斷跟進新的技術,學習新的技能。
計算機語言的種類非常的多,總的來說可以分成機器語言,匯編語言,高級語言三大類。
電腦每做的一次動作,一個步驟,都是按照以經用計算機語言編好的程序來執行的,程序是計算機要執行的指令的集合,而程序全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機一定要通過計算機語言向計算機發出命令。
計算機所能識別的語言只有機器語言,即由0和1構成的代碼。但通常人們編程時,不採用機器語言,因為它非常難於記憶和識別。
目前通用的編程語言有兩種形式:匯編語言和高級語言。
匯編語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序通常由三部分組成:指令、偽指令和宏指令。匯編程序的每一句指令只能對應實際操作過程中的一個很細微的動作,例如移動、自增,因此匯編源程序一般比較冗長、復雜、容易出錯,而且使用匯編語言編程需要有更多的計算機專業知識,但匯編語言的優點也是顯而易見的,用匯編語言所能完成的操作不是一般高級語言所能實現的,而且源程序經匯編生成的可執行文件不僅比較小,而且執行速度很快。
高級語言是目前絕大多數編程者的選擇。和匯編語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由於省略了很多細節,編程者也就不需要有太多的專業知識。
高級語言主要是相對於匯編語言而言,它並不是特指某一種具體的語言,而是包括了很多編程語言,如目前流行的VB、VC、FoxPro、Delphi等,這些語言的語法、命令格式都各不相同。
高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可將它們分為兩類:
解釋類:執行方式類似於我們日常生活中的「同聲翻譯」,應用程序源代碼一邊由相應語言的解釋器「翻譯」成目標代碼(機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器,但這種方式比較靈活,可以動態地調整、修改應用程序。
編譯類:編譯是指在應用源程序執行之前,就將程序源代碼「翻譯」成目標代碼(機器語言),因此其目標程序可以脫離其語言環境獨立執行,使用比較方便、效率較高。但應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(* .OBJ)才能執行,只有目標文件而沒有源代碼,修改很不方便。現在大多數的編程語言都是編譯型的,例如Visual C++、Visual Foxpro、Delphi等。
[NextPage]
學習編程,從何入手
如果您想學習編程,卻又不知從何入手,那麼您不妨看看下面的幾種學習方案,可能會給您一些啟示吧!
==============================================
方案一 Basic語言 & Visual Basic
優點
(1)Basic 簡單易學,很容易上手。
(2)Visual Basic 提供了強大的可視化編程能力,可以讓你輕松地做出漂亮的程序。
(3)眾多的控制項讓編程變得象壘積木一樣簡單。
(4)Visual Basic 的全部漢化讓我們這些見了English就頭大的人喜不自禁。
缺點
(1)Visual Basic 不是真正的面向對象的開發文具。
(2)Visual Basic 的數據類型太少,而且不支持指針,這使得它的表達能力很有限。
(3)Visual Basic 不是真正的編譯型語言,它產生的最終代碼不是可執行的,是一種偽代碼。它需要一個動態鏈接庫去解釋執行,這使得Visual Basic 的編譯速度大大變慢。
綜述:方案一適合初涉編程的朋友,它對學習者的要求不高,幾乎每個人都可以在一個比較短的時間里學會vB編程,並用VB 做出自己的作品。對於那些把編程當做游戲的朋友來說,VB 是您最佳的選擇。
Basic/Visual Basic簡介
==============================================
方案二 Pascal語言 & Delphi
優點
(1)Pascal語言結構嚴謹,可以很好地培養一個人的編程思想。
(2)Delphi是一門真正的面向對象的開發工具,並且是完全的可視化。
(3)Delphi使用了真編譯,可以讓你的代碼編譯成為可執行的文件,而且編譯速度非常快。
(4)Delphi具有強大的資料庫開發能力,可以讓你輕松地開發資料庫。
缺點
Delphi幾乎可以說是完美的,只是Pascal語言的過於嚴謹讓人感覺有點煩。
綜述: 方案二比較適合那些具有一定編程基礎並且學過Pascal語言的朋友。
Pascal語言簡介
Delphi簡介
==============================================
方案三 C語言 & Visual C++
優點
(1)C語言靈活性好,效率高,可以接觸到軟體開發比較底層的東西。
(2)微軟的MFC庫博大精深,學會它可以讓隨心所欲地進行編程。
(3)VC是微軟製作的產品,與操作系統的結合更加緊密。
缺點
對使用者的要求比較高,既要具備豐富的C語言編程經驗,又要具有一定的WINDOWS編程基礎,它的過於專業使得一般的編程愛好者學習起來會有不小的困難。
綜述: VC是程序員用的東西。如果你是一個永不滿足的人,而且可以在編程上投入很大的精力和時間,那麼學習VC你一定不會後悔的。
C語言簡介
==============================================
方案四 C++語言 & C++ Builder
優點
(1)C++語言的優點全部得以繼承。
(2)完全的可是化。
(3)極強的兼容性,支持OWL、VCL和MFC三大類庫。
(4)編譯速度非常快。
缺點
由於推出的時間太短,關於它的各種資料還不太多。
綜述:我認為C++ Builder 是最好的編程工具。它既保持了C++語言編程的優點,又做到了完全的可視化。
C語言簡介
==============================================
方案五 SQL語言 & Power Builder
對於一些傳統的數據開發人員來說,Foxpro系列也許讓他們感到更加熟悉。但是對於初學者來說,PowerBuilder也許是最好的資料庫開發工具。各種各樣的控制項,功能強大的PowerBuilder語言都會幫助你開發出自己的資料庫應用程序。
[NextPage]
JSP簡介
在Sun正式發布JSP(Java Server Pages)之後,這種新的Web應用開發技術很快引起了人們的關注。JSP為創建高度動態的Web應用提供了一個獨特的開發環境。按照 Sun 的說法,JSP能夠適應市場上包括Apache WebServer 、IIS4.0在內的85%的伺服器產品。
JSP與ASP的簡單比較
JSP與Microsoft的ASP技術非常相似。兩者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。在ASP或JSP環境下,HTML代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的HTML頁面只依賴於Web伺服器,而ASP和JSP頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到HTML代碼中,然後一起發送給瀏覽器。ASP和JSP都是面向Web伺服器的技術,客戶端瀏覽器不需要任何附加的軟體支持。
ASP的編程語言是VBScript之類的腳本語言,JSP使用的是Java,這是兩者最明顯的區別。
此外,ASP與JSP還有一個更為本質的區別:兩種語言引擎用完全不同的方式處理頁面中嵌入的程序代碼。在ASP下,VBScript代碼被ASP引擎解釋執行;在JSP下,代碼被編譯成Servlet並由Java虛擬機執行,這種編譯操作僅在對JSP頁面的第一次請求時發生。
運行環境
執行 JSP 代碼需要在伺服器上安裝 JSP 引擎。此處我們使用的是 Sun 的 JavaServer Web Development Kit ( JSWDK )。為便於學習,這個軟體包提供了大量可供修改的示例。安裝 JSWDK 之後,只需執行 startserver 命令即可啟動伺服器。在默認配置下伺服器在埠 8080 監聽,使用 http://localhost:8080 即可打開預設頁面。
在運行 JSP 示例頁面之前,請注意一下安裝 JSWDK 的目錄,特別是" work "子目錄下的內容。執行示例頁面時,可以在這里看到 JSP 頁面如何被轉換成 Java 源文件,然後又被編譯成 class 文件(即 Servlet )。 JSWDK 軟體包中的示例頁面分為兩類,它們或者是 JSP 文件,或者是包含一個表單的 HTML 文件,這些表單均由 JSP 代碼處理。與 ASP 一樣, JSP 中的 Java 代碼均在伺服器端執行。因此,在瀏覽器中使用"查看源文件"菜單是無法看到 JSP 源代碼的,只能看到結果 HTML 代碼。所有示例的源代碼均通過一個單獨的" examples "頁面提供。
Java Servlet是一種開發Web應用的理想構架。 JSP以Servlet技術為基礎,又在許多方面作了改進。JSP頁面看起來象普通HTML頁面,但它允許嵌入執行代碼,在這一點上,它和ASP技術非常相似。利用跨平台運行的JavaBean 組件,JSP為分離處理邏輯與顯示樣式提供了卓越的解決方案。JSP必將成為ASP技術的有力競爭者。
[NextPage]
SQL語言簡介
SQL全稱是「結構化查詢語言(Structured Query Language)」,最早的是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的資料庫管理系統,還是像Visual Foxporo,PowerBuilder這些微機上常用的資料庫開發系統,都支持SQL語言作為查詢語言。
Structured Query Language包含4個部分:
數據查詢語言DQL-Data Query Language SELECT
數據操縱語言DQL-Data Manipulation Language INSERT, UPDATE, DELETE
數據定義語言DQL-Data Definition Language CREATE, ALTER, DROP
數據控制語言DQL-Data Control Language COMMIT WORK, ROLLBACK WORK
SQL的歷史
在70年代初,E.E.Codd首先提出了關系模型。70年代中期,IBM公司在研製 SYSTEM R關系資料庫管理系統中研製了SQL語言,最早的SQL語言(叫SEQUEL2)是在1976 年 11 月的IBM Journal of R&D上公布的。
1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS資料庫系統中也實現了SQL。
1986年10月,美國ANSI採用SQL作為關系資料庫管理系統的標准語言(ANSI X3. 135-1986),後為國際標准化組織(ISO)採納為國際標准。
1989年,美國ANSI採納在ANSI X3.135-1989報告中定義的關系資料庫管理系統的SQL標准語言,稱為ANSI SQL 89, 該標准替代ANSI X3.135-1986版本。該標准為下列組織所採納:
● 國際標准化組織(ISO),為ISO 9075-1989報告「Database Language SQL With Integrity Enhancement」
● 美國聯邦政府,發布在The Federal Information Processing Standard Publication(FIPS PUB)127
目前,所有主要的關系資料庫管理系統支持某些形式的SQL語言, 大部分資料庫打算遵守ANSI SQL89標准。
SQL的優點
SQL廣泛地被採用正說明了它的優點。它使全部用戶,包括應用程序員、DBA管理員和終端用戶受益非淺。
(1) 非過程化語言
SQL是一個非過程化的語言,因為它一次處理一個記錄,對數據提供自動導航。SQL允許用戶在高層的數據結構上工作,而不對單個記錄進行操作,可操作記錄集。所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結果作為另一條SQL語句的輸入。 SQL不要求用戶指定對數據的存放方法。 這種特性使用戶更易集中精力於要得到的結果。所有SQL語句使用查詢優化器,它是RDBMS的一部分,由它決定對指定數據存取的最快速度的手段。查詢優化器知道存在什麼索引,哪兒使用合適,而用戶從不需要知道表是否有索引,表有什麼類型的索引。
(2) 統一的語言
SQL可用於所有用戶的DB活動模型,包括系統管理員、資料庫管理員、 應用程序員、決策支持系統人員及許多其它類型的終端用戶。基本的SQL 命令只需很少時間就能學會,最高級的命令在幾天內便可掌握。 SQL為許多任務提供了命令,包括:
● 查詢數據
● 在表中插入、修改和刪除記錄
● 建立、修改和刪除數據對象
● 控制對數據和數據對象的存取
● 保證資料庫一致性和完整性
以前的資料庫管理系統為上述各類操作提供單獨的語言,而SQL 將全部任務統一在一種語言中。
(3) 是所有關系資料庫的公共語言
由於所有主要的關系資料庫管理系統都支持SQL語言,用戶可將使用SQL的技能從一個RDBMS轉到另一個。所有用SQL編寫的程序都是可以移植的。
[NextPage]
Java語言簡介
一. Java的由來
當1995年SUN推出Java語言之後,全世界的目光都被這個神奇的語言所吸引。那麼Java到底有何神奇之處呢?
Java語言其實最是誕生於1991年,起初被稱為OAK語言,是SUN公司為一些消費性電子產品而設計的一個通用環境。他們最初的目的只是為了開發一種獨立於平台的軟體技術,而且在網路出現之前,OAK可以說是默默無聞,甚至差點夭折。但是,網路的出現改變了OAK的命運。
在Java出現以前。Internet上的信息內容都是一些乏味死板的HTML文檔。這對於那些迷戀於WEB瀏覽的人們來說簡直不可容忍。他們迫切希望能在WEN中看到一些互動式的內容,開發人員也極希望能夠在WEB上創建一類無需考慮軟硬體平台就可以執行的應用程序,當然這些程序還要有極大的安全保障。對於用戶的這種要求,傳統的編程語言顯得無能為力,面SUN的工程師敏銳地察覺到了這一點,從1994年起,他們開始將OAK技術應用於WEB上,並且開發出了HotJava的第一個版本。當SUN公司1995年正式以Java這個名字推出的時候,幾乎所有的WEB開發人員都想到:噢,這正是我想要的。於是Java成了一顆耀眼的明星,丑小鴨一下了變成了白天鵝。
二. Java的定義
Java是一種簡單的,面象對象的,分布式的,解釋的,鍵壯的安全的,結構的中立的,可移植的,性能很優異的多線程的,動態的語言。
Java的開發環境有不同的版本,如sun公司的Java Developers Kit, 簡稱 JDK。後來微軟公司推出了支持Java規范的Microsoft Visual J++ Java開發環境,簡稱 VJ++。
三. Java的特點
1. 平台無關性
平台無關性是指Java能運行於不同的平台。Java引進虛擬機 原理,並運行於虛擬機,實現不同平台的Java介面之間。使 用Java編寫的程序能在世界范圍內共享。Java的數據類型與 機器無關,Java虛擬機(Java Virtual Machine)是建立在 硬體和操作系統之上,實現Java二進制代碼的解釋執行功能, 提供於不同平台的介面的。
2. 安全性
Java的編程類似C++,學習過C++的讀者將很快掌握Java的精 髓。Java舍棄了C++的指針對存儲器地址的直接操作,程序 運行時,內存由操作系統分配,這樣可以避免病毒通過指 針侵入系統。Java對程序提供了安全管理器,防止程序的 非法訪問。
3. 面向對象
Java 吸取了C++面向對象的概念,將數據封裝於類中,利用類 的優點,實現了程序的簡潔性和便於維護性。類的封裝性、 繼承性等有關對象的特性,使程序代碼只需一次編譯,然後 通過上述特性反復利用。程序員只需把主要精力用在類和接 口的設計和應用上。Java 提供了眾多的一般對象的類,通 過繼承即可使用父類的方法。在 Java 中,類的繼承關系是單一的非多重的,一個子類 只有一個父類,子類的父類又有一個父類。Java 提供的 Object 類及其子類的繼承關系如同一棵倒立的樹形,根類 為 Object 類, Object 類功能強大,經常會使用到它及其 它派生的子類。
4. 分布式
Java建立在擴展TCP/IP網路平台上。庫函數提供了用HTTP和FTP協議傳送和接受信息的方法。這使得程序員使用網路上的文件和使用本機文件一樣容易。
5. 鍵壯性
Java致力於檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發早期出現的錯誤。Java自已操縱內存減少了內存出錯的可能性。Java還實現了真數組,避免了覆蓋數據的可能。這些功能特徵大大提高了開發Java應用程序的周期。Java提供: Null指針檢測、 數組邊界檢測、 異常出口、 Byte code校驗。
四. Java與C/C++語言
Java提供了一個功能強大語言的所有功能,但幾乎沒有一點含混特徵。C++安全性不好,但C和C++被大家接受,所以Java設計成C++形式,讓大家很容易學習。
Java去掉了C++語言的許多功能,讓Java的語言功能很精煉,並增加了一些很有用的功能,如自動收集碎片。
Java去掉了以下幾個C和C++功能:
指針運算
結構
typedefs
#define
需要釋放內存
這將減少了平常出錯的50%。而且,Java很小,整個解釋器只需215K的RAM。
面象對象:Java實現了C++的基本面象對象技術並有一些增強,(為了語言簡單,刪除了一些功能)。Java處理數據方式和用對象介面處理對象數據方式一樣。
五. Java與Internet
我們知道,早先的 www 僅可以傳送文本和圖片,Java的出現實現了互動的頁面,是一次偉大的革命。
Java並不是為 Internet,WWW而設計的,它也可以用來編寫獨立的應用程序。Java 是一種面向對象語言。Java 語言類似於 C++ 語言,所以已熟練掌握 C++語言的編程人員,再學習 Java 語言就容易得多!Java 程序需要編譯。實際上有兩種 Java 程序:一種 Java 應用程序是一個完整的程序,如 Web 瀏覽器。一種 Java 小應用程序是運行於 Web 瀏覽器中的一個程序.
Java程序和它的瀏覽器HotJava,提供了可讓你的瀏覽器運行程序的方法。你能從你的瀏覽器里直接播放聲音。你還能播放頁面里的動畫。Java還能告訴你的瀏覽器怎樣處理新的類型文件。當我們能在2400 baud線上傳輸視頻圖象時,HotJava將能顯示這些視頻。
當今Internet的一大發展趨勢是電子商務,而Internet的安全問題是必須解決的問題,通常大的部門應設置防火牆,阻止非法侵入。
電子商務是當今的熱門話題,然而傳統的編程語言難以勝任電子商務系統,電子商務要求程序代碼具有基本的要求:安全、可靠、同時要求能 與運行於不同平台的機器的全世界客戶開展業務。Java以其強安全性、平台無關性、硬體結構無關性、語言簡潔同時面向對象,在網路編程語言中占據無可比擬的優勢,成為實現電子商務系統的首選語言。
Java程序被放置在Internet伺服器上,當用戶訪問伺服器時,Java程序被下載到本地的用戶機上,由瀏覽器解釋運行。
[NextPage]
PowerBuilder簡介
PowerBuilder的產生
PowerBuilder是美國著名的資料庫應用開發工具生產廠商PowerSoft推出的成功產品,其第一版於1991年6月正式投入市場。它是完全按照客戶/伺服器體系結構研製設計的,採用面向對象技術,圖形化的應用開發環境,是資料庫的前端開發工具。
PowerBuilder的特點
它支持應用系統同時訪問多種資料庫,其中既包括Oracel,Sybase之類的大型資料庫,又包括FOXPRO之類支持ODBC介面的小型資料庫,PowerBuilder是完全可視化的資料庫開發工具,它提供了大量的控制項,大大加快了項目的開發速度,也使開發者更容易掌握資料庫的開發。
它使用的編程語言叫做工PowerScripr,它也是一種高級的,結構化的編程語言。PowerScript提供了一套完整的嵌入式SQL語句,開發人員可以像使用其它語句一樣自由地使用SQL語言,這樣就大大增強了程序操縱和訪問資料庫的能力。可以說PowerBuilder既適合初學者快速學習資料庫的開發,又可以讓有經驗的開發人員開發出功能強大的資料庫,是一種適用面非常廣的開發工具。
PowerBuilder是一個用來進行客戶/伺服器開發的完全的可視化開發環境。使用PowerBuilder,你可以用一種可視的直觀的方式來創建應用程序的用戶界面和資料庫介面。這是一個總的概念,實際上是開發人員使用PowerBuilder去開發應用程序,由於所開發的各種應用程序充分利用了圖形用戶介面(GUI)的優點,所以PowerBuilder被認為是一個圖形工具。
在客戶/伺服器結構的應用中,PowerBuilder具有描述多個資料庫連接與檢索的能力。特別是PowerBuilder能從大多數流行的RDBMS中存取數據,且不管數據存放在什麽地方;另外,各種應用程序又可以獨立於RDBMS,因為PowerBuilder可以使用資料庫的標准操作語言SQL(結構化查詢語言)進行。
使用PowerBuilder,可以很容易地開發出功能強大的圖形界面的訪問伺服器資料庫的應用程序,PowerBuilder提供了建立符合工業標準的應用程序(例如訂單登記、會計及製造系統)所需的所有工具。
PowerBuilder應用程序由窗口組成,這些窗口包含用戶與之交互的控制項。開發人員可以使用所有標准
如WINDOWS XP \WINDOWS 2000 \WINDOW VIST.等
② 初入職場的程序員,掌握「潛規則」才能不走彎路多加薪,你怎麼看
很多學子也陸陸續續地走向工作崗位,而同時,他們也將有一個新的身份——程序員,這個身份會一直伴隨大家的職業生涯。在為學子們開心的同時,作為見證大家成長的小說哥,也想給大家多囑咐幾句,希望以下職場「潛規則」,能讓大家不走彎路多加薪!
工作場合注意自身形象,良好的儀表、文雅的舉止、有分寸的說話,不僅能提高自信,也能給他人帶來愉悅的感受。提高主觀能動性,不要只會埋頭苦幹,要懂得主動向領導匯報你的工作,多溝通多請示,讓領導看到你的努力,這樣加薪的時候才會想到你。
養成記筆記的好習慣,遇到開會等場合,隨時記錄,下班前對自己一天的工作進行總結,查漏補缺,要知道只有回顧過去,才能更好地出發。
③ 18條法則讓程序員升職加薪!
好的編程原則跟好的系統設計原則和技術實施原則有著密切的聯系。下面的這些編程原則在過去的這些年裡讓我成為了一名優秀的程序員,我相信,這些原則對任何一個開發人員來說,都能讓他的編程能力大幅度的提高,能讓他開發出可維護性更強、缺陷更少的程序。
1.不要自我重復
這也許是在編程開發這最最基本的一個信條,就是要告訴你不要出現重復的代碼。我們很多的編程結構之所以存在,就是為了幫助我們消除重復(例如,循環語句,函數,類,等等)。一旦程序里開始有重復現象的出現(例如很長的表達式、一大堆的語句,但都是為了表達相同的概念),你就需要對代碼進行一次新的提煉,抽象。
2.提煉原則
跟「不要自我重復原則」相關,這一原則是說「程序中任何一段具有功能性的代碼在源代碼文件中應該唯一的存在。」
3.保持簡單
簡單化(避免復雜)永遠都應該是你的頭等目標。簡單的程序讓你寫起來容易,產生的bug更少,更容易維護修改。
4.不要開發你目前用不到的功能
除非你真正需要用到它,否則不要輕易加上那些亂七八糟用不到的功能。
5.用最簡單的方法讓程序跑起來
在開發時有個非常好的問題你需要問問自己,「怎樣才能最簡單的讓程序跑起來?」這能幫助我們在設計時讓程序保持簡單。
6.不要讓我動腦子
這實際上是SteveKrug
關於web界面操作的一本書的書名,但也適用於編程。主旨是,程序代碼應該讓人們花最小的努力就能讀懂和理解。如果一段程序對於閱讀者來說需要花費太多的努力才能理解,那它很可能需要進一步簡化。
7.開放/封閉原則
程序里的實體項(類,模塊,函數等)應該對擴展行為開放,對修改行為關閉。換句話說,不要寫允許別人修改的類,應該寫能讓人們擴展的類。
8.為維護者寫程序
任何值得你編寫的程序在將來都是值得你去維護的,也許由你維護,也許由他人。在將來,當你不得不維護這些程序時,你對這些代碼的記憶會基本上跟一個陌生人一樣,所以,你最好還是當成一直在給別人寫程序。一個有助於你記住這個原則的辦法是「寫程序時時刻記著,這個將來要維護你寫的程序的人是一個有嚴重暴力傾向,並且知道你住在哪裡的精神變態者」。
9.最少意外原則
最少意外原則通常是使用在用戶界面設計上,但這個原則同樣適用於編寫程序。程序代碼應盡可能的不要讓閱讀者感到意外。也就是說應該遵循編碼規范和常見習慣,按照公認的習慣方式進行組織和命名,不符常規的編程動作應該盡可能的避免。
10.單一職責原則
一個代碼組件(例如類或函數)應該只執行單一的預設的任務。
11.最小化耦合關系
一個代碼片段(代碼塊,函數,類等)應該最小化它對其它代碼的依賴。這個目標通過盡可能少的使用共享變數來實現。「低耦合是一個計算機系統結構合理、設計優秀的標志,把它與高聚合特徵聯合起來,會對可讀性和可維護性等重要目標的實現具有重要的意義。」
12.最大化內聚性
具有相似功能的代碼應該放在同一個代碼組件里。
13.隱藏實現細節
隱藏實現細節能最小化你在修改程序組件時產生的對那些使用這個組件的其它程序模塊的影響。
14.笛米特法則
程序組件應該只跟它的直系親屬有關系(例如繼承類,內包含的對象,通過參數入口傳入的對象等。)
15.避免過早優化
只有當你的程序沒有其它問題,只是比你預期的要慢時,你才能去考慮優化工作。只有當其它工作都做完後,你才能考慮優化問題,而且你只應該依據經驗做法來優化。「對於小幅度的性能改進都不該考慮,要優化就應該是97%的性能提升:過早優化是一切罪惡的根源」—Donald
Knuth。
16.代碼復用
這不是非常核心的原則,但它跟其它原則一樣非常有價值。代碼復用能提高程序的可靠性,節省你的開發時間。
17.職責分離
不同領域的功能應該由完全不同的代碼模塊來管理,盡量減少這樣的模塊之間的重疊。
18.擁抱變化
這是Kent
Beck的一本書的副標題,它也是極限編程和敏捷開發方法的基本信條之一。很多的其它原則都基於此觀念:面對變化,歡迎變化。事實上,一些經典的軟體工程原則,例如最小化耦合,就是為了讓程序更容易面對變化。不論你是否採用了極限編程方法,這個原則對你的程序開發都有重要意義。
其實都是一些老生常談的話,重要的是在於你怎麼去落實。你說呢?
④ 要做好一個程序員要具備什麼條件
1、扎實的基礎
數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握它們,很難寫出高水平的程序。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到一些基本演算法的時候可能也會束手無策。因此多讀一些計算機基礎理論方面的書籍是非常有必要的。
2、豐富的想像力
不要拘泥於固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想像力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。開闊的思維對程序員來說很重要。
3、最簡單的是最好的
這也許是所有科學都遵循的一條准則,復雜的質能轉換原理在愛因斯坦眼裡不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。
4、不鑽牛角尖
當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。
5、對答案的渴求
人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最後沒有得到答案,在過程中你也會學到很多東西。
⑤ 昆明電腦培訓分享聰明的程序員必知的技能
當下,現代化的架構世界需要聰明的程序員,程序員需要具備各種務實的技能。既然想成為程序員,首先要成為一名合格的程序員,在變身成為聰明的程序員,那麼聰明程序員必知技能有哪些呢?
1、集中注意力及以目標為導向
開始反思和規劃自己的職業生涯。對代碼應該:
保持模塊化,個性化,專業化,這些方面都需要好好考慮,並且待辦事項需要定期整理。
保持清潔並遵守規則,需要遵循編碼規則以及自己制定的規則,並保持目標的干凈和可衡量。
保持松耦合,不要將很多目標耦合到一起,保持簡單和靈活才能獨立地變化。
保持可衡量,保持目標基於SLA,並且每兩周/每月/每季度衡量,越頻繁越好。
2、推廣和營銷你的想法
這是最被忽略的一方面,也是最困難的一部分。你的想法需要告知他人才能被執行,而要實現這些目標,首要的是你必須將你的想法營銷給他人。
講故事是一個眾所周知的用一種每個人都可以理解的方法傳達思想的手段。
SapientNitro重新定義Storytelling到Storyscaping,這是一種新的講故事的方式,它連接了體驗(用於市場營銷)。這也可以用於普通的講故事中。
不斷的努力&思維過程以便於想出新的&改進的做事方式。一個簡單的例子就是,昆明電腦培訓http://www.kmbdqn.com/認為通過檢測早期問題,Jmeter腳本來做單位級別的性能測試和降低質量成本。
與團隊分享你的知識(博客或網路會議的形式),這有助於提高整個團隊的工作效率,也有機會得到別人的反饋。
⑥ IT程序員如何作何職業規則
首先是基礎程序猿(就是敲代碼的)---做三年往兩個方向發展---管理,技術
管理就是項目經理,技術就是架構師方向,兩個方向對個人要求不同,可以在基礎程序猿的時候,根據自己自身的特點,選擇一個方向,並補充兩個方面的知識。
管理方向需要大體觀,把握與各個部門之間的合作,並需要有項目時間安排的概念等。
技術方向,就是專供技術,了解最新,最好的技術很必要
⑦ 什麼是程序員
程序員是從事程序開發、程序維護的專業人員,其工作職責是:
1、負責軟體項目的詳細設計、編碼和內部測試的組織實施;
2、協助項目經理和相關人員同客戶進行溝通;
3、參與需求調研、項目可行性分析、技術可行性分析和需求分析;
4、熟練掌握交付軟體部開發的軟體項目的相關軟體技術;
5、負責相關技術文檔的擬訂。
成為一名出色的程序員的基本規則:
1.扎實的基礎。
數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握他們,很難寫出高水平的程序。據我的觀察,學計算機專業的人比學其他專業的人更能寫出高質量的軟體。
2. 豐富的想像力。
不要拘泥於固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想像力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。
3. 最簡單的是最好的。
簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。
以上內容參考網路-程序員
⑧ 你覺得作為一名程序員應該遵守的規則有哪些
1: 技術是你獲取解決方案的方法,而不是解決方案本身
2: 對代碼而言,「聰明」是「清晰」的敵人
3: 只在逼不得已的情況下才寫代碼
4: 注釋是魔鬼
5: 永遠要在你開始寫代碼前考慮好它是做什麼的
6: 在交付之前,測試你的代碼
7: 寫代碼是件快樂的事
⑨ 程序員在工作中到底有哪些規則是需要注意得
你做得太賣力了。領導安排給你一周的工作量,你一天就趕出來,讓UI怎麼混?你開發都做那麼快,那UI豈不是要比你更有效率?加上你們領導又不太懂這行,肯定在工作安排上給UI壓力了。那人家對你有意見是再正常不過了,哪怕你再能幹,也不用這么拚命趕。安排你一周,你估算一下進度四~五天交出來會比較合適,領導會覺得你進度把控得當,而且還有可以小修小改的餘地。否則你效率那麼高,讓他們怎麼安排工作…… 不過這家公司老是做這么簡單的東西,其實對你個人發展是很不利的。
⑩ 程序員9個不良編程習慣
我們曾經都做過這樣的事情:當媽媽不注意的時候,偷偷地吃糖果零食,然後導致有了蛀牙。同樣的,我們都違背過一些編程的基本規則,並且都會堅定地表示這種行為是不可取的。但我們就是偷偷愛著這些不良的編程習慣。
我們對所謂的編程規則嗤之以鼻,輸出的代碼也很糟糕——但我們依然活著。編程上帝沒有下閃電劈死我們,我們的電腦也沒有爆炸。事實上,只要我們能編譯和發布代碼,客戶似乎就很滿意了。
這是因為糟糕的編程不像安裝電路或者摸老虎屁股那樣有直接的危害性。大多數時間里它也是可以工作的。規則通常是作為一種指導或格式上的建議,並沒有硬性規定一定要遵守,也不會導致代碼馬上死掉。當然,你的代碼可能會被人恥笑,甚至可能大家公開嘲笑你,不過,這種挑戰慣例的行為可以讓人增加一點顛覆傳統的快感,哪怕是在不經意間。
為了讓問題變得更加復雜,有時候違反規則反而更好。(一般人我不告訴他!)出來的代碼會更干凈,甚至可能會更快和更簡單。規則通常顯得太過於寬泛,有技巧的程序員可以通過打破這些規則來提高代碼。不要告訴你的老闆,這對你的編碼生涯會很有意義。
下面這9個編碼習慣,雖然在編程規則中是被駁斥的,但我們很多人就是會不由自主地使用它們。
編程習慣No.1:使用goto
關於禁止使用goto可以追溯到許多結構化編程工具還未面世的時代。如果程序員想要創建一個循環或跳到另一段程序中,那麼他們需要輸入goto後再跟一個行號。過了幾年之後,編譯器團隊讓程序員使用字元串標簽取代行號。這在當時被認為是一個熱門的新功能。
有的人認為這會導致「義大利面條式代碼」。代碼會變得不可讀,並且很難理解代碼的執行路徑。線程混亂,纏纏綿綿到天涯。Edsger
Dijkstra就三令五申地表示應該禁止這個命令,他有一份詼諧的手稿,題目為《Goto語句害人不淺》。
但絕對的分支是沒有問題的。這就讓人糾結了。通常,巧妙的break語句和return
語句可提供一個非常干凈的關於代碼在那個時候執行什麼的聲明。有時候,添加goto
到case語句會比更恰當的多級嵌套的if-then-else語句塊更易於理解。
也有反例。在蘋果的SSL堆棧中的「goto
fail」安全漏洞就是最好的例子之一。但是,如果我們能夠仔細避免case語句和循環的一些尷尬問題,那麼我們就可以嵌入良好的絕對轉移,使閱讀代碼的人更容易明白這是怎麼回事。我們可以插入break和return
語句,讓每一個人感覺更清潔和更愉快——可能得除了goto的敵視者。
編程習慣No.2:成功避開文檔
我的一個朋友有一個非常精明的老闆,這位老闆雖然從來沒有寫過任何代碼,但卻秉持著每一個功能都必須包含在文檔中的理念。哪個程序員不提供注釋,那麼他就會受到懲罰。所以,我的朋友在他的編輯器中聯入了一個有點像人工智慧的玩意兒,於是乎,他的每一個功能就都有幾行「文檔」了。因為這位精明的老闆還不夠聰明到能理解這些注釋其實啥意思也沒有,所以我的朋友逃過一劫。他的代碼常常被作為正式文檔。我想,他應該快要升職了!
許多函數方法,甚至一些類或多或少都能自文檔化。冠以insertReservation或cancelReservation或deleteAll
等名稱的函數並不需要多此一舉來解釋它們的作用。為函數取一個正確的名字往往就足夠了。事實上,這比寫一段長長的注釋要好,因為函數名可以出現在代碼中的其他地方。而文檔只能默默地呆在某個角落。自文檔化的函數名可以改進它們出現的每個文件。
在有些情況下,寫文檔甚至會導致情況變糟。例如,當代碼瞬息萬變,團隊像瘋了似的重構的時候,文檔會產生分歧。代碼是這樣寫的,但文檔解釋的還是四五個版本以前的情況。這類「過時」的文檔通常位於代碼頂部,有的人會在這里對代碼應該發生什麼作一個美好總結。因此,盡管重構團隊已經仔細修改了相關的注釋,但還是會遺漏文件頂部的這段「美好總結」。
當代碼和文本出現分歧的時候,注釋就變得毫無價值,甚至會產生誤導。在這樣的情況下,良好的自文檔化的代碼顯然勝出了。
編程習慣No.3:一行寫太多代碼
老闆突然發神經地給團隊發了一封討厭的郵件:為了執行非常嚴格的風格規定,我們大家都必須重寫我們的代碼。最神奇的要求是:每個行為或步驟或子句必須各自成行。你不能使用點語法連續調用函數。在一個分支語句中,你不能有兩個及以上返回布爾值的子句。如果要定義變數,那麼另起一行。如果你正在做一個復雜的計算,那麼不要使用括弧。每個片段也自成一行。
他認為他的這個法令將能使調試變得更加容易。就像你單步調試代碼一樣,調試器會一個動作一個動作地前進。這樣就不會卡在某一行。而且更容易執行。
但是這樣一來,鍵盤上的回車鍵煩不勝煩,因為我需要不斷地插入行。而且我敢肯定,老闆因此還可以到處吹噓他的團隊能寫多少行代碼。
唉,有時在同一行中聲明一堆變數反而更容易;有時把所有的布爾子句放在一起反而更簡單——一切都能變得更加緊湊。那也意味著,我們可以在屏幕上看到更多的邏輯而無需滾動滑鼠。更易於閱讀就意味著理解起來更快。這才是簡單的精粹。
編程習慣No.4:不聲明類型
那些熱愛類型化語言的人認為,如果為每個變數添加明確的數據類型聲明,就可以寫出更好的、沒有錯誤的代碼。花一點時間來拼寫類型,能幫助編譯器在代碼開始運行之前標志愚蠢的錯誤。可能會讓人覺得痛苦,但很有幫助。這是編程中停止bug的一種有備無患的方法。
但是時代變了。許多較新的編譯器完全可以智能地通過查看代碼來推斷類型。它們會向後和向前瀏覽代碼,直到可以肯定這個變數是string
還是int,抑或其他。如果這些被查看的類型不成隊列,那麼錯誤標志就會點亮。因此再也不需要我們輸入變數的類型了。
這意味著我們現在可以在代碼中省略掉一些最簡單的聲明。代碼更清潔,而且閱讀代碼的人也猜得出for循環中命名為i的變數表示一個整數型。
編程習慣No.5:搖擺不定的代碼
有的程序員在代碼上特別優柔寡斷,猶豫不決。先是一開始將值存儲為字元串,然後又解析成整數。接著又轉換回字元串。這是非常低效的,你甚至可以感覺到CPU在咆哮這種浪費負載的行為。聰明的程序員之所以能快速地編碼,是因為他們事先會設計架構,以盡量減少轉換。他們的代碼能更快地運行是因為他們有一個良好的規劃。
但是,不管你信不信,這種搖擺不定的代碼有時候也是有意義的。比如說,你有一個非常棒的庫,在它專有的黑盒子里能做無數智能的事情。如果庫需要字元串的數據,那麼你就給它字元串,即使你剛將這個數據轉換成為整數型。
當然,你可以重寫所有的代碼,以盡量減少轉換,但是這需要時間。而且,有時候讓代碼稍微多花點額外時間來運行也未嘗不可,因為重寫代碼需要耗費我們更多的時間。有時,背負這樣的技術債務比一開始就正確構建的成本要更低。
有的時候,庫不是專有的代碼,但那些你以前全部自己寫的代碼是你獨有的。有的時候,再次轉換數據比重寫庫中的所有代碼要快得多。所以,就讓它這樣吧,就讓代碼搖擺吧。
編程習慣No.6:編寫你自己的數據結構
有一個標准規則是,程序員在完成數據結構課程的第二年,不應該寫用於存儲數據的代碼。基本上我們需要的所有的數據結構,已經有人寫好了,而且其代碼已歷經多年的測試和再測試。它和語言捆綁在一起,而且常常是免費的。你的代碼只能造就bug。
但有時你會發現數據結構庫有點慢。有時它們會迫使我們使用標準的,但於我們的代碼卻是錯誤的結構。有時庫會把我們推向在使用結構之前重新配置數據的地步。有時庫會包含一些所謂有備無患的保護功能,如線程鎖,但其實我們的代碼並不需要。
如果遇到這種情況,那麼就應該著手寫我們自己的數據結構。這或許能讓你做得更快,做得更多。而且代碼會變得更清潔,因為我們不會包括那些多餘的用於格式化數據來完成一些功能的代碼。
編程習慣No.7:在中間打破循環
有一個規則制定小組宣稱,每個循環都應該有一個「常量」,也就是說當這個邏輯語句為true的時候,循環一直執行。當常量一定不會是true的時候,循環才會結束。這是考慮復雜循環的好方法,但它會導致愚蠢的禁令——例如禁止我們在循環中間使用return
和break語句。這一條也包含在禁止goto語句的規則中。
這個理論是好的,但它通常會導致更復雜的代碼。請看下面這個簡單的案例,遍歷數組,將找到的元素傳遞給test函數,並將該元素返回:
while(i
...
if(test(a[i])thenreturna[i];
...
}
「循環常量」愛好者會要求我們增加一個布爾變數,命名為notFound,然後這樣使用:
while((notFound)&&(i
...
if(test(a[i]))thennotFound=false;
...
}
如果這個布爾值能夠合理地命名,那麼這就是一段很棒的自文檔化的代碼,更易於大家理解。但這也增加了復雜性。這意味著你需要分配另一個局部變數,並堵塞寄存器,因為編譯器也許還不能足夠智能到解決這個問題。
有時候,一個goto語句或一個跳轉會更干凈利索。
編程習慣No.8:使用短變數名(i和x和and也是有意義的)
EdgarAllan
Poe這位詩人和小說家曾經說過,在一個故事中的每一個詞都應該是有內涵的。編碼規則也強調如此。變數名應該說明這個變數的所作所為。那些使用駝峰式大小寫的方法來寫變數名,以表達關於變數細節的Java程序員深以為然,於是一個又一個瘋狂長度的變數名出爐了。有些程序員寫的變數名,會組合五六個甚至更多的詞語。
但有的時候,使用單個字母作為變數名反而會更方便。有時在循環迭代中只使用i或j會更簡單。有時使用字母a代表array
,l代表list會更便捷,即使是字母l和數字1看上去很難辨別。
正如這篇文章前面鼓勵的是自文檔化的代碼,而非長長的注釋。在上述情況下,單個字母的變數名也是自文檔化的。字母i
是通用的迭代器。只要是程序員立刻就會懂。
編程習慣No.9:重新定義運算符和函數
一些最有趣的編程語言允許你去做一些特別詭異的事情,例如重新定義元素的值,就如同常量一般。例如Python,你可以輸入TRUE=FALSE(在Version2.7及之前的版本)。這並不會產生某種邏輯崩潰,或導致宇宙終結——僅僅只是互換了TRUE和FALSE的含義。你也可以在C預處理器和一些其他語言中玩玩類似於這樣的危險游戲。還有一些語言允許你重新定義運算符,如加號。
當然這是延伸了,不過有一個觀點是,在一個大的代碼塊內,當重新定義一個或多個所謂的常量時,速度會更快。有時老闆會要求代碼做一些截然不同的事情。當然,你可以修改代碼的每個事件,或者,你可以重新定義。這讓你看上去像一個天才。不必重寫一個龐大的庫,只需翻轉一下,就可以做相反的事情了。
這9個習慣就都在這兒了。千萬不要輕易嘗試,不管它看上去有多牛掰。太危險了——真的,這是實話。