4 THINGS I WISH I WOULD HAVE KNOWN WHEN I STARTED MY SOFTWARE DEVELOPMENT CAREER

4 Things I Wish I Would Have Known When I Started My Software Development Career

My software development career began about 15 years ago.

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

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, creatingPluralsight 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.

Quick side note: if you are stopping here reading this post, you are probably the kind of developer that cares about your career.  I’m putting together a complete package full of information on how to really boost you software development career and increase your earning potential.  It isonly available for preorder right now.  I’m only going to be selling it at this heavily discounted price for a short time.  I’ll also have some exclusive interview with famous software developers like Bob Martin, Jon Skeet, and Jeff Atwood sharing their secrets to their success.

这是一篇译文。个人觉得很不错,就发到博客上来了。

我的软件开发生涯开始于大约15年以前。

但是直到最近5年,我才真正地看到它的提高。

下面这些事情,我希望在进入软件开发领域时我已经知道了。如果我早点知道这些事儿,我将会变得更加成功。

1.软件开发中没有“正确的方式“

在我开发生涯的早期,我在学习和争论上浪费了大量的时间。我错误地认为,在软件开发的诸多方面都存在一种绝对”正确的方式“。

但是,关于软件开发,几乎每一件我当时认为是正确的事到头来都被证明是错的。

更重要的是,我发现几乎没有任何一件事是非黑即白的。在编写代码和开发软件的过程中,几乎所有的决策都是基于当时特定的情形。

我之前已经谈过为什么信仰一种技术对开发人员有害,但是我现在说的这个话题谈的不止是一种技术(这么狭隘)。

没有通用的最佳实践,这也是真的。甚至是一些highy charged话题。例如,要不要单元测试?敏捷开发和瀑布模型哪个好?这些没有永远正确的答案。

在我的职业生涯中,我在”正道“(理想主义)路线的迷宫里浪费了太多的时间,而不是采用可以帮我走得更远的”务实“(现实主义)路线。

2.细读书不是最佳的学习方式

我一开始学习编程和技术知识的时候,我花了太多时间细读一些关于特定技术的书。

读书没错,但是选择读什么书和读它的哪一部分非常重要。

比如,我记得我读过一本非常厚的讲VC++的书。(我十分肯定是这本书的更早的一个版本。)不管怎么说,这本书是本内容丰富的好书,但是一页一页地读并不是学习VC++最好的方式。

如果我当时先粗略地看看此书的章节,获得对VC++的一些全局的认识,然后再去搞懂其中最最重要的部分,我能学到并记住更多的东西。

如果我当时坐下来,通过实际地做一些东西来练习基础知识,而不是仅仅读一下或者过一过书上的例子,我现在会更加成功。你没有在真正地学一门技术,除非你用它解决了真正的问题。

3.深入学习一门特定技术是浪费时间

我不仅在”细读书“上浪费了时间,我在”读错书“上也浪费了时间。

我错误地相信,从里到外学习一门特定的技术能很好地推动我的职业生涯。

