‘壹’ 程序员怎么提高自己的开发水平 知乎
自己研究啊,找点小项目来搞搞,搞着搞着你就对技术知道的多了,自己的技术水平自然也就上去了。
比如,自己写个WebServer,写完以后你就知道,从单线程响应http请求,到多线程响应;从只支持html,到支持图片、音频啥的,慢慢的,你就能体会server的基本原理;
再比如,自己写个网络爬虫,爬点天气预报数据、新闻啥的,从单线程爬,到多线程爬,从每隔一段时间爬,到每天定时定点爬,从爬不需要登录的,到爬需要登录认证的,完事后,啥是多线程、线程池、怎么模拟登录,你还能不明白?
爬到天气预报,那你还不写个小android/ios/html5程序,把天气呈现出来,从只呈现一个城市的,到呈现可以选城市的,从没有动画的,到有动画的...什么sqlite、自定义控件、handler、ajax、webservice你还会不熟?
我就这么干的,我不是程序猿,这只是我的爱好,但学习让我挺快乐。
‘贰’ 程序员入行后怎么提升自己
以下是我总结的五个方面,从上到下都是个有序的渐进过程,缺一不可!希望对你有帮助!
1. 通过分析目前的现状快速定位自我
什么是分析现状?这里的分析现状就是指充分明白目前自己在公司的位置,整个市场中的价值,自己的技术程度后。
当我们发现我们的技术落后了,待遇低于市场了,或者职级没得到发展,都可以视为对自己现状的分析认知,在这种先前条件下才能去定位自己。
这种定位手段可以通过社群社交,同行交流,博客技术论坛介绍的东西对比,更粗暴的方式就是面试,这样才能更好的完全的认识自己的不足,自己的短板,才能让自己掌握哪些方面需要去学习,从而得到有效的提高。
从宏观层面讲
现从宏观来讲,包括你的职级,你所做事情的影响力。如果你是领导,那么你有一定的主导权,你就应该让这种领导效益做到最大化,提高自身效率,提高团队协作,尽可能的让下属也得到提高,只有个人和团队一起发展,才证明你在发展。
如果事实不是这样,那么你确实是需要自我反省,自我认知了,不是做到领导就能觉得自己很厉害,相反你也要和其他领导做比较,是不是他的团队,人员更稳定,产出多,口碑好呢?
如果你非领导,只是一个核心开发,那么你也必须做到你负责的东西,如果你负责的这个框架,那么应该让这个框架做到稳定,易拓展,方便调用,甚至更多!
如果你开发的这个模块不够好用,甚至造成了其它新增的问题,那么你也要重新自我认识,技术高低并不是说你能写出多牛逼的框架和项目,而是你能做到每一件事完美解决。
从微观层面讲
微观相对宏观更细化,如果是领导,你自己是否做到了一个流程中任何环节的把关,推进和收尾总结,如果你有任何一点觉得交给下属办不好的事情,甚至觉得这个人无用。
那么你就应该摒弃这个可怕的思想,别人不是给你打工,你也是在给自己打工,如果下属能完全解决你交代的问题,那么你是不是该下岗了。
作为领导,情绪控制力,沟通能力,领导力,协作力,和为人口碑,都是影响你上升的关键因素,如果有不够好的地方,那么你已经定位到自己了。
作为普通的开发,新的框架你是否了解,项目现存的业务模式你是否熟悉,交流总结你是否做到,技术文档有去编写,其他技术方向有去拓展等,都能对比出自己不足的地方,这种通过对比的方法论是提高自我审视的最好办法。
2. 拓展自己的知识网络拓扑图,持续提高知识
上面我们通过通过分析目前的现状,可以快速定位出自我 。当你更好的认清自己的时候,你是时候去改变了,如果你缺乏沟通,你可以加强交流,试着多去参加群体活动。
如果你缺乏对新技术的掌握,可以去浏览各种论坛、官微、博客等涉取,从而弥自己的不足。如果你缺乏对基础知识的掌握,你可以去扎实基础,从而让自己的水平提高。
很多时候很可能我们掌握了项目中的技能之外,就懒得去学习其他技术,这种观念不能要,永远不能将对比参考点放在自己的项目组的成员中,一定要放到同行业的竞争者中,这样你才能知道自己需要去学习哪些技术。
就拿 Android 程序员来说,Rxjava、OKhttp 必须要掌握,插件,热更新技术、混合开发技术需要掌握,Java 基础、设计模式也需要懂,算法、数据结构那更不用说,学过计算机网络的人都了解网络拓扑的概念,上面这些都是我们需要拓展的知识网络拓扑图。
掌握更多的技能不代表让你去做全栈工程师,而是面对机会时你有更多的选择!目前的 Kotlin、JS, 甚至人工智能,也应该去关注!
3. 提高全量思维,不放过任何一个成长的机会
在平时的工作中,你需要放开眼界,持续提高并全面发展,甚至每一个成长的机会。举个栗子:
参加公司每一次对你有用的技术分享,从而学习到他人总结的知识。
尽可能多地参与公司的项目,从而达到量的改变,这样在领导眼里对于提升你来说就有更高更多的砝码,从小的方面来说你可以熟悉更多的业务,掌握更多的技能。
尽量去做框架和底层,杜绝一直以业务开发和上层开发为主。这样你才能在团队中脱颖而出,才能得到好的认可。
上面三点都是对内层面,相反多外层面来说,你需要时刻关注行业动态,若有更好的平台,更好的机会,不能抱着害怕甚至排斥的态度,应该勇于去挑战,去尝试。
上面的每一个做法,都有提高待遇的可能,待遇就是每一个细节的积累,最后沉淀出果实。你的综合能力提高了,薪资待遇也自然而然的提高。
4. 养成规划职业生涯意识,关注职业素养
程序员一定要养成职业规划意识,千万不能有我牛逼我就跳槽,不爽就跑路的思想,从我这几年的开发观察来看,除了学历的筛选,加上技术的参考,更多的公司慢慢考核候选人的稳定程度。
不跳槽不能说一定是敬业,跳槽也不能说这个人就一定不忠心,在同样的水平之下,企业更愿意找稳定的人,我也曾面过很多人,我也会衡量面试者的稳定程度,毕竟稳定程度也能反映出他处事的能力。
职业规划另一个含义是每一个阶段有一定的 level 提高,从初级、中级、高级,架构师、总监、CTO 都是一次飞跃,无论你是对内,还是对外,长时间无法提高,那么也该去关注职业规划了。
很多人不明白,在一家公司服务时间短,会认为不靠谱,服务时间长,但是没任何发展会被认为你不够聪明,无论哪一种,目标企业都不会喜欢。
5. 机遇和运气很重要
善于抓住机遇,有助于自己成功,上面第三点说的只是小的机会,机遇是一个大的质的改变,这个就靠自己的眼界,观察去发现了,大佬们无非就是加上自己的努力,长时间的积累,靠一个机遇稀里糊涂的成功了。
由于这个是非必须因素,这里我也不打算用过多篇幅去说明。只要你知道这个有这么个理就行了
‘叁’ 如何程序员提高自己的逻辑思维
1、 学习一门脚本语言
可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:
处理文本文件,或者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…<</p>
了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
了解正则表达式,使用正则表达式来查找文件。
对于程序员来说Unix/Linux比Windows简单多了,学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。
4、 学习Web基础(HTML/CSS/JS) + 服务器端技术 (LAMP)
未来必然是Web的世界,学习WEB基础的最佳网站是W3School。
学习HTML基本语法
学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
学会用 Firefox + Firebug 或 chrome 查看你觉得很炫的网页结构,并动态修改。
学习使用Javascript操纵HTML元件。理解DOM和动态网页,网上有免费的章节,足够用了。或参看 DOM 。
学会用 Firefox + Firebug 或 chrome 调试<</p>
在一台机器上配置Apache 或 Nginx
学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
跟完一个名校的网络编程课程,不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上
学习一个+ Ajax (异步读入一个服务器端图片或者数据库内容)+JSON数据格式。
HTTP: The Definitive Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)
做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)
买个域名,租个空间,做个自己的网站。
‘肆’ 浅谈程序员如何提高自己的编程速度
1.提高你的打字速度
用搜狗等中文输入法聊天/写文档与写代码切换时,养成直接切回系统英文输入法的习惯。都是一个快捷键的事,省去不少麻烦。
2.顺手的键盘
机械键盘还是笔记本那种键盘,抑或10块钱一个的随机赠送键盘,总之挑一个自己适合的。
3.远离鼠标
鼠标的定位功能远没有键盘精准。用光标键移动几下,和鼠标移动几十个像素,速度上完全不能比。并且敲键盘是讲究节奏的,当你双手都放在键盘上的时候,如果为了某些操作,而去拿鼠标,就会破坏这个节奏,这样会影响你的输入速度。所以能不用鼠标就不用鼠标,遇到一定要去菜单里点个东西的时候,不放去看一眼快捷键是什么,然后双手回到键盘,用快捷键完成输入。
4.标准键盘指法
对于一个程序员来说,提高编程速度。一个标准的键盘指法是非常重要的。只有熟练的用标准键盘指法,达到快速盲打就非常容易了。
5.熟悉编辑器常用操作
学会控制光标的基本操作:行首,行尾,页首,页尾,整词移动,常用的书签功能。
6.复制粘贴
复制粘贴经常用的是ctrl+c和ctrl+v,简单快速。
7.中文的问题
避免不了会输入中文,但不要把中文设成默认输入法,并且把ctrl+space的输入法切换快捷键改成生僻一些的,避免误操作切换出来
8.强调基础知识
基础这个东西不是靠说就能有的,常用的东西只有牢牢的记住熟练了才能了然于胸。如果你还在为一个基础函数参数返回值困扰,那你要多去背背理解基础知识别无它法。
9.重思考
一段好的代码并不是它们越复杂越好,简单实现复杂功能才是我们最需要的,liunx内核代码虽大,但是那些精典的算法实现的代码精炼的不能再精炼了。要提高编码速度更重要的是简化梳理程序流程,以最小的代码量完成功能。所以编程最重要的事情是思考。
‘伍’ java程序员怎么提高自己
最重要的是你必须对Java编程有热情!(不是兴趣,是热情),热情是有成就感之后才有的。
第二重要的就是学习Java的东西的时候你还要想为什么人家要这么做,不那么做。
第三个重要的就是学习基础的时候一定要好好学,学的扎实,因为基础就是最重要的也是最简单的。
等你看完第一本Java基础的书之后,你就可以做一些Java的程序了。
做出来Java程序以后你肯定会更对Java编程有兴趣的,因为你会有那种成就感的!
然后在学比较实用的东西,比如说Swing,Spring, Servlet等等
在学的时候你要不断的通过做程序的方法来得到成就感!
然后你还要学习设计。设计程序是艺术。美的设计能让程序跑的快,不会出错,好管理。
就想一栋屋子似的,要是设计的不好的话稍微地震一下就塌了,要是设计好的话9级地震都没问题。
你会发现编程其实是一种艺术。
‘陆’ 初级程序员,该如何提高
1.程序员的方向其实差异还是蛮大的。往往一个做硬件编程的完全搞不懂什么敏捷开发之类,所以要看你以后的工作方向。有针对性的在你的方向上把能力提高上去。当然,有一些程序员共性的知识,就像你提到的计算机原理 算法和编程思想等等,虽然不同方向上有差异,而且对这些理解不深刻也不妨碍你工作的顺利展开。
在计算机原理方向,《计算机程序的构造和解释》做完里面的习题感觉收获特别大!不过这是一个慢功夫,急不得。《深入理解计算机系统》过多的赞美都是浪费。
算法的话,不过不是专门搞算法的话,看一下《算法导论》就可以了吧。如果还比较感兴趣的话,可以去做一下Topcoder的Single Round Match,很有挑战性!几乎在中国的每个大学里面,总有那么一群搞ACM的人,如果你感兴趣可以和他们成为朋友,会有很多收获。
编程思想,这个就属于仁者见仁智者见智的话题了,不同类型的语言他们的思想也有差异(个人理解) 面向过程的,面向对象的,函数式,静态,动态,并行的。。。找到个自己感兴趣的,玩玩OK,兴趣不能当饭吃。
先把自己工作的东西搞清楚了,有饭吃,然后回来补基础,我觉得是一个比较明智的决定
‘柒’ 程序员如何提升自己
如果程序员就业在大型科技企业(互联网),那么完全可以在岗位工作任务中获得持续地提升。由于大厂往往具有较强的资源整合能力,而且对于开发人员的提升有比较详细的规划,所以程序员的提升通道通常也比较多。
对于在创业型公司,或者是规模比较小的软件公司发展的程序员来说,要想获得提升,既需要借助于岗位工作任务,同时也需要有一个自主学习计划。岗位工作任务的技术含量和上升空间对于程序员的提升有较大的影响,如果整个团队的技术研发能力比较强,而且研发方向比较专注,那么对于程序员的提升还是有较大帮助的。
自主学习对于程序员的提升也有比较明显的影响,在内容的选择上,既要考虑未来的发展趋势,同时还要结合自身的知识结构和能力特点,如果自主学习的内容能够再结合当前的岗位任务,那么学习的效果会更好一些。
‘捌’ 程序员怎样不断持续提高自己的技术水平,并且提升自己
尝试你现在业务可能没直接关系的IT领域,会触类旁通。
1.你可以去随便去个程序知识学习的网站,避免打广告嫌疑,我多举几个例子:菜鸟教程,w3school这些。(教程基本都一样,版块多少可能有差别)然后随便找个领域学。你会发现你迟早都用的 上,还能加深你对已有技能的理解。
当然,最好的是,针对你当前的水平量身做计划。
比如 你只会Java web开发,你可以学下安卓,懂懂前端知识,对于你如何写后端很有好处。同时,前端视图层次这些的知识,对于你写和理解Web前端,比如H5这些很有好处。
2.多脱离IDE
学习那些不用什么IDE一样用的编程语言,ruby这些。用终端+文本编辑器编程。
学习Linux,多了解系统命令。
汇编入门,对计算机多了解。可以买块开发板试试单片机编程。
。。。。。。
你懂的越多,学习速度会越来越快的。这就是登堂入室了。
我举个例子,我现在处于登堂入室,我以前1个月学的东西,现在2天学完,理解还更深刻。学习一门新的编程语言,几个小时可以初步用于开发。负载均衡,智能硬件,移动开发,web前端,后端。。全都会
3.多尝试
比如手工建立个人网站。参考下我的 www.zhengyutian .com
多写博客等等
‘玖’ 新手程序员该如何快速提升自己
掌握一个方向,方向很重要,不要东学一点,西学一点,这样很容易迷失,不知道自己学什么,有了方向,多去看,多去学,最主要的是要有动手的能力,光看是没有用的。