寫給深圳首期Python自動化開發周未班的信
你是否做了正確的決定?
深圳首期周未班的同學們大家好,我是Alex, 老男孩教育的聯合創始人,Python專案的發起人,51CTO學院連續2屆最受學員喜愛的講師,中國最早一批使用Python的程式設計師,當然還有一堆頭銜,看過我視訊的人都知道我喜歡吹nb啦哈, 今天要收著點,講正事。本來下面的話要在深圳當面跟你們說,但實在北京這邊太多事抽不開,只能以這種方式表達了。
2009年我第一次接觸Python,源於我做為移動飛信的第一名Linux工程師,一入職就要面臨上千臺伺服器上的應用程式碼集中部署的問題,那時還沒有saltstack\ansibale\jekins等這些好用的軟體,我那時只會用shell,寫了近千行程式碼才勉強搞定 這事,但實現的不好,於是我就埋下種子,想做一個通用的運維自動化平臺,09年呀, 做運維其實挺容易的,會個apache+tomcat, nagios,lvs懂點就能萬八千的。所以沒人要求運維會開發,但我想著做平臺那個事,於是自學,開始學c++, 結果很痛苦,學java一個月,還是寫不出東西,只到無意間看到python , 才有了今天的故事, 我自學了差不多得小2年,才能做出點像樣的東西 。 一個批量主機管理程式,像極了現在的ansible, 靠著這個工具,拿到了Nokia\新浪、聯想等公司的offer, 12年工資18k還算可以的。那時候 我就覺得,運維要是會了開發,非常有競爭力,之前對軟體、系統原理級的東西都不太懂,比如都說不明白執行緒、程序的關係,訊息佇列存在的意義不明白 等, 受開發人員鄙視是正常的。anyway, 會了開發後, 我的職業生涯就走的比較順,先後在金融公司、外企都做過, 最後一份是汽車之家的自動化架構師。
同時,自2012年起,我們開了第1期自動化Python開發班, 做為中國當時最早做Py的機構,比較尷尬,招生難,很多人並不覺得運維需要會開發,覺得運維會個shell就可以了。我當時斷言,自動化是大勢,不會開發的運維的終將被淘汰,Facebook一個運維可以管2萬臺伺服器,而我在汽車之家時,公司2000臺伺服器,卻需要40個運維管理。效率差在哪呢? 我舉個例子,公司每年要進行資產盤點,2千多臺伺服器的資產到了2014年了,竟然還在用excel表維護, 但資產經常會變化, 加個硬碟、記憶體, 報廢機器、業務 線變更 等經常換,靠 人肉維護 久了, 就會導致不準。 所以年終必須下到幾個機房一臺一臺的再對一遍,幾個運維兩三天的時間就幹這事,有趣的是,那年,他們對完後,發現跟財務 再對的時候 ,還是有20多臺對不上, 怎麼辦?只能再來一遍,費時費力,還沒技術含量。 事實上,好多公司的IT系統的自動化程度都是不高的。我做的CMDB專案一期上線後,先實現了資產管理功能 ,自動彙報硬體資訊,加了硬碟、記憶體什麼的也會自動在資料庫裡變更,並且紀錄是哪個介面多了塊硬碟。從此,運維再也不用下機房盤點了。 其實如果每個運維都會開發的話,你就會自然而然的想辦法把各項工作自動化起來,機器能幹的絕對不用人。
我講這個麼,只想表達一個觀點,運維會開發不應該被當作一個加分項,這應該是必選項,如果不會開發,你就不是一個合格的運維人員。
當然在做的同學可能不全是運維,有可能有些測試,道理 是一樣的,一個測試,不會開發,只能進行簡單的功能性測試,進行些天天點選滑鼠的活的話,一方面是你不受重視,另外你自己也得不到成長 。
無論你做什麼工作,只要你長期得不到成長 ,你就會沒有成就 感 ,你就會焦慮。 這是每個稍微有些上進心的同學都會有的心理狀態 , 當然也有那種在收費站幹了16年,被裁員了還死皮賴臉讓政府負責的人,這樣的人是典型的失敗型人格,是註定要被淘汰掉的,我們不去管他。
總之,現在來學這個Python這條路選 的比較對,剩下的就是你要堅持 學完,不要三分鐘熱度,會程式設計是個很Cool的事情,期待5個月後你能用Python開發出有趣的專案。
自學vs報班背後隱藏在認知問題
另外,我在跟大家討論一個小問題,在座的同學,肯定有一些是來這之前自學過的,然後覺得堅持 不下來才來這, 也肯定有人來之前糾結了很久是自學或報班這個事。 我首先恭喜你做了正確決定來這裡。不過我想跟你們探討下你做這個決定背後隱含的一些認知問題
我先說個故事, 前段時間,我參加了一個創業大賽,一堆創業者,玩創業沙盤遊戲,這個遊戲就像大富翁遊戲,總共20步,每走一步要幹不同的事,他把創業 的各個環節加到遊戲場景裡了,比如什麼時候招人、融資、賣產品等,5人一組,一共玩3輪,一輪代表創業一年,遊戲規則就是最後看哪家公司估值 最高。 我們一共6組,大家的啟動資金都是200萬, 不同的是,在每一步,每組可以做的選擇不同, 比如到招人這一步,你可以選擇招普通員工、也可以招經理或總監,當然代價是花錢不同,然後你可以選招研發人才,那你的產品單價就會高,你招運營人才,你的使用者留存就高,你招銷售人才,你的客戶轉化 率就高。 總之就是每一步都有很多的變數。第一年下來,我們組估值6千多萬,第2年4千多,最後一名1千萬, 第二年,我們7個多億,第2年4億多,最後一名到了3千萬。 第3年下來,我們26億,第2名10億左右,我們比他們高2.6倍,最後一名呢,你猜多少? 4千萬。幾十倍的差距。 起點一樣,為什麼結果差距如此之大?
通過這個遊戲, 我感觸頗深, 創業以來,路走的很艱難,最怕沒方向 、走錯路,導致多年心血功虧一簣,每一步都走的如履薄冰。 這個遊戲使我切換到了上帝視角,可以在一天內看到企業在3年裡一系列的決策導致的結果,真的是一步錯,步步錯呀。
遊戲的主持人,是《單點突破》的作者張本偉老師,他在遊戲開始之前,一直在不斷的強調一句話,企業的ceo一定要在對市場格局充分理解的情況設定清晰的戰略目標,做一年看三年,即站在3年後看現在,想清楚3年後你們企業 要達到的目標,然後反向分解你現在每一步做的事,這樣才不至於走彎。各位沒創業,所以可能體會不到,我太有體會了,我只所以怕每步走錯, 說白了不就是因為沒有清晰的戰略目標麼?我們只是模糊的覺得要做大、做強, 甚至 上市 。 但什麼時候 做多大?怎麼做 ? 其實沒有認真 思路和規劃化,導致 一直都是自然生長的狀態,只能摸著石頭過河,每走一步都擔心掉到河裡。
還好,我們老男孩現在終於設定了清晰的戰略目標。
anyway, 你說,Alex你扯這麼多,到底想表達什麼? 我想表達的是,其實我們在坐的各位,是不是也沒有清晰的戰略目標呢?肯定是的,多數人都是。只有模糊的,沒有清晰的。
即都模糊的希望自己變優秀、有長成、掙更多錢, 可是成長多少算是成長呢?什麼樣算優秀呢? 一年工資漲1千塊也叫成長,漲1萬也叫成長。 注意了, 重點來了, 如果目標不可量化,就不是清晰的,沒有清晰的目標,我們就不會對自己有清晰的要求。很多人成長慢就是因為對自己沒要求,混日子就成了可以接受的。 但如果你設定,3年內必須進入BAT,工資必須達到30k, 這效果就完全不一樣了,目標清晰了,你就可以分解了,BAT要求是什麼呀? 學歷夠不夠?能力夠不夠,分解到3年裡,一一的去實現,3年內,你不斷的用這個清晰的目標鞭策自己。3年後,你會發現,你真的就去了BAT。但如果沒有目標的話,你現在工資10k, 3年後,達到15,你可能覺得也能接受 。
所以在坐的各位,一定要認真思考一下自己3年的戰略目標,到底想成為什麼樣的人,達到什麼樣的水平,過什麼樣的生活,是想三年後還混在基礎崗位上,鄙視鏈的最底端?還是成為受人尊重的架構師、開發負責人等。 當然目標一定要切合實際,你現在掙 10k , 非要3年後掙50k, 目測實現有難度 ,但30k還是努努力就夠的到的。
你說,好的老師我明白了,我回頭認真思考下目標的事。但這跟我決定來學Python有什麼關係呢?
當然有,我Alex從不說廢話,哈哈,你決定來這學思考的大多是淺層面上的問題,比如自學效率低呀、堅持不下來呀、不繫統呀等。 但少有人從戰略高度思考參加培訓的意義,參加培訓是幫你快速達到你的戰略目標。我有的學員,現在廣州網易,年薪60多萬,剛工作3年。 我也有學生,幹了七八年運維了,工資才15k。很大的一個區別就是有人盯著長遠目標走,有人只在意眼前。大道理大家都懂,但還是那麼多人活成了懂道理的loser。
同學們,你要想盡一切辦法用最快的方式實現你的戰略目標,不要等,不要拖。因為你一旦達到了第一個目標,比如去bat,30k, 只有你有點上進心,過不了多久,你就又不滿足現狀了,你就找新目標,可能是年薪60萬啦,工資30k的人和10k的人看事情的境界肯定不同。60k與30的也不同,創業者跟打工者更不同。人活者很大的一個意義我覺得就是不斷解鎖自己的認知層次,逐漸發掘自己生命價值的過程 。
好了,我就說這麼多,我一跟從月薪2500的網管,走到運維、運維開發、開發、架構師、cto、合夥人,算是經歷了技術人員的各個職業階段,同時也瞭解技術從業者的弊病,就是戰術勤奮,戰略懶惰,光低頭幹過是沒用的,一定要擡頭看路。 一個農民,刨地技術再好,都改變不了農民多本質。
anyway , 最後希望在坐的每位同學都能通過在老男孩的學習,使自己的戰略目標更快實現。
2018-08-12 於北京
相關推薦
寫給深圳首期Python自動化開發周未班的信
你是否做了正確的決定? 深圳首期周未班的同學們大家好,我是Alex, 老男孩教育的聯合創始人,Python專案的發起人,51CTO學院連續2屆最受學員喜愛的講師,中國最早一批使用Python的程式設計師,當然還有一堆頭銜,看過我視訊的人都知道我喜歡吹nb啦哈, 今天要收著點,講正事。本來下面的話要在深圳
Python自動化開發課堂筆記【Day03】 - Python基礎(字符編碼使用,文件處理,函數)
賦值 創建 解釋器 使用 重復 closed 操作 邏輯 默認 字符編碼使用 1. 文本編輯器如何存取文件 文本編輯器相當一個運行在內存中的進程,所以文件內容在編輯未存儲時都是在內存中的,尚未存儲在硬盤之中,在沒有保存之前,所編輯的任何文本都只是一堆字符,沒有任何邏輯上的意
Python自動化開發-day01-Python開發基礎2-元組、字典、文件操作
文件 list pri 循環 pop 修改 寫入 replace pda 學習內容: 1. 元組操作 2. 字典操作 3. 文件操作 4. 深淺copy 1. 元組操作: 元組和列表非常相似,只不過元組不能在原處修改(它是不可變的),並且通常寫成圓括號中的一系列項。
Python自動化開發課堂筆記【Day06】 - Python進階(類)
擴展性 程序 lex 類名 人物 優點 ini 參數 self. 類與對象 面向過程的程序設計: 優點:極大的降低了程序的復雜度 缺點:一套流水線或者流程就是用來解決一個問題,生產汽水的流水線無法生產汽車,即使能,也是得大改,改一個組件,牽一發而動全身面向對象的程序設計
python自動化開發-[第八天]-面向對象高級篇與網絡編程
屬性字典 del log 工作 新增 subclass Coding ror play 今日概要: 一、面向對象進階 1、isinstance(obj,cls)和issubclass(sub,super) 2、__setattr__,__getattr_
Python自動化開發課堂筆記【Day08】 - Python進階(面向對象的高級用法,網絡編程)
sta 自然 log 報錯 面向 read urn total 析構函數 面向對象的高級用法 1. __str__ 只要執行打印對象的操作,就會觸發該對象類中的__str__方法(也就是對象的綁定方法)它是一種默認的方法,默認的打印輸出為<__main__.Foo o
python自動化開發-[第十二天]-前端Css
html cto 導致 比較 基本語法 itl 一個 pan pytho CSS基本語法 CSS 規則由兩個主要的部分構成:選擇器,以及一條或多條聲明。 selector { property: value;
python自動化開發-[第十三天]-前端Css續
css python自動化 tle order deep font ppi 文檔流 family 今日概要: 1、偽類選擇器 2、選擇器優先級 3、vertical-align屬性 4、backgroud屬性 5、邊框border屬性 6、displ
Python自動化開發課堂筆記【Day14】 - Java Script
空格 local rand substr 初始 find blog 瀏覽器支持 elif JavaScript的基礎 1. JS的引入方式 1 直接編寫 <script> alert(‘hello yuan‘) </scr
python自動化開發-[第十九天]-分頁,cookie,session
dex delet value ati coo socket客戶端 自定義分頁 blog 協議 今日概要: 1、cookie和session 2、csrf 跨站請求偽造 3、自定義分頁 一、上節回顧: http請求的本質: - Http請求本質 瀏覽器
Python自動化開發(一)【未完待續】
urn sts dha sel def open entos div 初始 1、創建項目 2、創建models from django.db import models # Create your models here. # 主機表 class Host(m
Python自動化開發學習1
python一、開篇的大段毒雞湯真是夠補。正好在外面旅遊,一路上帶著耳機就全部聽完了。二、進入正題,結果還是介紹。說下版本問題,盡量還是用Python3。三、Hello World。就是個儀式感,別的沒啥print("你好")四、變量。雖然駝峰規則也行,但是python推薦用_下劃線,那就用下劃線把。變量名全
Python自動化開發學習2
python模塊Python有他有非常豐富的標準庫和第三方庫。使用前要先用import命令導入,然後才能在之後的代碼中調用。sys 模塊import sys print(sys.path) # 打印環境變量結果輸出的是一串目錄列表,是python運行的環境變量。Python導入的時候會依次在這些目錄中查找。
Python自動化開發第一周知識點
結束 循環 raw_input 判斷 string ... 當前 輸入 odi 知識點一:變量 1.變量名可以包括字母、數字、下劃線,但是數字不能做為開頭。例如:name1是合法變量名,而1name就不可以。 2.系統關鍵字不能做變量名使用 3.Python推薦使用XX_X
Python自動化開發學習2-2
python集合創建集合可以用set(),或者直接用{}set_a = set([1,2,3,4,5]) set_b = {1,3,5,7,9} print(set_a) print(set_b) print(type(set_a),type(set_b))集合同樣也有各種操作,就記幾個符號的。別的到用的時候
Python自動化開發學習3
python函數通過函數,可以定義一段代碼塊,之後通過函數名可以反復調用定義一個函數:def alert(): "打印Hello World" print("Hello World")使用def來定義函數,第二行建議使用使用文檔字符串進行函數說明。之後使用函數名就能夠反復調用函數。alert(
Python自動化開發學習4-裝飾器
python裝飾器通過裝飾器可以為函數添加附加功能。通過修改函數本身也可以實現增加功能,但是通過裝飾器還有下面2個好處。裝飾器的2個原則:不改變被裝飾函數的源代碼不改變被裝飾函數的調用方式遵循了上面2個原則,我們可以在為函數添加附加功能的時候,不必去破壞已有的穩定的代碼和代碼調用方式。並且易於回退。先定義一個
Python自動化開發學習4-2
python列表生成式先看2段代碼a = [ i*2 for i in range(10) ]print(a)#b = []for i in range(10): b.append(i*2)print(b)a和b的效果一樣,但是a使用的代碼更加簡潔列表生成式也可以使用函數,生成更加復雜的列表a = [
Python自動化開發學習3-2-匿名函數、內置函數
python匿名函數如果函數值使用一次,並且結構結單(需要一行表達式),就可以使用匿名函數。匿名函數的好處:程序一次行使用,所以不需要定義函數名,節省內存中變量定義空間讓程序更加簡潔普通函數:def test(x,y): return x+y print(test(1,2))匿名函數:test = l
Python自動化開發學習5
python模塊在模塊中,我們可以定義變量、函數,還有類(這個還沒學到)。總之應該就是所有的代碼。先建一個文件,取名為module,py,內容如下:# 一下是module.py的內容 string = "This is module,py" def say_hi(): print("Hi") def