① 前端開發常用哪些工具軟體
前端開發的編譯器在選擇上還是很多的。在學校里,老師主要講三個前端開發軟體:
1、WebStorm
幫助編寫HTML、CSS、Less、Sass和Stylus代碼,並且支持Node.js和主流框架,如React、Angular、Vue.js、Meteor等。與IntelliJ IDEA同源,繼承了IntelliJ IDEA強大的JS部分的功能。但是付費軟體。
2、IntelliJ idea
頁面很簡單,乍一看像是一個記事本,它也確實可以當記事本用。有很多特色插件可以使用,支持多種編程語言的語法高亮顯示,具有代碼折疊功能。
2、HBuilderX
HBuilderX是DCloud(數字天堂)推出的一款支持HTML5的Web開發IDE。HBuilder的編寫用到了java、C、Web和Ruby。HBuilder本身主體是由Java編寫。是HBuilder下一代版本,具有輕便、適合vue框架的特點。
② 瓚呰秺XML鍜孞SON錛歒AML錛孞ava寮鍙戜漢鍛樼殑鏂伴夋嫨
銆銆 涓篔ava寮鍙戣呭簹AML鏂囦歡鏍煎紡鍋氫竴涓楂樼駭浠嬬粛 鎵懼嚭瀹冧笌XML鍜孞SON鐨勪笉鍚屼箣澶 騫舵楠屽畠鐨勪紭瓚婃у拰緙洪櫡
銆銆鎵鏈夊姩鎬佽璦錛堝俁uby Groovy python絳夛級鍙婂叾鐩稿叧鐨勬嗘灦錛堝俁uby on rails錛夌櫨瀹朵簤楦 灝界¢槄璇繪湰鏂囩殑澶ч儴鍒咼ava寮鍙戣呮瘡澶╃殑澶у氭暟宸ヤ綔閮芥槸澶勭悊綰綺圭殑Java 涓旀湭鏉ュ氬勾閮藉皢濡傛 浣嗚繖騫朵笉鎰忓懗鐫浠栦滑涓嶈兘瀛︿範鏂扮殑鐭ヨ瘑 鍦ㄤ粬浠鐨勫叺鍣ㄥ簱涓娣誨姞鏂扮殑鍏靛櫒 鏈鏂囦粙緇峐AML錛圷AML涓嶆槸鏍囪拌璦鐨勭畝鍐欙級鏂囦歡鏍煎紡錛堜嬌鐢≧uby on rails妗嗘灦榪涜岃茶В 鍥犱負瀹冩墍鏈夌殑閰嶇疆鏂囦歡閮芥槸浣跨敤鐨刌AML錛変互鍙婂畠涓嶺ML鍜孞SON鐨勫尯鍒 鏈鍚庤ㄨ轟簡YAML鐨勪紭鍔垮拰緙虹偣
銆銆 絀烘牸緙╄繘鍜孞SON閫夐」
銆銆YAML鏂囦歡鏍煎紡涓昏侀泦涓浜庣┖鏍肩緝榪涚殑姒傚康 瀹冪敤浜庢寚鍑烘暟鎹鐨勫眰嬈$粨鏋 鈥 鑰屼笉鏄浣跨敤XML宓屽楁爣璁版垨JSON鐨勫ぇ鎷鍙鳳紙{}錛夊拰鏂規嫭鍙鳳紙[]錛 瀹為檯涓 瀹冩槸JSON鐨勪竴涓瓚呴泦 鍥犳 鍦ㄤ嬌鐢ㄧ殑鏃跺 浣犲彲鑳介渶瑕侀噰鐢↗SON椋庢牸鐨勮娉曟潵璺沖嚭絀烘牸嫻 瀹冪殑鍒涘嬩漢灝嗗叾褰㈠逛負 涓烘墍鏈夌紪紼嬭璦鎻愪緵浜烘у寲鐨勬暟鎹搴忓垪鍖栨爣鍑 浠ユ垜鐨勭粡楠屾潵鐪 鍏墮噸鐐規槸浜烘у寲 涓嬮潰鏄涓涓浣跨敤絀烘牸緙╄繘鐨刌AML鏍蜂緥 鍒涘緩YAML鏂囦歡鏃朵笉瀹滀嬌鐢ㄥ滻瀹氬藉害瀛椾綋 鍥犱負絀烘牸鏄寰堝叧閿鐨 錛堝弬鑰冧晶杈規爮 YAML鍜屾爣絳
銆銆JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height: ponents: JTextArea: name: textArea text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that JButton: name: button text: Button
銆銆 渚ц竟鏍 YAML鍜屾爣絳 鍩轟簬絀烘牸緙╄繘鐨勪換涓鏂囦歡鏍煎紡鏈甯歌佺殑闂棰樹箣涓鏄濡備綍瑙i噴鏍囩 鍦ㄨ繖涓猋AML渚嬪瓙涓 絳旀堢浉褰撶畝鍗 瀹冧笉鏀鎸佹爣絳 浣跨敤鏍囩懼瓧絎︾緝榪涗唬鏇跨┖鏍煎皢浼氬艱嚧澶勭悊寮傚父
銆銆闅忎綘鍠滄 浣犲彲浠ュ湪浠諱綍鑺傜偣浣跨敤JSON椋庢牸璇娉曟垨娣峰悎璇娉 渚嬪 涓婇潰鐨勪緥瀛愬彲鏀逛負
銆銆JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height: ponents: JTextArea: name: textArea text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that JButton: {name: button text: Button } #JSON椋庢牸璇娉
銆銆鍦ㄥ簳灞傝妭鐐癸紙鍗沖畠浠娌℃湁瀛愯妭鐐 姝e備綘鐚滄祴鐨勯偅鏍 浜曞彿閿鍦╕AML涓鏄鐢ㄦ潵娉ㄩ噴鐨勶級鍒囨崲浣跨敤JSON椋庢牸璇娉曟樉寰楃壒鍒鏈夌敤
銆銆 YAML緇撴瀯緇勪歡
銆銆鍓嶉潰宸茬粡鐪嬩簡涓涓綆鍗曠殑YAML渚嬪瓙 涓嬮潰璁╂垜浠涓璧鋒潵浜嗚В涓涓媃AML鐨勭粨鏋 hash list 鍜宐lock literal
銆銆 hash錛堟暎鍒楋級
銆銆閫氳繃緙╄繘瀛愭靛拰鍦ㄥ叧閿瀛椾笌鍊間箣闂翠嬌鐢ㄥ啋鍙鳳紙:錛夋潵鍒嗗壊瀹炵幇hash鐨勫壋寤 濡
銆銆JFrame: defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame width: height:
銆銆榪樻湁涓縐嶆柟娉曞氨鏄浣跨敤涓嶫SON鍏煎圭殑澶ф嫭鍙瘋娉曪紙{}錛夎娉 姣忎竴瀵瑰叧閿瀛/鍊間嬌鐢ㄩ楀彿錛 錛夊垎鍓 濡
銆銆JFrame: {defaultCloseOperation: JFrame EXIT_ON_CLOSE title: Test Frame
銆銆width: height: }
銆銆 list錛堟竻鍗曪級
銆銆閫氳繃鍦ㄦ瘡涓猯ist鍏冪礌鍓嶆斁涓涓鍑忓彿錛 錛夋潵鍒涘緩list 涓庣┖鏍肩緝榪涗竴璧鋒瀯鎴愪簡YAML鐨勫熀鐭
銆銆ponents: JTextArea Jbutton
銆銆榪樻湁涓縐嶆柟娉曞氨鏄浣跨敤JSON鍏煎圭殑鏂規嫭鍙鳳紙[]錛夎娉 濡
銆銆ponents: [JTextArea JButton]
銆銆 block literal錛堟枃瀛楀潡錛
銆銆榪欐槸YAML鐨勪寒鐐 鐗瑰埆鏄涓嶺ML鐩告瘮 瀹冪殑CDATA鏄懼緱鐩稿綋綆闄 block literal鍙浠ュ皢澶у潡鏂囨湰緇嗚嚧鍦版彃鍏ユ枃浠朵腑 浣犲彲浠ヤ嬌鐢ㄧ珫綰匡紙|錛夋寚浠ゅ湪浣犵殑鏂囨湰涓淇濈暀鏂拌 濡
銆銆text: | This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that
銆銆YAML緙栬瘧鍣ㄥ皢浼氫粠絎涓琛岀殑絎涓涓鏂囨湰瀛楃﹀紑濮嬬紪璇戱紙騫朵涪鎺夋墍鏈夌殑緙╄繘絀烘牸錛 浣嗘槸浼氬湪浣犵殑鏂囨湰涓淇濈暀鏂拌
銆銆鍙﹀ 浣犺繕鍙浠ヤ嬌鐢ㄥぇ浜庣﹀彿錛>錛夊憡璇塝AML緙栬瘧鍣ㄧ粰鎵鏈夋柊琛屽姞涓婃潯綰 騫跺皢杈撳叆鐨勬枃鏈浣滀負涓涓闀胯屽勭悊
銆銆text: > This is a really long text that spans multiple lines (but preserves new lines) It does not need to be escaped with special brackets CDATA tags or anything like that
銆銆闄や簡榪欎袱涓鎸囦護涔嬪 浣犺繕鍙浠ヤ嬌鐢ㄧ珫綰垮拰鍔犲彿錛坾+錛 瀹冪粰浣嶄簬鍓嶉潰鐨勭┖鏍煎姞涓婃潯綰 淇濈暀鏂拌屽拰鏈灝劇殑絀烘牸 榪樺彲浠ヤ嬌鐢ㄥぇ浜庡彿鍜屽噺鍙鳳紙> 錛 瀹冪粰鎵鏈夌殑絀烘牸鍔犱笂鏉$汗
銆銆 YAML VS XML鍜孞SON
銆銆姝e備綘浠庡墠闈渚嬪瓙涓娓呮氬湴鐪嬪埌閭f牱 YAML娌℃湁XML閭d箞鍟板棪浜 澶ч儴鍒哬AML鏂囦歡鍐呭瑰氨鏄鐪熷疄鐨勬暟鎹 娌℃湁浜嗘棤絀峰敖鐨勬墦寮鍜屽叧闂鏍囪板垪琛 鍦╔ML涓 榪欎簺鏍囪板線寰姣斿畠浠鎻忚堪鐨勬暟鎹榪樺ぇ YAML鏇撮傚悎浣犻渶瑕佹墜宸ョ淮鎶ょ殑鏁版嵁鏂囦歡綾誨瀷
銆銆YAML娌℃湁鎻愪緵鏂規堟垨DTD姒傚康 鍥犳ゆ棤娉曢獙璇佹枃浠舵牸寮忔槸鍚︾﹀悎浣犵殑棰勬湡 XML鐨勫暟鍡︿篃鏈夊畠鐨勪環鍊 浣嗘葷殑璇存潵鏄鍥犱負XML鐨勬垚鐔熶嬌瀹冨叿鏈夊ぇ閲忛濆栫殑宸ュ叿鏉ラ獙璇佸畠鐨勬牸寮 鑰孻AML榪樻病鏈
銆銆JSON涔熼傚悎涓庝換浣曟暟鎹 瀹冧富瑕侀潰鍚戞彁楂樻ц兘鍜屾枃浠跺昂瀵哥殑澶у皬 鍥犱負瀹冨嚑涔庝笉浣跨敤絀烘牸鍜屽叧闂鏍囩 鐒惰 JSON鏂囦歡鐨勫唴瀹瑰炲姞浜嗗嶆潅鎬 瀹冪殑鍏抽棴鏍囪瘑灝辮薄涓嬪湴鐙變竴鏍 榪欏氨鏄疛avaFx浠g爜錛堝畠鍩轟簬JSON錛変腑鍙瑙佺殑鏈鐥涜嫤鐨勪簡 鍦ㄦ暟鎹鏂囦歡涓 浣跨敤UI緇撴瀯浣跨粨鏋滄洿澶嶆潅 鍏跺嶆潅紼嬪害鍑犱箮浣挎枃浠跺彉寰楁棤娉曠悊瑙
銆銆鏌ョ湅鐨凧avaFx紺轟緥浠g爜錛堢偣鍑 Edit this page 閾炬帴錛 璇風壒鍒鐣欏績瀹冩槸濡備綍緇撴潫鐨
銆銆
銆銆} } } } ] } } center: bookPanel }
銆銆鎺哄拰浜唟}緇撴瀯鍜孾]娓呭崟 浣垮緱鎵嬪伐緇存姢澶у瀷鐨凧SON椋庢牸鐨勬枃浠跺彉寰楃浉褰撳洶闅 YAML浣跨敤瀹冪殑絀烘牸緙╄繘鏂規硶宸у欏湴瑙e喅浜嗚繖涓闂棰 褰撶劧 鏃犺轟綍鏃 浣犻兘鍙浠ュ垏鎹㈠埌JSON椋庢牸鐨勮娉曪紙濡傚湪搴曞眰鑺傜偣錛
銆銆瑙f瀽YAML鏂囦歡鏈甯哥敤鐨凧ava搴撴槸JvYAML錛堬級 JRuby錛堝湪Java VM涓婅繍琛屽姩鎬佽璦鐨凴uby鐗堟湰錛夊湪瀹冪殑Ruby on Rails妗嗘灦涓鐨勮繘鍑哄彛浣跨敤JvYAML JvYAML鎻愪緵浜嗘枃浠朵竴鑸澶勭悊鐨勫姛鑳斤紙鍦ㄥ墠闈㈤偅涓渚嬪瓙涓 瀹冭繑鍥炰簡涓涓鏍囧噯Java瀛楃︿覆 Long Map鍜孡ist瀵硅薄鐨勫祵濂椾綋緋葷粨鏋勶級 浣跨敤闈欐乨ump()鏂規硶淇濆瓨涓烘枃浠 鐒跺悗浣跨敤闈欐乴oad()鏂規硶杞藉叆 渚嬪
銆銆
銆銆YAML mp(Object data Writer output); Object data = YAML load(Reader io);
銆銆鍙傝冧晶杈規爮 鍩轟簬YAML鐨勫紑婧愰」鐩浜嗚В鍏充簬鍩轟簬YAML鐨勫紑婧愰」鐩淇℃伅 浠ュ強濡備綍鍦↗ava涓瑁呭叆涓涓璇存槑鐨刄I
銆銆 渚ц竟鏍 鍩轟簬YAML鐨勫紑婧愰」鐩 璇峰師璋呮垜鍦ㄨ繖閲屽帤鑴哥毊鍦頒粙緇嶆垜浠鑷宸辯殑寮婧愰」鐩 褰撴垜鐪熺殑涓嶇煡閬撻櫎浜咼Ruby澶栧叾浠栫殑鍩轟簬YAML鐨勫紑婧愰」鐩 JRuby鐨凴uby on Rails妗嗘灦瀹炵幇涓ラ噸渚濊禆YAML 鑰屼笉鏄疿ML鎴朖SON 鐪嬬湅鎴戠殑Java Builder搴撳惂錛堬級 瀹冨埄鐢╕AML鏂囦歡鎻愪緵浜嗕竴縐嶆柟娉曞畾涔夊睆騫曟帶鍒 甯冨矓 浜嬩歡綰胯礬鍜屾暟鎹緇戝畾 浠ュ疄鐜板皢璇存槑UI瑁呭叆Java
銆銆瀹為檯涓 YAML鏂囦歡鐪熺殑闈炲父綆鍗 鐢氳嚦浣犲彲浠ヤ嬌鐢ㄤ換浣曠殑鏂囨湰緙栬緫鍣ㄩ兘鍙浠ョ淮鎶ゅ畠 浣嗘湁浜涗笓闂ㄧ殑鏂囨湰緙栬緫鍣ㄦ彁渚涗簡璇娉曞姞浜鍔熻兘 榪欏圭淮鎶ゅ伐浣滃緢鏈夊府鍔 瀵笶clipse鑰岃█ 鏈塃clipse YAML editor錛堬級 瀵筃etBeans鑰岃█ 浣犲彲浠ヤ嬌鐢ㄦ潵鑷猂uby鍖咃紙錛夌殑YAML緙栬緫鍣 鐒惰 鍦∟etBeans 涓鐨刌AML緙栬緫鍣ㄥ苟娌℃湁浠涔堢敤澶 瀹冨彧鏀鎸乊AML寰堝皬鐨勪竴涓瀛愰泦錛堜緥濡 瀹冧笉鏀鎸乥lock literal錛 甯屾湜鍦∟etBeans 涓鐨刌AML緙栬緫鍣ㄨВ鍐充簡榪欎釜闂棰
銆銆鎴戞病鏈夋満浼氭祴璇旾ntelliJ IDEA 浣嗘垜鎺ㄦ祴瀹冪殑Ruby on Rails鎻掍歡錛+IDEA+Ruby+Plugin錛夐檮甯︿簡YAML緙栬緫鍣
銆銆 娣誨姞YAML宸ュ叿
lishixin/Article/program/Java/JSP/201311/19416
③ 如何從零開始學編程
在你學習編程之前思考一下你的目標,當你有最終目標時道路會更加的清晰。那麼,你想要寫什麼?網站?游戲?iOS或者Android應用?或是你是想自動化完成一些乏味的任務讓你有更多的時間看窗外的風景?也許你只是想更具有就業競爭力找個好工作。所有的這些都是有價值的目標,這些目標都是你編程學習推動力的一部分,沒有推動力的人,是無法在略顯枯燥的漫長學習之旅中走遠的。
不要浮躁
Badprogrammingiseasy.EvenDummiescanlearnitin21days.,meswithit.
不管是在線下還是線上的書店,滿目都是《21天學通Java》這種速成書目,它們都承諾在很短一段時間內就讓你能夠學會相關技術。MatthiasFelleisen在他的著作HowtoDesignPrograms,SecondEdition一書中明確指出了這種「速成」的趨勢並予以了以上的諷刺。
所謂的「捷徑」或者說「銀彈」是不存在的,智者說過,精通某個東西需要10年或10000個小時,也就是漢語中的「十年磨一劍」,所以不用著急,功不唐捐。
培養興趣
ionbythepublic,butbecauseitisfuntoprogram.
_LinusTorvalds
沉醉於編程,編程更是為了興趣。興趣是推動力的不竭源泉,保持這種充滿興趣的感覺,以便於你能將其投入到你的10年/10000小時的編程時間中。編程很有趣,那是探索的喜悅。那是創造的喜悅。看到自己親手完成的作品顯示在屏幕上很有趣。有人為你的代碼而驚嘆很有趣。有人在公共場合稱贊你的產品、鄰居使用你的產品、以及在媒體上討論你的產品很有趣。編程應該十分有趣,若並非如此,就找出導致編程無趣的問題,然後解決之。
在這里對於初學者有兩個大坑:
如果初學者們只與預先構建好的「發動機和組件」接觸(沒有理解和思考它們構造的原理),這會嚴重限制他們在將來構建這些東西的能力,並且在診斷解決問題時無從下手。
第二個坑沒有第一個那麼明顯:幼稚的「整體論」方法有些時候會顯得很有效,這有一定的隱蔽性與誤導性,但是一兩年過後(也許沒那麼長),當你在學習路上走遠時,再想回過頭來「補足基礎」會有巨大的心理障礙,你得拋棄之前自己狹隘的觀念,耐心地緩步前進,這比你初學時學習基礎知識困難得多。
但臘敏茄也不能矯枉過正,陷入還原論的大坑,初學時便一心試圖做宏大的理論,這樣不僅有一切流於理論的危險,枯燥和乏味還會讓你失去推動力。這種情況經常發生在計算機科班生身上。
為了更好理解,可以將學習編程類比為學習廚藝:你為了燒得一手好菜買了一些關於菜譜的書,如果你只是想為家人做菜,這會是一個不錯的主意,你重復菜譜上的步驟也能做出不賴的菜餚,但是如果你有更大的野心,真的想在朋友面前露一手,做一些獨一無二的美味佳餚,甚至成為「大廚」,你必須理解這些菜譜背後大師的想法,理解其中的理論,而不僅僅是一味地實踐。但拿猛是如果你每天唯一的工作就是閱讀那些厚重的理論書籍,因為缺乏實踐,你只會成為一個糟糕的廚子,甚至永遠成為不了廚子,因為看了幾天書後你就因為枯燥放棄了廚藝的學習。
總之,編程是連接理論與實踐的紐帶,是計算機科學與計算機應用技術相交融的領域。正確的編程學習方法應該是:通過自頂而下的探索與項目實踐,獲得編程直覺與推動力;從自底向上的打基礎過程中,獲得最重要的通用方法並鞏固編程思想的理解。
作為初學者,應以後者為主,前者為輪察輔。
啟蒙
「學編程應該學哪門語言?」這經常是初學者問的第一個問題,但這是一個錯誤的問題,你最先考慮的問題應該是「哪些東西構成了編程學習的基礎」?
編程知識的金字塔底部有三個關鍵的部分:
演算法思想:例如怎樣找出一組數中最大的那個數?首先你得有一個maxSoFar變數,之後對於每個數
語法:我怎樣用某種編程語言表達這些演算法,讓計算機能夠理解。
系統基礎:為什麼while(1)時線程永遠無法結束?為什麼int*foo(){intx=0;return&x;}是不可行的?
啟蒙階段的初學者若選擇C語言作為第一門語言會很困難並且枯燥,這是因為他們被迫要同時學習這三個部分,在能做出東西前要花費很多時間。
因此,為了盡量最小化「語法」與「系統基礎」這兩部分,建議使用Python作為學習的第一門語言,雖然Python對初學者很友好,但這並不意味著它只是一個「玩具」,在大型項目中你也能見到它強大而靈活的身影。熟悉Python後,學習C語言是便是一個不錯的選擇了:學習C語言會幫助你以靠近底層的視角思考問題,並且在後期幫助你理解操作系統層級的一些原理,如果你只想成為一個普通(平庸)的開發者你可以不學習它。
下面給出了一個可供參考的啟蒙階段導引,完成後你會在頭腦中構建起一個整體框架,幫助你進行自頂向下的探索。
完成Codecademy的Python部分。這只是熱身部分,盡快完成它,因為你永遠只是在瀏覽器里,你不會學到如何搭建開發環境。在Codecademy這類的編程學習網站學到的那點兒東西,哪怕你只想做一個小的不能再小的項目,你都不知道該從哪兒開始。
完成MIT6.00.1x(中文化)(如果你英語不過關,完成麻省理工學院公開課:計算機科學及編程導論。MOOC是學習編程的一個有效途徑。雖然該課程的教學語言為Python,但作為一門優秀的導論課,它強調學習計算機科學領域里的重要概念和範式,而不僅僅是教你特定的語言。如果你不是科班生,這能讓你在自學時開闊眼界;課程內容:計算概念,python編程語言,一些簡單的數據結構與演算法,測試與調試。支線任務:
完成Python核心編程
完成HarvardCS50(如果你英語不過關:完成哈佛大學公開課:計算機科學cs50。同樣是導論課,但這門課與MIT的導論課互補。教學語言涉及C,php,JavaScript+SQL,HTML+CSS,內容的廣度與深度十分合理,還能夠了解到最新的一些科技成果,可以很好激發學習計算機的興趣。支線任務:
閱讀《編碼的奧秘》
完成《C語言編程》
[可選]如果你的目標是成為一名Hacker:閱讀Hacker'sDelight
PS:如果教育對象還是一個孩子,以下的資源會很有幫助:
5-8歲:TurtleAcademy
8-12歲:PythonforKids
12歲以上:MITScratch或KhanAcademy
入門
結束啟蒙階段後,初學者積累了一定的代碼量,對編程也有了一定的了解。這時你可能想去學一門具體的技術,諸如Web開發,Android開發,iOS開發什麼的,你可以去嘗試做一些盡可能簡單的東西,給自己一些正反饋,補充自己的推動力。但記住別深入,這些技術有無數的細節,將來會有時間去學習;同樣的,這時候也別過於深入特定的框架和語言,現在是學習計算機科學通用基礎知識的時候,不要試圖去抄近路直接學你現在想學的東西,這是註定會失敗的。
那麼入門階段具體該做些什麼呢?這時候你需要做的是反思自己曾經寫過的程序,去思考程序為什麼(Why)要這樣設計?,思考怎樣(How)寫出更好的程序?試圖去探尋理解編程的本質:利用計算機解決問題。
設想:
X=用於思考解決方案的時間,即「解決問題」部分
Y=用於實現代碼的時間,即「利用計算機」部分」
編程能力=F(X,Y)(X>Y)
要想提高編程能力,就得優化X,Y與函數F(X,Y),很少有書的內容能同時著重集中在這三點上,但有一本書做到了——(SICP)《計算機程序的構造和解釋》,它為你指明了這三個變數的方向。在閱讀SICP之前,你也許能通過調用幾個函數解決一個簡單問題。但閱讀完SICP之後,你會學會如何將問題抽象並且分解,從而處理更復雜更龐大的問題,這是編程能力巨大的飛躍,這會在本質上改變你思考問題以及用代碼解決問題的方式。此外,SICP的教學語言為Scheme,可以讓你初步了解函數式編程。更重要的是,他的語法十分簡單,你可以很快學會它,從而把更多的時間用於學習書中的編程思想以及復雜問題的解決之道上。
PeterNorvig曾經寫過一篇非常精彩的SICP書評,其中有這樣一段:
Touseananalogy,ifSICPwereaboutautomobiles,,howtheyarebuilt,andhowonemightdesignfuel-efficient,safe,.highway,justlikeeveryoneelse.
如果你是文中的前者,閱讀SICP將成為你銜接啟蒙與入門階段的關鍵點
雖然SICP是一本「入門書」,但對於初學者還是有一定的難度,以下是一些十分有用的輔助資源:
):由上文提到的Google研究主管PeterNorvig主講,教學語言為Python,內容有一定難度。
HowtoDesignPrograms,SecondEdition:HtDP的起點比SICP低,書中的內容循循善誘,對初學者很友好,如果覺得完成SICP過於困難,可以考慮先讀一讀HtDP。
UCBerkeleySICP授課視頻以及SICP的兩位作者給Hewlett-Packard公司員工培訓時的錄像(中文化項目)
ComposingPrograms:一個繼承了SICP思想但使用Python作為教學語言的編程導論(其中包含了一些小項目)
SICP解題集:對於書後的習題,作為初學者應盡力並量力完成。
完成了這部分學習後,你會逐步建立起一個自己的程序設計模型,你的腦子里不再是一團亂麻,你會意識到記住庫和語法並不會教你如何解決編程問題,接下來要學些什麼,在你心裡也會明朗了很多。這時候才是真正開始進行項目實踐,補充推動力的好時機。
關於項目實踐:對於入門階段的初學者,參與開源項目還為時過早,這時候應該開始一些簡單的項目,諸如搭建一個網站並維護它,或是編寫一個小游戲再不斷進行擴展,如果你自己的想法不明確,MegaProjectList中選取項目。總之,務必在這時拿下你項目實踐的第一滴血。
與此同時,別忘了繼續打好根基。為了將來的厚積薄發,在下面這幾個方面你還要繼續做足功課(注意:下面的內容沒有絕對意義上的先後順序):
計算機系統基礎
有了之前程序設計的基礎後,想更加深入地把握計算機科學的脈絡,不妨看看這本書:《深入理解計算機系統》ComputerSystemsAProgrammer'sPerspective。這里點名批評這本書的中譯名,其實根本談不上什麼深入啦,這本書只是CMU的「計算機系統導論」的教材而已。CMU的計算機科學專業相對較偏軟體,該書就是從一個程序員的視角觀察計算機系統,以「程序在計算機中如何執行」為主線,全面闡述計算機系統內部實現的諸多細節。
如果你看書覺得有些枯燥的話,可以跟一門Coursera上的MOOC:TheHardware/SoftwareInterface,這門課的內容是CSAPP的一個子集,但是最經典的實驗部分都移植過來了。同時,可以看看TheCProgrammingLanguage,回顧一下C語言的知識。
完成這本書後,你會具備堅實的系統基礎,也具有了學習操作系統,編譯器,計算機網路等內容的先決條件。當學習更高級的系統內容時,翻閱一下此書的相應章節,同時編程實現其中的例子,一定會對書本上的理論具有更加感性的認識,真正做到經手的代碼,從上層設計到底層實現都瞭然於胸,並能在腦中回放數據在網路->內存->緩存->CPU的流向。
此外,也是時候去接觸UNIX哲學了:KISS-KeepitSimple,Stupid.在實踐中,這意味著你要開始熟悉命令行界面,配置文件。並且在開發中逐漸脫離之前使用的IDE,學會使用Vim或Emacs(或者最好兩者都去嘗試)。
閱讀《UNIX編程環境》
閱讀《UNIX編程藝術》
折騰你的UN*X系統
數據結構與演算法基礎
如今,很多人認為編程(特別是做web開發)的主要部分就是使用別人的代碼,能夠用清晰簡明的方式表達自己的想法比掌握硬核的數學與演算法技巧重要的多,數據結構排序函數二分搜索這不都內置了嗎?工作中永遠用不到,學演算法有啥用啊?這種扛著實用主義大旗的「碼農」思想當然不可取。沒有扎實的理論背景,遭遇瓶頸是遲早的事。
數據結構和演算法是配套的,入門階段你應該掌握的主要內容應該是:這個問題用什麼演算法和數據結構能更快解決。這就要求你對常見的數據結構和演算法了熟於心,你不一定要敲代碼,用紙手寫流程是更快的方式。對你不懂的數據結構和演算法,你要去搜它主要拿來幹嘛的,使用場景是什麼。
供你參考的學習資源:
《演算法導論》:有人說別把這本書當入門書,這本書本來就不是入門書嘛,雖說書名是IntroctiontoAlgorithms,這只不過是因為作者不想把這本書與其他書搞重名罷了。當然,也不是沒辦法拿此書入門,讀第一遍的時候跳過習題和證明就行了嘛,如果還覺得心虛先看看這本《數據結構與演算法分析》
CourseraAlgorithms:DesignandAnalysis[Part1]&[Part2]:Stanford開的演算法課,不限定語言,兩個部分跟下來演算法基礎基本就有了;英語沒過關的:麻省理工學院公開課:演算法導論
入門階段還要注意培養使用常規演算法解決小規模問題的能力,結合前文的SICP部分可以讀讀這幾本書:《編程珠璣》,《程序設計實踐》
編程語言基礎
.,.Additionally,,
-ThePragmaticProgrammer
此外還要知道,學習第n門編程語言的難度是第(n-1)門的一半,所以盡量去嘗試不同的編程語言與編程範式,若你跟尋了前文的指引,你已經接觸了:「干凈」的腳本語言Python,傳統的命令式語言C,以及浪漫的函數式語言Scheme/Racket三個好朋友。但僅僅是接觸遠遠不夠,你還需要不斷繼續加深與他們的友誼,並嘗試結交新朋友,美而雅的Ruby小姑娘,Hindley-Milner語言家族的掌中寶Haskell都是不錯的選擇。但有這么一位你躲不開的,必須得認識的大夥伴—C++,你得做好與他深交的准備:
入門:C++Primer
[可選]進階:
高效使用:EffectiveC++
深入了解:《深度探索C++對象模型》;C++Templates
研究反思:TheDesignandEvolutionofC++;對於C++這個NecessaryEvil,看這本書可以讓你選擇是成為守夜人還是守日人。
現實是殘酷的,在軟體工程領域仍舊充斥著一些狂熱者,他們只掌握著一種編程語言,也只想掌握一種語言,他們認為自己掌握的這門語言是最好的,其他異端都是傻X。這種人也不是無葯可救,有一種很簡單的治療方法:讓他們寫一個編譯器。要想真正理解編程語言,你必須親自實現一個。現在是入門階段,不要求你去上一門編譯器課程,但要求你能至少實現一個簡單的解釋器。
供你參考的學習資源:
《程序設計語言-實踐之路》:CMU編程語言原理的教材,程序語言入門書,現在就可以看,會極大擴展你的眼界,拉開你與普通人的差距。
Coursera編程語言MOOC:課堂上你能接觸到極端FP(函數式)的SML,中性偏FP的Racket,以及極端OOP(面向對象)的Ruby,並學會問題的FP分解vsOOP分解、ML的模式匹配、Lisp宏、不變性與可變性、解釋器的實現原理等,讓你在將來學習新語言時更加輕松並寫出更好的程序。
:熱熱身,教你寫一個簡單的瀏覽器——其實就是一個javascript和html的解釋器,完成後的成品還是很有趣的;接下來,試著完成一個之前在SICP部分提到過的項目:用Python寫一個SchemeInterpreter
其他
編程入門階段比較容易忽視的幾點:
學好英語:英語是你獲取高質量學習資源的主要工具,但在入門階段,所看的那些翻譯書信息損耗也沒那麼嚴重,以你自己情況權衡吧。此外英語的重要性更體現在溝通交流上,LinusTorvalds一個芬蘭人,一口流利的英語一直是他招募開發者為Linux幹活的的法寶,這是你的榜樣。
學會提問:學習中肯定會遇到問題,首先應該學會搜索引擎的「高級搜索」,當單靠檢索無法解決問題時,去StackOverflow或知乎提問,提問前讀讀這篇文章:Whathaveyoutried?
不要做一匹獨狼:嘗試搭建一個像這樣簡單的個人網站,不要只是一個孤零零的About頁面,去學習Markdown與LaTeX,試著在Blog上記錄自己的想法,並訂閱自己喜歡的編程類博客。推薦幾個供你參考:JoelonSoftware,PeterNorvig,CodingHorror
小結
以上的內容你不應該感到懼怕,編程的入門不是幾個星期就能完成的小項目。期間你還會遇到無數的困難,當你碰壁時試著嘗試「費曼」技巧:將難點分而化之,切成小知識塊,再逐個對付,之後通過向別人清楚地解說來檢驗自己是否真的理解。當然,依舊會有你解決不了的問題,這時候不要強迫自己——很多時候當你之後回過頭來再看這個問題時,一切豁然開朗。
此外不要局限與上文提到的那些材料,還有一些值得在入門階段以及將來的提升階段反復閱讀的書籍。ThePragmaticProgrammer就是這樣一本程序員入門書,終極書。有人稱這本書為代碼小全:從DRY到KISS,從做人到做程序員,這本書教給了你一切,你所需的只是遵循書上的指導。
後記
如果你能設法完成以上的所有任務,恭喜你,你已經真正實現了編程入門。這意味著你在之後更深入的學習中,不會畏懼那些學習新語言的任務,不會畏懼那些「復雜」的API,更不會畏懼學習具體的技術,甚至感覺很容易。當然,為了掌握這些東西你依舊需要大量的練習,腰還是會疼,走路還是會費勁,一口氣也上不了5樓。但我能保證你會在思想上有巨大的轉變,獲得極大的自信,看老師同學和csdn的眼光會變得非常微妙,雖然只是完成了編程入門,但已經成為了程序員精神世界的高富帥。不,我說錯了,即使是高富帥也不會有強力精神力,他也會懷疑自己,覺得自己沒錢就什麼都不是了。但總之,你遵循指南好好看書,那就會體驗「會當凌絕頂」的感覺。
首先要想學編程,選一門合適的計算機語言就十分重要了,怎麼去選擇就顯得尤為重要了,這要根據自己的興趣愛好及每個語言的特性來選擇,比如說PHP適合做web開發,易學習,易上手,非常流行的一門計算機語言了,我個人比較推薦php語言。
java可以做web開發,做安卓app開發也用的是java,在學習程度上上可能比php稍微難上手一點,不過也是沒問題的,如果對java感興趣可以嘗試一下。
python是目前比較火的一門語言了,比較適合做人工智慧領域,另外寫網路爬蟲類的程序,用python也是非常合適的了,看個人興趣來選擇了。
c,c++,c#這些語言就不推薦給了,特別是c#,已經是比較過時的一門語言了,即使學習好了,也不太適合去找工作,c與c++並不是十分適合初學者來學習,因此也是沒必要進行考慮了,還有一些更小眾的語言,更是沒有必要去考慮,因此關於語言的學習就從上面3種語言去選擇一門自己所感興趣的吧!
研發搭建環境
如果選擇好計算機語言,那麼接下來就是研發環境的搭建了,因為只有研發環境搭建好了,才可以進行後續的編程工作,比如說PHP,那麼就從網路上搜一下如何安裝PHP環境,能搜出一些簡單的教程,初學者按照教程一步一步來,頂多半天時間就可以把研發環境裝好了,如果是java,就需要先安裝jdk,進行環境變數的配置等,網上也有相關的教程,也是十分容易的,相信大家只要按照教程來做,都可以很輕易的把研發環境搭建起來的
選好視頻和書籍,輔助學習。既然是零基礎學習,就需要進行系統的學習,而不是到處網路零基礎的知識點進行學習。
代碼練習
跟隨教程一個一個章節的進行學習,需要注意的一點就是不能只是去看,那樣不行,要對每一個章節的知識點要親自用代碼敲一遍,運行一下試試效果才行,這樣才能提高自己的動手能力,才開始會覺得有一點生疏,慢慢的就會熟練起來,逐漸會增加編程的興趣。這個過程就是需要反復的進行練習,大量的代碼練習才行。這個過程是5步中最關鍵的階段了,重在代碼親自練習,對編程中有的章節不明白的地方,千萬不要放過去,可以在網上找一些相關的編程交流群,參加進去,在線上咨詢一些過來人,也許就可以輕松幫你解決疑問了,對你的學習十分幫助,並且整個過程也都是免費的。
項目實戰
如果說基礎教程都按部就班的都實踐過一遍了,那麼你就有一定的編程的基本功了,那麼自己就可以嘗試著做一些小項目,把學到的知識給串起來,進入項目實戰階段,比如說自己設計一個學生管理系統,並把它完成,如果不了解怎麼設計,可以去網上搜索。慢慢就有思路了。
我也在學習這方面,視頻書籍看過不少,最推薦的還是北京尚學堂的學習資料,Java.300集,Python400集,都是很經典的入門基礎教程,而且是結合項目學習的,很有意思,干貨滿滿,還都是免費的,推薦你可以去看看,相信可以帶你走進變成的世界。
從零開始學編程,第一關就是要選擇你所要學習的編程語言。面對著琳琅滿目的編程語言,初學者常常一籌莫展,拿不定主意,不知該選哪
④ %{.,'!:;}鍦╮uby涓鏄浠涔堟剰鎬
榪欎釜鎬庝箞璇村ソ鍛錛屽畠浠鏃犻潪灝辨槸涓浜榪愮畻絎鑰屽凡錛屾瘡涓絎﹀彿鐨勭敤娉曚篃鏈夊緢澶氱嶏紝鍏蜂綋鎬庝箞鐢ㄥ彲浠ラ氳繃鐪嬩功銆佺湅渚嬪瓙鏉ュ︿範錛屾病蹇呰佷竴涓嬭頒綇閭d箞澶氥
姣斿傦細
% #鍙栦綑榪愮畻錛屽8%3=2
{} #鍙鐢ㄥ湪杈撳嚭錛屽傝緭鍑簓鐨勫礆細puts"#{y}"錛屼篃鍙鐢ㄥ湪Hash琛濡 $R_Key_Hash = {}
. #涓鑸琛ㄧず鏌愮嶅睘鎬ф垨鏂規硶錛屽傚逛簬涓涓紿楀彛錛宻elf.x = 0 琛ㄧず榪欎釜紿楀彛鐨剎鍧愭爣涓0銆
鍙堝
Class Person
def Hello
puts "Hello,my name is Tom."
end
end
p=Person.new
p.Hello #鎵ц岃繖涓紼嬪簭灝變細杈撳嚭 Hello,my name is Tom.
? #琛ㄥ垽鏂,濡俹pacity = black_color ? 255 : 128錛岃繖涓鎰忔濇槸濡傛灉鏄榛戣壊,灝變笉閫忔槑,鍚﹀垯涓128
, #閫楀彿鍦ㄦ暟緇勪腑杈冨父瑙侊紝濡俛 = ["1","2","3"]錛屾暟緇刟鐨勪笁涓鍏冪礌渚濇℃槸1錛2,3
鈥 #榪欎釜鍦ㄥ規枃浠剁殑鎿嶄綔姣旇緝甯歌侊紝濡備笅渚嬶細
if Dir.glob('txt').size == 0 #濡傛灉鏂囦歡澶txt涓嶅瓨鍦
Dir.mkdir('./txt') #閭d箞鐢熸垚涓涓鍚嶅瓧鍙玹xt鐨勬枃浠跺す
end
! # 琛ㄧず 闈 濡 if x != 2 琛ㄧず濡傛灉x涓嶇瓑浜2
: #榪欎釜鍙鑳界敤鍦ㄥ睘鎬ч噷
濡傦細
class Game_Picture
attr_reader :number # 鍥劇墖緙栧彿
attr_reader :origin # 鍘熺偣
attr_reader :x # X 鍧愭爣
attr_reader :y # Y 鍧愭爣
attr_reader :tone # 鑹茶皟
attr_reader :angle # 鏃嬭漿瑙掑害
end
; #鍒嗗彿鐨勮瘽錛屼竴鑸鏄鍐欑▼搴忔瘡琛岀粨鏉熸墠鐢ㄥ埌錛屼絾鍏跺疄ruby鐨勬瘡琛岀粨鏉熸槸鍙浠ヤ笉鐢ㄥ垎鍙風殑錛屽洖杞︽崲琛屽氨琛岋紝鎴戜篃鍙鏄鍦ㄧ敤Interactive Ruby緙栬瘧鍣ㄦ椂鎵嶄細鐢ㄥ垎鍙
浠庢垜涓婅竟鐨勫洖絳斿彲鐪嬪嚭錛屽熀鏈姣忎釜絎﹀彿閮界敤鍑犵嶇敤娉曪紝騫蟲椂澶氬︿範錛屽氱Н緔灝卞ソ浜
⑤ 《自製編譯器》pdf下載在線閱讀,求百度網盤雲資源
《自製編譯器》[日]青木峰郎電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/1fOP78HCfHLZHKwnx5PoAUw
書名:自製編譯器
作者名:[日]青木峰郎
豆瓣評分:7.7
出版社:人民郵電出版社
出版年份:2016-6
頁數:472
內容介紹:
本書將帶領讀者從頭開始製作一門語言的編譯器。筆者特意為本書設計了CЬ語言,CЬ可以說是C語言的子集,實現了包括指針運算等在內的C語言的主要部分。本書所實現的編譯器就是C Ь語言的編譯器, 是實實在在的編譯器,而非有諸多限制的玩具。另外,除編譯器之外,本書對以編譯器為中心的編程語言的運行環境,即編譯器、匯編器、鏈接器、硬體、運行時環境等都有所提及,介紹了程序運行的所有環節。
作者介紹:
程序員,著有《Ruby程序設計268技(第2版)》《Ruby源代碼完全解說》《Linux程序設計》等多部編程相關著作。並積極參與標准庫維護、文檔維護等各種各樣的活動。
⑥ 突然想知道,為什麼有的語言需要編譯之後運行,而有的語言則不需要呢 C, ruby 請分析謝謝!
我們用的大部分程序設計語言都是高級語言,高級語言要執行,必須要先變成計算機能識別的匯編語言.將高級語言變成匯編語言的過程叫做翻譯,目前有兩種形式的翻譯方法,一種是編譯,一種是解釋.C就屬於編譯方式,執行前一定先編譯一次.而B語言就是解釋方式,解釋一條執行一條,所以執行先不需要編譯一下.