Live data from Hacker News

Computer Science from the Bottom Up (2013)

bottomupcs.com

101–110 of 161 posts

Re: Computer Science from the Bottom Up (2013)

#101
post #65

Earlier quoted context omitted.

Computer science is not about computers; where does stuff like algorithms fit into this? What is a "true scottsman" of CS? Low level programmers? What about people that have pioneered the theory of computer science? The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.? I doubt these people know the inner workings of computers, but they have revolutioni…

Maybe I am too old, but from my vantage point, "Computer Science" and "Algorithmic Science" are really two entirely separate fields. Computer Science is exactly what the OP talks about: computers, CPUs, implementation details, hardware, plumbing, etc... One needs actual hardware on the table to work this out. Imperfect hardware, with latencies, clock issues, etc... THAT is true computer science, IMHO, and is very nea…

In my native country, computer science is called "informatics" [1], a term which I've always liked but which hasn't quite gained a foothold in the US. It covers everything from complexity theory to algorithms, but is focused on science, not engineering.

[1] https://en.m.wikipedia.org/wiki/Informatics

Re: Computer Science from the Bottom Up (2013)

#102

Earlier quoted context omitted.

Of course. But OTOH, we shouldn't immidiately discount LLs when writing code, just because the perf isn't optimal. >but hardly means that we should be against writing fast software. On the contrary. Lisp is slow. Python is slow. Ruby is slow. Smalltalk is slow. What do these languages have in common? Dynamism. They trade speed for other that were, in the language designer's opinion, equally or more important than bei…

> Of course. But OTOH, we shouldn't immidiately discount LLs when writing code, just because the perf isn't optimal. Most of the time you should, I'd say. Regardless, the decision should be very natural/ trivial for any developer - understanding the performance attributes of the most common data structures is not asking too much of developers. > They trade speed for other that were, in the language designer's opinion…

>I am not arguing against LL. I am just saying that it isn't 'lunacy' to understand basic performance characteristics of your software.

It's not: it's very important.

>Your post essentially came off, at least to me, as "people are crazy for wanting ot use a more efficient data structure".

My point was more that people aren't necessarily crazy for using an LL. I don't, however, think that anybody is crazy for choosing not to use one for perf reasons.

I guess what I'm saying is that AFAICT, we're entirely in agreement, and I have no idea why we thought we weren't.

Re: Computer Science from the Bottom Up (2013)

#103

Earlier quoted context omitted.

Right but what's the reason not to pick a data structure with better performance? This should be a really trivial choice with virtually 0 impact on code since a list and array will have nearly if not entirely the same interface. I would also challenge that 99% of all applications are disk bound but I think it's really besides the point. Really, the argument is that performance doesn't matter in all situations, which…

Of course. But OTOH, we shouldn't immidiately discount LLs when writing code, just because the perf isn't optimal. >but hardly means that we should be against writing fast software. On the contrary. Lisp is slow. Python is slow. Ruby is slow. Smalltalk is slow. What do these languages have in common? Dynamism. They trade speed for other that were, in the language designer's opinion, equally or more important than bei…

I wouldn't say it is the dynamism as much as the lack of control. Specifically, if you write your code non idiomatically and control all allocations, the languages probably gain a lot on speed. Unless you need inline assembly. Some lisps allow this.

I find that taking these lessons to database access patterns helps a lot. Know your data access, and the data structure design has meaningful discourse. Don't know your access patterns? You are unable to pick the best one. Period.

Re: Computer Science from the Bottom Up (2013)

#104

Thanks, I wrote this! It was a bit of a different time, when docbook was the way to publish, when Itanium was the 64-bit architecture, things like go and rust didn't exist and we used bitkeeper. But most of it is still relevant, and despite acquiring 2 kids since I started still have some ideas. Yes yes, it's not Alan Turing-esque computer science. I have taught algorithms and data structures courses as well as opera…

Just as idle inquiry about the "CS" term, do you think the name "Computer science" would still apply (and did it always apply) to things such as CPU and OS architectures, the toolchain, etc - basically the subject of your e-book?

I am under the impression that there's a distinction between "Computer Science", which is algorithm and data structure design and analysis, and "Computer Engineering" which is basically everything else, from the hardware level up.

Or is this mostly a European distinction?

Because my friends who do "real CS" at various universities generally avoid anything which has to do with hardware and practical operating systems, and are basically mathematicians working on problems relatable to computers - their language of choice is TeX, not C. More like Turing instead of Torvalds.

Re: Computer Science from the Bottom Up (2013)

#105
post #104

Thanks, I wrote this! It was a bit of a different time, when docbook was the way to publish, when Itanium was the 64-bit architecture, things like go and rust didn't exist and we used bitkeeper. But most of it is still relevant, and despite acquiring 2 kids since I started still have some ideas. Yes yes, it's not Alan Turing-esque computer science. I have taught algorithms and data structures courses as well as opera…

Just as idle inquiry about the "CS" term, do you think the name "Computer science" would still apply (and did it always apply) to things such as CPU and OS architectures, the toolchain, etc - basically the subject of your e-book? I am under the impression that there's a distinction between "Computer Science", which is algorithm and data structure design and analysis, and "Computer Engineering" which is basically ever…

I'm not the OP, but have spent more than my share in CS departments in the US. :) I think it's more of a EU/US distinction.

