程序员的快速成长之路


在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客、文章及杂志分成两类:面向初学者类("hello world"这种类型的教程)以及面向专家类(MSDN杂志)。这个观点很好,有关程序员如何从初级跃升到中级的信息极少。以下是为了实现这种转变需要你去做的10件事。

1. 学习另一门语言

其实你学的是哪一门语言并没有关系,但是学习另一门语言(不管你已经了解多少种语言)将把你打造为更好的程序员。能学会一门与你日常使用的语言风格迥异的语言则更佳。打个比方,如果你是C#程序员,学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大。

我说"学另一门语言"的意思是要真正学会它。学习一门语言包括三个领域的知识:语法、内置操作符和库,以及"如何使用"。前面两个简单;我认为一名有经验的程序员,根据语言的不同,能在半小时到几小时内掌握足以维护代码的语法知识。操作符和库只不过是知识逐步积累的过程,你什么时候想清楚要了解什么了,再去查阅参考材料也不迟。只有第三项,"如何使用它"-要花上你几个月的时间去跟这门语言打交道,真正的奇迹就在此发生。我建议用这门语言的风格去做一个适合该语言的项目。

真正学会了另一门语言之后,我敢保证你的程序员水平一定会突飞猛进。

2. 学习先进的搜索技术、手段和及策略

作为一名好的程序员,不仅仅是技能的问题了,而是你寻找信息的技巧,这个趋势越来越明显。对大部分人而言,仅仅输入"现代语言及开发框架",这都是泛泛之谈,记不住多少的。因此,你完成工作的能力通常取决于你的检索能力。不幸的是,了解到如何找到准确而高质量的信息可不仅仅是跑到TechRepublic来找答案,或者在你选好的搜索引擎上敲几个字那么简单。

"技术(Techniques)"、"手段(tactics)"和"策略(strategies)"看起来是一回事,实际上并非如此。你需要学会的技术是掌握你喜爱的搜索引擎的高级搜索系统;你需要了解诸如布尔操作符,如何过滤结果(像"非"关键字,域限制等等),关键字的词序扮演什么角色,等等。一句话,RTFM(Read The Fucking Manual,读那些他妈的手册)吧。

你应该学会这些手段,诸如如何接近特定的搜索,以及了解自己实际上想查些什么。查错误很容易—只需查出错代码即可—但是许多搜索的关键字选择要困难得多。

至于策略,你需要学会的东西,包括像应该使用哪种搜索引擎(提示:普通的搜索引擎不一定就是最佳选择),使用普通搜索引擎前应该访问哪个网站,甚至是应该到哪个论坛去寻求帮助,等等。

3. 帮助别人

教别人始终是学习一切东西的最好方法之一。相对而言,由于你在开发领域还是个新手,认为自己没什么可教给人家的,这可以理解。但这毫无意义。记住,你所学到的一切都是你从别人或别处学到的;因此请尝试一下,成为另外一个人要请教的"别人"。每天尽量花一点时间试着回答TechRepublic上的问题,其他网站的亦可。读读其他会员的回答,你也可以学到很多东西。

4. 有耐心,常练习

研究表明,要成为一名"专家",需要花费10年,或者10000到20000小时的刻意练习时间。真的很久。还有,成为专家不尽然就是执行10年同样的任务;通常这意味着要在特定领域内执行广泛的任务。需要花费大量的时间和精力才能成为"专家";做几年程序员是不够的。想在30岁左右成为一名高级软件开发工程师?要么尽早接受教育/培训,要么你得愿意在闲暇时间进行大量的工作、阅读和练习。我从高中开始编程,还牺牲了许多休息时间去跟踪行业发展、学习新技能等等。结果,我获得中级和高级程序员的时间就比我的大部分同事都要早得多,随着时间的推移,这些就转化成为很多的金钱。

5. 对教条拒之门外

是时候开诚布公了:也许初级程序员了解的东西还不足以说出做某件事情有一种最好的方式。尊重朋友或者权威的观点是好的,但直到你更有经验之前,不要把他们的观点说成是你自己的。很简单,如果你所了解的不足以让你独立地找出这些东西来,你又怎么会认为你知道哪一位"专家"是对的呢?话是难听了点,不过请相信我;由于受某些愚蠢建议的蛊惑,或者追随某些根本不知道自己在说些什么的所谓专家,白白把自己的职业生涯耽搁了几年,这样毛头小伙程序员,我见过多了。这一点有一个很好的例子,就是面向对象结构的滥用。比如说,许多初级者读了一些有关面向对象的信息后,突然间,他们那简单的应用程序的类图看起来就像埃菲尔铁塔一样了。

6. 深入学习一点先进理念

