① 前端开发常用哪些工具软件
前端开发的编译器在选择上还是很多的。在学校里,老师主要讲三个前端开发软件:
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语言就是解释方式,解释一条执行一条,所以执行先不需要编译一下.