V2EX大牛的指点
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
first:?
我認(rèn)識(shí)一些深圳、杭州、北京的朋友,他們往往更關(guān)注以下內(nèi)容:?
1. 代碼(包括注釋)的規(guī)范性、可維護(hù)性?
2. 參與一些算法的研究與實(shí)現(xiàn)、開源庫(kù)的創(chuàng)建與維護(hù)?
3. 對(duì)新技術(shù)的探索,包括但不限于:新框架、新思想、新工具?
4. 對(duì) Github 上的作品極其認(rèn)真負(fù)責(zé),包括但不限于:良好的 commit 說(shuō)明,干凈的代碼(實(shí)驗(yàn)性或已注釋代碼的不會(huì)出現(xiàn)在代碼庫(kù)中),以 feature 為單位進(jìn)行代碼提交、分支合并、bug 修復(fù),對(duì) Git 這種工作方式了如指掌。?
5. 探索多人合作的技巧,并能主動(dòng)去尋找、求助新的解決方案。?
6. 對(duì)開源社群有深入的理解,知道開源不等于免費(fèi),以及知道什么該開源什么不該開源。?
我接觸過(guò)很多像 LZ 一樣的剛畢業(yè)大學(xué)生,如果 lz 不介意我想提一提我的意見:?
1. LZ 應(yīng)該關(guān)注一下代碼規(guī)范和設(shè)計(jì)模式。?
2. LZ 的作品太過(guò)于淺顯,并不能體現(xiàn)你的核心競(jìng)爭(zhēng)力。并且如果著重強(qiáng)調(diào) ThinkPHP 可能會(huì)帶來(lái)減分的效果(在圈子內(nèi)你多了解一下就知道)。?
3. 樓主的 “ 熟悉 div+css 布局,可用 jquery 寫簡(jiǎn)單特效,會(huì)使用 ajax ” 這有一種《精通CSS+DIV網(wǎng)頁(yè)樣式與布局》這種書的既視感,你可曾了解過(guò) CSS3 Flex Angular.js React.js ?并且,如果你要搞非 MS 系的后端,Linux 是比必備技能,而不是可在 linux 下進(jìn)行。# 記得剛?cè)雽W(xué)時(shí)有個(gè)學(xué)長(zhǎng)在某社團(tuán)講座中講到 PHP 入門,開發(fā)環(huán)境要 WAMP 不會(huì)的來(lái)找我,呵呵,你入門為什么不試一試 `php -S <phpfile>` 命令呢??
4. 我看到 LZ 的 Github 上的代碼,提交了很多已注釋的代碼,如果你的注釋有助于他人閱讀那是可以的,否則你自己調(diào)試的內(nèi)容不需要讓別人知道。另外,你們知道 Git 中的 .gitignore 文件用途么?為什么會(huì)出現(xiàn) ThinkPHP 這個(gè)文件夾?再另外,如果你的團(tuán)隊(duì)里都是中國(guó)人,請(qǐng)使用中文寫 commit,并制定團(tuán)隊(duì)規(guī)范(比如,我們就是采用 行為 + 功能修改 + (可選)涉及 API 變動(dòng)簡(jiǎn)述(包含對(duì)應(yīng)文檔地址))?
5. 最好能 在簡(jiǎn)歷中說(shuō)明你的團(tuán)隊(duì)工作經(jīng)歷,表明你已有與人協(xié)作的能力。并且能利用 Google StackOverflow 查找英文資料。很多團(tuán)隊(duì)很看重這個(gè)。?
6. 對(duì)于把 Github 當(dāng)成團(tuán)隊(duì)代碼庫(kù)還不用私有倉(cāng)庫(kù)的行為,你們不怕有人看過(guò)你們的代碼然后讓你們的網(wǎng)站掛掉么?用?coding.net?不也免費(fèi)么。好吧,Github 果然是世界上最大的同性別交友網(wǎng)站,哈哈。但這不是開源。另外,適當(dāng)使用各自開源工具,可以成倍提升工作效率。?
P.S. > 你們的代碼不寫測(cè)試么??
P.S. >> 大學(xué)里打 LOL Dota2 么??
~ 花了 20 分鐘看了你的東西,并寫下這些,只為了幫助 LZ 并無(wú)惡意請(qǐng)圍觀朋友勿噴。
second:
1. 一直不明白為什么現(xiàn)在很多企業(yè)要求 PHP 開發(fā)者有 HTML CSS JS 能力,現(xiàn)在不是前后端分離了么,這是要全行業(yè)招全棧工程師的節(jié)奏么。所以,我建議 LZ 應(yīng)該深入研究一下 計(jì)算機(jī)網(wǎng)絡(luò) 操作系統(tǒng) 設(shè)計(jì)模式 PHP代碼優(yōu)化 數(shù)據(jù)庫(kù)等知識(shí),這才是一個(gè)后端程序員正道。(對(duì)于有志于從事外包行業(yè)的同學(xué),可以關(guān)本頁(yè)了 ~ 多說(shuō)都是淚,那段時(shí)間幾乎每天要去安慰我那朋友,槽點(diǎn)太多)?
2. 學(xué)生時(shí)代,大多數(shù)人寫的最大的項(xiàng)目大概也就是課設(shè)、幫老師做外包。所以,對(duì)于真正大項(xiàng)目(10w行以上)缺乏(完全沒(méi)有)了解。對(duì)于 MVC 軟件架構(gòu) 設(shè)計(jì)模式 軟件工程 這些名詞,完全沒(méi)有概念。簡(jiǎn)略說(shuō)一下我們團(tuán)隊(duì)的代碼結(jié)構(gòu),更明確的完全前后分離的 MVC :?
* 前端:Angular.js + Android + iOS => 公用一套 RESTful API?
* 后端:(注:以下功能只是重要部分,不是項(xiàng)目根目錄下的文件)?
— View 視圖:負(fù)責(zé)生成 API?
—Controller 控制器:復(fù)制將各個(gè)接口組合起來(lái),傳遞給 視圖 進(jìn)行數(shù)據(jù)渲染(格式化后輸出 JSON)?
—Handler 處理機(jī):被控制器調(diào)用,復(fù)制對(duì)數(shù)據(jù)進(jìn)行加工?
—Logic 業(yè)務(wù):被控制器調(diào)用,負(fù)責(zé)處理業(yè)務(wù)相關(guān)(例如調(diào)用其他內(nèi)部、外部 API 等)?
—Model 數(shù)據(jù)模型,其中有分以下兩個(gè)子層:?
—— Data 數(shù)據(jù)包裝層:對(duì)數(shù)據(jù)庫(kù)相關(guān)操作進(jìn)行封裝?
—— ModelDefine 數(shù)據(jù)定義層:通過(guò) ODM 或 ORM 進(jìn)行定義?
— Lib 工具庫(kù):封裝各種常用的公共功能,使接口統(tǒng)一易用,如日期格式化、隨機(jī)數(shù)產(chǎn)生、字符串校驗(yàn)?
— Opt 平臺(tái)其他軟件封裝庫(kù):封裝其他中間件的功能,如 Redis RabbitMQ 等?
— Dev 開發(fā)工具:包括代碼強(qiáng)制分析、執(zhí)行測(cè)試、性能分析等等?
— Test 測(cè)試:包含 功能測(cè)試、單元測(cè)試、集成測(cè)試、性能測(cè)試等等?
看,實(shí)際生產(chǎn)用途的項(xiàng)目是很復(fù)雜的。并且我們內(nèi)部有一個(gè) 109 條的強(qiáng)制性規(guī)范(Python 的),從代碼格式、命名定義、功能分割、基本語(yǔ)法優(yōu)化等方面限制每個(gè)人。這樣的好處是每個(gè)人的代碼都是整潔的,每個(gè)模塊都是去耦合的,可以分開單獨(dú)測(cè)試。LZ 可曉得測(cè)試驅(qū)動(dòng)開發(fā)??
我是3年前接觸的 PHP,在寫過(guò)一些項(xiàng)目后去年初成為了 PHP 一生黑 (哈哈 ~)但,PHP 很少會(huì)對(duì)代碼進(jìn)行編譯器級(jí)的優(yōu)化(對(duì)比 Java 、V8),多人開發(fā)大項(xiàng)目時(shí)也容易對(duì)項(xiàng)目結(jié)構(gòu)失控。并且,由于入手很簡(jiǎn)單,你可能遇到無(wú)數(shù)代碼寫得令人發(fā)指的隊(duì)友(你見過(guò)實(shí)習(xí)生 完全不會(huì) PHP 邊學(xué)邊做邊往生產(chǎn)SVN中提交代碼 么?外包公司。。。)這還不包括……?
但有人說(shuō),這是都是工作之后才可以懂得的,要求大四學(xué)生完全熟悉這個(gè)是不是過(guò)分了?不好意思,我大三就已經(jīng)從各自 blog 里把這些知識(shí)補(bǔ)齊了。這就是我一直說(shuō)的,我們這些科班出身的和培訓(xùn)班出來(lái)的有什么區(qū)別?因?yàn)槲覀冎?#xff0c;什么是科學(xué),什么是工程。科學(xué):基本知識(shí)的深入理解并可以運(yùn)用于實(shí)際是工程師的基本能力;代碼的易讀、規(guī)范、健壯是必須的,而不是高手才能掌握的。某天,技術(shù)領(lǐng)導(dǎo)說(shuō)我們要利用 TCP 的特點(diǎn)和新出的長(zhǎng)連接規(guī)范去優(yōu)化 API 的性能,這時(shí)我們不應(yīng)該傻掉;某天,產(chǎn)品說(shuō)要加搜索自動(dòng)補(bǔ)全的功能,我們可以用樹型數(shù)據(jù)結(jié)構(gòu)來(lái)很簡(jiǎn)單實(shí)現(xiàn)。敲代碼培訓(xùn)幾個(gè)月誰(shuí)都會(huì),我女友是學(xué)金融的,她還會(huì)用 Python 處理計(jì)量經(jīng)濟(jì)學(xué)上的問(wèn)題呢。?
所以,我之所以是回答這么多,是因?yàn)槲铱吹浆F(xiàn)在有太多人想通過(guò)掉代碼獲得月薪上萬(wàn)的收入,太多人想通過(guò)互聯(lián)網(wǎng)創(chuàng)業(yè)來(lái)一夜暴富。敲代碼這個(gè)行業(yè)很有意思,你可以很容易一個(gè)人干4個(gè)人的活,也很容易被別人問(wèn)候你全家人 ~ 最近的帖子如證?http://www.v2ex.com/t/211378?
(寫易讀的變量名是品德,寫注釋是美德,寫文檔是公德,寫了易讀的變量名有寫了注釋還寫了詳細(xì)的文檔并讓我維護(hù)你的代碼 哦 您是大恩大德)?
最后弱弱說(shuō)一句,希望 LZ 不要不高興也不要受打擊,把自己沉下來(lái),放下 LOL Dota2 每天學(xué)習(xí) 10 個(gè)小時(shí)左右,深入學(xué)習(xí)基礎(chǔ)知識(shí)。如果想進(jìn)大公司多學(xué)習(xí)算法 數(shù)據(jù)結(jié)構(gòu) 網(wǎng)絡(luò) 操作系統(tǒng) 方面的知識(shí),如果想進(jìn)創(chuàng)業(yè)團(tuán)隊(duì),學(xué)習(xí)設(shè)計(jì)模式、數(shù)據(jù)庫(kù)、軟件架構(gòu),多寫一些曲折婉轉(zhuǎn)(大誤,其實(shí)是高度抽象)的代碼,如自己寫框架(一定要脫離業(yè)務(wù))寫 ORM 并完善其文檔(這點(diǎn)很重要,在小團(tuán)隊(duì)寫好文檔你隊(duì)友會(huì)愛(ài)上你的),這樣大四再去工作也不遲。?
科班出身的工程師必備知識(shí):(個(gè)人觀點(diǎn)歡迎討論、補(bǔ)充)?
《深入理解計(jì)算機(jī)系統(tǒng)》《現(xiàn)代操作系統(tǒng)》《計(jì)算機(jī)網(wǎng)絡(luò)——自頂向下方法》?
PHP 高級(jí)語(yǔ)法,PHP 代碼優(yōu)化技巧,《代碼整潔之道》?
《深入淺出MySQL:數(shù)據(jù)庫(kù)開發(fā)、優(yōu)化與管理維護(hù)(第2版)》?
軟件工程 《敏捷開發(fā)的藝術(shù)》測(cè)試驅(qū)動(dòng)開發(fā) RESTful 《大型網(wǎng)站技術(shù)架構(gòu)》?
完全在 linux 下工作,習(xí)慣命令行,并會(huì)用各自工具,比如 git docker Vagrant ssh 等等的。?
使用 PHPStorm Xdebug Composer PHPUnit PHP-CS-Fixer 等 現(xiàn)代化的工具輔助你開發(fā)?
(又是半個(gè)小時(shí) ~ 哈哈 ~ 歡迎提問(wèn))?
~ ~ 其實(shí),我也是山東的 ~ 哈哈
third:
額,前輩算不算,應(yīng)該是同齡人吧。我雖然自己業(yè)余玩過(guò)很多,但談得上做可以嚴(yán)謹(jǐn)工程項(xiàng)目的大概只有 Python 了。你說(shuō)的前端是指的 Web 端么,我們也吧 Android iOS 叫前端。Web 的話依我的看法,當(dāng)下前端開發(fā)者應(yīng)該慢慢學(xué)會(huì)放下對(duì) jQuery 的依賴,Angular.js 和 React.js 是兩種思維很獨(dú)特的工具,并且適當(dāng)培養(yǎng)在實(shí)際項(xiàng)目中自己的思想(如為什么說(shuō)“聲明式的代碼更適合表現(xiàn) UI 層”這類問(wèn)題(我們?cè)陧?xiàng)目中就使用了很多自實(shí)現(xiàn)的聲明式的 DSL (SQL 、HTML、CSS 都是應(yīng)用最廣的聲明式代碼)))。另外,現(xiàn)在的前端開發(fā)模式與十年前不同了,分毫不差的完成設(shè)計(jì)師的圖紙是基本要求,但更講究:?
前后端分離、?
* 規(guī)范化(了解業(yè)界規(guī)范,如 AMD、REST 等)協(xié)作(文檔、注釋)、?
* 模塊化(無(wú)論 UI 還是 JS,都不斷抽象形成公共庫(kù))、?
* 工具化(就是使用 node gulp 等工具)、?
* 敏捷開發(fā)(極限開發(fā) TDD BDD 等)、?
* 新技術(shù)(HTML5 ES6 Tyescript)。?
總體來(lái)說(shuō),主要還是需要四點(diǎn)能力:1.思考 2.抽象 3. 懶(善用工具)4.學(xué)習(xí)速度。不過(guò),前端相比后端要簡(jiǎn)單很多,但優(yōu)秀的前端工程師卻是嚴(yán)重的供小于求的狀態(tài)(各個(gè)創(chuàng)業(yè)團(tuán)隊(duì)基本都是處于跪求前端的狀態(tài),所以我們采用的方式是去 themeforest 購(gòu)買模板然后套用、修改 T_T)。
非常感謝 v2exer Feiox,感謝你寶貴的時(shí)間和經(jīng)驗(yàn)
轉(zhuǎn)載于:https://my.oschina.net/jasonwung/blog/494690
總結(jié)
- 上一篇: 梦到青蛙蛇预示着什么
- 下一篇: 梦到捉鱼是什么意思