成为一名中级程序员,很大一部分是要在代码里面体现出一些所擅长的概念。就我而言,是多线程/并行性,是正则表达式,以及如何对动态语言进行变化(后两个在我离Perl渐行渐远后开始退化)。这是如何发生的?多线程和并行处理是因为我读了相关文章,觉得它看起来很有趣,然后再自己把它弄清楚了;然后我就一直使用这些技术来写应用。我做过一件工作,是用Perl写的,里面运用了大量的正则表达式。我也用一个过程引擎模板和内置数据库系统写过我自己的电子商务引擎;那时我几乎花了2年时间在这上面。

找到真正令你着迷的东西。也许是图像处理,也许是数据库设计,等等。即便你是一个入门级的程序员,也要尝试一下成为某一自己所关注领域的专家。这会让你相当快速地进入到中级水平,一旦你到了那个水平,你的专家之路也走到一半了。

7. 学习你的领域里面的基本理论

写出"Hello World",跟理解那些字是如何显示到屏幕上的是两码事。通过学习支撑你所从事的工作的"基础/底层工作(groundwork)",你会变得更加在行。为什么?因为你会理解事物为何会以这种方式运作,当东西坏了就能知道是哪里的问题,等等。通过掌握工作的底层机制,你变会得更出色。

如果你是Web程序员,读读HTTP RFC和HTML规范。如果你使用代码生成器,好好看看它生成的代码;如果你使用数据库工具,看看它生成的底层SQL语句,不一而足。

8. 看看高级程序员的代码

在工作中看看高级程序员写的代码,然后问一问事情是如何以某种特别的方式完成的,为什么?可能的话看看开源的项目。甚至即使其他程序员没有最好的编程习惯,你也会学到许多编程经验。当然,要小心别学到坏习惯。我的意思是说不要生搬硬套人家的东西;你要能领会到哪些是能行的通的,哪些是有道理的,然后再模仿人家。

9. 学习好的习惯

愚蠢的变量名,糟糕的缩进习惯以及其他一些凌乱的迹象就是一个没有经验的程序员的最好标记。一个程序员在学会如何编程时,却经常没有被传授到那些不那么有趣的细节,像代码格式编排。甚至尽管学习这些东西并不会令你的代码更好,也不会令你成为更好的程序员,它也会确保你不被同事视为入门级的程序员。甚至即使某人是高级程序员,如果他的变量是以他那97只猫的名字来命名,或者其函数叫做"doSomething()"的,他们看起来也不像是知道自己在干什么的人。而且会令其代码在过程中更难以维护。

10. 要玩的开心

想要痴迷于单调乏味的工作?痛恨工作吧。要想升级为中级程序员可不仅仅是为了拿到不断增长的工资不达目的誓不罢休,而是要真正享受工作。如果你不喜欢自己的工作,且还是初级程序员,你怎么会认为成为中级或高级程序员情况就会有所好转呢?换工作或改职业吧。反过来说,如果你喜爱所从事的工作,那就好!只要你坚持下去,我保证你能成为一名更好的程序员。(Justin James)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 强制 断开,ORA-01092: ORACLE 例程终止 强行断开连接

今天测试部门的人叫我过去,说是数据库当了,起不来了。我过去看了看情况,做了如下操作SQL> shutdown immediate数据库已经关闭。已经卸载数据库。Oracle 例程已经关闭。SQL> startupORACLE 例程已经启动。Total System Global Area 135…

weblogic运行项目_在WebLogic 12c上运行RichFaces

weblogic运行项目我最初以为我可以在几个月前写这篇文章。 但是我最终被不一样的事情所淹没。 其中之一是,它无法像我在4.0版本中那样简单地启动RichFaces展示柜。 有了所有的JMS magic和不同的提供程序检查,这已经成为简单构建和部署它的挑战。 无论如何…

超详细在Ubuntu下安装JDK图文解析

我们选择的是jdk1.6.0_30版本。安装文件名为jdk-6u30-linux-i586.bin. 1、复制jdk到安装目录 (1)假设jdk安装文件在桌面,我们指定的安装目录是:/usr/local/java 。可是系统安装后在/usr/local下并没有java目录,这需要…

oracle 整个表空间迁移,oracle11g迁移表空间

表空间名为sbjc,要从D:\APP\ORACLE\ORADATA\TABLESPACE\SBJC.DBF 迁移到 F:\oracle\oradata\tablespace\SBJC.DBF。 扼要操作步骤: 第一步:登陆数据库 第二步:中止数据库 第三步:在open方式下启动数据库 第四步&#x…

Qt5使用QFtp,二次封装

1、需要的东西 ftp.cpp,ftp.h是二次封装的ftp类,放在工程下包含 QFtp和qftp.h放在D:\Qt5.7.1\5.7\msvc2013\include\QtNetwork; Qt5Ftp.lib和Qt5Ftpd.lib是编译生成的库,放在工程源文件下 2、包含库 #pragma comment(lib,"Qt5Ftpd.lib&q…

无参数泛型方法反模式

最近&#xff0c;有关Java泛型的一个非常有趣的问题发布到Stack Overflow和reddit上。 考虑以下方法&#xff1a; <X extends CharSequence> X getCharSequence() {return (X) "hello"; }尽管不安全的转换看起来有些古怪&#xff0c;并且您可能会猜这里有些问…

oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...

升级失败后&#xff0c;数据库降级方案(flashback database)环境&#xff1a;Oracle 11.2.0.1 rac on redhat 5.8Flashback database准备工作查看是否flashback database功能sysRACDB>select log_mode,open_mode,flashback_on fromv$database;LOG_MODEOPEN_MODE …

Ubuntu下安装Oracle11g(图文教程)

由于课程需要&#xff0c;要在Ubuntu下安装一个Oracle&#xff0c;之前都没有装过&#xff0c;所以想通过这篇博文记录一下 1.下载Oracle 11g 下载地址&#xff1a;http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index-092322.html 我选择下载的是…

class12_pack_grid_place 放置位置

其中的部分运行效果图&#xff08;程序见序号1&#xff09;&#xff1a; #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------------------------------## 参考资料&#xff1a;# 用 python 和 tkinter 做简单的窗口视窗 - 网易云课堂# https:…

oracle强制执行计划,OBA技能2-Oracle执行计划顺序表连接

小仙我在学习索引执行行为的时候&#xff0c;有个疑惑&#xff1f;那就是索引是找到一个值就马上回表&#xff0c;然后再找下一个值&#xff0c;再回表。比如索引唯一扫描&#xff0c;索引范围扫描&#xff0c;索引全扫描&#xff0c;索引快速扫描。好像都是要回表。尤其是范围…

ubuntu中启动oracle数据库

前期准备&#xff1a;如果你还没有在ubuntu上安装oracle请先看我之前到日志http://blog.csdn.net/backtracker/article/details/66247181. $su oracle $ sqlplus /nolog 将出现如下连接数据库信息&#xff1a; SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jul 8 10:1…

oracle 输出到页面,利用Xming 将Linux 图形界面输出到Windows上

Linux上安装Oracle 时需要图形界面, 但又不想在服务器上安装图形界面怎么办,这时候就需要用到Xming 这个神器了安装过程比较简单, 直接下一步下一步即可安装完成后先运行, Xlaunch注意:这个No Access Control的勾勾一定要勾上,否则 执行export到Windows主机上时会提示 No proto…

spring 事件模型_Spring–设计领域模型和服务层

spring 事件模型我们将为时间表管理构建应用程序。 因此&#xff0c;让我们首先考虑一些用例和实体。 让我用几个项目符号写它们&#xff1a; 任务由经理分配给员工。 一项任务可以分配给许多员工。 员工将他在某些任务上工作的小时数填充到系统中。 经理/员工查看时间表上的…

log4j/slf4j

log4j的使用 引入log4j.jar包<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency> 配置log4j.propertieslog4j.rootLoggerINFO,Console,OneFile,errFile #输出到控制…

Ubuntu 12.04下安装Oracle Express 11gR2

Ubuntu 12.04下安装Oracle Express 11gR2 [我的笔记] 参考1&#xff1a;http://www.linuxidc.com/Linux/2012-09/71382.htm 参考2&#xff1a;http://zhjack.blog.163.com/blog/static/14314920137153331286/ 1、点击这里下载Oracle express的安装介质 Oracle Database Express…

选择的按钮:将ToggleButtons用作单选按钮

对于MQTT.fx&#xff0c;我想使用ToggleButtons例如选择MQTT消息或QoS级别的解码&#xff1a; 我发现在ToggleGroup的上下文中&#xff0c;ToggleButton在选择/取消选择方面的行为与RadioButtons不同&#xff1a;与RadioButtons不同&#xff0c;ToggleButtons仍可以设置为未选…

php调用image类提示不存在的字体,php – 无效的字体文件名(imagettfbox)

这个问题一直被问到,但是我找不到我问题的正确答案……作为一个小背景说明,在将类文件从/ application / lib / class移到/库之前,所有代码都运行良好/ class ……我试过玩GDFONTPATH,相对的,绝对路径有和没有文件扩展名无济于事.以下是我们迄今为止尝试的一些行&#xff1a;pu…

linux文件属性之用户和组基础知识

root :x :0 :0 :root :/root :/bin/bash 账号名称 &#xff1a;账号密码 &#xff1a;账号UID &#xff1a;账号组GID &#xff1a;用户说明 &#xff…

Oracle常用命令大全(经典收藏)

一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户&#xff0c;如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup SVRMGR>quit b、关闭ORACLE系统 oracle>svrm…

oracle共享服务器模式的图,Oracle 11g笔记——专有服务器、共享服务器模式

专有服务器模式&#xff1a;适合批处理和大任务的应用共享服务器模式&#xff1a;适合有大量并发用户的应用共享服务器模式&#xff0c;处理过程&#xff1a;1、调度进程(Dispatcher)接受多个客户端(用户进程)的连接请求&#xff0c;并把这些请求放到一个公共队列中。2、空闲的…