iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
1
Software Development

與頂尖工程師談「追求卓越」系列 第 5

新加坡最受歡迎的資工系教授 Prof. Ben [Part 1]

  • 分享至 

  • twitterImage
  •  

以下是我與 Prof. Ben 的英文對話。因為整個對話有點長,而鐵人賽的時間太緊湊,所以我先直接分享英文版,也會分三篇發佈。日後有時間的話會翻譯成中文。或是如果有有心人要幫忙翻譯的話,我會非常感激!

https://ithelp.ithome.com.tw/upload/images/20200918/20129249eeHCUI3jQc.png

Bernard: All right, let's start this..., but I don't know what this is. Prof. Ben, thanks for taking talking to me today. Please introduce yourself to our audience.

Prof. Ben: Thank you for having me. To introduce myself: I guess I started my career as a civil servant (公務員). I went to MIT for undergrad, but I came back and became civil servant because the Singapore government paid for my studies at MIT. So then I need to serve in the government for two years.

After that I decided that being a civil servant for the rest of my life is not what I want, so I decided to take off and then I went back to MIT again to do my PhD in Computer Science. Then since 2006, I'm back again and became a professor. So this is my 14-15 year as a professor at NUS. I've lost track but most likely I have taught thousands of students.

Along the way, I also took some the minor detour. I worked for Ministry of Education (MOE - 新加坡教育部) for five years. I was the Technical Director for MOE, where I have my own software teams. We build apps for the government. I also supervised software vendors who build stuff for MOE.

So that's my career. I've never worked at a company. My students are sort of my career.

Bernard: Thanks Prof. Ben. You started at MIT at 1993 according to your LinkedIn, right? Did you program before? Were you one of the super kids who started coding when you were 5 years old? Or you started at MIT?

Prof. Ben: Yes, I started at MIT at 1993. that's right. And I pretty much only started programming at MIT. Before that I actually wanted to become a mathematician, but that didn't work out.

But computer science was really like applied math. So for computer scientists, math is quite important. My math was good. I have always liked solving puzzles. So it has worked out for me.

Bernard: Got it.

Prof. Ben: Yeah, and let me address this question quickly. Some people ask whether it's necessary to learn programming when you were a child to be good at computer science. That's absolutely not true. One of my strongest stutends is someone I'm teaching now. He is so good that I think he will go work at Google or Facebook. And he's only at Year 2; he only started learning programming with me two years ago. Before that he hasn't learned a single line of code.

Some people ask whether it's necessary to learn programming when you were a child to be good at computer science. That's absolutely not true.

Yes, he's very bright. But the truth is I don't think it's necessarily to start young. I think starting at college is sufficient. Programming a lot of it is really about logic and applied math. So I think the students who want to do well in computer science should be good at math. I think that's a prerequisite.

Bernard: Got it. Thank you for taking on that. A few more questions about yourself: do you have a favorite programming language or framework?

Prof. Ben: No. Well, I started the programming Scheme(聽過這個程式語言的人應該不多...)at MIT. That's the first formal programming language that I learned, and then I learned C, and then Java. So these are the first programming languages I learned in undergrad. I used to write a lot of Java.

But then I started writing a lot of web apps for a short while, using PHP. Those were the early days. 2000~2003. Since then things have changed. JavaScript now can do all kinds of things.

Personally, I don't have favorite language per se. I think Scheme is kind of cool, but I don't think it's very practical these days. The reality is that it's not about the language. I think the key is to learn the fundamentals of programming very well so that you can learn things on the fly.

For example, I am teaching Python programming now, and I learned it a week before I started teaching it. It is possible as long as you know the basics and you learn the syntax then you can pick things up.

I look at languages as they are different tools for different problems. So we should just find the most suitable tools. I myself try to be language agnostic.

Bernard: Be language agnostic, got it. But If that's the case, why did you pick Python to teach now?

Prof. Ben: A good question. That's because Python is simple to learn. I can have my students avoid having to deal with nasty syntax. For example, if you use Java, then before you can write "Hello World" you got class, you got public, you got function definitions, and you've got system.out.println. You've got all kinds of random stuff you have to explain to students first, otherwise they will be confused. And you also need them to learn those things by heart.

So it's kind of nasty. Python is simply; it cuts to the chase so You don't have to do with all those kinds of language syntax issues. And I think that way of teaching is more sensible, and I can focus more on the problem solving itself.

So that's why I choose Python.

Bernard: OK, next one. Well, this is going to be a hard one. This is going to be really hard for you ?: What's your proudest accomplishment as a software engineer.

