当前位置: 首页 > 编程日记 > 正文

成为优秀高级程序员的10个要点(转)

英文原文:10 Steps to become a Senior Software Engineer

What

软件工程师的职业生涯要历经以下几个阶段:初级、中级,最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。

Why

  • 得到更多的报酬!因为你的薪水会随着你水平的提高而增加
  • 提升你的职业生涯。成为了高级软件工程师之后,就可以朝着架构师、团队负责人、CTO 等职位前进
  • 历经更大的挑战。随着你的成长,各种影响力也会提高。

How

软件工程是很难的。这一行业在不断变化中,所以你必须紧跟它的步伐。你必须不断地投入时间和精力,因为你需要学习的东西总是比你能吸收的多。很多新手工程师甚至都不曾意识到他们如果想要攀登行业的高峰,要学习的东西、要付出的努力得有多少。不过,不用担心,下面我将指出一条“明路”有助于你成为一名高级软件工程师。

image

步骤0:选择你的道路,坚持下去!

做一件事,就要把它做好。——Doug McIlroy《Unix Philosophy》

关于这一点,我真的是强调得不能再强调了。选择好你将与之并肩作战的专业和技术堆栈非常重要。坚持不懈,不要分心。至于应该怎么做请看下面:

  • 选择专业。也就是你想做的事情。例如:Web 开发、移动开发、DevOps 等。
  • 选择专业中的实用技术。例如:如果你选择了 Web 开发,那你就需要在 Ruby on Rails、Python、Django,JavaScript 和 MEAN 等之间做斟酌。如果你选择的是移动开发,则需要在 iOS 和 Android 等之间做出选择。
  • 坚持下去,直到掌握这门技术。

我的意思并不是说除了你的主要专业以外,你就不必熟悉其他的了。那种首屈一指的软件工程师通常对其他的编程语言和技术都非常了解,当然首先他们对他们自己的主要专业了解得非常剔透。当你确定好主要专业之后,接下来要做的就是学习,阅读所有相关的书籍、练习各种必要的技能,这可能需要很多年的时间。但是千万不要气馁,一步一个脚印,一个一个攻克难关,量变才能达到质变。关于技术,我的推荐是:Ruby on Rails 之于 web 开发,iOS 之于移动开发。这是我是以一个过来人的身份告诉你的宝贵经验。不过我还是想补充一句,可能每个人的口味不同,我的经验也许并不适合你,你完全可以选择其他的技术,不过这样的话,你要阅读的书籍可能就和我的推荐不一样了。

步骤1:奠定基础

《The Pragmatic Programmer 》对于我们掌握软件是一个很好的起点。该书总结了高水平的实践探索。这与我们使用的是什么语言/技术无关。无论你选择的是哪种技术堆栈,其主要原理都是一样的。

步骤2:掌握你的编程语言

你以后每天需要面对哪种编程语言取决于你今天选择的技术。但是编程语言总有主次之分。例如,Ruby on Rails 开发人员主要使用 Ruby,AngularJS 开发人员大多数时间用的是 JavaScript。确定编程语言、掌握编程语言对你的职业生涯发展至关重要。因为以后你每天都会使用它!推荐你先阅读有关书籍。

《The Swift Programming Language》之于 Ruby 开发人员,以及《Programming Ruby 》之于 iOS 开发人员。

步骤3:学习框架

选一个,然后好好学习:

对于 Rails 开发人员——《Rails Tutorial 》by Michael Hartl

对于 iOS 开发人员——《iOS programming: The Big Nerd Ranch Guide》

步骤4:掌握文本编辑器/ IDE

再选一个,然后坚持不懈地掌握这个工具。如果你选择的是 VIM,那就要成为它的主人,让它往东就往东。

步骤5:使用版本控制系统

我建议使用 Git。下面是我喜欢的资源:Pro git——免费的在线电子书,详细讲解了 git 的各个方面。

步骤6:做好测试驱动开发

将 TDD 添加到你的技术堆栈中。养成每天 TDD 的习惯。高质量的代码源于良好的测试。

