程式設計高階之路,雖無捷徑但有長短

2022-09-18 11:36:20 字數 3660 閱讀 3493

前言:最近收到很多讀者朋友私信,問我如何學習程式設計,這個問題其實很難正面回答,而且本人也確信自己達不到指點別人學習的高度,這篇文章基於作者自己這幾年趟過的路,和大家聊聊程式設計學習的話題,僅供一些感到迷茫的朋友做點參考。

1、程式語言學習程式設計的第一件事就是面對語言的選擇,程式語言五花八門種類繁多,不同的技術型別適應不同的應用場景,所以語言本身沒有高低之分存在即合理,學會做選擇才是入門的關鍵;

【建議】在選擇之前對主流的技術選型做對比了解,熟悉不同程式語言的學習成本、難度、適用場景、市場需求等基本情況,具體如何選擇可以從如下幾個方面思考:

【建議】在時間允許的情況下,除了深入學習一門主流語言,還可以對其他技術做入門級的學習即可,如果時間不允許,那就一定要專注在一門語言上,以提高專業水平和市場競爭力。

2、入職公司

工作上對於入職的公司選擇,網上各種分析帖已經說的十分透徹了,通常來說,如果真的具備選擇不同公司的能力,都不會糾結於如何選擇,首先看如下幾種型別的公司:

以上說法只是大概率的普遍現象,不針對個別不同的情況,通常主流的建議都是推薦選擇對自身發展有影響的公司,以便於更快的積累專業能力,這樣後續有更寬闊的選擇空間,在職場初期也大多會這樣選擇。

【事實】上在職場沉澱幾年之後,多數人再次面對選擇的時候,首先考慮的就是薪水高低,人一但嚐過生活的五味雜陳,就能體會到經濟能力才是對選擇的最大支撐,用一句經典的話來解釋:人到中年身不由己,上有老下有小。基於普遍的真實狀況來看,薪水的高低與公司入職門檻的高低成正比。

3、發展路線

職場上發展路線是至關重要的,工作的前2年,需要不斷積累專業的技術能力,隨著經驗的積累薪水的提高,尤其是心態上的不斷變化,堅定不移的走技術路線的人很少,這與當下網際網路的環境有最直接的關係,這裡說幾個常見的發展路線:

【注意】如果把技術當成解決業務的工具,即使對技術深度的追求不多,也要對技術的使用做到細緻與熟練,對於專業範疇內的能力是不能打折的,遇見過少數的技術面試這樣解釋自己的綜合能力:因為追求於專案管理或者業務解決能力,所以欠缺技術細節方面的沉澱。這種思路當真是清奇。

上面聊程式設計中關於選擇的熱點話題,這裡來說具體的技術積累,作為一名j**a程式設計選手,下面主要圍繞相關主流的技術棧與高階過程做梳理,大致分為基礎、高階、高階三個階段,受到工作經歷與經驗的影響,所以在劃分的時候存在諸多主觀因素。

1、基礎篇

在衡量乙個開發人員的能力時,通常會提到一句話:技術深度與業務高度,這裡說的技術深度,至少有6-7成的因素是指基礎能力的深度。經常閱讀框架的實現原始碼會發現,都是對於jdk原始碼、設計模式、結構演算法的排列組合,從而形成解決某類場景業務的元件。

【建議】在有大量模組化空閒時間的階段,把主要精力持續放在以上基礎模組,是收益最大的選擇,這裡更多指大學階段。程式設計中越是基礎原理就越複雜,這是普遍認可的共識,所以這個模組在學習的時候對於時間成本要求較高,一旦進入工作階段,很難在抽出整體的時間細緻的回顧基礎模組。

假設j**a的集合容器模組,用1-2周的時間,從api使用到原始碼邏輯,分析內在的擴容機制,涉及的演算法與資料結構,進而再上公升到設計模式的實踐,流程這樣走下來對於基礎的理解就具備一定的深度了,也自然達到觸類旁通的效果,那麼對於io流與併發也就是相同的原理。

2、高階篇

這裡羅列的是當前技術選型中常用的框架與元件,當進入工作階段之後,會接觸到各種不同的開發元件,學會熟練使用不同的元件去解決不同型別的需求是不可缺少的能力,這時候對於框架原理的理解,完全依賴於基礎能力的積累程度。

【說明】一下,最近幾年隨著對網際網路資料的重視,很多公司都在做資料的採集沉澱與分析,同時大資料領域的開源元件推出,已經弱化了j**a工程師與大資料工程師的邊界,所以對於大資料技術棧的了解,對於管理海量的業務資料是至關重要的,熟悉3-2個資料儲存查詢的元件,會提供更開闊的技術選型思路。

3、高階篇

當能力到達這個階段,基本上就是架構師級別的水準了,同樣的道理這個階段依賴於基礎和高階能力的沉澱,鑑於作者本人沒有歷經過架構師的職位,所以無法給到主觀的建議,只是對於團隊中架構師的職責做的分析,主要在於提供技術棧的選型和複雜業務的解決方案,流程自動化是分布式系統的必要支撐。

【注意】這裡只是單純的技術高階的角度,關於衡量開發人員的另外乙個核心因素:業務高度。站在客觀的角度去看的話技術與業務能力需要一比一提公升,業務管理也是走出開發角色的基本要求。

從入職場開始,因為沒有待過純技術型的公司,所以都是在圍繞業務場景做程式設計開發,能感覺技術能力有較大提公升的階段,都是在解決複雜業務之後的反思。業務的底層邏輯是流程管理與模型建立,如何認知複雜的業務並進行抽象設計是技術水平的直接體現。

【然而】在公司的日常面試工作中,時常會遇到少量求職者表達自己單方面的訴求:一種是希望公司可以提供技術發展路線,而不是常年累月的業務版本;另一種則希望公司能提供業務發展路線,入職之後可以慢慢脫離技術方向。如果站在招聘需求的角度去考慮,建議在求職面試時不要表達這種個人發展路線的追求,因為多數公司的招聘目的都是:需要技術人員來實現業務需求。

【誤區】職場上的新人選手,很容易產生這樣一種心裡:每天都是理不清的業務需求,改不完的坑坑窪窪,然而換個公司和環境之後,會發現依舊是這種工作節奏。所以在新手階段就用樂觀的心態去面對各種業務模式,並且持續的學習和總結各種業務解決方案,這是開發同學技術轉型的核心競爭力。

【通常】來說,業務是關聯公司各個角色的連線點,對於業務解決方案都會以各種文件的形式記錄並沉澱下來,這也是團隊常用的一種管理手段,也方便以後在類似的業務中提供借鑑參考,不斷提公升業務落地的能力和效率。實際上大部分開發選手都會選擇技術與業務同時積累的方式,盡量放大自己職場的可能性。

拓展能力作為職場上必備的軟技能,並不是程式設計師才需要具備的,對於常說的管理能力、流程規範等都是經驗積累的體現,至於這些能力如何去積累很難一概而論,因為不同的環境經歷的不一樣,好的多借鑑,差的作為反面教材即可,這種能力通常在一段經歷之後花點時間總結反思就會明白。

【特別】說一下關於認知這種抽象的話題,因為存在於產品開發的各個環節,在職場上也會經常聽到,認知導致思路對不齊,所以不管是產品、開發、專案經理;如果認知角度單一,看法就會片面,如此在流程協作中很容易產生極大的分歧。

專業的工作能力和經驗積累包括多個方方面面,技術、業務、軟能力。這種沉澱是乙個持久的過程,以樂觀的心態去學習遇到的冷門技術棧,用平靜的心情去研究熱門的新框架,並且不斷的總結業務實現的方案。最後祝大家:風平浪靜、揚帆遠航。

C 物件導向高階程式設計 侯捷

1 防禦式宣告 ifndef complex define complex endif 作用 保證只include一次 2 inline function 在body內進行定義 更快,但最終能否inline由編譯器決定 3 為什麼應該用初始化列表 complex double r 0,double ...

phper高階之路 Go 介面程式設計 組合

1 介面的組合 1 介面之間可以巢狀介面,使某個介面同時具備多個介面的功能,類結構體只需要實現介面的方法就可以了 2 介面的組合 a type a inte ce type b inte ce 超級介面 type c inte ce 其中 put 方法是介面c獨有的 等價於 type c inte ...

崑山必捷必上雲之路

本文正在參加 最佳上雲實踐 評選,來給我們投票吧 編號32 作為目前國內公共文化領域排名前三的頂級整合商,公司致力於為各區域搭建數字服務平台 提供整體解決方案 研發特色產品,匯聚了來自各領域的行業的精英,並與中國聯通 清華紫光開展了廣泛合作,建立了一體化的創新服務模式。目前企業技術力量雄厚,研發團隊...