2009年5月14日星期四

Continuous Learning: 14 Ways to Stay at the Top of Your Profession

Professional development refers to skills and knowledge attained for both personal development and career advancement. ” I’m fortunate in that my personal and career interests are well aligned. I must enjoy my work because I do a lot of the same activities with a majority of my free time (just ask my wife!).

Keeping up with an industry’s current technologies and trends is a daunting task. Karl Seguin’s post Part of your job should be to learn got me to thinking about the things I do to stay on top of my interests. I never really thought about it much before, but as I started making a list I was surprised by how fast it grew. When it reached a critical mass that I thought it would be worth sharing.

I actually have two professions. I’m a Biomedical Engineer (formal training) and a Software Engineer (self proclaimed). I primarily do software design and development, but being in the medical device industry also requires that I keep abreast of regulatory happenings (the FDA in particular, HIPAA, etc.), quality system issues, and industry standards (e.g. HL7).

Keeping track of Healthcare IT trends is also a big task. With the new emphasis by the federal government on EMR adoption, even a small company like mine has started planning and investing in the future demand for medical device integration.

The other major topic of interest to me is software design and development methodologies. A lot of the good work in this area seems to come from people that are involved in building enterprise class systems. I’ve discussed the ALT.NET community (here) and still think they are worth following.

So here’s my list. I talk about them with respect to my interests (mostly software technologies), but I think they are generally applicable to any profession.

1. Skunk Works

Getting permission from your manager to investigate new technologies that could potentially be used by your company is win-win. In particular, if you can parlay your new-found skills into a product that makes money (for the company, of course), then it’s WIN-WIN.

In case you’ve never heard this phrase: Skunk works.

2. Personal Projects

I always seem to be working with a new software development tool or trying to learn a new programming language. Even if you don’t become an expert at them, I think hands-on exposure to other technologies and techniques is invaluable. It gives you new perspectives on the things that you are an expert in.

Besides getting involved in an open source project, people have many interesting hobby projects. See Do you have a hobby development project? for some examples.

3. Reading Blogs

I currently follow about 40 feeds on a variety of topics. I try to remove 2-3 feeds and replace them with new ones at least once a month. Here is my Google Reader trend for the last 30 days:

30 day RSS trendYou can see I’m pretty consistent. That’s 1605 posts in 30 days, or about 53 posts per day. To some, this may seem like a lot. To others, I’m a wimp. During the week I usually read them over lunch or in the evening.

4. Google Alerts

Google Alerts is a good way to keep track of topics and companies of interest. You get e-mail updates with news and blog entries that match any search term. For general search terms use ‘once a day’ and for companies use ‘as-it-happens’.

5. Social Networks

I joined Twitter over a month ago. The 30 or so people I follow seem to have the same interests as I do. What’s more important is that they point me to topics and reference sites that I would not have discovered otherwise. I’ve dropped a few people that were overly verbose or had mostly inane (like “I’m going to walk the dog now.”) tweets.

I’m also a member of LinkedIn. Besides connecting with people you know there are numerous groups you can join and track topical discussions. Unfortunately, there are quite a few recruiters on LinkedIn which somewhat diminishes the experience for me.

I don’t have a Facebook account because my kids told me you have to be under 30 to join. Is that true? :)

6. Books

I browse the computer section of the bookstore on a regular basis. I even buy a technical book every now and then.

Downloading free Kindle e-books is another good source (and free, of course) e.g. here are a couple though Karl’s post: Foundations of Programming. There’s a lot of on-line technical reading material around. Having a variety on the Kindle allows me to read them whenever the mood strikes me. One caution though: the Amazon conversion from PDF and HTML to e-book format is usually not very good. This is particularly true for images and code. But still, it’s free — you get what you pay for.

7. Magazines

There are numerous technical print publications around, but they are becoming rare because of the ease of on-line alternatives. I used to get Dr. Dobbs journal but they no longer publish a print version, but it is still available electronically though.

I miss that great feeling of cracking open a fresh nerd magazine. I still remember the pre-Internet days when I had stacks of BYTE laying around the house.

8. Webinars

These tend to be company sponsored, but the content about a product or service that you may not know a lot about is a good way to learn a new subject. You just have to filter out the sales pitch. You typically get an e-mail invitation for these directly from a vendor.

9. Local User Groups

I’ve talked about this before (at the end of the post). In addition to software SIGs, look into other groups as well. For me, IEEE has a number of interesting lectures in the area.

