《The Complete Software Developer’s Career Guide》书摘+书评

The Complete Software Developer's Career Guide The Complete Software Developer's Career Guide The Complete Software Developer's Career Guide 立即下载

书名:The Complete Software Developer’s Career Guide

作者:John Sonmez

阅读时间:2018/10/22-2018/10/29

 

书摘:

You don’t have to be a genius or even have above average intelligence to be a software developer.

The idea behind most software development projects is to automate a manual process, or to create a new automated way to do something that was too difficult to do manually.

You have to know how to manually do something before you can automate it.

What are you automating?

The more specific you are about what kind of software developer you want to become, the easier EVERYTHING is going to be.

Pick your sport.

Start with the goal and works backwards to determine what you need to know and do in order to reach that goal.

You’ll be treating this career as a profession, not just a job: a sign of a true craftsman.

Algorithms are the common ways of solving various computer science/programming problems.

By having a good grasp of data structures and algorithms, you can easily and elegantly solve many difficult programming problems.

Don’t just pick a language; pick a platform as well.

A framework is simply a set of libraries that are used to develop code on a particular platform or on multiple platforms. It usually makes common programming tasks on that platform easier.

A stack is a set of technologies, usually including a framework, that are commonly used together to create a full application.

Learning a stack can be extremely valuable because it means you have all the required skills to develop a full application.

You are probably going to want to know how to retrieve and store data programmatically from your code with your chosen platform and / or framework

You should know how to use at least one source control
system very well, and you should be familiar with most of the basic source control concepts.

You are going to spend perhaps 90% of your time as a software developer figuring out why the hell your code doesn’t work.

Think of it as a journey, not a destination. You will always be able to get better—if you choose to.

You need to get enough information about your subject to understand the big picture and narrow the subject down to a small enough scope that you can actually tackle it and wrap your head around it in a realistic amount of time.

You’ll have a much easier time learning something if you have an immediate application for it—a real reason to learn it.

Just hang on and stay the course, and you will gain proficiency.

I think the best place to start is by looking at the source code of an actual working application and trying to figure out as much of what is happening as possible.

One of the best ways to push forward from here and make sure you don’t have gaps in your knowledge is to start looking at existing code, line by line, making sure you understand exactly what each line and statement in the code is doing. (Even if you don’t always understand the why, being able to know the what is still progress.)

There are few things that are more difficult to learn in life than learning to program on your own.

Often proving that no task is below you and that you are willing to do whatever it takes is an extremely admirable character trait.

If you have no experience, your primary strategy to getting a job as a software developer is to prove that you can code and that it’s not BS.

make it pretty clear to any company considering you for a position that, even though you don’t have direct work experience, you are an experienced programmer, and you have some external proof that you know how to code.

It’s going to be really good if what comes up is your professional blog where you have a bunch of articles about the specific software development technologies you are specializing in, and it looks like you keep it up-to-date. Every software developer should have a blog.

Using GitHub is one of those ways to prove you have ability when you lack actual employment experience.

Be annoying. It’s better than being forgotten.

Some developers complain that the older developers have made it too difficult for younger developers to have a chance—that we’ve taken up all the good jobs. Meanwhile, some developers complain that no one wants to hire older developers and everyone is ageist.

Instead, you should try to take your existing experience and highlight the most relevant parts that match the job description, remove the irrelevant parts (or minimize them), and use some of the words or phrasings that are used in the job description.

You build a network by investing in it. You have to sow before you can reap. If you are patient and attend plenty of events in your community, you will eventually build a powerful network.

Everything you write in your resume should be thought about from the perspective of the value you provide, not what you want.

Once upon a time in my career, I created a skills section on my resume, and I used stars to indicate from one to five how high my skill was in a particular technology or language.

If you are going to be cocky, you better at least know what you are doing.

Let the other job candidates dress in t-shirts and jeans, but you dress up as best you can and create a strong, unconscious bias that you are the more professional, better candidate.

