英文原文:http://simpleprogrammer.com/2013/08/19/software-development-career/

My software development career began about 15 years ago.

大约15年前,我开始从事软件开发。

But only in about the last 5 years did I really start to see a large boost in my software development career.

但是只有在最近过去的5年里我的职业生涯才开始有一个很大的提升。

Here are some of the things I wish I would have known when I got started in the software development industry; things that would have made me more successful, much earlier, if I would have known them.

以下是当我开始在软件开发行业做的时候我如果能早些知道它们我就可以更快更早的成功的一些事情(经验吧)

There is no “right way” in software development

在软件开发行业没有捷径可走

I wasted a large amount of time, both in studying and arguing, early on in my career, falsely believing there was an absolute “right way” for many aspects of software development.

It turns out that just about everything I once thought was correct about software development at some point turned out to be wrong.

But more importantly, I found that very few things were black and white.  Almost every decision when writing code and developing software is based on the current circumstances.

I’ve talked before about how the religious adoption of a technology can be harmful to software developers, but this topic goes beyond just a technology.

It is also true that no best practice is universal.  Even highly charged topics like whether or not to unit test or whether agile or waterfall methodologies are best, do not have straightforward one-is-always-right answers.

In my career, I’ve wasted plenty of time on the “right way” road that led to nowhere instead of taking the “pragmatic” (practical) road, which would have carried me much further.

Reading a book cover-to-cover is not the best way to learn

一页接着一页阅读一本书不是学习的最佳方法

When I first started wanting to grow my knowledge of programming and different technologies, I spent too much time reading technical books about a specific technology cover to cover.

There is nothing wrong with reading books, but often the choice of what book to read and what parts of it to read are very important.

For example, I remember reading a very large book on programming with Visual C++.  (I’m pretty sure it was an earlier version of this book.)  Anyway, the book was a good book with lots of information, but reading it cover to cover was not the best approach to learning Visual C++.

I would have learned and retained a lot more by skimming over the chapters of the book to get a broad understanding of what there was to know about Visual C++, then figuring out what things were most important to learn first.

I would have had much more success by sitting down and actually practicing the basics by trying to actually build something than just reading or going through examples in the book.  You don’t really learn a technology until you’ve solved real problems with it.

Learning particular technologies in-depth is a waste of time

深度学习某一部分技术就是浪费时间

Not only did I waste time by reading books cover to cover, but I also often chose to read the wrong books.

I had mistakenly believed that learning a particular technology inside-out would be a good way to advance my career.

I spent too much time reading books about very specific technologies like ASP.NET or Hibernate instead of reading more books like “Code Complete,”“Clean Code,” and “Agile Principles, Patterns And Practices in C#.” (All of these books, by the way, I recommend that you read, if you haven’t already.)

While it is important to know about the technology you are using, it isn’t important to be an absolute expert in that particular technology.  There isn’t much benefit to knowing the exact API call to make when you can just easily look it up when you need it.

Too many technologies that I spent a good amount of time learning about in depth, ended up either dying out or being technologies that I eventually abandoned myself.  Most of the knowledge about those specific technologies ended up representing a big waste of time.

 

I found that it was important to become an expert at whatever programming language that I was using at the time, because expertise in a particular programming language will usually last you a pretty long time; I definitely would have still spent time learning in depth about C++, C# and Java, but, I perhaps, spent a little too much time learning all the intricacies of C++, which isn’t benefiting me much now.

Community is extremely important in your software development career

在你的职业生涯中社区论坛非常重要

Early in my career, I made the mistake of not really reaching out to the community for help and to provide help to others.

I was always good about helping my coworkers and being social at the various jobs I held, but I never really reached much beyond my company.

I spent a large amount of time trying to make an investment in my career at a particular company at the expense of making an investment of my time in the software development communities that I was involved in.

I spent lots of time creating internal presentations on technologies or best practices that could have been spent creating content and material that could have served the community as a whole, as well as brought me recognition at my job.

I also made the mistake of not thinking that I had something valuable to contribute.

I talk to many beginning software developers now and sometimes I think they have much more to contribute to the community than us software developers that have been in the field for a long time, because they understand better the issues that other beginners are struggling with.

If I could do it over again, I would have made sure to be much more involved in conferences and user groups earlier in my career.  I would have started my blog much earlier and I would have used much of my learning time to create projects and resources that would be able to help others rather than just reading a book.

Always have a side project

总得 有一个业余涉及的项目(此处一直找不到准确的词)

Perhaps the biggest change I would have made that would have impacted my career the most would have been to cut out all the TV watching, Everquest and World of Warcraft playing I did earlier in my life and replace that time with work on a side project.

