成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

David Thomas:程序員要快樂的思考

原創
開發
程序員的工作似乎是無比苦悶的,整天泡在枯燥的代碼堆里。51CTO在2010年終選題上有幸專訪了敏捷宣言創始人之一,《程序員修煉之道》與《Programming Ruby》的作者David Thomas,請他談談他的快樂編程之道。

【51CTO獨家特稿】一個國外的技術大牛,一開始其實只是為了解決具體的技術問題而鉆研技術。但是經歷了一段時間的鉆研,程序員就有可能從中體會到樂趣,真正做到快樂的寫代碼,快樂的思考。David Thomas就是這樣一位快樂的程序員。

人物簡介

[[18319]]

Dave Thomas,敏捷宣言創始人之一,《程序員修煉之道》與《Programming Ruby》的作者。他有著三十余年的編程經驗,現在主要經營Pragmatic Programmer出版社,閱書無數。同時,Dave每天都仍然在編寫代碼。

1、你最開始從事開發的時候,有什么技術理想么?這個技術理想在之后的年歲中有過改變么?

我最開始編程的時候,我認為那時的自己還談不上有什么技術理想——這是很久之后才有的。

我在16歲的時候,準備在高中學習數學。我當時還在英國念初中,我們一群孩子提前一年完成了學業。學校想找點事情給我們做,就建議我們去一個本地的技術學校(類似中專)上一門計算機編程的課程。在那個時候,你通過300波特調制解調器、電傳打字機和紙帶機和計算機進行交互。在這門課上了一個月左右的時候,我忽然發現了我真正喜愛的東西。每天下課之后,我用好幾個小時在紙帶上編寫Basic程序,再上傳到大型主機上。我甚至進行了我的第一次元編程——由于我們被限制只能在主機上保存5個程序,我于是編寫了一個可以儲存其他程序的Basic程序,就好象一個迷你的文件系統。

經歷過這些之后,我意識到了我對編程的渴望。我在接下來的大學選科過程中沒有再看任何的數學課,而是搜索有沒有計算機科學的課程。幸運的是,帝國理工學院剛剛開辦了一門計算機科學的課程,我就這么進去了。這門課程可能是這個領域最好的入門指導了:課程本身相當深入,課外練習都十分實用,而且十分具有挑戰性。基本上,我在學校期間靠編程打工的錢就把我的學費全付清了。

畢業之后我計劃讀博士,不過一個初創企業把我拐走了。我覺得這其實是挺幸運的,因為借助這次創業的機會,我認識到了軟件業務的另一面:客戶,項目,以及正確的做事。公司很小,但都是非常聰明的人,所以只要是能找到的活兒,我們什么都做。在短短數年間,我在各個方面積累了大量的經驗。

所有這一切都是由熱情推動的,而談不上什么技術理想。我只是做我喜歡做的事情。

不過,久而久之,我開始意識到工作中的“模式”(patterns)——在軟件開發工藝的深層隱藏的那些真理。最終,我和Andy Hunt將其中的一些模式描述成文字,記錄在我們的《程序員修煉之道》當中。

不過,這仍然算不上什么“技術理想”。你這個問題很好,它引發了我的思考。思考的結果就是,如果“技術理想”的含義是“我想要做這個或那個”,那么我并沒有任何技術理想。我的理想很簡單:做我高興做的事。我想要繼續寫代碼,我想要用代碼解決人們的問題。我想要繼續磨練我的手藝,我想要在軟件開發的新領域中測試和體驗。我知道這有點自私,不過我想要繼續“尋歡作樂”:)

2、你有沒有感到某個時刻,你忽然“頓悟”了編程?如果有的話,能描述一下當時發生的事情嗎?

當然有過忽然靈光一現的時候。有些時候,只是比較低層次的。我還記得當我在PDP-11計算機上編程的時候,遇到了一個將二進制數字轉化為八進制ASCII碼的庫子程序。很明顯,這是任何一個程序員都能夠寫出來的功能。不過,我遇到的這個程序被編寫的十分“優雅”:這位程序員使用了PDP標志寄存器(flag registers)和旋轉運算(rotate operations)的一些深層知識,用短短四、五行匯編就完成了這個功能。這并非是我印象中最短小的代碼,但我當時領悟到了:想要變得優雅,必須深入理解你編程的環境。大多數開發者只是對他們使用的工具有一個表層的理解,所以他們生產的代碼四平八穩。只有那些愿意花費時間深入學習,去了解底層都在做什么的開發者們,才能生產出優雅的、革命性的代碼。

