Keynote: The Different Paths We Take as Programmers – PyCon Taiwan 2019

Keynote: The Different Paths We Take as Programmers – PyCon Taiwan 2019


好,那歡迎大家待到 PyCon Taiwan 2019 的最後一個場次 那最後一個場次是我們今年最後一位專題講者 Tracy 那 Tracy 是 一名程式設計師、設計師、作家和創業家
Tracy’s a programmer, designer, author and entrepreneur 她在 2010 年自學 Python
In 2010 she taught herself Python 成立第一家新創企業
to launch her first startup 後來因而寫了書
which led to the book 名為 Hello Web App (哈囉,網頁應用程式)
Hello Web App 介紹 Django 網路程式開發
a book teaching introductory Django Web App development 今天,她的演講主題是
Today she is going to bring us the talk 程式設計師選擇的不同道路
The Different Paths We Take As Programmers 讓我們掌聲歡迎 Tracy
Let’s give a big applause to welcome Tracy 有聲音嗎?
Is this work? 你們…麥克風都正常嗎?
Can you…are they working? 大家好,謝謝你們邀請我
Hello. Thank you for having me 一開始想跟大家分享一個故事
I want to start out with a story 我常在會議上演講
I speak at a lot of conferences 大概三年前
and about three or so years ago 我參加一個論壇,當時我坐在台下
I was in a conference. I was in the audience 前面坐了兩個男生
and I was sitting behind two men in the audience 這兩個男生…
and these two men in the audience were 那是在 DevOps 會議上
It was a DevOps conference 所以並不是直接和 Python 相關
so it wasn’t something that was particularly Python related 我可以聽到這兩個男生在說話
and I could overhear these two guys in the audience 在討論 Django
talking about Django 我馬上豎起耳朵,想交新朋友
and I perked up because I was looking to make friends 也很高興聽到有其他與會者
and I got really excited to see someone else in this audience 在討論 Django
talking about Django 我就想過去打招呼說聲嗨,我叫 Tracy
and I wanted to like, you know, say hello I’m Tracy 我寫了這本書
I wrote this book 但在我過去自我介紹前
But before I could, you know, say hello and introduce myself 其中一個人說了這些話
one of the guys said this 他對他朋友說
He said to his friends 「我希望大家可以停止教授 Django
“I wish they would stop teaching Django 因為會教出劣質的程式設計師」
because it teaches people to be bad programmers.” 一聽,我馬上縮回去
And I just slunk back 再也沒跟他說話
I didn’t talk to him anymore 我覺得很尷尬,也完全不想打招呼
I felt very awkward and I didn’t want to come say hello 因為我在工作上最主要就是使用 Django, 一個 Python 框架
because I am primarily, I work primarily with Django, the Python framework 我也立刻覺得,他就是在說
and I immediately felt like he was telling me 我是個差勁的程式設計師
that I was a bad programmer 其實也滿有趣的,因為這段話
and it’s funny because it kind of 開始讓我
it started a 展開一段思考過程
thought process in me 也讓我開始探究
and started me investigating, you know 下念這些話是什麼意思
what it means when someone says 例如,「噢,這個人是個很糟的程式設計師」
oh this person is a bad programmer 或「他是個很棒的程式設計師」
and this person is a good programmer 或是,這個人符合程式設計師的標準
This person fits a stereotype 這個人不符合
and this person doesn’t 這讓我開始去調查和研究大家都走了哪條路
It led me to investigate and research what kind of the paths that people take 是怎麼成為程式設計師的
either becoming programmers 以及這個過程
and how that path 並非單純從甲地到乙地
isn’t just from A to B 大家並不會遵循
that people don’t follow a certain 固定的路徑
certain one path 程式設計師,Python 工程師
but that as programmers and Python programmers 有可能是從四面八方、不同途徑接觸到這個程式語言
we come into the language from so many different directions 用於各式各樣的地方
and we use it in so many different ways 最後成為
and we become, you know 後端工程師或是負責網頁排版
back-end programmers or you become typographers 也可能成為設計師或企業家
or become designers, or become
entrepreneurs 或創立新創企業
or startup founders Python 的用途非常廣泛
and there’s so many things you can do with Python 而當你用黑白分明的詞彙
and that when you think in those black-and-white terms 例如,說你不能做某件事
that’s, you know, you can’t do something because 這個很好或是不好,或是說 Django
is good or is bad or Django is 對教育有害
is bad for education 這類言論
that’s kind of 對整個產業來說其實不是很好
a bad idea in this industry 這也是為什麼我會有今天這個演講
and that’s kind of where this this presentation came into play 所以,如果要了解我的看法
So to understand how I think about this 我必須分享一下我自己的旅程
I want to start out a little bit with my journey 我踏入程式設計的途徑並非典型
into programming because my journey is a little atypical 算是繞了點路
I kind of took a roundabout path in order to get to 最終才來到這裡,變成寫過介紹 Django 書籍的作者
where I am today as an author of a book on Django 這是我寫的書,Hello Web App,噢,很亮
This is Hello Web App. Ooh it’s very bright Hello Web App 這本書
This is Hello Web App 是我自費出版的
and Hello Web App is a book that I self-published 教人怎麼用 Django 架設網頁應用程式
teaching people to use Django to build Web Apps 不一定是要成為程式設計師
not necessarily become a programmer 這本書是教大家建立 Web App
I say to to build Web Apps 讓大家能推出第一個 Web App
because it’s helping people launch their first web apps 而不是學習程式語言技巧
rather than learning the programming skills 省下請後端工程師的錢
to save him a back-end developer 所以這算是比較特定、小眾的主題
so it’s kind of a more narrow niche 從那之後我還有出版別的書
And since then I have released other books 我今天其實有帶不少本來送大家
I have actually quite a few of these books to give away 演講結束後歡迎大家來索取
so if after the presentation you can come down and get one 這本書是在介紹基礎設計
but this is my book on beginner design Hello Web App 是在講
so like Hello Web App is a book on 如何架設網頁程式
teaching people how to build the first web app 這本書則是在教人設計出網頁程式
This is teaching people to design their first web app 我目前也在做的另一件事
And the other thing I work on right now 是製作這種充滿插圖的冊子
is building, is writing kind of like little print zines 介紹命令列或是 Git 等電腦相關的基礎主題
like guides on command line and Git and other introductory computer topics 我今天也帶了幾本要送給大家
so I have these to give away as well 但順帶一提,這其實是免費的
but FYI, this is free 想要的話,可以上我的網站
so if you want to go to my website 網址是 hellowebbooks.com
which is hellowebbooks.com 我待會會上傳上去
I’ll have it up later 完全免費,可以在家自行下載列印
You can download and print at home and it’s completely free 在這 Django、Python 世界中我還做過其他事情
The other things I’ve done in this Django-Python world 其中一件也算是廣為人知的
the thing I’m kind of known for as well 就是架設了叫做 WeddingLovely 的網頁程式
is building a web app called WeddingLovely 我經營 WeddingLovely 大約七年左右
so I worked on wedding lovely for about seven years 這個程式主要是提供給北美洲人辦婚禮時
and it was built for the North American style of getting weddings 走過整個準備流程
helping people walk through the process of planning 並和廠商合作
and working with businesses for their wedding 在創立這個網頁程式的過程中
In this journey it was 我自學了程式設計
this is how I taught myself programming 當時我人在加州矽谷
I was in Silicon Valley of California 我推出這個程式
I launched this Web App 我也參加了 500 Startups 的加速器計畫
I went through the 500 Startups accelerator 籌措經費
I raised money 經營了七年左右
It was over about seven or so years 但也不能算是非常成功
but it wasn’t a runaway success 我在去年關閉的這個網站
and I actually shut it down last year 但這個計畫教了我好多關於 Python 和 Django 的知識
but it taught me so much about working with Python and Django 而這也是我後來受到肯定的地方
and it’s kind of something I got well done for 那現在呢,我並沒有全職專注在寫書或是 WeddingLovely 上
So I’m not working full-time on my books or on WeddingLovely anymore 我其實目前任職於 TinySeed 這家公司
I’m actually working at a company called TinySeed 它是一家…
which is kind of 我身為程式設計師學到的一切,都跟 TinySeed 的工作密不可分
The things I have learned as a programmer are tied directly into my work at TinySeed 它是一個創業加速器
which is a an accelerator for businesses 提供遠端服務
It’s a remote year-long accelerator for businesses 協助創業家成立企業,為期一年
for people who are launching their own business 儘管我現在的工作主要不是負責寫程式
Even though I’m not primarily a programmer anymore 我學會的各種技能
the skills that I learned 包含 Python、程式設計、網頁應用程式
with Python, with programming, with building Web Apps 成為創業家
with being an entrepreneur 都直接影響到我在 TinySeed 的工作
has directly impacted the work that I do at TinySeed 到目前為止,我的職涯發展非常的棒
I had a really, really wonderful career so far 我曾
I’ve 出版這些書,架設網頁程式
launching these books and working on this Web App 也到世界各地的會議上演講
and traveling and speaking at conferences 一切經歷都非常棒
It’s been such a wonderful journey 我也獲得很大的成就感
and it’s such a fulfilling career 但其實,我差點到不了這裡
But I almost didn’t get here 全因為大學時發生的事
because of what had happened when I was in university 關於程式設計的這種想法
This idea of programming 就是每個人都照著既定路線走
that some people have as a straight line 一旦跳進來,開始碰程式設計
as someone who jumps into programming and becomes 跟著這條路走
you know, follows along and think of their path 最後就會成為某類的程式設計師
and becomes a certain kind of programmer 這樣的想法,在大學時
This kind of thinking in university 差點害我今天當不成程式設計師
almost stopped me from being a programmer today 我也不可能像今天這樣使用 Python
and the ways that I use Python 以計算機科學、程式語言來說,我的背景非常完美
I had the perfect background for computer science, for programming 我今年 35 歲
and I’m 35 當年我剛開始架網站時,還長這樣
I started out working with websites when it looked like this 還是單純的 HTML
when it was just pure HTML 這是在九零年代
This is in the 90s 2000 年初
in early 2000s 高中時
and in high school 架網站開始流行起來
this is when websites started becoming a thing HTML 也是
and pure HTML 我自學如何架網站
and I taught myself how to build websites 當我才 14、15 或 16 歲
and when I was, you know, 14, 15 or 16 我就靠架網站度過高中
I made my way through school by building webs… 老師叫我們針對某個主題寫份報告時
when a teacher would say, write me a paper or a report on this topic 我會直接改而架個網站
I would just build a website instead 然後呢,老師
and then the teachers 因為這還非常新
because this is so new 網站在當時還是非常陌生的東西
websites were kind of like a whole new thing at that time 老師會因此留下深刻印象,直接給我一個 A
the teacher would had their mind blown and they would give me an instant A 他們會不停讚嘆,哇!你架了一個網站欸!
because it’s like, oh, you build a website 太厲害了!但其實
oh, and it’s like 比起寫一整份報告,我根本沒做什麼事
I did so much a little work as compared to a full paper 我非常喜歡用電腦
I loved working on computers 在大概四歲的時候,我有了人生第一台電腦
I’ve had a computer since I was maybe four years old 是在電腦業工作的親戚給的
because of family members who worked in computers 我那時候想
and I thought at that time 我喜歡電腦,我愛網站,也愛架設網站
I was like I love computers, I love websites, I love building it 我喜歡黏在電腦前
I love being on the computer 所以我決定上大學,念計算機科學
so I’m going to university for computer science 最後,我錄取了加州的這間大學
I ended up getting into this university in California 加州理工大學
It’s called Cal Poly 聖路易奧比斯波加州州立理工大學
Cal Poly San Luis Obispo 就全美來說
and in terms of the United States 加州理工大學在計算機科學上,排名頂尖
Cal Poly in terms for computer science is one of the best universities 至少在西岸
at least for like the West Coast 計算機科學領域,名列前茅
for computer science 我也很幸運錄取這個學系
and I was very lucky to get into this program and
然後 day one, hour one of being in university
上大學的第一天,第一個小時 我上的第一堂課
I had my very first class 是計算機科學概論
which happened to be the fundamentals of computer science 我走進教室
and I walked in there like, you know 非常興奮,終於來到大學,準備好好學習
excited to be in university and excited about learning this 然後成為
and becoming, you know 學習程式語言和這一切
learning programming and doing all these things 我愛的事物
that I thought that I loved 但上課開始不出十分鐘
and not ten minutes later in this class 我的臉變這樣
my face turns into this 我整個不知所措
I was so overwhelmed 教授講了一大堆東西
and the teacher was talking things like 像是硬體、伺服器等等
hardware and servers and all these things 那我呢
and I was someone who 喜歡用電腦,但主要只有架過網站
loves being in the computer but I had primarily worked with websites 我當下完全是手足無措
I was completely out of my element 課後我過去找老師
I walked up to the teacher afterwards 我跟他說
and I said like 因為教室裡其他同學
because everyone else in the class seemed like 好像都完全知道在幹嘛
they knew what they were doing there 邊聽講邊頻頻點頭稱是
just nodding and yes, yes, yes 我則是,什麼?不,不,我聽不懂
and I’m like what? No, no, I don’t understand 所以課後我跑去找老師
and I talked to the professor afterwards 問他說,我是不是跑錯教室了
and I was like am I in the wrong class 這堂課不是應該是計算機科學概論嗎
like is this not to the beginner class for computer science 他回答,噢,撐著點
and he says, oh just hold on 情況會好轉的
things will get better 我在大學上的課有一些特點
One of the things about my courses in university is that 當時,Python 還沒成為教學上最主流的程式語言
this is before Python became a prominent programming language for education 所以我們還在學 Java
so we were learning Java 我不知道大家有沒有用過 Java
and I’m not sure if you have experience with Java 以初學者來說,我覺得 Java 比 Python 難學得多
I think as a beginner Java is much harder to learn than Python 對我來說尤其困難
and it was a very difficult language for me to learn 我以前使用的是標記語言
coming from, you know, from markup language 從 HTML 轉而學習 Java
from HTML to trying to work with Java 尤其是我做的主要是我看不到的東西
especially because I was working with things that I couldn’t see 我主要在做命令列
I was primarily working in the command line 我成功活過那門課
and I managed to pass that initial class 接著來到第二堂課
and I went to my second class 稍微順利一點了
and things were getting a little bit better for me 第二堂課要用的是
This is… we were working with GUI 和圖形介面
with GUIs and and visual interfaces 在上面你按一個鈕,可能會做某件事
where you know you press a button, the button does something 至此我終於開始上軌道
and then I finally started figuring it out 這才是我習慣的
like this is what I’m used to 畢竟我以前是用 HTML 寫網頁
as someone who works with websites in HTML 我習慣看到成品會長什麼樣子
I’m used to having like figuring out how things are gonna look 總結來說,我在大學的一開始表現的不是很好
and so you know my experience in university was started out pretty low 但在這第二堂課,開始有了轉機
and started picking up in this the second course 但是呢,我的第三門課
But, my third course 是這門
this is the classes I take 我們每年會修三門課
there are three courses in one year 分不同學期上
in quarters 第三門課基本上在講理論
The third course primarily dealt with theory 沒有任何圖形化的東西
so there was nothing visual 沒有什麼可以給我看
there was nothing for me to see 也沒有說,按這個鈕
or this idea if you’re pressing a button 可能讓另一個鈕作用
and causing that button to do something 課堂上主要看的,是這些語言之後的邏輯
We did a lot of things with what’s going on underneath 例如,排序法
working with sorting methods 還有我那學期最重的一篇報告討論的
and like one of my biggest papers that quarter 是逆向工程排序法
was reverse engineering sorting methods 寫它們怎麼運作
and writing like how they work 和其他排序法相比
in the the speed that they take compared to the others 運算速度為何
the other sorting methods 這是我個人不感興趣的一塊
and this is something that I am personally not interested in 我對理論不是很在行
and I’m not good at the theory 這門課我上的很辛苦
and I really struggled in this class 其中一個作業
One of the projects 另一個,不是排序法的
another project, not the sorting project 特別有訂定評分指標
had a rubric for it said 基本上條列出作業的各個部份,值多少分數
if you finish this part of the project it’s worth this much 完成這部分,就得多少分
if you finished this part of the project is worth this much 想當然爾,我已經跟得那麼辛苦
and of course as a struggling student 當然選擇把時間花在分數占比最多的項目上
I decided to spend all of my time on the things that were worth the most 但當我交出作業,收到成績時
So when I turned my project in and I received my grade 教授更改了評分標準
the professor has switched the rubric 改變了個項目的配分
He had changed where how things are worth 我發現我本來應該可以得到更高的分數
and I realized I could have had a higher grade 所以,就像所有學生都會有的反應
so I did what any students would do 我跑去找教授
so I went to the professor and I asked him to 並請他用一開始公佈的標準來打成績
use the rubric that he had given at the outset 這是個很合理的要求
So this is a very reasonable request 問題出在這位教授身上
but the problem was at the professor 我寄了封信請他修改我的成績
I sent an email asking him to change my grade 他回信說他會用一開始的標準
and he responded saying he would use that rubric 但後來呢,這位教授
but then the professor has spent 寫了落落長的一大篇文章,講我有多偷懶
he wrote me an essay to tell me how lazy I was 他說很明顯地,我根本連試都沒試
He told me how it was obvious that I wasn’t trying 他還說
that I was you know 我不適合這門課
wasn’t right for this class 說我根本不適合計算機科學,因為我根本沒在念書
that I wasn’t right for computer science because I was obviously not studying 根本沒有努力
and I was not applying myself 就這樣一行接著一行
and just on and on 說我是個多糟糕的學生
talking about what a terrible student I was 對我來說
and for me 我在理論上已經唸的很辛苦
I was someone who struggled with a theory 還去找家教
and I was going doing tutoring 尋求幫助,努力想搞懂
and I was seeking help and trying to wrap my brain around this 但有位教授說他不相信我
and there’s this professor who told me that he did not believe in me 還說我不適合唸這個科系
and I was not cut out for computer science 這真的…
and it just 我實在無法承受
I just couldn’t handle it 有一個權威性的人物告訴我
to have an authority figure just tell me that 這一切
that it wasn’t 都不適合我
this wasn’t for me 我當時想,好吧,我也同意
and I was like okay I guess I agree 計算機科學、程式語言,大概不是我擅長的項目
computer science, programming, I guess I’m bad at it 也不是我未來會做的事
and it’s not something I will do 所以,我就 180 度大轉彎
So I did a complete 180 跑去唸藝術
and I went to an art 得到藝術學位
I got an art degree instead 跟程式語言完全不一樣
which is completely different than programming 當時想,我再也不要碰電腦
I didn’t want to do anything with computer 因為這位教授說的話,我很受傷
I was so hurt from this professor 他不相信我
just telling me he didn’t believe in me 讓我決定那我當藝術家好了
that I just decided I was a become an artist 或是平面設計師
or a graphic designer 我想做包裝設計
and I wanted to do package design and design wine labels
設計酒標 我受夠電腦了
and I was done absolutely done with working on computers 這一切發生在大概十五年前
Now as it happens, this is, you know, 15 or so years ago 我最終順利從大學畢業
I ended up graduating University 又不小心回到電腦這個領域
and I kind of fell back into computers 找到一份前端開發的工作
as I got a job doing front-end development 任職於學校附近的新創公司
for a local startup just down the street from my university 基本上,這間公司就是典型的加州故事
It’s a very classic story in California 辦公室就在車庫裡
It was literally in a garage 大家依著折疊桌工作
and we just all work together on folding tables to build a startup 我為這家新創做了所有前端的 HTML 和 CSS 設計
and I did all the front-end HTML and CSS and design for this company 有趣的是,前端開發通常會用到 JavaScript
and the funny thing is that front-end development usually includes JavaScript 不是 Java
which is not Java 但過去的經驗讓我非常害怕 Java
But I was so scared of Java from that experience 光是看到在 JavaScript 裡也有花括號
The mere fact that there were curly braces in JavaScript 就讓我打死不用
meant that at this job I refused to do JavaScript 所以我請團隊中另一位成員
so I had another person in the my team 幫我負責這件事
that would take care of it for me 所以我沒在寫程式
But I wasn’t programming 也不想成為程式設計師
and I had no intention to becoming a programmer 更覺得自己是很差的程式設計師
and I thought I was a bad programmer 我那時想
I thought that 計算機科學、程式語言
the computer science and programming was not 跟我的學習歷程不符
something that fits of the way I learned 也不是我現在走的路
or the different path that I was on 但後來,幸運的是
Then thankfully Python 出現了
came along Python 因為我在加州,有很多創業家
Because I was in California where there’s lots of entrepreneurs 成立自己的新創企業
and people who were building their own startups 我也開始想成立自己的公司
I got the urge to build my own startup as well 因為我以為我討厭程式設計
and because I thought I hated programming 也覺得自己在寫程式上很糟糕
and I thought I was a terrible programmer 我就決定
I did the thing where I said 我要當作
oh I will become 出主意的那個人
I will be the person with the ideas 我要花錢聘請工程師,或是跟程式設計師合作
and I’ll hire someone or I’ll partner with someone who’s the programmer 把我的構想寫出來
to build those ideas for me 非常矽谷的行為
very Silicon Valley 所以我就寫了這篇文章
So I wrote this blog post 簡介我的構想
saying that this idea of something I wanted to build 並說明我想找人合作,一起實現
and wanted to find someone to work with
me on it 所以呢
So the thing is who knows 我花了很多時間精力尋找共同創辦人
I went through this whole process of finding a co-founder 但和他合作起來並不是很順利
and working with this co-founder and things didn’t work out 最後變的滿慘烈的
and it kind of turned out really awfully 我有想過在找另一個人搭擋
Yes I thought about trying to find another co-founder 但最後我意識到
and I reached this moment where I realized that 如果我真的想要
if I wanted to build 真的想要把我的構想付諸實現
if I could actually truly wanted to build this idea I had 我必須重新檢視我寫程式的經歷
I would have to look at my experiences programming 好好評估是不是想再試一次
and I’d have to reevaluate whether I wanted to try again 幸好,已經有 Python
And thankfully, Python existed 跟 Java 完全不一樣
It wasn’t Java 然後
and Django 也出現了
Django existed Django 非常適合我
So Django was perfect for me 我想架設某些東西
as someone who wanted to build something 想用這些框架
and wanted to use these frameworks 而且希望這個框架
and wanted to use something that did a lot of things 能在背景幫我做很多事
in the background for me 它直接幫我解決管理者頁面
It took care of building the admin site 也幫我搞定
it took care of 設定好 query assets
you know, setting up query assets for me 讓我可以用資料庫
and allowing me to work with a database 讓我的構想一一成形
and abstracting all these ideas away 我是這麼害怕寫程式的一個人
so as someone who is terrified of programming 有了 Django
Django allowed me to build this idea 我腦海中對於新創的構想
this thing I had in mind as a start-up 就能在不真正做程式設計的前提下實踐
without being a true programmer at that time 所以我就用 Django 架了最初的這個網站
So I built this initial website using Django 也開始跟大家分享架網站的經過
And I started sharing the process of building this website 我的新創事業
and this is where my, that startup WeddingLovely 算是開始起步
WeddingLovely, kind of started 架了網站後
because as I built this first website 我發現,噢,我還得架好…
and then I thought to myself, oh, I need to build 我得搞定付款
I need to figure out how to do payment 所以我就學會了跟 PayPal 跟 Stripe 合作
so I went out and I learned how to work with PayPal and Stripe 越學越多
and I learned more 在程式語言上也是如此
I learned more about programming 開始邊做邊學
I started learning by doing 這其實碰巧是
which incidentally is actually the 我母校的校訓
motto of my university 就是做中學,而我正在這麼做
is learned by doing and here I am 邊架設網頁程式,邊自學程式語言
teaching myself programming as I was building this Web App WeddingLovely 最終成長到很大的規模
WeddingLovely grew to be pretty large 去年二月,我決定關閉這個網站
I decided, I shut it down last December 但建立這個網頁程式的過程
but through the process of building this Web App 教會了我 Python 語言
taught me Python programming 我也在過程中意識到
and I realized during this process is that 計算機科學的教育,至少在加州理工大學
you know, education for computer science at least at Cal Poly 基本上都假設,來唸的學生
was kind of assuming that the person who’s coming in 有一定的思考模式
has a certain way of thinking 也都對未來想做的事有一定的預期
and a certain ideas of what they want to do 那我呢,則對於
and I had a completely different idea 想拿 Python 做哪些事情有非常不一樣的想法
of what I wanted to do with Python programming 而大學教育於法滿足這樣的模式
and university education didn’t fit this mold 所以,就是在
So this is that 建立 WeddingLovely 的時候,我開始思考
building WeddingLovely that’s, I started thinking about how I could change 如何改變教育,或是我希望能有哪些資源
education or I started thinking about what resources I wish existed 在我自學 Python 和 Django 時提供更多幫助
when I was teaching myself Python and Django 這也是為什麼
and that’s what started 我寫了 Hello Web App 這本書
that’s why I wrote Hello Web App 我運用之前的經驗
you know, I took that process and I thought 決定寫這本書
okay, I’m gonna build this book 不預設讀者有任何程式語言相關經驗
that doesn’t assume any programming experience that 並以習慣視覺思考的人為目標
it’s aimed at people who think visually 想要在架設 Web App 時看到它成形
and they want to see the Web App as it’s being built 他們或許熟悉 HTML、CSS,也知道網頁怎麼架設
and maybe they know HTML and CSS, they know how websites work 或許他們不清楚什麼是點閱率、什麼是url 常數
maybe they don’t know what views and url constants is 這些東西是什麼
and all those things are, I’m just gonna 我也會把這些都拿掉
I’m also going to abstract that away 聚焦在 Django 上
and just lean on on Django Hello Web App 這本書的核心精神是,任何人都可以閱讀
and the idea is that someone can pick up Hello Web App 學到夠多的 Django,讓他可以架設出東西
learn just enough of Django to build something 也介紹了剛剛好的 Python
It introduces them just enough to Python 讓讀者能自在的學習
that they feel comfortable learning 並選擇對 Python 再做後續的研究
and moving forward with Python in that way 現在,我也想再回去找那位教授
and now I also want to go back to that professor 帶著我的書
and just take my book 在他面前揮舞
and wave in his face 他的話
because his words his 對我的不信任
not believing in me 或至少沒告訴我
or at least not even telling me that 在這個產業還可以做其他事情
there is different things to do in the industry 我強烈覺得,他身為教授
yes, as the professor, I feel very strongly 應該要
and then it’s up to him to 介紹其他路徑給我
to introduce me to other paths 告訴我,好,你可以去學這些
to tell me that ok, this is what you could learn 我們這麼做是為了什麼
this is why we’re doing this 但他沒有,只叫我離開
And he didn’t. He just told me to leave 說這個系不適合我
that program, it wasn’t for me 我當不成程式設計師
and that I was not a programmer 這幾乎讓我不可能擁有今天的這番事業
and it almost derailed the entire career that I have today 這就是我一直在談的問題
So this is the problem I’ve been thinking about 就是,把寫程式
is viewing programming 看作一條直線
as a straight line of progression 不管是教學影片
when you see tutorials 就以 Python 為例
saying for Python in general 通常不會多做說明
they don’t have any other context in that 就只會說,這是 Python 初級、中級或高級課程
they say Python for tutorial beginner, intermediate, advanced 去參加會議也是一樣
When you go to conferences and the same thing 整場會議,通常會這樣區分
throughout the conference’s we often say 這個場次是給初學者
this session is beginner 這場次的難度是高級
this session is advanced 這場是中級
this session is intermediate 但我們都知道
But we all know that 在程式設計裡,可以做的事情很多
there are so many different things that you can do within programming 可以用 Python
you can do in Python 成為…
you become 也可以用python 來開發、維運
you can work with DevOps 也可以用來開發前端
You can work with front-ends 也可以架設網頁程式
you can work, building Web Apps 用來做演算
you can use it to do algorithms 程式語言可以用在
you can use it for all these different 產業中許許多多不同的事情上
these different things in this industry 但這種單一的劃分方式,將大家粗分為初級、中級和高級
and that these straight categories of just beginner, intermediate, advanced 或是將 Python 或程式設計視為單一的整體
and Python as a whole and programming as a whole 其實對整個產業來說沒什麼好處
is not doing our industry any good 這種分法隨處可見
I see this everywhere 當我去參加會議時
This is like when I go to conferences 我參加很多 Python 的研討會
again I go to a lot of Python conferences 通常,報名表單會問我
and often the conference registration will ask me 或許會把這個資訊法在名牌上
to put on my badge maybe 我的 Python 程度為何
what is my Python experience 這個好像是 Python 愛爾蘭會議
and this is I think for Python Ireland 我受邀擔任專題講者
and I was doing the keynote there 身為主講人之一,我覺得有點難為情
and I was feeling very bashful as a keynoter 因為我感覺,如果要在 Python 會議上當講者
because I feel like if you’re gonna keynote at a Python conference 應該要選「專家」這欄才對
they want you to say experts 但我使用的是 Django
but for me as someone who works with Django 我也不寫演算法
I don’t write algorithms 我架設網頁應用程式
I build Web Apps 我做東西給別人用
I build things that people use 但是
but I don’t 有很多 Python 的東西我並不熟
there’s a lot of things in Python that I’m not an expert in 我覺得有點不好意思
and I felt kind of embarrassing for me 說我自己在 Python 程式設計上只是初級或中級
to say I’m in, say beginner, intermediate Python programmer 而且我還要做專題演講
when I’m there to give a keynote 那是在 Python 愛爾蘭大會
That was Python Ireland 同樣的事情也在 Euro Python 上演
The same thing was happening at Euro Python 他們稱之為 Python 能力
where they said Python power 可以放在名牌上,讓大家都看得到
and you can put that in your badge for everyone to see 我不覺得我可以放五顆星
and I did not feel comfortable saying five stars 所以我幫自己打了三顆星
so I put myself as three 帶著名牌到處晃,我覺得有點害羞
and this walks around feeling a little bashful about it 所以,大學學位
So university degrees 這些名牌、需達成的目標
these badges, these buckets 將程式設計視為一條直線
are looking at programming as a straight line 新手程式設計師知道一些東西
where the beginner programmer knows some things 而且是特定的一套知識
and those a set of things 中級程式設計師了解另一套
the intermediate programmer knows a set of things 專家級的也必須了解另一套東西
the advanced programmer knows a set of
things 然後你會按部就班往下一個身份邁進
and you move along these categories 從初級移到中級,再到高級
run one to another to another 但程式設計其實比較像這樣
But programming is more like this, where you can 可以應用在許多地方
there’s different things you can do within programming 也可以從不同的地方進入程式設計
there’s different places you can enter programming 最後的終點也非常多元
there’s different places you can end up 當然,中間有一條比較常見的路徑
There’s a typical path that kind of runs on the middle 但其實可以做的事情非常多
there’s so many different things you can do within it 大家也可以從不同領域進入到程式設計的世界
People can enter programming from many areas 也可能中途離開,去其他領域
they can depart them in many areas 可能之後會回來,也可能不會
maybe they’ll return, maybe they won’t 所以,身為教育者
So as an educator 我認為在座大多數、每個人都是教育家
and I think a lot of the, everyone here should be educator 大家可能會遇到其他做 Python 的工程師
as you meet other people who are doing Python 或在業界指導其他人
or you’r mentoring other people in the industry 這樣的價值觀讓教育變得很困難
this makes education so much harder 當你想要…
When you try to, you know 當然,預設這種
education is easiest when you do assume that 初級、中級、高級的路徑,在教學上輕鬆許多
beginner-intermediate-advanced path 當你必須…
and it’s harder when you have to 考量大家使用程式設計的不同方式
you know, think about the different ways people can use these things 每個人的背景、想法皆不同
and the different kind of backgrounds and the different ideas 還有在程式設計界
and the different paths you can take within 可以走的不同道路,教學會變得比較困難
within the programming world 我寫書,也做教學
You know, and as someone who writes books and works on tutorials 我試圖接受
you know, trying to accept that 我不知道來我課堂的人
I don’t know where the person who comes to my tutorial 是從哪裡來
where they’re from 他們受過什麼樣的教育
what their education is 有什麼背景
what their background is 或許有人有計算機科學學位
maybe there could, they have a computer science degree 也瞭解高階的概念和理論
and they understand, you know, some of these advanced concepts and theory 也可能沒有
but maybe they don’t 或者,可能是跟我一樣
Maybe they’re like me 是從其他領域跨足到 Python
who came into Python programming from a different area 走不同路徑
and a different path 所以出現這個想法
So there’s this idea 所謂「真正的」程式設計師只是個謬論
this… no true programmer as a fallacy 雖然常常在程式設計圈被提起
that’s used a lot, that’s talked about a lot in programming 就連在這邊也有提到
and it’s kind of reference in 不曉得各位知不知道這個,這是 XKCD,一部網路漫畫
I don’t know if you know this, XKCD 我就不花時間全部唸一遍
I’m not gonna read the whole thing but 但第一句話是,真正的程式設計師都用 Emacs
the top line is, you know, real programmers use Emacs 真正的程式設計師都用 vim
real programmers use vim 真正的程式設計師都用這個
real programmers use this 你可能也常常聽到
you know, you might hear this a lot 在程設設計圈
in the programming world, you know 有人會說真的程式設計師都用 Python
real programmers do Python 或是,真正的程式設計師早就不用 Python 了
real programmers don’t do Python anymore 改用 JavaScript
they do JavaScript or, you know 或 React 等等
React or whatnot 這其實源自於一個謬誤
This is referencing a fallacy 叫做「沒有真正的蘇格蘭人」
it’s called the “No True Scotsman” fallacy 基本上就是在說,你若想要融入某個社群
saying, you know, you don’t fit as a member in this community 就必須滿足所有條件
unless you fit all the requirements 所以在我們的圈子裡,就有「沒有真正的程式設計師」這個謬誤
and we can reference that as a “No True Programmer” fallacy 可能會說,真正的程式設計師才不會這樣做
you know, when you say no true programmer does this 真正的程式設計師不會那樣做
or no true programmer does that 或是,真正的程式設計師都用 Zen
you know, true programmer use Zen 如果你不用 Nano 你就不是真正的程式設計師等等
you know, you’re not a real
programmer unless you use Nano or something like that 這樣的思考模式
and these kind of, this way of thinking 就像是在說,世界上只有兩種人
is like saying there is only two kinds of people in the world 會游泳的,和不會的
those who could swim and those who can’t 這太二分法了
It’s too binary 假如
So what happens 我們開始接受
when we start embracing the different paths 大家進入程式設計的不同道路,會怎麼樣?
that people can come into programming 其實會帶來諸多好處,但其中最大的一個優點,已經研究得證
there’s a lot of benefits but one of the big benefits that’s been studied 就是能增進程式設計的多樣性
is that is diversity within programming 我們來看看軟體工程師的人才需求
If you look at the demand for software developers 我們都知道
we all know this 對軟體工程師的需求
the demand for software developers has been growing 隨著科技發展,逐年增加
year over year over year as tech has been growing 研究顯示
so the study says that 軟體工程師的需求,在 2014 到 2024 年
the demand for software developers is expected to grow by 17% 預計會成長百分之十七
between 2014 and 2024 計算機科學
and when computer science 這個學科剛出現的時候
kind of came onto the scene 以1984 到 1985 年這個學年來看
in the 1984, 1985, like academic years 就是我出生的時候
the year that I was born 大學念計算機科學的學生中,女性佔 37%
women accounted for 37% of all computer science undergraduate degrees or students 時間快轉到 2010 年
And when we move on to modern times, 2010 女性學生在計算機科學系的佔比大幅下降
the amount of women in these computer science programs drastically dropped 在 1984 年的時候,計算機科學產業甫剛成形
so computer sciences industry in 1984 was still a very new industry 但隨著時間過去
but as time has moved on 我們逐漸確立計算機科學的教育長什麼樣子
we have solidified the idea of what a computer science education looks like 以及計算機科學家做什麼事情
and what a computer scientist does 但在過程中
and as we’ve done that 我們也限縮了大家的可能途徑
we have narrowed the path that people can be on 這直接導致計算機科學教育上多元性的不足
and that has led directly to less diversity within computer science education 這也從學校延伸到職場
And this has led from education into working 此領域的工作上
as you know, in the field 此外,計算機科學相關職業的女性從業人數
Furthermore, the percentage of women working in computer science related professions 自 1990 年代開始逐漸下滑
has steadily declined since the 1990s 在過去十五年間,佔比從 35% 下跌到 25%
dropping from 35% to 25% in the last 15 years 但是
But 當我們回頭去看教育
when we look at their education 看看這些出路的起點
we look at the beginning start of these paths 我們就可以開始
and we start 把這種狹隘
we take that narrowness 我們一手建立起的侷限
that we have started establishing 打開來
we open it up 看看這個例子
look at things like this 加州大學柏克萊分校
The University of California at Berkeley experienced 在計算機科學概論上,經歷了一番革新
a revolution in introductory computer science classes 把「符號程式設計概論」這門課
They changed the course from the Introduction to Symbolic Programming 就只是名字而已
just the name 改成「電腦學的美麗與樂趣」
They renamed it to The Beauty and the Joy of Computing 這麼一改之後
And when they did that 課堂上的女學生人數…我是不會承認的
women in the class, I would never admit 所以你看這堂課,「電腦學的美麗與樂趣」
So if you look at, The Beauty and the Joy… 不好意思,是「符號程式設計概論」這堂課
Excuse me, if you look at the Introduction to Symbolic Computing 看到這個課名
you look at this title 感覺範圍很小
The title, it feels very narrow 聽起來就像是,關於符號程式設計這個領域,很狹窄的一條路
It feels like something that’s putting you on a narrow path of symbolic computing 只是產業中的一小部分
and that means a certain small thing within the industry 感覺起來非常侷限
It feels like a very narrow path 但是,把這堂概論性的計算機科學課程
But when you have this introductory computer science class 重新命名,讓課名聽起來範疇較廣
and you rename it into something that is more broad 改成「電腦學的美麗與樂趣」
something that says The Beauty and the Joy of Computing 這就會讓人
that gives you this feeling of the 想到用電腦可以做各式各樣的事情
all the different things you can do with computers 為一切能用電腦達成的美好事物感到興奮
and kind of be excited about all the beautiful things that we can do 接著,他們開始看到女性佔比上升
Then, they first see increase 有趣的是,這份研究
and it’s just when this 只有提到女性
study just preferences women 但你應該可以感覺到,新的課名可以讓不同背景
but you can feel that this allows people from different backgrounds 有不同思考方式
and different thought processes and 不同性別的學生
different genders 對於上這堂課感到更自在
to feel more comfortable joining a class like this 因為他們可以看到各種不同的可能
because they can see all the different possibilities 不同的終點
and all the different places they can go 回頭檢視我自己的大學教育
So when I look at my own education in the university 我的教授基本上就是採用二分法,只有你做得到,或你做不到兩條路
my professor was very much in the you-can-do-it or you-can’t-do-it path 他會說
that he was, you know 任何程式設計師都要懂這個理論
saying that anyone who’s a programmer needs to know this theory 不然就會失敗
otherwise they’re just gonna fail and 但我
I, you know 我用 Python 和程式設計的方式不太一樣
I use Python and I use programming in a different way 我覺得
and I feel, again 我的事業發展得還算成功
I feel like my career has been very successful 這也是為什麼
and that’s one of the reasons why I’m so excited 我希望能
and interested in getting 在教育階段,打開這些不同的可能
open up these paths for people in education 我講了很多關於教育
I talked a lot about education 還有我這一路走來的起始
and the start of this journey 接著,我想花點時間談談終點長什麼樣子
and then I want to talk a little bit about what happens kind of at the ends 因為
because Python 最棒的一點是
the wonderful thing about Python is that 不是每個人都會變成後端工程師
not everyone becomes a back-end programmer 也不是每個人
not everyone, say 都想加入 Facebook 或 Google
wants to join Facebook or Google 等科技公司,擔任程式設計師
or some of these tech companies as a programmer Python 的用途非常廣
Python is used in so many different areas 可以應用在科學領域
Python for science 有諸多應用
There’s so many different ways to use Python in science 身為設計師,我很愛的一點是
and one of the things as a designer I really love is that Python 也用於字體與排版設計,為腳本語言
Python is used in scripting for typography 我們創造字體的程式
So the programs that we use to create the fonts 接受 Python 的腳本
will accept Python scripts 所以其實有很多設計師
So there’s a lot of designers out there 會用 Python 來製作我們使用的字型
that are using Python in order to create the fonts that we use 我覺得這就非常有趣,這些設計師
and I think this is super fascinating because these are the people who 在設計界使用 Python
are using Python for their world 但在教育上
but the education in this…teaching this 並不會把這個當作是學生未來發展的目標
aren’t assuming this is the end point 那回到我的書
And that’s…to go back to my book 這就是我特別想努力的方向
this is one of the things that I have deliberately tried to work on 我不想要預設任何終點
where I try to not assume an end point 我試著假設,有了這些知識後
I try to to assume that there is many different places that you can go 讀者可以應用在很多不同的地方
once you have this knowledge 就像是沒有所謂成為程式設計師正確的途徑
Just like there’s no right way of becoming a programmer 學習程式設計也沒有所謂正確的方法
There’s no right way of learning programming, you know 好幾年前我在會場中遇到的那兩個人
Those two guys at that conference quite a long time ago 當他們說,大家不該再教 Django
When they say that no one should be taught Django 因為會讓人成為糟糕的程式設計師
because it teaches us to be bad programmers 他們就是假定程式設計有正確及錯誤的方式
are just assuming the right way and the wrong way of programming 他們的預設是,任何人學了程式設計
they’re assuming that everyone who jumps in the programming 掌握了某些技能,就會變成糟糕的程式設計師
becomes a bad programmer because they’re using those skills 例如使用 Google
again, let’s say, Google 他們無法想像,有人學了 Django 後
and they’re not envisioning someone using Django 寫了書,成為教育家
to write books, to be an educator 建立網頁程式,變成創業家
to build Web Apps, to be an entrepreneur 所以他們…
So what they, you know 有這麼多學習 Python 的方式
All these different ways of learning Python Python 內也有許多不同的架構
and all the different frameworks are a part of Python 如果你像這兩個人一樣,抱持非黑即白的態度
You could look, if you had this black-and-white thinking like these two guys 你可能會這麼看待程式語言的初學者
you can look at the…you can visualize the pool of beginners 以前有這麼多人
are kind of like, you know, we had a certain set of beginners before 人數比較少
and they’re smaller 隨時間過去,初學者的人數增加
and that pool has gotten grown larger over time 如果抱持二分法
and if you have that black-and-white thinking 就會覺得,有好的程式設計師
you can think to yourself like, oh there’s good programmers 和不好的程式設計師
and there’s programmers that are not 所以現在
and it’s now 差勁的程式設計師變多了,因為整體族群人數增加
there’s more bad programmers because that piece of the pie has increased 但如果擁抱程式設計的多元性
But when you embrace the different paths of programming 認知到 Python 的廣泛用途
and the different things that people can do within Python 就可以接受
you can embrace the fact that 不只是有更多工程師
there’s not just more engineers out there 也有更多科學家
but there’s more scientists 更多文件維護者
more documentarians 也就是負責程式設計專案內容和寫文件的人
people working on the content and documentation for projects 也有更多人為新創企業服務
There’s more people working on startups 或是架設網頁程式
there’s more people who are building Web Apps 設計我們使用的工具
and they’re building the tools that we use 這就是我在 Hello Web App 書中做的事
And this is what I was doing with Hello Web App 所以,與其直接假設
and so instead of just assuming, you know 假設這本書的讀者目的都相同
writing the book and assuming that people are going to be using it for one purpose 我寫這本書
I wrote the book in order 出發點來自假設大家的目標和需求都不同
to assume that they can be using it for many purposes 這也是有些人對我不滿
And this is something that I’ve gotten some measure of anger 或受到批評的地方
and then criticism about 幾年前
A few years ago, I did a 我最後沒有真的這麼做
I didn’t end up doing this 但當時我想說,來做個課程
but I thought about doing a course to teach people 線上課程
like a video course 與其只有出書
instead of just having a book 我直接在線上課程教大家怎麼用我的書
I would teach people online about how to use my book 所以我就做了調查
and so I had this survey 也有不少人回復我的問題
and people responded to my survey 大部分的人都表示贊成或給我鼓勵
and most people had very nice things to say 但是也有人,特別來填寫
But there’re some people who came to my survey 只是為了讓我知道
just to let me know that 我沒有資格這樣高高在上
I am not allowed to act like an authority 因為他…
because he 這個人覺得我不是專家級的程式設計師
that person is visualizing me as not an advanced programmer 我程度還不到五顆星
I don’t have the five stars of programming like that badge had 非頂尖
I’m not an expert programmer 他們覺得
and they have this idea that 教別人 Python 或程式設計
the only way that you can educate someone in Python or with programming 只有專家才有資格
is to be an expert 當然,我覺得我是…
and again, I do not feel like I am a 程度大概是初學者到中級
I feel like I’m a beginner-intermediate person 但是,我已經有出書
and yet I’m writing books 設計課程
and I’m building courses 這個人
and this person decided just to 還更進一步,想再說的決一點
shove the knife in a little bit more 告訴我說,我的書很醜
by telling me that my book was ugly as well so 真的讓我蠻受傷的
hurts my feelings 那我們可以怎麼改善?
So what can we do better? 我覺得 Python 最棒的一點是
I guess one of the best things we have in Python 它廣泛應用在各種領域中
is how widely it’s used in other fields 所以,不是只有後端工程師會用 Python
so Python is not just for back-end developers 設計師、字體設計
It’s used, like I said, for designers and typography 科學家等等都會使用
and science and all these different areas 我們的教育資源不斷增加
Our educational resources have increased 也出現新的框架,像是 Flask 和 Django
and there’s new frameworks like Flask and Django 也有其他的學習方式
and these other ways of learning 當然,你還是可以受大學等級的高等教育
And, you know, you can still go through university level education 畢業後再進到科技業
and coming these tech careers 但我們可以做出什麼改變?
But what can we do better 我們已經知道,二分法的思考模式,對整個產業沒帶來什麼好處
knowing that, you know, this black-and-white thinking is not doing our industry any good 應該要擁抱多元性
and that we do embrace the fact that, the idea of diversity in thinking 回到「真正的程式設計師」這個迷思
So going back to that “one true programmer” myth 請直接摒棄這種想法
Obviously, reject that idea 保持開放態度,或許你不喜歡 Django
you know, try to be open about the fact that maybe you don’t like Django 不覺得 Django 適合你
maybe you don’t think Django worked for you 或是對你在做的事情有幫助
or worked for what you are working on 但它可能對其他人來說很適合
but has worked out for a lot of other people 有了網路後
You know, with the advent…with the internet 學習的方式非常多樣
and there’s so many different ways of learning and how to learn in depth 網路上也有許多資源
and so many resources online 有各式各樣的
you know, there’s so many different like 新手密集班,還有不同架構
boot camps and and frameworks and things to learn 像是 Lambda
boot camps like online resources like Lambda treehouse
treehouse Pluralsight
Pluralsight Udemy 等等平台,都有提供課程
Udemy 所以不一定要有計算機科學學位
So you don’t just have to have any computer science, you know 不一定要念大學才能學到
go to university for computer science 光是用這些線上資源
you can learn programming skills and Python and whatnot 就可以學好程式設計或是 Python 等等
using these online resources 這些線上課程的好處是
and the nice thing is that these online resources 提供給覺得自己不是走一般路線的人
assume like, they give some people who feel like they’re on different paths 非典型程式設計師的人,不同的學習方式
these people who don’t feel like they fit the normal mode of a programmer to learn in different ways 但問題是
The problem is 噢,我不小心跳太快了
well, jumping ahead of myself 所以,這些不同的學習方式提倡多元性
So these alternative ways of learning and promoted diversity 因為接受度較高,讓不同背景的人都能學習
because it accepts more types of people and more types of backgrounds 而且這些資源也廣泛被使用
And these resources are used by everyone 據統計,三個工程師中,有兩個是自學的
two or three developers nowadays are self-taught 但是,我也可以說
which is really awesome but you can argue 每三個當中,就有三個
that three out of three developers here 基本上就是所有人,都是自學的
everywhere, are self-taught 但只有三分之一的人擁有計算機科學學位
but only 1/3 of them actually have a degree in computer science 而且基本上,在座的各位
And you’d be very surprised that there are someone in this audience 應該都有用過線上資源
that hasn’t used an online resource 做進修
to further their knowledge 不管是用 Stack Overflow 或是部落格
whether Stack Overflow or a blog 或線上教學影片、紀錄片
or a tutorial or documentation 所以
So 其實還是有些問題
well, same before is that there’s some problems with this though is that 這種單一、線性的教育
this idea of a single line of education 程式設計的單一途徑
the single line of programming 延伸的職場,業主多半會預期要有相關學位
and that line usually is assumed by jobs to start by getting a degree 而不單是靠網路資源自學程式設計
not by teaching yourself for you to programming of these skills from online resources 有個研究就是在探討這個主題
So there’s a study that kind of went into this 題目是:程式語言密集班學生面對的障礙
It’s titled The Barriers Faced by Coding Bootcamp Students 總結來說,它的重點是
And in a nutshell, it talks about the fact that 儘管的確有些學生
while there are graduates who successfully found a job 在參加過線上程式語言密集班後,成功找到工作
after going through one of these online coding bootcamps 一班來講,科技業公司還是會預設
in general, tech companies are assuming a 他們想要
they want to have 看到應徵者具備大學相關學歷
they want to see a tech degree from a university 所以儘管這些學生完成了密集班的課程
so even though these people who are in these could go through bootcamps 在找工作上還是不太順利
have a harder time to find a job 這些上密集課程的同學
These students who go through bootcamps 用了不一樣的學習方式
where these alter ways of learning 卻須面對怎樣才算是真正的程式設計師的這種刻板印象
are faced with stereotypes of what a real programmer is 這又回到之前跟大家講過的謬見
This goes back to that one true programmer 認為真正的程式設計師都有相關學位
that real programmers have degrees 而這些密集班的證書
and the certificates that they gained from these bootcamps 價值比不上大學學位
are not perceived as high of value as a university degree 有非常多科技公司更是直接表明
There’s tons of tech jobs out there that’s that state 只面試有大學學歷的應徵者
the only interview candidates who have degrees 還有,專案或是自由業的工作
And that contracting or freelance work 也比不上全職工作來得有價值
is not seen as valuable as a full-time job 如果各位的工作是程式設計師,你應該也有這種經驗
Now if you worked as a programmer I think you’ll realize that 像是是我曾經指導過的人,踏入第一份工作後
you know, people I have mentored jump into their first job 發現大學所學全部派不上用場
and they find out that all the education just goes out the window 必須花大把時間上 Stack Overflow
and they spend all their time on Stack Overflow 或重新學新的東西
or learning new things anyways 這讓我很難過
This makes me sad because, you know 我們都知道常常在工作上,需要邊做邊學
we all know that learning a job is very crucial 也有很多在大學學的嘟星
and there are lot of things you learn in university 在實際職場上用不到
aren’t used when you’re in a real job 學會在工作崗位上自學,是很重要的
and a lot of it is just like learning how to teach yourself while on that job 但也因此
but because of these 程式語言密集班的學生面對重重阻礙
these barriers are faced by coding bootcamp students 根本找不到工作
they aren’t able to find a job at all 所以在這份研究中也有提到
now there’s a few instances in this study where 有些人會成功上完密集課程,又些人中途退出
these folks went through the program or they quit the program 也有人在完成後,無法找到工作而放棄
or quit afterwards because they weren’t able to find something for them 也有人表示
and there’s quotes from people who said that 就算之後找到工作,工作了半年
even after six months of being at a real job 成功找到工作
if they find a job and they’re at that job 就算做了半年,仍然不覺得自己是真正的程式設計師
even after six months they didn’t feel like a real programmer 就只是因為他們沒有正式學歷
simply because they didn’t have a degree 我們必須擁抱新的想法
And again, embracing this idea of 不是只有所謂真正的程式設計師
there’s not just, you know, real programmers 不是只有後端工程師
so it’s not just back-end programmer 或是在 Google 工作的工程師
it’s not just programmers who work at Google 真正的程式設計師
you know, that someone who can be a real programmer 也可以是前端的工程師
can also be someone who works, you know, in the front-end 也可以用 Python 或是 Django
and they happen to use Python for like, you know, and Django 來做前端開發
for their front-end development 或是他們是負責寫文件或做其他工作
or maybe they’re working on documentation or whatnot 我們需要的不只是後端工程師
We need more than just these back-end engineers 在產業界需要所有人
we need all these people in tech 所以當他們要找工作時
and if they still need to find jobs 雇主還是預設
and it’s too bad that mostly jobs assume that 真正的程式設計師都要有學位,就太糟了
the only real way of becoming a programmer is to have a degree 此外,我們也該接受平庸的程式設計師
The other thing we can do is to embrace the mediocre programmer 這句話是我的朋友 Jacob Kaplan-Moss 說的
and this was coined by my friend Jacob Kaplan-Moss 他在 2015 年的美國 PyCon 上擔任專題講者
who did the keynote at PyCon U.S. in 2015 不知道大家認不認識他
and I don’t know if you know Jacob 他是 Django 的其中一位原創者
he’s one of the founders, he’s one of the creators of Django 他自稱
and he says that he is, you know 是一位平庸的程式設計師
he is a mediocre programmer 我想他跟我一樣
I think he would agree with me is 去 Euro Python 或其他這類會議時
someone coming into Euro Python and these other conferences 如果被問及
and they ask you what is your 你的 Python 能力是多少
what is your Python power 他應該也不會給自己五顆星
he wouldn’t give himself five stars 我現在想起來了,我記得連 Python 的設計者 Guido,也只給自己四顆星
I think that I actually, now I remember, I think Guido gave himself four out of five 還滿有趣的
which is kind of funny Jacob 說
Jacob says 「天才程式設計師」這種迷思其實很危險
the myth of the “genius programmer” is extremely dangerous 一方面來說,這把進入門檻設得非常高
On the one hand, it sets the entry threshold excessively high 嚇跑很多可能成為程式設計師的人
scaring a lot of would-be programmers away 另一方面來講,這也會一直糾纏著已經在做程式設計的人
On the other hand, it also haunts those that are already programmers 因為這意味著,如果你在程式設計上表現得沒有超級傑出
because it means if you don’t ‘rock’ at
programming 那基本上你就爛透了
then basically you suck Jacob 說的
So Jacob here 我很高興他說了這些話
you know, I appreciate him talking about this 因為這再次連結到這種對程式設計單一的想像
because this is again, ties into this one true path of programming 一旦偏離了這狹隘的道路
and if you feel like you have diverged from the path at any moment 就會覺得不是一位真正的程式設計師
you might not feel like you are a real programmer 或者可能會覺得,其他在不同道路上的人,才是真的程式設計師
or you might feel like other people who are not in the same path were real programmers 所以,我們應該接受,每個程式設計師可能有不同技能
so we embrace the idea that not all programmers have the same skills 可能不是每個人都在同一條道路上
or maybe not everyone’s on the same path 或是我們可能沒有一個人能成為明星級的程式設計師
or maybe we’ll never, none of us will be rockstar programmers 整個產業
our industry 整體而言,會有所改善
as a whole will be better 另外,我們也可以再改進的是
Another thing we can improve 是加入更多分類
is to add more specificity 不管在會議、活動、課程、或學校裡
at conferences, events, courses, education 都可以增加素材的複雜度
when it comes to the complexity of material 我之前已經有提過,最常見的分類就是初級、中級、高級
I’ve already mentioned this, about beginner, intermediate, and advanced 除了講這些類別外
so what if instead of just saying those three categories 畢竟這承襲了程式設計單一路徑的預設
which kind of assumes that one single path of programming 我們可以再加上一個類別,顯示不同的道路
What if we added an extra idea of what the different paths are 例如,可以是初級加上開發
so maybe it’s beginner plus deployment 這可能是論壇上的一堂課
if you’re talking about a course at a conference 也可能是初級加上網頁程式
maybe it’s beginner Web Apps 或是中級加數據科學
maybe it’s intermediate data science 我再次使用那些會議為例
So when you’re, again, I’m gonna use those conferences as an example 在談到會議中不同場次時
when you’re talking about sessions at a conference 大部分的會議都是用初、中、高級來劃分
you know, most conferences in the world do beginner, intermediate, and advance 但如果直接標示出確切要討論的素材
but if you indicate this actual subject material there 覺得在網頁開發上中級程度
people who feel intermediate as web developer 但在演算法上為初級程度的人
they may be beginner and algorithms 也可以找到合適的場次參加
can find the right places for them 因為傳統的…
because they don’t fit, you know 沒有人可以完全符合初級、中級、高級這個分類
no one fits into just beginner, intermediate, and advanced 下一個我認為最重要的事情,就是建立導師制
The next thing to do and the biggest thing
is probably mentorship 產業中的初學者或是沒那麼順利的人
because the more beginners and people who are poor in this industry 若能跟越多人對話
have other people to talk to 就越能了解到這種
and knowing that the stereotype of 「真正的程式設計師」的刻板印象早該淘汰
the one true programmer doesn’t fit anyone 如果你能指導初學者
If you can mentor someone who’s beginner 和他們分享你的經驗及過去走過的路
and let them know your experiences and your path 如何解決困難
and how you got around things 我想,沒有人
because no one, I think, is 的道路完全相同
you know, follows it exactly 但這能幫助其他人進入這個產業
they’ll help other people get into this industry 然後我們整體的多元性就能提升
and as a whole, our diversity will increase 我也極力鼓吹,認為我們需要
And I feel very passionate that we need more 更多聚焦在小眾領域的課程和指引
tutorials and guides aimed at niches 這也是我的書 Hello Web App 在做的事
and that’s again where I am with Hello Web App 我的書就專門聚焦在如何用 Django 架設網頁程式
my book is specifically how to build Web Apps with Django 這算是比較小的領域
and that’s very much a niche 我們當然需要給工程師的程式設計指南
What we need are guides like programming for engineers 但也應該要有給藝術家
but also programming for artists 作家
programming for writers 創業家的教學內容
programming for people who want to build a startup 包含更多的部落格文章
so more blog posts 更多 YouTube 影片
more videos on YouTube 更多紙本內容
more print guides 教育上也是,什麼都多一點
more everything in education 才能
to 考慮到每條不同的途徑
take these different paths 大家可能在的不同起點
these different beginning points where people might be on 然後為他們設計出更多有幫助的教材
and build more educative materials for them 整體而言,我相信會有更多人
And as a whole, I think more people are going to be 更想要也更期待加入 Python 的世界
feel excited and interested in joining Python 並把它用在他們自己的領域上
and using it in the ways that they end up doing 所以,就算你覺得自己的程度只有初學者
In general, even if you feel like a beginner 大家常常都說我不過只有初級的程度
and again, people obviously accuse me of being a beginner and yet 但我寫了書,還站在這裡
I’ve written a book and I’m up here 就算你覺得自己是初級的程式設計師,你還是可以教別人
Even if you feel like a beginner, you can teach 可以站上講台
you can be on stage you can 可以撰寫課程
you can write these courses 或是寫部落格文章
you can write these blog posts 所以不需要…
So don’t let yourself 如果你不覺得自己是超級厲害的程式設計師
if you don’t feel like you’re an awesome, amazing programmer 或就算你覺得你也沒什麼好分享的
or maybe you think that you have nothing to say 不要
don’t 不要就此覺得自己無法教別人
don’t think you can’t teach as well 一定有覺得自己非專家的人
and I argue that someone who doesn’t feel like they’re super advanced 需要聽到你的聲音
your voice is more needed 因為能讓更多人知道
because it helps more people to know 你遇過什麼困難
well, like, the struggles you’re going through 通常越來越厲害之後,會忘記一開始遇到的阻礙
that might be forgotten as you become more of an advance programmer 所以,總結來說
So in conclusion Python 社群
the Python community Python 社群的力量來自多元性
the power of Python community lies within the diversity 來自產業界、生態系統中
of the different ideas and the different mindsets of people 不同的想法和思考方式
that join our industry in this ecosystem 意識到可以用 Python
knowing that we can use Python 程式設計、電腦
and we can use programming and computers 讓大家有能力學習科技
empower people to learn technology 並用更快的方式學習
and learn something faster 嘗試新事物,享受他們喜愛的事情
and allow them to try different things and enjoy things they love 這是身為程式設計師,最棒的一件事
This is the one of the best things about being a programmer 我們可以把這些技能,透過電腦
that we can use all these skills and work on the computers 應用在各式各樣的事情和地方上
and use it in so many different ways in different places in this world 現在剛開始學習程式設計的人,是我們現在的學生
The beginners that we teach, the people who are joining programming just now 將成為未來的領導者
are gonna be the leaders of the future 他們可能會在…
whether they’re going to be in, you know 新創企業或是科技巨擘工作
working in startups or working at the big tech companies 或是創立自己的網頁程式
or maybe they’re building the Web Apps 或其他我們都會使用的開源計畫
and the open-source projects and the things that we use today 我們必須塑造我們的未來
We’re going to be our future 未來的領導者
the future leaders 如果我們能夠增加多樣性
and the more diversity 擁抱更多想法
and the more thought we can put into 接受在不同領域、做不同事情的人
where people are and what they’re doing 也接受有各種不同的思考方式
and accept that there’s more, different levels of thinking 整個科技業生態系將會更健康
the healthiness of this ecosystem will improve 我希望這個演講
So I hope this presentation has 有提出一些問題
helped raise some questions for you 也讓各位開始思考
and start a thought process 我也希望這個討論能持續下去
and I hope to keep this discussion going 謝謝各位邀請我來演講
Thank you so much for having me 感謝 Tracy 帶來如此精彩的演講
Thanks for Tracy’s excellent presentation 我也沒有計算機科學學位
I don’t have a computer science degree 我主修科學
I majored in science 但現在我在用 Django 做資料視覺化
but now I’m using Django for data visualization systems 沒錯
Yes, and 我們的主席也是
so is our chairman 也沒有相關學位
he doesn’t have a computer science degree, too 我相信在座應該有很多人
I believe there are many people down there 都是 Django 工程師,應該也都沒有計算機學位
they’re Django developers so they don’t have a computer science degree 我想應該有人有問題想請教您
I believe there are people, they may have questions you want to ask Tracy 想問問題的人,請舉手
so people who want to ask questions, please raise your hands 我也有準備
I also have… 一些書
I also have books up here 這些書想送給大家
I have some books… 所以會後歡迎過來拿一本
so feel free to come up here afterwards and grab one 大家的提問已經投影到螢幕上了
I believe the questions have already projected to the… 噢,我的天
Oh my goodness 第一個問題:你對於科技大公司提出的演算法挑戰有什麼看法?
So the first one: How do you think about
algorithm questions in those iconic tech companies? 我覺得我不太適合回答這個問題
I feel like I’m a bad person to answer this one because that’s 因為這不是我主要在做的事,也自己也從來沒有做過那些問題
that is not the path I’m on and I’ve never done one of those questions myself 我其實有特別避開在科技公司工作
I specifically have avoided working at tech companies knowing that 因為我知道我有興趣的事情不是在那條路上
the things that I am interested in don’t lead me down that path 我其實超害怕
and I am terrified 那些演算法問題
absolutely terrified of those algorithms questions 因為我知道我永遠不可能解開它們
because I know that I will never ever be able to respond to answer them 其實滿可惜的
which is too bad 因為我覺得對那些大公司來說,我應該是很有用的資產
because I think that I could be an asset to a lot of these tech companies 我在 Python 上學的很多寶貴技能
in the skills that I’ve learned at Python 但我永遠不可能通過那些演算法的測試
but I would never ever make it past these initial algorithm questions 在白板上手寫程式碼等等
the whiteboarding and whatnot 所以
So 總結來說,除了我自己的經驗外,我不太能回答這個問題
in a nutshell, I can’t speak broadly about it other than my own specific experience 只能說
saying that, you know 我自認在這個產業發展得還不錯
I feel like I’ve achieved lot in this industry 但我一定不可能在那些大公司工作
but I would never be able to work at those companies 而且至此我也接受了這點
and at this point, I just accept that 這也是為什麼我一直以來
which is one reason why I’ve always worked at 都做我自己的專案
built my own projects 成立自己的新創
built my own startups 或是在小型企業工作
or have worked at small companies 且做的主要不是工程師的原因之一
where I’m not primarily an engineer 網路上有很多
I think there’s a lot of 有很多演講
a lot of talk online 都在講說這些科技企業的面試過程應該怎麼改善
about improving the interview process at these tech companies 才能讓
that, to allow, you know 不同想法、思考模式的人
for different thoughts of ways of thinking 得以通過面試
that will allow more people to get through these interview processes 就算他們只是像我一樣
even if they’re just like me 非常害怕演算法
and they’re terrified of algorithms 所以呢
So in general 這些問題如何影響學習動機和工作面試的準備?
How does it impact learning motivation and job hunting preparation? 我認為,如果你不覺得那是你該走的路,結果大概不會很好
I think if you don’t feel like you’re in that path, it’s going to be very bad 針對這個問題我沒有太多可以回答的
and I don’t have a lot of answers for that other than, you know 只是希望能開始看到改變
hoping that things will just start changing 一般來講
and I guess in general, when I say 對那些我指導或提供諮詢的人
to those people I would mentor and counsel them 我大概會建議他們多看看產業中其他可以做的事
to look at the different things they can do in the industry 還有很多不同的工作機會
and know that there’s different jobs out there 下個問題是…
The next question is 這個回應很不錯
it’s a good response 有點貪心
it’s greedy 我不知道 sth 是什麼意思
I don’t know what that sth is 是打錯字嗎?
I’m not sure if that’s a typo 噢,是 something,好
something, oh, okay 當有人說這個程式設計的不好
say something it’s not good programming 學位沒有他們想像的那麼重要
degrees not as important as they think 我覺得
Well, I think that’s the second comment 第二個問題正是我整篇演講在談的
the second question is entirely what I was talking about here 我就是在說,學位不一定是
I was saying that degrees are not necessarily the same 在產業界不一定非有學位不可才能當程式設計師
the only thing in the industry as a programmer 不過,我也沒有很好的答案
Again, I don’t have a good response 因為這樣的情況在產業界仍持續發生
because this is something that’s going on in this industry right now 希望已經有在改善
and that hopefully things are improving 但是還是有人有這樣的想法
but that there’s still these people out there who have this thought 把程式設計師分成優秀的跟差勁的
this way of thinking of good programmers versus not 或是覺得的某些事情就一定要怎麼做不可
or there is, you know, one way of doing things and one way is not 所以
so 該怎麼回應呢?
What’s a good response? 我想
I mean, just 我們必須
we need 讓大家知道,身為程式設計師可以做的事情很多
letting people know that there’s other things you can do as a programmer 如果你想回應他們的話
if you feel like responding to them 有時和這種問題也不值得花時間回應
because sometimes it’s not worth responding to those kind of questions 讓他們知道程式設計的用途有多廣泛
letting them know the different things you can do with programing Python 工程師可以做很多事
and different things you can do as a Python programmer 或基本上
or in general 我覺得可以反駁的是
I think is it’s a good counter that, you know 你不需要具備所有的能力,也可以做很多事
there’s many things you can do and you don’t have to have all the skills 對線上教育平台 Lambda School 的看法
thoughts on Lambda School Lambda School 看起來還不錯
Lambda School seems to be 好像弄的滿好的
doing really good things 我還沒仔細研究過它
I haven’t investigated them in depth 因為算是滿新的平台
because they’re pretty new 我也還沒有實際用過
and I haven’t been working on that in general 但我有聽到不錯的評價
but I’ve heard good things 我剛才演講有提到
I put them up there 但我沒辦法真的告訴你
but I can’t say authoritatively like 我有什麼看法
what my thoughts are 因為我並沒有真的花時間研究它
because I haven’t spent a lot of time
investigating them 倒數第二個問題
The second last question 就你現在所了解的,對新手有什麼建議嗎?
Given what you know today, any advice for beginners? 你會怎麼調整你學習程式設計的過程?
How would you change your programming-learnings path? 這是其中一個我喜歡做這種演講的原因
This is one reason why I like to give this talk 我也在好幾個不同的場合發表演講
and I’ve given it at a few different venues 總結來說
In general, as I want 向初學者演講時
when I talk to you beginners 我都會說我大學的經歷
and I tell the story about being in university 遇到了很糟糕的教授
and having that horrible professor 以及後來我如何放棄
and how I quit 我發現,很多新手
I find that a lot of beginners 很多人都會同情我的經歷
I find a lot of people who empathize with me 也發現很多人都曾放棄大學
I found a lot of people who have quit to university and whatnot 做過一樣的事
done the same thing 光是知道有其他人
and just knowing that there’s someone out there 跟我一樣
you know, like me 在 Python 成就一番事業
that has forged a career in Python 而沒有拿到學位
without having a degree and going through this 就建議來說
In terms of advice, it’s 其實也差不多
It’s the same thing 在這行可以做的事情很多
there’s different things you can do in this industry 可以去很多不同的地方
there’s different places you can go 達到成果的方式也百百種
and different ways you can do with 保持開放態度就對了
and just have to keep open mind 剛開始也要去找哪種資源對以最適合
and if one resources have worked for you as a beginner 假設你先試了 Flasks
If say, you tried using Flasks 覺得 Flasks 太…
then you found Flasks was too 你想找一個包含更多東西的
you needed more more things included, you know 那就再試試別的
try something else 試試看 Django
Try Django, you know 就盡量…
Just try to be, you know 不斷嘗試不同的東西
keep trying different resources 因為每個人適合的可能不一樣
because not one resource will work for everybody 好,最後一個
That’s top 教育…學習程式設計比較好的方式…
Education…learn programming’s better … 我其實不太了解這個問題
Unfortunately, I don’t understand that question 我想 Paul 還有一個問題想問妳
I think there is one more question from Paul 謹代表 女性程式設計師
representing female programmers 我有聽過這個
I have hear that 女性程式設計師對大學教育中的計算機課程感到失望
Female programmers who feel frustrating to be computational class in college 我到處都有聽到這個
I have heard that so much everywhere 我在加拿大
I have been giving this talk in Canada 歐洲都有演講過
and in Europe 這不是獨有的現象
and it’s not unique 而是到處都在發生
It’s happening everywhere 這也是為什麼我喜歡做這個演講、分享我的故事的原因之一
It’s one of the reasons, again, why I like to give this talk and tell the story 正是因為這樣的感受非常普遍
because it’s happening all over the world 其中有很多人
and a lot of them 從大學退學
and I think drop out at university 因為學校的計算機課程不適合他們
because these computational classes don’t necessarily fit for them 我希望能帶頭改變
So I’m hoping to lead the charge 我很高興看到 Paul 有具名,其他人都匿名提問
I like how Paul is the only one who’s not anonymous 我有在寫新的書嗎?
Am I writing another book? 目前我並沒有在寫書
So what about…I am not writing another book 因為我現在有全職工作
because I got a full-time job at this company 但我有努力持續做這些小冊子
But I am continuing to work on these zines as much as possible 所以這兩本是我最近完成的
so these are the two things I’ve done recently 這些
So this 兩個都是基本介紹
They’re both introductory 我也有在寫新的介紹指南
I’m working on these like introductory guides 裡面有很多插畫
and they’re Illustrated 我做這些指南,還配上插圖的原因
and one of the reasons why I’m doing them and illustrating them 是因為,我希望想學 Git 的人
because I’m hoping that people who want to learn Git 或如果有人想學電腦…
or if they want to learn computer… 命令列
the command line 有些人可能對於
you know, some people might be intimidated by 上線上課程會覺得太有壓力
using online tutorials 所以我就想,好,如果有紙本
and I thought, okay, if something is in paper 又有插圖
and it’s Illustrated 看起來非常平易近人
and it looks really friendly 可能會吸引更多人來學電腦
it might get more people into computers 這是我近期在做的事
so that’s the things I’m working on right now 這也跟我前面講到,程式設計的多樣途徑有關
and it kind of ties into the different paths of programming 有些人透過看書、念大學
see how some people work very well from a book or university or 或是使用常見的線上資源,就可以學得很好
like typical resources online, you know 但可能,有些人就想要看這種指南,上面附有有趣的插畫
but maybe someone wants to see something that has a funny illustration in the front 只要可以讓更多人來學程式設計,我就會努力嘗試
and whatever I can do to bring more people into programming and work on it 這就是我目前在著手進行的項目
So these are the things I’m working on right now 這些小冊子
is these little booklets 好,我想我講完了
I think I’m good 歡迎上前問我更問題
All right, come up here and ask me more questions 再次感謝主辦單位的邀請
Thank you so much again for having me

Leave a Reply

Your email address will not be published. Required fields are marked *