I’ve wasted a pretty sizable amount of time in my life doing things that were enjoyable, but didn’t produce any long term benefit for my life.

About 3-4 years ago, I pretty much cut out watching TV completely and now I hardly ever watch movies either.  TV and most movies are just a huge waste of time that you could be using to do something useful.  The same goes for video games for the most part, but at least with video games you are actively doing something not just absorbing useless information.

I’ll always love to play video games and I don’t think I’ll ever stop, but I do wish I would have spent a good deal of the time I spent playing video games and watching TV on a side project instead.

Sadly, the first real side project I actually took on was only about 3 years ago when I started creating my first Android application.

When you are working for someone else, it is really important to spend time working for yourself as well, otherwise you are building someone else’s empire while neglecting your own.

Not only did I learn a huge amount from the side projects I have taken on in the last few years, but I have benefited greatly from them.  In fact, one of those side projects, creating Pluralsight courses, is something I am doing pretty much full time now.

Putting everything I learned together

把所学的知识结合起来

These are just a few of the things that I wish I had known when I first started my software development career, but there are many more and lots of other things that I did do right from the beginning.

I’m actually working on a top secret project to put all this information together to help developers boost their career and learn to market themselves.

If you want to be the first to be notified when this project gets officially launched, sign up here, and I’ll be sure to let you know.

What about you?

What are some of the things you wish you would have known when you started your software development career?  Let me know in the comments below.

4 Things I Wish I Would Have Known When I Started My Software Development Career【当我最开始从事软件工程师的时候我希望我知道的四件事】的更多相关文章

  1. In-Memory:内存数据库

    在逝去的2016后半年,由于项目需要支持数据的快速更新和多用户的高并发负载,我试水SQL Server 2016的In-Memory OLTP,创建内存数据库实现项目的负载需求,现在项目接近尾声,系统 ...

  2. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  3. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  4. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  5. .net点选验证码实现思路分享

    哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...

  6. 防御XSS攻击-encode用户输入内容的重要性

    一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...

  7. H5实现摇一摇技术总结

    摇一摇遇到的问题 一.如何对摇晃效果进行反馈 刚开始的处理方式是,摇晃过程中不做任何处理,但后来反馈说这种效果不好,好像就没有摇动一样,如果声音也不响的话,就真的和什么都没发生一样. 后来想了想,加入 ...

  8. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  9. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  10. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

随机推荐

  1. 爬虫文件存储-2:MongoDB

    1.连接MongoDB 连接 MongoDB 我们需要使用 PyMongo 库里面的 MongoClient,一般来说传入 MongoDB 的 IP 及端口即可,第一个参数为地址 host,第二个参数 ...

  2. ubuntu系统中java开发环境的搭建

    Java环境可选择 Oracle 的 JDK,或是 OpenJDK,按http://wiki.apache.org/hadoop/HadoopJavaVersions中说的,新版本在 OpenJDK ...

  3. TCP/IP UDP 协议首部及数据进入协议栈封装的过程

    数据的封装 UDP 封装 TCP 封装 IP 封装 检验和算法 当应用程序用TCP传送数据时,数据被传送入协议栈中,然后逐一通过每一层直到被当作一串比特流送入网络 注: UDP数据TCP数据基本一致. ...

  4. 24.通过ngram分词机制实现index-time搜索推荐

    一.ngram和index-time搜索推荐原理     1.什么是ngram     假设有一个单词:quick,在5种长度下的ngram情况如下: ngram length=1,q u i c k ...

  5. Java 下实现Cache

    最近在做Spring的项目,想做一个缓存,访问数据库,定期来做数据更新 要实现两个功能 可以通过http请求来立刻刷新缓存 缓存可以通过自己配置的时间间隔来定期刷新 通过Controller来做 因为 ...

  6. SQLServer中的Cross Apply、Outer Apply

    https://www.2cto.com/database/201304/206330.html

  7. 垂直相邻margin合并解决方法

    块级元素的垂直相邻外边距会合并,水平边距永远不会重合. 行内元素实际上不占上下外边距,左右外边距也不会合并.浮动元素的外边距也不会合并. 外边距重叠的意义 外边距的重叠只产生在普通流文档的上下外边距之 ...

  8. HDU 5446 Unknown Treasure

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  9. Anton and Permutation

    Anton and Permutation time limit per test 4 seconds memory limit per test 512 megabytes input standa ...

  10. [bzoj4636]蒟蒻的数列_线段树

    蒟蒻的数列 bzoj-4636 题目大意:给定一个序列,初始均为0.n次操作:每次讲一段区间中小于k的数都变成k.操作的最后询问全局和. 注释:$1\le n\le 4\cdot 10^4$. 想法: ...