Don’t quit a job before you have another job lined up—even if your boss is a jerk.

WHOEVER NAMES A NUMBER FIRST, LOSES /*谈判中,先露出底牌的人输!*/

In just about any negotiation, whoever names a number first loses, or is at least at a distinct disadvantage.

First of all, if you are asked what your current salary is, you can say that it is confidential information from your current employer and you wouldn’t feel right giving out that information.

You could simply state you prefer not to say.

If pressed why, you could say that you consider the entire compensation package which includes benefits and other non-tangible items, so you wouldn’t want to talk in terms of salary alone.
You could also take a more blunt approach and simply state that you feel like talking about your current salary would put you at a distinct disadvantage in negotiating your salary at this job, because if your salary was significantly lower you would get less than you are worth, and if it were significantly higher, you might not get an offer which you might have considered.

DON’T BE AFRAID TO COUNTER OFFER. In just about all situations, when you do get a job offer, you should counter offer.
This is what is known as an arbitrage situation because there is very little downside but a very large upside. What I mean by this is that you have very little to risk and a large amount to gain. It would be rare for an offer of employment to be revoked simply because you made a counter offer. In most cases, the worst they will do is say “no.”

You should be extremely careful moving down from what you want and instead try to force the other party to come up.

No one likes to feel like someone is putting the squeeze on them.

But all growth in life is only achieved by making yourself feel uncomfortable.

If you aren’t growing, you’re dying. Grow.

“Never complain and never explain,” and I think this advice is especially apt when it comes to leaving a job.

You have to fight this feeling and realize that life will go on without you, and you must also concede that you are not as important and critical to the team as you think you are.

The truth is anyone is replaceable.//没有替换不了的螺丝钉

You are not abandoning the team; you are making a career and business decision.

When you stay longer than two weeks, you can quickly wear out your welcome, and you can jeopardize the opportunity you are moving to by delaying the transition.//办理离职手续宜快不宜慢

Try and use your existing, seemingly unrelated experience by finding a way to make it related. Just about anyone can do this, because software exists in just about every major industry.

The software development world is more of a meritocracy than other industries, so it doesn’t really matter how much experience you have or who you know so much as what you can do—although reputation obviously plays an important part. I’d advise you to plan on starting from the bottom, realizing that most of your skills are not going to carry over, and to be ok with that./*相对于其他行业,编程行业少了些勾心斗角,看重的是一个人的技术水准。*/

The more you can involve yourself in the software development side of the organization and take on more programming tasks, the more that other people in the organization will start to see you in the new role.

What I mean by this is that you should be trying to get some kind of development experience at your current job—even if you can’t move into a software development role—simply so that you can put that experience on your resume when you apply for a software development role in another company. Even if you built some tools on your own time that helped you do your job, you have the opportunity to put that on your resume as real development work, which is going to greatly help you get your first development job./*不要把简历上的工作经验仅仅局限在在其他公司内工作的经验,工作之外的相关经验也算一种工作经验。*/

Keep learning, keep improving your skills, keep looking for opportunities and making your own, and you’ll get what you are after.

You never know unless you ask. Fight for what you want and you just might get it. In most cases the worst that can happen is
someone can say “no.”

“There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things that we know we don’t know. But there are also unknown unknowns. There are things we don’t know we don’t know.”
—Donald Rumsfeld

C++ is technically a superset of C, which means that a C program should compile with a C++ compiler (although there are a few exceptions).

Python can be written in an object-oriented, procedural, or even functional way, and it is an interpreted language, meaning that it is not compiled.

Web development is about creating applications which run in a web browser.

Technologies like AJAX (Asynchronous JavaScript and XML) were invented to allow web pages to update dynamically without refreshing the page.

One important skill back-end developers need is related to SQL and databases.

With a schema for a database, you should be able to construct a complete empty copy of a database.

When you do black-box testing, you are only concerned with inputs and outputs. You don’t care how the actual outputs are derived.

