Δευτέρα 9 Ιουνίου 2014

Principles of Computing - Introduction Part I


Computer science is influenced by how I do research or what the research I work in which is in applications of computer science to biology. So there we look at the problem that comes from biology without us being biologists ourselves.
And we think about how do we take a problem that's described in English or any natural language, whatever the language of the biologist is, and how we thinking about to solve it using computers? Of course the problem is not described in, in a language that's amenable to algorithms.

So we have to go through an entire process. Of, of, formalizing the problem, doing formal reasoning about it, thinking about the algorithm and then implementing it. So for me, I view computer science as this discipline of reasoning about
problems, designing solutions for them, which includes the algorithm design as well as the implementation to solve real world problems.

How important is it to be a good programmer? Obviously it's not that important because I'm not a good programmer. That was a serious question though. How important is it to be a good computer programmer to be a good computer scientist?
I think it's very important to have outstanding programmers in computer science but, I don't think it is very easy to be outstanding at every aspect of computer science. Again as I mentioned, for me, I look at even in the homework assignments that we give in algorithmic thinking. We do, the homework assignments spans, spans the problem all the way from the English description to the implementation and running the analysis. And, in that part of that process is
writing the program and one has to be, very capable of writing the problem, knowing the syntax of the language, knowing, you know, all sorts of tricks and so on to implement the, to implement the program. But there are many other skills that, the computer scientists need to be aware of.

So many people, for example, are very good at designing algorithms, and once they design the algorithm they figure it out, that's where they stop and say someone else, let someone else implement it, and I see a room for these things because. It's not easy for everyone to claim that, I am good at doing algorithms, I am good at, at coming up with the math. And I'm the best also at doing the program, because I am sure I can write the program that implements my algorithm, but I am also sure that there's someone who can optimize that code even better. And make it even more usable.

So, I've actually read this, and I subscribe to this little point of view, that in some sense, programming is actually probably the least important skill. I kind of view that being the janitor of computer science. And let me explain why the process of taking a well defined description and turning it into code is actually a fairly straight forward thing. The hard intellectual challenge is hearing a problem, thinking how to formulate it, thinking about algorithms,
data structures, how to solve it. It's taking that high level problem and turning into a specification and a program we can then turn into code. And I mean you'll see this, for example outsourcing. Outsource is going to take a lot of the
low end programming jobs and essentially kind of. Kind of put them out to the world where they're really done by a low cost. The people that are actually making the six figure salaries in computer science are the problem solvers, the one that a corporation can come to and say hey, I have this computational problem and I need you to take it and figure out how to solve it and build me a description that I can then give to some programmers and turn it into some code.

Discipline is very important because the wild hairy code that you write for one-off for maybe a research paper is not the kind of code you want to have in say. Maybe some kind of critical operating system for a flight control system on an airplane. So I definitely think that discipline is an important thing and I, and I've kind of come around a little bit in principles of computing where I think that it's important to train the students to be more systematic about the kind of code that they write.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου