Live data from Hacker News

Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

codemanship.co.uk

61–70 of 205 posts

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#61
post #2

I was with him until he started complaining about being asked how to implement a hashmap and how this implied that the interviewer had reimplemented Java.utils. How would you know when to use a hashmap and when to use a list if you don't know anything about big-O notation?

I think he addresses this point pretty well -- you can learn good programming practices through apprenticeship/experience without understanding the deeper fundamentals. You won't be creating the next MapReduce, but you'll be able to remix and hack up existing functionality in new and creative ways.

From the other end though, this can result in a lot of cargo-cult programming. "this is how to do it" can create a ton of redundancy (the bad kind) if the underlying mechanisms are not understood sufficiently.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#63
post #2

I was with him until he started complaining about being asked how to implement a hashmap and how this implied that the interviewer had reimplemented Java.utils. How would you know when to use a hashmap and when to use a list if you don't know anything about big-O notation?

You can have an intuitive sense of how many operations you're performing without knowing big-O notation.

Of course, but part of the benefit from studying CS is that you'll be able to recognize intuitively when there is or there should be a better solution.

Let's say you want a data structure that performs three operations. Insert, Delete, and Find (as in, 'is this in the database?'). The intuitive sense may come from saying, "Linked-Lists would be horrible for this! Each operation would be slow." (O(n)) The practiced programmer may say, "I can keep the data sorted and use an Array. Those would probably be faster." (O(lg n)) However, if you learned a little more CS and how hashes work, you would know that they are constant time for all three operations. You never had to waste time thinking about which choice to make because you know how hashes are implemented and that they specialize on those operations running in constant time.

Besides, big-O notation takes no time at all to learn. I learned it's theory as a freshman in high school during algebra II when we wanted to know which of two polynomials grew faster. Take the most significant part, rip off the constants, and that's its growth rate.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#64
"Developers will need some theory, and I'm painfully aware, too, of the degree snobbery that most employers harbour. So I propose that the right course would be a 5+ year apprenticeship with part-time degree study - CS in the classroom 1 day a week, software development in the office the other 4."

I disagree with this statement. My program at school supplements 6 months of formal learning with 6 month long internships. I don't feel like 4 days a week is enough to get the benefits of working to supplements formal learning. I defiantly need 6 months in a job to learn something valuable, and towards the end of my internships is where I feel like I've learned enough to contribute just as much as any of my teammates and coworkers can.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#65

So, I agree with this article in spirit. Lots of programmers could've benefitted from a more programming centric approach rather than a CS approach. However, this bit gave me pause. " I cannot tell the difference by watching them develop software." I can't disagree with this more. While this may be true of students who were middle of the road students in CS programs. I can't definitely tell the difference between peo…

This could not be more true.

A formal CS background gives people a very valuable toolset with which to program. It's something you can't fake, and if you know what to look for, it's instantly recognizable.

But if you don't have a CS background, yeah, I could see why it would all look the same to you.

A CS person can easily learn programming; it's second nature to them. But a programmer does not learn deeper theory as easily. Of course it can be learned, but that's why they teach CS at universities and not just programming—it's a much more difficult and more fulfilling subject, in my humble opinion.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#66
post #48

Here in the UK, when I did my Computer Science degree, about a third to a half was programming. The rest of it was basically hardware and mathematical type theory. There was more but the point is, it covered computing in the whole. How CPU's actually work, how data is organised on a disk, what is actually going in in CAT5 between cards, etc. AI, Databases, servers, etc. The was another course, CS Software Engineering…

Would be interested to know the course requirements for the CS vs. CS-SE

If they had more relaxed A-level grades for the CS-SE students (or it was under-subscribed and filled through clearing) then the students on the course were just a lower standard of student rather than the course itself being deficient.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#67
post #57

Earlier quoted context omitted.

I'm curious about what you think those differences are, and how you think it hurts or helps.

It is hard to answer this because a lot of the trite answers are indeed false. A computer science student may be more able to tell you whether an algorithm is O(n^3) or O(2^n), but the normal (and experienced) programmer will be able to tell you either is "slow" and fix it just as quickly. But there is a style of thinking that can come out of a study of computer science that can be very difficult to obtain on your ow…