Leave the code better than you found it.

To me, refactoring means making existing code more readable without changing its functionality.

In fact, you really should spend at least three times more time thinking about the code you are about to write as you do actually writing it. It’s that old saying, “measure twice, cut once.”

As a boss myself, I know that if I have someone working for me who figures out what needs to be done and what I am concerned about and takes care of that before I even have a chance to ask them to, they are extremely valuable.

I’m all for working hard, but I’d rather work hard for myself rather than making someone else rich.

Just do what was agreed upon and make it known that is what you are doing; if you now meet those requirements, at review time you are going to have a really good case for getting what you want.

Don’t be afraid to spend some money to make more money.

Talk about why you deserve the money, not why you NEED the money./*公司不是慈善机构,不会因为你需要钱就给你钱。所以申请加薪的时候,说明给你加薪的理由,不要把你急需用钱当作一种理由。*/

You get unequal rewards for having a reputation./*声誉能给你带来丰厚的物质回报*/

I’d rather have a medium amount of skill and a huge reputation than a huge amount of skill and no reputation.

You see, the perfect brand and all the self-promotion in the world won’t amount to anything if it’s not all based on this one important thing, this one important principle or idea: create value for others./*为他人创造价值*/

You’ll never “know enough.”/*知无涯,而我生有涯*/

You have to invest in your network before you can take any value from your network./*种瓜才能得瓜*/

One thing that many software developers don’t understand is that just about all specialists are also generalists, but no generalists are specialists. I mean that, usually, in order to acquire the skills of a specialist, a great deal of general knowledge is required and accumulated along the way.

What you really want to strive for is what is known as T-shaped knowledge. It means that you have a broad base of knowledge in your field, and then you have at least one area of deep, specialized knowledge or skill./*知识体系要博大,也要精深才行;要做通才,也要做专才。*/

You either want to learn things that are deeply focused and directly in your specialty, or broad enough to be widely applicable and somewhat timeless.

Courage is acting in spite of fear, not in absence of it./*勇气不是行而无畏,而是有畏仍行*/

Don’t be afraid to look like an idiot—we all do from time to time.

Think of a blog as an advertisement for you that works all day and night without you having to do anything other than feed it every once in awhile.

I’ve learned that I have to create rules for myself and follow them if I don’t want to follow someone else’s rules.

One of the most profitable businesses to be in is that of software.

To sell is to face rejection.

REPLACE STABILITY WITH ABILITY

Why not consider the strategy of increasing your own abilities to the point where you can easily get a new job whenever you want, instead of putting your hopes into one company or one job at a
particular company?

Do you know the power you have when you have a year’s worth of living expenses in your bank
account?
You can literally tell your boss to f-off and not care, because you’ve got enough runway to spend a whole year looking for another job. (Not that this is recommended.)
It feels great.

You are not as important as you think you are. Someone else can handle it—trust me./*不要把自己看的太重要,你请假或离职后的工作自有人会解决*/

Certifications and training are not valuable by themselves, just like a college education isn’t necessarily valuable. Like many things in life, it’s about what you put into it that counts—that effort is what determines the value you get out of it./*证书的价值不在于它本身,而在于你在获取证书的过程中获得的价值*/

其他推荐书目:

The Passionate Programmer: Creating a Remarkable Career in Software Development

How to Fail at Almost Everything and Still Win Big: Kind of the Story of My Life by Scott Adams

Maximum Achievement: Strategies and Skills That Will Unlock Your Hidden Powers to Succeed

Gödel, Escher, Bach: An Eternal Golden Braid

The Obstacle is the Way

The 10x Rule by Grant Cardone

Be Obsessed or be Average

The War of Art

 