此外,也有一些技術之外的“頓悟”。在我職業生涯的早期,我有一次和我們創業的老大一起去見一個客戶。這位客戶是一個很大的軟件公司的擁有人,是我們這個產業中一個重要的人物——更重要的是,他手上有我們需要的項目。在商談的過程中,我發現客戶想要我們做的東西根本做不成,因為他漏掉了一些技術問題。當時的我很傻很天真,就直接跟他說這個不行。一時之間,屋子里陷入寂靜,而這次商談也很快結束了?;氐睫k公室,我想,我肯定要被炒魷魚了,因為我頂撞了客戶。不過沒想到的是,我的老板教了我一件事,這使我終身受益。老板說,我道出事實這件事沒有錯。如果我們發現有一個問題將會導致項目無法進行,那么如果我們仍然接下這個項目,就是沒有職業道德。不過,問題在于我提出意見的方式:如果一個人的想法有錯誤,不要直接跟他說“這是錯的”。你應該做的是想辦法引導他自己發現問題所在。

其實這些事請我現在仍然不是特別擅長。我仍然會因為項目的技術挑戰而撓頭,也經常會忘記了人的因素。不過,那些“頓悟”的瞬間的確存在。

3、你的編程生涯中,最令你印象深刻的事情是什么?如果你能夠給那時的自己提供一些建議,你會說些什么?

在西方,我們有這樣一條諺語:“祝你生活在有趣的時代(May you live in interesting times)”(譯注:據傳這是一句古老的中國詛咒,由一位英國駐中國的外交官傳回西方,后變成西方的祝詞。中文原文已不可考,有說法是“寧為太平犬,不做亂世人”)。這是一條溫柔的詛咒,因為有趣的時代同時也意味著艱難的時代。我覺得我們現在正生活在這條詛咒當中。沒有任何一個時代比我們現在所處的時代更加有趣,同時也更加令人混亂。新的技術,新的技巧,新的語言,新的期待。所以我最大的希望是,我編程生涯中最美好的事情還沒有到來。我希望最令我印象深刻的事情發生在未來。我的工作,我的熱情,都在盡可能的經歷更多的事情,所以最令我印象深刻的事情一定會發生在未來。

以下為51CTO采訪英文原文

1. Aspiration

When you first started programming, what was your technical aspiration? Has your aspiration changed over the years?

I don't think I had a technical aspiration when I first started programming—that kind of thing came a lot later.

When I was 16, I was planning to study mathematics at college. I was still in secondary school in England, and a group of us had finished all our required classes a year early. The school was looking for things for us to do, and suggested we might be interested in attended a class on computer programming at the local technical college (a vocational school). This was back when you interacted with computers using 300 baud modems, teletypes, and paper tape. And sometime during the first month of that class, I realized that I'd found something I truly loved. I spent hours after school slowly typing Basic programs on to paper tape before uploading them to a mainframe. I even did my first metaprogramming—we were only allowed to store 5 programs up on the mainframe, so I wrote a Basic program that stored my other Basic programs inside itself, a kind of mini filesystem.

After that experience, I knew I wanted to write code. I stopped looking at university mathematics courses and instead looked for computer science. And I was lucky—Imperial College in London had just started a course, and I got in. It really was the best possible introduction to the field—the course itself was deep, and the work outside the course was practical and challenging. I ended up paying my way through school with programming jobs.

After I graduated, I started working on a PhD, but got tempted away by a start-up. I think this was also a very lucky move, because I suddenly learned the other side of the software business—clients, projects, and doing things right. The company was very small and full of very smart people, so we'd do just about any work we could find. I got an incredible amount of experience in a very broad range of topics in just a few years.

All of this was driven by a passion, not by any kind of technical aspiration. I was just doing what I enjoyed doing.

But, over time,I also started to realize that there were patterns in the work—underlying realities in the craft of developing software. Eventually, Andy Hunt and I captured some of these in our book The Pragmatic Programmer.

But I still don't think these count as "technical aspirations." You question was a good one, and it made me think. In the end, I don't think I have a technical aspiration, if the phrase means "I hope I do this or that technical thing." Instead, my aspiration is simple—I want to continue to do what I enjoy doing. I want to continue to write code, and to solve people's problems using code. I want to continue to improve at my craft, and to experiment with and experience new areas of software development. I know it's selfish, but I want to continue to have fun!

2. Insight

Have you ever experienced the change from "have no insight" to "have insight" in programming? Has there been a day on which you suddenly realised "oh, this IS the right way to programming"? If so, can you describe what grabbed you on that day?

