① 青島外賣小哥幫崩潰的程序員寫代碼,外賣員真的是萬能的嗎
外賣員當然不是萬能的,會出現這樣的情況,只不過是因為程序員的工作實在是太累了,所以他們為了放鬆心情,為了改變,所以才會當外賣員。
② 「見自己、見天地、見眾生」具體分別指什麼
最近一直在思考這問題,慢慢有點體會,這也許就是電影里的另外一句話,「念念不忘,必有回響"最好詮釋,好像明白了一點。下面都是我的一家之言,望板磚伺候。 我是程序員,那就從程序員的境界說起。在程序員的學習道路上,從一開始各種bug,到無止無盡的知識點,總是感覺這條道沒有盡頭,心中一片亂麻。但隨著學習的深入,尤其是對一門語言深入了解後,又做個幾個項目。慢慢的就會覺得自己如天神下凡,無所不能。程序語言是萬能的,程序員是萬能的。這也許就是第一層境界,見自己,程序員的整個內心都是圍繞自己本身來轉的。看問題的方式也是從技術的角度,去看待問題。 隨著接觸的項目越來越復雜,規模越大。一開始肯定會發現程序語言只不過是程序員和計算機交流的工具。語言沒有優劣之分,只有用最適合自己項目的語言,才能達到事半功倍的效果。也明白了做項目不是說程序員的腦細胞太活躍,需要找個方式去消耗腦細胞。在計算機上的項目都是為了解決人類的吃喝住行,玩樂,使其變的更加白便利,突破地域,時間,種族的限制。讓知識無疆界,讓種族無歧視。這時候程序員內心慢慢的平靜下來了,明白了自己只是這浩浩乾坤中的一粒沙塵。離開了你,太陽正常升起。只有做惠及人們生活需求,滿足大家心靈愉悅的項目才是真真的好項目。這時候的境界已經超出了技術的范疇,到了做對事情的范疇。只有順天道者,方可屹立在這神州大地。在電影中宮二想起自己小時候在雪地里練拳的經歷,就是通過與自然的完美融合,感受到了武術的真真精神。然後在給父親復仇的時候,去寺廟里希望菩薩給她留一盞燈。都說明了與這朗朗乾坤相比,自身實在是太渺小了,通過自身的努力去完成的事情並不多。這也許就是所謂的見天地吧。 有人說宮二父親沒有見到眾生,我不同意。他要沒見過,他還提出這概念幹啥。見眾生,我自己的理解就是授業解惑,自己形成自己一套獨有的理論體系。做為程序員大家都遇到過這樣一個現象,當自己將一個事情給別人能講清楚,別人也能聽懂的話,一般你做的這個事情問題不大。如果你自己講起來都非常別扭,別人也聽的一頭霧水,基本上你這東西肯定有更好的一種方式。授業解惑不僅僅是將自己知道的知識傳播給大家,當然這也是一種好的品德,分享知識本來就是一種美德。更重要的是自己對知識的一種升華和提煉。程序員界很少有收徒的習慣吧,著書立著,將知識傳播出去。讓眾人去得到幫助,同時反過來也是對你技術最好的一種考驗。
③ 如何成為一個程序員
想要從零開始成為程序員,先不要著急的去學習,而是先要去了解程序員。
1.隨便在招聘網站搜索就會發現程序員會分有很多類型,那你就需要確定自己將來想要發展的方向,自己的職業規劃是什麼?
2.通過搜索可以看到,剛剛起步的程序員工資並不是很高而且學習階段也會比較忙,那這個時候你是不是靠考慮一下如何兼顧生活和工作?工資如何支配合理等問題(沒有經驗限制的工作相對較低)
PHP程序員崗位要求
關於學習建議你這樣試試看:
學習的方式基本可分為兩個類型,一個是碎片化的學習,一個是系統進修。
你可以從網路上各機構大量的視頻或者書籍得到相關的學習資料。從大量的資料中,發現真正的干貨,從而不斷學習,這屬於碎片化的自習。由於自學周期比較長,還有不少小夥伴選擇是一邊工作賺取生活費,一邊再利用閑暇時間學習,當然如果你的精力充沛,這也是一個好辦法。
如果要報培訓班, 一定要找正規的培訓機構學習,不然容易被坑。培訓機構裡面的課程都是現在工作中需要用到的,時間短,基本上是可以讓你快速上手工作的。但是要把所有的知識點都消化就沒那麼快了,所以需要自己私下更加的努力,鞏固學習。
注意事項:
1. 自學要注意的是:自學入門時會很枯燥,不要兩天打魚三天曬網!!!切記
2. 在培訓機構里學習要注意的是:勤加練習、主動自學、有問題提,不懂的盡管問老師(把交的錢發揮到極致),不然之後再有問題就沒有這么好的機會能夠直接得到老師的指點了。
最後,祝願想要成為程序員的小夥伴都能心想事成哦(*^▽^*)~
④ 程序員適合使用什麼機械鍵盤
看你喜歡什麼手感的了。青軸的觸發壓力最小,其餘均相同,黑軸的觸發壓力最高,然後就是青軸,茶軸,紅軸依次減弱,而段落壓力只存在於青軸與茶軸之間。
紅軸,可以算作是黑軸的輕量化手感版本,同樣的直上直下,沒有停頓的觸感,在回彈上更加的綿軟柔和一些,手感上類似擠壓棉花一般,鍵入手感連綿不絕,按壓手感輕盈。
茶軸,在手感上更偏重於給用戶一種帶有輕微咔嗒,較弱段落感的觸感反饋,且回彈手感與紅軸類似,通俗一點講就是融合了紅軸的綿軟手感加上弱化了的青軸段落感,兼顧了兩者的特色,但又不完全相同,兼顧打字辦公人群,屬於萬能軸,不過略有輕微噪音,但不太強烈,且茶軸整個行程手感類似蹦極一般。
青軸,作為擁有段落結構式的代表性軸體之一,也可以說是最具有機械鍵盤特點的軸體了,在手感上可以給用戶帶來一種咔嗒咔嗒,強烈段落感的觸感反饋,回彈過程略有停頓,通俗一點講就類似圓珠筆按下時的卡簧感,長時間錄入過程中形成一種敲擊節奏感。
⑤ 程序員能恢復聊天記錄嗎
程序員不是萬能的,不能恢復聊天記錄,刪除了就是刪除了,除非伺服器還保留著你的聊天記錄,但我覺得不可能保留,沒有什麼價值。
但是術業有專攻,聊天記錄說白了就是信息,刪除了,也會有痕跡的,需要藉助電腦等相關工具進行數據恢復。這不是程序員的工作,假如數據刷新太多,也不一定可以恢復。
⑥ 成為程序員(或碼農)有哪些方面的要求
1、 程序員意味著要編程序。(如果你僅僅想得到一份高薪水的工作,喝喝咖啡就等老闆發薪水,我奉勸你還是另找一份更合適的工作,譬如練攤,真的,兄弟,這份工作不適合你)
2、你是學文的還是學理的,編程序也許需要浪漫,但更需要邏輯和嚴謹。(說坦白點就是,在你沒有找到樂趣以前,它很枯燥)
3、你有對新技術追求的熱情嗎?你有刨根問底的探索精神嗎?(熱情絕對是最重要的!你仔細思考一下自己的性格適合當程序員嗎?)
4、當程序員決不是什麼好差事,時刻需要學習,需要思考。(直到你成為那個可以引導別人去學習和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)
5、程序員的未來很迷茫。(但我認為關鍵看你自己!我希望你是一個有追求的人,不僅僅是混碗飯吃。因為真正的樂趣在於創造;如果你能改變軟體業的歷史,那才是英雄;不想成為Bill Gates,不想成為Dennis Ritchie和 Bjarne Stroustrup,我會說你沒有追求。有個關於程序員未來的笑話,也許你還沒聽過,你該聽一聽,摘抄如下:
一個程序員對自己的未來很迷茫,於是去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問Lippman,他現在領導的程序員的隊伍可能是地球上最大的」
於是他去問Lippman。
Lippman說「程序員的未來就是駕馭程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問Gates,他現在所擁有的財產可能是地球上最多的」
於是他去問Gates。
Gates說「程序員的未來就是榨取程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝說「我的孩子,你去問侯捷,他寫的計算機書的讀者可能是地球上最多的」
於是他去問侯捷。
侯捷說「程序員的未來就是誘惑程序員」
這個程序員對這個未來不滿意,於是他又去問上帝。
「萬能的上帝呀,請你告訴我,我的未來會怎樣?」
上帝搖搖頭「唉,我的孩子,你還是別當程序員了」)
6、當程序員還是很有樂趣的。(當你學到新知識時,當你有新的思想見解時,當你有新的產品問世時,和知己探討你的成果時…我問你,覺得這些是樂趣嗎?)
7、當程序員不易也不難。(世間事有難易乎?為之…;不為…。你有決心和信心嗎?)
8、你真的要當程序員?是你自己的想法?
9、你捨得花錢買書嗎?(讀好書絕對是學習編程的最佳捷徑。你一定會說,現在電腦書籍真他XX的貴,沒法子,誰讓知識和技術在人家的腦袋,在人家的書里呢;等你寫書時可以把價格定低一點,記著還有好多沒錢但想買書的兄弟很困難呀。要捨得買書,買好書,不好的的書不如不讀,其害大於其益,關於買什麼書,你可以問高手或看候捷的書評;准備一個小本子記錄你想買的書的名字,逛書店時看看,如果好就買下,記住要讀,別光買不看。) 10、我告訴你,程序就是:任何有目的的、預想好的動作序列,它是一種軟體。
11、編程序就是編寫程序。
12、你想好了嗎?(如果你想好了還是決定要當程序員,可以繼續往下讀;否則,你可以繼續尋找別的出路了。)
(三) 一個程序員應該具備的基礎知識和概念
1、計算機是有什麼組成的,CPU是什麼東西,其工作原理是什麼。(對於這些以及下面將要提到的概念我不會告訴你什麼答案,你可以看相應的教材,關於教材我會在下一部分詳述,記住理解最重要!)
2、機器語言和微指令集的概念。
3、程序的概念。
4、匯編語言是低級語言但不是機器語言。
5、高級語言主要有那些?(C,C++,Basic,Pascal,Fortran,C#,Java等等;如果你是中國軟體業的英雄,你也寫一門語言,最好不用英語) 6、編譯程序和解釋程序的概念和其原理。(編譯器是高手和專家編寫的)
7、HTML、XML等是標識性語言。
8、Prolog是人工智慧語言。
9、操作系統OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,還有一些實時OS,嵌入OS,編這些的絕對是高手)
10、Windows編程說白了就是Windows API的調用。(中國的程序員很多隻是會編windows程序,用的是VB,我的建議是這些程序員頂多隻是低級編碼員,我稱其是coder)
11、VC++、VB、BC、BCB、Delphi、VF等都只是編程的工具和環境,不是編程語言。
12、面向結構的設計概念。
13、面向對象的概念。(好好理解,兄弟,這個東西還是很重要的)
14、軟體工程的概念和原理。(如果你想當老總就需要好好研究了,系統分析員比編碼員要高一個等級,薪水也高喲)
15、資料庫的概念。(要熟悉一些著名的資料庫系統和語言的名字,如Orcle,SQL,DB2,DyBase等)
16、了解網路概念。
17、了解多媒體概念。
18、熟悉和掌握數據結構和基本演算法。
19、是不是要求太高了,別著急慢慢來,進步在不知不覺之中。(一旦開始學習,一個月以後你就會有一個基本的概念;兩個月以後你就會感覺自己有了全面的基礎知識;當你知道編程序是怎麼回事時,說明你已經入門了。也有很多人編了很多年程序還沒有入門呢,你不會希望自己步其後塵吧。要有信心和耐心。沉不住氣怎麼能成大事?!)
(四) 教材推薦
――-推薦的教材主要還是針對概念來的,最好選用名校的教學用書。
1、《計算機組成原理》(熟悉)
2、《數據結構》(掌握)
3、《操作系統》(了解->熟悉)
4、《The C language》(掌握)
5、《編譯原理》(了解原理)
6、《匯編語言》(了解)
7、《計算機網路》(了解)
8、《軟體工程》(了解)
9、《關系資料庫》(熟悉)
10、《The C++Languege 》(掌握)
11、《面向對象設計》(掌握;結合C++學習)
(五)一些經驗和體會
1、真正的程序員用C++;(一位專家說的)
2、動手去編程序;
3、動腦去思考;
4、要有良好的編程風格;
5、讀書,讀好書,盡量讀原版書!(我反復強調這一點,讀書要有選擇,堅持讀好書,名家出的經典書,不要浪費實踐在一些粗製濫造的書上面;堅持博覽群書)
6、有自己的學習計劃;
7、總結自己的經驗教訓;(准備一個筆記本,記錄錯誤和心得)
8、不要怕學新東西;
9、要有軟體工程的思想;
10、善於發現問題,然後去尋找答案;
11、向高手請教;(要虛心直到你成為高手)
12、和同行交流;(不善於交流肯定不行)
13、懂得軟體的實質,不要被千變萬化的表象所迷惑;
14、真正要學慣用的是編程語言和方法,不是什麼庫,什麼類,什麼工具;(學用那些什麼庫都比較簡單,但光會這些庫,我覺得還遠遠不夠)
15、學習wiodows編程主要是學習windows OS和win32 API;
16、有空了解一下嵌入式開發;
17、有空了解一下PDA軟體開發;
18、了解一下.NET框架和C#語言,也許它是你新的衣食父母;
19、要有耐心,不要作浮躁的人;
20、對程序加註釋,並保留你的老程序;
21、學到的東西越多,了解的越多,你就越接近專家;
22、有空去逛逛CSDN,那裡有你很多知己;
23、要有信心成為一個優秀的程序;
(六)一些好書的推薦
1、《The C Programming language》 (Keinighan & Dennis Ritchie 1988)
2、《The C++ Programming Languague》(Bjarne Stroustrup 1997)
3、《Inside The C++ Object Model》 (lippmans)
4、《Effective C++》 (同上)
5、《More Effective C++》 (同上)
6、《Exceptional c++》
7、《C++面向對象高效編程》
8、《設計模式》
9、《Thinking In C++》
10、《The Standard C++ Bible》(一般推薦)
11、《The Art of Computer Programming 》
12、《Programming Windows》 (Charles Petzold)
13、《VC++5.0技術內幕》
14、《MFC 深入淺出》
15、《軟體需求》
16、《Advanced Windows》
17、《C++ primer》
18、《win32程序員參考手冊》
19、《用TCP/IP進行網際互連》
20、《COM 本質論》
(七)學習計劃
――-這個學習計劃是我個人定的,也共享給大家參考一下,共同進步吧。 1、《計算機組成原理》
2、《操作系統》
3、《數據結構》
4、《匯編語言》
5、《 C 》
6、《 C++ 》
7、《VC 技術內幕》
8、《Programming Windows》
9、《深入淺出MFC》
10、《Advanced Windows》
11、《Inside The C++ Object Model》
12、《Thinking in C++》
13、《Effective C++》
14、資料庫
15、網路
16、嵌入式OS和編程
17、硬體單片機
18、.NET和C#
19、軟體工程
20、UNIX和Linux
⑦ 樂高機器人的萬能程序有哪些
樂高教程:
n 觸動感測器
n 光電感測器
n 角度感測器
n 溫度感測器
n 感測器的使用方法與技巧
n 其他感測器
4.1簡介
馬達通過齒輪和滑輪傳動,可以讓你搭建的機器人動起來,他們就如同是移動機器人腿和手臂的肌肉。同時,你還可以使用感測器來裝備你的機器人,它們就如同是機器人的眼睛、耳朵和手指。
機器人套裝中包含兩種感測器:觸動感測器(兩種)和光電感測器。在本章中,我們主要是描述它們的特性,對於其它的感測器你可以單獨購買,如:角度感測器和溫度感測器。每一個設備都有其特定的作用,你將會因為它們的功能強大和所能涉及的范圍之廣而感到驚訝。當然也包括這種情況,可以用一種感測器仿效另一種感測器,以用來代替不能使用的感測器。利用RCX上的紅外光電,使用一些小技巧,你可以把把你的光電感測器變成一個雷達。
在閱讀本章的過程中,我們希望你能把機器人套裝放在身邊,這樣你可以跟隨我們的例子親自動手去做。為了保持其完整性,我們還會講一些機器人套裝的擴展套裝和技術套裝的內容。若你現在還沒有這些也不要擔心,這不會影響到你搭建體積較大的機器人。
4.2觸動感測器
觸動感測器(圖4.1)是樂高感測器大家庭中最簡單、最直觀的一種。它的工作方式非常像是你家門鈴上的按鈕:當它被按下時,電路接通,電流就會通過,RCX就能夠檢測到這個數據流,你的程序就會讀取觸動感測器的當前狀態:開或者關。
圖4.1 觸動感測器
如果你已經開始使用機器人套裝,閱讀了Constructopedia,並搭建了一些模型,你可能對感測器的一般用途比較熟悉,如緩沖器。緩沖器是與周圍環境相互作用的一種簡單方式,當你的機器人遇到障礙物時,可以用它們來進行檢測,並由此而改變運動狀態。
典型的緩沖器是一個重量較輕的可移動裝置,事實上,當它碰到障礙物時會把沖擊力傳遞給觸動感測器並使之關閉。你也可以發明出很多種緩沖器,但它們的外形應該能夠反映機器人的外形,而且還能反映出環境中障礙物的外形。如圖4.2中所示一個非常簡單的緩沖器,可以很容易發現牆壁,假如房間里有像椅子一樣等復雜障礙物,它的效果就不好了。在這種情況下,我們建議你通過實驗來進行。為機器人設計一個緩沖器,在房間的周圍離地板適當高度的地方移動它,檢查它是否能夠發現所有可能的碰撞點。如果你的緩沖結構較大,當它用最佳部位撞擊到障礙物並按下觸動感測器時,不要以為這就是正確的。圖例4.2是一個不太好的緩沖器,因為當碰撞發生時,它幾乎不能用橫軸的邊緣來關閉觸動感測器,說它是一個不好的緩沖器是因為它把整個碰撞產生的力直線傳輸給了感測器,也就是說,在機器人身上安裝一個非常穩固的支架對感測器的安裝是非常有必要的。
圖4.2簡單的緩沖器
根據經驗,應該嘗試不同的碰撞來看看緩沖器在各個位置是否能很好的工作。你可以編寫一個無限循環的小程序,當感測器被按下時,發出一聲蜂鳴聲用來測試你的緩沖器。
談起緩沖器,人們往往會想到當遇到障礙物時開關會被按下。這樣說似乎有點絕對,在發生碰撞的時候同樣可以松開開關。看一下圖4.3,橡膠皮筋可以使積木輕壓著感測器,當緩沖器的前面部分接觸到物體時,開關就會被釋放。
圖4.3 平常壓下的緩沖器
實際上,向你推薦這種緩沖器有這樣幾個重要的原因:
l 沖擊力不可能直接傳遞給感測器,感測器與標準的樂高積木相比更容易受損壞,因此應避免不必要的撞擊。
l 橡皮圈可以吸收撞擊力,這對你的感測器和機器人來說都會起到保護作用,當你的機器人速度非常快,或者重量大,或者反應比較慢,或者具備其中的一個因素時,這種保護作用顯得尤其重要。
緩沖器是一個非常重要的裝置,而且觸動感測器的應用也非常廣泛。當你想告之RCX一個事件發生時,你可以使用按鈕一樣人為的把它按下去。你能想像出類似的情況嗎?事實上,有很多。比方說,你可以按下銨鈕告訴RCX」現在讀取光電感測器的值」,從而進行讀取校準(我們將在以後的部分進行討論)。
另一個常用的作用就是把觸動感測器作為一個位置控制器來用。如圖4.4,機器人向前看時(圖4.4b)就關閉了頭部(圖4.4a)的觸動感測器。通過編程可以在水平面上實時的控制頭部的旋轉(向左或向右),當感測器被按下時,機器人的頭部就能轉回到正確的位置,值的注意的是,我們在這個例子中用到的凸齒輪在與觸動感測器相配合時是非常的有用,你可以讓軸通過三個十字孔個中的一個來選擇合適的距離去關閉觸動感測器。
圖4.4 用觸動感測器定位
在本書的第三部分我們還會介紹位置控制的其它一些應用。事實上,在搭建你的機器人之前需要你去研究一些不同的方法。
我們再舉幾個事例來說明感測器的應用。假如你想搭建一個電梯。你希望電梯可以在任何一層都能停下。首先你會想到在每一層安放一個觸動感測器,當按下其中一個時,電梯室會在那一層停下。這是一個好方法,但這里有一個小問題;你僅有兩個觸動感測器,對你來說,一個電梯僅有二層不是非常實際,你可以再買一個觸動感測器,但這只能再加高一層,並沒有解決實質性的問題。此時,RCX的三個輸入埠已經全部被佔用。突然,你會想到一個辦法:為什麼不把感測器放在電梯廂上而不是外面呢?在電梯廂上固定一個感測器,這樣只需一個感測器就可以加高更多的樓層了。從最初的方案到現在更好的方案,兩個系統是完全相同的嗎?答案是否定的。首先,你需要決定廂的絕對位置,當它在第二層時,你僅是可以知道它的相對位置。那麼,你需要一個初始點,從起始點開始計算就可以推斷出廂的位置.或者程序運行時,需要廂體在一個特定的位置,或者用第二個感測器來探測一個特定的樓層。例如,在最底層放置一個感測器,因此程序一開始就降下電梯到最底層。那樣就可以計算出廂體的絕對位置了。
現在,電梯就能夠准確的升降了。但你還有最後一個問題需要解決:如何告訴你的電梯它應該去哪一層呢?在每一樓層放置一個感測器去提示電梯是不切合實際的。在RCX上只剩下一個輸入埠了。你要用這一個觸動感測器來做什麼呢?你還可以採用以前的方法嗎?可以,你可以計算一個觸動感測器被按下的次數。比如說,被按下三次表示是三樓,依次類推。現在你就可以去搭建你的電梯了。
方法與技巧
計算按下次數
下面這個例子是用偽代碼來編寫的,一個代碼並不與實際編寫語言相對應,而是界於程序語言和機器語言之間。使用偽代碼編程在專業程序員中是一種非常普遍的做法。
計算觸動感測器被按下多少次需要一些小竊門。假如你寫了一些簡單的代碼,如下:
Counter =0
repeat
if Sensor1 is on then
Counter = Counter +1
end if
end repeat
當你保持觸動感測器被按下很短的間隔內,你的程序代碼就會在你的RCX上飛快的執行。然而,在記錄下一個新的按下之前,需要松開觸動感測器:
Counter = 0
repeat
if Sensor1 is on then
Counter =Counter+1
wait until Sensor1 is off
end if
end repeat
現在,你編寫的代碼正確地記錄了從斷開到閉合的變化。在你的代碼中,有一個重要的特點需要介紹一下:當它在一段時間內接收不到觸動信息時,你希望你的計數程序停止。為了實現這一點,你需要使用一個計時器用來測量上一次按下時間與最後一次時間的間隔:
Counter=0
interval = <a proper valve>
reset Timer
repeat
if Sensor1 is on then
Counter = Counter + 1
wait until Sensor1 is off
or until Timer if greater then Interval
reset Timer
end if
until Timer is greater then Interval
假如你的時間間隔是兩秒。當計數程序開始時,計時器和計數器首先復位為0,然後開始檢測感測器的狀態。如果兩秒內沒有按下觸動感測器,它仍將保持復位狀態,如果有觸動感測器被按下,此動作將被記下並等待使用者釋放按鈕,計時器復位為零, 在程序停止運行之前,使用者可以在兩秒內第二次按下觸動感測器。
4.3光電感測器
用」看」來形容光電感測器的功能有點誇大其辭。實際上它只是用來檢測光並測量其強度。盡管受到限制,但其應用范圍仍比較廣。
圖4.5 光電感測器
光電感測器和觸動感測器的最大區別是,後者返回的是一些數值而不是單純的開/關狀態。你所讀到的數值由光電感測器在那個時候所檢測到的光強所決定。這些數值以0至100的百分數的形式返回,光值越大,百分數就越大。你可以用光電感測器來做什麼呢?你可以用它搭建一個由光電感測器所驅動的機器人,我們稱之為光的追隨者,它可以檢測周圍的環境,找到一個強光源(或者是最亮的)並朝著它前進。在一間足夠暗的房間里進行,以免產生干擾,你也可以用手電筒來控制你的機器人。
檢測外部光源的功能是非常有趣的,但是或許你不能用它來做最令人驚奇的事情。我們介紹一下光電感測器的另一個用途:它不但可以用來檢測光強,而且還可以自身發光。提供穩定光源的是一個紅色的發光二極體,因此你可以用來測量反射光並傳給感測器。
當你用來測量反射光時,你必須去避免一些來自其它光源的干擾。需要注意的是光電感測器對IR所發出的光也非常敏感,像典型的遠距離控制器發出的紅外光,如攝像機;或者是樂高紅外發射器。
設計與計劃
讀取周圍的光值
樂高光電感測器並不適合於測量外部光源來說,因為其靈敏度比較弱。紅色發光二極體所所發出的光太靠近檢光器以致於過多的影響了光值的讀取。如果你想測外部光源,你應該考慮盡可能的去減少紅色發光二極體的影響。一個簡單的辦法就是在光電感測器的前部放一個1×2的單孔積木塊,.更多的行之有效的辦法需要你對光電感測器有些細微的改動。在Ralph Hempel的網站中,他提到了如何對光電感測器作修改,既不是永久的改變也不會損害你的光電感測器。(見附錄A)
光在表面的反射率取決於許多因素,主要是表面的顏色,質地和它距光源的遠近。黑色物體的反射能力要弱於白色物體;黑色光滑表面的反射能力要強於黑色不光滑表面。另外,距離光電感測器越遠,光電感測器所檢測到的反射光就會越少。
這些因素都是相互依賴的,通過光感讀取的值,並不能說明是由哪個因素引起的。但你可以保持其它因素不便,而讓一個變化,這樣就可以通過讀取的數值來推斷出環境的一些變化。例如,如果你的光電感測器經常對著同一個物體,或者相同質地和顏色的物體,你能夠用它去測出它的相對距離。另一方面,你可以把不同的物體放置在光電感測器的前面,在恆定的距離內分辨出它們的顏色。
4.3.1測量反射光值
為了舉例說明測量反射光的原理,我們來做一個實驗。拿一個RCX並打開其電源,在任意一個輸入埠連接一個光電感測器,在你的程序中正確的設置其埠(紅色發光二極體應該發光)。准備一間光線較暗的房間,RCX有個控制模式,可以實時查看光感讀取的值。按RCX上的VIEW鍵,當小箭頭正確顯示在感測器所接的輸入埠位置。在顯示屏上會顯示出讀取的光線值。接下去你把光感放到桌上,在桌上以一定間隔(0.5cm,1cm,1.5cm)並排放置不同顏色的積木塊,保證積木之間的間距相等。查看數據,得到的是不同顏色的積木反射的光值是不同的。
再進行第二個實驗:將白色的積木快慢慢的移向光感,然後再慢慢的移開,觀察顯示屏上的數據,可以發現當光感與積木間的距離加大時數值將減小。我們的目的就是為了證明光感是不能同時判斷出距離和顏色的。我們重點強調在你使用光感時盡量避免外界光線的干擾。
方法與技巧
理解原始值的概念
了解原始值是很關鍵的,對於熟練的使用機器人套裝並不是必須的。但從另一個方面講,它可以幫助你理解感測器是如何工作的。
RCX把來自感測器(不管是什麼類型)的電信號全部轉變成范圍在0至1023之間的數字信號,我們稱之為原始數值。在程序中,你在一個埠上設置了一個特定的感測器,RCX會自動設定該感測器的原始數值范圍,例如,從觸動感測器讀取的數值范圍是1或者0,代表開或者關,當從溫度感測器讀取時就會轉變成攝氏溫度或華氏溫度。同樣地,光電感測器讀取時就會通過下面的方程式轉換成一個百分數:
百分數=146-原始數值/7
為什麼我們需要知道這種轉換呢?對於大多數應用程序來說,通過RCX返回的光感值的百分數形式更加有效,但也有這種情況,你需要所有光感變化值而百分數形式卻不能體現出光感值的一些變化。我們用一個例子來做一下說明。假設會有兩種不同的情形,光電感測器讀取707和713兩個不同的數值。把這兩個數值轉換成百分數,因為RCX只使用整數,需要將除的結果進行圓整。
146-(707/7)=146-101=45
146-(713/7)=146-101=45
在第二個方程式中數值101實際上是101.857…,去掉小數部分為101.就看部不出兩個值是不同的。我們知道在大多情況下數值的小數部分是不重要的。但也會有其它情況需要用到這樣一個微小的變化的數據
如果你用LEGO圖形化的編程環境為RCX編寫程序,你必須接受它的刻度值,否則無法處理原始數值。如果你選擇其它的編程語言,則可以直接處理沒有處理過的原始數值,在必須的時候,利用其優勢,可能會有更好的解決方案。
識別不同的顏色是光電感測器一個非常普通的應用。我們曾說過,光電感測器實際上並不是用來識別顏色的,而是用來讀取反射光值。因此,它很難把黑色和藍色的積木塊區別開。但目前來說,我們仍說它能識別顏色,在讀完之後您會明白真正的意思是什麼。
4.3.2沿線走
目前,光電感測器最普遍的使用方法就是用它搭建一個沿線走的機器人。
這個項目的設置是很簡單的,這也是之所以流行的一個原因。盡管其外觀簡單,這項工作仍需要引起足夠的重視,並需要你仔細設計和認真編程。我們將在第二部分詳細的討論這個主題的細節內容。當光電感測器在輕質地面上讀取一條黑線時,你要注意有什麼事情發生。
當把光電感測器放在地板上時,假設說讀取的數值為百分之七十,黑線為百分之三十。如果你想讓機器人緩慢的從地板移動到黑線或者是有污點的地方.你會注意到,數值不是從一個值突然跳到另一個值,而是會出現一系列的中間值。原因是光電感測器不是讀取一個點,而是光電感測器前部的一個小區域。所以當光電感測器穿過線的邊緣時,它所讀取的是地板和黑線的邊界值並返回一個中間值。
這個功能有用嗎?當然,有時有用,有時沒有用。尤其當我們涉及到沿線走時,它是有用的。實際上,你可以(或者說應該)編寫一段程序讓你的機器人沿著邊界走而不是實際的黑線。這樣當機器人需要改變它的行進路線時,它知道往哪個方向轉身:如果所讀取的值太」暗」,它應該向亮的區域前進,或有污點的區域。
技巧與提示
校準讀取值
有時,你並不能預先知道光電感測器實際上所讀取的數值是多少。假如你要參加一個沿線走的比賽:你並不能確定你的感測器所返回的地板和黑線的數值。在這種情況下,一般的習慣是,在你的程序中不寫入預期的常數值是比較好的。但可以讓你的機器人通過一個簡單的測量程序來讀取這些數值。繼續我們沿線走的例子,你可以專設一個空的輸入埠用來接入一個觸動感測器,當你把機器人放在地板上時手動按下觸動感測器,然後再放在黑線上,因此它就可以保存下讀取到的最大值和最小值。或者你可以編寫一個小的檢測程序,以取消那些限制。
當你需要控制一個更復雜的區域時,舉例來說,區域包括三種不同的顏色, 想像一個檯面被劃為白色,黑色和灰色三個不同顏色的區域。在白色和黑色之間的邊界上你如何能區別出灰色區域? 這時你不能只做一個簡單的讀取,你必須深入考慮其它的因素, 像預先讀取,或者你可以使你的機器人在一個地方收集更多的數據並推斷它所在的位置。要處理這樣的情況,對軟體的要求就會變得更加復雜。
光電感測器如同一個萬能器,它有很多種使用方法。你可以在光電感測器的前部放置一個彩色的可以移動的樂高梁來搭建一個對稱形狀的裝置.圖4.6就是一個這樣的例子。當你推或者拉梁的上部時,光電感測器就會讀取不同的光值。
圖4.6 用光電感測器作一個模擬控制
光電感測器與燈相結合(不包括在頭腦風暴套裝中)可做成一個光電管(圖4.7);當有物體擋在光電感測器和燈之間時,機器人就會察覺。值得注意的是,我們在光電感測器的前面放置了一個1×2的單孔梁,以減少來自周圍光線的干擾。
圖4.7 光電管
4.3.3接近探測
你可以用光電感測器做成一個雷達探測器用於檢測即將碰到的障礙物。這被稱之為接近探測。這項技術所基於的特性我們已經討論並探究過了,就是光電感測器可以根據反射光線來測定相對距離。假如你的機器人要直線前進,用一個光電感測器為它在前面引路。假如你的機器人要在一個暗室里移動,除了光電感測器上的紅色發光二極體之外沒有任何的光源。在向前移動的過程中,機器人連續不斷的讀取感測器所檢測到的光值。如果讀取值趨向於迅速增大,就可以推斷出機器人正向著一個物體前進。但不能推斷出障礙物的種類及與障礙物之間的距離,如果房間內沒有物體在移動,你確信機器人正在接近障礙物。現在我們有了一套系統可以躲避障礙物而不是局限於碰撞以後再檢測它們。
注意:
RCX內部的IR LED發射的是不可見光,光電感測器的紅色二極體發射的是可見光。
遺憾地是,當房間內有光源時,這項技術工作就有問題了,原因是你的程序不能區別自身反射回的紅色光還外界環境光線。你需要在機器人身上有一個更明顯的獨立光源提供更高的參考。
令人欣慰的是,正好有一個!RCX內部有一個IR LED可以發射信息給紅外發射儀或是另一個RCX。用RCX內部的IR LED以比特的編碼形式發送信息可以被紅外發射器所接收到。關於信息的內容我們並不關心;我們需要的僅僅是光。盡管紅外光對於肉眼來說是不可見的,卻與可見光具有相同的性質,LEGO光電感測器對此卻非常敏感。
所以,現在你的程序有了使用接近探測的所有條件。發送一個IR信息並立即讀取光電感測器的值.你最好把讀取的數值進行一下平均處理,這樣可以把外部光源所導致的影響降至最低(我們將會第12節討論這個竅門)。如果你注意到在隨後的二組值中有顯著的增加,舉例來說,百分之十,說明你的機器人很有可能正朝著障礙物前進。
4.4角度感測器
我們將要研究的第三個樂高感測器是角度感測器(圖4.8)。遺可是機器人套裝中沒有包含該部件,它的多功能性僅次於光電感測器。在3801 Ultimate Accessory套裝裡麵包含一個角度感測器,還有一個觸動感測器,一個燈,遙控器 和少量的其它附件。
圖4.8 角度感測器
方法與技巧
角度感測器是如何工作的呢?
因為角度感測器有四種不同的狀態,所以會返回四種不同的值。我們稱之為A,B,C和D。對於每一次完整的旋轉,它經過了四種狀態各四次—這也就是我們為什麼要用十六來計數的原因。如果角度感測器是順時針旋轉,它會讀序列ABCD…,如果是逆時針旋轉,讀取的結果會是ADCBA…,RCX會時刻檢測感測器,當RCX檢測到狀態發生變化時,它不但可以推斷出角度感測器已經轉動,而且還可以知道所旋轉的方向。舉例來說,從A轉變到B,或從D轉變到A,計數器將增加一個單位,然而,從D到C,或者是從A到D,計數器將減少一個單位。
角度感測器,顧名思義,是用來檢測角度的。它的身體中有一個孔,可以配合樂高的軸。當連結到RCX上時,軸每轉過1/16圈,角度感測器就會計數一次。往一個方向轉動時,計數增加,轉動方向改變時,計數減少。計數與角度感測器的初始位置有關。當初始化角度感測器時,它的計數值被設置為0,如果需要,你可以用編程把它重新復位。
通過計算旋轉的角度,你可以很容易的測出位置和速度。當在機器人身上連接上輪子(或通過齒輪傳動來移動機器人)時,可以依據旋轉的角度和輪子圓周數來推斷機器人移動的距離。然後就可以把距離轉換成速度,你也可以用它除以所用時間。實際上,計算距離的基本方程式為:
距離=速度×時間
由此可以得到:
速度=距離/時間
如果把角度感測器連接到馬達和輪子之間的任何一根傳動軸上,必須將正確的傳動比算入所讀的數據。舉一個有關計算的例子。在你的機器人身上,馬達以3:1的傳動比與主輪連接。角度感測器直接連接在馬達上。所以它與主動輪的傳動比也是3:1。也就是說,角度感測器轉三周,主動輪轉一周。角度感測器每旋轉一周計16個單位,所以16*3=48個增量相當於主動輪旋轉一周。現在,我們需要知道齒輪的圓周來計算行進距離。幸運地是,每一個LEGO齒輪的輪胎上面都會標有自身的直徑。我們選擇了體積最大的有軸的輪子,直徑是81.6CM(樂高使用的是公制單位),因此它的周長是81.6×π=81.6×3.14≈256.22CM。現在已知量都有了:齒輪的運行距離由48除角度所記錄的增量然後再乘以256。我們總結一下。稱R為角度感測器的解析度(每旋轉一周計數值),G是角度感測器和齒輪之間的傳動比率。我們定義I為輪子旋轉一周角度感測器的增量。即:
I=G×R
在例子中,G為3,對於樂高角度感測器來說,R一直為16.因此,我們可以得到:
I=3×16=48
每旋轉一次,齒輪所經過的距離正是它的周長C,應用這個方程式,利用其直徑,你可以得出這個結論。
C=D×π
在我們的例子中:
C=81.6×3.14=256.22
最後一步是將感測器所記錄的數據-S轉換成輪子運動的距離-T,使用下面等式:
T=S×C/I
如果光電感測器讀取的數值為296,你可以計算出相應的距離:
T=296×256.22/48=1580 距離(T)的單位與輪子直徑單位是相同的.
實際上,在程序不僅僅會用到乘法和除法的數學運算,還有更多的需要多留心(有關內容我們將在第12章進行進一步的討論)。
使用角度感測器來控制你的輪子可以間接的發現障礙物。原理非常簡單:如果馬達運轉,而齒輪不轉,說明你的機器已經被障礙物給擋住了。此技術使用起來非常簡單,而且非常有效;唯一要求就是運動的輪子不能在地板上打滑(或者說打滑次數太多),否則你將無法檢測到障礙物。如果是一個空轉的齒輪連接到馬達上就可以避免這個問題,這個輪子不是由馬達驅動而是通過裝置的運動帶動它:在驅動輪旋轉的過程中,如果惰輪停止了,說明你碰到障礙物了。
在許多情況下角度感測器是非常有用的:控制手臂,頭部和其它可移動部位的位置。值的注意的是,當運行速度太慢或太快時,RCX在精確的檢測和計數方面會受到影響。事實上,問題並不是出在RCX身上,而是它的操作系統,如果速度超出了其指定范圍,RCX就會丟失一些數據。Steve Baker用實驗證明過,轉速在每分鍾50到300轉之間是一個比較合適的范圍,在此之內不會有數據丟失的問題。然而,在低於12rpm或超過1400rm的范圍內,就會有部分數據出現丟失的問題。而在12rpm至50rpm或者300rpm至1400rpm的范圍內時,RCX也偶會出現數據丟失的問題。
這僅僅是一個小小的問題,你可以上下調整感測器來使其處在合適的范圍內。
⑧ 程序員為什麼要一直改bug,不能一次性寫好嗎
軟體可能在使用過程中沒有任何問題,但不符合產品的預期下圖源自「How projects really work?」,很形象的突出了客戶需要的產品和最終得到的產品不一致。
所以軟體想要變得成熟,Bug收集和處理機制是非常有必要的,比如:會影響客戶使用的優先順序高的Bug要優先修復。Bug是軟體的影子,也是程序員的噩夢實際上不能存在沒有bug的軟體,Bug和軟體如影隨形。就像我們使用的Windows,窮盡無數優秀的軟體工程師來設計給用戶優秀的桌面體驗,但也有各種層出不窮的bug。
程序員對Bug有多愛就有多恨,Bug無處不在,即使再牛逼的程序員也逃脫不了Bug的魔掌。想要完全避免Bug幾乎是不可能的,所以也不在一次性就寫好的程序。以上個人淺見,歡迎批評指正。認同我的看法,請點個贊再走,感謝!喜歡我的,請關注我,再次感謝!
⑨ 為什麼老闆總想著程序員把軟體開發成萬能傻瓜式,以後沒有技術人員也能做項目
一般我們中國把程序開發設計人員及程序維護測試人員都歸為程序員;
可以,高數只是數學方面的知識,很多沒有上大學的程序員開發程序做軟體能力很強,高數和軟體開發維護沒有必然的聯系,當然你連一些基本常用的數學知識也沒有就不行啦。
程序員的要求如下:
1:團隊精神和協作能力
2:文檔習慣
3:規范化的代碼編寫習慣
4:需求理解能力
5:模塊化思維能力
6:測試習慣
7:學習和總結的能力
我就是要問你 工作內容怎麼不一樣了
答:
首先軟體工程師與程序員工作上最大的不同,可以打一個比喻:把一款軟體比做一座大橋,那麼軟體工程師相當於施工總指揮,而一般的開發人員也就是程序員相當於建築工人!
所以很多人就說自己是IT民工就是這么來的;
軟體工程師的工作不同於程序員但是一個軟體工程師必定是一個優秀的程序員!
為什麼工程師要懂?
答:
前面也已經說了,高數和軟體開發沒有必然的關系,工程師也不一定要懂高數;要講一點高數是可以提升你的邏輯思維,但是軟體開發技術范圍很廣,這之間沒有必然的關聯,學了高數軟體開發就很厲害或者不學高數軟體開發就不行都是偽命題。
軟體的開發工具、開發技術在不斷地發展。在校學生所能學到的東西很難跟得上發展的需要但是也不能說那些東西完全沒有用,只有在完全理解了相應的基本技能之後你才能很輕松地掌握新的技能,軟體技術都是一個循序漸進的過程。所以高數只是你在大學裡面學習的東西,是很重要的但不是必要的;
軟體工程師要理解和領會軟體工程,軟體工程只是一個理論一個指導思想,搞軟體開發的都必須了解這些基本理論並在平時的工作中認真地去貫徹執行,做軟體工程師更是如此。
寫思路用懂的高數嗎?
答:
同上,寫思路的關鍵是要懂軟體技術,具體的實現不需過多的考慮,當然有時候設計的時候動數學建模也有幫助,不過不是必需的。
加一句,大學里學的知識上了社會很多都沒有什麼用處,社會是最好的大學,當然學好高數對開發什麼的也有幫助,但是關鍵是你要一直不斷地提升自己,高數再好軟體技術不好你也成為不了IT精英,成為高手沒有捷徑,不可能速成!天道酬勤,作為學生你應該知道眼前需要做什麼。那就是打基礎,多動手做程序,首先爭取成為一個優秀的程序員,技術達到一定高度再轉軟體管理方面的工作,比如:軟體工程師,項目經理,IT主管,IT經理,企業CIO。
⑩ 現在軟體開發專業前景如何
1.從事軟體開發多年,如果不出什麼意外還會繼續玩下去,程序員說白了就是一個混口飯吃的職業,說的高大上一點就是一種興趣愛好,每天不敲幾行代碼心裡總會感覺欠缺點什麼東西,開發軟體寫代碼就是一種職業談不上什麼高大山。
倒是很多對這個行業不是很理解的人對於寫代碼感覺十分的好奇,覺得能寫代碼的不是一般人,現在全國有幾百萬人的程序員說明普及型還是非常高,不是什麼高大上的職業。
2.外行人都是如何認識程序員這個職業的,主要原因還是不了解,畢竟很多人覺得能夠用代碼控制一些硬體或者做出很智能的產品特別好奇,而且不懂行的人覺得每個程序員都是萬能的。
就連基本的修電腦以及破解QQ密碼這種事情也是程序員日常要做的事情聯系在一起,就現在每次回到老家第一件事情就是給親戚朋友修電腦,從心底里不想折騰電腦,在公司裡面這都是網管做的事情。
有事情電腦出問題了自己也懶得去定位問題了,直接讓網管過來給整理就可以了,術業有專攻不可能每件事情都做得非常出色。
如果你想開發小程序或者app的話,可以通過第三方專業開發平台,來幫助你實現開發需求:廈門在乎科技-專注廈門小程序定製開發、app開發、網站開發