❶ 程序员怎么去提升自己能力
二:信息采集器和笔记本
首先你要给自己设定一个目标,就如同一个公司会设定它的Vision。
目标要够大,这样你才能看到更多的风景。
目标应该设定在解决哪一类问题,而不是精通哪一类技术。技术只是手段,不是目的。
例如,“我要成为iOS developer中的达人”这个目标,就远不如“我要成为前端应用开发的专家”来得有意义。前者学到深处你可能会去钻研iOS framework里各种奇技淫巧,而后者你会开始关注视觉与交互设计,研究各平台间的差异与共同趋势。显然,后者更有助于你的个人发展。
不过即便有了明确的目标,选择哪一类技术学习,如何学习,在信息过载的今天依然是一个难题。常有的观点是应该学习最新的技术,因为老的已经过时,而反对的观点则是新技术还不成熟。我个人的观点是,当初入一个领域时,选择主流技术框架;当你有一定经验后,选择技术时更应该关注背后的推动者,我相信优秀的人和团队总能打造优秀的产品,无论是商业公司还是开源社区。不必太在意技术的新旧,因为可能很快都会成为过去时。你真正要学习的是技术背后的思想。有不少语言与开源项目会写它的Coding philosophy,这是很有意思的,你可以从它们的源代码中去验证这些编程理念。以Python为例,如果你执行import this就会看到它的理念,再如Python中一个着名的开源库Celery,在它的文档有专门一节讲述它的编程理念。它们对你的影响会比这些技术本身来得更深远,这是我给初学者们的一个忠告。
同理,我非常推荐读一些优秀开源库或是语言的源代码,例如Python的标准库绝大部分都是用Python实现的,而且可读性非常好。如果学习一门技术仅仅停留在用的层面上,你就还没有完全吸取其中的精华,而且学习的收益会随着技术的过时而消失。
我的另一个学习原则是,在选择学习一门新技术时,最大化它与你现有知识库的差异性。读起来可能有拗口,例如你会Django,接下去你应该去学习Ruby on Rails还是NodeJS?依据这个原则,你应该学NodeJS,因为它的异步IO模型在理念上与Django的同步模型差异很大,而RoR则与Django更多相似之处。但更好的选择是不要去学另一个Web framework,去学习ZeroMQ或是Redis,这两者对于Web development也非常有帮助,这样就做到了最大化差异。从构建一个程序员的技术理念角度,我会推荐每一个程序至少去了解Lisp或是一门Functional programming language,不管你是否会在可见的未来用到,它们能让你从一个不同的角度看待编程。
最后我建议每个程序员都应该经营一款自己的产品,它可以是一款app,一个网站或是一个开源软件。除非你是一个创业公司的早期员工,不然你可能没有机会将所有学到的技术或是理念都付之实践,有很多人想成为全栈工程师,最快的捷径就是打造一款自己的产品。任何一个设计师都会精心打造自己的Portfolio,但大部分程序员却不会。当评估一个程序员的Coding能力时,我会去看他的Github上是否有出彩的项目,可惜国内绝大部分程序员的Github空空如也,或者只有一些非常简单的程序。我建议大家好好经营自己Github上项目,这不但可以提高你的声誉,对你将来的求职也非常有帮助。当你报怨求职面试时又被问到各种无厘头的程序题时,有没有想过面试官也很无奈,因为他没有任何其他方法得知你的Coding能力究竟如何。如果每一个程序员都有自己的作品,我想程序员的面试会简单许多。
重视沟通能力的培养
当被问到“你觉得Junior Developer和Senior Developer最大的差别是什么”时,我最自然的反应是沟通与文档。沟通包括程序员团队内部的沟通,与其他团队的沟通,与Manager的沟通等等。我不认为自己有能力把这些问题非常概括地说清楚,不过我可以给一条建议,那就是先学会和你的Manager沟通,让他来教你其余的部分。许多公司都会设置Manager与组员的1:1,一个有效率的1:1应该大部分时间有组员来主导。这需要你在1:1之前花足够多的时间来考虑要问的问题,并且最好提前1天发给Manager,让他有机会思考答案。许多人对此不太重视,或者只问非常具体的问题而不是一些开放性问题,这样你很难在你的Manager身上学到东西。如果你渐渐懂得如何利用1:1的时间,它很会成为你在工作中单位时间投资回报率最高的活动。
累积你的人脉
每个人都明白人脉的重要性,但实际做起来却不容易。参加一些线下的会议或是活动,可能是最直接的扩展人脉的方式之一。可惜大部分人似乎只是去听了一场技术讲座就回家了。当然,这和不少活动的时间安排也有关系,讲座时间排得太满,茶歇时间短,加上有时嘉宾迟到或是没控制好时间,干脆就把茶歇取消了。而实际上,结识一两个同道中人远比听技术讲座有价值。下次去参加这类会议,不妨给你自己设个目标,比如至少加两个同行的微信。之后维系你的人脉可能需要花更多的时间,下了班或是周末找你的朋友们喝个咖啡吧?
另外我觉得每个人都需要一个职场导师,他可以是你第一份工作的导师或是Manager,也可以是你认识的其他前辈。你们需要维系一个非常长期的关系,不止于一家公司,最好贯穿你的整个职业生涯。每当你遇到疑惑时,都可以询求他的建议,我觉得这将是你最宝贵的一笔人脉财富。
寻找发挥你才华的平台
最后也是最重要的一步,找到适合你的公司。做为求职者评估一家公司可以看三个方面:
公司的发展前景(大公司的话,看所在部门的发展前景)
你将要加入的团队
薪资福利
所以在面试一家公司的时候,你要意识到面试是双向的,公司在面试你的同时,你也在面试这家公司。面试前你应该对这家公司做足功课,准备好一些有质量的问题,比如指出产品中的问题,询问开发流程或是如何做绩效评估。到时你也可以检验一下你的面试官是否合格。
每次选择公司对以上三个方面都应兼顾,但在职业生涯的不同阶段,侧重点不同。比如,在刚刚工作时,加入一个优秀的团队最为重要,他们可以教会你很多东西,提升你的能力。工作5年之后,你需要一个平台施展你的才华,体现个人价值,公司发展前景的重要性迅速提升。当你做出一番成绩,证明了自己的价值之后,逐渐进入收获期,就有了与公司要价的资格。另一方面,团队实力对公司的前景也有很大的影响。
对一个刚毕业,初入职场的同学,一个近几年被问了无数次的问题“我的第一份工作是去创业公司还是大公司?”我的回答仍旧是“加入一个优秀的团队最为重要”。一些知名的大公司,团队的素质是有一定保证,但创业公司则不然,团队素质参差不齐,所以如我前面所说你需要面试这个团队,做出自己的判断。不过除了团队因素之外,我想提一下毕业生去创业公司的几个好处。
首先,在刚毕业的一段时间内,经济压力小,是最自由最能承受风险的时期,而这段时间往往不长,所以应把握好这个去创业公司的黄金时段。其次,所有的学生进入大公司后,都会担任初级职位,某种程度上来讲是学校学习的延续,规范有条理,但缺乏独立性和创新性,而这正是中国大部分学生所欠缺的。这方面的能力在一家创业公司可以得到快速锻炼,而在大公司可能要等升到中级职位后才有这方面的机会。个人观点,仅供参考。
小结
我觉得步入职场的前3年对今后的发展尤其重要,希望此文能对年轻的程序员们有所帮助。欢迎评论?
如果想私信我的朋友可以加群,大家一起学习,一起学术分享,资料共享
❷ 普通的程序员和大神级的程序员有什么区别
你好,普通程序员只能做一些重复简单的事情,大神级程序员可以解决普通程序员解决不了的难题,还可以给普通程序员建框架。
❸ 程序员应该怎么学习
1、选定方向
编程的世界是多元纷繁的,大的方向就分前端开发、后端开发、移动开发、云计算、数据处理、智能硬件、物联网、虚拟现实等等,光编程语言都几十种。如果没有做过功课,贸然进入只会分分钟懵逼。所以最好是根据自己的兴趣爱好再结合市场前景,先选定一个方向,再选择一门语言,然后头也不回的深深扎进去。
2、优化学习方式
做好笔记,记录经验,我们大多数人并没有过目不忘的神技,很多时候我们学了也不一定马上掌握,需要过后花时间慢慢领悟,而且还有忘掉的风险,所以对于重要的知识点都要做好笔记。
3、多看官方文档,外文资料
互联网是一个更新迭代很快的行业,所有编程语言都会不断的更新新功能和修复旧Bug,网上查的资料很有可能是旧的解决方案,现在已经不适用了。所以最好最快的方法就是查看官方文档。
4、动手做项目
我们学习编程的最终目的就是用所学的做出具有一定功能的项目,而做项目又是最好的学习和巩固知识的方式。如果前期能力不足就先做一些简单的功能模块,一步一步慢慢来,不要一开始就要实现各种酷炫炸天功能,遇到不会的就在网上查, 现在互联网这么发达,获取资源也及其方便。
自学过程中的一些注意事项
1、要善于构建大的知识框架体系,不要执着于细枝末节的知识点。中国的应试教育培养出来的人都喜欢啃细节,对于自学来讲这是大忌,比如在遇到一个函数的时候,非要把这个函数的参数,返回值都弄得清清楚楚才肯罢休。
2、先学重要的知识点,用不到的可以暂时放一放,因为你时间有限,遇到比较难的知识点,如果不是特别重要的,就跳过去,当你哪天用到的时候再来好好的研究,带着问题去学习,你会发现学习难的知识点也没有那么痛苦。
3、要善于查资料,互联网就是最好的老师,遇到问题先网上查,至少能够解决你98%的问题,因为你遇到的问题别人肯定也会遇到,除非你已经到了高处不胜寒的境界。
❹ 程序员的出路在哪里
【原创】下面四千字的东西,打了三个小时,又花了两小时修改,体会来自于自己的经历。既为楼主也为自己,也希望能给他人带来一点帮助,因为自己也曾苦于出路这个问题许久,徘徊于技术与销售之间。其实,最重要的是,想清楚自己要的到底是什么,而实现的方法有很多,选择其中的一个,然后耐心去做,注意做的过程中,要多方面发展。不断提高自己的综合能力才是硬道理——这才是出路之所在!!!。
【出路】
在职业选择上,很多人都会问一个问题,这个职业有什么出路?想得到正确的回答,必须先搞清楚,自己究竟想得到什么东西。对于程序员这个职业,如果你要的是钱,很多的钱,程序员没有出路;程序员工作繁忙,有时不规律,连续着加班很有可能,如果你要的是休闲的生活,程序员没有出路;程序员都是与电脑打交道,工作就是坐着,如果你要的是跟人广泛的交流,而且坐不住,程序员没有出路;写程序都是很逻辑的东西,如果你不喜欢这种解题式的思考方式,顶不住整天思考所带来的疲惫,程序员没有出路。
程序员跟民工的区别就是,高强度的脑力劳动者和体力劳动者。虽然程序员的待遇看起来还不错,想想其实不是,假如八点半上班,加班到十点,没加班费,平均下来,一个人相当于干了将近一份半的工作,除下来收入付出比就少了半截,收入多是因为付出的劳动多。这是开始做程序员时常有的事。
假如纯往技术上走,干几年熟手了,情况会好,但是,当你对比起干了几年销售的朋友时,你会发现,你的劳动力太廉价了。一个小公司的销售,普普通通干三年后,一年拿十万块的提成是很有可能的,而一个程序员,普普通通干三年,能拿月薪一万的不多。还有人家销售有许多的报销,你有么?如果有天赋而且努力地干,销售,大学毕业三年买车买房的多的是,当然不是说噬老族那些;程序员呢?有多少能!也许研究生,而且读的好的那款还比较可能,但此时那些本科或者大专,甚至中专就出来跑销售的,已经工作好几年了,说不定此时正在三亚晒太阳呢!
你说销售的应酬多,呵呵,喝酒;要去拍人马屁,去求人什么的!ok,这就是销售,你敢保证当你看到他们的收入时,还有看到他们拿着公司的钱,请客户去各种高档的地方消费时,甚至说句不好听的,花公司的钱请客户到处吃喝嫖赌时——客户也是人,许多客户就这些个的爱好,所以要满足他,他才买你的帐,很正常——严格意义上讲,这样的工作比坐在电脑前埋头苦干来的轻松多了,其实是一种享受,看到这些,你敢保证你一点都不眼红?呵呵,如果不眼红,那就专心干程序员吧!
或者说,你对这种“一点科技含量都没有的工作”——在你眼中,高iq的人才是牛b的人,那就安下心来干程序员吧。但我想说,在这个社会上,赚钱最多最快的,最舒服的,永远是销售。当然,干技术干的好的,最终都是比较受人尊重的——专家,当然是五十年如一日投身于技术那种人才能成为专家。如果你能刻苦地干程序员,想成为架构师、系统分析员,成为软件专家,那就专心干程序员吧!
或者说,你实在干不来与人交际,还要挖空心思去维护各种人际关系的工作是,那就安心下来干你的程序员工作吧,就像民工一样,有谁乐意去干民工,但是没办法,能力所限,只能干民工了。但我想说,能力都是学来的,给民工们上大学,他们毕业后一样会有很多牛人。有人说:“哪有那么好的条件给他们上大学啊!”。条件很多时候要自己去创造啊!难道每个成功的人都有一个高人,手把手地拉扯着他,给他良好的成长环境和资源吗?没有什么东西学不来,只是学得快和慢的问题,要真正去学学看才知道,而不是停留在大脑中。如果你学编程学得很快,而且学得很开心,即使学的过程很累,那就专心干程序员吧!
接下来,告诉你一个好消息,史玉柱出身技术、马化腾出身技术、唐骏出身技术、比尔盖茨出身技术、杰克•韦尔奇出身技术,等等,他们都成功了!假如这是你想象中的出路的话。我不是说要达到他们那种水平,而是走技术路线,来获得事业有成,获得成功。写过程序的人都知道,想实现某个功能,有很多种实现方法。获得成功也是一样,有很多的路可走。这就是我为什么拿销售来做比较,每种职业都能到达成功的彼岸,不管是做技术、行政、财务、销售,等等。
出路是什么?不就是人生价值的实现,有的人要的是成就感,有的人要的是幸福,有的人要的是健康,有的人要的是金钱,有的人要的是地位名气,有的人要的是贡献全人类,有的人要的是玩乐、享受,其实这些都是不同人的人生价值。而实现自己人生价值的方法实在太多了,不管从事什么职业,不管是java程序员,c++、c#,都能成功的,最最重要的是想清楚你想得到什么,接下来就是做具体的计划,然后实现计划。实现的过程不能拘泥于技术,应该多方面发展,不断提高自己的综合能力!想做项目经理、做cto,或者用自己的技术去创业,都必须发展自己的综合能力。
回到刚才,马化腾、比尔盖茨、唐骏等等这些技术员为什么能成功?技术过关是基础,甚至技术过硬,唐骏日本、美国留学,比尔盖茨哈佛。接着,最重要的是:超前的眼光。qq其实不是什么很难的技术,比什么量子物理简单多了,而且icq还是以色列人开发的,马化腾就照着开发了qq,当时在中国就是超前的东西;比尔盖茨的windows,让三岁小孩也能使用电脑,而不用记一大堆的dos命令,这就是超前;唐骏发明了卡拉OK评分器、大头贴,你自己可以想象一下大头贴有多少的技术含量,然而它带来的经济效益是多少!所以说,想法太重要了,好的技术不是它有多高深,而是它能给人的生活带来多少的便利,而往往第一个想到的人能获得巨大的回报。第三,人际关系,别老以为做了技术就能以高姿态出现,有人很鄙视销售,认为没技术含量、俗;销售还很鄙视技术呢,穷、死板。其实,没人能靠自己一个人赢得一切,技术要靠销售来卖自己的产品,销售要靠技术生产产品,谁都离不开谁,这其中还有一连串的其他人呢,财务、行政、前台mm、老板等等。现在越来越提倡团队合作,跟队友、跟上级、跟客户之间的沟通是必修课,沟通不好必然配合不好,你的才能永远无法施展,何来的出路。
第四,求人,其实求人是人际关系中的一个,为什么单独在这里讲,因为他太重要了。机会很多时候是靠求人得来的,例如唐骏,他去日本留学的机会就是求了一大堆人得来的,他当时考研究生,在北京邮电分数最高,但因为大学没得过一次“三好生”,北邮没给他出国名额。他给各个大学的研究生处打了三天电话,问还有没有留学名额,得到的大多都是这样的回答:“我们自己的学生都不够呢,哪里轮得到你?”,如果脸皮薄,没耐心,早就放弃了,后来他找到了北京广播学院(现在的中国传媒大学,就是陈鲁豫读的那个学校,据说当时很水。。。),吴怀仙老师,当时他们的对话是这样的:
“看你的成绩很好,你们北邮应该取你呀!”
“北邮当然取我。但是,我从小爱看电视爱听广播,未来中国的广播电视事业一定会有很大的发展,为了这项事业,我愿意放弃北邮,来到北广。”
“照你现在的说法,你不是为广播事业而来吗?怎么又跟出国有关?”
“中国的广播事业很落后,需要去国外学习一些先进的理念、先进的技术回来呀!”
“老实说你来有风险,如果教育部不批的话,你不能出国,就必须留在广播学院读书。可是北广没有硕士学位的授予权,你只能取得研究生学历,得不到学位。”
“我来的目的很明确!为了中国的广播事业,有没有学位没那么重要。”
你知道当时的实际情况是怎样的吗,北邮根本就没有给唐骏名额,唐骏根本就是说了一个无伤大雅的谎言,所以,你看看、你看看,善于变通对于一个人的成功是多么的重要,唐骏他们都不是一味地干技术就能成功的,很多时候必须好好包装自己、销售自己的。在这里我不是在说要去骗取利益,而是说,在遇到困难的时候能改变思路,转个弯绕过路障!!求人很重要,有个强硬的后台帮忙,少奋斗十年!后来唐骏又去教育部门口站了几天岗,等人、求人,呵呵,其实只是问了几声好,这是后话。
第五,超越物理层。凡是要获得大的成功,赚大钱,或者说更容易地赚钱的,都不能拘泥于物理层。只有大老板能给你建个实验室,让你搞深层次的技术;而只有你的实验室能不断做出可以卖钱的产品时,你的实验室才不至于被关闭。走入公司的决策层,你才能决定该往那走,什么技术该大力发展、什么技术该好好改造、什么技术该放弃。这个道理相信不用讲你也明白,那么,如何进入决策层,靠高素质、靠综合能力。学习能力、沟通能力、领导能力、管理能力、玩的能力(品酒、打扮、奢侈品、打高尔夫等等),一大堆的能力呢!没有一所学校、一个组织能教授全部,这些都要靠自己去学、去领悟,前提是,你要有去学、去领悟的想法。
说实在的,世界是很复杂的东西,要的是你去适应它,它不会来适应你。唐骏说:“性格能改变吗?很多人说不能。可是我认为,本性是不能改变的,但性格是一定能改变的”。杰克•韦尔奇,通用电气前ceo,打小有自卑心理,到了成年还略带口吃。他母亲激励他,这算不了什么缺陷,只有面对现实,坚持与别人沟通,让别人了解你,才能主宰自己的命运,别人才会跟你做朋友,这是这个伟大而平凡的母亲给予杰克的最大财富。事实上,如果你自己不在意,那么那个缺陷也就不太重要了。略带口吃的毛病并没有阻碍杰克的发展,实际上在后来,注意到这个弱点的人大都对杰克很敬佩,因为他竟能克服这个障碍,在商界出类拔萃。赶紧改变,让自己更好地适应这个复杂多变的世界。
想清楚自己要的是什么,做一个两年计划,因为超过两年变数就太大了,然后制定实现的步骤,也就是一个个短期计划,从第一步开始实现。这些计划应该是具体、可行而且能在预定时间内完成的,最后静下心来,耐心实现自己的每个计划!!不要老是问人,我这样做对吗,我该怎么做。哈佛退学就一定是错的?北大卖猪肉就一定不好?外企就一定是好归宿?你该做的就是,想清楚自己想要什么,金钱、美女、名利、地位、权势,还是过平凡的日子,做善事做好人,都没问题,只要真的是你想要的就好,然后考虑怎么去实现它。其实实现的方法有很多,选择其中的一个,然后耐心去做,注意做的过程中,要多方面发展。不断提高自己的综合能力才是硬道理——这才是出路之所在!!!
❺ 程序员职业分析小结
根据个人的理想来安排自己的生活,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,痛快一些,那么就需要慎重安排自己的的轨迹,从一个行业入手逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会以后,钱根本不是问题,频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手。
❻ 程序员的作用
作为一个程序员,我对程序员这个职业的领悟就是:
程序员就是为了满足人类无止境的惰性而存在的。
如果人类失去了惰性,那么这个世界上也就不再需要程序员。
❼ 如何成为一名程序员
成为程序员的具体步骤:
第一步:
掌握一种编程语言。学习任意一种主流的编程语言,例如C++语言。熟练掌握一种语言的语法和基本的编程技巧。
学习时间:
3个月左右
注意事项:
编程语言和编程工具是两回事情,编程语言是指C++、Basic、Object Pascal等。程序设计语言,它们是像汉语、英语一样的抽象的语法规则,编程工具是指Visual C++ 6.0、Visual Basic 6.0、Delphi 7.0等包括了源代码编辑器、程序编译器 在内的集成化、可视化的软件开发工具。C++源程序可以在Visual C++ 6.0里编写,也可以在记事本里编写,而同一个C++源程序可以用Visual C++ 6.0编译、执行,也可以用C++ Builder 5.0
编译、执行,所以: C++ 不等于 Visual C++ 6.0。
第二步:
掌握一种编程工具,学习任意一种主流的编程工具。注意编程工具要和第一阶段学习的编程语言一致,例如你学习的编程语言是C++,那么编程工具要选Visual C++ 6.0或者C++ Builder 5.0。熟练掌握这种编程工具基本用法,例如:菜单、组件、程序跟踪调试、编写Windows程序等。
学习时间:
3个月左右
注意事项:
这个阶段侧重编程工具的使用,同时进一步熟习编程语言,最后达到能熟练编写各种基本的Windows程序。
第三步:
掌握“算法与数据结构”这门课程,推荐许卓群的《数据结构》,熟练掌握各种常用的算法与数据结构。
学习时间:
4个月左右
注意事项:
这是一门不可或缺的软件开发课程,曾经有一本经典计算机专业书籍叫做《数据结构+算法=程序》,这说明了数据结构和算法的重要性。它能帮我们建立良好的程序分析与设计能力。
第四步:
实现一个模拟的小型软件项目,掌握软件项目的基本开发过程和方法。
学习时间:
4个月左右
注意事项:
自己完成一个模拟的小型软件项目,强烈推荐做一个MIS(管理信息系统)软件,参考用书推“中小型信息管理系统开发实例系列丛书”,人民邮电出版社,它的例子详实有效, 以它为基础再加以扩展,就可以做出实用的MIS软件来。
❽ 程序员,如何让你的知识内化
一、前言
是否,你浏览过无数文章,但是转眼就忘?
是否,你收藏过无数文章,但是很少再看?
是否,你感觉自己很努力学习了,但还是收获甚微?
其实,这几个问题也一直深深地困扰着我,一直渴望着提升,却又摸不到方向,感觉一直在努力,然而貌似并没什么卵用。
直到,接触到知识管理这个概念,才领悟到:学习是一个系统工程,每一次的阅读、收藏、实践,其实都是这个系统的自我更新。唯有运用工程思维,才能更好的解决这几个问题!
关于知识管理,我视之为我人生中最重要的技能,我将不断探索、不断优化,以成就一个更完善的自己。
下面,将从一个程序员的视角来讨论知识管理,主要包括以下几个方面:
什么是知识管理?
为什么要管理知识?
如何管理知识?
二、什么是知识管理?
个人知识管理(Personal Knowledge Management):一般指个人通过工具建立知识体系并不断完善,进行知识的收集、消化吸收和创新的过程。
三、为什么要管理知识?
核心目的:搭建自己的知识体系
计算机行业的一个特点是新技术更新特别快,意味着程序员需要不停学习,才能跟上行业的发展。所以,知识管理对程序员非常重要。有意识,成体系地管理知识能够:
更快速的入门
如果我们已经建立好一个技术知识体系,新的技术也只是在其他技术上建立起来的,有了坚实基础,学习新技术就会更有效,毕竟原理总是类似的。
更全面的掌握
看过那么多的博客,如果没有经过自己的整理,终究总是一块块记忆碎片,难成体系!使用合适的工具,正确的方法,才能更好地掌握知识,让知识凝固在脑海,形成一个整体的脉络。
更高效的检索
程序员经常遇到同样的问题,例如说部署开发环境的时候,如果有把解决方案记录下来,就能省去重新解决问题的时间。毕竟重复的谷歌,也是耗时操作。
四、如何管理知识?
1.收集
确定主线,建立信源,链式反应,广泛收藏
“生也有涯,知也无涯”,我们永远不可能通晓所有的知识!
一开始我看到好的技术文章时,都是加书签存起来。后面发现这样不能离线访问,而且链接可能会失效。
后来,接触了印象笔记、为知笔记等云笔记软件,于是我可以把文章保存到笔记中,随时可以翻出来看。这是我的知识管理之路的开始。
可以说,笔记软件给知识积累带来了极大方便,而且,还可以在自己的所有笔记中快速搜索某个关键词。
有时候,我们明明记得自己以前看过某篇文章,但就是想不起来具体细节了,这个时候,只要我们之前保存过,一搜即可。这比再用搜索引擎去搜索,显然更高效一些。
记得以前,我为解决某个问题,谷歌了很久终于找到一篇文章解决了问题。解决之后并没有记录下来,结果下一次遇到同样问题,我又浪费了很多时间去再次搜索解决方案。重复多次之后,我意识到这是个严重的问题。所以逐渐养成了保存各种文章的习惯。这些网上积累下来的文章,成为了我构建知识体系的土壤。
不是收集好的知识,而是收集对自己有用的知识
你缺的不是知识,而是整合知识的能力
主题阅读,不以读完一书一文为目的,能提取到想要的知识即可
读书为纲,上网为目。唯有纲举,方可目张
设定一个自己的长期学习规划
建立自己的常用信源清单
从一个关键词的解释中,提取到一堆关键词,链式反应
印象剪藏时不必纠结分类,多用关键词搜索
2.整理
合并同类,编织脑图,定期整理,持续更新
“小马过河,深浅自知”,别人的文章永远是别人的知识!
上面收集的那些知识碎片是我们有初步印象的知识,只不过因为太过碎片,尚不能够形成完整的知识体系。很多人以为把看到的文章保存到自己的笔记里面,就有一种已经掌握它的错觉,结果保存了成千上百的文章,却一篇都没回顾过。
别人的文章是他的知识沉淀,并不是自己的。定期回顾,并提取出文章中的精华,再经过自己的实践、思考、整理,才能形成自己的知识体系。这是一个很漫长的积累过程,而我们能做的唯有:坚持到底!
分类自底而上,先有了大量碎片,而后才有细致分类。
多用思维导图,整体把握脉络
定时整理笔记,归纳相似主题
印象笔记做摘录,为知笔记写原创
书写,不只是为了记录,更是一种思考方式
原始积累,越快越好,先求量大,再求质优
使用工具,而不是被工具使用
构建知识体系,服从于个人职业发展
预判使用场景,布局技术未来
以写论文的方式来整理
3.分享
寻找同好,讨论反思,自我激励,打造品牌
“常与同好争高下,不共傻瓜论短长”,教是最好的学习方式!
一方面,自己以为理解了不是真理解,把别人讲理解了才是真理解!如果能有读者和自己互动,那肯定比自己一个人闭门造车,更有积极性一点,人毕竟是社会性的,我们也渴望着别人的认可。一个人默默写笔记,可能能坚持写个十几篇,如果是公开写博客,有读者的反馈和认同,那可能更容易坚持下去一些。毕竟,写作,是一段孤独的旅程。
另一方面,在这个时代,对于生活中的绝大多数人来说,拓宽朋友圈子的途径几乎只有一个,通过网络,而如何在网络中寻找到气味相投的朋友,如何判断别人和自己是否有共同语言?显然,通过天天在SNS上碎碎念的那些日志是难以做到的。我很佩服那些长期用博客记录想法的人,因此,即使和他们素未谋面,也算是神交已久。
打造个人品牌,增加自己的影响力
跨时空的交流方式
记录自己的经历和成长
锻炼自己的表达能力
❾ 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软件工程师.到底需要哪些技术?
我很需要自我反思...
可能我今天说的都只是皮毛,也有很多欠考虑的地方...希望朋友指出...
也可以给我意见...
也许我看问题不全面,或是有偏见,也欢迎指出。