<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lock.gotoBlog() &#187; FED</title>
	<atom:link href="http://www.lockchou.idv.tw/blog/tag/fed/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lockchou.idv.tw/blog</link>
	<description></description>
	<lastBuildDate>Wed, 09 Aug 2023 04:49:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[譯]為什麼我們找不到前端工程師？</title>
		<link>http://www.lockchou.idv.tw/blog/2014/06/why_cant_we_find_f2e/</link>
		<comments>http://www.lockchou.idv.tw/blog/2014/06/why_cant_we_find_f2e/#comments</comments>
		<pubDate>Mon, 16 Jun 2014 17:19:07 +0000</pubDate>
		<dc:creator>lock</dc:creator>
				<category><![CDATA[網頁設計]]></category>
		<category><![CDATA[FED]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://www.lockchou.idv.tw/blog/?p=873</guid>
		<description><![CDATA[原文為 Why can’t we find Front End developers? 作者是 Jose Aguinaga，一個前端工程師，使用者體驗設計師跟熱愛Javascript 的軟體工程師。
為什麼要翻譯這篇文章？
對我而言，前端工程師是一群，橫跨設計與工程領域，美感理性兼備，對於Web充滿熱情，相信自己可以利用Web改變世界的傢伙。 
而這篇文章點出一些對前端工程師的迷思，包括：前端門檻是否較其他軟體工程師的門檻低？為什麼我們需要前端而不是全端。經歷過這些年網站開發變革的前端們，閱讀這篇文章會特別的有感觸。

有趣的是，就算是發展較成熟的歐美網路產業，對前端仍然會有這些迷思與誤解，可想而知，台灣在這塊領域上，仍有很多路要走。透過這篇文章，可以了解所謂專業的前端工程師，需要具備的技能；也能知道何謂不及格的前端工程師。什麼是你不可錯過的前端奇才。業內的讀完可以三省吾身，業外或是對這塊領域有興趣的人，也能窺知一二。

任何意見，或是翻譯有誤的地方，也歡迎討論或來信。
lockchou@gmail.com

有天，作者偶然在Quora上發現一個跟前端工程師及新創公司有關的問題：「為什麼新創公司很難找到前端工程師？」
該討論串的的原po提到：

(前略) 我想多數人都同意前端開發比其他軟體工程領域簡單一些，那到底為何那些新創公司還是很難找到前端工程師？

我看到幾個不錯的回應，這些回應大多一針見血。而根據過去我尋找前端職缺，面試前端工程師，以及平常在前端專案裡的工作經驗，以下提出我的個人意見：
這是個相對新的領域
首先最簡單的答案就是 「這是個新領域」。很多人可能不同意這句話。因為前端工程幾乎等同於網站開發，而網站開發領域也發展超過20年了。 然而，作為一門實作使用者介面(Interface) 及使用者體驗( User Experiences) 的技術，以特定的領域而言，前端工程仍是個相當新的觀念。其中「工程」的部分更是在幾年前才開始發展。

近年來，前端工程師在Google Trends上的趨勢視覺化圖表

時至今日，搞混Web開發與前端工程的情況仍所在多有，這怨不了誰。對多數置身Web產業外的人來說：Web開發介於網頁視覺設計與其實作技術之間，存在著模糊的空間。說到底，前端工程師還是在做一些網站開發的工作，不同之處在於，他們只著重在牽涉使用者的部分。
實作使用者介面與使用者體驗這個技術領域，則是最近才開始被賦予名稱的。在15年前或更久之前，人力被分成網頁視覺設計與技術開發兩種。但隨著Web的成長，網頁不再只有到達頁(landing page)與行銷的目的，對工程師的需求也明顯增加。人們開始學習JavaScript，後端技術，使用者體驗，資料庫，甚至是網站系統設計。如今，像是AirBnB、Facebook或是Quora等網頁應用程式，在工程師的人力資源投注上也比在設計師上來的多。換句話說，產出網頁的視覺設計，然後實作出來變得更加快速。這並不代表網頁視覺設計較不重要，或是投注在其中的資源比20年前來的少，而是今時今日對於Web工程師的需求比以前更大了。

因為網站實作的技術牽涉到很多不同領域，90年代中期的Web工程師們可以說是十八般武藝。他們可能是兼具資料庫管理者、系統管理者、後端工程師、軟體維運人員(DevOPs)、軟體工程師、使用者體驗工程師跟前端工程師。最新也是大家最怕的的一件事，用JavaScript、HTML跟CSS把設計圖上的樣子刻出來，還要讓他在瀏覽器上看起來有模有樣。要能在前端的領域裡悠然自得，除了得對視覺設計有些興趣，某種程度還要是個被虐狂。

這張 gif 常用來表示很多前端初心者都碰過的鳥事。CSS是一種呈現樣式的語言，它用來將視覺設計呈現在網頁上。但大部分的時候，它呈現出來的都不是你想的那樣。
很明顯的，當你應付了幾次Web應用程式大量的需求後，你會發現這一拖拉庫的技術工作，需要各種不同角色的人分工完成。我不知道哪些工作比較費時，或哪種角色比較累(注1)。但現實就是，很多公司或網頁設計公司發現：一個人不可能處理好各種技術細節。我之前提到的那些工作描述：像是後端工程師，資料庫管理者等，都屬於Web產業的一部分。記住，這些工作多數已經行之有年，但在Web產業中，都是在近十年才明白這些職缺所要求的技術能力。

時至今日，仍有一些可憐的靈魂(在受苦)必須處理Web應用程式中所有的技術問題，我們管他們叫「全端工程師」，這麼棒的人才可說比獨角獸(註2)還難找。當然設計師也沒多好找啦，需要更多資訊的話你可以參考這篇：如何僱用一個設計師 (https://insideintercom.io/how-to-hire-designers/)
註1:  我其實是在說謊，舉例來說：做一個能在IE正常運作的網站就是件浪費時間的工作，而且你同時也在浪費你的生命值來作這件事。
註2: 多數的全端工程師缺乏建立一個Web應用程式的技術深度，包括前端，後端或營運上。在資金充足的新創公司裡，期待一個諸葛亮來處理三個正職的臭皮匠才能做完的事，是不切實際的。然而，我知道武林裡有少數的高手(Ninja)可以單槍匹馬解決上從GUI，下至殭屍程式的問題。假如你們團隊中有這樣的高手，幫大夥一個忙，不要放他走。
誤解
另一個很難找到前端工程師的重要原因 ( 對我來說這點最重要 )，因為這是一個被誤解的領域。如同原po在他提問中所述，大多數人認為前端工程師是一個「相對簡單的領域」。用一個之前流行的比喻 -「大多數人覺得 XXX 是 (What most people…)」，我們來看看套上前端工程師會是怎樣：


 
大多數人認為前端工程師是：


拿PSD檔，圖片或是草稿，然後把他轉成網頁。
有時候只是拿以前的PSD檔，圖片或是草稿來設計(改一改)。
用Javascript來寫動畫，做出網頁裡的過場效果。
用HTML跟CSS來寫網頁裡的內容跟外觀。

前端工程師真正在做的事：


建立一種設計師與工程師之間(溝通用)的圖像化語言。
從視覺設計的角度來看，定義一組元件來呈現內容、品牌跟功能等&#8230;
建立一套Web應用程式的基礎，包含規範、框架、需求、圖像化語言( Visual language )跟規格。
定義Web應用程式支援的範疇，包含裝置、瀏覽器、螢幕與動畫。
寫一份QA指南，以確保品牌忠誠度、程式碼品質，以及產品都有讓相關人士審視過。
寫(Style)一個Web應用程式，要運用適當的空間、圖片、排版(typography)、標題、字型、icon、內外邊距(padding / margin)、格線系統(grid)等。
寫(Style)一個Web應用程式，要能考慮到不同解析度的圖片，多種裝置為導向的樣版圖，還要兼顧設計指南。
下Web應用程式的標籤時，要考慮到語義 ( semantic )，accessibility，SEO，schemas 和 microformats.
連 API 抓資料時，要能採用友善，不耗電，了解目前用戶端與裝置狀況的方式 ( 譯者按：舉例來說：針對行動用戶的網路與硬體的限制，改變拉資料的方式來避免電池與頻寬的消耗 )。
用戶端的程式開發，要能呈現順暢的動畫、過場效果、延遲載入(lazy loading)、互動效果及操作流程，其中大多數的時間都耗費在漸進增強與向下相容標準。 ( 漸進增強：例如為了在設計與效能間取得平衡，某些前端的效果，例如漸層色，陰影等，只能有條件的支援舊版IE)
確保與後端間的連線是安全的，考慮使用跨網域資源分享( Cross [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif;">原文為 </span><span style="color: #3366ff;"><span style="line-height: 1.5em;"><a href="http://jjperezaguinaga.com/2014/03/19/why-cant-we-find-front-end-developers/" target="_blank">Why can’t we find Front End developers?</a> </span></span><span style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif;">作者是 </span><span style="color: #3366ff;"><a style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif; line-height: 2em;" href="http://jjperezaguinaga.com/" target="_blank">Jose Aguinaga</a><span style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif;">，</span><span style="color: #000000;">一個前端工程師，使用者體驗設計師跟熱愛Javascript 的軟體工程師。</span></span></p>
<p><strong>為什麼要翻譯這篇文章？</strong></p>
<p><strong>對我而言，前端工程師是一群，橫跨設計與工程領域，美感理性兼備，對於Web充滿熱情，相信自己可以利用Web改變世界的傢伙。 </strong></p>
<p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 16px; margin: 0px; padding: 0px;">而這篇文章點出一些對前端工程師的迷思，包括：前端門檻是否較其他軟體工程師的門檻低？為什麼我們需要前端而不是全端。經歷過這些年網站開發變革的前端們，閱讀這篇文章會特別的有感觸。</p>
<p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 16px; margin: 0px; padding: 0px;">
<p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 16px; margin: 0px; padding: 0px;">有趣的是，就算是發展較成熟的歐美網路產業，對前端仍然會有這些迷思與誤解，可想而知，台灣在這塊領域上，仍有很多路要走。透過這篇文章，可以了解所謂專業的前端工程師，需要具備的技能；也能知道何謂不及格的前端工程師。什麼是你不可錯過的前端奇才。業內的讀完可以三省吾身，業外或是對這塊領域有興趣的人，也能窺知一二。</p>
<p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 16px; margin: 0px; padding: 0px;">
<p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 16px; margin: 0px; padding: 0px;">任何意見，或是翻譯有誤的地方，也歡迎討論或來信。</p>
<p style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 16px; margin: 0px; padding: 0px;">lockchou@gmail.com</p>
<p><span id="more-873"></span></p>
<p><span style="line-height: 1.5em;">有天，作者偶然在</span><a style="line-height: 2em;" href="http://www.reddit.com/r/javascript/comments/14zwpv/why_are_front_end_developers_so_high_in_demand_at/" target="_blank">Quora</a><span style="line-height: 1.5em;">上發現一個跟前端工程師及新創公司有關的問題：「為什麼新創公司很難找到前端工程師？」</span></p>
<p>該討論串的的原po提到：</p>
<blockquote style="margin: 1.4285em 0px 1.4285em 1.4285em; padding: 0px 0px 0px 0.714285em; border-width: 0px 0px 0px 2px; border-left-style: solid; border-left-color: #bfbfbf; line-height: 2em; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px;">
<p style="margin: 0px 0px 0.714285em; padding: 0px; border: 0px; line-height: 2em;">(前略) 我想多數人都同意前端開發比其他軟體工程領域簡單一些，那到底為何那些新創公司還是很難找到前端工程師？</p>
</blockquote>
<p>我看到幾個不錯的回應，這些回應大多一針見血。而根據過去我尋找前端職缺，面試前端工程師，以及平常在前端專案裡的工作經驗，以下提出我的個人意見：</p>
<h2 style="font-weight:bold">這是個相對新的領域</h2>
<p>首先最簡單的答案就是 「<strong>這是個新領域</strong>」。很多人可能不同意這句話。因為前端工程幾乎等同於網站開發，而網站開發領域也發展超過20年了。 然而，作為一門實作使用者介面(Interface) 及使用者體驗( User Experiences) 的技術，以特定的領域而言，前端工程仍是個相當新的觀念。<strong>其中「工程」的部分更是在幾年前才開始發展</strong>。</p>
<p><a href="http://www.lockchou.idv.tw/blog/wp-content/uploads/google-trends-front-end-engineer.png" target="blank"><img class="alignnone size-full wp-image-878" title="google-trends-front-end-engineer" src="http://www.lockchou.idv.tw/blog/wp-content/uploads/google-trends-front-end-engineer.png" alt="google-trends-front-end-engineer" width="500" height="300" /></a></p>
<pre><span style="color: #666666; font-family: 'Open Sans', Helvetica, Arial, sans-serif; font-size: 11.818181991577148px; line-height: 18.850906372070313px; text-align: center;">近年來，前端工程師在Google Trends上的趨勢視覺化圖表
</span></pre>
<p><span style="line-height: 1.5em;">時至今日，搞混Web開發與前端工程的情況仍所在多有，這怨不了誰。對多數置身Web產業外的人來說：Web開發介於<strong>網頁視覺設計</strong>與<strong>其實作技術</strong>之間，存在著模糊的空間。說到底，前端工程師還是在做一些網站開發的工作，不同之處在於，<strong>他們只著重在牽涉使用者的部分</strong>。</span></p>
<p>實作使用者介面與使用者體驗這個技術領域，則是最近才開始<span style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.9999942779541px;">被賦予名稱</span>的。在15年前或更久之前，人力被分成網頁視覺設計與技術開發兩種。但隨著Web的成長，網頁不再只有到達頁(landing page)與行銷的目的，對工程師的需求也明顯增加。人們開始學習JavaScript，後端技術，使用者體驗，資料庫，甚至是網站系統設計。如今，像是AirBnB、Facebook或是Quora等網頁應用程式，在工程師的人力資源投注上也比在設計師上來的多。換句話說，產出網頁的視覺設計，然後實作出來變得更加快速。這並不代表網頁視覺設計較不重要，或是投注在其中的資源比20年前來的少，而是今時今日對於Web工程師的需求比以前更大了。</p>
<p><a href="http://www.lockchou.idv.tw/blog/wp-content/uploads/webproduct1.jpg" target="_blank"><img class="alignnone size-medium wp-image-880" title="webproduct" src="http://www.lockchou.idv.tw/blog/wp-content/uploads/webproduct1-300x260.jpg" alt="webproduct" width="400" height="345" /></a></p>
<p>因為網站實作的技術牽涉到很多不同領域，90年代中期的Web工程師們可以說是<strong>十八般武藝</strong>。他們可能是兼具資料庫管理者、系統管理者、後端工程師、軟體維運人員(DevOPs)、軟體工程師、使用者體驗工程師跟前端工程師。最新也是大家最怕的的一件事，用JavaScript、HTML跟CSS把設計圖上的樣子刻出來，還要讓他在瀏覽器上看起來有模有樣。<strong>要能在前端的領域裡悠然自得，除了得對視覺設計有些興趣，某種程度還要是個被虐狂。</strong></p>
<p><a href="http://www.lockchou.idv.tw/blog/wp-content/uploads/cssgif.gif" target="_blank"><img class="alignnone size-medium wp-image-881" title="cssgif" src="http://www.lockchou.idv.tw/blog/wp-content/uploads/cssgif.gif" alt="cssgif" width="400" height="300" /></a></p>
<pre>這張 gif 常用來表示很多前端初心者都碰過的鳥事。CSS是一種呈現樣式的語言，它用來將視覺設計呈現在網頁上。但大部分的時候，它呈現出來的都不是你想的那樣。</pre>
<p><span style="line-height: 1.5em;">很明顯的，當你應付了幾次Web應用程式大量的需求後，你會發現這一拖拉庫的技術工作，需要各種不同角色的人分工完成。我不知道哪些工作比較費時，或哪種角色比較累(注1)。但現實就是，很多公司或網頁設計公司發現：一個人不可能處理好各種技術細節。我之前提到的那些工作描述：像是後端工程師，資料庫管理者等，都屬於Web產業的一部分。<strong>記住，這些工作多數已經行之有年，但在Web產業中，都是在近十年才明白這些職缺所要求的技術能力。</strong></span></p>
<pre><a href="http://www.lockchou.idv.tw/blog/wp-content/uploads/webproducttoday.jpg" target="_blank"><img class="alignnone size-medium wp-image-882" title="webproducttoday" src="http://www.lockchou.idv.tw/blog/wp-content/uploads/webproducttoday-300x207.jpg" alt="webproducttoday" width="400" height="274" /></a></pre>
<pre>時至今日，仍有一些可憐的靈魂(<span style="text-decoration: line-through;">在受苦</span>)必須處理Web應用程式中所有的技術問題，我們管他們叫「全端工程師」，這麼棒的人才可說比獨角獸(註2)還難找。當然設計師也沒多好找啦，需要更多資訊的話你可以參考這篇：如何僱用一個設計師 (<a style="margin: 0px; padding: 0px; border: 0px; line-height: 2em; color: #047ac6;" rel="nofollow" href="https://insideintercom.io/how-to-hire-designers/" target="_blank">https://insideintercom.io/how-to-hire-designers/</a>)</pre>
<blockquote><p>註1:  我其實是在說謊，舉例來說：做一個能在IE正常運作的網站就是件浪費時間的工作，而且你同時也在浪費你的生命值來作這件事。</p>
<p><span style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.9999942779541px;">註2: 多數的全端工程師缺乏建立一個Web應用程式的技術深度，包括前端，後端或營運上。在資金充足的新創公司裡，期待一個諸葛亮來處理三個正職的臭皮匠才能做完的事，是不切實際的。然而，我知道武林裡有少數的高手(Ninja)可以單槍匹馬解決上從GUI，下至殭屍程式的問題。假如你們團隊中有這樣的高手，幫大夥一個忙，不要放他走。</span></p></blockquote>
<h2 style="font-weight:bold">誤解</h2>
<div><span style="line-height: 1.5em;">另一個</span>很難找到前端工程師的重要原因 ( 對我來說這點最重要 )，因為這是一個被誤解的領域。如同原po在他提問中所述，大多數人認為前端工程師是一個「相對簡單的領域」。用一個之前流行的比喻 -<span style="line-height: 1.5em;">「大多數人覺得 XXX 是 (<em>What most people…</em>)」，我們來看看<span style="line-height: 1.5em;">套上</span>前端工程師會是怎樣：</span></div>
<div><span style="line-height: 1.5em;"><br />
</span></div>
<div><span style="line-height: 1.5em;"> </span></div>
<div><strong>大多數人認為前端工程師是</strong>：</div>
<div>
<ol style="margin: 0.2857em 0px 0.714285em 2em; padding: 0px; border: 0px; line-height: 2em; list-style-position: outside;">
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">拿PSD檔，圖片或是草稿，然後把他轉成網頁。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">有時候只是拿以前的PSD檔，圖片或是草稿來設計(改一改)。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">用Javascript來寫動畫，做出網頁裡的過場效果。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">用HTML跟CSS來寫網頁裡的內容跟外觀。</li>
</ol>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;"><strong>前端工程師真正在做的事：</strong></div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">
<ol style="margin: 0.2857em 0px 0.714285em 2em; padding: 0px; border: 0px; line-height: 2em; list-style-position: outside;">
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">建立一種設計師與工程師之間(溝通用)的圖像化語言。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">從視覺設計的角度來看，定義一組元件來呈現內容、品牌跟功能等&#8230;</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">建立一套Web應用程式的基礎，包含規範、框架、需求、圖像化語言( Visual language )跟規格。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">定義Web應用程式支援的範疇，包含裝置、瀏覽器、螢幕與動畫。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">寫一份QA指南，以確保品牌忠誠度、程式碼品質，以及產品都有讓相關人士審視過。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">寫(Style)一個Web應用程式，要運用適當的空間、圖片、排版(typography)、標題、字型、icon、內外邊距(padding / margin)、格線系統(grid)等。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">寫(Style)一個Web應用程式，要能考慮到不同解析度的圖片，多種裝置為導向的樣版圖，還要兼顧設計指南。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">下Web應用程式的標籤時，要考慮到語義 ( semantic )，accessibility，SEO，schemas 和 microformats.</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">連 API 抓資料時，要能採用友善，不耗電，了解目前用戶端與裝置狀況的方式 ( 譯者按：舉例來說：針對行動用戶的網路與硬體的限制，改變拉資料的方式來避免電池與頻寬的消耗 )。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">用戶端的程式開發，要能呈現順暢的動畫、過場效果、延遲載入(lazy loading)、互動效果及操作流程，其中大多數的時間都耗費在漸進增強與向下相容標準。 ( 漸進增強：例如為了在設計與效能間取得平衡，某些前端的效果，例如漸層色，陰影等，只能有條件的支援舊版IE)</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">確保與後端間的連線是安全的，考慮使用跨網域資源分享( Cross Origin Resource Sharing (CORS) )時，要避免XSS跟CSRF的狀況發生。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">不要忘了，不管多嚴格的結案期限，相關人士的各種要求，以及裝置的限制，永遠把使用者擺在第一。</li>
</ol>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">為了達到上面這些目標，前端工程師也使用很多工具，從視覺設計師常用的( Photoshop、Adobe、Macaw、Sketch ) 到程式開發工具 ( IDE、指令列、版本控制、bash script、Build Task)。</div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">有時候我們甚至要考慮行銷( 電子報、廣告活動、用戶資料分析、SEO、社群媒體 )，使用者經驗( 動畫、過場、反饋、使用者介面、圖像化語言 ) 到內容調整 (斷行、避免斷字、可讀性跟顏色)。</div>
</div>
</div>
<h2 style="font-weight:bold">不好的前端工程師</h2>
<div>也許大多數顯而易見的理由指向為什麼很難找到前端工程師，是因為市面上充斥不好的前端工程師。如同Quota上一篇文章所陳述的答案，前端工程師擁有比較低的進入門檻。Javascript, CSS跟HTML 不是很難掌握的程式語言。任何人只要花幾天就可以在  <a href="http://www.codecademy.com/" target="_blank"><span style="color: #047ac6;"><span style="line-height: 1.5em;">CodeAcademy</span></span> </a>或是 <a href="https://www.codeschool.com/" target="_blank"><span style="color: #047ac6;"><span style="line-height: 1.5em;">Codeschool</span></span> </a>學到基礎，但當你學習像是Erlang, Go 或是ANSI C時，你就需要掌握很多電腦工程的技巧。調個顏色跟在網頁中插入一張圖片真的非常簡單，但那跟了解Web的眉眉角角完全是兩回事。</div>
<div>最終，市場上充斥著這樣的前端工程師：</div>
<div><strong>不好的前端工程師會做出這些事 ( 同時也傷害真正前端工程師 )</strong></div>
<div>
<ol style="margin: 0.2857em 0px 0.714285em 2em; padding: 0px; border: 0px; line-height: 2em; list-style-position: outside;">
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">濫用Javascript 函示庫，因為他們不懂怎麼使用原生 Javascript (例如：無處不用 jQuery )。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">濫用Javascript 外掛，用別人寫的程式碼但沒辦法看懂別人寫什麼 (例如：jQuery.doParallaxPls.js )。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">不看需求，設計文件，也沒做任何比較跟評估，就在Web應用程式裡用了 CSS 框架 ( Bootstrap, Foundation, Skeleton )，卻只用其中 5% 的 CSS / JS。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">用了CSS 框架，網站是響應式的，或是響應式設計只是你隨時可以可以加到Web應用程式裡的調味料而已。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">把「響應式網頁設計(Responsive Web Design」掛在嘴邊，卻不知道Server端有哪些解決方案可以用。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">不遵守規範，不使用前置處理程式，命名規則，好的習慣，並且同時過度的使用CSS selector，id，某個神奇的數值, !important。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">忽視效能，memory leak (或是根本不知道這是什麼)，也不做程式碼的檢查跟評量。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">展示成品的時候沒做任何的評估，或者評估就是「這在我的電腦 / 瀏覽器 / 裝置上會動」</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">過度的閉門造車，忽略了已經發展30年的軟體工程。</li>
</ol>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">很多情況下，你想找一個資工背景，然後決定走前端工程的人。要當一個好的前端工程師，資工背景並不能當作是條件，但那些電腦與軟體的基本功的確應該被考慮進來，無論這些人是用Javascript 寫程式，或是在瀏覽器上寫程式。好的前端工程師了解 Web 或許是一個有史以來最威的平台與環境，程式碼可以在上面直接執行，跟其他在virtual machine 或 runtime 上執行的語言相比，開發時同樣要小心，甚至更小心。</div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">一個好的前端工程師不會只重視Web技術跟其使用的語言，反而是在不同的元件，系統跟概念上擁有豐富的經驗。</div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">下列是一些老鳥前端工程師應該知道，或是比一般前端工程師做得更好的部分( 這些人才是你應該要找的人才 )：</div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">
<ol style="margin: 0.2857em 0px 0.714285em 2em; padding: 0px; border: 0px; line-height: 2em; list-style-position: outside;">
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">DNS解決方案，使用CDN，把資源檔的請求分散到多個不同域名上。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">HTTP Headers (Expires, Cache-Control, If-Modified-Since )</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">所有Steve Sounders說的規範，參考：<a style="margin: 0px; padding: 0px; border: 0px; line-height: 2em; color: #047ac6;" href="http://shop.oreilly.com/product/9780596529307.do" target="_blank">高效能網頁</a></li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">如何解決所有PageSpeed, YSlow, Chrome Dev Tools Audit, Chrome Dev Tools Timeline 上列出的問題。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">什麼時候要把事情交給Server，什麼時候要交給前端。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">利用快取(cache), 預先抓取(pre-fetching) 跟 延後載入(post-load) 技巧</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">原生Javascript，知道何時要自己刻，何時要去找別人的程式碼來參考，同時還能夠評估出優點跟缺點再去做。</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">新潮的MVC Javascript 函式庫知識跟用法( 例如：AngularJS, EmberJS, ReactJS )，圖形函式庫( 例如：D3, SnapSVG )，DOM 操作函式庫( 例如：JQuery, Zepto )，延遲載入(lazy loading) 或是 package管理函式庫( 例如：RequireJS, CommonJS ), 任務管理( 例如：Grunt, Gulp )，package管理 ( 例如：Bower, Componentjs ) 及 測試 ( 例如：Protractor, Selenium ).</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">圖片格式，優點，何時使用哪一種，如何使用。圖片的優化技巧，載入的策略 ( Sprites, lazy loading 技巧, 快取刷新, PNG交錯)</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">CSS標準的知識與用法，現代規範與策略 ( 例如：BEM, SMACSS, OOCSS )</li>
<li style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5em;">Javascript 在電腦科學的部分 ( memory management,single threaded nature, garbage collector algorithms, timeouts, scoping, hoisting, patterns )</li>
</ol>
</div>
<h2 style="font-weight:bold">結論</h2>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">時至今日，尤勝於前，前端工程師已在網路佔了一席之地。可能是因為各種裝置，瀏覽器跟網頁標準的進化，使得人們能專注在Web應用程式的使用者上。全世界的前端工程師跟開發者以經能夠打造出讓人興奮的產品，網路不再只是我們過去所認為：一個讓人看到你餐廳菜單，或是公司營業時間的地方。現在我們擁有從<a href="http://threejs.org/" target="_blank">3D 圖庫</a>，<a href="http://www.html5rocks.com/en/tutorials/webrtc/basics/?redirect_from_locale=de" target="_blank">即時影音溝通</a>，<a href="http://grooveshark.com/" target="_blank">電台</a>，甚至是整套辦公室工具( 例如：Google Apps, Microsoft Office Online )。所有東西都在雲端，無所不在的儲存了我們所寫下，所聽，電子郵件跟我們所觀賞的影片。</div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">雖然前端工程師很難找，但我知道有越來越多人將投身前端大軍的行伍。不只是因為讓人驚豔的工作環境或是這份工作提供的優渥薪水，而是因為在Web上開發軟體是極度令人興奮的一件事。你擁有接觸到數以千計使用者生活的機會，當你透過網路提供一個很棒的服務給某個人，這一切都在一個叫做瀏覽器的東西上發生，儘管它仍有所限制，但它們仍能夠分析，揮灑或呈現你任何瘋狂的想法。</div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">前端工程師們</div>
<div style="margin: 0 0 15px; padding: 0px; border: 0px; line-height:1.5em;">網路正在等你，祝你前程似錦。</div>
</div>
<h3  class="related_post_title">延伸閱讀</h3><ul class="related_post"><li>2012/09/03 -- <a href="http://www.lockchou.idv.tw/blog/2012/09/a-front-end-engineers-manifesto/" title="I AM A FRONT END ENGINEER. (我就是一個前端工程師)">I AM A FRONT END ENGINEER. (我就是一個前端工程師)</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.lockchou.idv.tw/blog/2014/06/why_cant_we_find_f2e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I AM A FRONT END ENGINEER. (我就是一個前端工程師)</title>
		<link>http://www.lockchou.idv.tw/blog/2012/09/a-front-end-engineers-manifesto/</link>
		<comments>http://www.lockchou.idv.tw/blog/2012/09/a-front-end-engineers-manifesto/#comments</comments>
		<pubDate>Mon, 03 Sep 2012 10:40:15 +0000</pubDate>
		<dc:creator>lock</dc:creator>
				<category><![CDATA[網頁設計]]></category>
		<category><![CDATA[FED]]></category>

		<guid isPermaLink="false">http://www.lockchou.idv.tw/blog/?p=851</guid>
		<description><![CDATA[Randy哥塗鴉牆分享的： A FRONT END ENGINEER’S MANIFESTO(前端工程師宣言)
說是準則也好，宣言也罷，行內人可以時時拿來檢視(提醒)自己，行外人也能了解F2E 專業與特性的好文。


Most importantly and above all,I will put the needs of the USER FIRST over my own needs as a developer.
最最最重要的是，我會把『使用者至上』的需求放在我這個工程師的需求之前。
PROGRESSIVE ENHANCEMENT and UNOBTRUSIVE JAVASCRIPT are my tools. Without JavaScript or CSS, or without mobile Webkit, my site may not look pretty but will still be functional.
不斷進化且乾淨清爽的JavaScript就是我的利器。沒有JavaScript, CSS或是行動版的Webkit，我的網站就算能動但也只是醜而已。
SIMPLICITY IS RESPECT
 I [...]]]></description>
			<content:encoded><![CDATA[<p>Randy哥塗鴉牆分享的： <a href="http://f2em.com/" target="blank">A FRONT END ENGINEER’S MANIFESTO(前端工程師宣言)</a><br />
說是準則也好，宣言也罷，行內人可以時時拿來檢視(提醒)自己，行外人也能了解F2E 專業與特性的好文。<br />
<a href="http://www.lockchou.idv.tw/blog/wp-content/uploads/iamfed.PNG"><img class="alignnone size-medium wp-image-854" title="I AM A FRONT END ENGINEER" src="http://www.lockchou.idv.tw/blog/wp-content/uploads/iamfed-300x218.PNG" alt="I AM A FRONT END ENGINEER" width="400" height="290" /></a></p>
<p><span id="more-851"></span></p>
<p>Most importantly and above all,I will put the needs of the <strong>USER FIRST</strong> over my own needs as a developer.<br />
最最最重要的是，我會把『使用者至上』的需求放在我這個工程師的需求之前。</p>
<p><strong>PROGRESSIVE ENHANCEMENT</strong> and <strong>UNOBTRUSIVE JAVASCRIPT</strong> are my tools. <span style="color: #808080;">Without JavaScript or CSS, or without mobile Webkit, my site may not look pretty but will still be functional.</span><br />
不斷進化且乾淨清爽的JavaScript就是我的利器。沒有JavaScript, CSS或是行動版的Webkit，我的網站就算能動但也只是醜而已。</p>
<p><strong>SIMPLICITY IS RESPECT</strong><br />
<span style="color: #808080;"> I will not unnecessarily tax my users&#8217; brains with complicated designs and user interfaces. I will strive to make interactions succinct and minimize mental overhead.<br />
</span> 簡單才是重點 &#8211; 我不會讓使用者花太多腦袋去了解複雜的設計跟使用者介面。我會努力的讓互動這件事變得簡潔又不傷神。</p>
<p>I will educate my friends and family that <strong>WEB BROWSER CHOICE MATTERS</strong><br />
<span style="color: #808080;"> Web Browsers should at minimum properly implement web standards and should be responsive to the advancing web. Web Browser Choice should be separate from picking an operating system. This is especially important for mobile devices.</span><br />
我會教我的親朋好友：選對瀏覽器很重要。<br />
瀏覽器至少應該要遵照標準來實作，並且跟著網路與時俱進。選擇瀏覽器跟選擇作業系統是分開的(大概是說你有更多選擇，不必被作業系統綁住吧)，這點在行動裝置上尤其重要。</p>
<p>I believe in the power of the <strong>OPEN WEB</strong><br />
<span style="color: #808080;"> My content was accessible when full Flash / Flex apps were popular, and I will continue to provide accessible device independent content in the face of App Store ubiquity.</span><br />
我相信開放網路的力量<br />
在滿是Flash / Flex網站跟應用程式的時代，我的網站內容都能容易地被取得。就算面對現在充斥的App商店，我仍會繼續給你這些內容，無論你用哪一種裝置。</p>
<p>I acknowledge that <strong>PERFORMANCE IS CRITICAL</strong>. <span style="color: #808080;">My own developer hardware is not representative of the real world, and will be mindful of limited hardware, poor latency, and low bandwidth situations.</span><br />
我了解效能是關鍵，我的開發機不能代表這個世界上所有使用者的機器，我會留意那些硬體太爛，累格很大跟種花的狀況。</p>
<p>I will learn at the root, not the abstraction:<strong> JAVASCRIPT BEFORE JQUERY</strong> or YUI, Prototype, Mootools, et al.<br />
我會從根紮起，而不是先學皮毛。<br />
先學JAVASCRIPT，再去學JQuery 或是 YUI, Prototype, Mootools這些東西。</p>
<p>I believe that <strong>OPEN SOURCE CODE and ROYALTY FREE TOOLS</strong> represent the best future for the Web. <span style="color: #808080;">Especially when considering file formats and codecs for images, audio, or video.</span><br />
我相信開放原始碼跟有授權的免費工具代表著網路的美好未來，尤其當你考量到檔案格式，圖片及影音編碼等技術。</p>
<p>I will not underestimate the importance of <strong>ACCESSIBILITY</strong><br />
<span style="color: #808080;"> It is not just about helping users that may have trouble differentiating colors or difficulty reading small fonts, but is about providing comprehensive access for users that may prefer to use either the keyboard or the mouse; in providing a clean print friendly format; in providing content to a devices of varying technological capabilities.</span><br />
我不會小看Accessibility (網站親和力)的重要<br />
這不只是幫助那些有辨色困難或是看不清小字的人，也提供使用滑鼠或鍵盤使用者都能方便的取得內容。為你的內容提供一個便於列印的格式，也把他們提供給各種技術規格的裝置。</p>
<p>I will<strong> GIVE BACK </strong>to the <strong>COMMUNITY</strong><br />
<span style="color: #808080;"> I will contribute workarounds, fixes, and document issues that may help others. I will file bugs at the source with the web browser’s bug tracker.</span><br />
我會回饋社群<br />
我會貢獻我的技巧，解決問題的方法，並且把一些遇過的問題寫成文件來幫助別人，我會用bug追蹤系統把bug記下來。</p>
<p>I will continue to foster both <strong>HEMISPHERES OF MY BRAIN</strong>. <span style="color: #808080;">I will better myself not just in math and code, but also in art, music, design, and usability.</span><br />
我會保持左腦右腦都能成長壯壯，除了加強數理跟寫程式能力，也要涉獵藝術，音樂，設計跟使用性。</p>
<p>I will do my best to keep my <strong>KNOWLEDGE CURRENT</strong>. <span style="color: #808080;">I understand that I cannot learn everything and will be mindful of what I do not know.</span><br />
我會盡全力的讓所學跟上時代。我知道我沒辦法學會一切，但我會留心那些我還不懂的知識。</p>
<p>I accept <strong>RESPONSIBILITY FOR VIEW SOURCE</strong><br />
<span style="color: #808080;"> I will take care to use approaches that will be compatible with current and future web browsers, including preference for feature detection over user agent sniffing when it does not violate rules #1 or #5.</span><br />
檢視原始碼的責任，我來扛。<br />
在不違反規則1到5的情況下，我會小心地使用一些方法來相容現在或未來的瀏覽器，像是一些檢查user agent來判斷功能是否可用。</p>
<p><strong>My CODE will be PORTABLE</strong><br />
<span style="color: #808080;"> I will be mindful of overzealous CSS specificity, overuse of CSS!important, the global JavaScript namespace, as well as numerous browser implementation quirks.</span><br />
我寫的程式碼到處都能跑<br />
我會留意過度熱衷CSS specificity這件事，避免過度使用CSS !important，全域的JavaScript 命名空間，以及一大堆為了兼容瀏覽器的怪招。</p>
<p>I will choose the <strong>RIGHT TOOL FOR THE JOB</strong>.<br />
<span style="color: #808080;"> Whether it be a big choice between a full stack framework and a simple DOM-centric library, or even the simple choice between CSS and JavaScript to solve a task, I will educate myself on the mistakes of those before me to make the correct choice for my project.</span><br />
工欲善其事，必先利其器<br />
你是否常為了選擇功能完整的框架還是輕巧的DOM函式庫，某個問題要用CSS還是JavaScript解決而左右為難？把之前犯的錯誤都當作繳學費，我會為了案子而做出正確的選擇。</p>
<p>I will strive to create <strong>SECURE APPLICATIONS.</strong><br />
<span style="color: #808080;"> I will properly escape my output and code to prevent XSS and CSRF. I will not store sensitive information in Cookies, and will use HTTPS where appropriate. I will be responsive in correcting issues that may cause harm to applications I have created.</span><br />
我會致力於打造安全的應用程式<br />
我會正確的將輸出結果轉碼，以避免XSS跟CSRF攻擊。我不會把敏感的資訊存到Cookie裡，而且會適時的使用https。我願意及時的回應並<span style="text-decoration: line-through;">吃下</span>修正這些我自己製造的大便。XDD</p>
<h2>I AM A FRONT END ENGINEER.<br />
我就是一個前端工程師</h2>
<p><br/></p>
<h3  class="related_post_title">延伸閱讀</h3><ul class="related_post"><li>2014/06/17 -- <a href="http://www.lockchou.idv.tw/blog/2014/06/why_cant_we_find_f2e/" title="[譯]為什麼我們找不到前端工程師？">[譯]為什麼我們找不到前端工程師？</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.lockchou.idv.tw/blog/2012/09/a-front-end-engineers-manifesto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
