Without having dug into it much, I quite like it. There are definitely a lot of resources out there to learn, and - regardless of how true it is - feeling like a resource is the _right_ one for you probably helps.
As cool as this is, It would be nice if choosing the expert path would also offer links to recommended books on programming. I've personally found books like sicp, the c++ programming language and etc to be the best source of programming knowledge (after an appropriate math or programming intro).
But it's often pretty hard to find out which books are worth reading, of all the books that have been published in the last 30 years, are any still germaine to modern programming?
I tend to prefer books because just listening to a video about something does not work for me (especially when it's just a guy talking), a book with a bunch of exercices and ideally a corriger really allows you to learn at your leasure (and are much more portable than a video on a mooc site)
This was pretty cool and seems great for young beginners.
I wonder, though, what is the modern equivalent of messing with BASIC after school? It certainly isn't Coding for Dummies is it? Would it be messing with the browser console? Messing with Python?
On a side note, I still think the beginning of the first SICP lecture is the best introduction to Comp Sci (I watch it to get motivated/inspired sometimes!). What got me into Comp Sci and programming was Ableson's quote:
> So as opposed to other kinds of engineering, where the constraints on what you can build are the constraints of physical systems . . . the constraints imposed in building large software systems are the limitations of our own minds.
Just made it feel limitless, because it really can be.
Also I am surprised that for "Expert" they recommend Coursera, edX, Udacity... but no books. In my experience, most "video courses" tend to be aimed at beginners or intermediates, with a few awesome exceptions like the Algorithms courses in Coursera and some on edX. Still though, I believe the most interesting and "Expert"-level knowledge of Comp Sci and programming is in dead tree format. But I guess it's hard to pick a few books to recommend.
I just remember the one c programming book I spent hours reading memorizing the std libraries... All of the string functions and how I'd write int main over and over again...
In my opinion a modern equivalent of messing with programming at school would be Racket. There are couple of awesome books `Realm of Racket`[1] and `How to Design Program`. Realm of Racket introduce programming by writing games. Its actually very easy to write interactive programs with this framework called big-bang. Matthias Felleison recently spoke about it on Strange Loop[3]
Unlike BASIC though, Racket no toy language. It's very powerful and expressive. Its a Scheme dialect btw.
I occasionally spend some time contributing to a Racket-JS compiler called Whalsong. Whatever games you write in Racket using big-bang can run on your browser. Checkout some examples here http://bigbang.ccs.neu.edu/search?q=%23stevelikes
I would hope it's messing with the browser console. Most "learn to code" literature that I come across still seems focused on unixy input-output type programs. I think there's an underestimated market of people who would be interested in programming if it were easier to see where the rubber hits the road and "programs" become "software." Being able to deconstruct what would otherwise be a sleek and opaque media experience seems like a good place to start with that.
Many people have ideas for websites, they are facing them everyday, and it should feel pretty cool because you make something that you can share and the Web is not the huge mystery anymore. You know how it works now!
HTML5 games are also a great alternative (technically, it's still Web but it's really different from a typical web site). There are easy to use great frameworks like Phaser where you can develop the first platformer game in an evening/day/weekend (depending on experience) and no knowledge about graphics etc doesn't get in the way. As a nice bonus, it's ridiculously easy to deploy and share with friends. Just drag and drop the the files on FTP and it Just Works. Can't say the same about python or ruby.
In contrast, when you develop a unixy command line application to calculate the area or volume of something... Nowhere near.
For me it is the browser. I learned on Apple II, Atari 800, TRS-80, and Commodore 64 in the early 80s. It wasn't until I used modern HTML that I felt the same feelings I felt back then. Type some stuff in see it run immediately. No build chain or compile step. It just goes.
Even better it works everywhere. Make something interesting and share it with your friends in momments. Unlike native I don't have to care what platform my friends are using .
Of course in also willing to believe maybe that's the wrong place for today. Just like I don't have to build my own computer from breadboards a lot of kids are starting at a much higher level with things like Unity and they're doing great thugs building on top of a large platform of features instead of reinventing the wheel
35 years ago, I learned with David Ahl's books. I knew nothing, but I could type in what was on the pages and make cool stuff happen on my computer. This engaged my interest and eventually I went on to learning 6502 assembler, register maps, etc, in a quest to do cooler and cooler stuff. I don't know if it would have happened without those books.
In trying to find something similar to pique my kids interest, I found Invent With Python to fill the bill, My kids can type it in, and cool things happen. There's a bit more structure than Basic Computer Games, in that it introduces different concepts in a more logical way, but it still captured the magic for my kids of making the computer do what they want. I'm a fan, and my kids still love to code. https://inventwithpython.com/
I wonder why there exists "computer science" but not "finance science" or "air conditioning science" or "automotive science". It makes me doubt that computer science is really a thing. Algorithms, logic, computation, electronics are covered by other more fundamental "sciences" such as mathematics, statistics, physics, etc. Is computation really justified as a scientific discipline of its own?
"Finance science" would probably be economics. HVAC and automotive engineering are intermediary disciplines that involve facets from various science and engineering fields.
That the software industry is anti-scientific does not mean there is not a computer science.
> we don't make hypotheses and don't do experiments.
I don't formally write them down (unless it's a particularly complex case), but during debugging and performance tweaking I find myself making hypotheses and experiments all the time (according to the lay definitions of those words, at least)
Meh. "Automotive science" was cleverly branded as "mechanical engineering". "Financial science" is "financial engineering" or if you're less keen on making money, "economics".
Besides, the exact fields and their delineations are largely arbitrary. They're just historical artifacts. Why is there a line between math and statistics? Where did "applied math" as a separate field come from?
We could just go all European and call CS "informatics". After all, that's probably the best description of the field: it's the study of information. If not for historical and social reasons, I'd say that CS was a superset of math, not the other way around. "Computer" is just the name we give to the whole class of physical tools we use to study information.
> I'd say that CS was a superset of math, not the other way around. "Computer" is just the name we give to the whole class of physical tools we use to study information.
Then you'd be ignoring that a whole mess of math is not, in fact, computable (axiom of choice, law of excluded middle, etc). I think the problem is way too many "computer scientists" are pretty much software engineers.
I am not ignoring any of that. Nothing says that you can't work with non-constructive logic in a programming language, or analyze non-constructive logics as programming languages. In fact that can be extremely useful although it's also, at present, difficult and not super common.
The things you listed are extremely close to one of the foundational fields of CS, namely programming language theory. It's funny that you should bring up the law of the excluded middle because I learned a lot about it by studying PL theory: did you know that adding callCC to your typed lambda calculus turns it from a constructive logic system to a classical one? And that double negation translation is just a CPS transform which, at least for me, is a heck of a lot easier to reason about than proof theory directly?
Everything in math is, at least in theory, provable. Provable in a discrete system (ie a formal logic) even if it's reasoning about something that isn't discrete. So there's nothing fundamental stopping us from doing exactly the same proofs in a formal system that a computer can understand. Oh, say, a programming language.
Of course, with current technology, it's difficult from a practical standpoint, but there's nothing fundamental stopping us. And ideally it's something we should do to ward off errors and also to create proof artifacts that can be analyzed and manipulated systematically.
Wouldn't static analysis for mathematical proofs be great? Or papers written as libraries so that relying on a lemma literally links against the proof it was first defined in.
Seriously, if you dive into PL theory you'll see that the line separating CS from math doesn't really exist except as a social and technological phenomenon. (Lots of things are fundamentally possible but too difficult to do in reality, at least right now.)
Dude, I'm a grad student in categorical logic and I've worked with PLT. That's why I used them as an example. To formalize most math, the simply typed lambda calculus won't do, you need dependent types. But the logic used in math is almost always extensional, and type checking an extensional type theory isn't computable. Huge chunks of math, from analysis to chaos theory, are simply not computable.
Computer Science is one of the purest of maths; It is where much of set theory, graph theory and basically all of algorithmics belongs. That Software Engineering and Information Technology are so often lumped into it (or taught instead of it) is a failure of schools and a historical artifact.
With Facebook's Tech Prep, you too can create shiny monstrosities that chug while trying to scroll on an i7 with the very latest JS engine!
It's tied in with McKinsey because they hate programmers. They hate the fact that the firms they're raiding and "advising" are currently having to pay people a living wage to build and fix their systems. They want to flood the market with a bunch of cheap framework cut-and-paste developers and flood the culture with a bunch of inch-deep strivers [1]. Meanwhile, the McKinsey always-be-closing Powerpoint jockeys will bring the "real ideas". Does somebody have to keep bringing this up every time one of these "get people who never bothered to understand programming on their own to understand programming" articles gets posted?
For intermediate programmers they are recommending a terrible book full of fake reviews by a scammy author (I purchased the book earlier in the year and returned it). Were any of these recommendations vetted?
Given recent other posts about trying to get women and minorities in to tech the first thing I saw was the background marketing. Facebook is very good with data and I wonder if they can quantify a positive result. It felt forced, I didn't even notice the text I just kept scrolling around looking at all the photos. I didn't see anyone that looked like me, it all felt too social and nothing at all like programming. Not one felt cubicle, nothing I've seen over years of coding.
Considering I've spent my life seeing people that looked like me everywhere I look in the field of CS, I'm happy there's an effort to highlight the fact that CS also includes people who _don't_ look like me.
I think the coding community has been effectively convincing people like you and me to pick up coding for years now. This website is a great initiative to convince the types of people we haven't been effectively reaching.
I agree with the forced feeling. Also odd to me, looking through the "Community & Events" there aren't any opportunities listed for a white males. Every organization and event listed is for women and minorities.
White males are not already an underserved demographic. White men don't need yet another resource catered to them; tech is already doing a fantastic job of being full of them.
40 comments
[ 3.3 ms ] story [ 90.0 ms ] threadWithout having dug into it much, I quite like it. There are definitely a lot of resources out there to learn, and - regardless of how true it is - feeling like a resource is the _right_ one for you probably helps.
But it's often pretty hard to find out which books are worth reading, of all the books that have been published in the last 30 years, are any still germaine to modern programming?
I tend to prefer books because just listening to a video about something does not work for me (especially when it's just a guy talking), a book with a bunch of exercices and ideally a corriger really allows you to learn at your leasure (and are much more portable than a video on a mooc site)
I wonder, though, what is the modern equivalent of messing with BASIC after school? It certainly isn't Coding for Dummies is it? Would it be messing with the browser console? Messing with Python?
On a side note, I still think the beginning of the first SICP lecture is the best introduction to Comp Sci (I watch it to get motivated/inspired sometimes!). What got me into Comp Sci and programming was Ableson's quote:
> So as opposed to other kinds of engineering, where the constraints on what you can build are the constraints of physical systems . . . the constraints imposed in building large software systems are the limitations of our own minds.
Just made it feel limitless, because it really can be.
Also I am surprised that for "Expert" they recommend Coursera, edX, Udacity... but no books. In my experience, most "video courses" tend to be aimed at beginners or intermediates, with a few awesome exceptions like the Algorithms courses in Coursera and some on edX. Still though, I believe the most interesting and "Expert"-level knowledge of Comp Sci and programming is in dead tree format. But I guess it's hard to pick a few books to recommend.
Unlike BASIC though, Racket no toy language. It's very powerful and expressive. Its a Scheme dialect btw.
I occasionally spend some time contributing to a Racket-JS compiler called Whalsong. Whatever games you write in Racket using big-bang can run on your browser. Checkout some examples here http://bigbang.ccs.neu.edu/search?q=%23stevelikes
[1] http://www.amazon.com/Realm-Racket-Learn-Program-Game/dp/159...
[2] http://www.ccs.neu.edu/home/matthias/HtDP2e/
[3] https://www.youtube.com/watch?v=ayoofXuKqMY
Many people have ideas for websites, they are facing them everyday, and it should feel pretty cool because you make something that you can share and the Web is not the huge mystery anymore. You know how it works now!
HTML5 games are also a great alternative (technically, it's still Web but it's really different from a typical web site). There are easy to use great frameworks like Phaser where you can develop the first platformer game in an evening/day/weekend (depending on experience) and no knowledge about graphics etc doesn't get in the way. As a nice bonus, it's ridiculously easy to deploy and share with friends. Just drag and drop the the files on FTP and it Just Works. Can't say the same about python or ruby.
In contrast, when you develop a unixy command line application to calculate the area or volume of something... Nowhere near.
Even better it works everywhere. Make something interesting and share it with your friends in momments. Unlike native I don't have to care what platform my friends are using .
Of course in also willing to believe maybe that's the wrong place for today. Just like I don't have to build my own computer from breadboards a lot of kids are starting at a much higher level with things like Unity and they're doing great thugs building on top of a large platform of features instead of reinventing the wheel
In trying to find something similar to pique my kids interest, I found Invent With Python to fill the bill, My kids can type it in, and cool things happen. There's a bit more structure than Basic Computer Games, in that it introduces different concepts in a more logical way, but it still captured the magic for my kids of making the computer do what they want. I'm a fan, and my kids still love to code. https://inventwithpython.com/
That the software industry is anti-scientific does not mean there is not a computer science.
I don't formally write them down (unless it's a particularly complex case), but during debugging and performance tweaking I find myself making hypotheses and experiments all the time (according to the lay definitions of those words, at least)
Besides, the exact fields and their delineations are largely arbitrary. They're just historical artifacts. Why is there a line between math and statistics? Where did "applied math" as a separate field come from?
We could just go all European and call CS "informatics". After all, that's probably the best description of the field: it's the study of information. If not for historical and social reasons, I'd say that CS was a superset of math, not the other way around. "Computer" is just the name we give to the whole class of physical tools we use to study information.
Economics is about modelling behaviour (be it macro or micro), it has nothing to do with making money.
Then you'd be ignoring that a whole mess of math is not, in fact, computable (axiom of choice, law of excluded middle, etc). I think the problem is way too many "computer scientists" are pretty much software engineers.
The things you listed are extremely close to one of the foundational fields of CS, namely programming language theory. It's funny that you should bring up the law of the excluded middle because I learned a lot about it by studying PL theory: did you know that adding callCC to your typed lambda calculus turns it from a constructive logic system to a classical one? And that double negation translation is just a CPS transform which, at least for me, is a heck of a lot easier to reason about than proof theory directly?
Everything in math is, at least in theory, provable. Provable in a discrete system (ie a formal logic) even if it's reasoning about something that isn't discrete. So there's nothing fundamental stopping us from doing exactly the same proofs in a formal system that a computer can understand. Oh, say, a programming language.
Of course, with current technology, it's difficult from a practical standpoint, but there's nothing fundamental stopping us. And ideally it's something we should do to ward off errors and also to create proof artifacts that can be analyzed and manipulated systematically.
Wouldn't static analysis for mathematical proofs be great? Or papers written as libraries so that relying on a lemma literally links against the proof it was first defined in.
Seriously, if you dive into PL theory you'll see that the line separating CS from math doesn't really exist except as a social and technological phenomenon. (Lots of things are fundamentally possible but too difficult to do in reality, at least right now.)
It's tied in with McKinsey because they hate programmers. They hate the fact that the firms they're raiding and "advising" are currently having to pay people a living wage to build and fix their systems. They want to flood the market with a bunch of cheap framework cut-and-paste developers and flood the culture with a bunch of inch-deep strivers [1]. Meanwhile, the McKinsey always-be-closing Powerpoint jockeys will bring the "real ideas". Does somebody have to keep bringing this up every time one of these "get people who never bothered to understand programming on their own to understand programming" articles gets posted?
[1] Disclaimer: I am merely foot-deep.
Which prompts me to recommend my favorite book on management consulting, the life, the legends, the myths:
http://www.amazon.com/Management-Myth-Debunking-Business-Phi...
The book... http://www.amazon.com/Programming-Success-Day-Beginners-Effi...
How did it make you feel?
I think the coding community has been effectively convincing people like you and me to pick up coding for years now. This website is a great initiative to convince the types of people we haven't been effectively reaching.
Computer science is not about computers, it's not about code either. It's about ideas! Ideas, related to computations.
Here is a great Ted-talk from Simon Peyton Jones that explains this very well https://www.youtube.com/watch?v=Ia55clAtdMs