A. 程序員的職業生涯通常會遇到哪些為人熟知的職業瓶頸該如何應對
會的。身邊同事工資翻了一番,但自己跳槽加薪難,面試無回復,跳槽加薪不高;我想離開一線的開發工作,做一個技術管理的職位。我對自己的技術實力和項目管理能力沒有信心。不願意寫一輩子的代碼,想尋求職業突破(進入知名公司,拿高薪)卻找不到方法,缺乏明確的職業規劃。這類朋友還是比較多的,主要是想學但沒有方向,這應該是廣大程序員工作人群的困惑。
其實,剛開始的時候掘坦,我並不喜歡把自己的作品記錄下來,更不喜歡把它寫成微博,發布在公眾號上。即使在公司里,我也嘲笑它,認為這只是形式主義。但在我被困住的那些年裡,我一直在寫作,讓自己不去想那些事情。這次經歷讓我想到了用一種新的方式總結經驗。乍一看,根據某一條目逐字逐句地輸入你的工作經歷似乎是在浪費時間。但在不斷總結工作經驗的過程中,我們對工作進行了更仔細的梳理。這實際上是一個思考的過程,在經驗中尋找共性,並逐漸形成自己的工作方式。隨著時間的推移,你會擺脫焦慮,找到一條適合自己的道路。
B. 剛踏入職場的程序員,如何快速踏實地提升自己的能力
程序員提升主要靠實踐,跟一個完整的項目能最大限度的提升項目能力,以後找工作不用愁啊,現實工作中很難達成,你可以去找找培養這方面人才的,提升一下自己,你看看願碼ChainDesk,有你需要的
C. 一名小白程序猿怎麼快速提升編程能力
一、先列三個常見的開發場景:
1、拿到一個模塊詳細設計文檔,大部分程序員的通常做法就是開始搭建界面代碼,然後從第一個按鈕點擊事件或頁面Load事件開始寫第一行業務代碼。寫的差不多了,就運行一下,發現哪裡不是自己想的那樣,就改改,直到改到是自己預想的那樣。
2、做完了一個功能模塊或幾塊相關聯的功能模塊,輸入111asd,發現新建正常、保存正常,就提交給測試人員。測試員用測試用數據、測試場景用例來測試,發現有問題,就登記bug。對於嚴重的影響下一步測試的BUG,測試員就用內部IM通知這個開發人員。對於不影響繼續往下測試的BUG,測試員就登記下來,等程序員有空時處理。
3、程序員一般工作不希望大家打擾,所以開發起來就是開發。等手頭開發告一段落,就看看BUG庫。發現有與自己有關的BUG,就從第一個BUG開始看起。就開始通過IM和測試員掰扯起來(這不是個BUG啊、業務邏輯不是你想的那樣啊、我這里不能重現啊、你給的信息描述不清晰啊),於是IM幾來幾往,甚至跑過去當面交流一番,甚至會拉扯上產品經理一起討論,更甚者需要項目經理或產品經理發起一個會議來集體討論一下
這是不是很熟悉呢看這就是大部分程序員開發的三個步驟:寫代碼、自測、修復BUG。
二、說好的代碼設計、代碼測試呢看
代碼設計看那不是都有開發平台么,已經固化了啊。那不是維護舊功能做完善修改呢么,又不是寫新代碼,只能在現有代碼基礎上修改啊,你又不能大幅重構。
代碼測試看你丫需求討論期、產品設計期、設計評審期那麼長,都把研發項目時間佔光了,就留下2個星期讓我們寫代碼,我們哪裡有時間搞那麼深的測試。還想讓我們搞結對編程看還想讓我們搞測試驅動開發看
而且你看測試,什麼功能測試、集成測試、性能測試、安全測試、安裝部署測試、升級測試、遷移測試、UAT測試,一大堆測試,測試也需要很多時間。
一個項目,需求討論、產品范圍規劃與評審、產品設計與設計評審佔了一個半月,開發+自測就一個月,測試佔了一個半月,這就4個月了啊。
三、為啥程序員寫代碼總是寫寫測測看
剛才大家也都看到了,大部分程序員都是從界面代碼開始寫起,而且寫一寫,就運行一下看看。為什麼會是這種開發方式看
那是因為大部分程序員缺乏在腦子中的整體建模能力。只能做出來一點,真實的感覺一下,然後再往下。
有些是產品經理的上游就有問題,沒給出業務流程圖(因為產品經理也沒做過業務),也沒畫清楚產品功能操作流程圖。
為啥沒給出業務流程圖看因為產品經理不熟悉業務,另外,產品經理也沒有流程建模能力啊。為啥沒畫清楚產品功能操作流程圖啊看因為不會清晰表達流程啊。
很多產品經理、程序員,都缺乏分類、分層、相關、先後能力,更別說總結、洞察能力。
這是基本訓練,是一個做事頭腦清醒的人必備的技能,這不是一個程序員或產品經理或測試員的特定技能要求。
我經常看書就梳理書的脈絡,每看一本就寫一篇總結。我過去閑扯淡還梳理過水滸傳、紅樓夢的人物關系圖呢,其實就在事事上訓練自己的關聯性、層次性、洞察性。
我經常面試一個人時,我會問這樣的問題:逗你把我剛才說的話復述一遍,另外你再回答一下我為什麼會這樣看地,其實,我就在看一個人的細心記憶、完整梳理、重現能力,我也在看一個人的梳理、總結、洞察能力。
我個人寫代碼就喜歡先理解業務流,然後理解數據表關系,然後理解產品功能操作流,大致對功能為何這樣設計、功能這樣操作會取什麼表、插入或更新哪些表,哪些表的狀態欄位是關鍵。
然後我寫代碼的時候,就根據我所理解的業務流、功能操作流、數據輸入輸出流,定義函數,定義函數的輸入與輸出。
然後,我會給函數的輸入值,賦上一些固定值,跑下來看看能否跑通這幾個關聯函數,看看還需要怎樣的新增函數,或者看看函數的輸入輸出參數是否滿足跑通。
剩下的事,就是我填肉寫詳細邏輯代碼了。
當然,大部分人沒我這樣的邏輯建模能力。怎麼閱讀理解也想像不出來,也沒法定義函數。畢竟有邏輯建模能力的程序員都很少,100個人里有10個,已經是求爺爺告奶奶好幸運了。
那怎麼辦呢看
我建議是分離分工配合,這就是現實中沒辦法的辦法。讓有邏輯建模能力的人來設計函數框架、來設計工具來設計代碼模板,然後讓沒有邏輯建模能力的人來填肉寫詳細邏輯代碼。
我們可以先從最緊要的模塊開始這么做。不緊要的模塊,還讓它放任自流,讓熟練手程序員繼續塗抹。
我曾經還讓有頭腦的程序員做榜樣,給大家分享他是怎麼規劃函數的,怎麼做維護性代碼的代碼結構改善的。但是發現效果並不佳,其他人並沒有因此能做代碼設計。可能邏輯建模能力是個人的基本素質,是從小到大訓練成型的,不是你一個大學已經幾年的人能夠短時間內可以訓練的。
所以啊,還是讓能走的人先走,讓從最緊要的模塊開始這么做。
不必擔心這樣做後,因為過去一件事被分工(一個做代碼框架一個填肉)成兩個人做了會降低工作效率。我們很多的工作效率低就是因為半瓶子醋搞出來的,來回反復修改。
真是應了劉德華在電影里說的那句話:說你又不聽,聽又聽不懂,聽懂了又不做,做又做不好,做不好還不服氣。
四、為什麼大部分程序員不做代碼測試或白盒測試或單元測試呢看
還是因為沒有代碼設計。因為沒有函數啊。所以,一個按鈕功能有多復雜,代碼就有多長。我見過2000行的函數,我也見過1000多行的存儲過程和視圖SQL。怎麼做白盒測試啊,這些代碼都粘在一起呢,要測,就得從頭到尾都得測。
所以啊,先學會設計函數,先寫好函數,這就求爺爺告奶奶了。很多開發了5年的熟練手程序員,可能都未必會寫函數。
函數的輸入輸出值就很有講究。很多人都寫死了,隨著版本迭代,發現過去定義的函數參數不夠用了,於是就新增了一個參數。然後,相關性異常就爆發了,其他關聯的地方忘改了,到底哪些有關聯,怎麼查啊,本系統沒有,沒准其他系統就調用你了,你根本不知道哪個神經人曾經COPY過你的代碼修吧修吧就改成了他的功能呢,而且裡面的很多代碼他看不懂也不敢刪,只要他實現的功能正常了他也不管了。於是,你改了你這個函數,他的系統就莫名出錯了。
所以,我一般會定義幾個對象來做參數。另外,我也很注重函數的日誌、函數的異常保護、異常拋出、異常返回。另外,我也很注重參數輸入值的合法性校驗。
所以啊,應該開發Leader們先制定函數編寫規范最佳實踐,輸入輸出參數怎麼定義比較好,函數的返回值如何定義比較好,函數的日誌記錄應該怎麼寫比較好,函數的異常保護、異常拋出、異常返回如何寫比較好。先教會一般程序員,先從會寫函數開始啊。
當然,你光有一份規范,程序員們還是不理解、不實際應用啊。所以,還得Leader們做好典型的代碼模板,裡面是符合函數規范的代碼框架,只有這樣,一般程序員們才會照貓畫虎適應了函數設計的編程習慣。
所以啊,我專門重新定義了leader的明確職責,其中第一個重要職責就是:負責工具/框架/模板/規范的制定,並且負責推廣且普及應用落地。
你不明確定義Leader的這個重要職責,你不對這個職責做明確的KPI考核,誰尿你啊。你以為好的工具/框架/模板/規范是靠人們的熱情、自發產生的么看我們還沒有那麼自覺高尚啊。
五、為什麼大部分程序員不寫注釋啊看
我經常說一句話,千萬別多寫注釋。為啥看
因為我們經常遇到的問題不是沒有注釋,而是更糟的是,注釋和事實代碼邏輯是不相符的。這就出現常見問題了:殘存下來的設計文檔是一個邏輯、注釋是一個邏輯說明、真實代碼邏輯又是一個,鍾表多了,你也不知道正確時間了。
所以啊,產品文檔、注釋、真實代碼,三者總是很難一致同步。我為了幾百人研發團隊能做到這個同步花了大量心血和辦法,但我最終也沒解決了這個問題,還把Leader們、總監們、我都搞的精疲力盡。
索性回歸到一切一切的本源,代碼,就是程序員的唯一產出,是最有效的產出。那麼,讓代碼寫的不用注釋也能看懂,咱得奔著這個目的走啊。
為啥看不懂,不就是義大利面條式代碼么,又長又互相交雜。
OK,我就規定了,每個函數不能超過50行。用這一個簡單規定和靜態代碼檢查插件,來逼迫大家嘗試著寫函數。有的函數屬於流程函數,是串起其他函數的,有的函數就是詳細實現函數,實現一個且唯一一個明確作用的。
有了流程函數和功能函數,而且每個函數不超過50行,這就比過去容易看懂了。
六、為什麼大部分程序員不抽象公共函數啊看
我經常說一句話:千萬別抽象公共函數啊。為啥看
因為大部分程序員缺乏抽象洞察能力。特別是有些積極熱情有餘、愛學習愛看書、半瓶子醋晃悠的二桿子,看了幾本UML、重構、設計模式、整潔代碼之道,就躍躍欲試了,還真敢給你抽象公共函數了。
一開始,他覺得80%相似,20%不相似,於是在公共函數裡面簡單寫幾個if..else做個區隔就可以。沒想到,越隨著版本迭代,這些功能漸漸越變越不一樣了,但是這個代碼已經幾經人手了,而且這是一個公共函數,誰也不知道牽扯多少,所以誰也不敢大改,發現問題了就加一個if..else判斷。
沒想到啊沒想到,這個本來當初公共的函數,現在變成了系統最大的毒瘤,最復雜的地方,誰也不敢動,除非實在萬不得已,手起刀落。
所以,我平時告誡程序員,純技術的、純通用的,你們可以嘗試搞搞抽象公共函數,對於業務的,你們還是簡單粗暴的根據Leader們做的代碼模板代碼框架,乖乖的復制、修改、填肉吧。
你們啊,先從做模板做代碼片段開始吧,咱們放到咱們內部代碼片段開源庫里,看誰的代碼片段被別人復制的多,說明你的代碼抽象設計能力越好了。那時候,我就大膽放心讓你撒丫子跑了。在沒有學會跑之前,給老子乖乖的復制、修改、填肉吧。
D. 作為剛入職的java程序員,一年時間內如何提升自己的實力,更有競爭力
剛入職,就意味著你有基礎,但是還沒有到精通,那以下這幾點你要好好看看
1.用好互聯網
在你入行的第一年,肯定會遇到各種各樣的問題,但不用擔心,這些問題其他人肯定也遇到過。
這是一個開源的時代!人們習慣將解決辦法記錄在網上。
越早的學會使用goole尋求幫助,問題就會越早得到解決。(但是在看別的代碼或解決bug的時候,不能直接Ctrl+C,Ctrl+V,要弄明白其中的原理)
2.養成良好的編譯習慣
你是公司的一員,是團隊協作來完成整個項目的,也就是說你的代碼不僅要你自己看得懂,更要讓團隊中的小夥伴和你的領導看得懂。
所以起名稱規范一些,保持代碼結構清晰,多寫一點注釋!
3.基礎理論很重要
如果你只想成為一個普通的碼農,基礎理論知識的確沒那麼重要;
但當你想往上走,想成為一名專業的架構師,數據結構、操作系統原理、資料庫原理等基礎知識是必不可少的,這些基礎知識決定了你能在技術這條路上走多久,走多遠!
4.不斷學習
這不是什麼雞湯,而是程序員界一個殘酷的現實。就拿游戲開發者來說 一個引擎unity3D,幾個月就要更新換代一次,是想,你如果不學新技術根本就無法繼續操作,如果技術一年不跟進,你和unity3D就會形同陌路。任何課程、資料都該看要看。
5.你是一個開發者,而不是一個碼農
很多新人在入行前幾年一直以一個流水線員工的心態做業務,這樣是不行的。
於自身發展來說,長期重復的工作使你接觸不到核心業務,限制你能力的拓深和發展;於企業而言,企業需要的不是只會搬磚的碼農,而是一個開發者。
6.多讀優秀的代碼
山外有山,人外有人。
世界上比你優秀的程序員太多了,想要跟著大神學習進階,還得感謝這個開源的時代。不錯的平台有很多,裡面有很多優秀的程序員們的代碼,只要你需要就可以閱讀。
希望這些建議對你有用,有所收獲。
E. 作為程序員,你的職業有哪些不足之處
在職場中最想吐槽的很多:一,不升職,不加薪。剛剛入職的時候,老闆是說的天花亂墜,公司的發展前途多麼好,將來會發展的如何還大,加入公司前途不可限量,將來是升職又加薪,後來,就沒有後來了。沒有升職,更沒有加薪一帶知說。二,沒完沒了的會議。白天基本是開會討論需求,然後還要配合前端聯調,不停地被打斷,時不時地很有幾個會議要參加,不是很重要的會議一邊開會拿著筆記本一邊寫代碼,有時候你會發現到下班了開發才剛剛開始,下班後終於可以安心敲代碼了。
三,被迫的加橋扮班。
大概小公司的程序員不是程蠢消消序員,五分鍾給你斷一次,前端後台伺服器,電腦壞了找你修,軟體安裝也找,耳機聽不到了也找,真以為就這樣了?各位系統使用者各種不會使用的問題找你,一天只有大家都下班了才有時間寫代碼。可以說為了生活,打工人早已用盡全力,一個合格的打工人必定是每天早上六七點就起床,趕首班公交車或地鐵,通勤1小時以上到市中心上班,風雨無阻。
中午匆匆地敷衍一下胃,到了晚上9點過,地鐵站依然是人頭攢動,像是沙丁魚罐頭般。Lisa偶爾加班,當拖著沉重的身體進入地鐵站時,發現身邊都是加班人,那一刻,既覺得有些安慰,又覺得更加心酸。為生計努力的人,做夢都想工作能夠輕松一些,根本沒時間矯情,沒時間去思考生活的意義
F. 程序員入行後怎麼提升自己
以下是我總結的五個方面,從上到下都是個有序的漸進過程,缺一不可!希望對你有幫助!
1. 通過分析目前的現狀快速定位自我
什麼是分析現狀?這里的分析現狀就是指充分明白目前自己在公司的位置,整個市場中的價值,自己的技術程度後。
當我們發現我們的技術落後了,待遇低於市場了,或者職級沒得到發展,都可以視為對自己現狀的分析認知,在這種先前條件下才能去定位自己。
這種定位手段可以通過社群社交,同行交流,博客技術論壇介紹的東西對比,更粗暴的方式就是面試,這樣才能更好的完全的認識自己的不足,自己的短板,才能讓自己掌握哪些方面需要去學習,從而得到有效的提高。
從宏觀層面講
現從宏觀來講,包括你的職級,你所做事情的影響力。如果你是領導,那麼你有一定的主導權,你就應該讓這種領導效益做到最大化,提高自身效率,提高團隊協作,盡可能的讓下屬也得到提高,只有個人和團隊一起發展,才證明你在發展。
如果事實不是這樣,那麼你確實是需要自我反省,自我認知了,不是做到領導就能覺得自己很厲害,相反你也要和其他領導做比較,是不是他的團隊,人員更穩定,產出多,口碑好呢?
如果你非領導,只是一個核心開發,那麼你也必須做到你負責的東西,如果你負責的這個框架,那麼應該讓這個框架做到穩定,易拓展,方便調用,甚至更多!
如果你開發的這個模塊不夠好用,甚至造成了其它新增的問題,那麼你也要重新自我認識,技術高低並不是說你能寫出多牛逼的框架和項目,而是你能做到每一件事完美解決。
從微觀層面講
微觀相對宏觀更細化,如果是領導,你自己是否做到了一個流程中任何環節的把關,推進和收尾總結,如果你有任何一點覺得交給下屬辦不好的事情,甚至覺得這個人無用。
那麼你就應該摒棄這個可怕的思想,別人不是給你打工,你也是在給自己打工,如果下屬能完全解決你交代的問題,那麼你是不是該下崗了。
作為領導,情緒控制力,溝通能力,領導力,協作力,和為人口碑,都是影響你上升的關鍵因素,如果有不夠好的地方,那麼你已經定位到自己了。
作為普通的開發,新的框架你是否了解,項目現存的業務模式你是否熟悉,交流總結你是否做到,技術文檔有去編寫,其他技術方向有去拓展等,都能對比出自己不足的地方,這種通過對比的方法論是提高自我審視的最好辦法。
2. 拓展自己的知識網路拓撲圖,持續提高知識
上面我們通過通過分析目前的現狀,可以快速定位出自我 。當你更好的認清自己的時候,你是時候去改變了,如果你缺乏溝通,你可以加強交流,試著多去參加群體活動。
如果你缺乏對新技術的掌握,可以去瀏覽各種論壇、官微、博客等涉取,從而彌自己的不足。如果你缺乏對基礎知識的掌握,你可以去扎實基礎,從而讓自己的水平提高。
很多時候很可能我們掌握了項目中的技能之外,就懶得去學習其他技術,這種觀念不能要,永遠不能將對比參考點放在自己的項目組的成員中,一定要放到同行業的競爭者中,這樣你才能知道自己需要去學習哪些技術。
就拿 Android 程序員來說,RxJava、OKhttp 必須要掌握,插件,熱更新技術、混合開發技術需要掌握,Java 基礎、設計模式也需要懂,演算法、數據結構那更不用說,學過計算機網路的人都了解網路拓撲的概念,上面這些都是我們需要拓展的知識網路拓撲圖。
掌握更多的技能不代表讓你去做全棧工程師,而是面對機會時你有更多的選擇!目前的 Kotlin、JS, 甚至人工智慧,也應該去關注!
3. 提高全量思維,不放過任何一個成長的機會
在平時的工作中,你需要放開眼界,持續提高並全面發展,甚至每一個成長的機會。舉個栗子:
參加公司每一次對你有用的技術分享,從而學習到他人總結的知識。
盡可能多地參與公司的項目,從而達到量的改變,這樣在領導眼裡對於提升你來說就有更高更多的砝碼,從小的方面來說你可以熟悉更多的業務,掌握更多的技能。
盡量去做框架和底層,杜絕一直以業務開發和上層開發為主。這樣你才能在團隊中脫穎而出,才能得到好的認可。
上面三點都是對內層面,相反多外層面來說,你需要時刻關注行業動態,若有更好的平台,更好的機會,不能抱著害怕甚至排斥的態度,應該勇於去挑戰,去嘗試。
上面的每一個做法,都有提高待遇的可能,待遇就是每一個細節的積累,最後沉澱出果實。你的綜合能力提高了,薪資待遇也自然而然的提高。
4. 養成規劃職業生涯意識,關注職業素養
程序員一定要養成職業規劃意識,千萬不能有我牛逼我就跳槽,不爽就跑路的思想,從我這幾年的開發觀察來看,除了學歷的篩選,加上技術的參考,更多的公司慢慢考核候選人的穩定程度。
不跳槽不能說一定是敬業,跳槽也不能說這個人就一定不忠心,在同樣的水平之下,企業更願意找穩定的人,我也曾面過很多人,我也會衡量面試者的穩定程度,畢竟穩定程度也能反映出他處事的能力。
職業規劃另一個含義是每一個階段有一定的 level 提高,從初級、中級、高級,架構師、總監、CTO 都是一次飛躍,無論你是對內,還是對外,長時間無法提高,那麼也該去關注職業規劃了。
很多人不明白,在一家公司服務時間短,會認為不靠譜,服務時間長,但是沒任何發展會被認為你不夠聰明,無論哪一種,目標企業都不會喜歡。
5. 機遇和運氣很重要
善於抓住機遇,有助於自己成功,上面第三點說的只是小的機會,機遇是一個大的質的改變,這個就靠自己的眼界,觀察去發現了,大佬們無非就是加上自己的努力,長時間的積累,靠一個機遇稀里糊塗的成功了。
由於這個是非必須因素,這里我也不打算用過多篇幅去說明。只要你知道這個有這么個理就行了
G. 自學了python,想要從事數據分析師工作,可是代碼能力不夠怎麼辦
Python由於簡單易學、語法優美、應用廣泛等優點,獲得了大批的粉絲。越來越多的軟體工程師使用Python進行大數據處理,越來越多的科研工作者使用 Python 來進行數據分析。Python數據分析的待遇多少,具體還要看各人的能力而定。
如果你想要專業的學習Python開發,更多需要的是付出時間和精力,一般在2w左右。應該根據自己的實際需求去實地看一下,先好好試聽之後,再選擇適合自己的。只要努力學到真東西,前途自然不會差。