对于 Ruby on Rails 开发人员——《Rails Test Prescriptions》

对于 iOS 开发人员——《Test Driven iOS Development》

步骤7:将重构养成习惯

随着你不断添加更多的功能,代码库也会越来越复杂。为了保持代码库的可管理化,你需要重构。如果你不重构的话,你很快就会进入两难境地——即使是做很小的改动都很困难、bug 没法避免、没有人愿意处理这个凌乱的代码库。重构能让你的工作更加轻松。事不宜迟,赶快养成重构的习惯吧。下面这本好书能教你该怎么做:《Refactoring: Improving the Design of Existing Code》by Martin Fowler

步骤8:学习软件架构

根据你上面选择的堆栈,再学习相关的架构。我推荐 Martin Fowler 写的《Patterns of Enterprise Application Architecture》一书。

步骤9:展示命令行的力量

刚开始接触命令行的第一感觉就是望而生畏。但是,一旦你学会如何使用,这将大大提高你执行一些基本任务的效率。而这本身就能让你成为一名更好的开发人员,因为你能在更短的时间里实现目标。然后你就能进入下一个水平。使用 shell 自动执行常见任务,建立自己的 dotfiles。如果你使用的 mac 或者 Linux 发行版,那么学会 shell。下面这本书由 Mark Bates 所写的书挺不错:《Conquering the Command Line》

步骤 10:code code code!

只有不断地练习学到的知识,你才能真正掌握它。

总结

众所周知,成为一名高级软件工程师是非常难的。这需要大量的时间和精力。不同的人他们的学习速度也不尽相同,但是平均来说,大约需要 10 年时间才能成为一名可靠的高级开发人员。你付出的各种投资最后必将给你带来巨大的回报。软件工程师的钱途很美好,其就业市场的需求一直居高不下,薪资水平也根据经验程度在提高。这是一个快速增长且相对较新的领域。软件工程师的每一天都在面临挑战:挑战改变人们的生活。来吧,各位软件工程师,首先挑战成为一名高级软件工程师吧!

译文链接:http://www.codeceo.com/article/10-steps-to-become-a-senior-software-engineer.html

http://news.cnblogs.com/n/512952/

相关文章:

count http://www.cplusplus.com/reference/algorithm/count/

// count algorithm example#include <iostream>#include <algorithm>#include <vector>using namespace std;//count 他查找一个元素出现的次数int main () {int mycount;// counting elements in array: int myints[] {10,20,30,30,20,10,10,20}; // 8…

Clip Studio Paint 高级着色学习教程

剪辑工作室颜料着色专业指南&#xff01; A Pro’s Guide to Coloring With Clip Studio Paint! MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:2.78 GB |时…

Java学习总结:50(扫描流:Scanner)

扫描流&#xff1a;Scanner Scanner类定义在java.util包中&#xff0c;所以此类是一个工具类&#xff0c;利用它可以方便地实现数据的输入操作。 Scanner实现了Iterator(迭代)接口与Closeable接口。 Scanner类中定义的常用方法如下&#xff1a; No.方法类型描述1public Scann…

圣杯和双飞翼布局

//圣杯布局-wrap设置padding/left right加相对定位 <!DOCTYPE html> <html lang"zh-CN"> <html> <meta charset"utf-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"/> <title>&…

2022-2028年中国干电池制造行业产销需求与投资预测分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国干电池制造行业市场行业相关概述、中国干电池制造行业市场行业运行环境、分析了中国干电池…

JQuery中的事件以及动画

嘿嘿&#xff0c;今天学习了JQuery的事件以及动画&#xff0c;感觉即将学习完JQuery&#xff0c;在回忆起上周学习的JavaScript&#xff0c;感觉好多刚刚学习的知识点都记得模 糊啦&#xff0c;这个是很让失望的&#xff0c;这里只说明了一点&#xff0c;课是听过啦&#xff0c…

Go 系列教程 —— 20. 并发入门