我花了太多时间读一些非常专门的技术书,如,ASP.NET或Hibernate,而不是读更多的像《代码大全》《代码整洁之道》,和《敏捷软件开发:原则、模式与实践(C#版)》。(BTW,我推荐你去读所有的这些书,如果你没读过的话。)

尽管了解你所使用的技术非常重要,但是成为那个特定技术的绝对专家并不重要。知道确切的API调用没多大好处,你需要的时候可以轻而易举地查到。

我在太多技术上花了太多时间深入学习,最后这个技术不是死掉了就是我后来放弃不用了。大多数关于这些特定技术的知识最后只代表了浪费掉的时间。

我发现,成为你正在使用的特定的程序语言的专家很重要,因为程序语言方面的知识将影响你很长时间。我仍然百分之百会花时间深入学习C++,C#和Java,但是我可能会花较少的时间去学习C++所有复杂的细节,因为那些细节现在对我帮助不大。

4.在你的开发生涯中,社区极其重要!

我的生涯早期,我犯了一个错误,就是不怎么去向社区寻求帮助,也不为他人提供帮助。

我一向乐于帮助我的同事,也在不同的工作岗位上也非常善于交际,但活动范围从来没有超出过公司。

我在我的生涯中花了大量的时间,试图在一个特定的公司进行投资,却没能将我的时间投资在我参与的软件开发社区中。

我花了很多时间,做关于技术或者是最佳实践的内部presentation,而这些时间原本可以用来制作可以服务于社区的内容和材料,同时也能给我带来工作上的认可。

我也犯了另一个错误,就是认为自己没什么有价值的东西去贡献。

我和很多刚入行的开发者聊过,有时候我觉得,比起我们这些”老油条“,他们有更多的东西去贡献给社区,因为他们更理解其他初学者蛋疼的问题。

如果我可以重来一遍,我一定会在我的生涯中更早、更多地参与各种会议和用户群。我会更早地开始写博客,并利用我的大部分学习时间去建立项目和资源,去帮助别人而不是只读书。

5.总是参与一个业余项目

可能我做的最大的,并且对我生涯影响最大的改变将会是完全戒掉电视,无尽的任务和魔兽世界(两个游戏),并把这部分时间花在一个业余项目上。

我过去花了相当一部分时间做一些享受性的,但是对我的生活没有长远利益的事情。

大约3到4年前,我已经基本不看电视了,现在我也很少看电影。电视和大部分电影只是一个对时间的巨大浪费,而这些时间你可以用来干很多有用的事。视频游戏很大程度上也是一样,但至少在视频游戏里,你在积极地做一些事情,而不是被动地吸收一些没有用的信息。

我会一直热爱玩视频游戏,并且我不认为我会停下来,但是,我真心希望我(之前)把一大部分用来打游戏看电视的时间花在一个业余项目上。

惭愧的是,我做的第一个真正的业余项目是在大约三年前,那时我开始创建我的第一个android应用。

当你在为别人工作的时候,花时间为自己工作非常重要,不然你就是在为他人建立王国而忽视自己的王国。

我不仅从最近几年的业余项目中学到了很多,并且我也从中得到了很多利益。事实上,其中一个,即制作Pluralsight课程,是我现在花全部时间在做的。

英文原文:4 Things I Wish I Would Have Known When I Started My Software Development Career

时间: 2024-10-26 13:00:09

4 THINGS I WISH I WOULD HAVE KNOWN WHEN I STARTED MY SOFTWARE DEVELOPMENT CAREER的相关文章

Day5 - 常用模块学习

本节大纲: 模块介绍(模块导入方法) time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一堆代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又

SQL Server 2008的MSSQLSERVER 请求失败或服务未及时响应

我的是SQL server 2008R2, 以前可以正常的启动SQL server(SQLEXPRESS).SQL server(MSSQLSERVER),有几天没有打开了,就在昨天 开机之后就无法启动MSSQLSERVER了,提示的信息如下图: 快速解决办法如下: 第一步:打开事件查看器,查看windows日志,点击应用程序,查看windows错误日志 http://product.pconline.com.cn/itbk/software/win8/1211/3060037.html 第二步

eclipse birt报表开发入门

在开发中,报表或多或少会涉及到,有些报表可能比较简单,而有些报表可能很复杂.无论如何,这些报表功能的开发都是可以通过一些公共的组件来实现的,比如我现在所在的这家公司,如果想要制作报表,只需要配置下报表配置下就可以了(这个报表是通过特定实现的报表语言实现了,支持内部自定义的语言,最终将这些相应的数据保存到数据库中,对报表中的一些事物进行了抽象,比如:报表模型, 查询参数.).如果要自己手动的一步一步的编写报表,那么相对会比较麻烦,如果能提供一个框架,只需要进行一些配置就可以完成自定义报表,那岂不很

如何让windows2008任何新用户启动后显示桌面图标

在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]键值下有如下图的一些键值,控制这桌面图标的显示,0为显示,1为不显示,具体哪个键值对应哪个图标,自己慢慢测试吧.

【Windows10 IoT开发系列】PowerShell的相关配置

原文:[Windows10 IoT开发系列]PowerShell的相关配置 可使用 Windows PowerShell 远程配置和管理任何 Windows 10 IoT 核心版设备.PowerShell 是基于任务的命令行 Shell 和脚本语言,专为进行系统管理而设计. 1.​启动 PowerShell (PS) 会话 注:若要使用装有Windows10 IoT Core设备启动PS会话,首先需要在主机电脑与设备之间创建信任关系. ​启动 Windows IoT 核心版设备后,与该设备相连的

【Windows10 IoT开发系列】开发人员模式设置

原文:[Windows10 IoT开发系列]开发人员模式设置  声明:本文转自微软Windows 开发人员中心(https://msdn.microsoft.com/library/windows/apps/xaml/dn706236.aspx),在此基础上进行删减和修改. ​对于要用于开发.安装或测试应用的设备,不再需要开发人员许可证.你只需从设备的设置中为这些任务启用设备一次.(仅限于运行Windows 10系统的设备) 使用开发人员功能 ​使用 Microsoft Visual Stud

Oracle静默安装

测试CentOS 6.5_x64下静默安装Oracle 11g R2数据库 [一.下载地址] http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html Oracle 11g 联机文档: http://www.oracle.com/pls/db112/homepage [二.系统要求] 内存:1G(官方最低要求1G) 硬盘:40G(企业版安装所需4.29G和1.7G数据文件) 检查的命令 内

使用fruitstrap实现命令行将IPA包安装到iOS设备上

Requirements Mac OS X. Tested on Snow Leopard only. You need to have a valid iPhone development certificate installed. Xcode must be installed, along with the SDK for your iOS version. Usage fruitstrap [-d] -b <app> [device_id] Optional -d flag laun

Android Studio 安装及常见问题

今年放假比去年早了一些,就提前回来了.感觉挺爽,结果教研室电脑没有带回来,悲剧是导师让我维护一下以前的项目,只能屁颠屁颠的搞起呀.只能用自己的笔记本搭建android开发环境.由于前阶段听说Android Studio用着爽歪歪,于是尝试在超卡的笔记本上跑Android Studio.哇咔咔,费了九牛二虎之力终于将Android Studio玩转了.先上个图,快过年了,祝大家新年快乐! Android官网也开始推广Android Studio了,以前官网好像提供Eclipse和ADT打包下载,现

Monkey测试

1             概述 Monkey测试是Android自动化测试的一种手段.Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. 当Monkey程序在模拟器或真实设备运行的时候,程序会产生一定数量或一定时间内的随机模拟用户操作的事件, 如点击,按键,手势等, 以及一些系统级别的事件.通常也称随机测试或者稳定性测试. 2             测试步骤 2.1   测试前提条件 1.将手机恢复出厂设置 2.恢复出厂设置后,进入设置--