I have definitely had those moments where suddenly something snaps into place. Sometimes these are really low-level technical moments. I remember when I was programming PDP-11 computers, I came across a library subroutine that converted a binary number into its ASCII octal representation. Of course, this would have been a function that any programmer could write. But this particular developer had done it *elegantly*, using a deep knowledge of the PDP's various flag registers and rotate operations to do the whole thing in just four or five lines of assembler. It wasn't the small size of the code that I remember—the insight was that you had to really understand the environment you were using if you wanted to be elegant. Most people have a surface understanding of the tools they use, and they produce solid, average code as a result. But the people who spend the time to dig deep, and to learn what's really going on—those are the people who produce elegant and revolutionary answers.

I also experienced nontechnical insights. I remember early on in my career I was at a client meeting with the owner of the startup I worked for. The client was the owner of a large software company; an important person in our industry, and, more importantly, someone with a project that we really needed :)  During the meeting, it became clear that what he wanted us to write wouldn't work—he'd overlooked some technical problems. Being very young and very naive, I told him this. The room went silent, and the meeting ended very quickly after that. On our way back to our office, I expected to get fired for disagreeing with a client. But, instead, my boss taught me a lesson that I still use. He said that I was right to speak up. He said that if there was a problem that would stop the project working, we'd be unethical if we went ahead. But then he said that I was wrong to speak up the way I did—if there's a problem with a someone's ideas, don't just say "that's wrong." Instead, try to guide them to find the problem for themselves.

I'm not very good at this—I still get caught up in the technical challenges of projects, and I too often forget the human side, But the lesson—the insight—is still valid.

3. Back to the past

What is the most memorable thing in your programming career? If you can give suggestions to yourself at that time, what would you say?

In the West, we're told that there is a saying: "May you live in interesting times."  it's meant as a mild curse—interesting times are difficult times. And I think we're all living with that curse right now. Times have never been more interesting, or more confusing. New technologies, new techniques, new languages, and new expectations surround us. So I very much hope that the best part of my programming career has not yet happened. I hope that the most memorable thing I'll do lies in the future. My job, my passion, is to experience as much as I can so that I maximize the chances that this will happen.
 

【編輯推薦】

  1. 程序員的十個層次 你屬于哪一層?
  2. 成為完美程序員的10種品質
  3. 鐘勝輝談PHP發展的現狀和前景
  4. 程序員,你適合做一個項目經理嗎?
  5. 是什么成就了一名“高級”程序員?
責任編輯:彭凡 來源: 51CTO
相關推薦

2014-07-22 10:12:33

程序員

2013-07-25 09:47:40

程序員職業發展

2013-07-09 09:11:50

程序員

2015-11-24 16:33:05

程序員思考分享

2013-08-01 10:03:41

程序員

2016-03-02 10:49:08

程序員快樂

2012-11-08 11:19:38

2020-09-26 21:23:26

程序員代碼編程

2020-07-10 09:55:15

程序員技能開發者

2011-12-23 09:16:19

2015-07-27 10:51:55

程序員快樂

2013-08-20 09:33:59

程序員

2011-05-31 10:50:36

程序員

2012-11-12 10:46:37

2015-04-30 08:41:04

程序員高效健康

2015-04-30 10:51:37

程序員高效快樂

2011-12-20 10:02:01

ASP.NET

2023-11-27 09:25:42

程序員思維

2009-05-13 11:40:19

編程語言開發語言Perl

2011-05-13 14:34:02

程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区二区三区 | 国产区一区二区三区 | 国产一区二 | 欧洲亚洲一区二区三区 | 北条麻妃99精品青青久久主播 | 在线观看成人小视频 | 91毛片在线看 | 影音先锋亚洲资源 | 欧美一区永久视频免费观看 | 一区不卡在线观看 | 精品欧美一区二区中文字幕视频 | 美女黄网站视频免费 | 日韩精品在线观看一区二区 | 日韩中文字幕在线视频观看 | 久久久99精品免费观看 | 午夜精品一区二区三区在线视频 | 99热这里有精品 | 91国产精品 | 成人午夜免费网站 | 中文字幕在线一区 | 国产精品一级 | 精品国产青草久久久久96 | 国产精品一区二区在线 | 亚洲高清在线 | 少妇特黄a一区二区三区88av | 在线一级片 | 91精品在线观看入口 | 91精品国产综合久久久久久漫画 | 91欧美精品成人综合在线观看 | 男人av网 | 亚洲区中文字幕 | 欧美一级大片 | 网站黄色av | 精品国产一区二区三区久久狼黑人 | 国产福利视频 | 欧美中文字幕 | 在线国产视频观看 | 日韩国产在线观看 | 亚洲精品久久久久久久久久久 | 九色.com | 精品av天堂毛片久久久借种 |