什么是软件工程师?
软件开发工程师是从事软件开发相关工作的人员的统称。 软件开发工程师的技术要求是比较全面的,除了最基础的编程语言(C语言/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)、.NET平台技术、C#、C/S B/S程序开发,还有诸多如JAVA SCRIPT、AJAX、HIBERNATE、SPRING、J2EE、WEB SERVICE、STRUTS等前沿技术。
职业生涯
软件工程师的职业生涯要历经以下几个阶段:初级、中级,最后才是高级。
怎样去做?
软件工程是很难做的。因为这一行业在不断变化中,所以你必须得跟上时代的脚步,不要被时间抛弃在后头。你必须投入比其他人更多的时间与精力,把它当成你生活中最要的一部分,因为你要学的东西永远大于你要吸收的东西,也有很多无止境的东西让你去学习。很多出入门槛的工程师都不曾意识到她们需要攀登的将是一门高峰职业,需要去学习的东西、得需要付出多少的时间与精力去获得,且有时候你付出的不一定正比于你得到的,因为这一行往往看你的悟性。不过,不用太过于担心,下面我给大家分享一些经验让大家至少不会走很多弯路。
首先
条条大路通罗马。既然你选择了这行,你就必须咬牙坚持下去,而不是半途而废。做人贵在原则,做事贵在坚持。就像Doug McIlroy《Unix Philosophy》中所讲到:做一件事,就要把它做好。我想,这样的道理很多人都知道,但是又有多少人坚持下去了呢?
。选择好你将与之并肩作战的专业和技术堆栈非常重要。坚持不懈,不要分心。至于应该怎么做有以下看法可供参考:
选择专业。也就是你想做的事情同你感兴趣的专业。只有在自己喜欢或者感兴趣的前提下,你才会有动力坚持下去,这就好比你喜欢什么样的女孩,什么样的女孩是你喜欢的你才会去追求。这一块也是这样,你对哪项专业感兴趣,你喜欢哪行专业,你才会一直坚持下去。例如:Web开发、移动开发、DevOps等。
选择专业中的实用技术。这就要看是不是符合自己的自身情况了,哪一项技术你觉得你更能入手,哪一项自己能够接受就选择哪一项使实用技术了。这就好比汽修,有汽车美容、汽车维修等等,如果你觉得你更能够接受汽车美容,就选择汽车美容,而另外即是如此。通过这个实例来放在这块上面也是一样的,你觉得你更能够接受哪块,你就选择哪块。例如:如果你选择了Web开发,那你就需要在Ruby on Rails、Python、Django,JavaScript和MEAN等之间做斟酌。如果你选择的是移动开发,则需要在iOS和Android等之间做出选择。
坚持下去,直到掌握这门技术。
当然,在这里我的意思并不是说除了你自己的专业之外,就不要熟悉其它的了,熟话说的好,技多不压身。那种首屈一指的软件工程师通常对其他的编程语言和技术都非常了解,当然首先他们对他们自己的主要专业了解得非常剔透。当你确定好主要专业之后,接下来要做的就是学习,阅读所有相关的书籍、练习各种必要的技能,这可能需要很多年的时间。但是千万不要气馁,一步一个脚印,一个一个攻克难关,这个是靠慢慢积累而来的,并不是当即见效。量变才能达到质变。关于技术,我的推荐是:Ruby on Rails之于web开发,iOS之于移动开发。这也是仅仅是个人的看法,可能每个人的口味不同,你完全可以选择其他的技术,不过这样的话,你要阅读的书籍可能就和我的推荐不一样了。
各位大佬可来学习学习群621071874,共同进步,共同学习。
一、奠定基础
《The Pragmatic Programmer 》对于我们掌握软件是一个很好的起点。该书总结了高水平的实践探索。这与我们使用的是什么语言/技术无关。无论你选择的是哪种技术堆栈,其主要原理都是一样的。
The Pragmatic Programmer
二、掌握你的编程语言
你以后每天需要面对哪种编程语言取决于你今天选择的技术。但是编程语言总有主次之分。例如,Ruby on Rails开发人员主要使用Ruby,AngularJS开发人员大多数时间用的是JavaScript。确定编程语言、掌握编程语言对你的职业生涯发展至关重要。因为以后你每天都会使用它!推荐你先阅读有关书籍。
《The Swift Programming Language》之于Ruby开发人员,以及《Programming Ruby 》之于iOS开发人员。
三、学习框架
选一个,然后好好学习:常用的框架比较,用自己喜欢的框架
四、掌握文本编辑器/ IDE
再选一个,然后坚持不懈地掌握这个工具。如果你选择的是VIM,那就要成为它的主人,让它往东就往东。
五、使用版本控制系统
版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。推荐使用GIT。
六、做好测试驱动开发
将TDD添加到你的技术堆栈中。养成每天TDD的习惯。高质量的代码源于良好的测试。
对于Ruby on Rails开发人员——《Rails Test Prescriptions》
对于iOS开发人员——《Test Driven iOS Development》
七、将重构养成习惯
随着你不断添加更多的功能,代码库也会越来越复杂。为了保持代码库的可管理化,你需要重构。如果你不重构的话,你很快就会进入两难境地——即使是做很小的改动都很困难、bug没法避免、没有人愿意处理这个凌乱的代码库。重构能让你的工作更加轻松。事不宜迟,赶快养成重构的习惯吧。下面这本好书能教你该怎么做:《Refactoring: Improving the Design of Existing Code》by Martin Fowler。
八、学习软件架构
根据你上面选择的堆栈,再学习相关的架构。我推荐Martin Fowler写的《Patterns of Enterprise Application Architecture》一书。
九、展示命令行的力量
刚开始接触命令行的第一感觉就是望而生畏。但是,一旦你学会如何使用,这将大大提高你执行一些基本任务的效率。而这本身就能让你成为一名更好的开发人员,因为你能在更短的时间里实现目标。然后你就能进入下一个水平。使用shell自动执行常见任务,建立自己的dotfiles。如果你使用的mac或者Linux发行版,那么学会shell。下面这本书由Mark Bates所写的书挺不错:《Conquering the Command Line》。
十、code code code
只有不断的实践、不断的充实自己、不断的学习,你才能够掌握它。
最后
大家都知道,想成为一名优秀的高级程序员是多么的困难。你要付出比别人多出多少倍的时间与精力,且这是需要时间的沉淀的。“天才是百分之一的灵感,百分之九十九的汗水”后面那一句到底是什么?有多少人知道?“但那百分之一的灵感是最重要的,甚至比百分之九十九的汗水都要重要”,的确有时候那1的灵感着着实实比那99%的汗水更重要,而把它引入这里,那这1%的灵感就好比悟性,你再努力,如果你的悟性低,可能相对于那些比你悟性高的人来说,你可能需要更长的时间来成为高级程序员。软件工程师的每一天都在面临挑战:挑战改变人们的生活。来吧,各位软件工程师,首先挑战成为一名高级软件工程师吧!