我不会告诉你这本书讲了如何应对“国民党反动统治”。
和其他笔记不同的是,这篇有更大比例的 remix1。
Oreilly 公司的书中配套的代码你可以使用无需许可。将大量代码合并到你的产品文档中则需要获取许可,。
系上“白色腰带”。
feedback loop:能够看到效果,所以脚本语言更容易上手(它们 fail fast),irb (Ruby),erb(Erlang),Firebug(Firefox),或者自己弄个空壳:
public class Main {
public static void main(String[] args) throws Exception {
System.out.prinln(/* things goes here */);
}
}
Test-driven Development 也很重要,可以让你很快熟悉框架。
社区经验的重要性:找人帮助,找社区。
Sandbox 很重要:可以在里面练习。
多体验,塑造自己的思想形态(The Shape of Your Mind),从面向对象到函数式,从动态语言到静态语言都要涉猎,从服务器到用户界面设计。
找一本 Specification 来读。现在很多源码都可以获取到比如 Linus Torvalds 的 git 源码。
记住,Stay hungry,Stay foolish,用 Yoda 的话说就是:
You must unlearn what you have learned.
放下经验,避免“用各种语言写 Fortran”,你要知道 idiomatic 的写法,以及它的优点。
寻找一个有激情的团队。
看看自己的 CV(Curriculum Vitae),是自己吗?
不要害怕暴露无知。
You have discovered that the direction you want to go is different from the path toward software craftsmanship.
Your learning has decelerated as you’ve quickly surpassed everyone around you.
You work in an environment that does not allow for failure, yet you need a safe place to learn.
You want to work on a great development team, yet you have very little practical experience.
You have discovered wide gaps in your knowledge, and your work requires that you understand these topics.
You can’t tell if you’re suffering from “unconscious incompetence.”
You have only superficial knowledge of many tools, technologies, and techniques and keep hitting roadblocks as you try to tackle tougher problems.
None of the career paths that your employer provides is a fit for you.
Your understanding of software development is narrow and focused only on the low-level details of what you’ve worked on in your day job.
You have discovered wide gaps in your knowledge and are afraid that people will think that you don’t know what you’re doing.
You are finding it difficult to estimate your work because your toolset and technology stack are changing so rapidly.
You find that you’re spending a lot of time reinventing wheels and hitting roadblocks, but you aren’t sure where to turn for guidance.
You find yourself stranded without mentors and in an atmosphere that seems at odds with your aspirations.
Your learning skills have enhanced your successes, but your failures and weaknesses remain.
You work in an environment that stifles your passion for the craft.
The performance of your daily programming activities does not give you room to learn by making mistakes.
There seems to be an endless stream of deeper and more fundamental concepts that are eluding you despite your quickly acquired proficiency.
The number of books you need to read is increasing faster than you can read them.
You learn the same lessons again and again, but they never seem to stick.
As the number of years and projects you have under your belt increases, you find yourself awaiting the epiphany that will magically make you“experienced.”
You feel overwhelmed as you are faced with the vast reaches of your ignorance.
You have the feeling that there are superior techniques and approaches to the craft that are eluding you.
You are frustrated that the people around you are not learning as quickly as you are.
You have been offered a promotion into a role that will pull you away from programming.
The experienced people around you are constantly referencing concepts from books that they assume you have read.
You find yourself working in the frustrating world of ambiguously specified projects for customers with shifting and conflicting demands.
You are an inexperienced developer and need to earn your team’s trust.
You’re beginning to fear that your career is not resting on a plateau, but is in fact stuck in a rut.
You aspire to become a master software craftsman, yet your aspiration conflicts with what people expect from you.
You are struggling to learn, because the experience you have seems to have somehow made it harder to acquire new skills.
You find yourself holding back your excitement and curiosity about software development in order to fit in with your team.
How do you find out if your work is any good given that those around you may not have the ability to tell good code from bad?
When you introduce yourself in a professional setting, you feel you have to apologize or explain away the difference between your skill level and your job description.
You are familiar with a few languages, but lack fluency in any of them.