Very, very insightful post. Thank you! To add a little personal bit, I use Haskell daily in my research. I also do web programming on the side in Rails. After figuring out Haskell, and then learning idiomatic Haskell (along with monads, monoids, functors and friends) my way of writing Ruby became much different. I'm more cognizant of patterns in Ruby as they relate to Haskell (as they relate to formalisms in computation). For example, handling nils in Ruby can follow patterns of the Maybe monad in Haskell.

This isn't to say that Haskell is the only mind-expanding language out there, but it sure is good and it worked for me. I think it makes it especially easy in this regard over ML or Lisp in the "mind-expanding" game because it has so many formalized computational concepts that are first-class and upfront. That's not to say that you can't expand your mind in other languages, but Haskell can really help you out if you're willing to roll with the learning curve.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#68
Hiring based on IQ is fairest.

God says... Though baptism once Wills selves time worship nurse blamest oops ecclesiastical whereupon sinking theft's witness arranged filth stores determined sickness might instance harmonious blessings Guatemala regeneratedst General quiet quicken follows feeds Apostolic

God says...

11:11 And they smote all the souls that were therein with the edge of the sword, utterly destroying them: there was not any left to breathe: and he burnt Hazor with fire.

11:12 And all the cities of those kings, and all the kings of them, did Joshua take, and smote them with the edge of the sword, and he utterly destroyed them, as Moses the servant of the LORD commanded.

11:13 But as for the cities that stood still in their strength, Israel burned none of them, save Hazor only; that did Joshua burn.

11:14 And all the spoil of these cities, and the cattle, the children of Israel took for a prey unto themselves; but every man they smote with the edge of the sword, until they had destroyed them, neither left they any to breathe.

----

Commodore 64? God said 640x480. Higher values are impossible without GPU support -- there's not enough horsepower ever with 8 cores to do more than 640x480@60fps.

God says... incredible retire Led listening presides lessons inclined plain subtle gross hey_thats_right lashest comforted corner electronic appeareth tears scanning guppy sweetnesses intent following place asterisk you_are_my_sunshine climate concerning hateful lifted potentially Had rebelled rais'd cultivated rush unholy raise slumin thunder You_can_count_on_that sickly blesseth farther could Louisiana thirdly ever led desert overpass oppressed distributed mourners arrogant Who mget talent FTP boundary forsaking army thank madest appropriated pressed whatcha_talkin'_'bout deep composing evaporates wear doctrine encumbrances Shine blindness travailing pitying themselves gross straightening kingdoms proved Body then pick_me_pick_me Manichees' medicine I_was_sleeping purest gainsayer freeman despair desiring mockery limbs Faithful forsook past slackened talking feigned sensation talk_to_my_lawyer discoursed robing Terence stretched wavered cogo Instructor tabernacle ascension returns protesting nasty desperate propound

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#70
post #57

Earlier quoted context omitted.

It is hard to answer this because a lot of the trite answers are indeed false. A computer science student may be more able to tell you whether an algorithm is O(n^3) or O(2^n), but the normal (and experienced) programmer will be able to tell you either is "slow" and fix it just as quickly. But there is a style of thinking that can come out of a study of computer science that can be very difficult to obtain on your ow…

Very, very insightful post. Thank you! To add a little personal bit, I use Haskell daily in my research. I also do web programming on the side in Rails. After figuring out Haskell, and then learning idiomatic Haskell (along with monads, monoids, functors and friends) my way of writing Ruby became much different. I'm more cognizant of patterns in Ruby as they relate to Haskell (as they relate to formalisms in computat…

I would add that part of the reason I think Haskell has supplanted Lisp is that so many of the concepts of Lisp have been absorbed into mainstream languages that the distinctiveness is greatly reduced. Macros are still mindblowing, but much less so if you've used Ruby or Python or Perl than if you're a pure C programmer. In 20 years, I suspect modern Haskell will be "less mindblowing" for the same reason. It's not that Lisp has gotten less good or anything, it is that it has mostly won.
Post reply on HN