‘壹’ 程序员应该知道的事
‘贰’ 作为一名程序员,让你最困惑的事情是什么
作为一名程序员,让我最困扰的就是程序员里边儿的女性特别少,大多都是男性,这让我们这些程序员脱单成为了遥不可及的梦想。所以对于这种事情令我很困扰。
‘叁’ java程序员需要掌握什么知识
给你个参考吧。
作为一个合格的Java软件工程师必须具备的条件?
这个问题是我一直想知道的。但是它又分为很多个方面...
比如,是掌握具体的技术,
还是,拥有很强的自学能力?
现在的软件方面跟新和升级特别快,
无论是什么知识,当你真正掌握它的时候,也许就已经被淘汰了。
所以这就要求我们不停的去学习...
所以自学能力很重要.
但是我觉得自控能力更重要...(悲哀...今天看了一天动画...)
我自认为是没有什么自控能力的人...
好了,再来说说技术方面。
到底现在该掌握些什么具体的知识呢?
这里,我真羡慕.net程序员...
从头到尾就一个.net framework(.net框架),
这样就可以很集中精力去深入学习它,而且不用担心会被淘汰...
而Java这边,洽洽相反框架满天飞,而且各有所长...
这就难免让人需要经历选择性的痛苦...(虽然原理都差不多)
而且还要根据公司的不同而使用不同的组合...
这就产生了n种集成方案...(崩溃啊...)
所以要全部学会几乎不可能啊...
虽然是这样,但是有点挑战性才有意思嘛...呵呵...
那么一个合格的java软件工程师究竟需要掌握哪些具体的知识呢?
下面就我个人的角度来总结一下,如有不足,也请高手指出。
(ps:本人只列出普遍常用的知识)
首先当然是Java语言本身了。Java语言的创始人曾说过"Java=C++--"。
什么意思?就是Java语言是在C++的基础上减去一些不必要的东西,使其更为实用,更具有生产力。
Java语言的语法很简单并不像C++那样复杂.(本人曾经接触过C++...伤心的经历...)
很多较为复杂的数据结构Java都能简单实现,而C++较为麻烦。
其中很大的原因是因为Java是单根结构.
而且Java的垃圾回收机制也有很大的功劳.(.net的垃圾回收机制也是Java的灵感)
但是如果想深入底层了解Java还是需要费很大的功夫的...
比如,你要学会javap命令去反编译java文件然后再去看懂那些反编译后的结果...
这样你才能了解Java语言的原理。
很多情况下不同的代码,但是最后产生的字节码是相同的。
也有些情况,虽然代码只相差一点但是效率是天壤之别。
(例如JDK5新添加的StringBuilder和StringBuffer的区别)
这些在都可以反映在字节码里。
关于Java语言的问题不是本文的重点,我就不多说了。
总之学好Java这门语言是基础中的基础。
其次,说到Java语言就不能不说面向对象(OO)。
Java语言的产生也有很大的一部分是为了生成一个具有生产力的OO语言。
为什么这样说?
在早些年代OO的思想虽然被提出,但是那些纯粹的OO语言却没有丝毫的生产力。
(如出名的:smalltalk它是100%的OO)
而Java在保持高度的OO的前提下更注重生产力。
(ps:Java是98%的OO,其中8种基本数据类型,static关键字,运算符等,这些都不OO)
所以随着软件工程的庞大OO的思想很重要。
好了,到这里如果以上你有所了解,并掌握的一般。那么就可以继续往下学习:
如果你想掌握Java语言中更精髓的东西,那么我建议你可以做一些小的桌面应用程序。
其中,你会学习到另一些知识:
并发,IO,GUI,AWT,Event,Listener,Socket,Reflect等java更深层的东西。
(当然,有些只需了解,因为有些东西将来在做B/S结构的系统上是用不到的...
如果将来你想从事嵌入式开发,这些你就要多一点了解了。
很可惜,我还没有想过去做那个...
还记得当我第一次了解AWT里的Event和Listener的实现方式后,
我觉得JDK的设计人员真是厉害,设计的是那么的巧妙,第一次感觉代码是那么优美,
里面用到了各种设计模式,真是让人惊讶。
遭了,又在自我陶醉了...)
回到正题,关于Java语言的基础,我就先讲到这。
当我们掌握了Java之后呢?
真正的Java开发现在才是开始:
这时我们必须要接触另外一样东西,
没错,那就是数据库!
数据库的重要性就不用我在这里强调了吧?
无论你学习什么技术,数据库都是必备品。
作为Java程序员,我们不是DBA,我们没有必要掌握太多的数据库的管理知识。
我们只要知道如何连接数据库进行访问和CRUD操作,并对一些地方提高效率就可以了。
如创建索引和适当的使用存储过程即可。
首先,学习什么样的数据库呢?
没办法,多了解一点吧...毕竟每个公司用的都不一样...
目前的4大主流数据库是必须要学习的:
DB2(IBM号称世界上用的最广泛的数据库,不过近些年已被MySQL慢慢侵蚀掉了.但是很多的大公司在用,毕竟是IBM啊。)
SQLServer(当年凭借SQLServer2000获得很大成功,由于和Microsoft的产品兼容很好,所以很受欢迎。)
MySQL(真正的轻量级啊...而且是低端的主流开源数据库,使用量已经超越DB2。)
Oracle("甲骨文","神谕","圣贤","哲人"...光是对Oracle这个单词的翻译就可以看出它多么拥有实力。不过大的有点夸张...)
好了,如果你已经会简单的使用上面的数据库了,那么就继续往下吧:
既然要访问数据库,那就离不开JDBC!
JDBC相信大家都知道,它只是一组接口,然后由不同的数据库厂家去实现,
这样用JDBC访问数据库的时候方法其实都是一样的,这里我就不多说了。
另外JDBC是将来ORM的底层实现,学习好了它,对ORM框架的实现就更为清楚原理。
下面重点要说说SQL语句。
SQL有2套标准(82和99),我不太确定...记得不太清楚了...
现在的数据库基本这2种都支持。
但是问题来了,不同的数据库,又对其改变了一点...
这是最令人头痛的...
也就是说,4种数据库,你就要记住4种SQL的区别是什么,虽然大体差不多,但是还是要区分开来的。
而且不同的数据库,对SQL语句又有不同的优化。
也就是同样的SQL语句在不同的数据库上执行的效率不同。
所以SQL语句也是一门必修之路啊...
而且不要看似简单,其实要想写出一条高效率的SQL语句很难啊...
尤其是在复杂的多表联合查询中,这种效率问题一定要考虑。
另外,最烦人的莫过于数据库程序设计。
每种数据库有自己的语法。如SQLServer里的T-SQL,Oracle里的PLSQL等...
使用这些语言编写触发器,存储过程等...自我感觉是最头疼的...而且用的不多...
了解一下就好...
好了,当学习完数据库.我们就可学习web开发了.
所谓的web开发,就是基于浏览器/服务器(B/S)的开发。
那么既然是在浏览器上跑的程序那么就离不开HTML、CSS、JavaScript、DOM等网页技术。
所以下一步就是学习HTML,HTML应该是最简单的标记语言.很容易就能学会。
根据web2.0的标准,XHTML将是规范。
所谓的XHTML其实和HTML4.0的规范差不多,就是标签的要求更加严厉了。
学习HTML的同时还要一起学习CSS,这个东西说简单,也简单,说难也难。就看你个人了。
但是毕竟我们不是美工,只要了解就好了。(有时我就在界面上消耗了很多时间...郁闷...)
JavaScript我个人建议还是要稍微花点功夫研究一下的...
毕竟后面涉及到Ajax和用户体验等方面需要用到它...
它是一门客户端脚本语言,即:浏览器解释执行。
是一种弱类型语言,但是研究起来还是很深奥的...
至于DOM本人还没有花时间研究过,不敢轻易下结论.
当完基本的网页技术后,就可以进入正题,Java在internet上的应用就从这里开始:
前面学习了网页技术后,我们就可以做出简单的静态网站。(即:没有与数据库交互.)
静态网站由后缀名为.html或.htm结尾。
但是静态网站是毫无用处的,所以我们要开发动态网站。
最古老的技术就是CGI(通用网关接口).
它根据浏览器端的http请求激活响应进程,每一个请求对应一个进程。(注意不是线程,是进程!)
当同时有很多请求时,程序挤占系统资源,造成效率低下。
目前流行的动态网页技术有:ASP、JSP、PHP、ASP.NET等...
这里我就不一一介绍他们了。关于他们的对比,网上比比皆是.
而今天的主角就是JSP!
JSP是什么?说白了就是在HTML里嵌入服务器端可执行的Java代码。
这里的Java代码和前面所说的Java代码是一样的。
这里要注意的是jsp最终会转换成servlet。
所以学好Jsp就要先学习servlet。
与applet对应,servlet顾名思义就是服务器端脚本。
这里是学习的重点。
其他的也没什么好讲的。
这里要掌握几个概念:servlet容器,IDE,taglib,DAO,MVC等...
servlet容器,就是解释执行servlet代码的地方。
IDE,前面我都没有提过,也就是因为前面的学习都很简单,并不需要IDE的支持。
而接下来的开发会比较复杂,文件数量的增多和管理会很麻烦,而且很多的API不可能都背下来。
所以这里就是使用IDE的时候了...至于用什么IDE本人觉得无所谓...
(我用的是最普遍的Eclipse,当然你也可以用NetBeans6.0以上版本.我觉得也很不错。)
taglib,这里用的比较少,以后学习框架用的比较多.
DAO,很重要。它的实现方式多种多样,值得研究。
MVC,很重要。但是重在理解,理解为什么要用MVC。
最后关于Http协议,Servlet容器里的线程池的实现等...
这些如果你有能力和时间就去看看...没有什么坏处...
学到这里,可能中间你会用到另一门技术XML!
作为java程序员来说,我觉的只要了解XML原理就可以了。
不可能还让你去写scherma或DTD的...
所以我们只要学习读写XML就可以了...(JDOM或DOM4J)
下面在来简单的说说ajax...
当你程序要求你在不刷新页面的情况下读取数据并显示,这是就是ajax的勇武之地.
如果你之前的javascript没有学的特别的牢固,也没什么关系,用框架吧。
所谓的ajax框架就是一个javascript的库。它简化并对javascript封装。
常见的ajax库有很多,这可以根据情况自己选择学习。
(dojo、prototype、jquery、dwr、ext等...)
等学习到了这里,你已经可以独立的开发一个简单的网站了。
但是,这里有很多的问题:
1.代码量大
2.开发时间长
3.系统扩展性差
4.虽然用MVC分层,但是JSP+Servlet+JDBC这种开发方式难以维护。(尤其是JSP里有大量代码,像ASP那样)
5.理论上不OO
6.效率低
7.安全性低
等等...
短短一时间我就能想到这么多的不足,证明这离企业级开发还有很大的差距.
那么正真的企业级应用是什么呢?
JavaEE的本质就是为了企业级开发...
可惜,至今还未能领悟JavaEE的核心思想...
但从技术角度,JavaEE拥有哪些技术呢?
貌似太多太多...EJB是JavaEE的核心思想...感觉有点类似.Net框架...即:一个框架包含所有功能.
可惜一直没时间学习过EJB...
所以我下面要讲的是如何针对上面的不足加以改进?
1.代码量大就造成"开发周期的延长"。而且自己写的代码有时会有漏洞,或效率上的问题。(如果你不是专家的话)
所以要解决这个问题就要引入"框架".
如果引入了框架,那么有些问题就可以迎刃而解。
1.代码量的减少。
2.开发周期的缩短。
3.效率提高一点。
4.安全性提搞了一点。
毕竟人家是顶尖的专业人士,写出来的代码肯定比自己写的健壮又高效。对吗?而且又可以减少代码量。
框架分很多种,就像上面的ajax框架一样,它也是一种框架。
下面就列出一些流行的框架:
MVC框架:Struts1.x,Struts2.x,JSF,webwork等...其中最令我期待的是struts2.
ORM框架:Hibernate3,Ibatis,jpa等...其中最令我期待的是JPA.
AOP框架:Spring2.5 貌似现在只流行这个...AspectJ都没人提...
至于EJB里的,我不太了解...
但是至少上面的是主流.如果遇到非主流...也就算我倒霉...再学呗...
至于系统扩展性和维护性差是系统架构的设计问题.
这个问题不是我在这里一句两句就能表达清楚的。
(前些日子搞了个泛型DAO模式,都研究了很久)
UML和design pattern是需要经验的...
在学习这些框架的过程中会有很多意想不到的事情发生...
再深入学习就是webservice和分布式了...
感觉我还没有触及到那个层次...
还差的远呢...不过慢慢来吧...
今天说了那么多就是想知道做为一个java软件工程师.到底需要哪些技术?
我很需要自我反思...
可能我今天说的都只是皮毛,也有很多欠考虑的地方...希望朋友指出...
也可以给我意见...
也许我看问题不全面,或是有偏见,也欢迎指出。
‘肆’ 程序员小白都应该知道的30件事
作者 | 宋兰欣 廖馨婷
来源 | 读芯术
从事编程并不容易。每年有许多人从各国的顶级计算机科学专业毕业,这是所有人都向往的最具竞争力的职业之一。与此同时,编程也振奋人心。随着技术的进步,每天都有新的创新。对于喜欢编程,并立志从事编程的人而言,编程是其热爱且为之奋斗的事业。
本文的这个列表可以帮助新手答疑解惑,节省精力。即使目前某些内容可能暂时不需要,但是总有一天它会派上用场。
1. 从事编程无需学位,但需要有所了解。
编程是少数几个不取决于学位的职业之一。但是编程是一项知识密集型职业。如果你要从事编程行业,阅读一些基本的涵盖计算机科学的基本概念等书籍是必要的。除了编写功能代码之外,为你的技术打下坚实基础,对基本概念有一个深刻理解,这使得你能够赢得技术面试有助于与同事交流。
2. 在问题解决技能上,编程十分具有创造力。
大多数人都有这样一种先入为主的观念,即编程就是分析和解决问题的能力。这只说对了一部分。编程还涉及许多创造性。通常,可以使用多种方式编写给定的代码。当你设计出最简单有效的编码方式时,创造性就产生了。
3. 掌握所有编程语言是不可能的,诀窍是将一门语言学到极致。
世界上有数百种编程语言。有一些编程领域为特定的职业道路铺平了道路:Web开发人员,前端开发人员,后端开发人员,软件工程师,数据库开发人员等。明确希望成为哪种开发人员,然后学习该职位所需的技术技能。
4. 你不需要成为一个机器,保持作为人的状态就更好了。
请记住,你首先是人,其次才是一名程序员。初次编程时,很容易迷失在代码中。你是一个人,你需要笑,需要哭哭,需要减压,需要与人交谈。作为一名程序员,平衡生活,尽可能的发现工作之外的乐趣与激情将为工作带来更多创造性。
5. 编程是应用知识而不是死记硬背。
与发明和创造新知识领域的研究不同,编程就是应用现有知识。书籍,研究论文,在线文章和学习视频将成为经常使用的资源。没有必要记住所有知识。可以通过搜索资源找到答案。随着处理的项目增加,知识也会自然而然铭记于心。
6. 你每天都会与冒名顶替综合症对抗。
编程是所有“聪明”人都超同一个目标前进的行业。除非你是天才,否则你会每天都觉得自己不配取得成功。当你每天都为这种感受所困时,会试着想办法解决这一问题。你可以一直将其作为学习新事物的动力,正确看待问题。
7. 作为一名程序员,你还需要有工作之外的生活,否则,你只会沉迷于编程。
有段时间你可能会宅在家里不出门。但是,要成为一名快乐的程序员,必须主动寻求计算机屏幕之外的生活。职业生涯的成功往往取决于你遇到的人。人际关系对程序员而言必不可少。保持程序员之外的个性特征对于防止沉迷于编程至关重要。当你乐在其中而非强迫自己时,工作才会更加出色。
8. 与他人合作会学得更快。
在职业生涯初期,你会想要断开与外部世界的联系,沉溺于阅读这十本有关编程的书籍,以建立计算机科学基础。你猜怎么着?如果你找到一个学习伙伴,会学得更快。当你与他人合作,所有的编程“缺点”都会暴露出来。编写的代码会得到审阅。由于有第三方的存在,你将会学着编写高效的代码。由于伙伴也在学习,所以你会想找到最好的办法。当你从事程序员这一工作时,总会有人审查代码。你永远不是独自一人这是你需要习惯的。
9. 不需擅长数学和科学。
在技术行业会遇到各种超级明星程序员,他们在接受了长期的文科教育之后,发现了编程在逻辑思维方面的吸引力。有很多画家和作家在追求艺术的同时以编程谋生。成为一名优秀的程序员,你需要的是坚持不懈。编程很辛苦。但是,一旦有了恒心,任何人都可以通过阅读编程书籍掌握基础知识。在这个行业工作一段时间后有很多人重拾数学。最后他们甚至可以在没有接受正式数学教育的前提下理解实施复杂的算法。
10. 成为全明星“学习者”。
程序员的学习能力都很强。刚开始也许你的学习能力并不出色,但最终将会得到提升。有时,工作会要求你在六个月内学习三种编程语言。这就是技术创新的状态。作为程序员,每天都在学习。学习就像呼吸一样。即使你对每天都需要学习的状态不太舒服,你也会被迫习惯。
11. 你将对完成项目上瘾。
编码成瘾是真实存在的。在编程生涯中的某一阶段,你将经历通宵编程的马拉松。在完成项目之前,你都不会想要睡觉。由于大脑正在处理大量的信息,你会忘记吃饭,喝酒,甚至不会离开办工作。不要紧,工作做完后,就到外面散散步或者度度假吧。
12. 耗费一整天只为找一个小漏洞。
多数时候,在编程项目中许多部分彼此相互关联。通常,你会发现除非修复了系统中潜藏的一个小漏洞,否则无法继续进行下一步操作。作为程序员,除非找到这处漏洞,否则你会对整个项目倍感压力。你会整天坐在电脑夙夜难寐,只为找到这一漏洞。这种现象只有找到它后才会消失。
13. 你将花费大部分时间在谷歌搜索无人能为你解答的答案。
如果使用流行的语言编程,那么大部分的问题都能得到解答。但是,也有例外。有时,你也会出现别人碰不到的问题。在这种情况下,参考编程书籍并询问编程委员会通常会帮助你答疑解惑。
14. 阅读设计模式的书
是否毕业于国内外最好的计算机科学专业并不重要。在每个程序员的职业生涯中,都会坐下来仔细阅读Head First Design Patterns。它可能是新程序员最常阅读的书籍之一。还在等什么?赶紧拿起它并从头到尾阅读。
15. 学会专注于确切的拼写
在每个程序员的职业生涯中,都会用自己喜欢的语言编写足够的代码,以便按照自己的方式做事。这包括为变量,类,甚至数据库中的表提供的命名约定的准确拼写。仔细审查这一点。你最不想发生的就是因为拼写错误而产生的系统漏洞。记住,当理由充分时沉浸与值得关注事情是情有可原的。但是如果无据可依,那不过只是无意义的重复。
16. 你可能会放弃
有时你会遇到无法解决的问题。有时问题难到让你怀疑人生,只想要辞职。有时工作环境会让你想要放弃。激情取决于坚持。这时候质问自己,是要坚持还是放弃?当遇到挫折和困难时,你就把它当做港湾和下一次腾飞的跳板。
17. 重头再来
当你看到那些和从前的一样热爱编程的人,你会很羡慕接着发现自己无法放手。你不能放手。然后又会回到编程项目上来。你意识到在内心深处,和编程同呼吸共命运,这是你才成为一名真正的程序员。
18. 回到某种形式的学校教育,去学习系统的知识。
即使是从精英计算机科学硕士课程毕业的最优秀的程序员也将在工作中学习。事实上,在职培训是大型科技公司工作的最佳福利之一。公司将送你去学习“高昂”的课程和研讨会,以培训你使用他们希望使用的最新技术。如果碰巧在工作中没有学到足够的知识,你将接触到许多在线编码学院和youtube视频,以提高你的技能。
19. 被不喜爱的公司聘用
即使你是一个平庸的程序员,某些公司也会需要你的技能。当他们面试你的时候,试着记住你也在面试他们。根据公司的文化,你可能会发现自己想对这份看似轻松地工作说不。作为程序员,工作时间很长。找到适合自己的公司文化几乎至关重要。幸福度会带来好的工作表现。如果你的技能无可替代,总会有其他公司排队挖你。非必要情况,不要轻易妥协。
20. 技术面试不合格
技术面试不是开玩笑。高级程序员经常以编写技术面试问题为乐。通常,出于某些原因,这些问题总是格外难。如果技术面试不合格,这也不是世界末日。这当然不能证明你的编程能力。它只测试你的知识库。试着想想积极的一面。如果个人技能出色,经理们会记住你。如果他们看好你的能力,然而你并不适合担任这个角色,他们仍可能会联系你,为你提供另一个职位。
21. 被告知你很出色
在职业生涯中,有时候你会觉得自己像个明星。经理需要依靠你完成项目,他们夸赞你很棒,以激起你的干劲。你会觉得自己处于世界之巅。注意了,这是在诱导你变得自负。请保持谦虚,毕竟学无止境,人外有人山外有山。
22. 被贬得一无是处
在职业生涯中,有时你会觉得自己一无所知。对项目没信心人会告诉你,你什么都不知道。也许他们这样做是为了让你了解自己身处的位置。但是,既然你正在阅读这篇文章,你就会大踏步前进。因为你知道的可能比你想的还要多。你所掌握的知识也会随着时间增多。一年后,人们会尊重你,所以请坚持下去。假以时日,甚至可能赢得那位曾经将你贬得一无是处的人的尊重。
23. 与你所欣赏的其他程序员竞争
编程最绝妙的方面之一就是竞争。当你编写一个你钦佩的程序员认为值得的代码时,会开心地像赢了彩票。编程竞争总是很有趣。精妙之处不在于谁是最好的而是互相学习。
24. 可能理解不了同事的话
一开始,这种情况可能是每周或每月一次。在新编程工作中,你可能理解不了同事刚刚说的话。可能以下两个原因。鉴于生活环境的不同,你可能听不懂他们的口音。在这种情况下,请另一位同事翻译。不能理解某人的言论并不可耻。很可能,其他同事也花了多年时间才得以习惯这种口音。另一个原因是同事刚才所说的完全超出了你的知识范围。那也没关系。毕竟,同事是专家。让同事以图片形式解释一下。你会想要拉把椅子坐下详听,因为这可能需要一段时间。
25. 看到去年写的面条式代码,你会感到羞耻
这事儿常常发生。开始时因为Perl代码,我被批评了。这是一个记录良好的代码,设计也很好。但我却用一种难以阅读的语言写出来。所以,我写了面条式代码。但是,每年,无论我怎么努力,我仍然会找到一些我清除由于快速完成工作而编写的面条式代码。这就是程序员的日常。我们解决问题并修补问题。不必觉得羞愧。当你意识到这是你写的,返回修正即可。
26. 当你厌倦了看另一行代码时,你将在数据库项目中躲避
当你进行一次精彩的编程攻关时会发生这种情况。已经两个月了。你需要休息一下。但是你喜欢这种势头,所以继续前进。然后你意识到SQL很有趣。无法弄清楚为什么你不能看另一行代码。但不知何故,将数据放入数据库并再其取出使你感到愉悦。你陶醉于完全逻辑语言的简单性。
27. 对编程马拉松又爱又恨
编程马拉松现在很常见。程序员加入团队并相互竞争。在这个过程中,他们会在几个小时内进行高密度学习。你会因为团队精神爱上编程马拉松,也会因为快速码字造成的腕关节综合症而讨厌它。你也会讨厌工作拥挤的房间以及在编程时感官的过度刺激。
28. 阅读研究论文时,会觉得一个字看不懂
你会说英语吗?好大多数人会说是的。但是,你可能会一遍又一遍地阅读一些研究论文,并发现自己一头雾水。对我来说,在学习基础数学之前,大多数关于算法的研究论文看起来都像是一片巨大的雾林。然后,突然间,一切似乎又都拨开迷雾了。
29. 购买耳机
在职业生涯的某个阶段,当你专注于代码时,会发现任何类型的噪音都会阻碍你的感官。买一个能够隔绝外部噪音的好耳机,可以让你在嘈杂房间内专心工作。在某些时候,还会发现音乐有助于编码。编码生涯的早期我就发现,音乐节奏有助于流畅地编码。即使是现在,需要提高工作效率时,我还会找些音乐来听。
30. 抓住与同伴交流的大好时机。
在职业生涯的某个阶段,你会成为公司非常重要的开发人员群体。这时你将被邀请到异地技术专业人员将在这里进行社交活动。高层管理人员会借此机会了解你。这并非是无忧无虑、享受的时候。相反是与同伴交往和交流的大好时机。有时,外出活动还包括与其他公司的技术专家的会议。
‘伍’ 程序员有哪些事是必须要做的
想要成为一名伟大的程序员并不是那么容易的一件事,事实上——没有经历过漫长考验的话,这根本就是妄想。想要成为一名堪称优秀的程序员就已经很需要花时间了,而且过程不可谓不艰难——你会不止一次地想要放弃。
彻底掌握编程最基本的内容粗粗一算就要一到三年。我开始学的是基本的HTML和CSS,这用了我很长一段时间。后来终于这些概念在我脑子里变得清晰起来,而且理解起来也慢慢变得毫无障碍,接着写一些小程序也难不倒我了。总而言之,光靠看书或者看教程视频是成不了程序员的。实践与练习,才是王道。
1. 个人学习体会
我们需要知道的第一个经验教训是,别人的经验永远不会与你的一样,不仅是因为你们碰到的资源不同,还包括每个人的想法以及思考的方式也是不一样的。学习新语言最好的方式是找到关于该编程语言“常见问题解答”的书。
这本书你在看的时候从始至终都不要去碰电脑。首先你要做的是掌握概念理解该编程语言(即使你看完之后忘了大半也没关系,总之继续),所以我们选择的书籍应该是基础性的,入门级的。
2. 目的是搞项目
你知道项目吗,如果你想要学习编程——那么你需要创建的一些东西。为什么我们需要项目呢?因为如果没有的话,我们就没有目标——浑浑噩噩,不知所以。可以先拿小型的应用程序和网页练练手,想搞软件开发的还可以建立自己的网络浏览器或者其他酷炫的玩意儿。
3. 知道自己想要什么
确定一个项目有助于制定目标,但是如果你能知道自己真正想要的是什么会更好。假设你想用Python语言建立一个删除程序用以删掉Spotify中的最新歌曲,这个就是项目。而项目的关键是你得找到Python删除程序,而不是学习整个的Python资源包,因为入门教程中可没有关于这方面的知识,教的主要是理论和基础知识。我们应该对照自己的目的学会有的放矢。
4. 脚踏实地
编程和插秧、开车,甚至是系鞋带没什么不同。不同的是,我们get新技能所需要花费的时间和精力不一样。所以我们应该设置切合实际的期望,不要想着一蹴而就。不要妄想你刚开始学代码就能写下一段段漂亮的程序,脚踏实地很重要。
5. 语法不过如此!
没错,语法就只是语法而已。我们学编程不是为了语法,而是为了理解给定的编程语言。
6. 为什么要有文档?
让我告诉你原因。因为我们需要阅读它们,从上面提取信息。每种编程语言都有其正式的文档用以表述它的功能和命令。不止如此,很多程序员(工程师和开发人员)都会选择建立自己的编程文档,以便更好的收集可用的学习资源。
阅读文档和看小说还不一样,你得学会一边阅读一边思考,甚至是来一场头脑风暴。
7. 了解所有的工具!
在阅读了数以百计讨论各种工具、应用程序和其他开发资源的文章和博客之后,我对这些工具总算有了一个大致的了解,而这让我受益匪浅。
掌握一门编程语言不仅仅指的是语法、符号、元素和语义。还应该了解其外部的设计环境。我们的学习任务也应该包括如何构建这样的条件来开发自己的产品。这个过程需要我们不断地花时间去探索学习工具、文档和功能。即使你只是因为好玩才学习的编程语言——例如脚本语言——我们还是得在一个更大的外部环境中才能掌握和使用它们。
8. 不做闭门造车的傻瓜
Koding、GitHub、StackOverflow等等都是不错的社会学习网站。这些网站不但能让我们学习到一些顶尖的技术,还允许我们自由地交流沟通——自由地问问题、自由地回答问题。
9. 用编程赚钱
虽然很多人不屑于这么做,但是我还是建议那些技艺日渐娴熟的程序员找点兼职工作。这能让你学到更多。Elance、Freelancer等等网站都是找开发工作的好去处。
10. 教学相长
这是我们学习编程的最后一步。在我们学习的后期阶段就应该开始试着教别人如何编程。教学相长是学习的最好方式。教什么人呢?可以试试社交网站。据我所知,Quora就是一个很不错的地方,里面有很多没有解答出来的问题,而这些问题就是我们学习新知识巩固旧技能的好机会。
‘陆’ 程序员需要具备哪些东西
程序员工作三连
‘柒’ 程序员最害怕的5件事,你中招了吗
5. 不合适的管理和猪一样的同事
没人喜欢和工作能力差的人一起工作,也不愿意在这种人手下做事。但是这种不合适的人会给开发人员的生活带来很大的痛苦,不论在什么方面。
当听到营销人员趾高气扬的脚步声,然后说着一些不着边际的话,对着开发人员说“这个很着急的,要尽快完成。”总是让人觉得很窝火。——Bruno Skvorc
必须得重写整个系统...一遍又一遍...用另一种编程语言和不同的工具箱/框架...立即完成而不是分阶段完成(先替换一个模块,再替换另一个)...因为某些上层领导认为他们的方案是最好的,所以其他的方法都得改,彻底的改。——RHSeeger
我终结了和另一个开发人员的合作,因为他根本不知道自己到底在做什么,而且还坚信自己的方式是最好的。更关键的是,那个开发人还有权利命令你,指手画脚的,所以必须结束这种“打下手”的合作。——Jaymz
4. 逼不得已学习/使用一个特殊的技术
任何一个开发人员都有他偏爱的编程语言、工具和技术,同样,他们也有不愿意去触碰的东西。
也许总有一天我不得不去学习Java。——Gehsekky
可能我迟早得用COBOL来编写程序了。——Taylor Leese
在下一个项目里,我不得不放弃C#而改用VB.NET了...发抖——Dal
3. 对工作没什么激情
任何一个人在工作当中都希望能获得享受的感觉,开发人员亦然,甚至有的时候着装要求也是相当重要的。
真的感觉到枯燥乏味。——Cory Thomas
突然有一天,我得出一个结论——编程工作不适合我。苍天啊,那才是真正让我恐惧的事。——Dan
我可能会结束这种需要打领带的工作。——Jerry Coffin
2. 失业
不必惊讶,虽然市场对于开发人员的需求量很大,但仍有很多人担心丢掉饭碗,根本原因可以说是多种多样的。
怕被外包...——Jack
担心封闭的开发环境会变得更加普遍——特别是苹果公司的iOS系统——以及它倡导的反自由商业模式。在遭受微软不公平的捆绑销售打击下,做一名程序员要多惨就有多惨。但苹果公司对处于完全控制的技术产品朝令夕改,反而让微软看起来像是一个相当仁慈的大叔了。——Bobince
特殊的意外,比如:断指,眼疾...再也不能写代码了。——Aitjcize
EMP—电磁脉冲 高科技技术可能会取代人工编程。——Kevin Ernest Long
1. 把事情搞砸
作为程序员,最大的担心就是遇到bug,没人想在工作中出问题,但程序员运用的系统和应用程序种类繁多,遇到的各种bug有可能令人讨厌但并无大碍,没什么潜在的威胁。
说不定在你周五晚上打算喝酒放松之际,架构崩溃了。——Anonymous
我是真心的害怕因为我代码里的bug而给公司带来经济损失。——Joshtronic
担心代码里的bug可能会给某人/某事造成伤害。——Jeremy
每次提交我创建的架构或由我负责的东西时,我内心深处都是极度的恐慌——尽管已经做了彻底的检测。——Evernoob
记住这些,下次你再看都程序员惊慌失措的眼神的时候,你就不会感到惊讶。他/她可能正在为了一个bug而汗流浃背,或者是公司对着装要求的改变。
希望可以帮到你,谢谢!
‘捌’ 作为一个程序员,应该有哪些必须知道的事
1. 懂得分享。尽可能使用开源,并且当你有能力的时候,要对其有所贡献。聚全社会之智慧,胜过某些“大”公司之短视。
2. 公平竞争。尝试其他技术、框架、方法和观点。不要总以为只有你的选择才是可行的。别的选择也有可能比你的要强得多。要以开放的心态,来检验其他人的选择。
3. 不要攻击他人。像第2条所说的,不要仅仅因为别人恰巧使用.Net、Java或PHP就去攻击他们(我在这方面有一次教训)。有时,它们或许要比你所认为的更有效。只要别人不是一无是处,你就可以从他们那里学到很多东西。
4. 自我完善。尽量发布可以运行的代码。不要指望QA能给你找出所有的程序错误。要经常并且全面深入地测试你的代码。
5. 伤害他人要道歉。代码审查是一个不错但很少用的想法。指导经验比你少的程序员,有助于整个团队。不要公开批评他人。指导并不是贬低别人。别人有时候会接受,有时候不接受。其实,有时候你可能会从自认为水平不如你的人身上学到很多东西。
6. 未雨绸缪。动手写代码之前要尽量理解要解决的问题。要做原型、从网上查找实例、跟其他也做这个的人讨论或者只是练练手而已。构建你从未做过或用过的东西是个坏习惯。如果开始就有思路,结果可能会更好。
7. 拿得起放得下。不要害怕替换、重写、重构或者放弃垃圾代码。有时候,如果碰到可留可不留的代码,直接扔掉才是上策。永远不要爱上你的代码。
8. 平衡生活——学习、思考、绘画、唱歌、跳舞、工作、玩耍,每样都会一点。我喜欢Google的方式,在那里,你有20%的时间用来思考任何你认为值得做的事情。老板应该提供休息室、娱乐室或者一些能让人放松清醒的环境。
9.编程是一项艰苦的脑力劳动活;有时你的大脑确实需要休息一下。拒绝例行公事地每周工作80小时,否则你的工作质量将大打折扣,花费大量时间取得的成果将前功尽弃。另外,如何释放工作生活压力,可以参考伯乐在线的这篇文章:《3步释放工作和生活压力》。
10. 每天下午小憩一会。每天工作24小时不会让你更有效率。休息、回家,然后打个盹。通常,很多难题是在我回家的时候解决掉的,解决方法通常在我开车时或第二天早上突然想到。
11. 不要闭门造车。读读博客、学习新语言和框架、参与讨论以及看看同行在干什么。两耳不闻业界事,你就无法成为一名更优秀的程序员。
12. 保持好奇心。想想塑料杯中的种子:根向下长,枝叶向上长,没有人知道这是为什么,但是我们都是这样的。一般来说,在编程和技术世界,每天都有新奇东西出现。看!很神奇吧!每天学习,让你思维更广,技能更新,选择也就更广。如果你认为编程枯燥乏味,那么你要该换行了。