程序员职业生涯规划(The Complete Software Developer's Career Guide) 如何开启、规划IT职业生涯,如何求职,提升职业技能。 立即下载

相关推荐

Being Geek The Software Developer's Career Handbook 无水印pdf

Being Geek The Software Developer's Career Handbook 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

程序员的职业规划_程序员新年充电指南(二):5本职业规划书籍,让你少走弯路...

点击上方关注,All in AI中国作者——Javin Paul大多数的软件开发人员、程序员和编码人员把大量时间和精力花费在学习几年之内就会过时的技术上,例如新的框架或新的编程语言。他们忽略了一些更重要的东西,例如软技能。与技术知识不同,软技能不仅可以为你的工作和事业提供更大的帮助,而且不会像你刚学到的新的Web应用程序开发框架那样快速地过时。同样,我们大多数人都会为了一份工作付出许多努力,但是在...

weixin_39735288的博客 261

USB Complete (The Developer's Guide, 4th Edition)

Must have ebook for USB developement

从代码到专家:every-programmer-should-know资源库的完整技能成长路线图

every-programmer-should-know是一个精心策划的技术资源集合,包含了软件开发者应该了解的各种技术知识,无论其技能水平或技术栈如何。这个项目汇集了算法、数据结构、分布式系统、安全、架构等多个领域的精选资源,为程序员提供了一条从入门到专家的完整技能成长路径。 ## 为什么every-programmer-should-know是程序员的必备资源? 在快速发展的软件行业,持续

gitblog_00561的博客 692

ZebOS Architecture Developer Guide

ZebOS是路由器等常用的,该文档详细介绍了ZebOS的体系架构。

程序员生涯

NULL 博文链接:https://evil201052night2157.iteye.com/blog/657515

2017年最值得学习的编程语言

本文为John Sonmez在2016年下旬的建议。 John Sonmez为软件程序员都应读的十本书之一 Soft Skills: The software developer’s life manual作者,提倡程序员要有所选择的学习,才能学什么都很快

ESAST分享 3917

Texas Instruments CC2540/41 BLE Software Developer’s Guide v1.3.2

Texas Instruments CC2540/41 Bluetooth® Low Energy Software Developer’s Guide v1.3.2

The 4 Levels of Freedom For Software Developers

By John Sonmez

xueshandugu的专栏 1296

汽车电子基于OTA的Bootloader更新机制:量产车软件升级断点版本限制与跨代更新规避策略

内容概要:本文深入剖析了量产汽车ECU中Bootloader在OTA升级过程中为何无法跨“断点版本”升级的核心原理。文章从Bootloader作为可信根的不可变性出发,解释了其在SOP后禁止常规OTA更新的原因,并揭示了Flash分区机制下OTA仅能擦写Application区的限制。通过介绍“两段式搬运”自更新机制,阐明了新版Bootloader需依赖旧版Bootloader执行迁移的“鸡生蛋”困境,进而引出断点版本的概念——即首次引入新Bootloader特性的关键过渡版本。文中详细列举了导致断点的典型变更(如签名算法、分区表等),并指出跨版本升级失败的根本原因在于旧Bootloader无法解析新镜像格式或执行更新流程。最后提出系统性解决方案,包括构建有向升级路径图、终端前置校验、A/B冗余、Golden恢复区等工程防护措施,强调需从架构、发布、OTA后台到售后体系全流程协同管理断点风险。; 适合人群:汽车电子工程师、车载软件开发人员、OTA系统设计师及从事ECU固件升级相关的技术管理人员,尤其适合具备嵌入式系统和UDS诊断基础的研发人员。; 使用场景及目标:①理解Bootloader在OTA中的核心作用及其不可随意更新的设计逻辑;②掌握断点版本的成因与应对策略,避免实际升级中出现“变砖”事故;③指导OTA系统设计与升级路径规划,提升整车软件迭代的安全性与可靠性。; 阅读建议:此资源结合真实工程场景深入浅出地讲解复杂机制,建议结合Bootloader自更新流程图与实际UDS刷写案例对照学习,重点关注版本兼容性判断、安全校验设计及故障恢复机制,在开发和测试中充分模拟跨断点升级场景以验证系统鲁棒性。

电力电子基于CCM Boost拓扑的3.3kW PFC电路参数设计:功率因数校正系统电感与器件选型优化

摘要:工程计算最难的不是算出来,而是「算完讲得清、改得动」。本文以一份 《3.3kW CCM BOOST PFC circuit parameters calculation》计算书为例,梳理 Maple Flow 的核心功能,并看它如何把规格、公式、器件选型、损耗校验和环路设计收进同一份可交付文档。

The 4 Most Important Skills for a Software Developer

With the vast array of technology, language and platform choices available today, it can be very difficult to figure out where to best invest time in training your skills as a software developer. ...

yiduwangkai的专栏 317

产业园区运营负责人如何精准对接企业技术需求与科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

The Software Developer's Guide

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.youkuaiyun.com/topmvp - topmvpThis step-by-step guide leads developers through the entire process of developing custom software beyond simp

TopMVP 545

邻传 NearShare v1.3.0|Windows局域网扫码文件互传、Word/Excel预览与直接打印(含MIT源码)

邻传是一款运行在 Windows 10/11 x64 电脑上的局域网文件共享工具。手机与电脑连接同一 Wi-Fi,扫码后使用浏览器双向上传、下载文件,无需蓝牙、手机 App 或配对码。 功能:同名文件以最后成功上传版本为准并保留历史;Word DOC/DOCX、Excel XLS/XLSX/XLSB/XLSM、ODS/CSV 在线预览;电脑端点击直接调出打印界面;类型筛选、搜索、列表/网格、批量删除和清空;自动识别电脑名称及可获取的手机型号,自动更新 IP 与二维码。 包内包含安装版、免安装版、MIT 协议源码、使用说明和 SHA-256 校验值,内置 Node.js,无需安装开发环境,不含个人共享数据。 使用:电脑启动 → 手机同一 Wi-Fi 扫码 → 上传/预览/下载。适合家庭、可信办公网络分享照片与文档。 限制:无登录、HTTP,能访问服务地址的设备可读写删除,请勿映射公网。Office 复杂排版可能简化;预览上限20MB,表格预览1000行50列;打印上限20MB/10万格/100页PDF,仅电脑支持。为手动分享工具,非自动文件夹同步。安装包暂未数字签名。

怎么在豆包里做生成式引擎优化(GEO)

本文系统介绍了豆包平台生成式引擎优化(GEO)的全套方法体系。文章首先解析了豆包与传统搜索引擎的核心差异,强调其多模态理解和上下文感知特性,并指出GEO需从关键词匹配转向用户意图动态解析。随后详细阐述了GEO优化的三大核心策略:用户意图解析技术、实时内容适配框架和权威信号强化方法,配以技术实现路径和案例说明。最后提出GEO与SEO融合的未来趋势,建议企业构建统一知识库,实现全渠道声誉管理。全文包含大量实操代码和工具链指导,为企业在AI时代的内容优化提供系统解决方案。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2385

快速学习编程语言_如何更快地学习编程语言

快速学习编程语言The following is an excerpt from The Complete Software Developer’s Career Guide by John Sonmez. To get the entire book delivered to your inbox, go here. 以下摘录自John Sonmez的《完整软件开发人员职业指南》 。 要将整本...

culh2177的博客 973

从稀疏表示到低秩表示(一)

确定研究方向后一直在狂补理论,最近看了一些文章,有了些想法,顺便也总结了representation系列的文章,由于我刚接触,可能会有些不足,愿大家共同指正。 从稀疏表示到低秩表示系列文章包括如下内容: 一、 sparse representation 二、 一、 sparse representation 1  sparsity  一个线性表示解决的问题如下图所示:

彼岸花 3万+
上一篇: 《Apprenticeship Patterns》书摘+书评
下一篇: 格言警句收集1
CodingIsFun
博客等级 码龄8年 37粉丝 240原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值