<story><title>Computer Science from the Bottom Up (2013)</title><url>https://www.bottomupcs.com</url></story><parent_chain></parent_chain><comment><author>delsarto</author><text>Thanks, I wrote this!&lt;p&gt;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&amp;#x27;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.&lt;p&gt;Yes yes, it&amp;#x27;s not Alan Turing-esque computer science.  I have taught algorithms and data structures courses as well as operating systems courses to &amp;quot;computer science&amp;quot; students and this is more the second obviously.  You gotta know both!&lt;p&gt;All I can say is that being a professional now for some time, anyone who knows this stuff is welcome in my team, no matter if we&amp;#x27;re bit banging hardware or writing JavaScript.  When you have some concept of what&amp;#x27;s happing underneath, you write better code and, more importantly, are a better debugger.&lt;p&gt;I&amp;#x27;m mostly cloud-y devops-y these days ... But when your CI triggers a kernel panic or a crash in some low level libray, it&amp;#x27;s nice to be able to go digging and send a patch upstream to fix it :)</text></comment>
<story><title>Computer Science from the Bottom Up (2013)</title><url>https://www.bottomupcs.com</url></story><parent_chain></parent_chain><comment><author>gravypod</author><text>I&amp;#x27;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.&lt;p&gt;I know many people won&amp;#x27;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 for a machine so simple anyone can understand how every bit works. No magic.&lt;p&gt;One such example of this is old retro computers. Systems like old Z80 machines. If I wanted to teach everyone how to be an amazing programmer I&amp;#x27;d start them out on an old broken computer, help them fix it and get it working, help them get programming and wet their feet copying in some hex values to get some binaries programs working, start them up with a notebook and give them &amp;quot;homework&amp;quot; of a few really useful routines to write for themselves in Assembly. They&amp;#x27;d write the assembly and compile it with pen and paper so ther really understand what&amp;#x27;s going on. Then we&amp;#x27;d write an assembler together, then from an assembler we&amp;#x27;d write up a standard library, then from there we&amp;#x27;d get to a compiler for a language they make up. After that the sky is the limit. Maybe help them start writing their own ROMs for the machines and see where they can take it. (Maybe 6 months to 1 year)&lt;p&gt;If someone was able to get through that they&amp;#x27;d really, truely, understand everything in the computer. Funnily enough that&amp;#x27;s what most of my CS education feels like right now (except much less fun and I&amp;#x27;m learning less then I would from this). Intersplice these sessions of training with lectures of computer architecture, basics of electronics, how each of the components in the computer works, different protocalls and why they are used. You&amp;#x27;d be very well rounded and pretty much well suited for many programming jobs. Follow this up with a slow maybe 5 week transition period where you come back to a modern computer, learn some C and why C was made, learn some LISP was made, and then apply that to real world projects while only introducing new technologies and concepts only when they are of imediate use and then allow the student to learn directly from taking advantage of the benifits of these technologies.&lt;p&gt;I think a student would come out very well rounded from something like this. I wish I could pay for an education like this.</text></comment>