Live data from Hacker News

Hard Things in Computer Science

blog.frankel.ch

21–30 of 46 posts

Re: Hard Things in Computer Science

#21

Proving code correct is orders of magnitude harder than the rest IMHO. It is amazing that enough progress has been made that large scale projects like CompCert and seL4 can now be done successfully by small teams of people.

I'd say it is not hard but impossible. I have a hard enough time to get requirements specifications that are unambiguous. Proving I coded what I was asked for is not a rigorous science practice. It's a social contract.

Re: Hard Things in Computer Science

#22
I stopped reading when he mentioned TTL and only TTL as a valid cache invalidation method. It may be in some contexts where stale data is not a deal-breaker, but certainly not in the general or even most cases. Fail.

Re: Hard Things in Computer Science

#23
post #11

Computing with limited numerical precision (aka floating point) is 1.000000000000003534 additional hard thing to deal with.

Modern computers can calculate with a very large finite precision using decimal types. We have so much machine to waste today that if calculations of that sort are relevant, just throw more iron at it.

Nope! More precision sure helps but not in all cases. For example, having more precision will not help in boundary problems where you have to decide if something (for example an amount of money) is above or below a threshold.

Moreover, many problems related to money) must compute with limited accuracy. For example, all intermediary results must be in 1/1000th of euros. You can use floats (yeah, I know, everybody say it's a no go) or fixed point, but in the end, you absolutely can't avoid thinking about rounding.

Re: Hard Things in Computer Science

#24

Earlier quoted context omitted.

Agreed, and also just text in general, internationalization, line-breaks, horizontal vs vertical text, left-right vs right-left, etc, etc. OTOH that starts getting quite "application oriented" and where do you draw the line? compsci is perhaps more about computation and how to achieve it, analyze it, etc, and in that case even dates and times should not be in the list, being an "application" domain concern.

> where do you draw the line? How many clients do you have, or want to have? How many bugs do you want them to suffer? My language is written Right-to-Left. Jira couldn't care less about my market, so I don't use it, even though I could trivially add support myself in Firefox's User CSS file. But there are another 300 million people who speak RTL languages they are ignoring along with me. Is 300 million people a smal…

I meant where do you draw the line as to what is "computer science", and what is domain and application-specific problem-solving?

Of course your language has just as much right to be dealt with correctly in computers as every other, but that's probably a separate conversation about the right to equal access to technology whatever the economics (A cause I agree with), etc, etc.

Re: Hard Things in Computer Science

#25
There are lots of domains, where the domains are hard (compression and compiler design comes to mind), but when it comes to pure computing I would say: Lockless high contention multi-threading. Its the thing that has made everything easy hard and fun again for me.

Re: Hard Things in Computer Science

#27

Earlier quoted context omitted.

> where do you draw the line? How many clients do you have, or want to have? How many bugs do you want them to suffer? My language is written Right-to-Left. Jira couldn't care less about my market, so I don't use it, even though I could trivially add support myself in Firefox's User CSS file. But there are another 300 million people who speak RTL languages they are ignoring along with me. Is 300 million people a smal…

I meant where do you draw the line as to what is "computer science", and what is domain and application-specific problem-solving? Of course your language has just as much right to be dealt with correctly in computers as every other, but that's probably a separate conversation about the right to equal access to technology whatever the economics (A cause I agree with), etc, etc.

  > I meant where do you draw the line as to what is "computer science", and what is domain and application-specific problem-solving?
Oh, I see.

I actually think that the line is clear. Solving a practical problem or bug? That's not computer science. Developing or improving a generally useful algorithm or technique, such as a sort function? That _is_ computer science.

Science is improving our understanding of how things work or can be made to work. Actually putting that knowledge to application is Engineering (or tinkering).

Re: Hard Things in Computer Science

#28
> The only reliable way to have bug-free code is to prove it. It requires solid mathematical foundations and a programming language that allows formal proofs.

I'm going to be the "actually" guy and say that, actually, you can formally verify some studff about programs written in traditional/mainstream languages, like C. Matter of fact, this is a pretty lively research area, with some tools like CBMC [0] and Infer [1] also getting significant adoption in the industry.

[0]: https://github.com/diffblue/cbmc

[1]: https://fbinfer.com/

Re: Hard Things in Computer Science

#29
The hardest things in CS are also the simplest things:

* Strings (think Unicode, collations, string sizes, etc)

* Numbers (think currencies, precision, explaining floats to people, etc)

* Dates (as mentioned in the post)

And it's funny that we start teaching programming with these concepts.

Re: Hard Things in Computer Science

#30

The hardest things in CS are also the simplest things: * Strings (think Unicode, collations, string sizes, etc) * Numbers (think currencies, precision, explaining floats to people, etc) * Dates (as mentioned in the post) And it's funny that we start teaching programming with these concepts.

Yeah this nails it. In my distributed systems class, the first thing we learned was that communication of a network was not guaranteed. I remember thinking, well how do you do anything? And then it dawned on me, that's literally why we have this as a field.

I think the same kind of thinking applies for all the simple things in each domain.

Post reply on HN