0
$\begingroup$

After studying 4 years in university, I've concluded that computer science is all about taking "clever" decisions. Programming in real world at any product based company is the same, you use your "cleverness" to write code. I find it tiring to solve puzzles but am determined to be a good computer science person, so how do I start to make myself more clever?

$\endgroup$
2
  • 3
    $\begingroup$ I find it hard to approach this question because I absolutely reject your premise. What in the world do you mean by "cleverness"? $\endgroup$
    – Ben I.
    Commented Mar 29 at 11:25
  • 1
    $\begingroup$ Please define "clever". What led you to conclude that CS is all about taking clever decisions? The only context I hear "clever" being used regularly is in programming, where it's applied as a criticism of code that uses fancy syntactical tricks when a simple idiom would suffice. In the "real world", we strive for code to not be clever to lower the maintenance cost. $\endgroup$
    – ggorlen
    Commented Mar 29 at 17:44

3 Answers 3

3
$\begingroup$

It's not about cleverness. From the outside, it might look like cleverness, because sometimes people like to hide the process they used to arrive at their answer. This is cultural in mathematics and in some areas of computer science (think about $\epsilon-\delta$ proofs, where the choice of $\delta$ seems totally unmotivated and clever at first, but there's a method to choosing it where you write the proof backwards).

In reality, almost every single time someone does something "clever", they were following their own step-by-step problem solving algorithm. We teach our undergraduate students Polya's method.

I encourage you to study that method and start to see how you've implicitly used it in other times you've solved a problem (including a programming problem). Then, start to be intentional about using this method when faced with new problems. By doing common-sense things like breaking a hard problem into simpler pieces, you can start to solve harder problems than you could before. Eventually this becomes second nature and looks from the outside like "cleverness" but there is a method to it.

Also, as a student, don't be afraid to ask a professor or teaching assistant how they came up with some specific thing to do. And they can walk you through why they thought to try that. Meta-cognitive thinking is something you should nurture while a student. There's a large amount of literature about how to teach students to think metacognitively and see the big picture that's guiding the whole subject, rather than just a series of clever tricks. Look for the big picture!

$\endgroup$
1
$\begingroup$

If you are programming only for yourself, or doing something like creating games, then cleverness might be a goal. You want to surprise users and there are few consequences for breaking the rules.

But if you are asking about programming in the commercial, product driven, world, then cleverness may be the last thing on the menu. Much more important are fulfilling the requirements of the application, which is specified by others, in a way that is maintainable, extendable, and secure. None of that is clever. It is more of an engineering concern. It is, in fact, the reason that agile software development and design patterns came to be. It is why C++ has evolved into a (largely) safe language if used in the modern way. It is why OO programming, when done well, controls access to fields.

I'd guess that your algorithms course stressed correctness and how to prove it. Some of the algorithms seem clever if you've never seen them before, but they have a long history and a solid basis for known efficiency and correctness.

Don't be misled. Work to become more grounded not more clever.

$\endgroup$
0
$\begingroup$

As a so-called clever person, I've never once in my life asked myself or anyone else "how to become clever".

Nor do I view computer science as being about "clever decisions".

I received the designation of "clever" even as a child because I pay attention to things that are not generally attended to (at least when controlled for age and for the effect of adult direction), and more proficiency than average in certain areas.

Notice the locality and relativity of these claims. The next kid could be juggling 10 tennis balls whilst balancing on a beach ball, and they'll call me clever if I can do it with 11 tennis balls (even though in any objective sense, the difference in capability is not very significant).

So the average person who has a huge welter of ordinary and quite useful capabilities is always by definition "not clever", no matter what it is they can in fact do.

I also never really lifted a finger to be clever if it didn't please my curiosity. You don't get clever on willpower and goal-setting. I've become clever doing things I already liked doing. I think I'm better at certain things because I enjoy doing them more than average, and that enjoyment drives me to do them more than others would (especially those running on the fumes of willpower alone).

"Computer science" is broadly the academic study of designing/configuring data processing machinery as we know it.

Obviously practising in the field of computing involves clever decisions and not stupid ones, but that is no more particular to computing than any other activity. There's no human activity in which proficiency is defined by making stupid decisions. Chess is about clever decisions. Negotiating a sale is about clever decisions. Driving a car is about clever decisions. Baking a cake is about clever decisions.

If you're not good at computer science, which may be why it seems to require a cleverness you don't think you have, then my advice would be to give it up for something you are actually good at and enjoy doing.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.