欢迎来到我们 Golang 系列教程的第 20 篇。 Go 是并发式语言&#xff0c;而不是并行式语言。在讨论 Go 如何处理并发之前&#xff0c;我们必须理解何为并发&#xff0c;以及并发与并行的区别。 并发是什么&#xff1f; 并发是指立即处理多个任务的能力。一个例子就能很好地说明…

Unity创造没有代码的游戏学习教程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小:17.4 GB |时长:17h 18m 你会学到什么 如何制作游戏 如何在Unity中制作无代码的游戏 如何使用Bolt 在…

Java学习总结:51(对象序列化)

对象序列化 对象序列化的本质实际上就是将内存中所保存的对象数据转换为二进制数据流进行传输的操作。 但并不是所有类的对象都可以直接进行序列化操作&#xff0c;要被序列化的对象所在的类一定要实现java.io.Serializable接口。而且序列化接口里面是没有任何操作方法存在的&…

(九)单片机串行口 内部结构的讲解 01

1、 基本概念 常用于数据通信的传输方式有单工、半双工、全双工和多工方式。 单工方式&#xff1a;数据仅按一个固定方向传送。因而这种传输方式的用途有限&#xff0c;常用于串行口的打印数据传输与简单系统间的数据采集。 半双工方式&#xff1a;数据可实现双向传送&am…

2022-2028年中国改性尼龙行业市场全景评估及产业前景规划报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国改性尼龙行业市场行业相关概述、中国改性尼龙行业市场行业运行环境、分析了中国改性尼龙行…

[原创]Java性能优化权威指南读书思维导图

[原创]Java性能优化权威指南读书思维导图 书名&#xff1a;Java性能优化权威指南 原书名&#xff1a;Java performance 作者&#xff1a; (美)Charlie Hunt Binu John 译者&#xff1a; 柳飞 陆明刚 京东购书地址&#xff1a; http://item.jd.com/11407830.html 介绍&…

【Java】lambda表达式与函数式接口的完美配合

透过现象看本质:它们真正需要的,是一个"函数",是一个告诉它们,根据什么去排序、被触发后执行什么、线程去执行什么任务的"函数"(compare、actionPerformed、run)。在没有计算机的数学时代,逻辑学家Church意识到他需要将一个函数符号化,他使用了希腊字母λ——λ的发音即为lambda。这无疑大大简化了代码,在某些情况下提升了效率——更重要的是,这是大势所趋的"函数式编程"思想的又一次胜利。实际上,lambda表达式的作用域,不是大括号,而是大括号的外围——和。

spring2

bean的scope"singleton":单例(默认)"prototype":一个bean可以对应多个对象实例 获取bean的方法1、ApplicationContext(首选)(1)bean的scope为singleton,实例化ApplicationContext时,bean对象也随之实例化(2)bean的scope为prototype,实例化ApplicationConte…

多线程Volatile关键字

一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。​ 强制将对缓存的修改操作(即写操作)立即写入主存;如果是写操作导致其他线程中对应的缓存无效,让其他线程只能从主存中拿刚刚更新的。2)禁止指令重排序。3)volatile只能保证【可见性】、【有序性】,并不能保证【原子性。

游戏设计行业标准测试:秘密收集

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:30节课(4h 5m) |大小解压后:2.68 GB Industry Standard Game Design Tests: The Secret Collectio…

Java学习总结:52(Java网络编程)

Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类&#xff0c;在此包中有一下两个主要的核心操作类。 ServerSocket类&#xff1a;是一个封装支持的TCP协议的操作类&#xff0c;主要工作在服务器端&#xff0c;用于接收客户端请求&#xff1b;Soc…

聊聊高并发(十六)实现一个简单的可重入锁

可重入锁指的是假设一个线程已经获得了一个锁&#xff0c;那么它能够多次进入这个锁&#xff0c;当然前提是线程须要先获得这个锁。 可重入锁是最常使用的锁。Java的内置锁就是可重入锁&#xff0c;使用synchronizedkeyword能够启用内置锁机制&#xff0c;比方说一个类有两个sy…

