11 ms·
Why MIT uses Python instead of Scheme for its undergraduate CS program (2009)
- dang 8y agoLots of previous discussions: https://hn.algolia.com/?query=mit%20python%20scheme%20points%3E10&sort=byDate&dateRange=all&type=story&storyText=false&prefix=false&page=0 https://hn.algolia.com/?query=mit%20python%20scheme%20points...
- ng12 8y ago> However, he did say that starting off with python makes an undergraduate’s initial experiences maximally productive in the current environment. I read this as "the parents paying tuition wanted their kids to learn practical skills so they can make money". I learned Scheme as a first language and I will be forever grateful for it.
- seanmcdirmid 8y agoIf it was any other school than MIT I might agree, but since it’s MIT I doubt that is what the parents are thinking.
- deleted 8y ago[deleted]
- malloryerik 8y agoDo you think that "How to Design Programs"[1] is the best intro book? Should it be followed by SICP[2]? [1] https://htdp.org/ https://htdp.org/ [2] https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html https://mitpress.mit.edu/sites/default/files/sicp/full-text/...
- mlazos 8y agoI really like htdp, it was used for a bit in my intro class as well, but that curriculum also covered concepts that weren’t from the book. I also have been forever grateful for being taught scheme as my first language. Previous discussion on HN about the second addition: https://news.ycombinator.com/item?id=14932552 https://news.ycombinator.com/item?id=14932552 EDIT: I feel like it is not all-encompassing but it is a good start. It is definitely unique in the concepts that it covers.
- ng12 8y agoI think both are valuable: HTDP is the better intro but SICP scales further. For me an ideal CS101 course would be 3/4ths HTDP with a "best of" SICP tacked on at the end.
- DonHopkins 8y agoIf the parents are really that concerned about their kids learning the wrong first programming language in college, then they're not helicoptering enough! Why didn't they teach their kids to program JavaScript or Logo when they were in middle or elementary school? https://snap.berkeley.edu https://snap.berkeley.edu https://bjc.berkeley.edu https://bjc.berkeley.edu
- mroche 8y agoPython was my first, but the computer science course at my university uses Scheme for one of its primary required courses. Really kicked my ass with man-handling recursion and lambdas to no end. Implementing trees (usually binary) gave me a hell of a time. I got so sick of opening DrRacket by the end of the semester. That being said, I did respect the course and the language. I didn’t understand the science part of computer science before starting the minor and that course opened my eyes pretty wide (as did the Data Structures course). It really forces you to think and understand what you were doing, much less poking and prodding (different from trial and error) than what you could do with Python and its libraries. Plus there’s significantly less information out there on it in comparison. I wouldn’t bring parents into it, they have almost no influence on universities unless they are privately funding/donating. But my god those parentheses...
- peatmoss 8y agoI learned Python long before touching anything like a lisp, and the closest thing to functional programming that I’d done before touching a lisp was R. All self-taught, usually in the service of something else I wanted to do. I have no formal training in CS. And so my use of Racket is simply as a dilettante. And I LOVE it. I have a lot of imposter syndrome and not really grokking data structures the way CS people can tell you the tradeoffs and implementation details of a B-tree. But, I LOVE coding in Racket when I get the chance. For me, it’s a language where I can jank-hack things together like Python, but having more fun. Wonder if that’s because I never had the fun of Racket sullied by also having to learn data structures and CS fundamentals at the same time?
- ng12 8y ago> It really forces you to think and understand what you were doing, much less poking and prodding This is exactly what I look back on so fondly. I already had a lifetime of fiddling with libraries and stack overflow ahead of me, exploring pure computation was a completely eye-opening experience.
- curun1r 8y agoSame here. When I learned programming at UC Berkeley in the 90s, Scheme was the intro language. It was perfect precisely because it was so far from being the kind of language you'd use to engineer large projects. The first day, the professor spent less than half of the period introducing the entire syntax of the language...it's so damn simple. Beyond that, all learning was abstraction, problem solving and CS concepts. It was learning how to take a very limited set of primitives and construct a larger whole. I pity the MIT students that will waste so much of their intro course learning what is a vastly more complex language. There will be so many students that will struggle to learn python-specific topics that are irrelevant to learning the act of coding and may decide that CS and programming just aren't for them. Scheme is such a perfect language for this task because it puts so little between the student and the crucial experimentation phase that can instill a fascination/curiosity with programming. And now MIT students will miss out on that.
- Santosh83 8y ago> It was learning how to take a very limited set of primitives and construct a larger whole. By this measure C should be a popular university intro language too, but it is famously unsuitable as a first language, at least according to academics.
- southerndrift 8y agoOn the one hand, Scheme has an even smaller set of primitives than C. On the other hand, it's far more difficult to construct the larger whole from those primitives. Additionally, you have all the problems from the compiler when you have to manage libraries, include and object files. With some guidance when students are stuck with the compiler, C is not such a bad language to learn programming, but it doesn't hit the same sweet spot as Scheme.
- JonathanMerklin 8y ago> There will be so many students that will struggle to learn python-specific topics that are irrelevant to learning the act of coding Correct me if I'm wrong - I just went to an unrespected state school - but I would think that the MIT admissions filter selects for students who wouldn't particularly struggle with something as small as language idiosyncracies, especially in an introductory course.
- karmasimida 8y agoI learned Python as my first TRUE(explain later) language and I will be forever grateful for it. Now I am a polyglot, jumping through multiple languages all the time, be it Python/Java/Javascript, or occasionally flirtation with some languages that are foreign to my daily routine but necessary to get my job done. I am not quite on board with you claim that Python is chosen for monetary benefits. To be a qualified programmer, there is so much more need to be learnt beyond Python. Python however, is a GREAT choice to overcome the initial fear of writing code in general, because it is more tolerant. My actual first language is C, and before my college I have never done programming before. I have to say, looking back, learning C as my first language without fully understanding the modern computer architecture is a horrible experience: so many questions as to why things is what it is now, so many traps, crazy pointers, cryptic errors, nightmare segmentfault. Programming is just very frustrating experience to me that the time. Of course, later on, it all makes sense, even pointer seems like a great idea(you can't have more freedom than that), just that we need to put great efforts regulating the use of it to prevent irregular behaviors. On the other hand, Python is a tolerant language, yet providing a pretty comprehensive sets of primitives to play and experiment with. Had I started with Python, I might not waste the initial year struggling and questioning myself whether I could program at all.
- southerndrift 8y agoCompared to C, Python is the better choice. However, it seems like you haven't learned a Lisp dialect. I would love to know if you would still prefer Python once you know Scheme.
- pfalcon 8y ago> I would love to know if you would still prefer Python once you know Scheme. I did. Actually, when I found Python (some 20 years ago), I thought - "Here's it - Lisp for real world".
- pmoriarty 8y agoI have to agree. Scheme is so much more elegant and so much simpler than Python. People often talk about how simple Python is, but many of them have either no experience with or no appreciation for Scheme. When they do have exposure to Scheme, it tends to be some ancient, primitive dialect like MIT Scheme rather than modern, full-featured scheme like Chicken, or Racket, or Guile -- so they look at Scheme as a toy language. I don't know how often I've heard comments along the lines of Scheme being a fine academic language but impractical for real work. Python does have a little nice lispyness to it, but it's deliberately limited by the language designers, the syntax is lacking and it has many frustrating inconsistencies and gotchas. Programming in Scheme is just so much easier.
- sreeramvenkat 8y agoScheme is not my first language and I am still greatful for it. I am self learning SICP for past 3 years (after working 15+ years in non-lisp languages). Though still in chapter 2, it has cleared up and simplified my thinking about programming. I no longer consider bottoms up approach to be sin. Understanding new functional language specs becomes a breeze and it 'just clicks'. Though I am yet to understand why Clojure could not implement tail recursion without the 'recur' keyword.
- samatman 8y agoThis was a limitation of the JVM. I vaguely recall one of the recent updates removed that limitation, but could be wrong about that.
- michaelmrose 8y agoThey could for all cases where recur is presently used. Recur serves to indicate and document that the function is supposed to be tail recursive and will cause an error if this is not proper rather than silently not being optimized and blowing up when fed too large an input.
- munificent 8y agoCounter-point: Everyone is grateful for our formative experiences because those experiences shape our identity, and we're obviously heavily emotionally invested in who we are. But we highly overvalue which formative experiences matter. If I were to get into a time machine, go into your past, remove Scheme and swap in some other language, you'd probably be grateful today for whatever that other language was. It just hit you at the right time, like whatever song was on the radio when you first fell in love. Every step on our path is dear to us because it got us where we are today, but there are many many paths and little reason to want others to follow in our footsteps. If anything, we should discourage that because the world doesn't need another me or you. It's already got those.
- hopler 8y agoThis is exactly it. Nostalgia is overpowering.
- crazy_monkey 8y agoNo, no, no... you got it all wrong... They should be using COBOL...
- revskill 8y agoI think it's because if,then,else in Python is less verbose than LISP family language.
- DonHopkins 8y agoFor it is intro??! Edit: Never mind, its good now. ;)
- ggm 8y agoI think scheme was better educationally but harder pedagogy. It requires a french metric tonne of time and contact time and patience to get some ideas through. I speak as one who did FORTRAN 74 first and tried to learn LISP self taught. Talking to others who did LISP first, what they did is recapitulate the instantiation of fundamental data structures and algorithm concepts while we just made 10x over engineered battering Rams out of rusty iron bars. Python3 (which I live in btw) doesn't exactly exude it's functional elements beyond the simple lamda you have to import from functools so recursive solutions don't lend themselves to it syntactically speaking, inherently in the language. OTOH those battering rams come in handy for beating simple problems into submission.
- heyjudy 8y agoYes, exactly. I think there's basically only three ways to teach EECS: stack top-down, bottom-up or as-needed/random. If students learned bottom-up, starting at silicon, they'd have a firm grasp, and be more mindful, of practical system capabilities. Python and such would either be a starting crutch or a last learned. Just like Scheme, a learning language, we had a learning OS: MINIX 2. Such constrained environments are easier to teach but less relevant in the real world, but the valuable part is the mastery of concepts is portable across technological fashions... it instills a confidence that playing with the Linux or FreeBSD kernel doesn't because it's so overwhelming to all novices, rather unlike a minimal working example. Furthermore, because of the bifurcations in tech, fewer people have even seen a server much less racked a datacenter floor up, or understand assembly or C. This is concerning if academia is mostly producing CS students narrowly focused on web FE/BE.
- stealthcat 8y agobasically instead of building your own pipelines and valves and pumps and reservoirs, etc. from scratch, today those thing are already available and proven to be working. so you only need to learn to be a plumber.
- jeromebaek 8y agoCan someone from MIT confirm that only Python is taught in the MIT intro to cs class? We also teach SICP as the intro to cs class at Berkeley (cs61a.org), and we start with Python, but then change to scheme by the latter half of the semester.
- Ar-Curunir 8y agoAFAIK the switch to Scheme is not complete, no? You're still writing Python for the most part.
- _chris_ 8y ago10 years ago; I'd really like to hear a post-mortem of this decision. For context, MIT's previous EECS curriculum began with 4 required courses for all EE and CS majors. This meant that EEs had to suffer through Scheme, and CS'ers had to suffer through circuits. I'm sure everyone has their own opinion on whether this is a good thing or a bad thing. Regardless, the EECS department switched to a new 7(?) "core" class format in which students choose 4(?), giving students the freedom to take more relevant courses to their interests/major. In this switch, 6.001 (scheme) was out and replaced with a more hands-on robotics-based Python lab class. I can't really say which approach is better, but I do think there's an important place for the more pure "thinking" computer science classes too, even if it's not the first class taught to freshmen.
- brians 8y agoI hire people coming from this program. I can no longer rely on students understanding control systems, having read Leveson's therac paper, having worked with a notebook-style REPL (I.e., something stressful to model exactly in your head, promoting confusion, leading to notes and comments and structure.) The near-total demise of Athena matters here too. I can and do hire people with all those skills! It’s still very possible to get them at MIT. It’s just not nearly the default, and since it’s way up in electives I’m at least as likely to find the best people carrying a degree that says 21W as VI-3. I don’t envy the VI admins. They have a problem akin to that of a suddenly virally successful startup. 400 people a year come in; about that many better succeed.
- blhack 8y agoI couldn't be more thankful that python was one of my first languages, and this is something that I've passed on to everybody I've ever mentored. Python is a real language that does real things, but it's also completely approachable to a newbie. If programming seems hard, then you have a bad teacher that is probably just trying to evangelize their hobby to you. And god help anybody that tries to start with JavaScript.
- _hardwaregeek 8y agoI don't get why people hate on starting with JavaScript. Since ES6, JS strikes a really nice balance between practical usage and theoretical value. Like Scheme it's a dynamically typed language focused around a single data structure (list for Scheme, object for JS), with first class functions. Sure, it has weak typing and there's some scoping complexity. But, that's a completely reasonable tradeoff for being one of the most useful languages in the entire world. Not to mention, JS's weird casting issues are not as common as people make them out to be and const/let solves a lot of the scoping problems.
- blhack 8y agoBecause programming should be descriptive to what you want the computer to do, and the way that humans explain things to each other is usually linear. For instance: brush your teeth, then put on your clothes, then get in the car, then start it. The "JavaScript" way to do this is that starting your car is somehow nested inside of the brush your teeth event. Everything is a callback of everything else, so trying to explain to your computer what you want it to do ends up as a giant spaghetti mess. Obviously there is a JavaScript way of thinking that allows you to think of brushing your teeth as a dependency to starting your car, but I don't think that this is how most humans think by default, so it's a terrible way to teach students. It makes them think that computers are these complicated things that take some immense skill to operate, but they're not anymore. You just need to tell the machine what to do, and good languages like python make that really easy. At this point in my life, I'm mostly writing C++, JavaScript, and golang, but I'm extremely thankful that I started with python. When I need to bang out a prototype, or test something in code, it is always my go to.
- alexashka 8y agoAs someone who's read SICP when first starting out and re-reading it and re-watching the lectures much much later - I can say that 95% of the value of SICP flew completely over my head when I was first learning. I remembered catch phrases like 'assignment is bad', only to be led down the 'functional programming' cult years later because it reminded me of sicp. Building up entire systems from first principles is quite beautiful and illuminating - once you've used existing systems and began to wonder how they came to be. For most people - I don't think they're really that curious. University is not structured to give you the time to go deep or be curious - you're busy doing assignments, readings and studying for tests. SICP is a gem for those who are lucky to have a few months to really go down the rabbit hole. For everyone else, it'll likely feel like needless torture or 'wow, that's cool and I don't have time to explore it any further' at best.
- white-flame 8y ago> University is not structured to give you the time to go deep or be curious - you're busy doing assignments, readings and studying for tests. That statement, while true, should anguish the heart of anybody in any way related to or concerned for academia.
- bb88 8y agoUndergraduate coursework has always been that way. Especially in any truly competitive environment. You do, however, get that time when you write a master's thesis.
- jackalo 8y agoPerl or bust.
- jancsika 8y agoI like to imagine Lazy University, where the committee meets and immediately standardizes on somebody's offhand remark that the intro course should use Javascript because it's probably running on every device the students are using. Or, replace Javascript with any other high level language likely to be running on every smartphone. If there are competing offhanded suggestions then bonus lazy points for using a random number generator to decide the winner. Only when the committee meeting is over do Lazy U. profs begin planning how to teach their classes. And there's more time for that since the Lazy U. committee meeting was an order of magnitude shorter than most. (Although the laziness would probably be recursive and result in the elimination of the lecture, lab, geographic proximity to students, and assignments that can be distinguished from publicly accessible repositories full of code and research.)
- Santosh83 8y agoI contend that within reason, it really doesn't matter exactly which language happens to be one's very first programming language. Programming is ideally motivated by passion, and in that case, a person is certainly not going to give up and change career just because their intro language was a bit inconsistent or rocky. Anyone who gives up programming before at least being fluent in three languages, is giving up prematurely. This doesn't mean assembler or brainfuck is okay as a first language (although the former was the 2nd langauge I taught myself and its reputation for difficulty is vastly exaggerated in my opinion), but it does mean that endless discussions about whether Python is better than Javascript or C is better than Lisp is probably splitting hairs.
- bb88 8y ago> it really doesn't matter exactly which language happens to be one's very first programming language. I'm not so sure. Here's an example of blinking an led with Lisp: http://www.technoblogy.com/show?1GX1 http://www.technoblogy.com/show?1GX1 And here's one using python: https://www.modmypi.com/blog/gpio-and-python-39-blinking-led https://www.modmypi.com/blog/gpio-and-python-39-blinking-led If I were my 12 year old me, I would probably enjoy the second more than the first.
- pdonis 8y ago> within reason, it really doesn't matter exactly which language happens to be one's very first programming language I agree with this, but I'm not sure how many of the students taking the MIT course in question are learning their very first programming language there. Now if we were talking about a secondary school course...
- taneq 8y agoAssembler is arguably a better intro language than most. It makes it explicitly clear what each step of the programming does and how it executes. Once students have done a few projects the they'll be ready to appreciate a higher level language like C. Throwing objects and lambdas and type inference at kids without giving them any grounding in what a computer actually is and does is unfair, and leaves them building castles in the sky.
- zodiakzz 8y agoI just wish there was a simple way to serve web pages in Python like PHP, without having to learn a whole framework/stack/templating language.
- tiglionabbit 8y agoFlask is not bad.
- brianberns 8y agoPython makes sense for engineering, like building robots, where practicality is the most important goal. However, Python is a lousy choice for computer science, where clarity and correctness are much more important. It saddens me that an elite institution like MIT apparently can't see the difference.
- bb88 8y agoTo be fair, I think many people expect that a BS degree in either computer science or engineering would make them employable.
- brianberns 8y agoSure, but the emphasis is different. Someone with a CS degree should understand both theory and practice. Someone with an engineering degree doesn't need much theory. FWIW, I have a CS degree, and my job is mostly engineering, but using a sound theoretical approach to problems has saved me many times. On the other hand, I've worked with several good programmers over the years who didn't have a college degree at all.
- bb88 8y agoAbout 15 years ago companies stopped hiring people that could grow into a space, and started hiring people that could immediately work in one.
- pbreit 8y agoBetter question is why they'd use the completely impractical scheme in the first place.
- hopler 8y agoBecause it was intro to computer science, not intro to computer practicalities
- makecheck 8y agoI love Python for a lot of things but I’ve come to realize how complex it can really be. I regularly see others write Python code that I have to fix to add robustness. I also run "pylint" or equivalent tools before committing major changes to scripts because it is quite easy to make mistakes that won’t otherwise be found right away. Some of my least favorite pitfalls: - If you call a function that happens to refer to a variable that only exists in the calling code, it will work (and yes, since the same function can be called from more than one place, “caller” is not always the same so the effect is not always the same). Bonus points if it only matches the caller because of a typo. Any convenience afforded by this behavior is not worth the potential for head-scratching and painful debugging. - Python has things that “seem” like the obvious/right thing to do when they are not. One great example is "except:", which to this day I have to keep correcting in various scripts to prevent important errors from being completely lost. Another one is expecting to write the entire script at column 0, when people are supposed to know 'if __name__ == "__main__"'. Also, a type’s apparent shared/unique status is not always clear so novices can get a long way with sort-of working code until they are completely confused by the broken cases (e.g. you can simply list and “initialize” class fields with trivial string and number values until one day you add something like a "dict()" and everything breaks for that one field because all your class instances are mysteriously sharing it; suddenly you need to define a whole new "__init__()" to fix things when it wasn’t apparently needed previously). - It is not always obvious to maintainers of functions that keyword arguments are extremely fragile and that they can overlap with other arguments. If an argument is renamed or relocated for example, stuff elsewhere can break in stupid ways. Tiny code changes can create big headaches.
- duckerude 8y ago>If you call a function that happens to refer to a variable that only exists in the calling code, it will work This is not true. This code gives a NameError instead of printing "1": def f1(): print(var) def f2(): var = 1 f1() f2() If it can't find a name in the local scope, it will look in enclosing functions, then the module scope, then the builtins. But it will never look inside the caller's scope unless the function is defined in the caller's scope. Python's implicit scoping can be confusing, but it's not quite that bad.
- xte 8y agoBullshit translator: mean intelligence of newcomers becomes so low that we have to lower our programs or only veeeeery few can attend them. And we need more students so more money. Disagree? Say thanks to all school reforms in the past 30-40-50 years. A bit of extras: in today world we can't produce really anything new due to managerial-driven society and beside that it's better people do NOT really understand how things work to avoid not only embarrassments but also potential idea to radically wipe out certain kind of business models. So better saying: you can't understand the big picture! Keep play with thing Bigs&powerful give you, they came directly from the nature do not worry about it. Sorry to have made few "potential-flamey comments" in a row but reasons written in the article have really no other meaning to my eyes. That's not intended to be political or flamebait, it's simply what I see. I do NOT start with scheme, I discovered it years after and I even do not love it too much due to it's n-th implementation incompatibilities, srfi and "sparse" documentation... But when I discover lisp-like languages in general I see a completely different world and really change my mind. Guile scheme, even with the lacks of libraries etc it's now one of my preferred way to express concepts. Also as per explanation I can't accept as engineer and even as a citizen to make thing, under my responsibility, with my signature etc that I do not really understand. This kind of idea is simply the exact opposite of engineering.
- akhilcacharya 8y ago> mean intelligence of newcomers becomes so low that we have to lower our programs or only veeeeery few can attend them. And we need more students so more money. Disagree? Say thanks to all school reforms in the past 30-40-50 years. uh, you know this is about MIT right? A school that has seen its acceptance rate dwindle to nearly 7%?
- xte 8y agoYep, and I also see few of their on-line filmed lectures and form my present opinion... I'm European so I came from a really different (older/less reformed) school system and I'm old enough to see how it's change. I also casually interact with USA people and my conclusion is simple: having really poor schools "because there is college after" it can't really work. I see in EU, reform after reform, how unprepared become high-school students and how hard, if not impossible, universities try to "recover" them changing their programs. In the USA this phenomenon it's extreme so even with a super-low acceptance rate results have to be also extreme. You simply can't get smart but ignorant people and in few years transform them in high-skilled and acculturated guys. Being smart help of course, but learn require time. The better you start, early, the better you'll end up after.
- gamma-male 8y agoI had to learn scheme in uni, everyone hated it. It scared me away from functionnal programming languages for years until I understood that parenthesis are not necessarily tied to FL and cool FL exist like erlang or ocaml.
- harrisonjackson 8y agoOne of the best electives I took in my CSE program was Art in Code. We covered Processing and Arduino and the only required textbook was Making Things Talk. https://www.amazon.com/Making-Things-Talk-Practical-Connecting/dp/0596510519 https://www.amazon.com/Making-Things-Talk-Practical-Connecti... These tools were designed to be accessible to non-programmers and had our entire cross-disciplinary class making games, interacting with hardware, and getting inspired to find new ways to interact with computers. I wish this class had been required by every first-year CSE student.
- Pica_soO 8y agoI wish there was a UnitTest built into every library you use, where the library tests your program, whether the attaching program can handle all special cases. APIs today are not standardized in what they do and that is horrifying. These Unittests built into every library should be the default.
- craigsmansion 8y agoThe article mentions Prof. Sussman in "the great macro debate". This reminded me of a phrasing I once read, but never quite understood, in the "acknowledgement" section of the R4RS Macro appendix: "Hal Abelson contributed by holding this report hostage to the appendix on macros". Can anybody who was/is closer to the subject matters explain what this entails?
- zmmmmm 8y agoI feel like Python is too half baked to be a really good language to teach fundamentals. By "half baked" I mean - sort of supports functional programming, but not really. Sort of supports object oriented design, but not really. Sort of allows type system theory to be taught, but not really. So many sort ofs. It's a great language if you just want to get someone cranking some code. But if I wanted a language to be a base from which I could explore all the corners of computing I'd think else might make more sense (and having written that I can't really think of a good one - Scala in theory, but in practice it's awfully complex to get started in).
- BerislavLopac 8y agoWait, don't all these "sort ofs" make it actually an ideal tool for teaching the basics? I mean, we're talking about basics, so what you're saying is that you can teach the basics of a number of different paradigms with one language.
- garmaine 8y agoIt's very hard to teach the value of some approach if you can only see it implemented half-way.
- craigsmansion 8y ago> what you're saying is that you can teach the basics of a number of different paradigms with one language. I don't know about Python, but that is one of the delights of SICP and scheme in general. It's not that there isn't a OO implementation in scheme; it's that there are too many. Implementing an OO system is a medium-advanced exercise left to the reader. As a result there are many available, up to the point one wonders if "OO" can be rightfully coined "a paradigm". Constraint based/logic programming? I think it's a chapter in SICP, and covered by one of the SICP video lectures showing how to build a simple prolog-like language to illustrate some other concept Type systems? This one is a little funny. There's a SICP lecture on it (the recordings are from the 80s), and I thought it was an unfortunate choice of name, since "type systems" are a real and important concept now in modern computer languages and the naming would clash, but no, it actually was an implementation of a type system as we now use the term. I think one of the reasons scheme doesn't have "a lot of stuff" is because most stuff, if well understood, is trivial. If it doesn't seem trivial, one simply doesn't have a deep enough understanding of the concepts yet. One of the things about using scheme effectively as a teaching language is that it puts the wizardry in the actual wizard, not in the magic box with the blinkenlights.
- b3b0p 8y agoWhere I went to school, they didn't teach programming at all. First day, first class, if I remember correctly, the teacher walks up in front of the class and says something like, "Computer science is the design and implementation of algorithms..." and finishes with saying they won't teach us any programming. The assignments must be implemented in C and run on campus computers. There are optional, zero credit labs to get help learning to program or get help with homework held by the TA's. I went to one lab, the lab computers and all campus computers were running Slackware with Afterstep. I was a Window Maker and Red Hat user at the time, I was impressed and thought it was neat. Of course this is from memory and 18 years ago almost to the day, but that's the gist of it. Anyway, I felt like I learned a ton and loved it every bit. I went to a few of the CS club meetings and got the impression basically every one had already had internships with Intel, IBM, or Microsoft. This was my freshmen year and was basically in awe.
- qwerty456127 8y ago> Then, what generaly happened was a programmer would think for a really long time, and then write just a little bit of code, and in practical terms, programming involved assembling many very small pieces Oh how I bloody want to do jut this today. I want my program to be split into as small parts as possible, every part (i.e. every function) being defined in a separate file. But Python encourages the direct opposite - writing long files of code to avoid introducing too many "modules" and this is a debilitating headache. > At some point along the way (he may have referred to the 1990’s specifically), the systems that were being built and the libraries and components that one had available to build systems were so large, that it was impossible for any one programmer to be aware of all of the individual pieces, never mind understand them. Thanks to my ADHD it is very hard to me to fit anything that doesn't fit in half a screen into my mind. The longer a module growth the lower my productivity falls.
- jasonpeacock 8y ago> But Python encourages the direct opposite - writing long files of code to avoid introducing too many "modules" and this is a debilitating headache. How does Python encourage mega-files? AFAIK there's nothing that prevents nor discourages proper organization of code into files. I frequently use multiple files to organize my library implementations.
- qwerty456127 8y agoJust some clues: A class definition can not be split in many files (e.g. in C# you can do this easily with "partial class" declaration and that's amazing, needless to say you can and almost always do split one module (a namespace) into many flies there). Whatever you put in a separate file you will have to import manually everywhere you use it and you have to care about circular imports. You have to invent names all the time, a package, a module and a function having the same name smells a headache. The C# namespaces definition system could be made even better than it is already (i.e. by allowing class-free functions directly inside namespaces) but it already feels just so much better than Python "module = file" model.
- 8y ago