《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

 

猜你喜欢

转载自blog.csdn.net/CodingIsFun/article/details/83544926