2022-2028年中国蛋制品行业市场专项调查及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国蛋制品行业市场行业相关概述、中国蛋制品行业市场行业运行环境、分析了中国蛋制品行业市场…

Twisted入门教程(3)

第三部分&#xff1a;开始认识Twisted可以从这里从头开始阅读这个系列。用twisted的方式实现前面的内容最终我们将使用twisted的方式来重新实现我们前面的异步模式客户端。不过&#xff0c;首先我们先稍微写点简单的twisted程序来认识一下twisted。最最简单的twisted程序就是下…

openstack高可用方案

openstack高可用方案 HA 将服务分为两类&#xff1a; • 有状态服务&#xff1a;后续对服务的请求依赖于之前对服务的请求。OpenStack中有状态的服务包括MySQL数据库和AMQP消息队列。对于有状态类服务的HA&#xff0c;如neutron-l3-agent、neutron-metadata-agent、nova-comput…

3D游戏设计和创作工具学习教程 3D Game Design Creation Tools

语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 大小解压后&#xff1a;1.94G 1280X720 mp4 三维游戏设计和创作工具 用扎实的工作流程开始开发游戏 课程获取&#xff1a;3D游戏设计和创作工具学习教程 3D Game Design & Creation Too…

Java学习总结:53(单对象保存父接口:Collection)

单对象保存父接口&#xff1a;Collection java.util.Collection是进行单对象保存的最大父接口&#xff0c;即每次利用Collection接口都只能保存一个对象信息。单对象保存父接口定义如下&#xff1a; public interface Collection<E> extends Iterable<E>由该定义…

ORA-00942:表或视图不存在(低级错误)

在好多时候。调试PL/SQL对象时会报。ORA-00942 看看错误原因吧&#xff1a; 报错原因&#xff1a;1.该schema没有对表或者视图没有select权限 2.就是该对象不存在 解决的方法&#xff1a; 1.授权给对应对象 2.create table or view 转载于:https://www.cnblogs.com/blfshiye/p/…

2022-2028年中国蛋白石行业发展现状分析及投资前景趋势报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国蛋白石行业市场行业相关概述、中国蛋白石行业市场行业运行环境、分析了中国蛋白石行业市场…

实验: VMware使用快照间接备份原始VMDK文件

资料上看的使用快照备份运行着的虚拟机 当虚拟机开着时&#xff0c;快照提供了一个备份原始 VMDK 文件的好办法。所有的写入操作在原始文件上暂停了&#xff0c;因此&#xff0c;复制它在另一个存储卷很安全。这就是像 VMware Consolidated Backup 和 Vizioncore 的 vRanger…

tomcat生成catalina.out文件

生成catalina.out方法 导语&#xff1a;本文为Windows下生tomcat将控制台信息输出到catalina.out文件 且 保证能实时查看日志文件的方法。 一、创建catalina.out 1、修改tomcat bin目录下的startup.bat文件 修改位置&#xff1a;在startup.bat文件倒数第二行 修改call "%…

Unity优化手机游戏学习教程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:3.69 GB |时长:6h 44m 创建移动游戏的优化技巧和技术 你会学到什么 如何优化手机游戏的图形和…

Java学习总结:54(集合输出)

集合输出 在Java中&#xff0c;集合的输出操作有四种形式&#xff1a;Iterator输出、ListIterator输出、foreach(加强型for循环)输出、Enumeration输出。 迭代输出&#xff1a;Iterator Iterator(迭代器)是集合输出操作中最常用的接口&#xff0c;而在Collection接口中也提供…

12.27评论5位同学试验三

23号李名贵&#xff0c;http://www.cnblogs.com/xieqiuyou/p/5017244.html#3323660 写的不错&#xff0c;每行语句都有注释&#xff0c;但截图不完整 24号施振成&#xff0c;http://www.cnblogs.com/nonecanstop/p/5079334.html 写的较完整&#xff0c;轮转法和优先算法都有用到…