Face to face networking with like professionals is very important for career development (”It’s not what you know — it’s who you know” may be a cliche, but it’s true.). Go and participate as much as possible.

If there’s not a user group in your area that covers your interests, then start your own! For example: Starting a User Group, Entry #1 (first entry of 4).

10. Conferences and Seminars

Press your employer for travel and expenses, and go when you can. This is another win-win for both of you. Like Webinars, vendor sponsored one day or half day seminars can be valuable. Also, as in #9, this is another opportunity to network.

Just getting out of the office every now and then is a good thing.

11. Podcasts

These may be good for some people, but I rarely listen to podcasts. My experience is that the signal to noise ratio is very low (well below 1). You have to listen to nonsense for long periods of time before you get anything worthwhile. But that’s just me. Maybe I don’t listen to the right ones?

12. Discussion Sites

CodeProject and Stack Overflow are my favorites. Also, if you do a search at Google Groups you can find people talking about every conceivable subject.

Asking good questions and providing your expertise for answers is a great way to show your professionalism.

13. Blogging

IMO your single most important professional skill is writing. Having a blog that you consistently update with material that interests you is a great way to improve your writing skills. It forces you to organize your thoughts and attempt to make them comprehensible (and interesting) to others.

14. Take a Class

If you have a University or College nearby, they probably have an Extension system that provide classes. Also, there are free on-line courses available. e.g.: Stanford, MIT, and U. of Wash.

2009年5月13日星期三

How to slove it,3

假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关。
现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?
注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。


另外一个变形是,硬币铸造时有差错,抛出字和花的概率分别是p和1-p (0<=p<=1),问平均要抛多少次才能结束这个游戏。 设 字为A 花为B, 把抛出来的结果写成字符串, 现在求 *不连续* 构成两个A 的字符串组合数。 用向量 [A B] 表示 [尾为A的组合数 尾为B的组合数], 因为A后面只能接B,而B后面可以接A或B,所以状态转移矩阵 M 是 0 1 1 1 一次结果:A、B [A1 B1] = [1 1] 两次结果:AB、BA、 BB [A2 B2] = M*[A1 B1] = = [1 2] 三次结果: [A3 B3] = M*[A2 B2] = = [2 3] 四次结果: [A4 B4] = M*[A3 B3] = [3 5] A1,A2,A3....An 这个数列的意义是,抛n 次,得到*非终止*序列的 而且最后一次为 A 的组合数。 只要在这些组合后面再抛一次 A 即可得到终止序列。 从上面可以看出 An 正是斐波那契数 F(n),可以直接代入通项公式。 所以抛 n 次得到终止序列的概率为 F(n-1)/2^n 得到终止序列的抛硬币次数期望为:2*F(1)/2^2 + 3*F(2)/2^3 + 4*F(3)/2^4 + ....

A_n是斐波那契数有组合意义, 只要讨论前两个次试验的情况, 如果第一次是B, 后面构成A_(n-1)结构, 如果第一次是A, 则第二次必须是B, 于是后面构成A_(n-2)结构, 于是在考察一下A_1和A_2就可以了.

对于期望的计算, 可以考虑生成函数.


G(x) = F(1)/2^2 * x^2 + F(2)/2^3 * x^3 + F(3)/2^4 * x^4 + ...
将递归关系带入得到
G(x) = x/(4-2x-x^2)

于是那个无限求和的期望就等于 G'(1)=4. 注意这个期望是最后两次A之前的试验次数, 故加上最后两次A就是期望6了.

2009年5月4日星期一

Why Text Messages Are Limited To 160 Characters

The LA Times has a story about Friedhelm Hillebrand, one of the communications researchers behind efforts to standardize various cell phone technologies. In particular, he worked out the 160 character limit for text messages.
这个问题总让人想起,铁轨宽度与马屁股的故事。
"Hillebrand sat at his typewriter, tapping out random sentences and questions on a sheet of paper. As he went along, Hillebrand counted the number of letters, numbers, punctuation marks and spaces on the page. Each blurb ran on for a line or two and nearly always clocked in under 160 characters. That became Hillebrand's magic number ... Looking for a data pipeline that would fit these micro messages, Hillebrand came up with the idea to harness a secondary radio channel that already existed on mobile networks. This smaller data lane had been used only to alert a cellphone about reception strength and to supply it with bits of information regarding incoming calls. ... Initially, Hillebrand's team could fit only 128 characters into that space, but that didn't seem like nearly enough. With a little tweaking and a decision to cut down the set of possible letters, numbers and symbols that the system could represent, they squeezed out room for another 32 characters.