Ⅰ 程序員該如何學習新知識
第一:精通一兩門語言大家都聽說過術業有專攻這個詞,作為程序員一定要一個立身安命的技術,這個技術可以讓你不失業,至少也能混口飯吃的就是需要精通一兩門語言,對於你選擇的這兩門語言是你以後長期飯碗的保障,俗話說:老婆孩子奶粉錢全指望它了,所以對於這個技術,你花再多的時間學習都不可惜,這個知識一定要精通在精通。第二:快速學習其他新知識現在談談大家比較關心如何學習新知識問題,我認為如果不是長期要跟這門技術打交道,沒有必要對著門技術做太深的研究,技術那麼多,你根本沒有時間樣樣精通,這里遵守的幾點原則:1:二八原則:記得曾經有人說過:百分之八十的問題只需要百分之二十的知識就可以解決,同樣對於一門新技術,可能你買一本厚厚的圖書,那麼你是否需要全部看完呢??假設你看完這本書,然後再去實踐,你會發現其實你辯桐只需要使用到了這本書的百分之二十,也就是說:你花了一百的精力學習,其實你只用到了百分之二十的知識。新知識是無窮的,譽隱而人的精力是有限的,有限的精力和無限的新知攜虛坦識也就決定你不可能全部去這樣做,你需要選擇性的去學習,選擇書中的百分之二十的知識去學習。2:為了工作去學習:聽到這個詞可能會有人懷疑,怎麼能抱著這樣的心態學習呢??? 如果為了以後,請查看上面第一個:精通一兩門語言。如果是為了解決工作問題的,那請繼續看下去:舉個例子:同樣看一本書,你是自己漫無目的的學習和看收獲的多?還是你知道你需要了解學習什麼的而去看收獲的多?如果你不是張無忌也不是神童俠,那麼顯然帶著目的的學習效果高於眉毛鬍子一大把的學習,而什麼是你的學習目的呢?很顯然是為了解決工作上面的問題,所以你需要針對性的學習,選擇性的學習。
Ⅱ 自學程序員的步驟
1、自學演算法。因為編程語言實現了它們自己的排序和搜索,所以自學成才的程序員總是傾向於學習如何使用它們,而不是去了解它們的工作原理。
2、自學計算理論。這是關於計算機如何解決問題,以及編程語言如何構建的一門科學。從有限狀態機到 Λ 演算,在這一類中,有一大堆重量級的主題。
3、自學純數學。傳統的計算機科學涉及范圍廣泛的重要數學主題,包括線性代數、微積分、概率論和統計學。
4、自學大〇符號法(Big O notation)。這個改編自數學領域的工具,讓開發人員能夠描述並比較不同演算法的整體性能。
很多新手都是初生牛犢不怕虎,因為不了解編程領域,便不假思索地定了一些很高的目標,比如想進大廠,想做有復雜度的項目,想短時間學習一門語言並找到工作。
理想非常充實,而現實卻很骨感。可能低估了進入該行業的難度。不是您可以僅憑意圖快速完成學習過程的。
一定要先易後難,一步一來,例如,首先了解語法,嘗試編寫一個demo,接著了解高級特效,實現高級特性,然後自己脫離教程寫一些代碼,最後做項目,大概是這樣的一個邏輯。
實際上,對於新來者來說,完成這些步驟並不容易。別看學習基本語法並不難,但是如果想入門,可能會遇到很多問題,例如環境配置在安裝和使用IDE之後,代碼語法錯誤,編譯錯誤和執行 錯誤對於新手來說很難解決。如果不藉助外力,基本上是無從下手的。
Ⅲ 小白,想入門程序員,應該從什麼開始學,順序是什麼
小白想要成為程序員,首選是選擇一門合適的語言,比如說:Python、java、C、C++、GO語言等;其次,選擇合適的學習方式,比如培訓,周末班、脫產班還是網路班。
如果完全沒有編程基礎,建議大家學習Python,Python入門簡單、語法清晰、通俗易懂,非常適合零基礎人員。
Ⅳ 程序員需要學些什麼
程序員的崗位需求很多,例如大型網路公司、軟體開發公司等等都需要程序員。
程序員需要學習:
1、掌握數據及其轉換、數據的機內表示、算術和邏輯運算,以及相關的應用數學基礎知識;
2、理解計算機的組成以及各主要部件的性能指標;
3、掌握操作系統、程序設計語言的基礎知識;
4、熟練掌握計算機常用辦公軟體的基本操作方法;
5、熟練掌握基本數據結構和常用演算法;
6、熟練掌握C程序設計語言,以及C++、Java、Visual Basic中的一種程序設計語言;
7、熟悉資料庫、網路和多媒體的基礎知識;
8、掌握軟體工程的基礎知識,了解軟體過程基本知識、軟體開發項目管理的常識;
9、了解常用信息技術標准、安全性,以及有關法律、法規的基本知識;
10、了解信息化、計算機應用的基礎知識;
11、正確閱讀和理解計算機領域的簡單英文資料。
程序員必備技能:
1、熟練開發工具
做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C++編寫。
而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVAOne很可能會成為未來的主流開發工具之一。
其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,CBuilder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。
另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
2、熟知資料庫
作為程序員,他們自然有自己的理由:很多應用程序都是以資料庫的數據為中心,而資料庫的產品也有不少,其中關系型資料庫仍是主流形式,所以程序員至少熟練掌握一兩種資料庫,對關系型資料庫的關鍵元素要非常清楚,要熟練掌握SQL的基本語法。
雖然很多資料庫產品提供了可視化的資料庫管理工具,但SQL是基礎,是通用的資料庫操作方法。如果沒有機會接觸商業資料庫系統,可以使用免費的資料庫產品是一個不錯的選擇,如mySQL,Postgres等。
3、了解操作系統
當前主流的操作系統是Windows,Linux/Unix,熟練地使用這些操作系統是必須的,但只有這些還遠遠不夠。
要想成為一個真正的編程高手,需要深入了解操作系統,了解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。
Linux作為開發源碼的操作系統,是一個很好的學習平台,Linux幾乎具備了所有現代操作系統的特徵。雖然Windows系統的內核實現機制的資料較少,但通過互聯網還是能獲取不少資料。懂得網路協議TCP/IP。
在互聯網如此普及的今天,如果您還沒有對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就需要迅速補上這一課,網路技術已改變了軟體運行的模式。
從最早的客戶/伺服器結構,到今天的WEBServices,再到未來的網格計算,這一切都離不開以TCP/IP協議棧為基礎的網路協議支持,深入掌握TCP/IP協議是非常必要的。
至少,需要了解ISO七層協議模型,IP/UDP/TCP/HTTP等常用協議的原理和三次握手機制。
4、明白DCOM/CORBA/XML/WEBServices存在的意義
隨著技術的發展,軟體與網路的無縫結合是必然趨勢,軟體系統的位置無關性是未來計算模式的重要特徵之一,DCOM/CORBA是當前兩大主流的分布計算的中間平台,DCOM是微軟COM(組件對象模型)的擴展,而CORBA是OMG支持的規范。
XML/WebServices重要性不言而喻,XML以其結構化的表示方法和超強的表達能力被喻為互聯網上的「世界語」,是分布式計算的基石之一。
5、不要將軟體工程與CMM分開
大型軟體系統的開發中,工程化的開發控製取代個人英雄主義,成為軟體系統成功的保證,一個編程高手並不一定是一個優秀的程序員。
一個優秀的程序員是將出色的編程能力和開發技巧同嚴格的軟體工程思想有機結合,編程只是軟體生命周期中的其中一環,優秀的程序員應該掌握軟體開發各個階段的基本技能。
如市場分析,可行性分析,需求分析,結構設計,詳細設計,軟體測試等。
6、需求理解能力
程序員要能正確理解任務單中描述的需求。在這里要明確一點,程序員不僅僅要注意到軟體的功能需求,還應注意軟體的性能需求。
要能正確評估自己的模塊對整個項目中的影響及潛在的威脅,如果有著兩到三年項目經驗的熟練程序員對這一點沒有體會的話,只能說明他或許是認真工作過,但是沒有用心工作。
7、模塊化思維能力
作為一個優秀的程序員,他的思想不能局限在當前的工作任務裡面,要想想看自己寫的模塊是否可以脫離當前系統存在,通過簡單的封裝在其他系統中或其他模塊中直接使用。
這樣做可以使代碼能重復利用,減少重復的勞動,也能使系統結構越趨合理。模塊化思維能力的提高是一個程序員的技術水平提高的一項重要指標。
就業方向:
1、網路開發
現在網路已經成為世界通訊的一座橋梁,好像Javascript、php、Ruby這幾類開發語言大部分是用作網路開發方面。
2、企業軟體開發
JAVA、C#、VB這幾類開發語言都實現了面向對象開發的目標,更多時候用於企業系統的開發。
3、系統軟體
C語言、C++、Object-C這些軟體更多是用在系統軟體開發,嵌入式開發的方面。
當然,這分類不是絕對,像JAVA、C#、VB很多時候也用於動態網站的開發。在很開發項目都會使用集成開發的方式,同一個項目裡面使用多種開發語言,各展所長,同步開發。
但所以在剛入門的時候,建議先為自己選擇一種合適的開發工具,「專注地投入學習,全力一擊」。
會編程、會計算機語言就能加入互聯網發展大潮中,享受數字經濟發展的紅利,一時間社會上的程序員培訓機構都變得格外火爆。
但是現在,專家的數據分析結果告訴你:若想跟上數字經濟發展的步伐,光會編程可不行,這個行業現在緊缺高端的、綜合型人才。
11月22日下午,清華大學經管學院互聯網發展與治理研究中心與領英聯合發布《中國經濟的數字化轉型:人才與就業》,揭示我國數字人才現狀與趨勢。
報告顯示我國數字經濟發展面臨人才短缺的挑戰,但這種短缺主要體現在擁有中高級專業技能數字人才的比例不高,擁有人工智慧、智能製造等前沿技術的人才更是少之又少。
與美國、英國、加拿大等國家相比,中國的數字人才儲備尚有很大差距。
此外,報告根據對人才需求的數據分析,結果顯示我國數字人才的技能需求不再強調單一編程技能,更加看重技術、管理和領導力等綜合技能。
2015年,我國從事信息傳輸、軟體和信息技術服務相關工作的人數約350萬,但其中中高端人才,特別是前沿技術的數字人才並不多。根據領英中國智庫的研究,在人工智慧領域,美國的從業者數量在85萬人以上,印度15萬,英國14萬,中國只有5萬多人。
報告負責人、清華大學經濟管理學院副院長陳煜波教授表示,我國目前在大數據與人工智慧領域人才缺口明顯。
他解釋說,目前中國85%以上的數字人才分布在產品研發類,而深度分析、先進製造、數字營銷等職能的人才加起來只有不到5%,存在較大缺口,新興技術人才和創新型人才培養方面存在滯後和不足。
這份研究報告的基礎數據來自領英在中國的3600萬個人用戶,這些用戶畢業於1.5萬多所國內外院校,分布在36.4萬家企業,擁有超過2.3萬項技能。
陳煜波研究團隊從中篩選了72萬數字人才,多維度提取用戶畫像並跟蹤其職業軌跡,以此預測不同地區的人才流向、僱傭率、受僱主歡迎的技能等人才趨勢層面的信息。
陳煜波說,根據數據分析結果,整體來看,雖然編程技能和數據分析技能需求占據主導,然而隨著數字產業走向成熟,企業除了強調編程技能,也逐步更加看重人才的技術、管理和領導力等綜合技能。
近年間,項目管理、產品運營等「技術+管理」類技能的需求呈現出明顯的上升趨勢,懂技術、懂管理的人才被認為是「一將難求」。
領英中國代理總裁曾志恆也提醒,如果你有興趣向數字職能轉型,不能僅僅專注於自己的技術能力,溝通和領導力等軟性技能將成為你脫穎而出的關鍵。
陳煜波希望這些研究結果能為教育行業和政府部門提供借鑒。他說,教育行業可根據職位的供需趨勢更好地規劃人才培養的方向,政府也可更好地了解人才流動方向、技術缺口等,以此制定有針對性的引才策略。
程序員崗位職責:
1、對項目經理負責,負責軟體項目的詳細設計、編碼和內部測試的組織實施,對小型軟體項目兼任系統分析工作,完成分配項目的實施和技術支持工作。
2、協助項目經理和相關人員同客戶進行溝通,保持良好的客戶關系。
3、參與需求調研、項目可行性分析、技術可行性分析和需求分析。
4、熟悉並熟練掌握交付軟體部開發的軟體項目的相關軟體技術。
5、負責向項目經理及時反饋軟體開發中的情況,並根據實際情況提出改進建議。
6、參與軟體開發和維護過程中重大技術問題的解決,參與軟體首次安裝調試、數據割接、用戶培訓和項目推廣。
7、負責相關技術文檔的擬訂。
8、負責對業務領域內的技術發展動態進行分析研究。
相關書籍:
很多程序員響應,他們在推薦時也寫下自己的評語。 以前就有國內網友介紹這個程序員書單,不過都是推薦數 Top 9的書。
其實除了前9本之外,推薦數前30左右的書籍都算經典,筆者整理編譯這個問答貼,同時摘譯部分推薦人的評語。
下面就按照各本書的推薦數排列。
1、《代碼大全》 史蒂夫·邁克康奈爾
2、《程序員修煉之道》
3、《計算機程序的構造和解釋》
4、《演算法導論》
5、《重構:改善既有代碼的設計》
6、《設計模式》
7、《人月神話》
8、《計算機程序設計藝術》
9、《編譯原理》(龍書)
10、《活著》
Ⅳ php人教版小學語文晦
1. 引言…. 2
2. 適用范圍…. 2
3. 標准化的重要性和好處…. 3
4. PHP編碼規范與原則…. 3
4.1. 代碼標記… 3
4.2. 注釋… 3
4.3. 書寫規則… 4
4.3.1. 縮進… 4
4.3.2. 大括弧{}、if和switch. 4
4.3.3. 運算符、小括弧、空格、關鍵詞和函數… 5
4.3.4. 函數定義… 6
4.3.5. 引號… 6
4.3.6. 多語言問題… 7
4.4. 命名原則… 8
4.4.1. 變數、對象、函數名… 8
4.4.2. 常量… 8
4.5. 變數的初始化與邏輯檢查… 8
4.6. 安全性… 9
4.7. 兼容性… 9
4.8. 代碼重用… 10
4.9. 其他細節問題… 10
4.9.1. 包含調用… 10
4.9.2. 錯誤報告級別… 11
5. 資料庫設計…. 11
5.1. 欄位… 11
5.1.1. 表和欄位命名… 11
5.1.2. 欄位結構… 11
5.2. SQL語句… 12
5.3. 性能與效率… 13
5.3.1. 定長與變長表… 13
5.3.2. 運算與檢索… 13
5.3.3. 結構優化與索引優化… 14
5.3.4. 查詢優化… 14
5.3.5. 兼容性問題… 16
6. 模板設計…. 16
6.1. 代碼標記… 16
6.2. 書寫規則… 16
6.2.1. HTML. 16
6.2.2. 變數… 16
6.2.3. 語言元素… 17
6.2.4. 縮進… 17
7. 文件與目錄…. 17
7.1. 文件命名… 17
7.2. 目錄命名… 18
7.3. 空目錄索引… 18
1. 引言
本規范由編程原則組成,融合並提煉了開發人員長時間積累下來的成熟經驗,意在幫助形成良好一致的編程風格。以達到事半功倍的效果,如果有需要本文檔會不定期更新。
版權: 陝西玖肆陸陸網路科技有限公司,保留所有權利
最後更新日期:年11月20日 2006
2. 適用范圍
如無特殊說明,以下規則要求完全適用於phpcms項目,同時也可大部分適用於公司其他PHP項目。
3. 標准化的重要性和好處
當一個軟體項目嘗試著遵守公共一致的標准時,可以使參與項目的開發人員更容易了解項目中的代碼、弄清程序的狀況。使新的參與者可以很快的適應環境,防止部分參與者出於節省時間的需要,自創一套風格並養成終生的習慣,導致其它人在閱讀時浪費過多的時間和精力。而且在一致的環境下,也可以減少編碼出錯的機會。缺陷是由於每個人的標准不同,所以需要一段時間來適應和改變自己的編碼風格,暫時性的降底了工作效率。從使項目長遠健康的發展以及後期更高的團隊工作效率來考慮暫時的工作效率降低是值得的,也是必須要經過的一個過程。標准不是項目成功的關鍵,但可以幫助我們在團隊協作中有更高的效率並且更加順利的完成既定的任務。
1. 程序員可以了解任何代碼,弄清程序的狀況
2. 新人可以很快的適應環境
3. 防止新接觸PHP的人出於節省時間的需要,自創一套風格並養成終生的習慣
4. 防止新接觸PHP的人一次次的犯同樣的錯誤
5. 在一致的環境下,人們可以減少犯錯的機會
6. 程序員們有了一致的敵人
4. PHP編碼規范與原則
4.1.代碼標記
PHP程序可以使用或來界定 PHP 代碼,在HTML頁面中嵌入純變數時,可以使用這樣的形式。
近年來PHP開發組一直倡導代碼規范化和標准化,未來版本PHP可能會開始不建議使用甚至取消和這種速記形式,因此為了加強程序兼容性,在發布之前我們將統一把
4.2.注釋
注釋是對於那些容易忘記作用的代碼添加簡短的介紹性內容。請使用 C 樣式的注釋「」和標准 C++ 注釋「//」。
程序開發中難免留下一些臨時代碼和調試代碼,此類代碼必須添加註釋,以免日後遺忘。所有臨時性、調試性、試驗性的代碼,必須添加統一的注釋標記「//debug」並後跟完整的注釋信息,這樣可以方便在程序發布和最終調試前批量檢查程序中是否還存在有疑問的代碼。例如:
$num = 1;
$flag = TRUE; //debug 這里不能確定是否需要對$flag進行賦值
if(empty($flag)) {
//Statements
}
4.3.書寫規則
4.3.1. 縮進
每個縮進的單位約定是一個TAB(8個空白字元寬度),需每個參與項目的開發人員在編輯器(UltraEdit、EditPlus、ZendStudio等)中進行強制設定,以防在編寫代碼時遺忘而造成格式上的不規范。
本縮進規范適用於PHP、JavaScript中的函數、類、邏輯結構、循環等。
4.3.2. 大括弧{}、if和switch
首括弧與關鍵詞同行,尾括弧與關鍵字同列;
if結構中,if和elseif與前後兩個圓括弧同行,左右各一個空格,所有大括弧都單獨另起一行。另外,即便if後只有一行語句,仍然需要加入大括弧,以保證結構清晰;
switch結構中,通常當一個case塊處理後,將跳過之後的case塊處理,因此大多數情況下需要添加break。break的位置視程序邏輯,與case同在一行,或新起一行均可,但同一switch體中,break的位置格式應當保持一致。
以下是符合上述規范的例子:
If ($condition)
{
switch ($var)
{
case 1: echo 『var is 1』; break;
case 2: echo 『var is 2』; break;
default: echo 『var is neither 1 or 2』; break;
}
}
else
{
switch ($str)
{
case 『abc』:
$result = 『abc』;
break;
default:
$result = 『unknown』;
break;
}
}
4.3.3. 運算符、小括弧、空格、關鍵詞和函數
每個運算符與兩邊參與運算的值或表達式中間要有一個空格,唯一的特例是字元連接運算符號兩邊不加空格;
左括弧「(」 應和函數關鍵詞緊貼在一起,除此以外應當使用空格將「(」同前面內容分開;
右括弧「)」除後面是「)」或者「.」以外,其他一律用空格隔開它們;
除字元串中特意需要,一般情況下,在程序以及HTML中不出現兩個連續的空格;
任何情況下,PHP程序中不能出現空白的帶有TAB或空格的行,即:這類空白行應當不包含任何TAB或空格。同時,任何程序行尾也不能出現多餘的TAB或空格。多數編輯器具有自動去除行尾空格的功能,如果習慣養成不好,可臨時使用它,避免多餘空格產生;
每段較大的程序體,上、下應當加入空白行,兩個程序塊之間只使用1個空行,禁止使用多行。
程序塊劃分盡量合理,過大或者過小的分割都會影響他人對代碼的閱讀和理解。一般可以以較大函數定義、邏輯結構、功能結構來進行劃分。少於15行的程序塊,可不加上下空白行;
說明或顯示部分中,內容如含有中文、數字、英文單詞混雜,應當在數字或者英文單詞的前後加入空格。
根據上述原則,以下舉例說明正確的書寫格式:
$result = (($a + 1) * 3 / 2 + $num)).』Test』;
$condition ? func1($var) : func2($var);
$condition ? $long_statement
: $another_long_statement;
if ($flag)
{
//Statements
//More than 15 lines
}
Showmessage(『請使用 restore.php 工具恢復數據。』);
4.3.4. 函數定義
l 參數的名字和變數的命名規范一致;
l 函數定義中的左小括弧,與函數名緊挨,中間無需空格;
l 開始的左大括弧另起一行;
l 具有默認值的參數應該位於參數列表的後面;
l 函數調用與定義的時候參數與參數之間加入一個空格;
l 必須仔細檢查並切實杜絕函數起始縮進位置與結束縮進位置不同的現象。
例如,符合標準的定義:
function authcode($string, $operation, $key = '')
{
if($flag)
{
//Statement
}
//函數體
}
不符合標準的定義:
function authcode($string,$operation,$key = '') {
//函數體
}
4.3.5. 引號
PHP中單引號和雙引號具有不同的含義,最大的幾項區別如下:
單引號中,任何變數($var)、特殊轉義字元(如「\t \r\n」等)不會被解析,因此PHP的解析速度更快,轉義字元僅僅支持「\』」和「\\」這樣對單引號和反斜杠本身的轉義;
雙引號中,變數($var)值會代入字元串中,特殊轉義字元也會被解析成特定的單個字元,還有一些專門針對上述兩項特性的特殊功能性轉義,例如「\$」和「{$array[『key』]}。這樣雖然程序編寫更加方便,但同時PHP的解析也很慢;
數組中,如果下標不是整型,而是字元串類型,請務必用單引號將下標括起,正確的寫法為$array[『key』],而不是$array[key],因為不正確的寫法會使PHP解析器認為key是一個常量,進而先判斷常量是否存在,不存在時才以「key」作為下標帶入表達式中,同時出發錯誤事件,產生一條Notice級錯誤。
因此,在絕大多數可以使用單引號的場合,禁止使用雙引號。依據上述分析,可以或必須使用單引號的情況包括但不限於下述:
l 字元串為固定值,不包含「\t」等特殊轉義字元;
l 數組的固定下標,例如$array[『key』];
l 表達式中不需要帶入變數,例如$string = 『test』;,而非$string = 「test$var」;
例外的,在正則表達式(用於preg_系列函數和ereg系列函數)中,phpcms全部使用雙引號,這是為了人工分析和編寫的方便,並保持正則表達式的統一,減少不必要的分析混淆。
資料庫SQL語句中,所有數據都不得加單引號,但是在進行sql查詢之前都必須經過intval函數處理;所有字元串都必須加單引號,以避免可能的注入漏洞和SQL錯誤。正確的寫法為:
$catid = intval($catid);
SELECT * FROM phpcms_member WHERE username=』$_username』 ANDcatid=$catid;
所有數據在插入資料庫之前,均需要進行addslashes()處理,以免特殊字元未經轉義在插入資料庫的時候出現錯誤。phpcms中如果已經引入了文件common.inc.php,則所有通過 GET, POST,FILE,取得的變數默認情況下已經使用了addslashes()進行了轉義,不必重復進行。如果數據處理必要(例如用於直接顯示),可以使用stripslashes() 恢復,但數據在插入資料庫之前必須再次進行轉義。
緩存文件中,一般對緩存數據的值採用 addcslashes($string, '\'\\')進行轉義。
4.3.6.
4.4.命名原則
命名是程序規劃的核心。古人相信只要知道一個人真正的名字就會獲得凌駕於那個人之上的不可思議的力量。只要你給事物想到正確的名字,就會給你以及後來的人帶來比代碼更強的力量。
名字就是事物在它所處的生態環境中一個長久而深遠的結果。總的來說,只有了解系統的程序員才能為系統取出最合適的名字。如果所有的命名都與其自然相適合,則關系清晰,含義可以推導得出,一般人的推想也能在意料之中。
就一般約定而言,類、函數和變數的名字應該總是能夠描述讓代碼閱讀者能夠容易的知道這些代碼的作用。形式越簡單、越有規則,就越容易讓人感知和理解。應該避免使用模稜兩可,晦澀不標準的命名。
4.4.1. 變數、對象、函數名
變數、對象、函數名一律為小寫格式,除非必要,單詞之間一般不使用下劃線「_」進行分割;
以標准計算機英文為藍本,杜絕一切拼音、或拼音英文混雜的命名方式;
變數命名只能使用項目中有據可查的英文縮寫方式,例如可以使用$data而不可使用$data1、$data2這樣容易產生混淆的形式,應當使用$articledata、$userdata這樣一目瞭然容易理解的形式;
可以合理的對過長的命名進行縮寫,例如$bio($biography),$tpp($threadsPerPage),前提是英文中有這樣既有的縮寫形式,或字母符合英文縮寫規范;
必須清楚所使用英文單詞的詞性,在許可權相關的范圍內,大多使用$enable***、$is***、的形式,前者後面接動詞,後者後面接形容詞。
4.4.2. 常量
常量應該總是全部使用大寫字母命名,少數特別必要的情況下,可使用劃線來分隔單詞;
PHP 的內建值 TRUE、FALSE 和NULL必須全部採用大寫字母書寫。
4.5.變數的初始化與邏輯檢查
任何變數在進行累加、直接顯示或存儲前必需進行初使化,例如:
$number = 0; //數值型初始化
$string = 『』; //字元串初始化
$array = array(); //數組初始化
判斷一個無法確定(不知道是否已被賦值)的變數時,可用empty()或isset(),而不要直接使用if($switch)的形式,除非你確切的知道此變數一定已經被初始化並賦值。
empty()和isset()的區別為:
l bool empty(mixed var)
n 如果 var 是非空或非零的值,則 empty() 返回FALSE。換句話說,""、0、"0"、NULL、FALSE、array()、var $var;以及沒有任何屬性的對象都將被認為是空的,如果 var 為空,則返回 TRUE。
l bool isset(mixed var[, mixed var[, ...]])
n 如果 var 存在則返回 TRUE,否則返回 FALSE。
n 如果已經使用 unset() 釋放了一個變數之後,它將不再是 isset()。若使用 isset() 測試一個被設置成 NULL的變數,將返回 FALSE。同時要注意的是一個 NULL 位元組("\0")並不等同於 PHP 的 NULL 常數。
判斷一個變數是否為數組,請使用is_array(),這種判斷尤其適用於對數組進行遍歷的操作,例如foreach(),因為如果不事先判斷,foreach()會對非數組類型的變數報錯;
判斷一個數組元素是否存在,可使用isset($array[『key』]),也可使用empty(),兩者異同見上。
4.6.安全性
PHP中的變數不並不像C語言那樣需要事先聲明,解釋器會在第一次使用時自動創建他們,同樣類型也不需要指定,解釋器會根據上下文環境自動確定。從開發人員的角度來看,這無疑是一種極其方便的處理方法。一個變數被創建了,就可以在程序中的任何地方使用。這導致的結果就是開發人員工經常不注意初始化變數。因此,為了提高程序的安全性,我們不能相信任何沒有明確定義的變數。所有的變數在定義使用前要初使化以防止惡意構造提交的變數覆蓋程序中使用的變數。
細節可以閱讀(http://www.securereality.com.au/studyinscarlet.txt)這篇文檔,該文檔里羅列了PHP常見的安全問題,閱讀該文檔是非常有必要的!
4.7.兼容性
代碼設計應當兼顧PHP 高低版本的特性,當前,應仍然以PHP 4.3.0作為最低通過平台,盡量不使用高版本PHP新增的函數、常數或者常量。如果使用只在高版本才具備的函數,必須對其進行二次封裝,自動判斷當前PHP版本,並自行編寫低版本下的兼容代碼;
對於個別函數,參數要求或者代碼要求應當以較為嚴格的PHP版本為准;
除非必要,不要使用PHP擴展模塊中的函數。使用時應當加入必要的判斷,當伺服器環境不支持此函數的時候,進行必要的處理。文檔和程序中的功能說明中,也應加上兼容性說明。
4.8.代碼重用
代碼的有效重用可以減少效率的損失與資源的浪費。在開發軟體項目時為了避免重復勞動和浪費時間。開發人員應盡量提高現有代碼的重用率,同時將更多的精力用在新技術的應用和新功能的創新開發上面。
l 在需要多次使用代碼,並且對於您希望實現的任務沒有可用的內置 PHP函數時,不吝嗇定義函數或類。開發者須根據功能、調用情況,將函數放置於include目錄並以.func.php作為函數文件後綴,將類放置於include/class目錄。超過3行,實現相同功能的程序切勿在不同程序中多次出現,這是無法容忍和迴避的問題;
l在任何時候都不要出現同一個程序中出現兩段或更多的相似代碼或相同代碼,即便在不同程序中,也應盡力避免。開發者應當總是有能力找到避免代碼大段(超過10行)重復或類似的情況。
需要強調的是,本部分雖然篇幅較短,但卻是十分需要經驗,並將花費開發者大量時間和精力去進行優化的部分,任何產品開發者必須時刻清楚和理解代碼重用的重要性和必要性,切實在增強產品效率、邏輯性和可讀性上下功夫,這是一名優秀軟體開發者所必須具備的基本素質。
4.9.其他細節問題
4.9.1. 包含調用
包含調用程序文件,請全部使用require_once,以避免可能的重復包含問題;
包含調用緩存文件,由於緩存文件無法保證100%正確打開,請使用include_once或include。在必要時,可以使用@include_once或@include的方式,以忽略錯誤提示;
包含和調用代碼中,須以PHPCMS_ROOT.』/』開頭,應避免直接寫程序文件名(例如:require_once『x.php』;)的做法;
所有被包含和調用的程序文件,包括但不限於程序、緩存或模板,通常其不能被直接URL請求。phpcms通過在./include/common.inc.php中定義一個標記性常量IN_PHPCMS,來判斷程序是否被合法調用。因此,在除了./include/common.inc.php以外的任何一個被包含和調用的程序文件中,需要包含以下內容,以使得訪問者無法直接通過URL請求該文件:
defined('IN_PHPCMS') or exit('Access Denied');
4.9.2. 錯誤報告級別
在軟體開發和調試階段,請使用error_reporting(E_ALL);作為默認的錯誤報告級別,此級別最為嚴格,能夠報告程序中所有的錯誤、警告和提示信息,以幫助開發者檢查和核對代碼,避免大多數安全性問題和邏輯錯誤、拼寫錯誤。error_reporting()可以在./include/common.inc.php的頭幾行進行設置。
在軟體發布時,請使用error_reporting(E_ERROR | E_WARNING |E_PARSE);作為默認的錯誤報告級別,以利於用戶使用並將無謂錯誤提示信息降至最低。
5. 資料庫設計
5.1.欄位
5.1.1. 表和欄位命名
表和欄位的命名以前面《4.4命名原則》的約定為基本准則。
所有數據表名稱,只要其名稱是可數名詞,則必須以復數方式命名,例如:phpcms_member(用戶表);存儲多項內容的欄位,或代表數量的欄位,也應當以復數方式命名,例如:hits(查看次數)、items(內容數量)。
當幾個表間的欄位有關連時,要注意表與表之間關聯欄位命名的統一,如phpcms_article_1表中的articleid與phpcms_article_data_1表中的articleid。
代表id自增量的欄位,通常用以下幾種形式:
l 一般情況下,使用全稱的形式,例如userid、articleid;
l 沒有功能性作用,只為管理和維護方便而設的id,可以使用全稱的形式,也可只將其命名為id。
篇幅所限,無法一一贅述,但所有與表、欄位相關的命名,請務必大量參考phpcms現有欄位的命名方式,以保證命名的系統性和統一性。
5.1.2. 欄位結構
允許NULL值的欄位,資料庫在進行比較操作時,會先判斷其是否為NULL,非NULL時才進行值的必對。因此基於效率的考慮,所有欄位均不能為空,即全部NOTNULL;
預計不會存儲非負數的欄位,例如各項id、發帖數等,必須設置為UNSIGNED類型。UNSIGNED類型比非UNSIGNED類型所能存儲的正整數范圍大一倍,因此能獲得更大的數值存儲空間;
存儲開關、選項數據的欄位,通常使用tinyint(1)非UNSIGNED類型,少數情況也可能使用enum()結果集的方式。tinyint作為開關欄位時,通常1為打開;0為關閉;-1為特殊數據,例如N/A(不可用);高於1的為特殊結果或開關二進制數組合(詳見phpcms中相關代碼);
MEMORY/HEAP類型的表中,要尤其注意規劃節約使用存儲空間,這將節約更多內存。例如cdb_sessions表中,就將IP地址的存儲拆分為4個tinyint(3)UNSIGNED類型的欄位,而沒有採用char(15)的方式;
任何類型的數據表,欄位空間應當本著足夠用,不浪費的原則,數值類型的欄位取值范圍見下表:
欄位類型 存儲空間(b) UNSIGNED 取值范圍
tinyint 1 否 -128~127
是 0~255
smallint 2 否 -32768~32767
是 0~65535
mediumint 3 否 -8388608~8388607
是 0~16777215
int 4 否 -2147483648~2147483647
是 0~4294967295
bigint 8 否 -9223372036854775808
~9223372036854775807
是 0
~18446744073709551615
5.2.SQL語句
所有SQL語句中,除了表名、欄位名稱以外,全部語句和函數均需大寫,應當杜絕小寫方式或大小寫混雜的寫法。例如select * fromphpcms_member;是不符合規范的寫法。
很長的SQL語句應當有適當的斷行,依據JOIN、FROM、ORDER BY等關鍵字進行界定。
通常情況下,在對多表進行操作時,要根據不同表名稱,對每個表指定一個1~2個字母的縮寫,以利於語句簡潔和可讀性。
如下的語句範例,是符合規范的:
$result = $db->query(」SELECT m.*, i.*
FROM 「.TABLE_MEMBER.」 m, 「.TABLE_MEMBERINFO.」 i
WHERE m.userid=i.userid AND m.userid=』$_userid』);
望採納!
Ⅵ 程序員入門應該怎麼學
如果是想通過自學的方式、而不是上外面的各種培訓班的方式來學習編寫程序的話(在這里以 C 語言為例),那麼最、最簡單易行的方法就是:在自己的 WINDOWS XP 系統下面,安裝一個 Microsoft Visual Studio C++ V6.0 編程環境。然後再購買一本難度適合自己的 C 語言教材,按照教材上面的每一章例題、以及每一章後面的練習題,親自把書上的每一個源程序輸入到電腦中,親自上機編譯、體會、調試通過、並運行每一個源程序。只有這樣,你的編程水平才能夠在一個較短的時間內,有一個較大的提高。
但是在這里有一個問題必須要注意的就是:任何一種高級語言(C、C++、Python、JAVA等)都只不過是一種編程工具而已,如果將來希望能夠勝任大型軟體開發工作,那麼還必須要學習計算機軟體專業的相關課程,例如:計算機操作系統、數據結構(各種排序演算法、以及查找演算法)、計算機演算法及其復雜性分析、各種數學知識(主要用於在大型的軟體項目中進行數學建模)等。否則的話,即使掌握了高級語言的編程,那也只能夠編寫一些小程序,絕對無法勝任大型軟體的開發工作。
Ⅶ 程序員應該怎麼學習
1、選定方向
編程的世界是多元紛繁的,大的方向就分前端開發、後端開發、移動開發、雲計算、數據處理、智能硬體、物聯網、虛擬現實等等,光編程語言都幾十種。如果沒有做過功課,貿然進入只會分分鍾懵逼。所以最好是根據自己的興趣愛好再結合市場前景,先選定一個方向,再選擇一門語言,然後頭也不回的深深扎進去。
2、優化學習方式
做好筆記,記錄經驗,我們大多數人並沒有過目不忘的神技,很多時候我們學了也不一定馬上掌握,需要過後花時間慢慢領悟,而且還有忘掉的風險,所以對於重要的知識點都要做好筆記。
3、多看官方文檔,外文資料
互聯網是一個更新迭代很快的行業,所有編程語言都會不斷的更新新功能和修復舊Bug,網上查的資料很有可能是舊的解決方案,現在已經不適用了。所以最好最快的方法就是查看官方文檔。
4、動手做項目
我們學習編程的最終目的就是用所學的做出具有一定功能的項目,而做項目又是最好的學習和鞏固知識的方式。如果前期能力不足就先做一些簡單的功能模塊,一步一步慢慢來,不要一開始就要實現各種酷炫炸天功能,遇到不會的就在網上查, 現在互聯網這么發達,獲取資源也及其方便。
自學過程中的一些注意事項
1、要善於構建大的知識框架體系,不要執著於細枝末節的知識點。中國的應試教育培養出來的人都喜歡啃細節,對於自學來講這是大忌,比如在遇到一個函數的時候,非要把這個函數的參數,返回值都弄得清清楚楚才肯罷休。
2、先學重要的知識點,用不到的可以暫時放一放,因為你時間有限,遇到比較難的知識點,如果不是特別重要的,就跳過去,當你哪天用到的時候再來好好的研究,帶著問題去學習,你會發現學習難的知識點也沒有那麼痛苦。
3、要善於查資料,互聯網就是最好的老師,遇到問題先網上查,至少能夠解決你98%的問題,因為你遇到的問題別人肯定也會遇到,除非你已經到了高處不勝寒的境界。
Ⅷ 小學生學編程先學什麼
您好。
新手,要先了解計算機的結構、硬體、網路的原理,這是一個漫長的過程,只有這樣新手的編程實力才能迅速提高。我建議如下學習:
1.同時學習多門語言,必須首先學習C語言。例如同時學習Visual Basic和C語言。目的是:掌握不同語言的特點,把難的語言和簡單的語言放在一起學習。為什麼要首先學習C呢?「C生萬物」。計算機的核心就是C語言,很多程序設計語言都會模仿它或者就是由它而生,因此必須先學習它。
2.尋找簡單易懂的書籍。例如《啊哈c語言》,是給予少年兒童學習編程的啟蒙讀物,實用性強,有助於理解和掌握。那些晦澀難懂的書籍,讀了不懂,浪費時間浪費精力。
3.一定要詳細了解計算機是怎麼工作的。無論多麼新的技術,例如現在的大數據、雲計算、物聯網等,它們工作的核心原理都是和計算機工作原理一樣的,如果對計算機是怎麼工作的掌握不牢固,僅僅會為了編程而編程,就束縛了自己的前進空間。
Ⅸ 初學程序員要掌握些什麼,要怎麼學習
零基礎的我該如何學習?
如果想做一個程序員,在沒有基礎的情況下,買書自學是一個辦法,但是大多數人會因為沒有相關的基礎知識,導致看書看得一知半解,因為有不同的語言,不同的開發環境,在你不了解的時候,買的書不一定合適。
比較速成的辦法還是去報名一個培訓班,系統的學習一下基礎知識,然後選擇一個發展方向,再具體的針對性的買點書籍來學習。
遇到不懂的問題的時候,盡量少的去網上上直接找答案,而是去各種論壇或官方網站了解比較底層的原理,然後思考解決方案,這樣才能知其然知其所以然。
程序員是一個不停學習的崗位,你需要每天除了工作以外,花一定的時間了解新的技術或正在使用的技術的原理,這樣才能一直提高,不然,可能會被淘汰。
在你了解代碼以後,你還需要了解邏輯,就等於你要熟悉你所從事的這個領域及行業,比如你做教育,那就要熟悉教育行業的業務,做財務,就要熟悉財務的邏輯,這樣才能寫出好的代碼。
首先要學習什麼?
我覺得可以先選一門簡單的語言進行學習,這樣可以先對編程有一個初步的認識,我學習的第一門語言是c,學得不精,簡直就是入門中的入門。我覺得c、java、Python都是不錯的入門語言。
然後這樣一邊認識編程,一邊去了解自己想開發的東西需要什麼技術,比如開發安卓要用java。
詳細的了解之後需要的就是不斷地去補充這些自己不懂的東西。我覺得沒有必要在第一門語言選什麼上糾結太久,就我個人而言,才學編程對時候連什麼是面向對象編程都不知道,根本無法知道自己真正需要的技術是什麼,又怎麼選呢?
我認為最重要的就是盡快選一個語言開始學習吧!
給自學成材的新手程序員的六個建議
1、讓編程成為一個習慣
想要培養一項技能的最好的辦法,就是將他融入到我們的生活並成為我們的愛好。其實說白了,就是讓這個愛好成為一個習慣,一天不去做這件事情,都會覺得少了什麼。在不知不覺中,這個習慣會像滾雪球一樣積累起來。
對我來說,養成這種習慣首先就是要對「拖延症」說不。
比如,你想鍛煉下自己的寫作能力時,但是沒有好看的本子,沒有好的靈感,沒有安靜的環境....總之就是找各種理由一拖再拖,最後就不了了之了。但仔細想想等你有了好看的本子,舒適的環境....就能寫出好的文章嗎?不!我很明確的告訴各位,文章的功底是隨著你不斷的積累而成的。
所以,當我們決定去做某件事情,請立刻!馬上!現在就要開始行動!
接著從小事入手,如果我決定開始跑步,那麼最初只會要求自己每周跑兩、三天。雖然看起來要求低,但這樣的做法更容易長期堅持,且不會被其它因素所輕易干擾。
同樣的思路也適用於學習編程。每周拿出幾天,每天拿出幾個小時,編程學習就這樣慢慢步入正軌。如果大家覺得沒心情閱讀編程教材,沒關系,視頻網站上的技術講座能夠起到同樣的作用。
2、把工作拆分成小塊
對待編程工作,我們沒必要像健身狂人那樣一口氣做到筋疲力盡。與其直接編程2小時,我們完全可以先做25分鍾、而後休息5分鍾,整個過程重復4次。很明顯,25分鍾這樣的短周期更容易堅持也不會帶來多少壓力。
不過這樣的方式應該配合更為靈活的執行思路。如果您感覺狀態很好,而25分鍾才剛剛完成熱身,那就繼續做下去並努力讓自己抓住這種狀態。
另外要向大家推薦番茄工作法,這是種學習新型技能的良好機制,因此推薦各位認真了解。
3、閱讀別人的代碼
經過這幾年的編程學習,我認為想要提升編碼水平的最佳途徑就是多看、多寫,然而閱讀別人的代碼也確實是快速提升代碼水平的一個技巧。
4、尋找良師益友
5、寫技術文章
如果大家學習了一種新的編程概念,但不能確定自己是否已經真正掌握,可以寫技術博文加以檢驗。一來可以提高自己的編程水平,二來也能提高自己的知名度,將來找工作也會比別人多一個機會。
6、保持耐心
對於人生來說,其中任何目標的實現都離不開耐心。編程學習就如其它任何學習任務一樣,都需要反復努力並投入大量時間。
在這個過程中,您一定會經歷高潮與低谷——別被這些曲線影響了心情。接受已經發生的一切,並盡可能避免其中不好的部分。
就像打高爾夫球一樣,我們的手感總在不斷浮動,但只要堅持到底,您最終總能成為一個大神呢?
總結
啰啰唆嗦的說了這么多,也算是自己當初自學找工作的一個縮影,希望給那些還掙扎在自學之路上的小夥伴帶來些許的信心。