Prof. Ben: Oh... I guess one of the things I could say for sure is that I don't have a program that I cannot debug. The worst bug I got I took 36 hours to debug it. I didn't sleep for 36 hours. I only showered and ate. I sat it through the entire time. That's the nastiest bug I've come across.

Since then I've never had a program I couldn't debug. So that's important.

I think the challenge is this, if you have a program you can't debug, then you will never be sure that you can debug stuff. So I've made a point to find and debug every single bug in my work. This is not so much of an accomplishment but a kind of discipline that I hold myself to.

I may be just a bit OCD (obsessive-compulsive disorder, 强迫症).

The worst bug I got I took 36 hours to debug it. I didn't sleep for 36 hours. I only showered and ate. I sat it through the entire time.

Bernard: Maybe... but you almost need to be OCD to be a good computer scientist.

Prof. Ben: Yeah... I think you almost need OCD to be a good programmer. .

Bernard: Let's talk about something you are definitely an expert in: learning and development.

Everyone talks about to be a software engineer or a computer scientist, there's no stopping in learning. Everyone week there are new technologies, new frameworks, and new ways of doing things or solving problems. So the challenge is how do you choose what to learn? One day someone tells you to learn about scala or big data, another day someone tells you to learn functional programming.

So how should one choose what to learn? In terms of choosing the right tool sets? How does one think about this? How do yourself do choose? And what did you observe from your students?

All software engineers and computer scientists need to have the fundamental set of knowledge, such as introduction to programming, programming concepts, abstractions, data structures, algorithm, and maybe order of growth.

Prof. Ben: I think there are two parts to this question. The first thing is that all software engineers and computer scientists, they need to have the fundamental set of knowledge, such as introduction to programming, programming concepts, abstractions, and data structures, algorithm, and maybe order of growth. These are really quite important.

I think where I have problems with bootcamps is that many of them they actually skip this part. So many bootcamp graduates often times coding by stack-over-flow. They just google something, plug it in, then try to fix things to make it to work. I think that's very bad habit.

Once the students actually learn this basic set of knowledge, then they should be in good shape. They should be able to go forward and do well.

Subsequently after that, they can learn whatever based on their need. So, for example, I just I said I learned Python because I needed to teach Python. So when they have a new job, and need to use a web framework (and there are so many web frameworks). You learn the stack that's chosen for the job.

The basic frameworks are the same: MVC, etc. The kind of ways in which people structure programs are similar. I think as long as the students can decouple the details from the high level abstractions and the key principles, and learn those principles, then they will be fine.

I think where I have problems with bootcamps is that many of them they actually skip this part. So many bootcamp graduates often times coding by stack-over-flow.

Bernard:got it. Any examples of tools that you are using now?

Prof. Ben: Yes. Recently I led a team of students and built the national COVID-19 contact tracing app for Singapore. It turned out that the army has already started the app, and they picked Node.js. My students did not know Node.js at the time, but they learned it and completed the app.

https://ithelp.ithome.com.tw/upload/images/20200919/20129249icMq5ETRcU.png

The truth is It often depends on the project and the circumstances; but you just learn things. The challenge is that often people want to be fast and try to take shortcuts. When people have trouble learning and keeping up, I think there is a lack of mastery in the fundamentals. As long as your basics are learned well, I think it's not a problem.

Also learn how to learn is another important capability in computer science.

Bernard: Yeah, that's what we discussed a few times — the difference between「內功」 and「招數」。Once your 「內功」have reached certain levels, you can pick up any 「招數」pretty quickly.

Prof. Ben: Correct. And 「內功」takes time; it's not something that can be rushed. I think it takes a year of focused training and practice. You need to write code and debug. Debugging is a very important skill. I think any programmers who are any good have spent a lot of time writing a lot of code in their lives.

But another interesting is those guys who actually are quite good in coding oftentimes like it as well. So they actually don't mind writing thousands lines of code. The issue is when people who are in the profession just for the money, it will be hard for them. Unless you like it, programming can be quite painful.

Bernard: Yeah, you have to good at something, fundamentally you have to enjoy it. Otherwise, you can only be adequate and just get by.

And what you are learning yourself these days?


我們明天再續。


上一篇
新加坡最受歡迎的資工系教授 Prof. Ben [人物介紹]
下一篇
新加坡最受歡迎的資工系教授 Prof. Ben [Part 2]
系列文
與頂尖工程師談「追求卓越」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言