1. 我想自学当一名程序员,请求专业程序员给点意见,讲一下你们的学习历程,我该从那里开始
C /C++语言对大家来说并不陌生,但是能够玩好C/C++的人却不多,大多人只会做一些1+1= 2 之类的小程序,至于开发软件那就不用说了。我想很多学习C/C++得人多很苦恼,想学可是没路子,怎么办???
1 我们必须会基础的C 语言,唐好强先生的书就是很好的教材,而且这本书大家能弄懂就够了,我想说的是
大家不用去看什么C边城思想,C语言精髓等等这些书-------没用。就C语言而言就看 唐好强先生的书就够了
2:学习C++ 但是大家记住不要把C和C++ 当成2们语言来学习,学过C得人 学习C++ 就会很简单,因为大多和C一样,只有一些很小的取别
3:这是我们已经具备C/C++的基本功能了
我们 会定义 变量,
会写 if 语句,for循环
最重要的的是 我们能够弄懂 C/C++ 里面的 类 和 指针的概念
等等
4 :学习windows 编程
就是我们常说的Win32编程,windows API 函数
在这个过程中我希望大家能有点英语的底子,我们应该去学习如何使用MSDN来学习WIN32 API 函数
上面说的仅时学习过程,大家没必要去买那些很贵,很厚的 书 比如我刚才所说的 C/C++ 编程思想等
(站长赵兴欢迎您www.whpcc.net)
因为这类书讲的全市C/C++基础,无非是多讲了些数据结构,看后毫无用处。你还是不会开发软件
学习WIN32API 的过程很重要。如果大家这个过程能坚持下来的话,那就是迈进程序员的门槛了
那么如何学习WIN32API要学到什么地步呢??????
1 :最基础的是 我们会写程序的框架
2 :了解WINDOWS编程的原理
笑息机制 尤其重要
3:能够读懂WIN32API 写出来的程序,了解其原理(一般这类代码非常简单)
等大家达到这个程度时,我就不敢多说了
我们可以更具自己的爱好来选择自己的未来软件行业的方向
游戏,
驱动程序,
嵌入式 等等
根据具体情况,自己去选择看什么书
最后我来谈谈我的程序员历程
刚上大学的时候,我就对计算机有着很浓的感情,可惜的是专业不是计算机。大二的时候 我就开始学习计算机课程
操作系统,数据结构等 当然基础语言是C/C++ 可是令我苦恼的是我就会写一些 1+1 等于 2 的小程序。根本做不了
什么软件之类的大程序,想学习可惜不知道怎么去做: 我该做什么,该学习什么。
后来就上网查询资料,看看有没有这方面的建议之类的信息,从中我领悟到一些方法,在我看某些书的时候,在
(本文来自www.whpcc.net)
书的序言里,我知道该如何去做,怎样才能成为一名程序员,在这里想提醒大家的是不要太过于相信网上的一些资料
比如 某某 单位的 某某人士 曾在某着名网站上等路过一边这样的文章
------------ 想要成为一名合格的程序员我该看那些书 ----------------------------
操作系统
数据结构
数据库
C/C++基础语言
C/C++编程思想
C/C++编程精髓
软件工程
windows编程
等等 好像列出了 将近30多本书--------------------晕
我身边的程序员高手 最多就看了5本书 就入门的
当然我不是说这些书看了没用,对于初学者来说这些书不适合你们去看。
----------以上仅是我个人观点,不代表所有“程序员”的观点
2. 浠庨浂寮濮嫔IT锛屾庝箞瀛
瀛︿範IT瑕佷粠浠ヤ笅鍑犱釜鏂瑰悜鍏ユ坠锛
01銆佸悆阃忎竴闂ㄧ紪绋嬭瑷
杩欎釜鎶鑳界湅璧锋潵浼间箮娌℃湁蹇呰佸己璋冿纴浣嗗氨镐曗滆椽蹇冣濓纴涓嶈佸﹁繃镞剁殑缂栫▼璇瑷锛屽苟涓斿悆阃忎粬锛屽緢鍏抽敭銆
02銆佺畻娉曚笌鏁版嵁缁撴瀯
瀛︿範IT镄勮繃绋嬩腑缁忓父阆囧埌涓浜涘疄闄呯殑闂棰桡纴姣斿傛棤娉曞厖鍒嗗埄鐢ㄦ暟鎹缁撴瀯灏嗘暟鎹涔嬮棿镄勫叧绯婚氲繃钖堥傜殑绠楁硶绛栫暐杩涜屾湁鏁埚湴瀛桦偍杞鎹銆备负姝よ佸氭姇鍏ヤ竴镣瑰埌鏁版嵁缁撴瀯鍜岀畻娉曚笂闱㈠幓锛屽畠鍐冲畾浜嗘垜浠镄勬妧链楂桦害銆傛暟鎹缁撴瀯鍜岀畻娉曟槸閲嶈佺殑锘虹鐭ヨ瘑锛屽︿範瀹冧滑镄勮繃绋嫔氨镀忔槸鍦ㄦ墦鍦板熀銆
03銆佸熀链镄勬暟鎹搴撶煡璇
铏界劧杞浠跺紑鍙戜汉锻樻洿搴旇ヤ笓娉ㄤ簬绋嫔簭璁捐¤岄潪缂栧啓鍜屼紭鍖 SQL锛埚簲璇ヤ氦缁欎笓涓氱殑鏁版嵁搴撶$悊锻樿礋璐o级锛屼絾鍦ㄦ垜浠锲藉唴锛屽彧链夐《灏栫殑浼佷笟镓崭细链夋暟鎹搴扑笓瀹躲傚傛灉浣犳兂瑕佸湪IT杩欐浔阆撹矾涓婅蛋寰楁洿楂樻洿杩滐纴镍备竴浜涘熀链镄勬暟鎹搴撶煡璇嗘槸蹇呴’镄勶纴姣斿傝达细
濡备綍灏嗕笟锷′腑镄勫硅薄灞炴ц浆鍖栦负鏁版嵁搴揿瓧娈碉绂
濡备綍浠庢暟鎹搴扑腑妫绱㈡暟鎹锛屽苟灏嗘暟鎹闆嗘嫾鎺ュ湪涓璧凤绂
濡备綍寰鏁版嵁搴扑腑鎻掑叆銆佷慨鏀广佸垹闄ゆ暟鎹锛
绱㈠紩镄勬暟鎹缁撴瀯鍙婂师鐞嗭绂
SQL 璇鍙ョ殑浼桦寲锛
绛夌瓑銆
04銆佹妧链妗嗘灦
鎶链妗嗘灦鏄涓缁勯氱敤绫诲簱镄勯泦钖堬纴瀹冨府锷╂垜浠璁╃紪绋嬩换锷″彉寰楁洿绠鍗曪纴姣旷珶杞瀛愭浛鎴戜滑阃犲ソ浜嗐傚亣濡傝存病链夋妧链妗嗘灦镄勮瘽锛屾垜浠灏卞ソ镀忓潗镌椹杞﹀墠琛岋纴钥屼笉鏄椋炴満銆侀珮阈佸拰姹借溅锛屾晥鐜囧氨瑕佸ぇ澶ч檷浣庝简銆
3. 如何从零开始学编程
在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏?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集,都是很经典的入门基础教程,而且是结合项目学习的,很有意思,干货满满,还都是免费的,推荐你可以去看看,相信可以带你走进变成的世界。
从零开始学编程,第一关就是要选择你所要学习的编程语言。面对着琳琅满目的编程语言,初学者常常一筹莫展,拿不定主意,不知该选哪
4. 要成为一名专业的程序员,从零开始需要怎么一步步来比较好,要把最底层的先学精通吗(个人认为)求学长
前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:
不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。
回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。
注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:
现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。
越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。
微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》
所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。
启蒙入门
1、 学习一门脚本语言,例如Python/Ruby
可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:
处理文本文件,或者csv (关键词 python csv, python open, python sys) 读一个本地文件,逐行处理(例如 word count,或者处理log)
遍历本地文件系统 (sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果
跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量
学会用各种print之类简单粗暴的方式进行调试
学会用Google (phrase, domain, use reader to follow tech blogs)
为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。
2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。
Source Insight (或 ctag)
使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。
3、 熟悉Unix/Linux Shell和常见的命令行
如果你用windows,至少学会用虚拟机里的linux, vmware player是免费的,装个Ubuntu吧
一定要少用少用图形界面。
学会使用man来查看帮助
文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
学会使用一些文本操作命令 sed/awk/grep/tail/less/more …
学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…
了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
了解正则表达式,使用正则表达式来查找文件。
对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。
4、 学习Web基础(HTML/CSS/JS) + 服务器端技术 (LAMP)
未来必然是Web的世界,学习WEB基础的最佳网站是W3School。
学习HTML基本语法
学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
学会用 Firefox + Firebug 或 chrome 查看你觉得很炫的网页结构,并动态修改。
学习使用Javascript操纵HTML元件。理解DOM和动态网页(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 网上有免费的章节,足够用了。或参看 DOM 。
学会用 Firefox + Firebug 或 chrome 调试Javascript代码(设置断点,查看变量,性能,控制台等)
在一台机器上配置Apache 或 Nginx
学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
跟完一个名校的网络编程课程(例如:http://www.stanford.e/~ouster/cgi-bin/cs142-fall10/index.php ) 不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上
学习一个javascript库(例如jQuery 或 ExtJS)+ Ajax (异步读入一个服务器端图片或者数据库内容)+JSON数据格式。
HTTP: The Definitive Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)
做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)
买个域名,租个空间,做个自己的网站。
进阶加深
1、 C语言和操作系统调用
重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构。推荐《计算机程序设计艺术》、《算法导论》和《编程珠玑》。
学习(麻省理工免费课程)计算机科学和编程导论
学习(麻省理工免费课程)C语言内存管理
学习Unix/Linux系统调用(Unix高级环境编程),,了解系统层面的东西。
用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序)
用fork/wait/waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。多进程多进程购票的程序。
用signal/kill/raise/alarm/pause/sigprocmask实现一个多进程间的信号量通信的程序。
学会使用gcc和gdb来编程和调试程序(参看我的《用gdb调试程序》)
学会使用makefile来编译程序。(参看我的《跟我一起写makefile》)
IPC和Socket的东西可以放到高级中来实践。
学习Windows SDK编程(Windows 程序设计 ,MFC程序设计)
写一个窗口,了解WinMain/WinProcere,以及Windows的消息机制。
写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程。
学习如何使用MSDN查看相关的SDK函数,各种WM_消息以及一些例程。
这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。
不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程。@virushuo 说:“ 我觉得GUI确实不那么热门了,但充分理解GUI工作原理是很重要的。包括移动设备开发,如果没有基础知识仍然很吃力。或者说移动设备开发必须理解GUI工作,或者在win那边学,或者在mac/iOS上学”。
2、学习Java
Java 的学习主要是看经典的Core Java 《Java 核心技术编程》和《Java编程思想》(有两卷,我仅链了第一卷,足够了,因为Java的图形界面了解就可以了)
学习JDK,学会查阅Java API Doc Java Platform SE 6
了解一下Java这种虚拟机语言和C和Python语言在编译和执行上的差别。从C、Java、Python思考一下“跨平台”这种技术。
学会使用IDE Eclipse,使用Eclipse 编译,调试和开发Java程序。
建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。把前面所说的那个PHP的小项目试着用JSP和Servlet实现一下。
3、Web的安全与架构
学习HTML5,网上有很多很多教程,以前酷壳也介绍过很多,我在这里就不罗列了。
学习Web开发的安全问题(参考新浪微博被攻击的这个事,以及Ruby的这篇文章)
学习HTTP Server的rewrite机制,Nginx的反向代理机制,fast-cgi(如:PHP-FPM)
学习Web的静态页面缓存技术。
学习Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。
实践任务:
使用HTML5的canvas 制作一些Web动画。
尝试在前面开发过的那个Web应用中进行SQL注入,JS注入,以及XSS攻击。
把前面开发过的那个Web应用改成构造在Nginx + PHP-FPM + 静态页面缓存的网站
4、学习关系型数据库
你可以安装MSSQLServer或MySQL来学习数据库。
学习教科书里数据库设计的那几个范式,1NF,2NF,3NF,……
学习数据库的存过,触发器,视图,建索引,游标等。
学习SQL语句,明白表连接的各种概念(参看《SQL Join的图示》)
学习如何优化数据库查询(参看《MySQL的优化》)
实践任务:设计一个论坛的数据库,至少满足3NF,使用SQL语句查询本周,本月的最新文章,评论最多的文章,最活跃用户。
5、一些开发工具
学会使用SVN或Git来管理程序版本。
学会使用JUnit来对Java进行单元测试。
学习C语言和Java语言的coding standard 或 coding guideline。(我N年前写过一篇关C语言非常简单的文章——《编程修养》,这样的东西你可以上网查一下,一大堆)。
推荐阅读《代码大全》《重构》《代码整洁之道》
高级深入
1、C++ / Java 和面向对象
我个人以为学好C++,Java也就是举手之劳。但是C++的学习曲线相当的陡。不过,我觉得C++是最需要学好的语言了。参看两篇趣文“C++学习信心图” 和“21天学好C++”
学习(麻省理工免费课程)C++面向对象编程
读我的 “如何学好C++”中所推荐的那些书至少两遍以上(如果你对C++的理解能够深入到像我所写的《C++虚函数表解析》或是《C++对象内存存局(上)(下)》,或是《C/C++返回内部静态成员的陷阱》那就非常不错了)
然后反思为什么C++要干成这样,Java则不是?你一定要学会对比C++和Java的不同。比如,Java中的初始化,垃圾回收,接口,异常,虚函数,等等。
实践任务:
用C++实现一个BigInt,支持128位的整形的加减乘除的操作。
用C++封装一个数据结构的容量,比如hash table。
用C++封装并实现一个智能指针(一定要使用模板)。
《设计模式》必需一读,两遍以上,思考一下,这23个模式的应用场景。主要是两点:1)钟爱组合而不是继承,2)钟爱接口而不是实现。(也推荐《深入浅出设计模式》)
实践任务:
使用工厂模式实现一个内存池。
使用策略模式制做一个类其可以把文本文件进行左对齐,右对齐和中对齐。
使用命令模式实现一个命令行计算器,并支持undo和redo。
使用修饰模式实现一个酒店的房间价格订价策略——旺季,服务,VIP、旅行团、等影响价格的因素。
学习STL的用法和其设计概念 - 容器,算法,迭代器,函数子。如果可能,请读一下其源码。
实践任务:尝试使用面向对象、STL,设计模式、和WindowsSDK图形编程的各种技能
做一个贪吃蛇或是俄罗斯方块的游戏。支持不同的级别和难度。
做一个文件浏览器,可以浏览目录下的文件,并可以对不同的文件有不同的操作,文本文件可以打开编辑,执行文件则执行之,mp3或avi文件可以播放,图片文件可以展示图片。
学习C++的一些类库的设计,如: MFC(看看候捷老师的《深入浅出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能会太难了,但是如果你能了解其中的设计模式和设计那就太好了,如果你能深入到我写的《STL string类的写时拷贝技术》那就非常不错了,ACE需要很强在的系统知识,参见后面的“加强对系统的了解”)
Java是真正的面向对象的语言,Java的设计模式多得不能再多,也是用来学习面向对象的设计模式的最佳语言了(参看Java中的设计模式)。
推荐阅读《Effective Java》 and 《Java解惑》
学习Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是学习Java的设计,如IoC等。
Java的技术也是烂多,重点学习J2EE架构以及JMS, RMI, 等消息传递和远程调用的技术。
学习使用Java做Web Service (官方教程在这里)
实践任务: 尝试在Spring或Hibernate框架下构建一个有网络的Web Service的远程调用程序,并可以在两个Service中通过JMS传递消息。
C++和Java都不是能在短时间内能学好的,C++玩是的深,Java玩的是广,我建议两者选一个。我个人的学习经历是:
深究C++(我深究C/C++了十来年了)
学习Java的各种设计模式。
2、加强系统了解
重要阅读下面的几本书:
《Unix编程艺术》了解Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验。你一定会有一种醍醐灌顶的感觉。
《Unix网络编程卷1,套接字》这是一本看完你就明白网络编程的书。重要注意TCP、UDP,以及多路复用的系统调用select/poll/epoll的差别。
《TCP/IP详解 卷1:协议》- 这是一本看完后你就可以当网络黑客的书。了解以太网的的运作原理,了解TCP/IP的协议,运作原理以及如何TCP的调优。
实践任务:
理解什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll, epoll)的IO技术。
写一个网络聊天程序,有聊天服务器和多个聊天客户端(服务端用UDP对部分或所有的的聊天客户端进Multicast或Broadcast)。
写一个简易的HTTP服务器。
《Unix网络编程卷2,进程间通信》信号量,管道,共享内存,消息等各种IPC…… 这些技术好像有点老掉牙了,不过还是值得了解。
实践任务:
主要实践各种IPC进程序通信的方法。
尝试写一个管道程序,父子进程通过管道交换数据。
尝试写一个共享内存的程序,两个进程通过共享内存交换一个C的结构体数组。
学习《Windows核心编程》一书。把CreateProcess,Windows线程、线程调度、线程同步(Event, 信号量,互斥量)、异步I/O,内存管理,DLL,这几大块搞精通。
实践任务:使用CreateProcess启动一个记事本或IE,并监控该程序的运行。把前面写过的那个简易的HTTP服务用线程池实现一下。写一个DLL的钩子程序监控指定窗口的关闭事件,或是记录某个窗口的按键。
有了多线程、多进程通信,TCP/IP,套接字,C++和设计模式的基本,你可以研究一下ACE了。使用ACE重写上述的聊天程序和HTTP服务器(带线程池)
实践任务:通过以上的所有知识,尝试
写一个服务端给客户端传大文件,要求把100M的带宽用到80%以上。(注意,磁盘I/O和网络I/O可能会很有问题,想一想怎么解决,另外,请注意网络传输最大单元MTU)
了解BT下载的工作原理,用多进程的方式模拟BT下载的原理。
3、系统架构
负载均衡。HASH式的,纯动态式的。(可以到Google学术里搜一些关于负载均衡的文章读读)
多层分布式系统 – 客户端服务结点层、计算结点层、数据cache层,数据层。J2EE是经典的多层结构。
CDN系统 – 就近访问,内容边缘化。
P2P式系统,研究一下BT和电驴的算法。比如:DHT算法。
服务器备份,双机备份系统(Live-Standby和Live-Live系统),两台机器如何通过心跳监测对方?集群主结点备份。
虚拟化技术,使用这个技术,可以把操作系统当应用程序一下切换或重新配置和部署。
学习Thrift,二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。
学习Hadoop。Hadoop框架中最核心的设计就是:MapRece和HDFS。MapRece的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapRece就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
了解NoSQL数据库(有人说可能是一个过渡炒作的技术),不过因为超大规模以及高并发的纯动态型网站日渐成为主流,而SNS类网站在数据存取过程中有着实时性等刚性需求,这使得目前NoSQL数据库慢慢成了人们所关注的焦点,并大有成为取代关系型数据库而成为未来主流数据存储模式的趋势。当前NoSQL数据库很多,大部分都是开源的,其中比较知名的有:MemcacheDB、Redis、Tokyo Cabinet(升级版为Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。
5. 如何成为一个程序员
想要从零开始成为程序员,先不要着急的去学习,而是先要去了解程序员。
1.随便在招聘网站搜索就会发现程序员会分有很多类型,那你就需要确定自己将来想要发展的方向,自己的职业规划是什么?
2.通过搜索可以看到,刚刚起步的程序员工资并不是很高而且学习阶段也会比较忙,那这个时候你是不是靠考虑一下如何兼顾生活和工作?工资如何支配合理等问题(没有经验限制的工作相对较低)
PHP程序员岗位要求
关于学习建议你这样试试看:
学习的方式基本可分为两个类型,一个是碎片化的学习,一个是系统进修。
你可以从网络上各机构大量的视频或者书籍得到相关的学习资料。从大量的资料中,发现真正的干货,从而不断学习,这属于碎片化的自习。由于自学周期比较长,还有不少小伙伴选择是一边工作赚取生活费,一边再利用闲暇时间学习,当然如果你的精力充沛,这也是一个好办法。
如果要报培训班, 一定要找正规的培训机构学习,不然容易被坑。培训机构里面的课程都是现在工作中需要用到的,时间短,基本上是可以让你快速上手工作的。但是要把所有的知识点都消化就没那么快了,所以需要自己私下更加的努力,巩固学习。
注意事项:
1. 自学要注意的是:自学入门时会很枯燥,不要两天打鱼三天晒网!!!切记
2. 在培训机构里学习要注意的是:勤加练习、主动自学、有问题提,不懂的尽管问老师(把交的钱发挥到极致),不然之后再有问题就没有这么好的机会能够直接得到老师的指点了。
最后,祝愿想要成为程序员的小伙伴都能心想事成哦(*^▽^*)~
6. 新手学编程该怎么入门
1、初学者学习编程的时候,首先需要弄得编程的一些基本原理,只有掌握了原理,才能更好的去理解各种编程知识。
2、学习编程工具的使用,初学者在掌握了编程原理以后就需要学习编程工具的使用了,只有熟练的掌握了编程工具的使用技巧,才能在编程中提升效率。
3、多进行编程的实际练习,编程的学习最主要的就是不断的上机操作,初学者在学习的时候千万不要只看不做,而是要多看多做。
4、多和有经验的编程人员交流,多与有经验的编程人员进行交流可以减少编程学习过程中一些不必要的错误,另外在交流以后要多总结。
(6)怎么从零开始学程序员扩展阅读
初学者在学习的过程中,一定要亲自实践,哪怕对着书上的代码一行一行的敲下来,也比单纯的看有效果的多。所以,敲代码一定是伴随着整个学习周期的,从最初的学习,到后面入门,再到之后的提升,都离不开它。
在学习的过程中会遇到一些难题,会遇到暂时不了解的代码,只要能坚持下去,一些问题在后面都会自然的有答案的。
自学编程成功的无一例外都是坚持下来了,少则三个月,多则半年的时间一直持续学习,并且这么长时间可能感受不到任何进步的状态,等渡过这个初期阶段,会很有感觉,知道该怎么学习了,就会很容易找到方向了。
7. 想学习编程应该先从哪学起
仅供参考~
我觉得吧,学习之前应该先确定学哪门语言,毕竟语言几十上百种。
1、建议学习 Python。Python 基础语法内容较为简单,可以比较快的了解编程的思维习惯,并能够较快接触到 Python GUI
库(比如Tkinter),很容易借用这些库开发出一些有趣的程序。同时 Python
的缩进格式也比较严格,这也很好的让编程初学者养成一个良好的编写代码习惯。
在美国有很多编程初学 Python
的书籍,其受众就是小学、初中的青少年,比如《Python for
Kids》,这些书籍一个很大的特点就是图文并貌,并且很快引入图形库的学习,教会小朋友制作出一些图形和简单的游戏,比如画星星,弹球。这样的好处是激发小朋友学习编程的乐趣,让小朋友从小就感受到编程的魅力。
2、读大一零基础学编程
上学习编程的首要任务是学习电脑的基础操作,熟悉键盘,让自己对电脑有初步的了解认识。至于理工科专业的学生大一估计都会教《计算机科学导论》这样类似的课程,如果想尽快编程,学生应尽快将该书内容看一遍,让自己对计算机有一个整体的认识。
那么大一学生若要系统的学习
C语言,建议使用 《C Primer Plus》,英语好的同学可以直接看英文版,注意该书不是《C++ Primer》,《C++
Primer》可以在 C语言学的有一定基础的时候看。当学完《C Primer
Plus》之后,可以对算法的知识学习,有精力的话可以啃《算法导论》。平时可以多上 github 上直接看源码,这样比单纯看书进步的更快。
3、新手学习编程,看书时一定要不能只看不动手,一定要同时动脑、动手,要将书里面的代码都勤奋的敲。
值得注意的是,编程是个比较广义的概念,编程语言有数种,所以要学习计算机语言就要先了解语言的发展史以及各种语言在不同领域的作用,推荐先学C/C++,这门计算机语言是一门相对简单且发展的比较完善的计算机语言,初次之外呢还有basic、C#、java等等,在C之前还有更加原始的计算机语言。
推荐的学习资料是郝斌老师的教学视频,还有谭浩强老师的《C程序设计》一书,建议先看书在看视频,当然也可以同时看,这两样都是入门的较好的参考资料。