In the US, CS departments typically include both the theory (of computation, algorithms, data structures, complexity, etc) as well as a healthy dose of applied CS, which then divides up into: systems (operating systems, networking, etc), applications (scientific computing, AI, etc), interfaces (graphics, HCI, etc) and a number of other ones depending on the department.

This topic definitely fits into intro-level material in a systems division of a CS department in the US. In comparison, US "computer engineering" tends to include much more emphasis on the hardware (including CPU design, circuits design, etc) and overlaps with CS in low-level aspects of systems. How about it?

Re: Computer Science from the Bottom Up (2013)

#106

Earlier quoted context omitted.

> GP probably means that while these pioneers might be aware of, might have tinkered with the nuances of processor design and syscalls and nitty-gritty details of TLB's and interrupts and stuff that, say, a kernel-level or SSD firmware guy might deal with regularly, it's highly unlikely that they would know their way around these like they know their way around the algorithms that they deal with on a regular basis, w…

It sounds like you hold researchers in the highest regard and believe everyone should too.

There's a difference between a researcher and an expert.

I'm a researcher and particularly I'm an undergrad assistant to people who do important things. EWD was an expert. I know a little about computer science and am still learning. EWD knew everything there was to know at that time and was teaching.

That's what an expert is. The pinical of the field's knowladge accumulated into one person. You don't earn the title Expert from a degree. You don't earn it by any means from years of experiance. You earn the title Expert by consistantly blowing the minds of everyone else in your field and by consistantly pushing your field forward further then your peers.

Re: Computer Science from the Bottom Up (2013)

#107
post #5

I've been rattling this idea around in my head and, although it may sound crazy, I think C is a little high level to start an adult out on. I know many people won't agree with this but all of the people I admire in the world of CS and everyone who is a true scottsman for all intents and purposes loves dipping down to a lower level once and a while. I think the best way to learn about computer science it to program fo…

Except at some point you have to deal with x86 and ARM and wait a minute - this looks a lot like computer engineering . It's a very distinct segment of the whole hardware/software spectrum that's very, very far off from the realm of, say, dev ops.

Dev ops is not computer science. Dev ops is the operations of computational devices and the upkeep of the programs that run on them. Computer Science is the creation of these programs by taking advantage of the hardware they are running on.

Dev ops are the road builders to the shipping companies. They do absolutly nothing related to each other but they both need each other.

Dev ops is more an information technology field and it's useless to make devops people take courses from CS other then a familarity with Unix and Windows sytems. In fact Dev Ops people should go far further into depth on Unix and Windows systems to the point at which they know every bit of information of every documentation concerning running applications, services, and jobs on these machines. Computer scientists should go into how these are implemented.

Re: Computer Science from the Bottom Up (2013)

#108
post #74

Earlier quoted context omitted.

That may be the ideal way to learn CS, but the problem IMO is that lots of people are going to lose interest immediately. When you start with a web app or a game they can immediately feel like they are developing a practical skill.

It's not only that, but doing something like writing your own assembler probably isn't going to be terribly relevant to someone creating a web app or making a game in Unity - particularly so 5, 10, or 20 years later. Heck, I'm not even sure that working on an assembler is going to be terribly useful to most people who will be writing in assembly. Students who aren't interested in a particular requirement will complet…

All software is related in some degree. You will find that people who come from a background of compilers will do well in developing certian portions of games.

In a sense most games are a compiler. You feed it in source (images, dialog, models, textures, etc) and it spits out an interactivly compiled narrative.

Websites are also compilers. They just operate on a higher level of abstraction then the simple toy compiler we would right.

The information to someone new is invaluable so long as they learn it themselves and aren't forced through it.

Re: Computer Science from the Bottom Up (2013)

#109

Earlier quoted context omitted.

I'm worried that it may just be my love for microcomputers, old mainframes, and just computers in general that is clouding my judgement but I think this would really improve the understanding of computational systems for anyone who was so inclined to participate in the course(s) required to teach this material. Much like the steriotipical sex-ed course where students are made to carry a baby I think college CS studen…

I agree. You have to learn from both directions: go read SICP, PLAI, TAPL, PAIP, Dragon, Algorithms, and whatever else so you have an understanding of the concepts. Now build a Z80 or 6502-based computer (at the very least) and implement stuff on the bare metal so that you understand how the machine works, at least on a basic level. But if you can't be bothered to actually build a computer yourself (which is complete…

I want to build a CPU from scratch actually but I can't find any 7400 series logic simulators that are worth their salt.

Re: Computer Science from the Bottom Up (2013)

#110

Earlier quoted context omitted.

That is very top down. This is perfectly fine and the only reason why I think differently is because most of my peers are afraid of experimenting. They think everything they haven't seen is magic.... because well it seems that way. It's voodoo to them. When I see a compiler I just think "pfft, tokenizer, lexer, tree". When they see a compiler they think "I could never understand this in my life". It's like when I go…

>When I see a compiler I just think "pfft, tokenizer, lexer, tree". When they see a compiler they think "I could never understand this in my life". To be fair, they're probably more correct in this context. Even if you understand the basics of compilation (and by the way, if you're reading this comment and you don't have a basic understanding of how compilation works, you should go learn that. Like, right now, if you…

The exercise isn't to put you ahead of everyone else. It is to get you to see where everyone else came from.

I could try and run a marathon but I'm very out of shape. One of my friends can try and run a marathon who isn't out of shape and while they won't win they can still do it and learn from the experiance. The goal isn't to win, it's to learn in this case.

Post reply on HN