Ⅰ 初級程序員需要看哪些書籍
初級程序員要求用c語言編程,所以不會太難啦,用c於洋方面的書籍就可以了。、推薦閣下閱讀《c語言程序員之路》。另外要想過初級程序員,還要有軟體基礎知識,資料庫基礎知識,計算機專業英語等等,自己多努力吧。像一本里都又是不太可能的。不要想有什麼好辦法呀
Ⅱ 程序員入門:如何自學編程
首要之首:不要急於選擇一種語言 新手們有一個常見的錯誤就是猶豫於判斷哪種編程語言是做好的、最該先學的。 我們有很多的選擇,但你不能說那種語言「最好」。 我們應該理解:說到底,什麼語言並不重要。 重要的是理解數據結構、控制邏輯和設計模式。 任何一種語言—甚至一種簡單的腳本語言—都會具有所有編程語言都共有的各種特徵,也就是說各種語言是貫通的。 我正在攻讀我的計算機學學位,我編程使用Pascal,匯編,和C語言,事實上我從來沒有把它當成職業以求獲得回報。 我一直在自學編程,工作上用不到它,我使用現有的知識,參考各種文檔和書本,學習它們的用法。 因此,不要急於選擇何種編程語言。 找出你想要開發的東西,使用一種能夠完成這項任務的語言,這就可以了。 根據各種開發平台的不同,有很多不同的軟體開發形式可供你選擇:從網站應用到桌面軟體到智能手機軟體到命令行腳本工具。 這篇文章里,我將重點介紹一些很受歡迎的入門教程和資源,它們能幫助你學會如何在各種主流的平台上編程開發。 我先假設你是一個悟性很強的讀者,但對於新手,當我談論程序代碼時還是要按照入門級的水平。 因為即使是你自己看一篇編程入門手冊,如果發現都能理解時,心情自然會很高興,這樣利於你進一步學習。 桌面腳本 想要動手在Windows里或蘋果系統里編程,最簡單的方法是從一種腳本語言或宏語言開始,例如AutoHotkey(Windows) 或Automator(蘋果系統)。 如今一些硬體程序員沖著他們的屏幕大喊大叫,說AHK和AppleScript並不是「真正」的編程語言。 也許他們說的是對的—技術上,這些種類的語言只能做一些上層的編程。 但是對於那些只是想來脫盲、想在他們的電腦里實現一些能自動運行的程序的新手來說,這些語言會是一個絕妙的入門入口—而且你會吃驚於它們豐富的功能。 例如,大家都喜愛的Texter就是Adam使用AutoHotkey開發的能獨立運行的Windows應用程序,所以說這種腳本語言遠不是只能開發小規模腳本軟體。 如果你想從AutoHotkey入手,可以參考Adam的指導:how to turn any action into a keyboard shortcut using AutoHotkey(然後,你可以下載Texter源代碼看看這個功能齊全的使用AHK開發的Windows應用程序的內部結構)。 Web開發 HTML 和 CSS:開發網站,你第一件要知道的事情就是HTML(網頁就是由它組成的)和CSS(一種讓外觀更好看的樣式標記)。 HTML 和 CSS 並不是編程語言—它們只是頁面的結構和樣式信息。 然而,在開始開發web應用程序之前你必須要學會如何手工的編寫簡單的HTML和CSS,web頁面是任何webapp的前端顯示部分。 這個HTML 指導是你入手的好地方。 javaScript:當你可以通過HTML和CSS構建一個靜態頁面後,事情就開始變得有趣了—因為到了該學JavaScript的時候了。 JavaScript是一種web瀏覽器上的編程語言,它的魔力就是能在頁面里製造一些動態效果。 JavaScript可以做bookmarklets,Greasemonkey腳本, 和Ajax, 所以它是web上各種好東西的關於因素。學習JavaScript從這里開。 伺服器端腳本:一旦你學會了網頁里的知識,你就要開始對它添加一些動態伺服器操作—為了實現這些,你需要把目光轉移到伺服器端腳本語言,例如php, Python, Perl, 或 Ruby。 舉個例子,如果想要製作一個網頁形式的聯系方式表單,根據用戶的輸入發送郵件,你就需要使用伺服器端腳本來實現。 像PHP這樣的腳本語言可以讓你跟web伺服器上的資料庫進行溝通,所以如果你想搭建一個用戶可以登錄注冊的網站,這樣的語言正是你需要的。Webmonkey是一個優秀的web開發資源網站,裡面有大量的各種web編程語言的指導手冊。 閱讀一下他們的PHP 初學者指南。 當你感覺差不多了的時候,看看WebMonkey』s PHP and MySQL tutorial學習如何使用PHP跟資料庫交互。 網上最好的要數PHP語言官方的在線文檔和函數參考了。 每個知識點上 (例如strlen function這個)都在後面列出來用戶的評論注釋,這些對於文檔的本身是非常有價值的。 (我很喜歡PHP,但還有很多其他種伺服器端的腳本語言你們都可以選擇。) Web框架:過去數年裡,web開發人員在開發動態網站的過程中不得不一遍又一遍的針對重復遇到的問題寫出重復的代碼。 為了避免這種每次開發一些新網站都會重復勞動一次的問題,一些程序員動手搭建了一些框架,讓框架替我們完成重復性的工作。 非常流行的Ruby on Rails框架,作為一個例子,它利用Ruby編程語言,為我們提供了一個專門面向web的架構,普通的web應用程序都能使用它來完成。 事實上,Adam使用Rails開發了他的第一個正式的(而且是嘆為觀止的!)web應用程序,MixTape.me。這就是他的如何在沒有任何經驗的情況下搭建一個網站。還有一些其他的web開發框架包括CakePHP(針對 PHP 編程者),Django(針對 Python 編程中), 以及jQuery(針對 JavaScript). Web APIs:API (應用層序編程介面)是指不同的軟體之間相互交換的程序途徑。 例如,如果你想在你的網站上放一個動態的地圖,你可以使用Google Map,而不需要開發自己的地圖。The Google Maps API可以輕松的讓你通過JavaScript在程序中引入一個地圖到你的頁面上。 幾乎所有的現代的你所知道的和喜愛的web服務都提供了API,通過這些API你可以獲取到他們的數據和小工具,在你的應用程序里就可以使用這些交互過來的東西了,例如Twitter, Facebook, Google Docs, Google Maps, 這個列表遠不止這些。 通過API把其他web應用集成到你的web應用里是現在富web開發的前沿地帶。 每個優秀的主流的web服務API都附帶有完整的文檔和一些快速入手的指導(例如,這個就是Twitter的)。 瘋狂吧。 命令行腳本 如果你想開發一個程序,讓它讀取文字或文件、輸入輸出一些有用的東西,那麼,命令行腳本語言將是個不錯的選擇。 然而它並不像web應用程序和桌面應用程序那樣有吸引力和好看的外觀,但是作為快速開發的腳本語言,你卻不能忽視它們。 很多的在linux平台上運行的web腳本同樣能以命令行模式運行,例如Perl,Python和PHP,所以如果你學會了使用它們,你將能在兩種環境中使用它們。 我的學習道路一直沒離開Perl太遠,我自學Python使用的是這本優秀的在線免費書Dive into Python。 如果成為一個Unix高手也是你學習的目標,那麼你絕對要精通bash這個腳本語言。 Bash是Unix和Linux環境下的一種命令行腳本語言,它能夠為你做所以的事情:從自動備份資料庫腳本到功能齊全的用戶交互程序。 起初我沒有任何使用bash腳本的經驗,但最終我用bash開發了一個全功能的個人代辦任務管理器:Todo.txt CLI。 插件(Add-ons) 如今的web應用程序和瀏覽器都可以通過一些擴展軟體來豐富自己的功能。 由於一些現有的軟體,例如Firefox、WordPress越來越受到開發人員的關注,插件的開發也日益流行,人們都在說「But if only it could do THIS…」 只要你掌握了HTML,JavaScript和CSS,你就可以在任何的瀏覽器里開發你想要的很多東西。 Bookmarklets,Greasemonkeyuser scripts, 和Stylishuser styles這些軟體都是用的更普通頁面一樣的語言寫成的, 這幾個東西都值得你去研究一些。 更高級的瀏覽器擴展程序,例如Firefox的擴展,它們可以幫助你很多。 開發Firefox的擴展,舉個例子,需要你精通JavaScript和XML(一種標記語言,類似HTML,但具有更嚴格的格式)。 早在2007年我就寫下來how to build a Firefox extension, 這是我在笨手笨腳的研究網上的一些學習資料後獲得的成果。 很多免費的、受歡迎的web應用程序都提供了擴展框架,例如WordPress 和 MediaWiki。 這些應用程序都是用PHP寫成的,所以只有對PHP熟悉你才能做這些事情。 這個就是如何編寫WordPress插件。 而想駕馭Google Wave前沿技術的開發人員可以從使用HTML, JavaScript, Java, 和 Python 寫小組件和小工具開始。 我寫的第一個Wave bot是跟著這個一個下午時間的快速入門指導開始的。 開發桌面上的Web應用程序 學習編程最好的結果是你在一個環境下學的東西可以應用到另外的環境中。 先學習開發web應用程序的好處就是我們有一些方法可以讓web應用程序直接在桌面上運行。 例如,Adobe AIR是一個跨平台的即時運行平台,它能讓你編寫的程序運行在任何裝有AIR的操作系統的桌面上。 AIR應用程序都是由HTML, Flash, 或 Flex 寫成的,所以它能讓你的web程序在桌面環境中運行。 AIR是開發部署桌面應用程序的一個優秀的選擇,就像我們提到過的10個讓你值得去安裝AIR的應用程序。 移動應用開發 能在iPhone或者Android智能手機上運行的手機應用程序的開發如今正呈現井噴之勢,所以你也可以夢想一下如何在iTunes應用商店裡通過你的天才程序大賺一筆。 但是,作為一個編碼新手,直接奔向移動開發所經歷的學習曲線可能會很陡,因為它需要你熟悉高級的編程語言,例如Java和Objective C。 然而,你當然應該看看iPhone 和 Android 編程究竟是什麼樣子的。 閱讀這個簡單的iPhone應用開發例子可以初步認識一下iPhone程序的開發過程。 Android 程序都是由Java寫成的,這有一個簡單的視頻教程教你如何開發第一個」Hello Android「程序(註:可能需要代理才能看這個視頻)。 耐心,刻苦,嘗試,失敗 好的程序員都有一個不達目的誓不罷休的品質,他們會驚喜於通過長期推敲和失敗換來的一點成績。 學會編程會有很好的回報的,但是學習的過程可能會是飽受挫折和孤獨的。 如果有可能,最好找個伴一起陪你做這件事。 想精通編程,這和其他事情一樣,需要堅持,反復嘗試,獲得更多的經驗。
Ⅲ 程序員2008精華本的目錄
人物&報道名人堂Perl的舞步迷亂了世界——Perl發明人Larry Wall Ray Ozzie——宇宙中最頂尖的程序員 預測未來不如創造未來——Smalltalk發明人Alan Kay MySpace的靈魂——湯姆?安德森和克里斯?德沃夫 Bit Torrent互聯網下載方式的革命——BT之父Bram Cohen 老人與海——IBM首席科學家Frank Soltis博士 程序員中的「鋼鐵俠」 二十世紀最偉大的企業家與架構師——比爾?蓋茨功成身退 Jeff Dean——為Google踩下加速踏板 游戲神話的締造者——邁克?莫懷米 有夢想精神的企業家與推銷天才——Larry Ellison 自由軟體之父——Richard Stallman 高端視點軟體企業:共同發展的「系統工程」 春天來了,SOA在哪裡? 不求國人買國貨,但求國貨迷國人 SOA與宋詞 從倫敦到北京我眼裡的軟體30年 如何保持低流動率? 「軟硬兼施」下的IT超移動化進程,准備好了嗎? 怎麼甄選優秀的程序員? 中國企業信息化之觀感 談PaaS對互聯網產業的影響 行動電話——生活的必需品 中國外包的五種模式 TD-SCDMA,繁榮還是消亡 用開放的態度迎接互聯網發展新階段 基於互聯網建立組織的基礎管理平台 培養管理意識,增強執行力 防病毒沒有百分百 開源需要創新 業務軟體安全保證——對抗網路犯罪的新技術 建立游戲產業核心競爭力 說清你的需求 共生與兼容 軟體外包,中國的機會與挑戰 企業信息化的80/20法則 如何成為技術領袖? 以技術大跨越實現經濟騰飛 誤事的外包 互聯網創業成功的要素 做好外包不容易 CPU不要錢,帶寬不要錢,軟體也不要錢 話說程序員的職業生涯 再論SNS的發展 擴展Scrum? 堅持開放不動搖 中國企業的自信與責任 網路社區新潮流:社交化、細分化、娛樂化 人物專訪 玩轉依賴注入——專訪依賴注入庫Guice之父Bob Lee 面向動態語言的IDE策略——CodeGear公司CEO Jim Douglas專訪 .NET垃圾收集器的過去現在和未來 打造最強大的Ruby on Rails開發團隊——ELC Technologies公司CEO Lex Sisney專訪 讓互聯網的魔法之光照亮中國——專訪W3C全球商務經理Mauro Nunez 從拍腦門到數據決策——締元信CTO楊海訪談 豆瓣的架構 掌握「精益」思維,提升軟體工藝——專訪ThoughtWorks中國區總經理 郭曉 資料庫技術就像陳年的酒,越老越香——記Fancy的資料庫寫意人生 我認為這是「白日夢」——Donald Knuth訪談錄 對話Martin Fowler與Roy Singham——第三屆「敏捷中國」技術大會專訪 Scott Guthrie談Silverlight 中國的圖靈之路 把握我們的優勢——漫談中國企業管理軟體 PHP之父訪談錄 打造360度的安全保護傘 「盛大在線」關鍵詞:開放——專訪盛大在線CTO梁建武 CTO是怎樣煉成的——專訪盛大游戲CTO朱繼盛 具有實踐精神的理論家:我們時代的達芬奇——高德納訪談錄 開源業務模型已經成熟——Sun軟體執行副總裁Rich Green談開源戰略 重建微軟成功模式——專訪微軟展現層平台與工具總經理Ian Ellison-Taylor 行業軟體開發縱橫談——專訪漢星天(中國)公司中華區CTO劉開陽 推開雲端計算的視窗——微軟互聯系統部門全球副總裁Robert Wahbe揭秘Azure服務平台 張亞勤:成功人要有五個素養——《微軟360度,成功與成長》圖書節選 特別報道用戶為本:瀏覽器的生存之道 瀏覽器:向Web標准看齊 山雨欲來——細述移動互聯網之手機瀏覽器 Monetization——MIX 08隨感 火花、火種、火炬——中國軟體外包企業創新觀察 誰是最受程序員歡迎的僱主?——CSDN 2007年度最受程序員歡迎僱主評選揭曉 良禽擇木而棲——《程序員》& CSDN「程序員發展指數大調查」分析報告 ThoughtWorks University取經記 拒絕盲人摸象——從指數看技術發展大勢 創業之路 從Google收購DoubleClick談起——我的追夢之旅 回首十年——從程序員到CTO 譯言:傳播和分享集體的智慧 我們喜歡做減法——亦歌播放器創作團隊專訪 像看在線影音一樣使用軟體——專訪雲端軟體平台創始團隊 做用戶真正需要的軟體——專訪IE伴侶創作團隊 做電子表單領域的YouTube——專訪KELEX電子表單創作團隊 成功創業占目標優先順序第3位——訪Screen Anytime創作人 訪軟體創新作品狂雷視頻平台主創團隊 讓電腦如積木般靈活——專訪積木在線電腦創作團隊 觀點寫SOP就是寫程序 程序員心中的許三多 視而不見需求 迎接外包產業新紀元 石光榮,黑客帝國,社會化網路——社會化網路能否平衡抽象主導的現代生活? 軟體考古學 老成員和骨幹成員應當怎麼管理? 實踐出真知 宮本茂的童心和喬布斯的叛逆——設計哲學背後的文化基因 移動+社會化:軟體的美麗新世界 大團隊的敏捷開發 招聘的藝術 軟體的病態性肥胖 從平台鎖定到服務黏性——軟體的交付模式變遷 世世代代當長工 「言程序」軟體的在線市集 Erlang:世界是平行的! 回顧:OpenSolaris 2008.05 做職業化的軟體工程師 基類與愚公移山 朋友們,讓我們把心放下 讓校園技術社團長久發展 GUI的開發瓶頸 北極星與系統架構 血性與狼性,產品經理與團隊的塑造 拉平的世界與站在十字路口的商務智能技術 GUI的開發方式 開發者社區:規模產生價值 Web不是平的 SaaS風暴來襲 Linux聖戰:序幕 不登長城,不知序為何物 更適合中小企業的Linux 定時不定量 「無窮大」與「老鼠會」 封面報道移動開發,第三次浪潮 迎接IT第三波:移動時代 創新源於興趣——Andy Rubin獨家專訪 Android組件模型評析 永遠在線,分享一切——迎接Mobile 2.0時代的來臨 用Android開發手機應用 Android中的XMPP應用 OpenMoko,解放你的手機 Windows Mobile加速企業工作流應用 技術盤點2007 2007中國軟體業的分水嶺 自由之劍再次升級——2007年自由軟體運動評述 Web技術2007盤點 回顧企業軟體2007,面向服務、面向交互 2007 Java技術回顧與展望 微軟2007技術回顧 亂花漸欲迷人眼——回顧動態語言的2007 軟體工程發展趨勢分析2007主流資料庫產品回顧與展望 機遇與競爭並存——2007年的嵌入式市場 2007信息安全技術與產業大盤點 2008年開發者的新挑戰 2007的10個焦點 尋找程序員職業上升的通道 蘋果是怎麼吃到的?——職業規劃,從了解自己開始 邁向系統架構師 程序員之路 創業規劃的六個關鍵詞 每個人都是自己的CEO 以業務為核心的行業專家 從「程序員」到「行業專家」 專注 職業規劃一家談 微軟2008攻略——寫在微軟三大產品發布時 邁向更大規模的伺服器 打造企業級資料庫 新開發工具的高峰 Windows Server 2008新特性及企業亮點 更大規模IT應用的運行平台Windows Server 2008 SQL Server 2008更上一層樓 快速締結數據與業務紐帶的SQL Server 2008 Visual Stuodio 2008一覽 體驗微軟新一代Web開發平台 微軟三大產品采購意向調查 下一代互聯網競爭格局 跨越鴻溝——Adobe的RIA戰略 改造微軟DNA——布局未來互聯網的下一個奇跡 谷從何來,歌向何去——Google產品策略分析調查:下一代互聯網鹿死誰手? 2008開源在中國說不盡的開源——記「開源在中國2008」研討會摸著石頭過河——記開源社區huihu.org 莫等閑,抬望雲和月 從一封信說起——記姜太文博士和他的XOOPS項目比開源更自由的存在——哲思自由軟體社區專訪解密淘寶網的開源架構 自由軟體和新浪網 項庄舞劍,意在沛公?——評國際軟體巨頭的開源策略 大企業如何助力開源讓漫天繁星在指尖隨心閃耀——專訪開源專家馬越開源商業模式介紹 與開源共成長ZK創始人葉明憲的開源進行時開源者說——一個開源項目貢獻者的自白開源離我們有多遠——中國開源現狀調查開源授權協議(License)初探 一個程序員談開源 OpenAPI解讀互聯網新趨勢OpenAPI出現、起源與現狀把握互聯網的下一次趨勢——「中國互聯網的OpenAPI」研討會選錄 當SNS遇見OpenAPI 全世界的信息,聯合起來!OpenSocial簡介AWS和GAE簡介中國「開放平台」和「OpenAPI」調查分析 互聯網暗潮洶涌,開放平台機遇空前——淺析開放平台發展趨勢的若干問題 OpenAPI的系統架構與運營 OpenAPI會帶來中國SNS網路的開放文化嗎? 令地圖無處不在——51ditu API 三十年河東 三十年河西——汶川地震信息匯總的OpenAPI實踐SAAS 2008中國進行時 建設SaaS的高速公路——「中國SaaS運營」研討會紀要 重新認識SaaS本質 SaaS的核心——服務 打造一條SaaS開發的生態鏈 淺析中國的SaaS用戶 SaaS:中小企業信息化的捷徑SaaS成熟度模型淺析 SaaS可信平台的搭建 從XToolsCRM談構建安全SaaS構架與互聯網共舞的SaaS PaaS展望未來的軟體交付模型阿里軟體借SaaS開創藍海——10億風險投資培育市場軟體工程四十年四十年軟體工程故事 軟體的未來 以實踐為本,集百家之長關注軟體工程的國際標准和人才標准 軟體工程與管理思想 軟體工程未來發展趨勢從軟體開發看中美文化的差異軟體工程的進化論 槍與玫瑰——三五個人十來條槍的軟體工程實踐軟體質量是生產出來的 軟體工程中的敏捷實踐 肩負歷史使命的IE 8 IE歷史技術分析IE 8安全特性 IE8應對互聯網新挑戰——訪微軟資深商業產品經理:Ryan A. Servatius Chrome產品經理Brian Rakowski訪談 Chrome光芒背後的秘密——Google Chrome瀏覽器源代碼初探 Mozilla——在雷火中永生的怪獸為何微軟對IE 8「又愛又恨」——專訪傲遊公司首席執行官陳明傑 「柔道」戰略解析Google戰勝微軟三部曲——專訪奇虎董事長周鴻禕山雨欲來風滿樓——雲計算趨勢一覽 自由軟體的雲計算觀——專訪自由軟體之父Richard Stallman 泛談雲計算的發展之路 何來雲計算?——IBM Tivoli軟體總經理Alfred Zollar專訪雲計算推廣的是互聯網新理念——專訪Google中國研究院副院長張智威雲計算還處於初級階段——專訪群碩軟體技術總監邵榮漫談雲計算 靜觀雲卷雲舒——Force.com雲計算解析Google構建我們身邊的雲計算 IBM雲計算和政府雲平台 雲深不知處——大規模分布式雲計算方案詳解雲計算中的存儲 向金融海嘯宣戰 經濟變局下的中國軟體產業七大趨勢 金融危機下本土軟體廠商更具競爭優勢 金融海嘯對中國IT培訓業的影響 用「堅持」抵禦風險用「變革」應對危機互聯網公司如何應戰全球「金融海嘯」 嚴冬中捕獲暖流——匯眾益智的危機觀 阿里軟體用SaaS為中小企業「破冰」 經濟危機與互聯網雙陰影下的IT出版實踐&架構實踐 網站類產品版本升級計劃和控制 我看CMMI 為什麼應該保留TOP 10 風險列表?白話CMMI 加班趕工,得不償失——歷史給你上六課例說精益思想 略談項目風險界定 CRTL:遊走於技術與業務之間——記趨勢科技中國區網路安全監測實驗室HTTP協議之前世今生——兼談網路應用結構設計高性能網頁開發新20條規則詳解頻繁更換結對之惑 風雨創業路——關於Web2.0站點的誤區和建議 在矩陣里遨遊的魚 從美式Scrum說起一家美國公司的Scrum敏捷項目記要與思考搭上MySpace聚友這班車RAF指標在量化項目管理中的應用 網站運維之道 如何搶奪歐美外包訂單?——以TEC主導歐美外包項目競標 愛敏捷,愛自由初探行為驅動開發 對日軟體外包開發中的雙PM模式團隊作業在大型軟體測試中的應用 乘時間機器,看敏捷旅程2009年10大戰略性技術 初探Rhino Mocks框架 實踐雲計算——基於Amazon Web Services的在線交易應用 精益軟體開發中的「庫存」 軟體工程戰地手記 敏捷是另一顆銀彈嗎? 只需要一份需求 有關敏捷的若干思考 需求分析 如何做好需求收集 用例有粒度嗎 搭建企業的需求收集平台CMMI幫你做需求 故事卡以外的故事:敏捷需求協作老圖新說話需求業界需求管理工具應用情況調研 需求捕獲中的「心理戰」需求溝通中的「乾坤大挪移」 開發故事 開源項目成功三要素興趣、堅持、社區 兩萬工作人日軟體的誕生——記用友A8產品的開發過程 奉獻,分享,開放——記北京Linux User Group 揭秘Windows醫生Mister Wong團隊如何應對Logo風波因為信任,所以簡單——專訪支付寶架構師團隊ThoughtWorks University取經記——技術真經篇 架構 從奧運訂票系統癱瘓說起——談FastCGI與IT架構.NET平台網站架構調優實踐點滴 SecondLife架構剖析 做人、做事,做架構師——架構師能力模型解析又拍網(Yupoo!)技術架構初探大規模服務設計部署經驗談 淺談Web圖片伺服器 Web架構師的能力 炫目的敏捷架構師 寫給Web2.0站長,不僅僅是潑冷水談談體育比賽的圖文直播 談SOA架構中使用Cache的過程 SaaS進銷存系統實戰架構分析 大型網站架構演變和知識體系 平衡的藝術——從菜鳥到架構師伺服器負載均衡架構之傳輸層負載均衡——伺服器集群的高擴展性和高可用性技術專區Boost.Function內核剖析面向對象與泛型編程矛盾論——類型擦除技術在C++中的應用C++平淡是真——寫在Stroustrup博士榮獲DDJ Excellence in Programming 2008之際 閑侃分析和設計透過概念看到本質手持設備的實時3D圖像 游戲程序中的骨骼插件游戲開發中的Scrum和長期項目規劃 游戲中的狀態機利用GPU進行高性能數據並行計算 iPhone和iPod Touch上的OpenGL ES技術從程序員的角度看CacheAdobe AIR平台的新世界:桌面與Web的大一統 從JFace Viewer框架看Eclipse的Pluggable Adapter模式 小議JavaScript庫——Dojo、jQuery和PrototypeJS的比較讓你的RCP應用程序運行在B/S架構上 安全編碼實踐:數據頁面保護 Web安全開發:SQL注入攻擊和網頁掛馬 跨站腳本XSS安全漏洞 初識Xquery Java前沿——Bill Shannon和Roberto Chinnici訪談錄初探OSGi 在大型遺留系統基礎上運作重構項目 從關系數據到樹形數據 從GC的角度看性能優化 設計即代碼——MDA開發實踐 敏捷與性能的博弈——Ruby on Rails Web development回答關於REST的十點疑問 談談網站靜態化Facebook應用開發之旅 函數編程之風雲再起Python性能優化經驗談面向語言編程——面向對象之後的革命多核時代,Erlang的時代 自由軟體運動:從創世紀到GNU GPL version 2 開源資料庫Sharding技術 思考函數式編程 關於「思考函數式編程」幾點注記Python中泛型函數應用案例 演算法擂台 《時間表達》解答 Cantor表解答 Cantor表與Kolmogorov復雜度 淺談演算法學習 采訪側記 微積分習題解答《網友聚會》解答 計算機圍棋新構想——專訪「深藍」之父許峰雄 《反轉棋盤》解答 《溢水魚缸》解答 《支援救災》解答 蒙特卡羅方法在計算機圍棋中的應用計算機圍棋夜話調試之劍調試:通向高手之路——調試之劍主持人訪談錄舉步維艱——如何調試顯示器點亮前的故障 權利移交——如何調試引導過程中的故障程序員百寶箱工具 Rails 2.0 新特性之View&Route淺析ActiveResource Rails 2.0中的調試 NIO網路開發設計實踐 基於MINA構建簡單高性能的NIO應用高性能的HTTP引擎——Grizzly主流源碼版本管理工具的特色淺析ClearCase應用實踐 交叉應用——軟體配置管理與知識產權審計 CVSTrac缺陷跟蹤系統 從SVN Trac開始中小團隊項目管理之路 通過ODP.NET 11g用Oracle Advanced Queue進行消息編程 白話工作流發展史開源工作流平台jBPM:過程組件模型與PVM關於WF的一些思考 基於業務模型的工作流 EOS中的工作流 做減法的二次開發平台 冬眠中的Erlang Erlang項目概覽Web伺服器Facebook的聊天系統 Jazz開發實踐Jazz產品評測感受 無廢話Erlang Erlang與Web開發 ErlyBird作者訪談錄——Erlang開發環境和應用前景自己動手寫IDE——NetBeans上Scala支持的實現 移動開發新勢力 Android Market模式的3G視角 程序之眼看iPhone 眾人拾柴火焰高——Moblin的發展之路 Scrum管理工具賞析 敏捷團隊協作的加速器——MingleScrumWorks,讓Scrum更敏捷 企業級虛擬化「硝煙四起」 VMWare VI3——企業級虛擬化的標桿 來自微軟的反擊——Microsoft Hyper-V開源社區帶來新天地——Xen與XenSource應用 話說IT治理 國土資源調查項目案例SOA的企業實踐從何而起 開源項目推薦 Xinc: 2.0 alpha version AJAX輕量級應用框架BuffaloHyperic HQ企業產品監控程序AJAX富客戶端web應用框架ZK FunFX 網上商店系統ECSHOPehcachexRuby jNetStream Protocol Decoder XAMPP WinSCP MediaCoder Concrete5 Notepad++ Shareaza EasyJWeb 創新項目推薦 書評 2007年度圖書:技術趨勢晴雨表 Head First設計模式——Head First Design Patterns SOA權威指南The Definitive Guide to SOA從細微之處見大師精神——評《C陷阱與缺陷(第二版)》 說說《HTML之路》這本書 優秀程序員的警示牌 ActionScript 3書評 Flex三味書屋——我喜歡的三本Flex圖書 新產品&工具
Ⅳ 程序員之路是怎樣的
說說我個人和朋友的經歷與感受。
一般一個行業最終大致有三種結果:
1、成功:
本身興趣就是編程(或則有過人的毅力一直堅持,並有一定的天賦,否則太累了),那麼多半會做的很開心,然後拿著一份相對豐厚的薪水,大概的職位就是高級工程師,技術經理,技術總監,CTO,甚至做老闆。
2、普通:
這個是多數人的路,興趣一般,或者有興趣但很懶。做的不算開心,也沒有不開心。薪水還可以吧,普通人嘛,過著簡單的日子,溫飽沒問題。運氣好一點,還能稍微滋潤點。大概的職位,高級工程師,工程師,程序員,項目經理。
3、失敗:
如果沒有天賦,或者又不努力,成天做夢一樣活著,或者說沒有毅力,或者自以為是的認為,程序就那麼點東西,一窩蜂的走進這個領域,那麼結果就是,什麼都不是,什麼都沒有。很難進步,數十年如一日。將就著不會餓著。薪水少到,不如去篩沙,搬磚頭。最終忍下來了,就憔悴的生活。大致的職位,程序員,碼農,碼畜。要是運氣好點,也許能做某個小公司的小頭目。熬不過去,就轉行。
周圍很多人都這樣,什麼路的都有。
你有興趣,做的開心,就瀟灑輕松很多, 再勤奮一點,會出頭的。
沒興趣但有毅力,也可以。
如果既沒什麼興趣,也沒什麼毅力,轉行吧。會深陷泥濘疲憊不堪。
這條路,不好走。要會的技術多 ,總要追新,IT行業更新很快。
其實,如果沒有明確的目標,過人的毅力,最好是找一群志同道合的夥伴一起走這條路。
如果什麼都拿不準,就嘗試一下吧,人生有很多種可能,哪一種都未必錯,試過了才會知道,自己是否適合。
Ⅳ 我該怎麼走我的程序員之路
東西學到了才是自己的。首先很佩服你能自學編程,因為我是個計算機專業大四的學生,但編程學的不咋的,學好編程還是有一定難度的。想從事編程就去唄。現在這個社會,50% 的大學生出來從事的不是自己的本職專業,首先是因為高考填志願好多都是不了解這個專業,進入大學才發現自己根本不喜歡,其次也是在大學沒學好自己的專業。但學好了其他的本領也是一樣的賺錢找工作的呀!公司招聘也一般不會嚴格要求說是要相關專業,崗位——有能者居之。而且像編程這行業要求的是實際能力,也就是你的動手能力!你想從事這行業的話,建議你有機會先去實習,或是在學校參加編程之類的比賽,找找項目做,這個可以讓自己有比較快的提高~!記住:做自己想做的,可以更快更容易的成功!
以上是我的一點認識,希望對你有所幫助!
Ⅵ 程序員之路 對於一個程序員應該怎樣發展
先當程序員,好好工作個5年,再打算怎麼辦。計劃跟不上變化,一定要先打好基礎。
Ⅶ 程序員之路怎樣走(自學成才的進來)
給C++初學者的50個忠告
1.把C++當成一門新的語言學習(和C沒啥關系!真的。);
2.看《Thinking In C++》,不要看《C++變成死相》;
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因
為他們很難而我們自己是初學者所以就不看;
4.不要被VC、BCB、BC、MC、TC等詞彙所迷惑——他們都是集成開發環境,而我們要學
的是一門語言;
5.不要放過任何一個看上去很簡單的小編程問題——他們往往並不那麼簡單,或者可
以引伸出很多知識點;
6.會用Visual C++,並不說明你會C++;
7.學class並不難,template、STL、generic programming也不過如此——難的是長期
堅持實踐和不遺餘力的博覽群書;
8.如果不是天才的話,想學編程就不要想玩游戲——你以為你做到了,其實你的C++水
平並沒有和你通關的能力一起變高——其實可以時刻記住:學C++是為了編游戲的;
9.看Visual C++的書,是學不了C++語言的;
10.浮躁的人容易說:XX語言不行了,應該學YY;——是你自己不行了吧!?
11.浮躁的人容易問:我到底該學什麼;——別問,學就對了;
12.浮躁的人容易問:XX有錢途嗎;——建議你去搶銀行;
13.浮躁的人容易說:我要中文版!我英文不行!——不行?學呀!
14.浮躁的人容易問:XX和YY哪個好;——告訴你吧,都好——只要你學就行;
15.浮躁的人分兩種:a)只觀望而不學的人;b)只學而不堅持的人;
16.把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡;
17.C++不僅僅是支持面向對象的程序設計語言;
18.學習編程最好的方法之一就是閱讀源代碼;
19.在任何時刻都不要認為自己手中的書已經足夠了;
20.請閱讀《The Standard C++ Bible》(中文版:標准C++寶典),掌握C++標准;
21.看得懂的書,請仔細看;看不懂的書,請硬著頭皮看;
22.別指望看第一遍書就能記住和掌握什麼——請看第二遍、第三遍;
23.請看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成開發環境的搖籃上,要學會控制集成開發環境,還要學會用命令
行方式處理程序;
25.和別人一起討論有意義的C++知識點,而不是爭吵XX行不行或者YY與ZZ哪個好;
26.請看《程序設計實踐》,並嚴格的按照其要求去做;
27.不要因為C和C++中有一些語法和關鍵字看上去相同,就認為它們的意義和作用完
全一樣;
28.C++絕不是所謂的C的「擴充」——如果C++一開始就起名叫Z語言,你一定不會把C和Z
語言聯系得那麼緊密;
29.請不要認為學過XX語言再改學C++會有什麼問題——你只不過又在學一門全新的語
言而已;
30.讀完了《Inside The C++ Object Model》以後再來認定自己是不是已經學會了C++;
31.學習編程的秘訣是:編程,編程,再編程;
32.請留意下列書籍:《C++面向對象高效編程(C++ Effective Object-Oriented
Software Construction)》《面向對象軟體構造(Object-Oriented Software
Construction)》《設計模式(Design Patterns)》《The Art of Computer Programming》;
33.記住:面向對象技術不只是C++專有的;
34.請把書上的程序例子親手輸入到電腦上實踐,即使配套光碟中有源代碼;
35.把在書中看到的有意義的例子擴充;
36.請重視C++中的異常處理技術,並將其切實的運用到自己的程序中;
37.經常回顧自己以前寫過的程序,並嘗試重寫,把自己學到的新知識運用進去;
38.不要漏掉書中任何一個練習題——請全部做完並記錄下解題思路;
39.C++語言和C++的集成開發環境要同時學習和掌握;
40.既然決定了學C++,就請堅持學下去,因為學習程序設計語言的目的是掌握程序設
計技術,而程序設計技術是跨語言的;
41.就讓C++語言的各種平台和開發環境去激烈的競爭吧,我們要以學習C++語言本身
為主;
42.當你寫C++程序寫到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡
快將餘下的部分粗略的完成以保證這個設計的完整性,然後分析自己的錯誤並重新設計
和編寫(參見43);
43.別心急,設計C++的class確實不容易;自己程序中的class和自己的class設計水
平是在不斷的編程實踐中完善和發展的;
44.決不要因為程序「很小」就不遵循某些你不熟練的規則——好習慣是培養出來的,而
不是一次記住的;
45.每學到一個C++難點的時候,嘗試著對別人講解這個知識點並讓他理解——你能講
清楚才說明你真的理解了;
46.記錄下在和別人交流時發現的自己忽視或不理解的知識點;
47.請不斷的對自己寫的程序提出更高的要求,哪怕你的程序版本號會變成Version
100.XX;
48.保存好你寫過的所有的程序——那是你最好的積累之一;
49.請不要做浮躁的人;
50.請熱愛C++!
C++的書
1. 《Thinking In C++》
2. 《The C++ Programming Language》
《Inside The C++ Object Model》
3. 《The Standard C++ Bible》(中文版:標准C++寶典)
4. 《Effective C++》
《More Effective C++》
《Exceptional C++》
5. 《程序設計實踐》
6. 《Inside The C++ Object Model》
7. 《C++面向對象高效編程(C++ Effective Object-Oriented Software Construction)》
《面向對象軟體構造 (Object-Oriented Software Construction)》
《設計模式(Design Patterns)》
《The Art of Computer Programming》
Ⅷ 成為程序員之路,改從學習什麼開始起步
你想做什麼樣的程序員?
程序員沒有什麼神秘的,在一軟體完整的開發過程中程序員只是軟體工人,做大熟練的工作.從開發的角度看,最高級應該是系統分析員之後是軟體設計師之後是程序員.首先得分析,分析出模塊開發的進度等等,之後是分別設計,設計出相應的代碼模塊,數據結構,基類等等,最後是程序員按要求做一些已做好的重復性的工作,就像吃人家嚼過的東西一樣.
但是程序員的工作也很重要.但是一般一個好的軟體設計師可以取代程序員的工作.
不管是系統分析員也好,軟體設計師也好,都是從程序員開發的.
程序員可以分為很多種,像Unix程序員、Windows程序員,或是C++程序員、Delphi程序員,等等。
我是一名Web程序員:
我知道Asp、Jsp,會做網站、會做bbs,這應該叫Web程序員了吧。確實,我承認,這些技術是一名Web程序員應該具備的;但是,你如果僅懂得這些,卻只能叫做Asp程序員、Jsp程序員,而不是真正意義上的Web程序員。現在的世界是屬於Internet的,大部分的應用基於Internet,大家可以想想,像Yahoo、Microsoft、Amazon那樣的網站,其訪問量之大、應用之復雜,需要什麼樣的技術才可以支撐,難道僅僅是硬體的功勞么。
我想在Windows平台下來談談Web程序員應該掌握的技術
1. 首先,就是上面提到的各種腳本,asp、jsp、php等等,這些東西大同小異,基本可以舉一反三。
2. 資料庫,
相信做Web的人肯定用過,像Access、Sql Server、Oracle。很多人會用各種資料庫,但是僅限於寫一些sql,select、update、insert,用ADO來操作,如果這樣,就算會用100種資料庫又有什麼用呢?
至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是我重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C++編寫。而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而本人對SUN公司的「網路即計算機」的概念相當欣賞,並相信JAVA即其相關的技術集JAVA One會成為未來的主流開發工具之一。其次,如果能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,C++ Builder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
Ⅸ 程序員之路如何實現,請列的清單。就是實現程序員的規劃列表。
少壯不努力,長大做IT。 另外兄弟如果真的想要做IT的話,勸你做C++或嵌入式,別做java或.net,不解釋,過來人的經驗之談。
Ⅹ 怎麼樣才能學好C語言
如果是初學C語言請看完 一些成功人士的心得
第一個要裝進行囊和你一起前進是「規范的格式」,有很多教科書,參考書,不太注重程序的格式的問題,寫出的程序就象一堆堆的垃圾一樣,這也導致了現在很多人寫的程序中有很多的廢碼,垃圾代碼,這和那些入門的書有非常大的關系,要把那些作者都拿來打打PP。真正的商業程序絕對是規范的,張三寫的程序和李四的程序格式大致相同,各種標識符的命名規則一樣,否則誰也看不懂你寫的程序。如果寫出來的代碼誰也看不懂,那絕對是垃圾。如果要把那些垃圾翻半天,勉強才把金子找出來,那這樣的程序不如不要,還不如重新寫過,這樣,思路會更清楚一點。所以說,規范的格式是入門的基礎。那這個規范的格式包括什麼呢?不少啊,要堅持才能做到!長標志符命名,代碼縮進,一對大括弧范圍不超過一屏幕,等等。
第二個要裝進行囊的是耐心,所謂工欲善其事,必先利其器。要想成功,沒有一個相對平淡的過程是不可能的。這不僅僅指你在學習過程中要有耐心,要循序漸進,而起也說的是另一個重要的方面:調式程序。調試是寫程序過程中一個重要的方面,如果有人能一次寫成程序,牛啊,而且是大牛,不光是大牛,還是老子騎的那頭青牛,凡人是做不道的!調試是每個程序必定經歷的歷程。經常有同學問我:老師,我的程序完全沒錯誤啊,都是照書抄的啊!怎麼就運行不出來呢?對於這個問題我也看不出來!你們有問題可以找我,找其他的老師,老師找誰啊?李師父?那是很荒謬的!我就只好坐下來調試,這個說實話,調試是很枯燥的,所以有同學抱怨說我操作太快,不理解為什麼要這樣,為什麼要那樣,我的脾氣不太好,一煩躁就會罵人地,所以,這個就需要你們自己修煉內功了!
有了這兩個就可以了,可以出發了,估計有人說了,英語和數學不要了?大家都說大學生了,這種問題就不要問了嘛!你已經用早晨和傍晚的時光學習了英語了,我這個沒有要去,計算機專業英語超簡單,小學水平而已,記住一些專業詞彙就可以了!關於數學,說數學好,寫程序就好是沒有科學根據的!我就有個同學,數學回回100分,寫程序也就是hello world的程度,不過人家現在是數學博士了!慚愧啊!做為的大學生,而且是我們這個專業的大學生,已經完全具備了寫程序所需要的數學素養了!所以這個不是我們要擔心的,Ready? Go!
第一招,學什麼呢?打狗棍法!呵呵
有一個偉人說過:「重復權威是成熟的必經之路」,這是站在巨人的肩膀上的做法,習武之人首先要學的都是各種套路,比方說辟邪劍法,然後才能融會貫通,開宗流派;我們學習寫程序也要這樣來,這是一個捷徑,幫你走得更遠得捷徑。
看書,看好書!書中所寫,是前人數十年經驗所寫,看十本書,就相當於汲取了前人數十年的功力,那麼你的內功也會迅速上升1甲子。:)書當然要看好書,只有好書才營養豐富。要做到讀書破萬卷,編程如有神;枯燥的看書是很郁悶的,很容易變成化石!現在很多是書都是用源碼說明問題的,源碼就像是動畫、就像是幻燈片,把書中的招式一一演練給你看。可以說高手的經驗大都是源自代碼,最後也都化成源碼展現在大家面前,把書上的程序一個一個的輸入(用鍵盤,用你的手指)到電腦中,編譯運行。自己手工輸入這一步不能省略,現在很多書有配套源碼,很多同學或者成年人學習的時候都耍小聰明,直接把源碼復制過去編譯運行,hoho, 這是沒有效果的。
自然,我讓你輸入程序不是讓你練習盲打,你在輸入的過程就可以品出程序的好壞來了,如果發現自己輸入了很多重復代碼,那至少這個程序的結構就不好了,窮則變,變則通嘛,你就想改進它啊,這不是很好嗎?
當然,程序輸得多了,盲打功力也上了一個台階,鍵盤敲得快了,薪水也跟著漲上去了!^_^
不過,鍵盤敲得快不代表你的程序就寫得好,否則學校只要每個學生發一份盲打聯系軟體,四年畢業後,個個都是程序高手了!
好了,你輸了一個程序進電腦了,鍛煉了手部肌肉,也運行出了結果,愉悅了身心,就此滿足了?那離高手還遠呢,要變成高手,你還要鍛煉一下你得腦部肌肉!拿起你得筆,拿起你得紙,用你得大腦,這號稱世界上最精密的機器來運行你輸入的程序,記錄下不同運行時刻變數的值,記錄下程序的運行分支,最後發現,這個程序被你解剖到了紙上,我相信也解剖到了你的心裡!這是捷徑的核心,一定要記住,輸入的程序不是說正確運行就完事了,要去閱讀一下代碼,利用筆和紙做輔助工具,做一下筆記,這就是重復權威 ,當然,如果你是天才,那請你塞上耳朵,你不在我們討論的范圍之內!
為什麼這一步很重要呢?
大家剛開始學習的時候,是不是有種感覺,如果讓你寫一個程序,你從哪裡下手呢?前面?後面?上面?下面?為了解決這個問題,我的程序該如何寫呢?抓耳撓腮,好煩啊,於是乎乾脆睡覺去,不寫了,你看,這種行為是要打PP的!
練武功,總是先重復師父的動作,才能有自己的動作,所以也讓我們重重復別人寫的程序開始,然後再寫自己的程序吧!
遵循這個方法,你們就跟著組織走上了通往羅馬的大路了!
接下來,你得走啊,不走怎麼到羅馬呢? 把你學會的程序設計方法應用到你寫的程序中去啊!
某天,你看到這里有個問題,你有了想法,怎麼辦?上機去,和鍵盤奮戰去!stop, stop! 暫停一下,上機之前,不要忘記了你的筆和紙,勇敢地把你的想法寫下來,如果寫不出來,就不要去機房浪費爸爸媽媽的血汗錢了!
當然,你不能亂寫啊,寫出來的東西怎麼樣才叫不是亂寫的呢?實踐是檢驗真理的唯一標准!用你的大腦去運行一邊啊,不是叫「人程序合一」嘛?,這就是了!學武功就要學絕世武功!雖然號稱最精密,實際效果上,人腦還是沒有電腦的准確度的,如果你的大腦能馬馬虎虎地運行出來之後,那麼OK,帶上規范的格式和耐心,去上機吧!
自然,我們說一天到晚面對字元界面的TC是有些郁悶,大家都習慣了windows,微軟的客戶體念設計中心可不是吹出來的!windows多好,色彩斑斕的。當你修煉到我這個程度的時候,非要聽這京劇才文思泉湧的寫程序的時候,當然要用windows下的集成開發環境了。但是對大家來說,不是現在,windows是很危險地,程序員還是回到TC中去吧!
TC至少有一個好處,可以鍛煉我們使用組合鍵的習慣,可以鍛煉我們使用鍵盤編程的習慣,回想我們剛剛說的梁某說的話「用滑鼠怎麼編程呢?」有同學不免要提出疑問了,我是80年代甚至是90年代生人,你還讓我面對那麼枯燥的輸入輸出界面?我跟你有代溝!我期待有更豐富更吸引人的交互手段
哦,這個問題問得好,C語言中也有圖形啊,完全可以滿足大家寓教於樂得心理!讓我們來看這個程序,很簡單,就是在屏幕上話一個周期得正弦波!
(參見ppt......)
運行效果是不是很好?你學數據結構的時候,樹啊,圖啊,你都可以這樣輸出啊,很多地方你都可以做的更好呢!
好了,到這里,我們基本解決了在學習C語言程序設計時的一些方法論的東西,關於具體的學習過程,如果你要我在這里給你們講指針要如何學習?函數要如何學習?那我講的內容也不會多於任課老師的內容,或者開個專題叫「如何學好指針」,當然,如果你願意和我探討一下指針的本質和高級應用的話,課後,課後啊!
學習C語言不是一朝一夕的事情,但也不需要花費十年時間才能精通。如何以最小的代價學習並精通C語言是本文的主題。請注意,即使是「最小的代價」,也絕不是什麼捷徑,而是以最短的時間取得最多的收獲,同時也意味著你需要經歷艱苦的過程。
一、要讀就讀好書,否則不如不讀
所有初學者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。
Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設計語言》)堪稱經典中的經典,不過舊版的很多內容都已過時,和現在的標准C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指針的重要性,算是本書的一個特點吧。不過這本書並不十分適合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很扎實,那麼你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。
如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什麼壞事。然後你可以挑戰一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細讀完並能透徹理解,你便可以放心大膽地在簡歷上寫「精通C語言」了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果你看不懂,那你一定是缺失了某些必需基礎知識。此時,你要仔細分析自己需要補充哪些內容,然後再去書店尋找講述的這些內容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。
二、Unix/Linux還是Windows,這是個很大的問題
不同的編程環境會造就出不同思維的程序員。Windows的程序員大多依賴集成開發環境,比如Visual Studio,而Unix程序員更加鍾愛Makefile與控制台。顯而易見,集成開發環境更容易上手,在Windows上學習C語言,只需要會按幾個基本的Visutal C++工具欄按鈕就可以開始寫Hello, World!了,而在Unix下,你需要一些控制台操作的基本知識。有人也許認為Unix的環境更簡潔,但習慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學習C語言去專門裝一個Unix系統,似乎有點不劃算。
對於一個只懂得Windows基本操作、連DOS是什麼都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個小程序遠比學習ls、cat等命令有趣,況且我們要專注於C語言本身,就不得不暫時忽略一些東西,比如編譯鏈接的過程、Makefile的寫法等等等等。
所以我建議初學者應該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後你一定要轉向Unix環境的。Visual C++ 6.0使用很方便,調試也很直觀,但其默認的編譯器對C標準的支持並不好,而Dev C++使用gcc編譯器,對C99的標准都支持良好。使用順帶提一下,很多大學的C語言課程還在使用Turbo C 2.0作為實驗環境,這是相當不可取的,原因其一是TC 2.0對C標准幾乎沒有支持,其二是TC 2.0編譯得到的程序是16位的,這對今後理解32位的程序會造成極大的困擾(當然,用djgpp之類的東西可以使TC 2.0編譯出32位程序,不過那過於復雜了)。
等你學完一本C語言的教材,你一定要轉向Unix平台繼續學習,幾乎所有的C語言高級教程都是基於Unix平台的(比如《C專家編程》)。轉變的過程是痛苦的,你需要面對的是各種紛繁復雜的命令,完全不同於Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,你可以找到無數優秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數的聯機手冊,還可以看到最優秀的代碼風格(說到代碼風格,我會專門寫一篇文章詳細敘述)。
歸結起來就是一句話:初學C語言,建議使用Windows系統和集成開發環境,在准備向「高手」方向努力時,請先轉向Unix平台。
三、萬事俱備,你就是東風
書已選定,環境配置完成,正所謂萬事俱備,只欠你自己的努力了。請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。
學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。出了書本上有的例子,自己還要「創造」一些例子,比如學習運算符優先順序的時候,可以寫幾個相同的表達式,在不同的位置加上括弧,看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書上的例子以及改造之後的例子,還有自己「創造」的例子,都應該仔細地歸類保存,並且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。
例子之後就是習題了,我建議初學者把所有的習題都獨立做一遍,然後對照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習題,這是極大的錯誤,因為作者通常會在習題中說明一些重要的道理,而不是單純地檢驗前面的知識。
也許你認為這樣學習太慢,其實不然。學得細致就不用走回頭路,等你學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應該完成數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆財富。以我自己舉例,閱讀《Windows核心編程》時(我只閱讀了3/4的內容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統計),時隔多日,我早已記不清Windows的系統編程了,但只要花幾分鍾翻出以前的代碼看看,便會重新瞭然於胸。所謂好記性不如爛筆頭,就是這個道理。
仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後將所有的代碼留下,成為自己的經驗和財富,絕對的辛苦,也絕對的事半功倍。當然,這種方式只適合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。
寫到最後,還有非常非常重要的一點沒有提及——代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。因為代碼風格太重要內容也太多,我會用專門的一篇文章來詳細討論,請大家關注《程序員之路——關於代碼風格》。
題目是關於C語言,其實我主要想說說程序該怎麼學,或者一點感悟罷了,在這里,我只想引用身邊的幾個人的例子,來談一下對程序學習的理解
第一個人要說到我了,我對程序產生興趣,是聽說程序可以作游戲,那時候是在初一,然而借來一本G-BASIC簡明教材後,我便傻了眼。
陌生的詞彙,古怪的邏輯,都是些天文的中文譯本,頭疼了好一陣子。
然而當時又沒有別的閑書可看,我就整天捧著那一本書,什麼方法都試過了,甚至倒著看過了,都沒看出什麼眉目,自己又沒有電腦,只能不停地大膽地想像,然後滿腦子的疑惑……
在這里停一下,上面說的便是我學習的風格:總要經歷一番波折,瞎折騰幾下,然後才會有偶然間的明悟-開竅了!我甚至沒見過幾個人有我這么笨,現在明白過來了,我總是一開始把事情想得過於復雜,造成狗咬刺蝟的難堪的局面,然而竟然有意想不到的收獲!但是不建議大家模仿這種風格,起碼追女朋友的時候不能這樣,生活中很多機會在於接手的那一瞬間,失去就永遠找不回來了。
現在回來,後來偶然間,我看懂了一行代碼,是print 語句,當時興奮得要命,又仔細看了這個看了那個,一下子看懂了很多東西,像是在霎那間被什麼給擊中似的,立刻間醍醐灌頂。。。。
程序應該怎樣學,對C來講,我覺得應該從畫圖學起。
原因有二。
一,畫圖程序很能振奮人心的,它能帶給你濃厚的興趣,這是學程序的關鍵。
二,畫圖程序容易上手,很簡單的道理,就能做出很漂亮的東西來。有很多東西甚至不用看課本,就能自己推出來(我認為推理的方法很重要,它是你自學的必要條件)。
比如畫一個圓,從數學角度來分析,要確定一個圓,只需知道它的圓心(x,y)與半徑r,那好一個圓就畫出來了,circle(x,y,r);
其它的類推,再畫一個立體的,選擇立方體,再分析,只要知道兩個對角的坐標就行了吧,翻一下課本,不是這樣,為什麼?你或許會想到,電腦屏幕本來就是平面的,用立體坐標的理論在這里,恐怕就不是最簡單的方法。所以它採用的應該是兩個平面圖形平移。此處留下疑問,立體圖形在平面坐標中怎麼表示?自己慢慢研究,很淺的東西。
想作動畫吧,想像一下動畫的原理只是從一個圖形變幻到另一個圖形,不同地變幻就出現動畫效果,那就可以畫一個,擦了,再畫一個新的,再變化。。。
數學功底好的話,從二維到三維,從靜態到動態我認為是很快的過渡。
具體該怎麼學呢,你可以多找幾個畫圖的例子,敲到電腦里,多敲幾個,慢慢地你就會知道哪些東西是干什麼的,慢慢地就會自己做出東西來。
但這里不要沉溺太久了,先學畫圖只是幫助你輕松地入門(很多人C學完了還沒有入門)。
從畫圖里暫時走出來,你應該打打基礎了,這里不再贅述。可以邊學邊實踐,物理,數學課本中很多問題都可以用程序來演示,來解決,嘗試著多做些東西,這比你老學課本中的模型強多了,只有你自己去體會才能知道。
一.C語言的背景
C語言屬於高級程序語言的一種,它的前身是「ALGOL」。其創始人是布朗•W•卡尼漢和丹尼斯•M•利奇。C語言問世時是帶有很大的局限性,因為它只能用於UNIX系統上。然而隨著科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國標准化協會制定了C語言的國際標准,簡稱「ANSI C」,從此以後它便成為一種廣泛使用的程序語言。C語言的優點很多,主要的有如下四點:
1.兼備高級語言與低級語言的優點,屬於一種中間語言。
2.它是一種結構化程序設計語言,非常適合結構化程序設計。
3.有較豐富的數據類型、運算符以及函數供以選用。
4.直接與內存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。
怎樣才能學好c語言
有人問我c語言是不是很難學,我說不是,後來問的人多了,我就萌生了寫一篇關於c語言如何入門的文章的念頭來。
其實c語言很簡單,它只是一種交流的規則,一種表達的工具,一種承載思想的容器而已,之所以感覺難,我覺得是還不習慣使用計算機特點來考慮問題。這就好比中國人從到英國定居一樣,雖然你學過英語,但是那隻是想像中的英國,和現實的英國的情況還相差很遠,所以要有一個適應的過程,也就是常說的過渡期或磨合期。
想盡快上手就得掌握計算機的特點,計算機的特點包括:
1、 計算機在問題的處理方式上要求全,將所有的可能都要告訴它。人可以根據習慣忽略一些東西,但計算機不行。比如說求解一元二次方程,我們考慮問題就已經默認了a不等於0,更有甚者把b方減4ac也默認大於等於零了。這是我們的習慣,既然有解,我們一般習慣上就把它定為實數解,所以你做出來的程序一般是不考慮這兩個條件的,但是計算機不行,計算機是有名的弱智。計算機沒有象人一樣的智能處理能力,它是人忠實的信徒,不管你怎麼想,它都會執行你的命令。由於你的習慣,導致一些別有用心的人或者無意犯錯的人來犯錯誤,致使計算機有時無所適從。很疲憊,甚至崩潰,報錯,造成你的程序是不成功的,所以你感覺很難。
2、 計算機要求程序的描述精確,無二義性。人的語言有很強的隨機性和二義性。我們平時說話時,有時是一些招呼,有時說話的邏輯性可以不太清楚,話既可以表達這樣的意思,也可以表達那樣的意思,人可以根據環境和對方想表達的含義進行分析,最終得到正確的結果,但是計算機很弱智,雖然它很聽話,但是他不能理解你表達的思想,只會按你交給的指令執行,這樣導致執行時報警和出錯。
3、 計算機編程是要求有很強的全局性和邏輯性,不存在起伏的問題。人的思維有很強的活躍期和蟄伏期,計算機不會,它隨時待命。人在考慮問題時,有很多盡興的東西,但這不是處理問題的整體,而是一部分,所以就出現做完一段代碼後,就不願意再寫,或感覺很吃力,所以感覺很難。
計算機要求它的主人,考慮問題要全面,所有可能的情況及處理都要告訴它,要求學會沉穩,心態要穩定,要求交流的語句一定要明了含義單一。
怎樣才能很快的學會c語言,更快的度過磨合期呢?C語言的語法規則記憶理解當然是不可少的,除此之外還應注意以下幾個方面:
1、 好好理解一下變數和函數的概念,至少要重新回頭看看初等數學。這是基礎,否則就會先天不足,你學的再好,也成不了大氣候。
2、 平衡心態,雖然不能做到「不以物喜,不以己悲」的水平,但至少不要浮躁,不要急於求成,欲速則不達。
3、 培養自身的全局意識,既能小無內,也能大無外,才行。
4、 嚴格按照程序設計過程設計程序,不要跳脫,天馬行空,沒有規矩是不成方圓的。
5、 努力提高自身的綜合素質。程序是人思維的表達形式,是人處理問題思路和語言的結合體。你對客觀看成到什麼程度和你掌握的知識成正比。如果你對處理的問題不理解,不會處理,你怎麼也寫不出程序。
6、 學會交流,多交流,相互補益,同時團隊合作也是很重要的。
總之,實踐出真知,多學、多練、多思、多交流,勤奮好學才能學成。
有什麼不合適的地方還請多多指教!