开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
今日推荐开源项目:《滚动效果改 rallax.js》
今日推荐英文原文:《Your Knowledge Portfolio as a Software Developer》
开源日报第830期:《滚动效果改 rallax.js》
今日推荐开源项目:《滚动效果改 rallax.js》传送门:项目链接
推荐理由:这个项目是一个纯 JS 实现的视差滚动效果,只需要几行代码就能为指定的 html 元素提供视差滚动的效果。同时还支持速度和移动端可能的禁用等等个性化设置,并且其 API 除了基础的速度相关之外还提供了在滚动前进行条件判定,从而实现更精细的滚动操作。
今日推荐英文原文:《Your Knowledge Portfolio as a Software Developer》作者:Lajos Deme
原文链接:https://medium.com/better-programming/your-knowledge-portfolio-as-a-software-developer-6d1eb11ee221
推荐理由:用管理企业的观点管理知识储备

Your Knowledge Portfolio as a Software Developer

Learn to treat your knowledge as a business

This article is my take on the chapter with the same title from the brilliant book The Pragmatic Programmer. You should absolutely give that a read if you haven’t already.

I often use programming or investing analogies when I talk about real-life stuff. Using investing analogies to talk about programming stuff is super fun for me, and hopefully, it will be fun for you too.

1. Serious Investors Invest Regularly — As a Habit

Your most important asset as a software developer is the knowledge and experience stored inside your brain. However, this is an expiring asset. With the technology landscape evolving at breakneck speed, if you don’t attend to this regularly, its value will diminish year by year.

Unfortunately, you can’t just lay back and let your current investments earn dividends for you. You constantly have to rebalance your portfolio and, most importantly, invest more than you take out.

In other words, always be learning something new. The most important thing is to build a habit of lifelong learning. Here are a few goals that I am for:

Learn at least one new language/technology each year

I don’t mean become an expert in a new language or technology every year, but seeing different approaches that solve similar problems is a great way to become a better developer.

The skills you pick up along the way will probably prove useful even if you don’t plan to earn a living coding in that language.

Your options for learning a new language are basically limitless, including free YouTube tutorials, paid online courses, technical books, and blog posts.

I lay out my decision-making process for picking new languages to learn below.

Constantly deepen your knowledge about the field/programming language that you work in

While learning new technologies is fun, it’s also important to continuously expand your knowledge in the technology/programming language that you mainly work in.

For me as an iOS developer, that means reading at least one technical book about iOS development/Swift every three or four months, playing around with technologies that are outside my comfort zone, like ARKit or SpriteKit, and constantly being on the watch for new iPhone features and Swift language improvements.

Because it’s impossible to know everything about a certain piece of tech or language, this becomes a neverending journey towards mastery.

Read at least one technical blog post every day

While you need to make big plans like learning a new language or reading a huge book, you also need small wins to keep you motivated.

I found that the best way to do this is to read at least one programming blog post on Medium every morning while I’m having breakfast. It’s a brilliant way to acquire small snippets of knowledge, deepen my understanding of Swift and iOS bit by bit, take quick peeks at different technologies, and start every day with a sense of accomplishment.

2. Diversification Is the Key to Long-Term Success

The more different technologies you’re comfortable with, the better.

You should not limit yourself to one programming language, for example, because it might become irrelevant in the future, and then you’re left with expert knowledge that nobody wants to pay for anymore.

Having a well-diversified knowledge portfolio is a natural consequence of adhering to the points I laid out above.

However, I believe a word of caution is appropriate here. You should be careful not to over-diversify. If you’re like me, you find almost every new piece of technology or API interesting and just want to dive deep straight into them. I don’t think that this is such a good idea because you would spread yourself too thin, knowing the basics of many things but not enough to do meaningful work with any of them.

As with everything else in life, the best approach is to construct a great plan, in which you map the technologies that you want to learn on a timeline. After that, all you have to do is stick to the plan.

If you’re able to diversify across fields, too, that’s even better. It pays handsomely if, although you are a developer, you’re also able to design a user interface or you’re well versed in marketing.

3. Smart Investors Balance Their Portfolios Between Conservative and High-Risk, High-Reward Investments

I think you should strive to be an expert in a technology that pays a nice salary in the present while having a few bets on technologies that might become huge a few years or decades from now.

On the conservative side, I have iOS and full-stack web development. I currently work as an iOS developer, but I love doing web development for personal projects, businesses I want to build, or simply for pure fun.

On the aggressive (risk-wise) side, I have distributed ledger technology (not to be confused with cryptocurrencies) and smart contract development. I think these technologies are too young to say anything about them with confidence, but they definitely have a huge potential to transform society, so they might reap great rewards for the savvy knowledge investor in the future.

My rule of thumb for picking programming languages to learn is based on the intelligent balancing of risk. I try to have on my agenda a well-established, widely used, popular language or technology that currently solves a lot of important problems paired with another one that currently does not solve any real problems but has a great possibility of doing so in the future.

4. Investors Try to Buy Low and Sell High for Maximum Return

This point is directly related to the previous one. You should aim to find emerging technologies and learn them before they become popular.
“Learning Java when it first came out may have been risky, but it paid off handsomely for the early adopters who are now at the top of that field.”— The Pragmatic Programmer
This is by no means easy, but if you can find the programming equivalent of an undervalued stock, you could be on the path to success.

This should not be an emotional decision nor a matter of personal taste. You should analyze the landscape’s present and future based on factual data.

You also probably already know something — thanks to your interests or education outside software development, or the events of your life that shaped your worldview — that many other people don’t know or would disagree with.

In my opinion, these are the things that can help you find your next knowledge investment.

5. Portfolios Should Be Reviewed and Rebalanced Periodically

It goes without saying that — with technology changing at the speed of light — if empirical evidence indicates that your past assumptions are incorrect, you should readjust those assumptions.

It might become obvious that some technology clearly won’t fulfill your expectations. No worries because you treated it as a high-risk investment in the first place. You still have your conservative investments to rely on. But at this point, it’s useless to spend more time on it. Just cut your losses, review and rebalance your knowledge portfolio, and move on.

If you see some of your conservative investments starting to have diminishing returns, you might want to consider creating a plan to retire them and find a successor.

Final Thoughts

Thank you for reading this article, and I hope you got some value out of it.

If you disagree with some of the guidelines I’ve mentioned or have some ideas or suggestions, I’m curious to hear your thoughts in the comments.
下载开源日报APP:https://openingsource.org/2579/
加入我们:https://openingsource.org/about/join/
关注我们:https://openingsource.org/about/love/